Initial revision
[chise/kage.git] / tools / chiseperl.pl
1 # chiseperl.pl --- some useful funcions for using libchise with SWIG\r
2 #\r
3 # Copyright (C) 2005 Koichi Kamichi.\r
4 #\r
5 # global : $chise_ds, @chise_feature, @chise_ft, $chise_newid\r
6 # function : void init_chise();\r
7 #            void close_chise();\r
8 #            void update_chise();\r
9 #            void search_newid();\r
10 #            $var get_feature_value($feature, $char_id);\r
11 #            $var set_feature_value($feature, $char_id, $value);\r
12 #            $var create_new_char($feature, $value);\r
13 \r
14 use chise_tools;\r
15 use chise;\r
16 \r
17 sub init_chise{\r
18   $chise_ds = chise::CHISE_DS_open(0, $chise::chise_system_db_dir, 0, 0755);\r
19   chise_tools::listup_feature($chise_ds);\r
20   @chise_feature = split(/\n/, chise_tools::get_char($chise_tools::feature));\r
21   @chise_ft = ();\r
22   foreach(@chise_feature){\r
23     push(@chise_ft, chise::chise_ds_get_feature($chise_ds, chise_tools::get_uchar($_)));\r
24   }\r
25   $chise_newid = 0x0F0000;\r
26 }\r
27 \r
28 sub get_feature_value{ # feature, char_id -> 0 or value\r
29   if(scalar(@_) != 2){\r
30     return 0;\r
31   }\r
32   my $ft = chise::chise_ds_get_feature($chise_ds, chise_tools::get_uchar($_[0]));\r
33   chise_tools::clear_buffer;\r
34   chise::chise_char_gets_feature_value($_[1], $ft,\r
35                                        $chise_tools::buffer, $chise_tools::buffer_size);\r
36   return chise_tools::get_char($chise_tools::buffer);\r
37 }\r
38 \r
39 sub set_feature_value{ # feature, char_id, value -> result\r
40   if(scalar(@_) != 3){\r
41     return 0;\r
42   }\r
43   my $ft = chise::chise_ds_get_feature($chise_ds, chise_tools::get_uchar($_[0]));\r
44   chise::chise_char_set_feature_value($_[1], $ft, chise_tools::get_uchar($_[2]));\r
45   return 1;\r
46 }\r
47 \r
48 sub close_chise{\r
49   chise::CHISE_DS_close($chise_ds);\r
50 }\r
51 \r
52 sub create_new_char{ # feature, value -> assinged char_id\r
53   &search_newid;\r
54   &set_feature_value($_[0], $chise_newid, $_[1]);\r
55   $chise_newid++;\r
56   return $chise_newid - 1;\r
57 }\r
58 \r
59 sub search_newid{ # search new char_id and update $chise_newid\r
60   while(1){\r
61     my $found = 0;\r
62     foreach(@chise_ft){\r
63       chise_tools::clear_buffer;\r
64       chise::chise_char_gets_feature_value($chise_newid, $_, $chise_tools::buffer, $chise_tools::buffer_size);\r
65       if(length(chise_tools::get_char($chise_tools::buffer)) != 0){\r
66         $found = 1;\r
67         last;\r
68       }\r
69     }\r
70     if($found == 0){\r
71       last;\r
72     }\r
73     $chise_newid++;\r
74   }\r
75 }\r
76 \r
77 sub update_chise{ # save added data to database\r
78   foreach(@chise_ft){\r
79     chise::chise_feature_sync($_);\r
80   }\r
81 }\r
82 \r
83 1;\r