1 /*
2  *  $Id: jdata.h,v 1.5 2005/04/10 15:26:37 aonoto Exp $
3  */
4 
5 /*
6  * FreeWnn is a network-extensible Kana-to-Kanji conversion system.
7  * This file is part of FreeWnn.
8  *
9  * Copyright Kyoto University Research Institute for Mathematical Sciences
10  *                 1987, 1988, 1989, 1990, 1991, 1992
11  * Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 1999
12  * Copyright ASTEC, Inc. 1987, 1988, 1989, 1990, 1991, 1992
13  * Copyright FreeWnn Project 1999, 2000
14  *
15  * Maintainer:  FreeWnn Project   <freewnn@tomo.gr.jp>
16  *
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2 of the License, or (at your option) any later version.
21  *
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  *
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the
29  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
30  * Boston, MA 02111-1307, USA.
31  */
32 
33 #ifndef WNN_JDATA_H
34 #define WNN_JDATA_H
35 
36 #ifndef JS
37 struct jdata
38 {
39   int kanji1;
40   short kanji2;                 /* */
41   short which;                  /* gyaku henkan? */
42   int serial;                   /* index is a serial number of the first
43                                    entry which is stored in this entry */
44   int kosuu;                    /* this means the number of elements in this
45                                    entry */
46   int jishono;                  /* jishono in which these entries are stored */
47   struct jdata *jptr;           /* pointer to another jdata which
48                                    points out a jdata of the same yomi
49                                    but (always)different jishono */
50   unsigned short *hinsi;
51 #ifdef  CONVERT_with_SiSheng    /* Don't warry. Only use in server and jutil */
52 /* It's only use CWNN : ���� */
53   unsigned short *sisheng;
54   unsigned short sisheng_int;
55 #endif
56   UCHAR *hindo;                 /* ���� */
57   UCHAR *hindo_in;              /* �������� */
58 };
59 #endif /* JS */
60 
61 struct JT
62 {
63   unsigned int total;           /* �ȡ��������� */
64   int gosuu;
65   char hpasswd[WNN_PASSWD_LEN];
66   int syurui;
67 
68   int maxcomment;
69   int maxhinsi_list;
70   int maxserial;
71   int maxtable;                 /* For UD Dic */
72   int maxhontai;                /* For UD Dic  and Static Dic */
73   int maxkanji;
74   int maxri1[2];                /* For Rev Dic */
75   int maxri2;                   /* For Rev Dic, is equal to maxserial */
76 
77 
78   w_char *comment;
79   w_char *hinsi_list;
80 
81   UCHAR *hindo;                 /* ���� */
82 #ifdef  CONVERT_with_SiSheng    /* Don't warry. Only use in server and jutil */
83 /* It's only use CWNN : ���� */
84   unsigned short *sisheng;
85   unsigned short sisheng_int;
86 #endif
87   unsigned short *hinsi;        /* bunpou data is stored here */
88   UCHAR *kanji;                 /* kanji data is stored here */
89   struct uind1 *table;          /* anothe tablefile for user jisho */
90   UCHAR *hontai;                /*  the tablefile (index-file) */
91   struct rind1 *ri1[2];         /* For Rev Dic */
92   struct rind2 *ri2;            /* For Rev Dic */
93 
94   short dirty;
95   short hdirty;
96 
97 /* ��������4�Ĥϡ� ��Ͽ��ǽ�������Ѵ���ǽ����ˤΤߴط����� */
98   int bufsize_kanji;            /* �����ΰ���礭�� */
99   int bufsize_serial;           /* ʸˡ�������ΰ���礭�� */
100   int bufsize_hontai;           /* ����ǥå���(hontai)���ΰ���礭�� */
101   int bufsize_table;            /*  ����ǥå���(table)���ΰ���礭�� */
102   int bufsize_ri1[2];           /* ���Ѵ���ǽ����� table ���ΰ���礭��  */
103 
104   /* hinsi_list wo kakunou suru */
105   int maxnode;
106   struct wnn_hinsi_node *node;
107 #ifdef  CONVERT_by_STROKE       /* Don't warry. Only use in server and jutil */
108 /* Used for Bixing dic  */
109   struct b_node *bind;          /* index for yomi <--> kanji search */
110   int max_bnode;                /* Max num of tuple     */
111   int bufsize_bnode;            /* BUFFER size of the b_node */
112 #endif
113 };
114 
115 struct HJT
116 {
117   struct wnn_file_uniq dic_file_uniq;
118   int maxcomment;
119   int maxserial;
120 
121   w_char *comment;
122   UCHAR *hindo;
123 
124   short hdirty;
125   int bufsize_serial;
126 };
127 
128 
129 /*
130  * structures concerning UD dicts
131  */
132 
133 #define AL_INT(x) ((unsigned long)((char *)(x) + 3) & ((unsigned long)~0x3))
134 
135 
136 #define ENDPTR 0                /* The end of (int) pointer list in uind2->next */
137 #define RD_ENDPTR 0xffffffff    /* The end of (int) pointer list in rind2->next */
138 
139 struct uind1
140 {
141   int pter1;                    /* pointer to uind1 */
142   int pter;                     /* pinter to uind2 */
143   unsigned int yomi1;
144   unsigned int yomi2;
145 };
146 
147 struct uind2
148 {
149   int next;                     /* pointer to uind2 */
150   int serial;
151   int kanjipter;
152   w_char kosuu;
153   w_char yomi[1];               /* actually it is variable length */
154 };
155 
156 /* MAXTABLE MAX... ha user file no ookisani kuwaete touroku no tame
157    ni totteoku ookisa*/
158 #define MAXTABLE 100            /* you can touroku MAXTABLE element without
159                                    realloc the jisho */
160 #define MAXHONTAI MAXTABLE * 4 * 4
161 #define MAXKANJI MAXTABLE * 10
162 #define MAXSERIAL MAXTABLE
163 #define MAXBIND MAXTABLE * 4
164 /*
165  * structures concerning REV dicts.
166  */
167 
168 struct rind1
169 {
170   int pter1;                    /* pointer to rind1 */
171   int pter;                     /* pinter to rind2 */
172 };
173 
174 struct rind2
175 {
176   int next[2];                  /* pointer to rind2 */
177   int kanjipter;
178 };
179 
180 /*
181  * Reverse Dict ni kansite, dotira wo hikuka?
182  */
183 
184 #define D_YOMI 0
185 #define D_KANJI 1
186 
187 #define KANJI_str1(pter, which) (((which) == D_YOMI)?((w_char *)((pter) + 2)):\
188     ((w_char *)((pter) + 2) + Strlen((w_char *)((pter) + 2)) + 1))
189 
190 #define KANJI_str(p, which) ((*((p) + 1) & FORWARDED)? \
191     KANJI_str1(((*(w_char *)((p) + 2)) << 16 | (*(w_char *)((p) + 4))) \
192                + (p),which): \
193     KANJI_str1((p), which))
194 
195 #define Get_kanji_len(pter, which) (Strlen(KANJI_str(pter, which)))
196 
197 /*
198  * structures concerning SD dicts.
199  */
200 
201 #define ST_NORMAL 1
202 #define ST_NOENT 2
203 #define ST_NOPTER 3
204 #define ST_SMALL 4
205 #define ST_TABLE 5
206 
207 /*
208  *Concerning HINSI. But these may not be used.
209  */
210 
211 #define SAKUJO_HINSI 0xfffe     /* sakujo sareta tango no hinsi */
212 #define NANDEMO_EEYO 0xfffd     /* nandemo maeni koreru to iu hinsi */
213 
214 /*
215  *Concerning KANJI and COMMENT.
216  */
217 
218 #define HAS_YOMI 1
219 #define HAS_COMMENT 2
220 #define FORWARDED 4
221 
222 /* #define SEPARATE_CHAR '\0'*/
223 /* Choose character which do not appear as the first byte of w_char */
224 
225 #define DIC_YOMI_CHAR  1
226 #define DIC_COMMENT_CHAR  2
227 
228 
229 #define DIC_HIRAGANA "\\y"
230 #define DIC_KATAKANA "\\k"
231 
232 /*#define       DIC_HANKAKU     "\\h"   *//* Ⱦ�� *//* �ɤߤΤޤ� */
233 #define DIC_ZENKAKU     "\\z"   /* ���� */      /* ������ */
234 #define DIC_NUM_KAN     "\\chan"        /* ������ */    /* ���� */
235 #define DIC_NUM_KANSUUJI "\\chas"       /* ������ */    /* ɴ���� */
236 #define DIC_NUM_KANOLD  "\\chao"        /* ������ */    /* ��ɴ������ */
237 #define DIC_NUM_HANCAN  "\\nhc" /* Ⱦ�ѿ��� */  /* 1,234 */
238 #define DIC_NUM_ZENCAN  "\\nzc" /* ���ѿ��� */  /* ���������� */
239 #define DIC_HEX         "\\X"   /* \Xa4a2 */
240 #define DIC_HEXc        "\\x"   /* \xa4a2 */
241 #define DIC_OCT         "\\0"   /* \040   */
242 #define DIC_ESC         "\\\\"  /* \\ = \  */
243 
244 #ifdef notuse
245 /* �ѿ� */
246 #define WNN_ALP_HAN     -4      /* Ⱦ�� */      /* �ɤߤΤޤ� */
247 #define WNN_ALP_ZEN     -30     /* ���� */
248 /* ���� */
249 #define WNN_KIG_HAN     -5      /* Ⱦ�� */      /* �ɤߤΤޤ� */
250 #define WNN_KIG_JIS     -40     /* ����(JIS) */
251 #define WNN_KIG_ASC     -41     /* ����(ASC) */
252 #endif
253 
254 #ifdef  CONVERT_by_STROKE
255 struct b_node
256 {
257   short pter;                   /* Point to Indix-2     */
258   short pter_son;               /* Ptr to first son     */
259   short pter_next;              /* Ptr to next brother  */
260 };
261 
262 struct b_koho
263 {
264   struct b_koho *previou;
265   int value;
266   w_char *p_yomi;
267   w_char *p_kanji;
268   unsigned short *p_hinsi;
269   UCHAR *p_hindo;
270   int serial;
271   int dic_no;
272 };
273 #endif  /* CONVERT_by_STROKE */
274 
275 
276 #endif  /* WNN_JDATA_H */
277