1 /* Copyright 1992 NEC Corporation, Tokyo, Japan.
2  *
3  * Permission to use, copy, modify, distribute and sell this software
4  * and its documentation for any purpose is hereby granted without
5  * fee, provided that the above copyright notice appear in all copies
6  * and that both that copyright notice and this permission notice
7  * appear in supporting documentation, and that the name of NEC
8  * Corporation not be used in advertising or publicity pertaining to
9  * distribution of the software without specific, written prior
10  * permission.  NEC Corporation makes no representations about the
11  * suitability of this software for any purpose.  It is provided "as
12  * is" without express or implied warranty.
13  *
14  * NEC CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
16  * NO EVENT SHALL NEC CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
18  * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
19  * OTHER TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20  * PERFORMANCE OF THIS SOFTWARE.
21  */
22 
23 /*
24  * @(#) 102.1 $Id: canna.h,v 1.11 2003/09/25 07:24:54 aida_s Exp $
25  */
26 
27 #ifndef _CANNA_H_
28 #define _CANNA_H_
29 
30 #include "cannaconf.h"
31 #include "ccompat.h"
32 #include <stdio.h>
33 
34 #define CANNA_NEW_WCHAR_AWARE
35 #include <canna/RK.h>
36 #include <canna/jrkanji.h>
37 
38 #define POINTERINT canna_intptr_t
39 #define exp(x) x
40 
41 #if 0
42 #define USE_MALLOC_FOR_BIG_ARRAY
43 #endif
44 
45 #define	WCHARSIZE	(sizeof(cannawc))
46 
47 #define MBstowcs CANNA_mbstowcs
48 #define WCstombs CANNA_wcstombs
49 
50 #include "sglobal.h"
51 
52 #define XLookupKanji2			 IROHA_G300_XLookupKanji2
53 #define XKanjiControl2			 IROHA_G301_XKanjiControl2
54 #define XwcLookupKanji2			 IROHA_G425_XwcLookupKanji2
55 #define XwcKanjiControl2		 IROHA_G426_XwcKanjiControl2
56 #define FirstTime			 CANNA_G271_FirstTime
57 
58 #define STROKE_LIMIT 500 /* ���ȥ�������³���ڤ� */
59 
60 typedef unsigned char BYTE;
61 
62 /*********************************************************************
63  *                      wchar_t replace begin                        *
64  *********************************************************************/
65 #ifdef wchar_t
66 # error "wchar_t is already defined"
67 #endif
68 #define wchar_t cannawc
69 
70 /*
71  * CANNALIBDIR  -- �����ƥ�Υ������ޥ����ե��������޻������Ѵ�
72  *                 �ơ��֥뤬�֤����ǥ��쥯�ȥꡣ
73  */
74 
75 #ifndef CANNALIBDIR
76 #define CANNALIBDIR "/usr/lib/canna"
77 #endif
78 
79 /* flags �ξ��� */
80 #define CANNA_KANJIMODE_TABLE_SHARED	01
81 #define CANNA_KANJIMODE_EMPTY_MODE	02
82 
83 /* func ���軰���� */
84 #define KEY_CALL  0
85 #define KEY_CHECK 1
86 #define KEY_SET   2
87 
88 extern BYTE default_kmap[];
89 
90 /* menuitem -- ��˥塼ɽ���ι��ܤ��������ơ��֥� */
91 
92 typedef struct _menuitem {
93   int flag; /* ������ */
94   union {
95     struct _menustruct *menu_next; /* ��˥塼�ؤΥݥ��� */
96     int fnum;    /* ��ǽ�ֹ� */
97     char *misc;  /* ����¾(lisp �Υ���ܥ�ʤ�) */
98   } u;
99 } menuitem;
100 
101 #define MENU_SUSPEND 0 /* �ޤ���ޤäƤ��ʤ�(lisp �Υ���ܥ�) */
102 #define MENU_MENU    1 /* ��˥塼 */
103 #define MENU_FUNC    2 /* ��ǽ�ֹ� */
104 
105 /* menustruct -- ��˥塼�����빽¤�� */
106 
107 typedef struct _menustruct {
108   int     nentries; /* ��˥塼�ι��ܤο� */
109   wchar_t **titles; /* ��˥塼�θ��Ф��ꥹ�� */
110   wchar_t *titledata; /* ��Υꥹ�Ȥμ���ʸ���� */
111   menuitem *body;   /* ��˥塼�����(����) */
112   int     modeid;   /* ��˥塼�Υ⡼���ֹ� */
113   struct _menustruct *prev; /* ������Υ�˥塼�ؤΥݥ��� */
114 } menustruct;
115 
116 typedef struct _menuinfo {
117   menustruct *mstruct; /* �ɤΥ�˥塼�� */
118   int        curnum;   /* ���ʤ��������줿�ֹ�Ϥ���Ǥ��� */
119   struct _menuinfo *next;
120 } menuinfo;
121 
122 /* defselection ��������줿����ط��ΰ�����ȤäƤ�����¤�� */
123 
124 typedef struct {
125   wchar_t	**kigo_data;	/* ����ɽ���γ����Ǥ����� */
126   wchar_t	*kigo_str;	/* ����ɽ���������Ǥ���������� */
127   int		kigo_size;	/* ���Ǥο� */
128   int		kigo_mode;	/* ���ΤȤ��Υ⡼�� */
129 } kigoIchiran;
130 
131 typedef struct _selectinfo {
132   kigoIchiran	*ichiran;	/* �ɤΰ����� */
133   int		curnum;		/* ���������줿�ֹ� */
134   struct _selectinfo *next;
135 } selectinfo;
136 
137 /* deldicinfo -- ñ�����κݤ�ɬ�פʼ���ξ������Ƥ�����¤�� */
138 
139 #define INDPHLENGTH 16 /* ��Ω��ǰ���Ĺ���ʻ��Ĺ�� */
140 
141 typedef struct _deldicinfo {
142   wchar_t *name;
143   wchar_t hcode[INDPHLENGTH];
144 } deldicinfo;
145 
146 /*
147  * glineinfo -- �������ɽ���Τ��������������Ǽ���Ƥ�������ι�¤�Ρ�
148  * ���줾��Υ��Фϰʲ��ΰ�̣����ġ�
149  *
150  * glkosu -- ���ιԤˤ������ο�
151  * glhead -- ���ιԤ���Ƭ���䤬��kouhoinfo�β����ܤ�(0���������)
152  * gllen  -- ���ιԤ�ɽ�����뤿���ʸ�����Ĺ��
153  * gldata -- ���ιԤ�ɽ�����뤿���ʸ����ؤΥݥ���
154  */
155 
156 typedef struct {
157   int glkosu;
158   int glhead;
159   int gllen;
160   wchar_t *gldata;
161 } glineinfo;
162 
163 /*
164  * kouhoinfo -- ��������Τ��������������Ǽ���Ƥ�������ι�¤��
165  * ���줾��Υ��Фϰʲ��ΰ�̣����ġ�
166  *
167  * khretsu -- ���θ��䤬�����
168  * khpoint -- ���θ���ιԤΤʤ��Ǥΰ���
169  * khdata -- ���θ����ʸ����ؤΥݥ���
170  */
171 
172 typedef struct {
173   int khretsu;
174   int khpoint;
175   wchar_t *khdata;
176 } kouhoinfo;
177 
178 #define ROMEBUFSIZE 	1024
179 #define	BANGOSIZE	2	/* �������γƸ�����ֹ�Υ����� */
180 #define	BANGOMAX   	9	/* ���������κ������� */
181 
182 #define	KIGOBANGOMAX   	16	/* ���������κ������� */
183 #define GOBISUU		9
184 
185 #define	ON		1
186 #define	OFF		0
187 
188 #define	NG		-1
189 
190 #define NO_CALLBACK     (canna_callback_t)0
191 #define NCALLBACK	4
192 
193 #define	JISHU_HIRA	0
194 #define JISHU_ZEN_KATA	1
195 #define JISHU_HAN_KATA	2
196 #define JISHU_ZEN_ALPHA	3
197 #define JISHU_HAN_ALPHA	4
198 #define MAX_JISHU	5
199 
200 #define  SENTOU        0x01
201 #define  HENKANSUMI    0x02
202 #define  SUPKEY        0x04
203 #define  GAIRAIGO      0x08
204 #define  STAYROMAJI    0x10
205 
206 /* ñ����Ͽ���ʻ� */
207 #define MEISHI       0
208 #define KOYUMEISHI   1
209 #define DOSHI        2
210 #define KEIYOSHI     3
211 #define KEIYODOSHI   4
212 #define FUKUSHI      5
213 #define TANKANJI     6
214 #define SUSHI        7
215 #define RENTAISHI    8
216 #define SETSUZOKUSHI 9
217 #define SAHENMEISHI 10
218 #define MEISHIN     11
219 #define JINMEI      12
220 #define KOYUMEISHIN 13
221 #define GODAN       14
222 #define RAGYODOSHI  15
223 #define RAGYOGODAN  16
224 #define KAMISHIMO   17
225 #define KEIYOSHIY   18
226 #define KEIYOSHIN   19
227 #define KEIYODOSHIY 20
228 #define KEIYODOSHIN 21
229 #define FUKUSHIY    22
230 #define FUKUSHIN    23
231 
232 /* identifier for each context structures */
233 #define CORE_CONTEXT       ((BYTE)0)
234 #define YOMI_CONTEXT       ((BYTE)1)
235 #define ICHIRAN_CONTEXT    ((BYTE)2)
236 #define FORICHIRAN_CONTEXT ((BYTE)3)
237 #define MOUNT_CONTEXT      ((BYTE)4)
238 #define TOUROKU_CONTEXT    ((BYTE)5)
239 #define TAN_CONTEXT	   ((BYTE)6)
240 
241 typedef struct _coreContextRec {
242   BYTE id;
243   BYTE majorMode, minorMode;
244   struct _kanjiMode *prevMode; /* �������Υ⡼�� */
245   struct _coreContextRec *next;
246 } coreContextRec, *coreContext;
247 
248 typedef coreContext mode_context;
249 
250 typedef struct  _yomiContextRec {
251   /* core �����Ʊ������ */
252   BYTE id;
253   BYTE majorMode, minorMode;
254   struct _kanjiMode *prevMode;	/* �������Υ⡼�� */
255   mode_context    next;
256 
257   struct _kanjiMode *curMode;
258   struct _tanContextRec	 *left, *right;
259 
260   /* ���޻������Ѵ��ط� */
261   struct RkRxDic *romdic;	/* ���޻������Ѵ��ơ��֥� */
262   wchar_t   romaji_buffer[ROMEBUFSIZE];
263   /* ���޻��Хåե��� rStartp, rEndp �Σ��ĤΥ���ǥå����ˤ�äƴ�������
264    * �롣rStartp �ϥ��ʤ��Ѵ��Ǥ��ʤ��ä����޻��κǽ��ʸ���ؤΥ���ǥ�
265    * �����Ǥ��ꡢrEndp �Ͽ����˥��޻������Ϥ�����ˡ���Ǽ���٤�
266    * romaji_buffer ��Υ���ǥå����Ǥ��롣���������Ϥ������޻��ϡ�
267    * romaji_buffer + rEndp �����˳�Ǽ���졢���Υ��޻����ʤ��Ѵ���
268    * ����ϡ�romaji_buffer + rStartp ���� rEndp - rStartp �Х��Ȥ�ʸ����
269    * �оݤȤʤ롣 */
270   int		  rEndp, rStartp, rCurs; /* ���޻��Хåե��Υݥ��� */
271   wchar_t         kana_buffer[ROMEBUFSIZE];
272   BYTE            rAttr[ROMEBUFSIZE], kAttr[ROMEBUFSIZE];
273   int		  kEndp; /* ���ʥХåե��κǸ������ݥ��� */
274   int             kRStartp, kCurs;
275 
276   /* ����¾�Υ��ץ���� */
277   BYTE            myMinorMode;  /* yomiContext ��ͭ�Υޥ��ʥ⡼�� */
278   struct _kanjiMode *myEmptyMode;		/* empty �⡼�ɤϤɤ줫 */
279   long		  generalFlags;		/* see below */
280   long		  savedFlags;		/* ��Υե饰�ΰ����Υ����� */
281   BYTE		  savedMinorMode;	/* �ޥ��ʥ⡼�ɤΥ����� */
282   BYTE		  allowedChars;		/* see jrkanji.h */
283   BYTE		  henkanInhibition;	/* see below */
284   int             cursup;		/* ���ʤ����ɤλ��˻Ȥ� */
285 #define SUSPCHARBIAS 100
286   int             n_susp_chars;
287 
288 /* from henkanContext */
289   /* ���ʴ����Ѵ��ط� */
290   int            context;
291   int		 kouhoCount;	/* ���� henkanNext ��Ϣ³���Ʋ����줿�� */
292   wchar_t        echo_buffer[ROMEBUFSIZE];
293   wchar_t        **allkouho; /* RkGetKanjiList��������ʸ���������ˤ���
294 				�ȤäƤ����Ȥ��� */
295   int            curbun;     /* ������ʸ�� */
296   int		 curIkouho;  /* �����ȸ��� */
297   int            nbunsetsu;  /* ʸ��ο� */
298 
299 /* ifdef MEASURE_TIME */
300   long		 proctime;   /* ��������(�Ѵ��Ƿ�¬����) */
301   long		 rktime;     /* ��������(RK�ˤ��������) */
302 /* endif MEASURE_TIME */
303 /* end of from henkanContext */
304 
305 /* �༡����ƥ����Ȥ��� */
306   int		 ye, ys, status;
307 /* �༡����ƥ����Ȥ���(�����ޤ�) */
308   int		 cStartp, cRStartp; /* �༡���ɤߤȤ��ƻĤäƤ�����ʬ */
309 
310 /* ���拾��ƥ����Ȥ��� */
311   BYTE           inhibition;
312   BYTE           jishu_kc, jishu_case;
313   int            jishu_kEndp, jishu_rEndp;
314   short          rmark;
315 /* ���拾��ƥ����Ȥ���(�����ޤ�) */
316 
317 /* adjustContext ���� */
318   int kanjilen, bunlen;           /* ������ʬ��ʸ���Ĺ�� */
319 /* adjustContext ����(�����ޤ�) */
320   struct _kanjiMode *tanMode; /* ñ����ΤȤ��Υ⡼�� */
321   int tanMinorMode;     /*        ��            */
322 
323   /* ������ѿ� */
324   int		  last_rule;		/* ����Υ����Ѵ��˻Ȥ�줿�롼�� */
325   wchar_t	  *retbuf, *retbufp;
326   int		  retbufsize;
327   short           pmark, cmark; /* �������Υޡ����Ⱥ��Υޡ��� */
328   BYTE            englishtype;  /* �Ѹ쥿����(�ʲ�����) */
329 } yomiContextRec, *yomiContext;
330 
331 /* for generalFlags */
332 #define CANNA_YOMI_MODE_SAVED		0x01L /* savedFlags �ˤ����Ȥ��ʤ� */
333 
334 #define CANNA_YOMI_BREAK_ROMAN		0x01L
335 #define CANNA_YOMI_CHIKUJI_MODE		0x02L
336 #define CANNA_YOMI_CHGMODE_INHIBITTED	0x04L
337 #define CANNA_YOMI_END_IF_KAKUTEI	0x08L
338 #define CANNA_YOMI_DELETE_DONT_QUIT	0x10L
339 
340 #define CANNA_YOMI_IGNORE_USERSYMBOLS	0x20L
341 #define CANNA_YOMI_IGNORE_HENKANKEY	0x40L
342 
343 #define CANNA_YOMI_BASE_CHIKUJI		0x80L /* �����༡ */
344 
345 /* for generalFlags also used in savedFlags */
346 
347 /* �ʲ��� ATTRFUNCS �˥ޥ��������ӥåȤ� defmode ��°���Ȥ��ƻȤ��� */
348 #define CANNA_YOMI_KAKUTEI		0x0100L
349 #define CANNA_YOMI_HENKAN		0x0200L
350 #define CANNA_YOMI_ZENKAKU		0x0400L
351 #define CANNA_YOMI_HANKAKU		0x0800L /* �ºݤ�Ⱦ�� */
352 #define CANNA_YOMI_HIRAGANA		0x1000L
353 #define CANNA_YOMI_KATAKANA		0x2000L
354 #define CANNA_YOMI_ROMAJI		0x4000L
355 #define CANNA_YOMI_JISHUFUNCS		0x7c00L
356 #define CANNA_YOMI_ATTRFUNCS		0x7f00L
357 
358 #define CANNA_YOMI_BASE_HANKAKU		0x8000L /* ����Ⱦ�� */
359 
360 /* kind of allowed input keys */
361 #define CANNA_YOMI_INHIBIT_NONE		0
362 #define CANNA_YOMI_INHIBIT_HENKAN	1
363 #define CANNA_YOMI_INHIBIT_JISHU	2
364 #define CANNA_YOMI_INHIBIT_ASHEX	4
365 #define CANNA_YOMI_INHIBIT_ASBUSHU	8
366 #define CANNA_YOMI_INHIBIT_ALL		15
367 
368 /* ��������Τ���Υե饰 */
369 #define NUMBERING 			1
370 #define CHARINSERT			2
371 
372 #define CANNA_JISHU_UPPER		1
373 #define CANNA_JISHU_LOWER		2
374 #define CANNA_JISHU_CAPITALIZE		3
375 #define CANNA_JISHU_MAX_CASE		4
376 
377 /* englishtype */
378 #define CANNA_ENG_KANA			0 /* �̾����뤳�� */
379 #define CANNA_ENG_ENG1			1
380 #define CANNA_ENG_ENG2			2 /* ξü�˶������äƤ��� */
381 #define CANNA_ENG_NO			3
382 
383 /* yc->status �Υե饰(�༡��) */
384 
385 #define	CHIKUJI_ON_BUNSETSU		0x0001 /* ʸ���ˤ��� */
386 #define	CHIKUJI_OVERWRAP		0x0002 /* ʸ�ᤫ���ɤ߾��֡� */
387 #define	CHIKUJI_NULL_STATUS	        0 /* ��Τ�ä��� */
388 
389 /* yc ��Ȥ��⡼�ɤζ���(ͥ���) */
390 
391 #define adjustp(yc) (0< (yc)->bunlen)
392 #define jishup(yc) (0 < (yc)->jishu_kEndp)
393 #define chikujip(yc) ((yc)->generalFlags & CANNA_YOMI_CHIKUJI_MODE)
394 #define henkanp(yc) (0 < (yc)->nbunsetsu)
395 
396 #define chikujiyomiremain(yc) ((yc)->cStartp < (yc)->kEndp)
397 
398 typedef struct _ichiranContextRec {
399   BYTE id;
400   BYTE majorMode, minorMode;
401   struct _kanjiMode *prevMode;	/* �������Υ⡼�� */
402   mode_context    next;
403 
404   int            svIkouho;   /* �����ȸ�������ȤäƤ���(����ɽ����) */
405   int            *curIkouho; /* �����ȸ��� */
406   int            nIkouho;    /* ����ο�(����ɽ����) */
407   int		 tooSmall;   /* �������������Ƹ���������Ф��ʤ���ե饰 */
408   int            curIchar;   /* ̤����ʸ�������ñ����Ͽ��ñ�����Ϥ�
409     							��Ƭʸ���ΰ��� */
410   BYTE           inhibit;
411   BYTE           flags;	     /* �����Ƥ� */
412   wchar_t        **allkouho; /* RkGetKanjiList��������ʸ���������ˤ���
413 				�ȤäƤ����Ȥ��� */
414   wchar_t        *glinebufp; /* ��������Τ����Ԥ�ɽ�����뤿���ʸ��
415 				��ؤΥݥ��� */
416   kouhoinfo      *kouhoifp;  /* ��������ط��ξ�����Ǽ���Ƥ�����¤��
417 				�ؤΥݥ��� */
418   glineinfo      *glineifp;  /* ��������ط��ξ�����Ǽ���Ƥ�����¤��
419 				�ؤΥݥ��� */
420 } ichiranContextRec, *ichiranContext;
421 
422 /* �ե饰�ΰ�̣ */
423 #define ICHIRAN_ALLOW_CALLBACK 1 /* ������Хå����Ƥ��ɤ� */
424 #define ICHIRAN_STAY_LONG    0x02 /* ���֤�ȴ���� */
425 #define ICHIRAN_NEXT_EXIT    0x04 /* ���� quit ��ȴ���� */
426 
427 
428 typedef struct _foirchiranContextRec {
429   BYTE id;
430   BYTE majorMode, minorMode;
431   struct _kanjiMode *prevMode;	/* �������Υ⡼�� */
432   mode_context    next;
433 
434   int            curIkouho;  /* �����ȸ��� */
435   wchar_t        **allkouho; /* RkGetKanjiList��������ʸ���������ˤ���
436 				�ȤäƤ����Ȥ��� */
437   menustruct     *table;  /* ʸ����ȴؿ��Υơ��֥� */
438   int            *prevcurp;  /* ���Υ����ȸ��� */
439 } forichiranContextRec, *forichiranContext;
440 
441 typedef struct _mountContextRec {
442   BYTE id;
443   BYTE majorMode, minorMode;
444   struct _kanjiMode *prevMode;	/* �������Υ⡼�� */
445   mode_context    next;
446 
447   BYTE            *mountOldStatus; /* �ޥ���Ȥ���Ƥ��뤫���ʤ��� */
448   BYTE            *mountNewStatus; /* �ޥ���Ȥ���Ƥ��뤫���ʤ��� */
449   char            **mountList;   /* �ޥ���Ȳ�ǽ�ʼ���ΰ��� */
450   int            curIkouho;     /* �����ȸ��� */
451 } mountContextRec, *mountContext;
452 
453 typedef struct _tourokuContextRec {
454   BYTE id;
455   BYTE majorMode, minorMode;
456   struct _kanjiMode *prevMode;	/* �������Υ⡼�� */
457   mode_context    next;
458 
459   wchar_t        genbuf[ROMEBUFSIZE];
460   wchar_t        qbuf[ROMEBUFSIZE];
461   wchar_t        tango_buffer[ROMEBUFSIZE];
462   int            tango_len;  /* ñ����Ͽ��ñ���ʸ�����Ĺ�� */
463   wchar_t        yomi_buffer[ROMEBUFSIZE];
464   int            yomi_len;   /* ñ����Ͽ���ɤߤ�ʸ�����Ĺ�� */
465   int            curHinshi;  /* �ʻ������ */
466   int            workDic;    /* ����Ѥμ��� */
467   deldicinfo     *workDic2;  /* ñ������ǽ�ʼ��� */
468   int            nworkDic2;  /* ñ������ǽ�ʼ���ο� */
469   deldicinfo     *workDic3;  /* ñ�������뼭�� */
470   int            nworkDic3;  /* ñ�������뼭��ο� */
471   struct dicname *newDic;    /* �ɲä��뼭�� */
472   wchar_t        hcode[INDPHLENGTH];  /* ñ����Ͽ���ʻ� */
473   int            katsuyou;   /* ñ����Ͽ��ư��γ��ѷ� */
474   wchar_t        **udic;     /* ñ����Ͽ�Ǥ��뼭�� (����̾) */
475   int            nudic;      /* ñ����Ͽ�Ǥ��뼭��ο� */
476   int            delContext; /* ñ�����ǣ��Ĥμ����ޥ���Ȥ��� */
477 } tourokuContextRec, *tourokuContext;
478 
479 typedef struct _tanContextRec {
480   BYTE id;
481   BYTE majorMode, minorMode;
482   struct _kanjiMode *prevMode;	/* �������Υ⡼�� */
483   mode_context    next;
484 
485   struct _kanjiMode *curMode;
486   struct _tanContextRec	 *left, *right;
487 
488   struct RkRxDic *romdic;	/* ���޻������Ѵ��ơ��֥� */
489   BYTE            myMinorMode;  /* yomiContext ��ͭ�Υޥ��ʥ⡼�� */
490   struct _kanjiMode *myEmptyMode;		/* empty �⡼�ɤϤɤ줫 */
491   long generalFlags, savedFlags; /* yomiContext �Υ��ԡ� */
492   BYTE		  savedMinorMode;	/* �ޥ��ʥ⡼�ɤΥ����� */
493   BYTE		  allowedChars;		/* see jrkanji.h */
494   BYTE		  henkanInhibition;	/* see below */
495 
496   wchar_t *kanji, *yomi, *roma;
497   BYTE *kAttr, *rAttr;
498 } tanContextRec, *tanContext;
499 
500 struct moreTodo {
501   BYTE          todo; /* ��äȤ���Ρ����� */
502   BYTE          fnum; /* �ؿ��ֹ档���ʤ鼡��ʸ���Ǽ�����뤳�Ȥ��� */
503   int		ch;   /* ʸ�� */
504 };
505 
506 /* �⡼��̾���Ǽ����ǡ����η���� */
507 
508 struct ModeNameRecs {
509   int           alloc;
510   wchar_t       *name;
511 };
512 
513 /* �������ֹ�Υ��ѥ졼�����Υǥե���Ȥ���� */
514 
515 #define DEFAULTINDEXSEPARATOR     '.'
516 
517 /*
518    wcKanjiAttribute for internal use
519  */
520 
521 typedef struct {
522   wcKanjiAttribute u;
523   int len;
524   char *sp, *ep;
525 } wcKanjiAttributeInternal;
526 
527 /*
528 
529   uiContext �ϥ��޻������Ѵ������ʴ����Ѵ��˻Ȥ��빽¤�ΤǤ��롣
530   XLookupKanjiString �ʤɤˤ���Ѵ��ϡ�������ɥ���ʬΥ���줿ʣ������
531   �ϥݡ��Ȥ��б����Ƥ���Τǡ�������Υ��޻��ξ���䡢���ʴ����Ѵ�
532   ���ͻҤʤɤ��줾��Υ�����ɥ����ʬΥ�����ݻ����Ƥ����ʤ���Ф�
533   ��ʤ������ι�¤�ΤϤ��Τ���˻Ȥ��빽¤�ΤǤ��롣
534 
535   ��¤�ΤΥ��Ф��ɤΤ褦�ʤ�Τ����뤫�ϡ�������Ȥ��뤳��
536 
537  */
538 
539 typedef struct _uiContext {
540 
541   /* XLookupKanjiString�Υѥ�᥿ */
542   wchar_t        *buffer_return;
543   int            n_buffer;
544   wcKanjiStatus    *kanji_status_return;
545 
546   /* XLookupKanjiString������ͤǤ���ʸ�����Ĺ�� */
547   int		 nbytes;
548 
549   /* ����饯�� */
550   int ch;
551 
552   /* ���ߥ����Х�ǡ��� */
553   int		 contextCache;	 /* �Ѵ�����ƥ����ȥ���å��� */
554   struct _kanjiMode *current_mode;
555   BYTE		 majorMode, minorMode;	 /* ľ���Τ�� */
556 
557   short		 curkigo;	 /* �����ȵ���(��������) */
558   char           currussia;	 /* �����ȵ���(����ʸ��) */
559   char           curgreek;	 /* �����ȵ���(���ꥷ��ʸ��) */
560   char           curkeisen;	 /* �����ȵ���(����) */
561   short          curbushu;       /* ����������̾ */
562   int            ncolumns;	 /* ��ԤΥ���������������λ����Ѥ����� */
563   wchar_t        genbuf[ROMEBUFSIZE];	/* ���ѥХåե� */
564   short          strokecounter;  /* �������ȥ����Υ�����
565 				    ���޻��⡼�ɤǥ��ꥢ����� */
566   wcKanjiAttributeInternal *attr;
567 
568   /* �ꥹ�ȥ�����Хå���Ϣ */
569   char           *client_data;   /* ���ץꥱ��������ѥǡ��� */
570   int            (*list_func) pro((char *, int, wchar_t **, int, int *));
571   jrEUCListCallbackStruct elistcb; /* EUC�ξ��μ���(��wc�����) */
572                  /* �ꥹ�ȥ�����Хå��ؿ� */
573   /* ����¾ */
574   char		 flags;		 /* �����Ƥ� */
575   char		 status;	 /* �ɤΤ褦�ʾ��֤��֤ä��Τ�������
576 				    ���Υ⡼�ɤȤ��ơ�
577 				     ��������
578 				     ��������λ
579 				     ����������
580 				     ������¾
581 				    �����롣(������) */
582 
583   /* ������Хå��������� */
584   struct callback *cb;
585 
586   /* ��äȤ��뤳�Ȥ������Ȥ�����¤�� */
587   struct moreTodo more;
588 
589   /* �����åȥ������� */
590   menustruct *prevMenu;
591 
592   /* �ƥ�˥塼�����Ф줿�ֹ��Ͽ���Ƥ�����¤�ΤؤΥݥ��� */
593   menuinfo *minfo;
594 
595   /* �ư��������Ф줿�ֹ��Ͽ���Ƥ�����¤�ΤؤΥݥ��� */
596   selectinfo *selinfo;
597 
598   /* ���֥���ƥ����ȤؤΥ�� */
599   mode_context   modec;		/* ���������ˤĤʤ�ͽ�� */
600 } uiContextRec, *uiContext;
601 
602 /* uiContext �� flags �ΥӥåȤΰ�̣ */
603 #define PLEASE_CLEAR_GLINE	1	/* GLine ��ä��Ƥ� */
604 #define PCG_RECOGNIZED		2	/* GLine ���Ͼä��ޤ��� */
605 #define MULTI_SEQUENCE_EXECUTED	4	/* ���ä��ޥ�������������Ԥ�줿 */
606 
607 #define EVERYTIME_CALLBACK	0
608 #define EXIT_CALLBACK		1
609 #define QUIT_CALLBACK		2
610 #define AUX_CALLBACK		3
611 
612 /*
613  * ���ʴ����Ѵ��Τ�����͡��ʥ����ޥåץơ��֥�
614  * �����ޥåץơ��֥�Ͻ����ؿ��ؤΥݥ���������ȤʤäƤ��롣
615  */
616 
617 struct funccfunc {
618   BYTE funcid;
619   int (*cfunc) pro((struct _uiContext *));
620 };
621 
622 typedef struct _kanjiMode {
623   int (*func) pro((struct _uiContext *, struct _kanjiMode *, int, int, int));
624   BYTE *keytbl;
625   int flags;			/* ������ */
626   struct funccfunc *ftbl;
627 } *KanjiMode, KanjiModeRec;
628 
629 struct callback {
630   int (*func[NCALLBACK]) pro((struct _uiContext *, int, mode_context));
631   mode_context    env;
632   struct callback *next;
633 };
634 
635 /* ���޻������Ѵ��ơ��֥� */
636 
637 extern struct RkRxDic *romajidic;
638 extern struct RkRxDic *RkwOpenRoma pro((char *));
639 
640 /*
641  * �����̾��������Ƥ����ѿ�
642  */
643 
644 struct dicname {
645   struct dicname *next;
646   char *name;
647   int dictype;
648   unsigned long dicflag;
649 };
650 
651 /* dictype �ˤϰʲ��Τ����줫������ */
652 #define DIC_PLAIN 0     /* �̾������ */
653 #define DIC_USER  1     /* ñ����Ͽ�Ѽ��� */
654 #define DIC_BUSHU 2     /* �����Ѵ��Ѽ��� */
655 #define DIC_GRAMMAR 3   /* ʸˡ���� */
656 #define DIC_RENGO 4     /* Ϣ��ؽ����� */
657 #define DIC_KATAKANA 5  /* �������ʳؽ����� */
658 #define DIC_HIRAGANA 6  /* �Ҥ餬�ʳؽ����� */
659 
660 /* dicflag �ˤϰʲ��Τ����줫������ */
661 #define DIC_NOT_MOUNTED  0
662 #define DIC_MOUNTED      1
663 #define DIC_MOUNT_FAILED 2
664 
665 extern struct dicname *kanjidicnames;
666 
667 /*
668  * ���顼�Υ�å�����������Ƥ����ѿ�
669  */
670 
671 extern char *jrKanjiError;
672 
673 /*
674  * �ǥХ�ʸ��ɽ�����뤫�ɤ����Υե饰
675  */
676 
677 extern iroha_debug;
678 
679 /*
680  * ��������������ȯ������褦�ʥ���
681  */
682 
683 #define IrohaFunctionKey(key) \
684   ((0x80 <= (int)(unsigned char)(key) &&  \
685     (int)(unsigned char)(key) <= 0x8b) || \
686    (0x90 <= (int)(unsigned char)(key) &&  \
687     (int)(unsigned char)(key) <= 0x9b) || \
688    (0xe0 <= (int)(unsigned char)(key) &&  \
689     (int)(unsigned char)(key) <= 0xff) )
690 
691 /* selectOne �ǥ�����Хå���ȼ�����ɤ�����ɽ���ޥ��� */
692 
693 #define WITHOUT_LIST_CALLBACK 0
694 #define WITH_LIST_CALLBACK    1
695 
696 /*
697  * Rk �ؿ���ȥ졼�����뤿���̾���ν�������
698  */
699 
700 #ifdef DEBUG
701 #include "traceRK.h"
702 #endif /* DEBUG */
703 
704 /*
705  * �ǥХ���å����������ѤΥޥ���
706  */
707 
708 #ifdef DEBUG
709 #define debug_message(fmt, x, y, z)	dbg_msg(fmt, x, y, z)
710 #else /* !DEBUG */
711 #define debug_message(fmt, x, y, z)
712 #endif /* !DEBUG */
713 
714 /*
715  * malloc �ΥǥХ�
716  */
717 
718 #ifdef DEBUG_ALLOC
719 extern char *debug_malloc pro((int));
720 extern int fail_malloc;
721 #define malloc(n) debug_malloc(n)
722 #endif /* DEBUG_MALLOC */
723 
724 /*
725  * �������⡼�ɤ�������빽¤��
726  */
727 
728 typedef struct {
729   char           *romaji_table; /* ���޻������Ѵ��ơ��֥�̾(EUC) */
730   struct RkRxDic *romdic;	 /* ���޻�����¤�� */
731   int             romdic_owner;  /* ���޻������ʬ��Open������ */
732   long            flags;	 /* flags for yomiContext->generalFlags */
733   KanjiMode       emode;	 /* current_mode �����빽¤�� */
734 } newmode;
735 
736 /* ���޻������Ѵ�����­���륭����ʸ�����Ѵ��ơ��֥� */
737 
738 typedef struct {
739   wchar_t	key;		/* ���� */
740   wchar_t       xkey;
741   int		groupid;	/* ���롼��id */
742   int           ncand;          /* ����ο� */
743   wchar_t       **cand;         /* ��������� */
744   wchar_t	*fullword;	/* ������ (����1@����2@...����n@@) */
745 #ifdef WIN_CANLISP
746   int		fullwordsize;	/* sizeof fullword by wchar_t unit */
747 #endif
748 } keySupplement;
749 
750 #define MAX_KEY_SUP 64
751 
752 #define HEX_USUAL     0
753 #define HEX_IMMEDIATE 1
754 
755 #define ModeInfoStyleIsString		0
756 #define ModeInfoStyleIsNumeric		1
757 #define ModeInfoStyleIsExtendedNumeric	2
758 #define ModeInfoStyleIsBaseNumeric      3
759 #define MaxModeInfoStyle                ModeInfoStyleIsBaseNumeric
760 
761 #define killmenu(d) ((d)->prevMenu = (menustruct *)0)
762 #define	defineEnd(d) killmenu(d)
763 #define	deleteEnd(d) killmenu(d)
764 
765 /* defmode��defselection��defmenu �Ѥι�¤�� */
766 
767 typedef struct _extra_func {
768   int  		fnum;		/* �ؿ��ֹ� */
769   int		keyword;	/* �������⡼�ɤ�������줿������� */
770   wchar_t	*display_name;	/* �⡼��ɽ��̾ */
771   union {
772     newmode 	*modeptr;	/* defmode ���б����빽¤�� */
773     kigoIchiran	*kigoptr;	/* defselection ���б����빽¤�� */
774     menustruct	*menuptr;	/* defmenu ���б����빽¤�� */
775   } u;
776 #ifdef BINARY_CUSTOM
777   int           mid;
778   char          *symname;
779 #endif
780   struct _extra_func *next;
781 } extraFunc;
782 
783 #define EXTRA_FUNC_DEFMODE	1
784 #define EXTRA_FUNC_DEFSELECTION	2
785 #define EXTRA_FUNC_DEFMENU	3
786 
787 #define tanbunMode(d, tan) /* tanContext ��Ϣ�⡼�ɤؤΰܹ� */ \
788   { extern KanjiModeRec tankouho_mode; (d)->current_mode = &tankouho_mode; \
789     (d)->modec = (mode_context)(tan); currentModeInfo(d); }
790 
791 #define freeForIchiranContext(fc) free((char *)fc)
792 #define freeIchiranContext(ic) free((char *)ic)
793 #define freeYomiContext(yc) free((char *)yc)
794 #define freeCoreContext(cc) free((char *)cc)
795 
796 #ifndef DICHOME
797 #define DICHOME "/usr/lib/canna/dic"
798 #endif
799 
800 #define DEFAULT_CANNA_SERVER_NAME "cannaserver"
801 
802 #ifndef	_UTIL_FUNCTIONS_DEF_
803 
804 #define	_UTIL_FUNCTIONS_DEF_
805 
806 /* ����ʤΥС�������Ĵ�٤� */
807 #define canna_version(majv, minv) ((majv) * 1024 + (minv))
808 
809 /* �褯���ڥ�ߥ�����Τǥ���ѥ�����ˤҤä�����褦������� */
810 extern RkwGoto pro((char *, int));
811 
812 /* storing customize configuration to the following structure. */
813 struct CannaConfig { /* �ʲ��Υ����Ȥϥ��������ʤɤ˵��Ҥ���Ȥ��ʤɤ�
814 			�Ѥ�����á�! ����Ƭ�ˤĤ��Ƥ���Τϥ��å���ȿž
815 			���Ƥ��뤳�Ȥ�ɽ�� */
816   int CannaVersion;  /* (�ߴ���) ����ʤΥС������ */
817   int kouho_threshold; /* �Ѵ����������ǤĤȰ������Ф뤫 */
818   int strokelimit;  /* (�ߴ���) �����ȥ�������ե��٥åȤ����������Ǥ� */
819   int indexSeparator; /* (�ߴ���) �������Υ���ǥå����Υ��ѥ졼�� */
820   BYTE ReverseWidely; /* ȿž�ΰ�����Ȥ�       */
821   BYTE chikuji;       /* �༡��ư�Ѵ�             */
822   BYTE Gakushu;       /* �ؽ����뤫�ɤ���         */
823   BYTE CursorWrap;    /* ��ü�DZ��Ǻ�ü�عԤ�     */
824   BYTE SelectDirect;  /* ������������ǰ�����ȴ���� */
825   BYTE HexkeySelect;  /* (�ߴ���) 16�ʿ����Ǥ��������� */
826   BYTE BunsetsuKugiri; /* �Ѵ���ʸ��֤˶��������  */
827   BYTE ChBasedMove;   /* !���޻������Ѵ�ñ�̤Υ��������ư   */
828   BYTE ReverseWord;   /* (�ߴ���) �����Ǹ��ȿž���� */
829   BYTE QuitIchiranIfEnd; /* ���������ǰ������Ĥ��� */
830   BYTE kakuteiIfEndOfBunsetsu; /* ʸ�������DZ���ư�dz��ꤹ�� */
831   BYTE stayAfterValidate; /* !����������弡��ʸ��ذ�ư */
832   BYTE BreakIntoRoman;    /* BS�����ǥ��޻����᤹ */
833   BYTE grammaticalQuestion; /* (�ߴ���) ñ����Ͽ��ʸˡŪ������� */
834   BYTE forceKana;           /* Isn't this used? */
835   BYTE kCount;        /* (�ߴ���) ���䤬�����ܤ���ɽ������ */
836   BYTE LearnNumericalType;  /* Isn't this used? */
837   BYTE BackspaceBehavesAsQuit; /* �༡��ư�Ѵ��� BS ���������Τ��ɤߤ��᤹ */
838   BYTE iListCB;       /* (�ߴ���) �ꥹ�ȥ�����Хå���ػߤ��� */
839   BYTE keepCursorPosition;  /* !�Ѵ�����BS�Ǹ�������������֤������˰�ư */
840   BYTE abandonIllegalPhono; /* ���޻������Ѵ��˻Ȥ��ʤ�������ΤƤ� */
841   BYTE hexCharacterDefiningStyle; /* Isn't this used? */
842   BYTE kojin;         /* �Ŀͳؽ� */
843   BYTE indexHankaku;  /* (�ߴ���) �������Υ���ǥå�����Ⱦ�Ѥˤ��� */
844   BYTE allowNextInput; /* �������ɽ�������������Ϥ���ǽ�ˤ��� */
845   BYTE doKatakanaGakushu; /* Isn't this used? */
846   BYTE doHiraganaGakushu; /* Isn't this used? */
847   BYTE ChikujiContinue; /* �༡��ư�Ѵ����������ϤǴ��Ѵ���ʬ����ꤷ�ʤ� */
848   BYTE RenbunContinue;  /* Ϣʸ���Ѵ����������ϤǴ��Ѵ���ʬ����ꤷ�ʤ� */
849   BYTE MojishuContinue; /* �����Ѵ����������ϤǴ��Ѵ���ʬ����ꤷ�ʤ� */
850   BYTE chikujiRealBackspace; /* �༡��ư�Ѵ���BS��ɬ����ʸ���õ�� */
851   BYTE ignore_case;   /* ��ʸ����ʸ������̤��ʤ� */
852   BYTE romaji_yuusen; /* ���޻������Ѵ���ͥ�褹�� */
853   BYTE auto_sync;     /* ���Ū�˼������᤹ */
854   BYTE quickly_escape; /* (�ߴ���) ����ɽ�����������¨�¤˰�����ȴ���� */
855   BYTE InhibitHankakuKana; /* Ⱦ�ѥ������ʤζػ� */
856   BYTE code_input;    /* ������(0: jis, 1: sjis, 2: ����) */
857   BYTE DelayConnect;  /* ��������ˤ����˥����Ф���³���ʤ� */
858 };
859 
860 #define CANNA_CODE_JIS   0
861 #define CANNA_CODE_SJIS  1
862 #define CANNA_CODE_KUTEN 2
863 #define CANNA_MAX_CODE   3
864 
865 extern struct CannaConfig cannaconf;
866 extern void InitCannaConfig pro((struct CannaConfig *));
867 
868 typedef int (* canna_callback_t) pro((uiContext, int, mode_context));
869 
870 extern void makeGLineMessage pro((uiContext, wchar_t *, int));
871 extern void makeGLineMessageFromStrings pro((uiContext, char *));
872 extern newmode *findExtraKanjiMode pro((int));
873 extern setWStrings pro((wchar_t **, char **, int));
874 extern WStrlen pro((wchar_t *));
875 extern wchar_t *WStrcat pro((wchar_t *, wchar_t *));
876 extern wchar_t *WStrcpy pro((wchar_t *, wchar_t *));
877 extern wchar_t *WStrncpy pro((wchar_t *, wchar_t *, int));
878 extern WStrncmp pro((wchar_t *, wchar_t *, int));
879 extern wchar_t *WString pro((char *));
880 #ifndef NO_EXTEND_MENU
881 extern prevMenuIfExist pro((uiContext));
882 extern showmenu pro((uiContext, menustruct *));
883 #endif
884 extern yomiContext
885   newYomiContext pro((wchar_t *, int, int, int, int, int)),
886   GetKanjiString pro((uiContext, wchar_t *, int, int, int, int, int,
887 		      canna_callback_t, canna_callback_t, canna_callback_t));
888 extern void restoreFlags pro((yomiContext));
889 extern void kPos2rPos pro((yomiContext, int, int, int *, int *));
890 extern void makeKanjiStatusReturn pro((uiContext, yomiContext));
891 extern wchar_t key2wchar pro((int, int *));
892 extern struct bukRec *internContext
893   pro((unsigned int, unsigned int, uiContext));
894 extern void freeRomeStruct pro((uiContext));
895 extern void rmContext pro((unsigned int, unsigned int));
896 extern struct callback *pushCallback
897   pro((uiContext, mode_context,
898        canna_callback_t, canna_callback_t,
899        canna_callback_t, canna_callback_t));
900 extern void popCallback pro((uiContext));
901 extern void makeYomiReturnStruct pro((uiContext));
902 extern void moveToChikujiTanMode pro((uiContext));
903 extern void moveToChikujiYomiMode pro((uiContext));
904 extern void makeGLineMessageFromString pro((uiContext, char *));
905 extern void addWarningMesg pro((char *));
906 extern int prepareHenkanMode pro((uiContext));
907 extern void makeAllContextToBeClosed pro((int));
908 extern void CannaBeep pro((void));
909 #ifndef NO_EXTEND_MENU
910 extern void freeAllMenuInfo pro((menuinfo *));
911 extern void freeMenu pro((menustruct *));
912 #endif
913 extern void restoreDefaultKeymaps pro((void));
914 #ifndef NO_EXTEND_MENU
915 extern void finExtMenu pro((void));
916 #endif
917 extern void freeIchiranBuf pro((ichiranContext));
918 extern exp(char *) RkwGetServerName pro((void));
919 extern void popForIchiranMode pro((uiContext));
920 extern void clisp_main pro((void));
921 extern void clisp_fin pro((void));
922 extern void popYomiMode pro((uiContext));
923 extern void freeTanContext pro((tanContext));
924 extern void enterJishuMode pro((uiContext, yomiContext));
925 extern void leaveJishuMode pro((uiContext, yomiContext));
926 extern void finishTanKakutei pro((uiContext));
927 extern void removeKana pro((uiContext, yomiContext, int, int));
928 extern void clearHenkanContext pro((yomiContext));
929 extern void doMuhenkan pro((uiContext, yomiContext));
930 extern void removeCurrentBunsetsu pro((uiContext, tanContext));
931 extern int uiUtilIchiranTooSmall pro((uiContext, int, mode_context));
932 extern int dicTourokuHinshiDelivery pro((uiContext));
933 extern int uuTTangoQuitCatch pro((uiContext, int, mode_context));
934 extern void freeAndPopTouroku pro((uiContext));
935 extern void popMountMode pro((uiContext));
936 extern void freeDic pro((tourokuContext));
937 
938 /* for VC++ 4.0, by kon */
939 extern int doFunc pro((uiContext, int));
940 extern int _doFunc pro((uiContext, int));
941 extern int _afterDoFunc pro((uiContext, int));
942 extern int alphaMode pro((uiContext));
943 extern void jrKanjiPipeError pro((void));
944 extern int NoMoreMemory pro((void));
945 extern int WCinit pro((void));
946 extern int WStringOpen pro((void));
947 extern void WStringClose pro((void));
948 extern int WStrcmp pro((wchar_t *, wchar_t *));
949 extern int WSfree pro((wchar_t *));
950 extern void initModeNames pro((void));
951 extern int initKeyTables pro((void));
952 #ifdef BINARY_CUSTOM
953 extern int binparse pro((void));
954 #else
955 extern void parse pro((void));
956 #endif
957 extern int initIchiran pro((void));
958 extern int RomkanaInit pro((void));
959 extern void RomkanaFin pro((void));
960 extern int KanjiInit pro((void));
961 extern int KanjiFin pro((void));
962 extern void resetModeNames pro((void));
963 extern int escapeToBasicStat pro((uiContext, int));
964 extern void EmptyBaseModeInfo pro((uiContext, yomiContext));
965 extern void GlineClear pro((uiContext));
966 extern void currentModeInfo pro((uiContext));
967 extern int queryMode pro((uiContext, wchar_t *));
968 extern int RkSetServerName pro((char *));
969 extern int parse_string pro((char *));
970 extern void RomajiStoreYomi pro((uiContext, wchar_t *, wchar_t *));
971 extern int WWhatGPlain pro((wchar_t));
972 extern int WIsG0 pro((wchar_t)), WIsG1 pro((wchar_t));
973 extern int WIsG2 pro((wchar_t)), WIsG3 pro((wchar_t));
974 extern int XwcKanjiControl2
975   pro((unsigned int, unsigned int, unsigned int, BYTE *));
976 extern int XKanjiControl2
977   pro((unsigned int, unsigned int, unsigned int, BYTE *));
978 extern int XwcLookupKanji2 pro((unsigned int, unsigned int, wchar_t *, int,
979                                 int, int, wcKanjiStatus *));
980 extern int NothingChangedWithBeep pro((uiContext));
981 extern int searchfunc pro((uiContext, KanjiMode, int, int, int));
982 extern int initRomeStruct pro((uiContext, int));
983 /* extern int kanjiControl pro((int, uiContext, caddr_t)); */
984 extern int getBaseMode pro((yomiContext));
985 extern int RkwMapPhonogram
986   pro((struct RkRxDic *, wchar_t *, int, wchar_t *, int, wchar_t, int,
987        int *, int *, int *, int *));
988 extern int RkMapPhonogram
989   pro((struct RkRxDic *, unsigned char *, int, unsigned char *, int,
990        unsigned, int,
991        int *, int *, int *, int *));
992 extern RkMapRoma
993   pro((struct RkRxDic *, unsigned char *, int, unsigned char *, int,
994        int, int *));
995 extern int RkCvtRoma
996   pro((struct RkRxDic *, unsigned char *, int, unsigned char *, int,
997        unsigned));
998 extern int RkwCvtRoma
999   pro((struct RkRxDic *, wchar_t *, int, wchar_t *, int, int));
1000 extern int exitJishu pro((uiContext));
1001 extern RomajiFlushYomi pro((uiContext, wchar_t *, int));
1002 extern void generalReplace
1003   pro((wchar_t *, BYTE *, int *, int *, int *, int, wchar_t *, int, int));
1004 extern ChikujiSubstYomi pro((uiContext));
1005 extern TanMuhenkan pro((uiContext));
1006 extern CANNA_mbstowcs pro((wchar_t *, char *, int));
1007 extern CANNA_wcstombs pro((char *, wchar_t *, int));
1008 extern makeRkError pro((uiContext, char *));
1009 extern void moveStrings pro((wchar_t *, BYTE *, int, int, int));
1010 extern TanBackwardBunsetsu pro((uiContext));
1011 extern TbBackward pro((uiContext));
1012 extern NothingChanged pro((uiContext));
1013 extern TbEndOfLine pro((uiContext));
1014 extern TanForwardBunsetsu pro((uiContext));
1015 extern TbForward pro((uiContext));
1016 extern TbBeginningOfLine pro((uiContext));
1017 extern tanMuhenkan pro((uiContext, int));
1018 extern extractTanString pro((tanContext, wchar_t *, wchar_t *));
1019 extern extractTanYomi pro((tanContext, wchar_t *, wchar_t *));
1020 extern extractTanRomaji pro((tanContext, wchar_t *, wchar_t *));
1021 extern leaveAdjustMode pro((uiContext, yomiContext));
1022 extern wchar_t *WStraddbcpy pro((wchar_t *, wchar_t *, int));
1023 extern YomiExit pro((uiContext, int));
1024 extern void clearYomiContext pro((yomiContext));
1025 extern abandonContext pro((uiContext, yomiContext));
1026 extern void RomajiClearYomi pro((uiContext));
1027 extern RkCvtEuc pro((unsigned char *, int, unsigned char *, int));
1028 extern RkCvtNone pro((unsigned char *, int, unsigned char *, int));
1029 extern selectOne
1030   pro((uiContext, wchar_t **, int *, int, int, unsigned, int, int,
1031        canna_callback_t, canna_callback_t, canna_callback_t,canna_callback_t));
1032 extern void makeGlineStatus pro((uiContext));
1033 extern YomiMark pro((uiContext));
1034 extern doHenkan pro((uiContext, int, wchar_t *));
1035 extern tanKouhoIchiran pro((uiContext, int));
1036 extern EmptyBaseKana pro((uiContext));
1037 extern EmptyBaseKakutei pro((uiContext));
1038 extern EmptyBaseHenkan pro((uiContext));
1039 extern WToupper pro((wchar_t));
1040 extern WTolower pro((wchar_t));
1041 extern TanKakutei pro((uiContext));
1042 extern Yomisearchfunc pro((uiContext, KanjiMode, int, int, int));
1043 extern CNvW2E pro((wchar_t *, int, char *, int));
1044 extern void initKigoTable pro((void));
1045 extern NothingForGLine pro((uiContext));
1046 extern NothingForGLineWithBeep pro((uiContext));
1047 extern void echostrClear pro((uiContext));
1048 extern void freeGetIchiranList pro((wchar_t **));
1049 extern TanKouhoIchiran pro((uiContext));
1050 extern GLineNGReturn pro((uiContext));
1051 extern GLineNGReturnFI pro((uiContext));
1052 extern appendTan2Yomi pro((tanContext, yomiContext));
1053 extern confirmContext pro((uiContext, yomiContext));
1054 extern ChikujiTanDeletePrevious pro((uiContext));
1055 extern YomiKakutei pro((uiContext));
1056 extern YomiInsert pro((uiContext));
1057 extern cutOffLeftSide pro((uiContext, yomiContext, int));
1058 extern enterAdjustMode pro((uiContext, yomiContext));
1059 extern TanNextKouho pro((uiContext));
1060 extern TanPreviousKouho pro((uiContext));
1061 extern TanBeginningOfBunsetsu pro((uiContext));
1062 extern TanEndOfBunsetsu pro((uiContext));
1063 extern TanDeletePrevious pro((uiContext));
1064 extern TanBubunMuhenkan pro((uiContext));
1065 extern xString pro((wchar_t *, int, wchar_t *, wchar_t *));
1066 extern KanaDeletePrevious pro((uiContext));
1067 extern findSup pro((wchar_t));
1068 extern selectKeysup pro((uiContext, yomiContext, int));
1069 extern containUnconvertedKey pro((yomiContext));
1070 extern CYsearchfunc pro((uiContext, KanjiMode, int, int, int));
1071 extern TanBubunKakutei pro((uiContext));
1072 extern TanZenkaku pro((uiContext));
1073 extern TanHankaku pro((uiContext));
1074 extern TanHiragana pro((uiContext));
1075 extern TanKatakana pro((uiContext));
1076 extern TanRomaji pro((uiContext));
1077 extern TanUpper pro((uiContext));
1078 extern TanCapitalize pro((uiContext));
1079 extern TanPrintBunpou pro((uiContext));
1080 extern TanNop pro((uiContext));
1081 extern YomiQuotedInsert pro((uiContext));
1082 extern AlphaMode pro((uiContext));
1083 extern HenkanNyuryokuMode pro((uiContext));
1084 extern KigoIchiran pro((uiContext));
1085 extern UiUtilMode pro((uiContext));
1086 extern EmptyBaseHira pro((uiContext));
1087 extern EmptyBaseKata pro((uiContext));
1088 extern EmptyBaseEisu pro((uiContext));
1089 extern EmptyBaseZen pro((uiContext));
1090 extern EmptyBaseHan pro((uiContext));
1091 extern YomiBaseHiraKataToggle pro((uiContext));
1092 extern YomiBaseZenHanToggle pro((uiContext));
1093 extern YomiBaseKanaEisuToggle pro((uiContext));
1094 extern YomiBaseKakuteiHenkanToggle pro((uiContext));
1095 extern YomiBaseRotateForw pro((uiContext));
1096 extern YomiBaseRotateBack pro((uiContext));
1097 extern DoFuncSequence pro((uiContext));
1098 extern YomiModeBackup pro((uiContext));
1099 extern UseOtherKeymap pro((uiContext));
1100 extern JapaneseMode pro((uiContext));
1101 extern void ichiranFin pro((uiContext));
1102 extern IchiranForwardKouho pro((uiContext));
1103 extern IchiranBackwardKouho pro((uiContext));
1104 extern IchiranNextKouhoretsu pro((uiContext));
1105 extern IchiranPreviousKouhoretsu pro((uiContext));
1106 extern IchiranBeginningOfKouho pro((uiContext));
1107 extern IchiranEndOfKouho pro((uiContext));
1108 extern IchiranQuit pro((uiContext));
1109 extern IchiranNop pro((uiContext));
1110 extern RkwCvtNone pro((wchar_t *, int, wchar_t *, int));
1111 extern RkwSetAppName pro((int, char *));
1112 extern void close_engine pro((void));
1113 extern char *KanjiInitError pro((void));
1114 extern void prepare_autodic pro((void));
1115 extern int doKakutei
1116  pro((uiContext, tanContext, tanContext, wchar_t *, wchar_t *, yomiContext *));
1117 extern int EUCListCallback pro((char *, int, wchar_t **, int, int *));
1118 #if SUPPORT_OLD_WCHAR
1119 extern int owcListCallback pro((char *, int, wchar_t **, int, int *));
1120 #endif
1121 
1122 #endif /* _UTIL_FUNCTIONS_DEF_ */
1123 
1124 #ifndef wchar_t
1125 # error "wchar_t is already undefined"
1126 #endif
1127 #undef wchar_t
1128 /*********************************************************************
1129  *                       wchar_t replace end                         *
1130  *********************************************************************/
1131 #endif /* !_CANNA_H_ */
1132