Path: blob/main/japanese/FreeWnn-server/files/patch-Wnn-conv-cvt_key.c
16461 views
Index: Wnn/conv/cvt_key.c1===================================================================2RCS file: /home/cvs/private/hrs/freewnn/Wnn/conv/cvt_key.c,v3retrieving revision 1.1.1.14retrieving revision 1.25diff -u -p -r1.1.1.1 -r1.26--- Wnn/conv/cvt_key.c 20 Dec 2008 07:13:30 -0000 1.1.1.17+++ Wnn/conv/cvt_key.c 20 Dec 2008 15:22:37 -0000 1.28@@ -65,172 +65,165 @@9extern struct CONVCODE tbl[];10extern int cnv_tbl_cnt; /* convert table count */1112-13- /** int������ h ��ӥåȥ٥����Ȥߤʤ�����i�ӥåȤ�����å����뤤��Ω�Ƥ� */14+/** int������ h ��ӥåȥ٥����Ȥߤʤ�����i�ӥåȤ�����å����뤤��Ω�Ƥ� */15#define BITONP(h, i) (h[i / BITSIZ] & (1 << (i % BITSIZ)))16#define BITOFP(h, i) (!BITONP(h, i))17#define BIT_UP(h, i) (h[i / BITSIZ] |= (1 << (i % BITSIZ)))18#define BITDWN(h, i) (h[i / BITSIZ] &= ~(1 << (i % BITSIZ)))1920- /** �Ѵ������ɤΥ����å��ȥ������Ѵ� */21+/** �Ѵ������ɤΥ����å��ȥ������Ѵ� */22int23-key_check (inbuf, conv_tbl, tbl_cnt, check_flg)24- int inbuf[]; /* ���������ȥ�� */25- struct CONVCODE conv_tbl[]; /* �������Ѵ��ơ��֥� */26- int tbl_cnt;27- int check_flg[];28+key_check (int inbuf[], /* ���������ȥ�� */29+ struct CONVCODE conv_tbl[], /* �������Ѵ��ơ��֥� */30+ int tbl_cnt,31+ int check_flg[])32{33- int dist, base;34- char *code_p;35- int i;36-37- for (base = 0; inbuf[base] != -1; base++)38- {39- for (dist = 0; dist < tbl_cnt; dist++)40- {41- if (BITONP (check_flg, dist) && conv_tbl[dist].fromkey != 0)42- {43- code_p = conv_tbl[dist].fromkey + base;44- if (*code_p == (char) inbuf[base])45- {46- if (*(code_p + 1) == (char) 0)47- {48- /* �ޥå����� */49- for (i = 0, base++; (inbuf[i] = inbuf[base]) != -1; i++, base++);50- return (conv_tbl[dist].tokey);51- }52- /* �ޤ��ޥå����Ƥ��ʤ� */53- }54- else55- {56- BITDWN (check_flg, dist); /* ̵�� */57- }58- }59- }60- }61-62- /* �ӥåȥ٥��� check_flg[] ����0��tblcnt�ӥåȤ�Ω�ä��ޤĤäƤ���63- ��Τ����뤫Ĵ�٤롣 */64- for (i = 0; i < tbl_cnt / BITSIZ; i++)65- {66- if (check_flg[i])67- return (-1);68- }69- if ((tbl_cnt %= BITSIZ) && (check_flg[i] & ~(~0 << tbl_cnt)))70- return (-1);71- /* return -1 �� �ޤ�̤�����ʪ������ */72+ int dist, base;73+ char *code_p;74+ int i;75+76+ for (base = 0; inbuf[base] != -1; base++) {77+ for (dist = 0; dist < tbl_cnt; dist++) {78+ if (BITONP (check_flg, dist) && conv_tbl[dist].fromkey != 0) {79+ code_p = conv_tbl[dist].fromkey + base;80+81+ if (*code_p == (char) inbuf[base]) {82+ if (*(code_p + 1) == (char) 0) {83+ /* �ޥå����� */84+ for (i = 0, base++; (inbuf[i] = inbuf[base]) != -1; i++, base++);85+ return (conv_tbl[dist].tokey);86+ }87+ /* �ޤ��ޥå����Ƥ��ʤ� */88+ } else {89+ /* ̵�� */90+ BITDWN (check_flg, dist);91+ }92+ }93+ }94+ }95+96+ /* �ӥåȥ٥��� check_flg[] ����0��tblcnt�ӥåȤ�Ω�ä��ޤĤäƤ���97+ ��Τ����뤫Ĵ�٤롣 */98+99+ for (i = 0; i < tbl_cnt / BITSIZ; i++) {100+ if (check_flg[i])101+ return (-1);102+ }103+104+ if ((tbl_cnt %= BITSIZ) && (check_flg[i] & ~(~0 << tbl_cnt)))105+ return (-1);106+ /* return -1 �� �ޤ�̤�����ʪ������ */107108- return (-2); /* �Ѵ��оݤȤʤ�ʪ�Ϥʤ� */109+ /* �Ѵ��оݤȤʤ�ʪ�Ϥʤ� */110+ return (-2);111}112113- /** ���ꤵ�줿�Ѵ��ơ��֥�˽��äƥ������Ѵ����롣*/114+/** ���ꤵ�줿�Ѵ��ơ��֥�˽��äƥ������Ѵ����롣*/115int116-convert_key (inkey, conv_tbl, tbl_cnt, matching_flg, in_buf)117- int (*inkey) (); /* �������ϴؿ� */118- struct CONVCODE conv_tbl[]; /* �Ѵ��ơ��֥� */119- int tbl_cnt; /* conv_tbl[] �θĿ� */120- int matching_flg; /* �ޥå����ʤ��ä����ȥ�ν�������121- 0 : ���ͤȤ����֤�122- 1 : ���Υ��ȥ�ϼΤƤ� */123- char *in_buf;124+convert_key (int (*inkey)(), /* �������ϴؿ� */125+ struct CONVCODE conv_tbl[], /* �Ѵ��ơ��֥� */126+ int tbl_cnt, /* conv_tbl[] �θĿ� */127+ int matching_flg, /* �ޥå����ʤ��ä����ȥ�ν�������128+ 0 : ���ͤȤ����֤�129+ 1 : ���Υ��ȥ�ϼΤƤ� */130+ char *in_buf)131{132#define MAX 20 /* �������ϥХåե��κ����� */133134- static int inbuf[MAX]; /* �������ϥХåե� */135- /* �Хåե��ν�ü�ϡ�-1 �Ǽ�����롣 */136-137- int out_cnt; /* ���ϥХåե��ν��ϥ������ */138-139- static int buf_cnt = 0; /* inbuf �����ϻ��Υ����� */140-141- int check_flg[CHANGE_MAX];142- /* �ӥåȥ٥����Ȥ��ư���졢�ޥå������оݤȤʤäƤ���conv_tbl[]143- ����1�λ��оݤȤʤꡢ0�����о� */144-145- int i, c, flg = 0; /* work */146-147- for (i = 0; i < div_up (tbl_cnt, BITSIZ); check_flg[i++] = ~0);148- /* ����check_flg��ӥåȥ٥�����������������0��tbl_cnt �ӥåȤ�Ω�Ƥ롣149- â�����ºݤϤ��ξ�����ޤ�Ω�� */150-151- for (;;)152- {153- if (flg != 0 || buf_cnt == 0)154- {155- inbuf[buf_cnt] = (*inkey) (); /* ��ʸ������ */156- in_buf[buf_cnt] = (char) (inbuf[buf_cnt] & 0xff);157- if (inbuf[buf_cnt] == -1)158- {159- if (buf_cnt > 0)160- {161- c = -2; /* �����ॢ���� */162- goto LABEL;163- }164- else165- {166- continue;167- }168- }169- else170- {171- inbuf[++buf_cnt] = -1; /* �����ߥ͡��� */172- }173- }174- flg++;175-176- if (buf_cnt >= MAX - 1)177- {178- in_buf[0] = '\0';179- return (-1); /* ERROR */180- }181-182- c = key_check (inbuf, conv_tbl, tbl_cnt, check_flg);183- LABEL:184- switch (c)185- {186- case -1: /* ̤���� */187- continue;188-189- case -2: /* �Ѵ��оݤǤʤ����Ȥ����ꤷ�� */190- buf_cnt--;191- out_cnt = 0;192- c = inbuf[out_cnt++];193- for (i = 0; inbuf[i] != -1; inbuf[i++] = inbuf[out_cnt++]);194- if (matching_flg != 0)195- {196- flg = 0;197- continue;198- }199- in_buf[0] = '\0';200- return (c);201-202- default: /* �Ѵ����줿������ */203- in_buf[buf_cnt] = '\0';204- buf_cnt = 0;205- return (c);206- }207- }208+ /* �������ϥХåե� */209+ /* �Хåե��ν�ü�ϡ�-1 �Ǽ�����롣 */210+ static int inbuf[MAX];211+212+ /* ���ϥХåե��ν��ϥ������ */213+ int out_cnt;214+215+ /* inbuf �����ϻ��Υ����� */216+ static int buf_cnt = 0;217+218+219+ /* �ӥåȥ٥����Ȥ��ư���졢�ޥå������оݤȤʤäƤ���conv_tbl[]220+ ����1�λ��оݤȤʤꡢ0�����о� */221+ int check_flg[CHANGE_MAX];222+223+ /* work */224+ int i, c, flg = 0;225+226+ for (i = 0; i < div_up (tbl_cnt, BITSIZ); check_flg[i++] = ~0);227+ /* ����check_flg��ӥåȥ٥�����������������0��tbl_cnt �ӥåȤ�Ω�Ƥ롣228+ â�����ºݤϤ��ξ�����ޤ�Ω�� */229+230+ for (;;) {231+ if (flg != 0 || buf_cnt == 0) {232+ inbuf[buf_cnt] = (*inkey) (); /* ��ʸ������ */233+ in_buf[buf_cnt] = (char) (inbuf[buf_cnt] & 0xff);234+ if (inbuf[buf_cnt] == -1) {235+ if (buf_cnt > 0) {236+ c = -2;237+ /* �����ॢ���� */238+ goto LABEL;239+ } else {240+ continue;241+ }242+ } else {243+ /* �����ߥ͡��� */244+ inbuf[++buf_cnt] = -1;245+ }246+ }247+ flg++;248+249+ if (buf_cnt >= MAX - 1) {250+ in_buf[0] = '\0';251+252+ /* ERROR */253+ return (-1);254+ }255+256+ c = key_check (inbuf, conv_tbl, tbl_cnt, check_flg);257+258+ LABEL:259+ switch (c) {260+ case -1:261+ /* ̤���� */262+ continue;263+264+ case -2:265+ /* �Ѵ��оݤǤʤ����Ȥ����ꤷ�� */266+ buf_cnt--;267+ out_cnt = 0;268+ c = inbuf[out_cnt++];269+ for (i = 0; inbuf[i] != -1; inbuf[i++] = inbuf[out_cnt++]);270+271+ if (matching_flg != 0) {272+ flg = 0;273+ continue;274+ }275+276+ in_buf[0] = '\0';277+ return (c);278+279+ default:280+ /* �Ѵ����줿������ */281+ in_buf[buf_cnt] = '\0';282+ buf_cnt = 0;283+ return (c);284+ }285+ }286}287288/** �������Ѵ���ȼ���������ϴؿ� */289int290-keyin1 (get_ch, in_buf)291- int (*get_ch) (); /* getchar() ��Ʊ�ͤδؿ� */292- char *in_buf;293+keyin1(int (*get_ch)(), /* getchar() ��Ʊ�ͤδؿ� */294+ char *in_buf)295{296- int ret;297+ int ret;298299- for (;;)300- {301- if (cnv_tbl_cnt == 0)302- {303- ret = (*get_ch) ();304- if (ret >= 0)305- return (ret);306- }307- else308- {309- return (convert_key (get_ch, tbl, cnv_tbl_cnt, 0, in_buf));310- }311- }312+ for (;;) {313+ if (cnv_tbl_cnt == 0) {314+ ret = (*get_ch)();315+ if (ret >= 0)316+ return (ret);317+ } else {318+ return (convert_key(get_ch, tbl, cnv_tbl_cnt, 0, in_buf));319+ }320+ }321}322323324