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