Path: blob/main/japanese/FreeWnn-server/files/patch-Wnn-etc-revdic.c
16461 views
Index: Wnn/etc/revdic.c1===================================================================2RCS file: /home/cvs/private/hrs/freewnn/Wnn/etc/revdic.c,v3retrieving revision 1.1.1.14retrieving revision 1.25diff -u -p -r1.1.1.1 -r1.26--- Wnn/etc/revdic.c 20 Dec 2008 07:13:30 -0000 1.1.1.17+++ Wnn/etc/revdic.c 20 Dec 2008 15:22:40 -0000 1.28@@ -5,7 +5,7 @@9/*10* FreeWnn is a network-extensible Kana-to-Kanji conversion system.11* This file is part of FreeWnn.12- *13+ *14* Copyright Kyoto University Research Institute for Mathematical Sciences15* 1987, 1988, 1989, 1990, 1991, 199216* Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 199917@@ -35,13 +35,11 @@18#include "jh.h"19#include "jdata.h"2021-22#ifndef min23#define min(a, b) ((a > b)? b:a)24#define max(a, b) ((a < b)? b:a)25#endif2627-28/*29* rev_ud_hontai(hostart, maxhontai)30* rev_ud_table(tary, maxtable)31@@ -51,96 +49,81 @@3233static int tmptmp;3435-#define rev_int(x) (tmptmp = *(x), *(x) = ((tmptmp >> 24) & 0xff) | \36- (((tmptmp >> 16) & 0xff) << 8) | \37- (((tmptmp >> 8) & 0xff) << 16) | \38- (((tmptmp & 0xff) << 24)))39+#define rev_int(x) (tmptmp = *(x), *(x) = ((tmptmp >> 24) & 0xff) | \40+ (((tmptmp >> 16) & 0xff) << 8) | \41+ (((tmptmp >> 8) & 0xff) << 16) | \42+ (((tmptmp & 0xff) << 24)))4344#define rev_short(x) (tmptmp = *(x), *(x) = ((tmptmp >> 8) & 0xff) | \45- ((tmptmp & 0xff) << 8))46+ ((tmptmp & 0xff) << 8))4748#define rev_int_org(x) (tmptmp = *(x), *(x) = ((tmptmp >> 24) & 0xff) | \49- (((tmptmp >> 16) & 0xff) << 8) | \50- (((tmptmp >> 8) & 0xff) << 16) | \51- ((tmptmp & 0xff) << 24), tmptmp)52+ (((tmptmp >> 16) & 0xff) << 8) | \53+ (((tmptmp >> 8) & 0xff) << 16) | \54+ ((tmptmp & 0xff) << 24), tmptmp)5556#define rev_short_org(x) (tmptmp = *(x), *(x) = ((tmptmp >> 8) & 0xff) | \57- ((tmptmp & 0xff) << 8), tmptmp)58+ ((tmptmp & 0xff) << 8), tmptmp)5960+void61+rev_ud_hontai(UCHAR *hostart,62+ int maxhontai,63+ int match /* whether the cpu type match the dictionary */64+ )65+{66+ UCHAR *hoend = hostart + maxhontai;67+ struct uind2 *hop, *hop1;68+ int k;69+ int len;70+71+ /* Skip first 4 bytes for some reason. (cf. ujistoud() in atod.c) */72+ for (hop = (struct uind2 *)((int *) hostart + 1); (UCHAR *) hop < hoend;) {73+ rev_int(&(hop->next));74+ rev_int(&(hop->serial));75+ rev_int(&(hop->kanjipter));76+ rev_short(&(hop->kosuu));77+78+ if (match) {79+ len = hop->yomi[0];80+ hop1 = (struct uind2 *)(AL_INT (&(hop->yomi[0]) + 1 + max((len - 4), 0)));81+ rev_short(&(hop->yomi[0]));82+ for (k = 0; k < len - 4; k++)83+ rev_short(&(hop->yomi[k + 1]));84+ hop = hop1;85+ } else {86+ rev_short(&(hop->yomi[0]));87+ len = hop->yomi[0];88+ for (k = 0; k < len - 4; k++)89+ rev_short(&(hop->yomi[k + 1]));90+ hop = (struct uind2 *)(AL_INT (&(hop->yomi[0]) + 1 + max((len - 4), 0)));91+ }92+ }93+}9495+void96+rev_ud_table(struct uind1 *tary,97+ int maxtable,98+ int match)99+{100+ int k;101+102+ for (k = 0; k < maxtable; k++) {103+ rev_int(&(tary[k].pter1));104+ rev_int(&(tary[k].pter));105+ rev_int(&(tary[k].yomi1));106+ rev_int(&(tary[k].yomi2));107+ }108+}109110void111-rev_ud_hontai (hostart, maxhontai, match)112- UCHAR *hostart;113- int maxhontai;114- int match; /* whether the cpu type match the dictionary */115-{116- UCHAR *hoend = hostart + maxhontai;117- struct uind2 *hop, *hop1;118- int k;119- int len;120-121- /* Skip first 4 bytes for some reason. (cf. ujistoud() in atod.c) */122- for (hop = (struct uind2 *)((int *) hostart + 1); (UCHAR *) hop < hoend;)123- {124- rev_int (&(hop->next));125- rev_int (&(hop->serial));126- rev_int (&(hop->kanjipter));127- rev_short (&(hop->kosuu));128- if (match)129- {130- len = hop->yomi[0];131- hop1 = (struct uind2 *) (AL_INT (&(hop->yomi[0]) + 1 + max ((len - 4), 0)));132- rev_short (&(hop->yomi[0]));133- for (k = 0; k < len - 4; k++)134- {135- rev_short (&(hop->yomi[k + 1]));136- }137- hop = hop1;138- }139- else140- {141- rev_short (&(hop->yomi[0]));142- len = hop->yomi[0];143- for (k = 0; k < len - 4; k++)144- {145- rev_short (&(hop->yomi[k + 1]));146- }147- hop = (struct uind2 *) (AL_INT (&(hop->yomi[0]) + 1 + max ((len - 4), 0)));148- }149- }150-}151-152-153-void154-rev_ud_table (tary, maxtable, match)155- struct uind1 *tary;156- int maxtable;157- int match;158-{159- int k;160-161- for (k = 0; k < maxtable; k++)162- {163- rev_int (&(tary[k].pter1));164- rev_int (&(tary[k].pter));165- rev_int (&(tary[k].yomi1));166- rev_int (&(tary[k].yomi2));167- }168-}169-170-void171-rev_hinsi (hinsi, maxserial, match)172- unsigned short *hinsi;173- int maxserial;174- int match;175-{176- int k;177-178- for (k = 0; k < maxserial; k++)179- {180- rev_short (&(hinsi[k]));181- }182+rev_hinsi(unsigned short *hinsi,183+ int maxserial,184+ int match)185+{186+ int k;187+188+ for (k = 0; k < maxserial; k++)189+ rev_short(&(hinsi[k]));190}191192/*193@@ -154,200 +137,183 @@ void travel_next_nodes ();194void rev_sd_node ();195196void197-rev_sd_hontai0 (hopter, hostart, match)198- UCHAR *hostart;199- UCHAR *hopter;200- int match;201-{202- if (match)203- {204- travel_next_nodes (hopter, hostart, match);205- rev_sd_node (hopter, hostart, match);206- }207- else208- {209- rev_sd_node (hopter, hostart, match);210- travel_next_nodes (hopter, hostart, match);211- }212-}213-214-void215-rev_sd_hontai (hostart, match)216- UCHAR *hostart;217- int match;218-{219- rev_sd_hontai0 (hostart, hostart, match);220-}221-222-void223-travel_next_nodes (hopter, hostart, match)224- UCHAR *hostart, *hopter;225- int match;226-{227- int k;228- int tsize;229- w_char *charst;230- w_char *sumst;231- int *ptrst;232-233- switch (*(unsigned short *) hopter)234- {235- case ST_NORMAL:236- tsize = *(w_char *) (hopter + 2);237- charst = (w_char *) (hopter + 12);238- sumst = ((w_char *) charst + tsize + 2); /* + 2 keeps two zero words */239- ptrst = (int *) ((w_char *) sumst + tsize);240- for (k = 0; k < tsize; k++)241- {242- if (ptrst[k] != ENDPTR)243- {244- rev_sd_hontai0 (hostart + ptrst[k], hostart, match);245- }246- }247- break;248- case ST_NOPTER:249- break;250- case ST_NOENT:251- tsize = *(w_char *) (hopter + 2);252- charst = (w_char *) (hopter + 4);253- ptrst = (int *) AL_INT ((w_char *) charst + tsize);254- for (k = 0; k < tsize; k++)255- {256- rev_sd_hontai0 (hostart + ptrst[k], hostart, match);257- }258- break;259- case ST_SMALL:260- rev_sd_hontai0 (hopter + 4, hostart, match);261- break;262- }263+rev_sd_hontai0(UCHAR *hopter,264+ UCHAR *hostart,265+ int match)266+{267+ if (match) {268+ travel_next_nodes(hopter, hostart, match);269+ rev_sd_node(hopter, hostart, match);270+ } else {271+ rev_sd_node(hopter, hostart, match);272+ travel_next_nodes(hopter, hostart, match);273+ }274+}275+276+void277+rev_sd_hontai(UCHAR *hostart,278+ int match)279+{280+ rev_sd_hontai0(hostart, hostart, match);281+}282+283+void284+travel_next_nodes(UCHAR *hopter,285+ UCHAR *hostart,286+ int match)287+{288+ int k;289+ int tsize;290+ w_char *charst;291+ w_char *sumst;292+ int *ptrst;293+294+ switch (*(unsigned short *)hopter) {295+ case ST_NORMAL:296+ tsize = *(w_char *)(hopter + 2);297+ charst = (w_char *)(hopter + 12);298+ sumst = ((w_char *)charst + tsize + 2); /* + 2 keeps two zero words */299+ ptrst = (int *)((w_char *)sumst + tsize);300+301+ for (k = 0; k < tsize; k++) {302+ if (ptrst[k] != ENDPTR)303+ rev_sd_hontai0(hostart + ptrst[k], hostart, match);304+ }305+ break;306+307+ case ST_NOPTER:308+ break;309+ case ST_NOENT:310+ tsize = *(w_char *)(hopter + 2);311+ charst = (w_char *)(hopter + 4);312+ ptrst = (int *)AL_INT((w_char *)charst + tsize);313+314+ for (k = 0; k < tsize; k++)315+ rev_sd_hontai0(hostart + ptrst[k], hostart, match);316+ break;317+ case ST_SMALL:318+ rev_sd_hontai0(hopter + 4, hostart, match);319+ break;320+ }321}322323#define rev_if_short(x) (match? rev_short_org(x): rev_short(x))324#define rev_if_int(x) (match? rev_int_org(x): rev_int(x))325326void327-rev_sd_node (hopter, hostart, match)328- UCHAR *hostart, *hopter;329- int match;330-{331- /* whether current state of dict matches the cpu type of the machine */332- int k;333- int tsize;334- w_char *charst;335- w_char *sumst;336- int *ptrst;337- int state;338-339- state = rev_if_short ((unsigned short *) hopter);340- switch (state)341- {342- case ST_NORMAL:343- case ST_NOPTER:344- tsize = rev_if_short ((w_char *) (hopter + 2));345- rev_int ((int *) (hopter + 4));346- rev_int ((int *) (hopter + 8));347- charst = (w_char *) (hopter + 12);348- sumst = ((w_char *) charst + tsize + 2); /* + 2 keeps two zero words */349- ptrst = (int *) ((w_char *) sumst + tsize);350- for (k = 0; k < tsize; k++)351- {352- rev_short (charst + k);353- rev_short (sumst + k);354- }355- if (state == ST_NORMAL)356- {357- for (k = 0; k < tsize; k++)358- {359- rev_int (ptrst + k);360- }361- }362- break;363- case ST_NOENT:364- tsize = rev_if_short ((w_char *) (hopter + 2));365- charst = (w_char *) (hopter + 4);366- ptrst = (int *) AL_INT ((w_char *) charst + tsize);367- for (k = 0; k < tsize; k++)368- {369- rev_short (charst + k);370- rev_int (ptrst + k);371- }372- break;373- case ST_SMALL:374- rev_short ((unsigned short *) (hopter + 2));375- break;376- }377+rev_sd_node(UCHAR *hopter,378+ UCHAR *hostart,379+ int match)380+{381+ /* whether current state of dict matches the cpu type of the machine */382+ int k;383+ int tsize;384+ w_char *charst;385+ w_char *sumst;386+ int *ptrst;387+ int state;388+389+ state = rev_if_short((unsigned short *) hopter);390+391+ switch (state) {392+ case ST_NORMAL:393+ case ST_NOPTER:394+ tsize = rev_if_short((w_char *)(hopter + 2));395+ rev_int((int *)(hopter + 4));396+ rev_int((int *)(hopter + 8));397+ charst = (w_char *)(hopter + 12);398+ sumst = ((w_char *)charst + tsize + 2); /* + 2 keeps two zero words */399+ ptrst = (int *)((w_char *)sumst + tsize);400+401+ for (k = 0; k < tsize; k++) {402+ rev_short(charst + k);403+ rev_short(sumst + k);404+ }405+406+ if (state == ST_NORMAL) {407+ for (k = 0; k < tsize; k++)408+ rev_int (ptrst + k);409+ }410+ break;411+412+ case ST_NOENT:413+ tsize = rev_if_short((w_char *)(hopter + 2));414+ charst = (w_char *)(hopter + 4);415+ ptrst = (int *)AL_INT((w_char *)charst + tsize);416+417+ for (k = 0; k < tsize; k++) {418+ rev_short(charst + k);419+ rev_int(ptrst + k);420+ }421+ break;422+423+ case ST_SMALL:424+ rev_short((unsigned short *)(hopter + 2));425+ break;426+ }427}428429-430int431-little_endian ()432+little_endian()433{434- int a = 1;435+ int a = 1;436#ifdef BYTE_SWAP437- return (1);438+ return (1);439#else440- return (*(char *) &a == 1);441+ return (*(char *) &a == 1);442#endif443}444445void446-rev_rd_rind1 (ri1, maxri1, match)447- struct rind1 *ri1;448- int maxri1;449- int match;450-{451- int k;452-453- for (k = 0; k < maxri1; k++)454- {455- rev_int (&(ri1[k].pter1));456- rev_int (&(ri1[k].pter));457- }458+rev_rd_rind1(struct rind1 *ri1,459+ int maxri1,460+ int match)461+{462+ int k;463+464+ for (k = 0; k < maxri1; k++) {465+ rev_int(&(ri1[k].pter1));466+ rev_int(&(ri1[k].pter));467+ }468}469470void471-rev_rd_rind2 (ri2, maxri2, match)472- struct rind2 *ri2;473- int maxri2;474- int match;475-{476- int k;477-478- for (k = 0; k < maxri2; k++)479- {480- rev_int (&(ri2[k].kanjipter));481- rev_int (&(ri2[k].next[D_YOMI]));482- rev_int (&(ri2[k].next[D_KANJI]));483- }484+rev_rd_rind2(struct rind2 *ri2,485+ int maxri2,486+ int match)487+{488+ int k;489+490+ for (k = 0; k < maxri2; k++) {491+ rev_int(&(ri2[k].kanjipter));492+ rev_int(&(ri2[k].next[D_YOMI]));493+ rev_int(&(ri2[k].next[D_KANJI]));494+ }495}496497void rev_w_char ();498499void500-rev_kanji (kpter, maxk, match)501- UCHAR *kpter;502- int maxk;503- int match;504-{505- UCHAR *kend = kpter + maxk;506-507- while (kpter < kend && *kpter)508- {509- rev_w_char ((w_char *) (kpter + 2), *kpter / 2 - 1);510- kpter += *kpter;511- }512+rev_kanji(UCHAR *kpter,513+ int maxk,514+ int match)515+{516+ UCHAR *kend = kpter + maxk;517+518+ while (kpter < kend && *kpter) {519+ rev_w_char((w_char *)(kpter + 2), *kpter / 2 - 1);520+ kpter += *kpter;521+ }522}523524void525-rev_w_char (p, maxp)526- w_char *p;527- int maxp;528-{529- for (; maxp > 0; maxp--)530- {531- rev_short (p);532- p++;533- }534+rev_w_char(w_char *p,535+ int maxp)536+{537+ for (; maxp > 0; maxp--) {538+ rev_short(p);539+ p++;540+ }541}542543/*544@@ -357,87 +323,78 @@ rev_w_char (p, maxp)545*/546547int548-revdic (jtl, match)549- struct JT *jtl;550- int match;551-{552- extern int rev_ud (), rev_rd (), rev_sd ();553- int syurui = jtl->syurui;554-555- syurui = jtl->syurui & 0xff;556-557- if (syurui == WNN_UD_DICT)558- {559- if (rev_ud (jtl, match) == -1)560- return (-1);561- }562- else if (syurui == WNN_REV_DICT)563- {564- if (rev_rd (jtl, match) == -1)565- return (-1);566- }567- else568- {569- if (rev_sd (jtl, match) == -1)570- return (-1);571- }572- return (0);573+revdic(struct JT *jtl,574+ int match)575+{576+ extern int rev_ud(), rev_rd(), rev_sd();577+ int syurui = jtl->syurui;578+579+ syurui = jtl->syurui & 0xff;580+581+ if (syurui == WNN_UD_DICT) {582+ if (rev_ud (jtl, match) == -1)583+ return (-1);584+ } else if (syurui == WNN_REV_DICT) {585+ if (rev_rd (jtl, match) == -1)586+ return (-1);587+ } else {588+ if (rev_sd (jtl, match) == -1)589+ return (-1);590+ }591+592+ return (0);593}594595void rev_common ();596597int598-rev_ud (jtl, match)599- struct JT *jtl;600- int match;601-{602- rev_common (jtl, match);603- rev_ud_hontai (jtl->hontai, jtl->maxhontai, match);604- rev_ud_table (jtl->table, jtl->maxtable, match);605- return (0);606+rev_ud(struct JT *jtl,607+ int match)608+{609+ rev_common(jtl, match);610+ rev_ud_hontai(jtl->hontai, jtl->maxhontai, match);611+ rev_ud_table(jtl->table, jtl->maxtable, match);612+613+ return (0);614}615616int617-rev_sd (jtl, match)618- struct JT *jtl;619- int match;620-{621- rev_common (jtl, match);622- rev_sd_hontai (jtl->hontai, match);623- return (0);624+rev_sd(struct JT *jtl,625+ int match)626+{627+ rev_common(jtl, match);628+ rev_sd_hontai(jtl->hontai, match);629+ return (0);630}631632int633-rev_rd (jtl, match)634- struct JT *jtl;635- int match;636-{637- rev_common (jtl, match);638- rev_rd_rind1 (jtl->ri1[D_YOMI], jtl->maxri1[D_YOMI], match);639- rev_rd_rind1 (jtl->ri1[D_KANJI], jtl->maxri1[D_KANJI], match);640- rev_rd_rind2 (jtl->ri2, jtl->maxri2, match);641- return (0);642+rev_rd(struct JT *jtl,643+ int match)644+{645+ rev_common(jtl, match);646+ rev_rd_rind1(jtl->ri1[D_YOMI], jtl->maxri1[D_YOMI], match);647+ rev_rd_rind1(jtl->ri1[D_KANJI], jtl->maxri1[D_KANJI], match);648+ rev_rd_rind2(jtl->ri2, jtl->maxri2, match);649+ return (0);650}651652void653-rev_common (jtl, match)654- struct JT *jtl;655- int match;656-{657- if (jtl->hinsi)658- rev_hinsi (jtl->hinsi, jtl->maxserial, match);659- if (jtl->kanji)660- rev_kanji (jtl->kanji, jtl->maxkanji, match);661- if (jtl->comment)662- rev_w_char (jtl->comment, jtl->maxcomment);663- if (jtl->hinsi_list)664- rev_w_char (jtl->hinsi_list, jtl->maxhinsi_list);665+rev_common(struct JT *jtl,666+ int match)667+{668+ if (jtl->hinsi)669+ rev_hinsi(jtl->hinsi, jtl->maxserial, match);670+ if (jtl->kanji)671+ rev_kanji(jtl->kanji, jtl->maxkanji, match);672+ if (jtl->comment)673+ rev_w_char(jtl->comment, jtl->maxcomment);674+ if (jtl->hinsi_list)675+ rev_w_char(jtl->hinsi_list, jtl->maxhinsi_list);676}677678/* rev_short is called from atod.c.... kanapiiii */679void680-rev_short_fun (sp)681- w_char *sp;682+rev_short_fun(w_char *sp)683{684- rev_short (sp);685+ rev_short (sp);686}687688689