summaryrefslogtreecommitdiff
path: root/japanese/FreeWnn-server/files/patch-Wnn-etc-revdic.c
diff options
context:
space:
mode:
Diffstat (limited to 'japanese/FreeWnn-server/files/patch-Wnn-etc-revdic.c')
-rw-r--r--japanese/FreeWnn-server/files/patch-Wnn-etc-revdic.c687
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);
+ }