diff options
Diffstat (limited to 'japanese/FreeWnn-server/files/patch-Wnn-etc-revdic.c')
-rw-r--r-- | japanese/FreeWnn-server/files/patch-Wnn-etc-revdic.c | 687 |
1 files changed, 687 insertions, 0 deletions
diff --git a/japanese/FreeWnn-server/files/patch-Wnn-etc-revdic.c b/japanese/FreeWnn-server/files/patch-Wnn-etc-revdic.c new file mode 100644 index 000000000000..2b9c9cbf49ec --- /dev/null +++ b/japanese/FreeWnn-server/files/patch-Wnn-etc-revdic.c @@ -0,0 +1,687 @@ +Index: Wnn/etc/revdic.c +=================================================================== +RCS file: /home/cvs/private/hrs/freewnn/Wnn/etc/revdic.c,v +retrieving revision 1.1.1.1 +retrieving revision 1.2 +diff -u -p -r1.1.1.1 -r1.2 +--- Wnn/etc/revdic.c 20 Dec 2008 07:13:30 -0000 1.1.1.1 ++++ Wnn/etc/revdic.c 20 Dec 2008 15:22:40 -0000 1.2 +@@ -5,7 +5,7 @@ + /* + * FreeWnn is a network-extensible Kana-to-Kanji conversion system. + * This file is part of FreeWnn. +- * ++ * + * Copyright Kyoto University Research Institute for Mathematical Sciences + * 1987, 1988, 1989, 1990, 1991, 1992 + * Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 1999 +@@ -35,13 +35,11 @@ + #include "jh.h" + #include "jdata.h" + +- + #ifndef min + #define min(a, b) ((a > b)? b:a) + #define max(a, b) ((a < b)? b:a) + #endif + +- + /* + * rev_ud_hontai(hostart, maxhontai) + * rev_ud_table(tary, maxtable) +@@ -51,96 +49,81 @@ + + static int tmptmp; + +-#define rev_int(x) (tmptmp = *(x), *(x) = ((tmptmp >> 24) & 0xff) | \ +- (((tmptmp >> 16) & 0xff) << 8) | \ +- (((tmptmp >> 8) & 0xff) << 16) | \ +- (((tmptmp & 0xff) << 24))) ++#define rev_int(x) (tmptmp = *(x), *(x) = ((tmptmp >> 24) & 0xff) | \ ++ (((tmptmp >> 16) & 0xff) << 8) | \ ++ (((tmptmp >> 8) & 0xff) << 16) | \ ++ (((tmptmp & 0xff) << 24))) + + #define rev_short(x) (tmptmp = *(x), *(x) = ((tmptmp >> 8) & 0xff) | \ +- ((tmptmp & 0xff) << 8)) ++ ((tmptmp & 0xff) << 8)) + + #define rev_int_org(x) (tmptmp = *(x), *(x) = ((tmptmp >> 24) & 0xff) | \ +- (((tmptmp >> 16) & 0xff) << 8) | \ +- (((tmptmp >> 8) & 0xff) << 16) | \ +- ((tmptmp & 0xff) << 24), tmptmp) ++ (((tmptmp >> 16) & 0xff) << 8) | \ ++ (((tmptmp >> 8) & 0xff) << 16) | \ ++ ((tmptmp & 0xff) << 24), tmptmp) + + #define rev_short_org(x) (tmptmp = *(x), *(x) = ((tmptmp >> 8) & 0xff) | \ +- ((tmptmp & 0xff) << 8), tmptmp) ++ ((tmptmp & 0xff) << 8), tmptmp) + ++void ++rev_ud_hontai(UCHAR *hostart, ++ int maxhontai, ++ int match /* whether the cpu type match the dictionary */ ++ ) ++{ ++ UCHAR *hoend = hostart + maxhontai; ++ struct uind2 *hop, *hop1; ++ int k; ++ int len; ++ ++ /* Skip first 4 bytes for some reason. (cf. ujistoud() in atod.c) */ ++ for (hop = (struct uind2 *)((int *) hostart + 1); (UCHAR *) hop < hoend;) { ++ rev_int(&(hop->next)); ++ rev_int(&(hop->serial)); ++ rev_int(&(hop->kanjipter)); ++ rev_short(&(hop->kosuu)); ++ ++ if (match) { ++ len = hop->yomi[0]; ++ hop1 = (struct uind2 *)(AL_INT (&(hop->yomi[0]) + 1 + max((len - 4), 0))); ++ rev_short(&(hop->yomi[0])); ++ for (k = 0; k < len - 4; k++) ++ rev_short(&(hop->yomi[k + 1])); ++ hop = hop1; ++ } else { ++ rev_short(&(hop->yomi[0])); ++ len = hop->yomi[0]; ++ for (k = 0; k < len - 4; k++) ++ rev_short(&(hop->yomi[k + 1])); ++ hop = (struct uind2 *)(AL_INT (&(hop->yomi[0]) + 1 + max((len - 4), 0))); ++ } ++ } ++} + ++void ++rev_ud_table(struct uind1 *tary, ++ int maxtable, ++ int match) ++{ ++ int k; ++ ++ for (k = 0; k < maxtable; k++) { ++ rev_int(&(tary[k].pter1)); ++ rev_int(&(tary[k].pter)); ++ rev_int(&(tary[k].yomi1)); ++ rev_int(&(tary[k].yomi2)); ++ } ++} + + void +-rev_ud_hontai (hostart, maxhontai, match) +- UCHAR *hostart; +- int maxhontai; +- int match; /* whether the cpu type match the dictionary */ +-{ +- UCHAR *hoend = hostart + maxhontai; +- struct uind2 *hop, *hop1; +- int k; +- int len; +- +- /* Skip first 4 bytes for some reason. (cf. ujistoud() in atod.c) */ +- for (hop = (struct uind2 *)((int *) hostart + 1); (UCHAR *) hop < hoend;) +- { +- rev_int (&(hop->next)); +- rev_int (&(hop->serial)); +- rev_int (&(hop->kanjipter)); +- rev_short (&(hop->kosuu)); +- if (match) +- { +- len = hop->yomi[0]; +- hop1 = (struct uind2 *) (AL_INT (&(hop->yomi[0]) + 1 + max ((len - 4), 0))); +- rev_short (&(hop->yomi[0])); +- for (k = 0; k < len - 4; k++) +- { +- rev_short (&(hop->yomi[k + 1])); +- } +- hop = hop1; +- } +- else +- { +- rev_short (&(hop->yomi[0])); +- len = hop->yomi[0]; +- for (k = 0; k < len - 4; k++) +- { +- rev_short (&(hop->yomi[k + 1])); +- } +- hop = (struct uind2 *) (AL_INT (&(hop->yomi[0]) + 1 + max ((len - 4), 0))); +- } +- } +-} +- +- +-void +-rev_ud_table (tary, maxtable, match) +- struct uind1 *tary; +- int maxtable; +- int match; +-{ +- int k; +- +- for (k = 0; k < maxtable; k++) +- { +- rev_int (&(tary[k].pter1)); +- rev_int (&(tary[k].pter)); +- rev_int (&(tary[k].yomi1)); +- rev_int (&(tary[k].yomi2)); +- } +-} +- +-void +-rev_hinsi (hinsi, maxserial, match) +- unsigned short *hinsi; +- int maxserial; +- int match; +-{ +- int k; +- +- for (k = 0; k < maxserial; k++) +- { +- rev_short (&(hinsi[k])); +- } ++rev_hinsi(unsigned short *hinsi, ++ int maxserial, ++ int match) ++{ ++ int k; ++ ++ for (k = 0; k < maxserial; k++) ++ rev_short(&(hinsi[k])); + } + + /* +@@ -154,200 +137,183 @@ void travel_next_nodes (); + void rev_sd_node (); + + void +-rev_sd_hontai0 (hopter, hostart, match) +- UCHAR *hostart; +- UCHAR *hopter; +- int match; +-{ +- if (match) +- { +- travel_next_nodes (hopter, hostart, match); +- rev_sd_node (hopter, hostart, match); +- } +- else +- { +- rev_sd_node (hopter, hostart, match); +- travel_next_nodes (hopter, hostart, match); +- } +-} +- +-void +-rev_sd_hontai (hostart, match) +- UCHAR *hostart; +- int match; +-{ +- rev_sd_hontai0 (hostart, hostart, match); +-} +- +-void +-travel_next_nodes (hopter, hostart, match) +- UCHAR *hostart, *hopter; +- int match; +-{ +- int k; +- int tsize; +- w_char *charst; +- w_char *sumst; +- int *ptrst; +- +- switch (*(unsigned short *) hopter) +- { +- case ST_NORMAL: +- tsize = *(w_char *) (hopter + 2); +- charst = (w_char *) (hopter + 12); +- sumst = ((w_char *) charst + tsize + 2); /* + 2 keeps two zero words */ +- ptrst = (int *) ((w_char *) sumst + tsize); +- for (k = 0; k < tsize; k++) +- { +- if (ptrst[k] != ENDPTR) +- { +- rev_sd_hontai0 (hostart + ptrst[k], hostart, match); +- } +- } +- break; +- case ST_NOPTER: +- break; +- case ST_NOENT: +- tsize = *(w_char *) (hopter + 2); +- charst = (w_char *) (hopter + 4); +- ptrst = (int *) AL_INT ((w_char *) charst + tsize); +- for (k = 0; k < tsize; k++) +- { +- rev_sd_hontai0 (hostart + ptrst[k], hostart, match); +- } +- break; +- case ST_SMALL: +- rev_sd_hontai0 (hopter + 4, hostart, match); +- break; +- } ++rev_sd_hontai0(UCHAR *hopter, ++ UCHAR *hostart, ++ int match) ++{ ++ if (match) { ++ travel_next_nodes(hopter, hostart, match); ++ rev_sd_node(hopter, hostart, match); ++ } else { ++ rev_sd_node(hopter, hostart, match); ++ travel_next_nodes(hopter, hostart, match); ++ } ++} ++ ++void ++rev_sd_hontai(UCHAR *hostart, ++ int match) ++{ ++ rev_sd_hontai0(hostart, hostart, match); ++} ++ ++void ++travel_next_nodes(UCHAR *hopter, ++ UCHAR *hostart, ++ int match) ++{ ++ int k; ++ int tsize; ++ w_char *charst; ++ w_char *sumst; ++ int *ptrst; ++ ++ switch (*(unsigned short *)hopter) { ++ case ST_NORMAL: ++ tsize = *(w_char *)(hopter + 2); ++ charst = (w_char *)(hopter + 12); ++ sumst = ((w_char *)charst + tsize + 2); /* + 2 keeps two zero words */ ++ ptrst = (int *)((w_char *)sumst + tsize); ++ ++ for (k = 0; k < tsize; k++) { ++ if (ptrst[k] != ENDPTR) ++ rev_sd_hontai0(hostart + ptrst[k], hostart, match); ++ } ++ break; ++ ++ case ST_NOPTER: ++ break; ++ case ST_NOENT: ++ tsize = *(w_char *)(hopter + 2); ++ charst = (w_char *)(hopter + 4); ++ ptrst = (int *)AL_INT((w_char *)charst + tsize); ++ ++ for (k = 0; k < tsize; k++) ++ rev_sd_hontai0(hostart + ptrst[k], hostart, match); ++ break; ++ case ST_SMALL: ++ rev_sd_hontai0(hopter + 4, hostart, match); ++ break; ++ } + } + + #define rev_if_short(x) (match? rev_short_org(x): rev_short(x)) + #define rev_if_int(x) (match? rev_int_org(x): rev_int(x)) + + void +-rev_sd_node (hopter, hostart, match) +- UCHAR *hostart, *hopter; +- int match; +-{ +- /* whether current state of dict matches the cpu type of the machine */ +- int k; +- int tsize; +- w_char *charst; +- w_char *sumst; +- int *ptrst; +- int state; +- +- state = rev_if_short ((unsigned short *) hopter); +- switch (state) +- { +- case ST_NORMAL: +- case ST_NOPTER: +- tsize = rev_if_short ((w_char *) (hopter + 2)); +- rev_int ((int *) (hopter + 4)); +- rev_int ((int *) (hopter + 8)); +- charst = (w_char *) (hopter + 12); +- sumst = ((w_char *) charst + tsize + 2); /* + 2 keeps two zero words */ +- ptrst = (int *) ((w_char *) sumst + tsize); +- for (k = 0; k < tsize; k++) +- { +- rev_short (charst + k); +- rev_short (sumst + k); +- } +- if (state == ST_NORMAL) +- { +- for (k = 0; k < tsize; k++) +- { +- rev_int (ptrst + k); +- } +- } +- break; +- case ST_NOENT: +- tsize = rev_if_short ((w_char *) (hopter + 2)); +- charst = (w_char *) (hopter + 4); +- ptrst = (int *) AL_INT ((w_char *) charst + tsize); +- for (k = 0; k < tsize; k++) +- { +- rev_short (charst + k); +- rev_int (ptrst + k); +- } +- break; +- case ST_SMALL: +- rev_short ((unsigned short *) (hopter + 2)); +- break; +- } ++rev_sd_node(UCHAR *hopter, ++ UCHAR *hostart, ++ int match) ++{ ++ /* whether current state of dict matches the cpu type of the machine */ ++ int k; ++ int tsize; ++ w_char *charst; ++ w_char *sumst; ++ int *ptrst; ++ int state; ++ ++ state = rev_if_short((unsigned short *) hopter); ++ ++ switch (state) { ++ case ST_NORMAL: ++ case ST_NOPTER: ++ tsize = rev_if_short((w_char *)(hopter + 2)); ++ rev_int((int *)(hopter + 4)); ++ rev_int((int *)(hopter + 8)); ++ charst = (w_char *)(hopter + 12); ++ sumst = ((w_char *)charst + tsize + 2); /* + 2 keeps two zero words */ ++ ptrst = (int *)((w_char *)sumst + tsize); ++ ++ for (k = 0; k < tsize; k++) { ++ rev_short(charst + k); ++ rev_short(sumst + k); ++ } ++ ++ if (state == ST_NORMAL) { ++ for (k = 0; k < tsize; k++) ++ rev_int (ptrst + k); ++ } ++ break; ++ ++ case ST_NOENT: ++ tsize = rev_if_short((w_char *)(hopter + 2)); ++ charst = (w_char *)(hopter + 4); ++ ptrst = (int *)AL_INT((w_char *)charst + tsize); ++ ++ for (k = 0; k < tsize; k++) { ++ rev_short(charst + k); ++ rev_int(ptrst + k); ++ } ++ break; ++ ++ case ST_SMALL: ++ rev_short((unsigned short *)(hopter + 2)); ++ break; ++ } + } + +- + int +-little_endian () ++little_endian() + { +- int a = 1; ++ int a = 1; + #ifdef BYTE_SWAP +- return (1); ++ return (1); + #else +- return (*(char *) &a == 1); ++ return (*(char *) &a == 1); + #endif + } + + void +-rev_rd_rind1 (ri1, maxri1, match) +- struct rind1 *ri1; +- int maxri1; +- int match; +-{ +- int k; +- +- for (k = 0; k < maxri1; k++) +- { +- rev_int (&(ri1[k].pter1)); +- rev_int (&(ri1[k].pter)); +- } ++rev_rd_rind1(struct rind1 *ri1, ++ int maxri1, ++ int match) ++{ ++ int k; ++ ++ for (k = 0; k < maxri1; k++) { ++ rev_int(&(ri1[k].pter1)); ++ rev_int(&(ri1[k].pter)); ++ } + } + + void +-rev_rd_rind2 (ri2, maxri2, match) +- struct rind2 *ri2; +- int maxri2; +- int match; +-{ +- int k; +- +- for (k = 0; k < maxri2; k++) +- { +- rev_int (&(ri2[k].kanjipter)); +- rev_int (&(ri2[k].next[D_YOMI])); +- rev_int (&(ri2[k].next[D_KANJI])); +- } ++rev_rd_rind2(struct rind2 *ri2, ++ int maxri2, ++ int match) ++{ ++ int k; ++ ++ for (k = 0; k < maxri2; k++) { ++ rev_int(&(ri2[k].kanjipter)); ++ rev_int(&(ri2[k].next[D_YOMI])); ++ rev_int(&(ri2[k].next[D_KANJI])); ++ } + } + + void rev_w_char (); + + void +-rev_kanji (kpter, maxk, match) +- UCHAR *kpter; +- int maxk; +- int match; +-{ +- UCHAR *kend = kpter + maxk; +- +- while (kpter < kend && *kpter) +- { +- rev_w_char ((w_char *) (kpter + 2), *kpter / 2 - 1); +- kpter += *kpter; +- } ++rev_kanji(UCHAR *kpter, ++ int maxk, ++ int match) ++{ ++ UCHAR *kend = kpter + maxk; ++ ++ while (kpter < kend && *kpter) { ++ rev_w_char((w_char *)(kpter + 2), *kpter / 2 - 1); ++ kpter += *kpter; ++ } + } + + void +-rev_w_char (p, maxp) +- w_char *p; +- int maxp; +-{ +- for (; maxp > 0; maxp--) +- { +- rev_short (p); +- p++; +- } ++rev_w_char(w_char *p, ++ int maxp) ++{ ++ for (; maxp > 0; maxp--) { ++ rev_short(p); ++ p++; ++ } + } + + /* +@@ -357,87 +323,78 @@ rev_w_char (p, maxp) + */ + + int +-revdic (jtl, match) +- struct JT *jtl; +- int match; +-{ +- extern int rev_ud (), rev_rd (), rev_sd (); +- int syurui = jtl->syurui; +- +- syurui = jtl->syurui & 0xff; +- +- if (syurui == WNN_UD_DICT) +- { +- if (rev_ud (jtl, match) == -1) +- return (-1); +- } +- else if (syurui == WNN_REV_DICT) +- { +- if (rev_rd (jtl, match) == -1) +- return (-1); +- } +- else +- { +- if (rev_sd (jtl, match) == -1) +- return (-1); +- } +- return (0); ++revdic(struct JT *jtl, ++ int match) ++{ ++ extern int rev_ud(), rev_rd(), rev_sd(); ++ int syurui = jtl->syurui; ++ ++ syurui = jtl->syurui & 0xff; ++ ++ if (syurui == WNN_UD_DICT) { ++ if (rev_ud (jtl, match) == -1) ++ return (-1); ++ } else if (syurui == WNN_REV_DICT) { ++ if (rev_rd (jtl, match) == -1) ++ return (-1); ++ } else { ++ if (rev_sd (jtl, match) == -1) ++ return (-1); ++ } ++ ++ return (0); + } + + void rev_common (); + + int +-rev_ud (jtl, match) +- struct JT *jtl; +- int match; +-{ +- rev_common (jtl, match); +- rev_ud_hontai (jtl->hontai, jtl->maxhontai, match); +- rev_ud_table (jtl->table, jtl->maxtable, match); +- return (0); ++rev_ud(struct JT *jtl, ++ int match) ++{ ++ rev_common(jtl, match); ++ rev_ud_hontai(jtl->hontai, jtl->maxhontai, match); ++ rev_ud_table(jtl->table, jtl->maxtable, match); ++ ++ return (0); + } + + int +-rev_sd (jtl, match) +- struct JT *jtl; +- int match; +-{ +- rev_common (jtl, match); +- rev_sd_hontai (jtl->hontai, match); +- return (0); ++rev_sd(struct JT *jtl, ++ int match) ++{ ++ rev_common(jtl, match); ++ rev_sd_hontai(jtl->hontai, match); ++ return (0); + } + + int +-rev_rd (jtl, match) +- struct JT *jtl; +- int match; +-{ +- rev_common (jtl, match); +- rev_rd_rind1 (jtl->ri1[D_YOMI], jtl->maxri1[D_YOMI], match); +- rev_rd_rind1 (jtl->ri1[D_KANJI], jtl->maxri1[D_KANJI], match); +- rev_rd_rind2 (jtl->ri2, jtl->maxri2, match); +- return (0); ++rev_rd(struct JT *jtl, ++ int match) ++{ ++ rev_common(jtl, match); ++ rev_rd_rind1(jtl->ri1[D_YOMI], jtl->maxri1[D_YOMI], match); ++ rev_rd_rind1(jtl->ri1[D_KANJI], jtl->maxri1[D_KANJI], match); ++ rev_rd_rind2(jtl->ri2, jtl->maxri2, match); ++ return (0); + } + + void +-rev_common (jtl, match) +- struct JT *jtl; +- int match; +-{ +- if (jtl->hinsi) +- rev_hinsi (jtl->hinsi, jtl->maxserial, match); +- if (jtl->kanji) +- rev_kanji (jtl->kanji, jtl->maxkanji, match); +- if (jtl->comment) +- rev_w_char (jtl->comment, jtl->maxcomment); +- if (jtl->hinsi_list) +- rev_w_char (jtl->hinsi_list, jtl->maxhinsi_list); ++rev_common(struct JT *jtl, ++ int match) ++{ ++ if (jtl->hinsi) ++ rev_hinsi(jtl->hinsi, jtl->maxserial, match); ++ if (jtl->kanji) ++ rev_kanji(jtl->kanji, jtl->maxkanji, match); ++ if (jtl->comment) ++ rev_w_char(jtl->comment, jtl->maxcomment); ++ if (jtl->hinsi_list) ++ rev_w_char(jtl->hinsi_list, jtl->maxhinsi_list); + } + + /* rev_short is called from atod.c.... kanapiiii */ + void +-rev_short_fun (sp) +- w_char *sp; ++rev_short_fun(w_char *sp) + { +- rev_short (sp); ++ rev_short (sp); + } |