+# chiseperl.pl --- some useful funcions for using libchise with SWIG\r
+#\r
+# Copyright (C) 2005 Koichi Kamichi.\r
+#\r
+# global : $chise_ds, @chise_feature, @chise_ft, $chise_newid\r
+# function : void init_chise();\r
+# void close_chise();\r
+# void update_chise();\r
+# void search_newid();\r
+# $var get_feature_value($feature, $char_id);\r
+# $var set_feature_value($feature, $char_id, $value);\r
+# $var create_new_char($feature, $value);\r
+\r
+use chise_tools;\r
+use chise;\r
+\r
+sub init_chise{\r
+ $chise_ds = chise::CHISE_DS_open(0, $chise::chise_system_db_dir, 0, 0755);\r
+ chise_tools::listup_feature($chise_ds);\r
+ @chise_feature = split(/\n/, chise_tools::get_char($chise_tools::feature));\r
+ @chise_ft = ();\r
+ foreach(@chise_feature){\r
+ push(@chise_ft, chise::chise_ds_get_feature($chise_ds, chise_tools::get_uchar($_)));\r
+ }\r
+ $chise_newid = 0x0F0000;\r
+}\r
+\r
+sub get_feature_value{ # feature, char_id -> 0 or value\r
+ if(scalar(@_) != 2){\r
+ return 0;\r
+ }\r
+ my $ft = chise::chise_ds_get_feature($chise_ds, chise_tools::get_uchar($_[0]));\r
+ chise_tools::clear_buffer;\r
+ chise::chise_char_gets_feature_value($_[1], $ft,\r
+ $chise_tools::buffer, $chise_tools::buffer_size);\r
+ return chise_tools::get_char($chise_tools::buffer);\r
+}\r
+\r
+sub set_feature_value{ # feature, char_id, value -> result\r
+ if(scalar(@_) != 3){\r
+ return 0;\r
+ }\r
+ my $ft = chise::chise_ds_get_feature($chise_ds, chise_tools::get_uchar($_[0]));\r
+ chise::chise_char_set_feature_value($_[1], $ft, chise_tools::get_uchar($_[2]));\r
+ return 1;\r
+}\r
+\r
+sub close_chise{\r
+ chise::CHISE_DS_close($chise_ds);\r
+}\r
+\r
+sub create_new_char{ # feature, value -> assinged char_id\r
+ &search_newid;\r
+ &set_feature_value($_[0], $chise_newid, $_[1]);\r
+ $chise_newid++;\r
+ return $chise_newid - 1;\r
+}\r
+\r
+sub search_newid{ # search new char_id and update $chise_newid\r
+ while(1){\r
+ my $found = 0;\r
+ foreach(@chise_ft){\r
+ chise_tools::clear_buffer;\r
+ chise::chise_char_gets_feature_value($chise_newid, $_, $chise_tools::buffer, $chise_tools::buffer_size);\r
+ if(length(chise_tools::get_char($chise_tools::buffer)) != 0){\r
+ $found = 1;\r
+ last;\r
+ }\r
+ }\r
+ if($found == 0){\r
+ last;\r
+ }\r
+ $chise_newid++;\r
+ }\r
+}\r
+\r
+sub update_chise{ # save added data to database\r
+ foreach(@chise_ft){\r
+ chise::chise_feature_sync($_);\r
+ }\r
+}\r
+\r
+1;\r