Index: test/randkeystroke.c =================================================================== --- test/randkeystroke.c (revision 1038) +++ test/randkeystroke.c (revision 1048) @@ -46,6 +46,7 @@ printf( "usage: randkeystroke [-r] [-n num] [-h]\n" \ "\t -r - total random\n" \ "\t -n num - generate num keystrokes\n" + "\t -s seed - random seed\n" "\t -h - help\n" ); } @@ -63,6 +64,9 @@ nk = atoi( argv[i] ); } else if ( ! strcmp( argv[i], "-r" ) ) { total_random = 1; + } else if ( ! strcmp( argv[i], "-s" ) ) { + if ( ++i < argc ) + srand( atoi( argv[i] ) ); } else if ( ! strcmp( argv[i], "-h" ) ) { usage(); return 0; @@ -71,7 +75,7 @@ if (total_random) { for ( i = 0; i < nk; i++ ) { n = rand() % (n_nkeys + n_okeys); - if ( n > n_nkeys ) + if ( n >= n_nkeys ) printf( "%s", other_keys[n - n_nkeys] ); else printf( "%c", normal_keys[n] ); @@ -97,4 +101,5 @@ return 0; } -/* vim: noet */ +/* vim: noet + */ Index: python/chewing.py =================================================================== --- python/chewing.py (revision 1038) +++ python/chewing.py (revision 1048) @@ -2,9 +2,11 @@ from functools import partial _libchewing = CDLL('libchewing.so.3') -_libchewing.chewing_handle_Default.argtypes = [c_void_p, c_char] _libchewing.chewing_commit_String.restype = c_char_p _libchewing.chewing_buffer_String.restype = c_char_p +_libchewing.chewing_cand_String.restype = c_char_p +_libchewing.chewing_zuin_String.restype = c_char_p +_libchewing.chewing_aux_String.restype = c_char_p def Init(datadir, userdir): return _libchewing.chewing_Init(datadir, userdir) Index: src/tree.c =================================================================== --- src/tree.c (revision 1038) +++ src/tree.c (revision 1048) @@ -285,25 +285,16 @@ for ( i = begin; i <= end; i++ ) { for ( child = tree[ tree_p ].child_begin; - child <= tree[ tree_p ].child_end; + child != -1 && child <= tree[ tree_p ].child_end; child++ ) { -#ifdef USE_BINARY_DATA - /** - * This is a workaround to prevent access violation. - * - * Sometimes, child < 0 and tree[ child ] refer to an invalid - * address for unknown reason.This could be a bug of libchewing. - * This serious bug was discovered by seamxr. - */ - if ( child < 0 || child * sizeof(TreeType) > tree_size ) - return -1; -#endif + assert(0 <= child && child * sizeof(TreeType) < tree_size); + if ( tree[ child ].phone_id == phoneSeq[ i ] ) break; } /* if not found any word then fail. */ - if ( child > tree[ tree_p ].child_end ) + if ( child == -1 || child > tree[ tree_p ].child_end ) return -1; else { tree_p = child; Index: src/mod_aux.c =================================================================== --- src/mod_aux.c (revision 1038) +++ src/mod_aux.c (revision 1048) @@ -90,7 +90,7 @@ if ( ctx->output->zuinBuf[ i ].s[ 0 ] != '\0' ) { strcat( s, (char *) (ctx->output->zuinBuf[ i ].s) ); if ( zuin_count ) - *zuin_count++; + (*zuin_count)++; } } return s; Index: scripts/gen-tabe-diff.sh =================================================================== --- scripts/gen-tabe-diff.sh (revision 1038) +++ scripts/gen-tabe-diff.sh (revision 1048) @@ -1,19 +0,0 @@ -#!/bin/sh - -if [ ! -f scripts/gen-tabe-diff.sh ]; then - echo -e "\033[44;37m You *MUST* run this script in top dir. \033[m" - exit -fi - -if [ ! -f data/tabe-tsi.src ]; then - echo -e "\033[44;37m tabe-tsi.src not found. Try to generate. \033[m" - sh ./scripts/cvsup-tsi-src.sh -fi - -# compare -sort data/tsi.src | cut --delimiter=' ' -f1 > /tmp/orig-tsi -sort data/tabe-tsi.src | cut --delimiter=' ' -f1 > /tmp/tabe-tsi -diff -u /tmp/orig-tsi /tmp/tabe-tsi > tabe-tsi.diff -rm -f /tmp/orig-tsi /tmp/tabe-tsi - -echo -e "\033[44;37m Please check out tabe-tsi.diff \033[m" Index: scripts/tsi-chewing.diff =================================================================== --- scripts/tsi-chewing.diff (revision 1038) +++ scripts/tsi-chewing.diff (revision 1048) @@ -1,51 +0,0 @@ ---- tsidump.c 2004-05-12 23:30:19.000000000 +0800 -+++ tsidump-chewing.c 2004-05-12 23:29:12.000000000 +0800 -@@ -65,32 +65,23 @@ - } - i++; - len = strlen((char *)tsi->tsi)/2; -- fprintf(fp, "%s", tsi->tsi); -- if (ref) { -- fprintf(fp, " %ld", tsi->refcount); -- } - if (tsiyin) { - ZuYinSymbolSequence zs = NULL; -- int begin = 0; - -- fprintf(fp, " "); - for (j = 0; j < tsi->yinnum; j++) { -+ if (len > 7) -+ continue; -+ fprintf(fp, "%s %ld\t", tsi->tsi, tsi->refcount); - for (k = 0; k < len; k++) { - zs = tabeYinToZuYinSymbolSequence(tsi->yindata[j*len+k]); - if (zs) { -- if (begin) { -- fprintf(fp, "¡@"); -- } -- else { -- begin = 1; -- } -- fprintf(fp, "%s", zs); -+ fprintf(fp, "%s ", zs); - free(zs); - } - } -+ fprintf(fp, "\n"); - } - } -- fprintf(fp, "\n"); - } - - db->Close(db); -@@ -109,8 +100,8 @@ - char *db_name, *op_name; - - db_name = op_name = (char *)NULL; -- ref = 0; -- tsiyin = 0; -+ ref = 1; -+ tsiyin = 1; - - while ((ch = getopt(argc, argv, "d:f:ry")) != -1) { - switch(ch) { Index: scripts/cvsup-tsi-src.sh =================================================================== --- scripts/cvsup-tsi-src.sh (revision 1038) +++ scripts/cvsup-tsi-src.sh (revision 1048) @@ -1,48 +0,0 @@ -#!/bin/sh - -TOP=`pwd` -TABE_TSI=$TOP/data/tabe-tsi.src - -if [ ! -f scripts/cvsup-tsi-src.sh ]; then - echo -e "\033[44;37m You *MUST* run this script in top dir. \033[m" - exit -fi -if [ -f $TABE_TSI ]; then - echo -e "\033[44;37m tabe-tsi.src done. \033[m" - exit -fi - -if [ ! -d libtabe ]; then - echo -e "\033[44;37m No libtabe found. cvs check from libtabe \033[m" - cvs -z9 -d :pserver:xcin@xcin.linux.org.tw:/home/service/cvsroot/xcin \ - checkout libtabe -fi - -if [ ! -d libtabe ]; then - echo -e "\033[44;37m There were some problems while checking out. \033[m" - exit -fi - -pushd libtabe -./configure -if [ -f Makefile ]; then - make clean all - - # patch tsidump to adapt Chewing - pushd util - if [ ! -f PATCHED ]; then - patch -p0 < $TOP/scripts/tsi-chewing.diff - touch PATCHED - fi - make - - # generation - if [ -f tsidump ]; then - ./tsidump -d ../tsi-src/tsi.db > $TABE_TSI - fi - popd -fi -popd - -rm -rf libtabe -