1 /* $Id: Xsj3clib.h,v 2.2 1993/09/02 14:59:45 nao Exp $ */
2 
3 /*
4  * Author: Naoshi Suzuki, SONY Corporation.  (nao@sm.sony.co.jp)
5  */
6 
7 #ifndef _Xsj3clib_h
8 #define _Xsj3clib_h
9 
10 #include    "sj3lib.h"
11 #include    <X11/X.h>
12 
13 /* #define FORCE_SJIS */
14 /* #define FORCE_JIS7 */
15 /* #define FORCE_JIS8 */
16 
17 /*
18  * define for default conversion definition file
19  *          and resource file
20  */
21 #ifndef SJ3DEFPATH
22 #define SJ3DEFPATH              "/usr/lib/X11/sj3def/"
23 #endif
24 
25 /*
26  * define for default include nesting limit
27  */
28 #ifndef SJRC_INCLUDE_MAX
29 #define SJRC_INCLUDE_MAX        10
30 #endif
31 
32 #define DEF_SJRC_FILE           "sjrc"
33 #define DEF_SJRK_FILE           "sjrk"
34 #define DEF_SJHK_FILE           "sjhk"
35 #define DEF_SJZH_FILE           "sjzh"
36 #define DEF_SJSB_FILE           "sjsb"
37 
38 /*
39  * Kana-Kanji conversion control key event define
40  */
41 #define KEY_NULL                (0L)
42 #define KEY_HENKAN_START        (1L<<0)
43 #define KEY_HENKAN_END          (1L<<1)
44 #define KEY_MODE_CHANGE         (1L<<2)
45 #define KEY_TEXT_CHANGE         (1L<<3)
46 #define KEY_TEXT_FIXED          (1L<<4)
47 #define KEY_TEXT_FLUSH          (1L<<5)
48 #define KEY_CAND_START          (1L<<6)
49 #define KEY_SYMBOL_START        (1L<<7)
50 #define KEY_HINSI_START         (1L<<8)
51 #define KEY_SELECT_END          (1L<<9)
52 #define KEY_SELECT_ABORT        (1L<<10)
53 #define KEY_SELECT_RIGHT        (1L<<11)
54 #define KEY_SELECT_LEFT         (1L<<12)
55 #define KEY_SELECT_UP           (1L<<13)
56 #define KEY_SELECT_DOWN         (1L<<14)
57 #define KEY_SELECT_FIRST        (1L<<15)
58 #define KEY_SELECT_LAST         (1L<<16)
59 #define KEY_SELECT_NEXTP        (1L<<17)
60 #define KEY_SELECT_PREVP        (1L<<18)
61 #define KEY_SELECT_RIGHTMOST    (1L<<19)
62 #define KEY_SELECT_LEFTMOST     (1L<<20)
63 #define KEY_RECONNECT           (1L<<21)
64 #define KEY_BELL                (1L<<22)
65 #define KEY_DICT_START          (1L<<23)
66 #define KEY_DICT_CHANGE         (1L<<24)
67 #define KEY_DICT_REGISTER       (1L<<25)
68 #define KEY_DICT_CLEAR          (1L<<26)
69 #define KEY_DICT_END            (1L<<27)
70 #define KEY_CONTROL             (1L<<28)
71 #define KEY_FUNC                (1L<<29)
72 
73 #define KEY_TEXT_CLEAR  (KEY_TEXT_CHANGE|KEY_TEXT_FIXED)
74 #define KEY_CHANGE      (KEY_HENKAN_END|KEY_MODE_CHANGE \
75                 |KEY_TEXT_CHANGE|KEY_TEXT_FIXED)
76 #define KEY_SELECT      (KEY_CAND_START|KEY_SYMBOL_START|KEY_SELECT_END \
77                 |KEY_SELECT_ABORT|KEY_SELECT_RIGHT|KEY_SELECT_LEFT \
78                 |KEY_SELECT_UP|KEY_SELECT_DOWN|KEY_SELECT_FIRST \
79                 |KEY_SELECT_LAST|KEY_SELECT_NEXTP|KEY_SELECT_PREVP \
80                 |KEY_SELECT_LEFTMOST|KEY_SELECT_RIGHTMOST|KEY_HINSI_START)
81 #define KEY_DICT        (KEY_DICT_START|KEY_DICT_REGISTER|KEY_DICT_CLEAR \
82                 |KEY_DICT_CHANGE|KEY_DICT_END)
83 
84 #ifndef WCHAR_DEFINED
85 #define WCHAR_DEFINED
86 #undef wchar
87 #ifdef WCHAR_LONG
88 typedef unsigned long  wchar;
89 #else
90 typedef unsigned short wchar;
91 #endif
92 #endif
93 
94 /*
95  * define for server status
96  */
97 #define CONNECT_OK              0
98 #define CONNECT_FAIL            -1
99 
100 /*
101  * define for locale
102  */
103 #define JP_SJIS                 0
104 #define JP_EUC                  1
105 #define JP_JIS8                 2
106 #define JP_JIS7                 3
107 #define JP_OTHER                -1
108 
109 /*
110  * define for buffer size
111  */
112 #define YBUFSIZ                 32
113 #define RBUFSIZ                 16
114 #define CANDBUFSIZ              128
115 #define KANABUFSIZ              256
116 #define KANJIBUFSIZ             512
117 #define BUNBUFSIZ               256
118 
119 /*
120  * define for attribute of segment
121  */
122 #define SEG_REVERSED            0
123 #define SEG_UNDER_LINE          1
124 #define SEG_NORMAL              2
125 
126 typedef unsigned long           Xsj3csMode;
127 typedef unsigned long           Xsj3ccMode;
128 typedef unsigned long           Xsj3cdMode;
129 typedef unsigned long           Xsj3cFlag;
130 typedef unsigned long           Xsj3cEvent;
131 
132 #define MODE_HIRA               0
133 #define MODE_ZKATA              1
134 #define MODE_HKATA              2
135 #define MODE_HALPHA             3
136 #define MODE_ZALPHA             4
137 
138 #define MODE_SJIS               5
139 #define MODE_EUC                6
140 #define MODE_JIS                7
141 #define MODE_KUTEN              8
142 
143 #define MODE_TOROKU             9
144 #define MODE_SYOUKYO            10
145 #define MODE_KANJI              11
146 #define MODE_EDIT               12
147 #define MODE_CAND               13
148 #define MODE_SYMBOL             14
149 #define MODE_HINSI              15
150 #define MODE_QUOTE              16
151 
152 #define MODE_ROLLDOWN           5
153 #define MODE_ROLLUP             6
154 
155 #define MODE_HANKAKU            5
156 #define MODE_ZENKAKU            6
157 #define MODE_UPPER              7
158 #define MODE_LOWER              8
159 
160 #define MODE_CONV_NUM           7   /* HIRA-ZALPHA,ROLLDOWN,ROLLUP          */
161 #define MODE_INROT_NUM          9   /* HIRA-ZALPHA,SJIS-KUTEN               */
162 #define MODE_OUTROT_NUM         9   /* HIRA-ZALPHA,HANKAKU-LOWER            */
163 #define MODE_CODE_NUM           4   /* SJIS-KUTEN                           */
164 #define MODE_STR_NUM            17  /* HIRA-ZALPHA,SJIS-KUTEN,TOROKU-HINSI  */
165 
166 /*
167  * Roma-Kana Conversion Table Structure
168  */
169 typedef struct sj3rktable {
170     unsigned char          *roma;
171     unsigned char          *yomi;
172     unsigned char          *str;
173     int                     rlen;
174     int                     ylen;
175     struct sj3rktable      *next;
176 } Xsj3cRKTable;
177 
178 /*
179  * Hiragana-Katakana Conversion Table Structure
180  */
181 typedef struct sj3hktable {
182     unsigned char          *hira;
183     unsigned char          *zkata;
184     unsigned char          *hkata;
185     unsigned char          *halpha;
186     int                     hlen;
187     struct sj3hktable      *next;
188 } Xsj3cHKTable;
189 
190 /*
191  * Zenkaku-Hankaku Conversion Table Structure
192  */
193 typedef struct sj3zhtable {
194     unsigned char          *halpha;
195     unsigned char          *zalpha;
196     unsigned char          *zkana;
197     unsigned char          *hkata;
198     struct sj3zhtable      *next;
199 } Xsj3cZHTable;
200 
201 /*
202  * Data Structure
203  */
204 typedef struct _Xsj3cData {
205     int                     len;        /* Length of data           */
206     wchar                  *data;
207 } Xsj3cDataRec,   *Xsj3cData;
208 
209 typedef Xsj3cDataRec    Xsj3cSymbolRec;
210 typedef Xsj3cData       Xsj3cSymbol;
211 typedef Xsj3cDataRec    Xsj3cHinsiRec;
212 typedef Xsj3cData       Xsj3cHinsi;
213 
214 /*
215  * Candidate Structure
216  */
217 typedef struct _Xsj3cCand {
218     int                     len;        /* Length of candidate          */
219     wchar                   data[CANDBUFSIZ];  /* Candidate string      */
220     SJ3_STUDYREC            dcid;       /* ID for studying              */
221 } Xsj3cCandRec,   *Xsj3cCand;
222 
223 /*
224  * Dictionary Massage Data Structure
225  */
226 typedef struct _Xsj3cDictMsg {
227     int                     len;        /* Length of data           */
228     wchar                  *data;
229     int                     attr;       /* attribute of data        */
230 } Xsj3cDictMsgRec,   *Xsj3cDictMsg;
231 
232 /*
233  * Key Table Structure
234  */
235 typedef struct sj3keytable {
236     char                   *keyword;
237     KeySym                  ksym;
238     Xsj3ccMode              modmask;
239     Xsj3cEvent              (*func)();
240     Xsj3cFlag               inputsame;
241     struct sj3keytable     *prev;
242     struct sj3keytable     *next;
243 } Xsj3cKeyTable;
244 
245 /*
246  * Segment structure
247  */
248 typedef struct _Xsj3cSeg {
249     int             value;      /* Result value of pre-edit conversion  */
250     unsigned char  *str;        /* Pre-edit strings buffer              */
251     unsigned char  *sp;         /* Current pointer of pre-edit strings  */
252     wchar          *yomi;       /* Yomi characters buffer               */
253     wchar          *disp;       /* Display/Kanji characters buffer      */
254     unsigned char  *oldstr;     /* Old pre-edit strings buffer          */
255     int             oldlen;     /* Length old Roma-Kana conversion unit */
256     int             n_roma;     /* Romaji/Code counter of pre-edit      */
257     int             n_kana;     /* Kana counter of pre-edit strings     */
258     int             size;       /* Size of yomi/disp character buffer   */
259     int             cur;        /* Current cursor position              */
260     int             num;        /* Length of yomi characters            */
261     int             dnum;       /* Length of display characters         */
262     Xsj3csMode      cursegmode; /* Character kind of yomi characters    */
263     Xsj3cFlag       status;     /* Conversion status (noconv or conved) */
264     Xsj3cFlag       change;     /* Flag, Need to study or not           */
265     Xsj3cFlag       edit;       /* Flag, Available to edit or not       */
266     SJ3_STUDYREC    dcid;       /* ID for studying                      */
267 } Xsj3cSegRec,    *Xsj3cSeg;
268 
269 /*
270  * Dictionary  Data Structure
271  */
272 typedef struct _Xsj3cDictData {
273     Xsj3cSeg                seg;        /* Yomi Segment buffer          */
274     Xsj3cDictMsg            msg;        /* Message buffers              */
275     Xsj3cdMode              mode;       /* Registration or elimination  */
276     Xsj3cdMode              status;     /* Current status               */
277     int                     value;      /* Result value of operation    */
278     int                     n_dict;     /* Expanded segment counter     */
279 } Xsj3cDictDataRec,   *Xsj3cDictData;
280 
281 /*
282  * Buffer for Sj3 Object
283  */
284 typedef struct _Xsj3cBuf {
285     int             server;         /* Current conversion server            */
286     Xsj3ccMode      convmode;       /* Current conversion mode              */
287 
288     /* Converting string data                                               */
289     Xsj3cSeg       *input;          /* Segment buffers for input            */
290     Xsj3cSeg       *backup;         /* Segment buffers for backup           */
291     Xsj3cSeg        current;        /* Segment buffer of current input      */
292     int             curseg;         /* Current segment number               */
293     int             segnum;         /* Total segment number                 */
294     int             backsegnum;     /* Old total segment number             */
295     int             convedsegnum;   /* Total converted segment number       */
296 
297     /* Current character mode data                                          */
298     Xsj3csMode      inputmode;      /* Current input character kind         */
299     Xsj3csMode      dispmode;       /* Current display character kind       */
300 
301     /* Data for handling dictionary (DictMode)                              */
302     Xsj3cDictData   dict;           /* Data for DictMode                    */
303 
304     /* Data for selection (SelectMode)                                      */
305     Xsj3cCand       candidate;      /* Candidate strings                    */
306     Xsj3cSymbol     symbol;         /* Symbol strings                       */
307     Xsj3cHinsi      hinsi;          /* Hinsi strings                        */
308     int             candnum;        /* Total candidate number               */
309     int             curcand;        /* Current candidate number             */
310     int             cursymbol;      /* Current symbol number                */
311     int             curhinsi;       /* Current hinsi number                 */
312     Xsj3ccMode      selectstatus;   /* Status of SelectMode                 */
313     int             n_select;       /* Counter for candidates to SelectMode */
314     int             candseg;        /* Segment number of current candidate  */
315 
316     /* Conversion tables                                                    */
317     Xsj3cRKTable   *rktable;        /* Roma-kana conversion table           */
318     Xsj3cHKTable   *hktable;        /* Hiragana-Katakana conversion table   */
319     Xsj3cZHTable   *zhtable;        /* Hankaku-Zenkaku conversion table     */
320 
321     /* Other data for conversion                                            */
322     unsigned char  *rkdouble;       /* Roma-kana double conversion data     */
323     unsigned char  *plosive;        /* Roma-kana plosive conversion data    */
324 
325     /* Next sjrc file to read                                               */
326     char           *rcfile;
327 
328     /* Common resource in sjrc file (Common with sj2/sj3/sjx)               */
329     Xsj3cKeyTable  *key;            /* Key-function conversion table        */
330                                     /* Custom-flag (.key .sjxkey .ki2key)   */
331     Xsj3csMode      inmoderot[MODE_INROT_NUM];/* Input character mode       */
332                                     /* Custom-flag (.InitialMode)           */
333     int             inmoderotnum;   /* Total input character mode number    */
334     Xsj3csMode      outmoderot[MODE_OUTROT_NUM];/* Output character mode    */
335                                     /* Custom-flag (.PrintMode)             */
336     int             outmoderotnum;  /* Total output character mode number   */
337     Xsj3csMode      defcode[MODE_CODE_NUM]; /* Input code rotation          */
338                                     /* Custom-flag (.DefaultCode)           */
339     int             coderotnum;     /* Total input code rotation number     */
340     Xsj3csMode      muhenmode;      /* Character kind after unconverting    */
341                                     /* Custom-flag (.MuhenkanMode)          */
342     Xsj3csMode      togglemode;     /* Character kind by toggling           */
343                                     /* Custom-flag (.MuhenkanInEdit)        */
344     Xsj3cFlag       dotoggle;       /* Custom-flag (.MuhenkanToggle)        */
345     Xsj3cFlag       throughflg;     /* Trough character flag                */
346     wchar          *modestr[MODE_STR_NUM]; /* Character mode strings       */
347                                     /* Custom-flag (.guide.[mode])          */
348     int             modelen[MODE_STR_NUM];  /* Length of mode strings       */
349     Xsj3cFlag       gakusyuu;       /* Custom-flag (.bstudy)                */
350     Xsj3cFlag       rkbell;         /* Custom-flag (.rkerrbell)             */
351     Xsj3cFlag       flushaconv;     /* Custom-flag (.FlushAfterConversion)  */
352     char           *sj3serv;        /* First sj3serv hostname               */
353                                     /* Custom-flag (.server)                */
354     unsigned char  *setnormal;      /* Custom-flag (.SetNormal)             */
355     unsigned char  *throughnext;    /* Custom-flag (.ThroughNext)           */
356 
357     /* Original resource (Not exists in sj2/sj3/sjx)                        */
358     char           *sj3serv2;       /* Second sj3serv hostname              */
359                                     /* Custom-flag (.server2)               */
360     Xsj3cFlag       flushiconv;     /* Custom-flag (.FlushInConversion)     */
361     Xsj3cFlag       flushsconv;     /* Custom-flag (.FlushSelectConversion) */
362     Xsj3cFlag       flusheconv;     /* Custom-flag (.FlushEndConversion)    */
363     Xsj3cFlag       alphaconv;      /* Custom-flag (.AlphabetConversion)    */
364     Xsj3cFlag       backdisplay;    /* Custom-flag (.BackDisplay)           */
365     Xsj3cFlag       beginlastseg;   /* Custom-flag (.BeginConversionLast)   */
366     Xsj3cFlag       expandmconv;    /* Custom-flag (.ExpandModeConversion)  */
367     Xsj3cFlag       shrinkmconv;    /* Custom-flag (.ShrinkModeConversion)  */
368     Xsj3cFlag       expandkconv;    /* Custom-flag (.ExpandKanjiConversion) */
369     Xsj3cFlag       shrinkkconv;    /* Custom-flag (.ShrinkKanjiConversion) */
370     Xsj3cFlag       shrinkall;      /* Custom-flag (.ShrinkAll)             */
371     Xsj3cFlag       henkanseg;      /* Custom-flag (.HenkanSegment)         */
372     Xsj3cFlag       muhenseg;       /* Custom-flag (.MuhenkanSegment)       */
373     Xsj3cFlag       delchange;      /* Custom-flag (.DeleteChangeSegment)   */
374     Xsj3cFlag       flushchange;    /* Custom-flag (.FlushChangeSegment)    */
375     Xsj3cFlag       modeconv[MODE_CONV_NUM];/* Custom-flag (.ModeConversion)*/
376     Xsj3cFlag       moveloop;       /* Custom-flag (.MoveLoop)              */
377     Xsj3cFlag       movebyseg;      /* Custom-flag (.MoveBySegment)         */
378     Xsj3cFlag       jumpbyseg;      /* Custom-flag (.JumpBySegment)         */
379     Xsj3cFlag       delbyseg;       /* Custom-flag (.DeleteBySegment)       */
380     Xsj3cFlag       killbyseg;      /* Custom-flag (.KillBySegment)         */
381     Xsj3cFlag       muhencurlast;   /* Custom-flag (.MuhenkanCursorLast)    */
382     Xsj3cFlag       editcurlast;    /* Custom-flag (.EditCursorLast)        */
383     Xsj3cFlag       flushcurlast;   /* Custom-flag (.FlushCursorLast)       */
384     Xsj3cFlag       convedunderline;/* Custom-flag (.ConvertedUnderLine)    */
385     Xsj3cFlag       dispmodechange; /* Custom-flag (.DisplayModeChange)     */
386     Xsj3cFlag       dellastmove;    /* Custom-flag (.DeleteLastMove)        */
387     Xsj3cFlag       kanaonly;       /* Custom-flag (.KanaInputOnly)         */
388     Xsj3cFlag       inputsame;      /* Custom-flag (.InputSameTime)         */
389     Xsj3cFlag       cntrlsame;      /* Custom-flag (.ControlSameTime)       */
390     Xsj3cFlag       selectconv;     /* Custom-flag (.BeforeSelectConversion)*/
391     Xsj3cFlag       beforeconv;     /* Custom-flag (.BeforeConversion)      */
392     Xsj3cFlag       lastdoubleconv; /* Custom-flag (.LastDoubleConversion)  */
393     int             selectcount;    /* Custom-flag (.BeforeSelectCount)     */
394     Xsj3cFlag       selectback;     /* Custom-flag (.SelectBackSpaceCurrent)*/
395     Xsj3cFlag       candpadding;    /* Custom-flag (.CandidatePadding)      */
396 
397 } Xsj3cBufRec,    *Xsj3cBuf;
398 
399 /* Key event handling                               */
400 extern unsigned char       *Xsj3cGetPreeditArea();
401 extern Xsj3cEvent           Xsj3cKeyConv();
402 
403 /* Setting up environment                           */
404 extern void                 Xsj3cSetInLang();
405 extern void                 Xsj3cSetOutLang();
406 extern void                 Xsj3cSetKanaMod();
407 
408 /* Connection to language conversion server handling */
409 extern int                  Xsj3cOpen();
410 extern void                 Xsj3cClose();
411 extern void                 Xsj3cConnect();
412 
413 /* Operation of buffers                             */
414 extern Xsj3cBuf             Xsj3cCreateBuffer();
415 extern void                 Xsj3cFreeBuffer();
416 extern void                 Xsj3cClearBuffer();
417 extern void                 Xsj3cFlushBuffer();
418 extern void                 Xsj3cFixBuffer();
419 
420 /* Getting data to draw or send to other            */
421 extern int                  Xsj3cGetSegNum();
422 extern int                  Xsj3cGetPosition();
423 extern wchar               *Xsj3cGetSeg();
424 extern wchar               *Xsj3cGetModeStr();
425 extern wchar               *Xsj3cGetConvertedStr();
426 extern int                  Xsj3cGetConvertedLength();
427 
428 /* Operartion of candidate data                     */
429 extern int                  Xsj3cGetCandidateNum();
430 extern Xsj3cCand            Xsj3cGetCandidates();
431 extern wchar               *Xsj3cGetCandidate();
432 extern int                  Xsj3cSetCandidate();
433 extern void                 Xsj3cEndCandidate();
434 
435 /* Operartion of symbol data                        */
436 extern int                  Xsj3cGetSymbolNum();
437 extern Xsj3cSymbol          Xsj3cGetSymbols();
438 extern wchar               *Xsj3cGetSymbol();
439 extern int                  Xsj3cSetSymbol();
440 extern void                 Xsj3cEndSymbol();
441 
442 /* Operartion of hinsi data                         */
443 extern int                  Xsj3cGetHinsiNum();
444 extern Xsj3cHinsi           Xsj3cGetHinsis();
445 extern wchar               *Xsj3cGetHinsi();
446 extern int                  Xsj3cSetHinsi();
447 extern void                 Xsj3cEndHinsi();
448 
449 /* Operartion of dictionary data                    */
450 extern int                  Xsj3cGetDictMsgNum();
451 extern Xsj3cDictMsg         Xsj3cGetDictMsgs();
452 extern wchar               *Xsj3cGetDictMsg();
453 extern void                 Xsj3cDictRegister();
454 extern void                 Xsj3cDictClear();
455 extern void                 Xsj3cEndDict();
456 
457 extern void                 Xsj3cInitializeTables();
458 
459 #endif /* _Xsj3clib_h */
460