Mercurial > kinput2.yaz
comparison lib/Xsj3clib/sjrc.c @ 0:92745d501b9a
initial import from kinput2-v3.1
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 08 Mar 2010 04:44:30 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:92745d501b9a |
---|---|
1 #ifndef lint | |
2 static char *rcsid = "$Id: sjrc.c,v 2.3 1993/01/06 10:56:56 nao Exp $"; | |
3 #endif | |
4 /* | |
5 * Copyright 1991 Sony Corporation | |
6 * | |
7 * Permission to use, copy, modify, distribute, and sell this software and its | |
8 * documentation for any purpose is hereby granted without fee, provided that | |
9 * the above copyright notice appear in all copies and that both that | |
10 * copyright notice and this permission notice appear in supporting | |
11 * documentation, and that the name of Sony not be used in advertising or | |
12 * publicity pertaining to distribution of the software without specific, | |
13 * written prior permission. Sony makes no representations about the | |
14 * suitability of this software for any purpose. It is provided "as is" | |
15 * without express or implied warranty. | |
16 * | |
17 * SONY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL | |
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SONY | |
19 * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
20 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION | |
21 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |
22 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
23 */ | |
24 /* | |
25 * Author: Naoshi Suzuki, SONY Corporation. (nao@sm.sony.co.jp) | |
26 */ | |
27 | |
28 #include <stdio.h> | |
29 #include <ctype.h> | |
30 #include "common.h" | |
31 #include "sj3ctype.h" | |
32 #include "util.h" | |
33 #include "table.h" | |
34 | |
35 void Xsj3cRCInit(); | |
36 | |
37 static int _Xsj3cReadRC(); | |
38 | |
39 extern int _Xsj3cSetKeyTable(); | |
40 static int _Xsj3cSetInputMode(); | |
41 static int _Xsj3cSetPrintMode(); | |
42 static int _Xsj3cSetDefCode(); | |
43 static int _Xsj3cSetMuhenkan(); | |
44 static int _Xsj3cSetMuEdit(); | |
45 static int _Xsj3cSetMToggle(); | |
46 int _Xsj3cSetGuide(); | |
47 static int _Xsj3cSetBStudy(); | |
48 static int _Xsj3cSetRkeBell(); | |
49 static int _Xsj3cSetFlushAfterConv(); | |
50 static int _Xsj3cSetSj3Serv(); | |
51 static int _Xsj3cSetNormal(); | |
52 static int _Xsj3cSetThroughNext(); | |
53 | |
54 static int _Xsj3cSetSj3Serv2(); | |
55 static int _Xsj3cSetFlushInConv(); | |
56 static int _Xsj3cSetFlushSelectConv(); | |
57 static int _Xsj3cSetFlushEndConv(); | |
58 static int _Xsj3cSetAlphaConv(); | |
59 static int _Xsj3cSetBackDisplay(); | |
60 static int _Xsj3cSetSegLast(); | |
61 static int _Xsj3cSetExpandMConv(); | |
62 static int _Xsj3cSetShrinkMConv(); | |
63 static int _Xsj3cSetExpandKConv(); | |
64 static int _Xsj3cSetShrinkKConv(); | |
65 static int _Xsj3cSetShrinkAll(); | |
66 static int _Xsj3cSetConvSeg(); | |
67 static int _Xsj3cSetUnconvSeg(); | |
68 static int _Xsj3cSetDelChange(); | |
69 static int _Xsj3cSetFlushChange(); | |
70 static int _Xsj3cSetModeConv(); | |
71 static int _Xsj3cSetMoveLoop(); | |
72 static int _Xsj3cSetModeBySeg(); | |
73 static int _Xsj3cSetJumpBySeg(); | |
74 static int _Xsj3cSetDelBySeg(); | |
75 static int _Xsj3cSetKillBySeg(); | |
76 static int _Xsj3cSetMuhenCursorLast(); | |
77 static int _Xsj3cSetEditCursorLast(); | |
78 static int _Xsj3cSetFlushCursorLast(); | |
79 static int _Xsj3cSetUnderLine(); | |
80 static int _Xsj3cSetDispMChange(); | |
81 static int _Xsj3cSetDelLastMove(); | |
82 static int _Xsj3cSetKanaInput(); | |
83 static int _Xsj3cSetInputSame(); | |
84 static int _Xsj3cSetCntrlSame(); | |
85 static int _Xsj3cSetSelectConv(); | |
86 static int _Xsj3cSetBeforeConv(); | |
87 static int _Xsj3cSetLastDoubleConv(); | |
88 static int _Xsj3cSetSelectCount(); | |
89 static int _Xsj3cSetSelectBackMove(); | |
90 static int _Xsj3cSetCandidatePad(); | |
91 static int _Xsj3cSetNextRCFile(); | |
92 static int _Xsj3cSetIncludeRCFile(); | |
93 | |
94 static struct functable { | |
95 char *keyword; | |
96 int (*func)(); | |
97 } funcs[] = { | |
98 "key", _Xsj3cSetKeyTable, | |
99 "escape", _Xsj3cSetKeyTable, | |
100 "sjxkey", _Xsj3cSetKeyTable, | |
101 "ki2key", _Xsj3cSetKeyTable, | |
102 "initialmode", _Xsj3cSetInputMode, | |
103 "defaultcode", _Xsj3cSetDefCode, | |
104 "muhenkanmode", _Xsj3cSetMuhenkan, | |
105 "muhenkaninedit", _Xsj3cSetMuEdit, | |
106 "muhenkantoggle", _Xsj3cSetMToggle, | |
107 "guide", _Xsj3cSetGuide, | |
108 "bstudy", _Xsj3cSetBStudy, | |
109 "rkerrbell", _Xsj3cSetRkeBell, | |
110 "flushafterconversion", _Xsj3cSetFlushAfterConv, | |
111 "server", _Xsj3cSetSj3Serv, | |
112 "sj3serv", _Xsj3cSetSj3Serv, | |
113 "setnormal", _Xsj3cSetNormal, | |
114 "throughnext", _Xsj3cSetThroughNext, | |
115 "sj3serv2", _Xsj3cSetSj3Serv2, | |
116 "flushinconversion", _Xsj3cSetFlushInConv, | |
117 "flushselectconversion", _Xsj3cSetFlushSelectConv, | |
118 "flushendconversion", _Xsj3cSetFlushEndConv, | |
119 "alphabetconversion", _Xsj3cSetAlphaConv, | |
120 "backdisplay", _Xsj3cSetBackDisplay, | |
121 "beginconversionlast", _Xsj3cSetSegLast, | |
122 "expandmodeconversion", _Xsj3cSetExpandMConv, | |
123 "shrinkmodeconversion", _Xsj3cSetShrinkMConv, | |
124 "expandkanjiconversion", _Xsj3cSetExpandKConv, | |
125 "shrinkkanjiconversion", _Xsj3cSetShrinkKConv, | |
126 "shrinkall", _Xsj3cSetShrinkAll, | |
127 "henkansegment", _Xsj3cSetConvSeg, | |
128 "muhenkansegment", _Xsj3cSetUnconvSeg, | |
129 "deletechangesegment", _Xsj3cSetDelChange, | |
130 "flushchangesegment", _Xsj3cSetFlushChange, | |
131 "modeconversion", _Xsj3cSetModeConv, | |
132 "moveloop", _Xsj3cSetMoveLoop, | |
133 "movebysegment", _Xsj3cSetModeBySeg, | |
134 "jumpbysegment", _Xsj3cSetJumpBySeg, | |
135 "deletebysegment", _Xsj3cSetDelBySeg, | |
136 "killbysegment", _Xsj3cSetKillBySeg, | |
137 "muhenkancursorlast", _Xsj3cSetMuhenCursorLast, | |
138 "editkancursorlast", _Xsj3cSetEditCursorLast, | |
139 "flushkancursorlast", _Xsj3cSetFlushCursorLast, | |
140 "convertedunderline", _Xsj3cSetUnderLine, | |
141 "displaymodechange", _Xsj3cSetDispMChange, | |
142 "deletelastmove", _Xsj3cSetDelLastMove, | |
143 "kanainputonly", _Xsj3cSetKanaInput, | |
144 "inputsametime", _Xsj3cSetInputSame, | |
145 "controlsametime", _Xsj3cSetCntrlSame, | |
146 "printmode", _Xsj3cSetPrintMode, | |
147 "beforeselectconversion", _Xsj3cSetSelectConv, | |
148 "beforeconversion", _Xsj3cSetBeforeConv, | |
149 "lastdoubleconversion", _Xsj3cSetLastDoubleConv, | |
150 "beforeselectcount", _Xsj3cSetSelectCount, | |
151 "selectbackspacemove", _Xsj3cSetSelectBackMove, | |
152 "candidatepadding", _Xsj3cSetCandidatePad, | |
153 "nextrcfile", _Xsj3cSetNextRCFile, | |
154 "include", _Xsj3cSetIncludeRCFile, | |
155 NULL, NULL | |
156 }; | |
157 | |
158 static int inc_cnt; | |
159 | |
160 #define END -1 | |
161 #define COMMENT 0 | |
162 #define NORMAL 1 | |
163 #define BAD 2 | |
164 #define OTHERS 3 | |
165 #define SERIAL "nwp511" | |
166 #define SERIAL2 "nwp517" | |
167 #define SERIAL3 "nwp-511" | |
168 | |
169 /* | |
170 * Xsj3cRCInit() | |
171 * Decide sjrc file to read, then read it and set resources. | |
172 */ | |
173 void | |
174 Xsj3cRCInit(buf, sjrc, home) | |
175 Xsj3cBuf buf; | |
176 char *sjrc; | |
177 char *home; | |
178 { | |
179 extern char *getenv(); | |
180 register char *p; | |
181 SjrcRec rctable; | |
182 struct functable *functp; | |
183 FILE *fp; | |
184 register int line; | |
185 int status; | |
186 | |
187 if (!buf->rcfile) { | |
188 if ((buf->rcfile = (char *)malloc(BUFSIZ)) == NULL) | |
189 Xsj3cError("Can't allocate sjrc file"); | |
190 *buf->rcfile = '\0'; | |
191 | |
192 /* Get sjrc file and open */ | |
193 if (sjrc) { | |
194 if ((fp = fopen(sjrc, "r")) == NULL) | |
195 Xsj3cError("can't open sjrc file %s", sjrc); | |
196 strcpy(buf->rcfile, sjrc); | |
197 } else { | |
198 if ((p = getenv("SJRC")) && *p != '\0') { | |
199 if (*p != '/') { | |
200 if (home) | |
201 strcpy(buf->rcfile, home); | |
202 strcat(buf->rcfile, "/"); | |
203 } | |
204 strcat(buf->rcfile, p); | |
205 } else if (home) { | |
206 strcpy(buf->rcfile, home); | |
207 strcat(buf->rcfile, "/.sjrc"); | |
208 } else { | |
209 strcpy(buf->rcfile, SJ3DEFPATH); | |
210 strcat(buf->rcfile, DEF_SJRC_FILE); | |
211 } | |
212 if ((fp = fopen(buf->rcfile, "r")) == NULL) { | |
213 strcpy(buf->rcfile, SJ3DEFPATH); | |
214 strcat(buf->rcfile, DEF_SJRC_FILE); | |
215 if ((fp = fopen(buf->rcfile, "r")) == NULL) { | |
216 Xsj3cError("can't open sjrc file %s", buf->rcfile); | |
217 } | |
218 } | |
219 } | |
220 } else { | |
221 if ((fp = fopen(buf->rcfile, "r")) == NULL) { | |
222 Xsj3cWarning("can't open sjrc file %s", buf->rcfile); | |
223 return; | |
224 } | |
225 } | |
226 | |
227 /* Read sjrc file and set buffer fields */ | |
228 inc_cnt = 0; | |
229 for (line = 0; (status = | |
230 _Xsj3cReadRC(fp, &rctable)) != END; line++) { | |
231 functp = funcs; | |
232 if (status == NORMAL) { | |
233 while (functp->keyword != NULL) { | |
234 if (_Xsj3cCmp(rctable.key[0], functp->keyword)) { | |
235 if (!(*(functp->func))(buf, &rctable)) | |
236 Xsj3cWarning("wrong format in sjrc file. %s:%d", | |
237 buf->rcfile, line + 1); | |
238 break; | |
239 } | |
240 functp++; | |
241 } | |
242 } else if (status == COMMENT || status == OTHERS) { | |
243 continue; | |
244 } else { | |
245 Xsj3cWarning("bad line in sjrc file. %s:%d", buf->rcfile, line); | |
246 continue; | |
247 } | |
248 } | |
249 fclose(fp); | |
250 } | |
251 | |
252 /* | |
253 * _Xsj3cReadRC() | |
254 * Read sjrc file. (Non memory copy version) | |
255 */ | |
256 static int | |
257 _Xsj3cReadRC(fp, rctable) | |
258 FILE *fp; | |
259 Sjrctable rctable; | |
260 { | |
261 static unsigned char buf[256]; | |
262 register int i, j, k, end, byte2 = 0, kana = 0; | |
263 | |
264 if ((fgets (buf, sizeof(buf), fp)) == NULL) | |
265 return END; | |
266 | |
267 if (buf[0] == '\n' || buf[0] == '#' || buf[0] == '\0' ) | |
268 return COMMENT; | |
269 | |
270 for (i = 0, k = 0, end = 0; buf[i] != ' ' && buf[i] != '\t' && | |
271 buf[i] != '#' && buf[i] != '\n';) { | |
272 for (j = i; buf[i] != ' ' && buf[i] != '\t' | |
273 && buf[i] != '#' && buf[i] != '\n' && buf[i] != '.'; i++); | |
274 if (j == i && buf[i] == '.' ) { | |
275 i++; | |
276 continue; | |
277 } | |
278 if (buf[i] == '#' || buf[i] == '\n' ) | |
279 return BAD; | |
280 if (buf[i] == '\t' || buf[i] == ' ' ) | |
281 end++; | |
282 buf[i++] = '\0'; | |
283 if (!strcmp(&buf[j],SERIAL) || !strcmp(&buf[j],SERIAL2) | |
284 || !strcmp(&buf[j],SERIAL3)) | |
285 return OTHERS; | |
286 rctable->key[k++] = &buf[j]; | |
287 if (end) | |
288 break; | |
289 } | |
290 if ( k < 1) | |
291 return BAD; | |
292 for (; k < 2;) | |
293 rctable->key[k++] = NULL; | |
294 while(buf[i] == ' ' || buf[i] == '\t') i++; | |
295 if (in_lang == JP_SJIS || in_lang == JP_EUC) { | |
296 for (k = 0, end = 0; buf[i] != '\n';) { | |
297 for (j = i; buf[i] != '\n' ; i+=2) { | |
298 if (iskan1(buf[i], in_lang)) { | |
299 if (iskan2(buf[i + 1], in_lang)) | |
300 continue; | |
301 else if (buf[i + 1] == '#' || buf[i + 1] == ' ' | |
302 || buf[i + 1] == '\t'|| buf[i + 1] == '\n') { | |
303 i++; | |
304 break; | |
305 } else | |
306 continue; | |
307 } else if (buf[i] == '#' || buf[i] == ' ' || buf[i] == '\t') { | |
308 break; | |
309 } else if (buf[i] == '.') { | |
310 if (i > 0 && buf[i - 1] == '\\') { | |
311 continue; | |
312 } else | |
313 break; | |
314 } else if (buf[i + 1] == '#' || buf[i + 1] == ' ' | |
315 || buf[i + 1] == '\t' || buf[i + 1] == '\n') { | |
316 i++; | |
317 break; | |
318 } else if (buf[i + 1] == '.') { | |
319 if (buf[i] == '\\') { | |
320 continue; | |
321 } else { | |
322 i++; | |
323 break; | |
324 } | |
325 } else | |
326 continue; | |
327 } | |
328 if (buf[i] == '#' || buf[i] == '\n' ) | |
329 end++; | |
330 buf[i++] = '\0'; | |
331 rctable->value[k++] = &buf[j]; | |
332 if (end) | |
333 break; | |
334 while(buf[i] == ' ' || buf[i] == '\t') i++; | |
335 } | |
336 } else { | |
337 for (k = 0, end = 0; buf[i] != '\n';) { | |
338 for (j = i; buf[i] != '\n'; i++) { | |
339 if (buf[i] == ESC) { | |
340 if (buf[i + 1] == '#' || buf[i + 1] == ' ' || | |
341 buf[i + 1] == '\t'|| buf[i + 1] == '.' || | |
342 buf[i + 1] == '\n') { | |
343 i++; | |
344 break; | |
345 } else if (byte2) | |
346 byte2 = 0; | |
347 else | |
348 byte2++; | |
349 i += 2; | |
350 continue; | |
351 } else if (buf[i] == SO || buf[i] == SI) { | |
352 if (buf[i + 1] == '#' || buf[i + 1] == ' ' || | |
353 buf[i + 1] == '\t'|| buf[i + 1] == '.' || | |
354 buf[i + 1] == '\n') { | |
355 i++; | |
356 break; | |
357 } else if (buf[i] == SI) | |
358 kana = 0; | |
359 else | |
360 kana++; | |
361 continue; | |
362 } else if (byte2 || kana) | |
363 continue; | |
364 if (buf[i] == '#' || buf[i] == ' ' || buf[i] == '\t') { | |
365 break; | |
366 } else if (buf[i] == '.') { | |
367 if (i > 0 && buf[i - 1] == '\\') { | |
368 continue; | |
369 } else | |
370 break; | |
371 } else | |
372 continue; | |
373 } | |
374 if (buf[i] == '#' || buf[i] == '\n' ) | |
375 end++; | |
376 buf[i++] = '\0'; | |
377 rctable->value[k++] = &buf[j]; | |
378 if (end) | |
379 break; | |
380 while(buf[i] == ' ' || buf[i] == '\t') i++; | |
381 } | |
382 } | |
383 if ( k < 1) | |
384 return BAD; | |
385 for (; k < 10;) | |
386 rctable->value[k++] = NULL; | |
387 return NORMAL; | |
388 } | |
389 | |
390 /* | |
391 * _Xsj3cSetInputMode() | |
392 * Set a parameter by .initialmode entry. | |
393 */ | |
394 static int | |
395 _Xsj3cSetInputMode(buf, table) | |
396 Xsj3cBuf buf; | |
397 Sjrctable table; | |
398 { | |
399 register int i, j; | |
400 | |
401 for (i = 0, j = 0; i < MODE_INROT_NUM; i++, j++) { | |
402 if (table->value[j]) { | |
403 if (_Xsj3cCmp(table->value[j], "hiragana")) { | |
404 buf->inmoderot[i] = MODE_HIRA; | |
405 } else if (_Xsj3cCmp(table->value[j], "zkatakana")) { | |
406 buf->inmoderot[i] = MODE_ZKATA; | |
407 } else if (_Xsj3cCmp(table->value[j], "hkatakana")) { | |
408 buf->inmoderot[i] = MODE_HKATA; | |
409 } else if (_Xsj3cCmp(table->value[j], "halpha")) { | |
410 buf->inmoderot[i] = MODE_HALPHA; | |
411 } else if (_Xsj3cCmp(table->value[j], "zalpha")) { | |
412 buf->inmoderot[i] = MODE_ZALPHA; | |
413 } else if (_Xsj3cCmp(table->value[j], "jis")) { | |
414 buf->inmoderot[i] = MODE_JIS; | |
415 } else if (_Xsj3cCmp(table->value[j], "sjis")) { | |
416 buf->inmoderot[i] = MODE_SJIS; | |
417 } else if (_Xsj3cCmp(table->value[j], "kuten")) { | |
418 buf->inmoderot[i] = MODE_KUTEN; | |
419 } else if (_Xsj3cCmp(table->value[j], "euc")) { | |
420 buf->inmoderot[i] = MODE_EUC; | |
421 } else { | |
422 if (!_Xsj3cCmp(table->value[j], "unbuff") | |
423 && !_Xsj3cCmp(table->value[j], "buffer") | |
424 && !_Xsj3cCmp(table->value[j], "unbuffer") | |
425 && !_Xsj3cCmp(table->value[j], "direct")) | |
426 Xsj3cWarning("Unknown input mode \"%s\"",table->value[j]); | |
427 i--; | |
428 continue; | |
429 } | |
430 } else { | |
431 break; | |
432 } | |
433 } | |
434 if ((buf->inmoderotnum = i) > 0) | |
435 return 1; | |
436 else | |
437 return 0; | |
438 } | |
439 | |
440 /* | |
441 * _Xsj3cSetPrintMode() | |
442 * Set a parameter by .PrintMode entry. | |
443 */ | |
444 static int | |
445 _Xsj3cSetPrintMode(buf, table) | |
446 Xsj3cBuf buf; | |
447 Sjrctable table; | |
448 { | |
449 register int i, j; | |
450 | |
451 for (i = 0, j = 0; i < MODE_OUTROT_NUM; i++, j++) { | |
452 if (table->value[j]) { | |
453 if (_Xsj3cCmp(table->value[j], "hiragana")) { | |
454 buf->outmoderot[i] = MODE_HIRA; | |
455 } else if (_Xsj3cCmp(table->value[j], "zkatakana")) { | |
456 buf->outmoderot[i] = MODE_ZKATA; | |
457 } else if (_Xsj3cCmp(table->value[j], "hkatakana")) { | |
458 buf->outmoderot[i] = MODE_HKATA; | |
459 } else if (_Xsj3cCmp(table->value[j], "halpha")) { | |
460 buf->outmoderot[i] = MODE_HALPHA; | |
461 } else if (_Xsj3cCmp(table->value[j], "zalpha")) { | |
462 buf->outmoderot[i] = MODE_ZALPHA; | |
463 } else if (_Xsj3cCmp(table->value[j], "hankaku")) { | |
464 buf->outmoderot[i] = MODE_HANKAKU; | |
465 } else if (_Xsj3cCmp(table->value[j], "zenkaku")) { | |
466 buf->outmoderot[i] = MODE_ZENKAKU; | |
467 } else if (_Xsj3cCmp(table->value[j], "upper")) { | |
468 buf->outmoderot[i] = MODE_UPPER; | |
469 } else if (_Xsj3cCmp(table->value[j], "lower")) { | |
470 buf->outmoderot[i] = MODE_LOWER; | |
471 } else { | |
472 Xsj3cWarning("Unknown print mode \"%s\"",table->value[j]); | |
473 i--; | |
474 continue; | |
475 } | |
476 } else { | |
477 break; | |
478 } | |
479 } | |
480 if ((buf->outmoderotnum = i) > 0) | |
481 return 1; | |
482 else | |
483 return 0; | |
484 } | |
485 | |
486 /* | |
487 * _Xsj3cSetDefCode() | |
488 * Set a parameter by .defaultcode entry. | |
489 */ | |
490 static int | |
491 _Xsj3cSetDefCode(buf, table) | |
492 Xsj3cBuf buf; | |
493 Sjrctable table; | |
494 { | |
495 register int i; | |
496 | |
497 for (i = 0; i < MODE_CODE_NUM; i++) { | |
498 if (table->value[i]) { | |
499 if (_Xsj3cCmp(table->value[i], "jis")) { | |
500 buf->defcode[i] = MODE_JIS; | |
501 } else if (_Xsj3cCmp(table->value[i], "sjis")) { | |
502 buf->defcode[i] = MODE_SJIS; | |
503 } else if (_Xsj3cCmp(table->value[i], "kuten")) { | |
504 buf->defcode[i] = MODE_KUTEN; | |
505 } else if (_Xsj3cCmp(table->value[i], "euc")) { | |
506 buf->defcode[i] = MODE_EUC; | |
507 } else { | |
508 Xsj3cWarning("Unknown input code"); | |
509 break; | |
510 } | |
511 } else { | |
512 break; | |
513 } | |
514 } | |
515 if ((buf->coderotnum = i) > 0) | |
516 return 1; | |
517 else | |
518 return 0; | |
519 } | |
520 | |
521 /* | |
522 * _Xsj3cSetMuhenkan() | |
523 * Set a parameter by .MuhenkanMode entry. | |
524 */ | |
525 static int | |
526 _Xsj3cSetMuhenkan(buf, table) | |
527 Xsj3cBuf buf; | |
528 Sjrctable table; | |
529 { | |
530 if (table->value[0]) { | |
531 if (_Xsj3cCmp(table->value[0], "hiragana")) { | |
532 buf->muhenmode = MODE_HIRA; | |
533 } else if (_Xsj3cCmp(table->value[0], "zkatakana")) { | |
534 buf->muhenmode = MODE_ZKATA; | |
535 } else if (_Xsj3cCmp(table->value[0], "hkatakana")) { | |
536 buf->muhenmode = MODE_HKATA; | |
537 } else if (_Xsj3cCmp(table->value[0], "halpha")) { | |
538 buf->muhenmode = MODE_HALPHA; | |
539 } else if (_Xsj3cCmp(table->value[0], "zalpha")) { | |
540 buf->muhenmode = MODE_ZALPHA; | |
541 } else if (_Xsj3cCmp(table->value[0], "jis")) { | |
542 buf->muhenmode = MODE_JIS; | |
543 } else if (_Xsj3cCmp(table->value[0], "sjis")) { | |
544 buf->muhenmode = MODE_SJIS; | |
545 } else if (_Xsj3cCmp(table->value[0], "kuten")) { | |
546 buf->muhenmode = MODE_KUTEN; | |
547 } else if (_Xsj3cCmp(table->value[0], "euc")) { | |
548 buf->muhenmode = MODE_EUC; | |
549 } else { | |
550 Xsj3cWarning("Invalid muhenkan mode \"%s\"",table->value[0]); | |
551 } | |
552 } | |
553 return 1; | |
554 } | |
555 | |
556 /* | |
557 * _Xsj3cSetMuEdit() | |
558 * Set a parameter by .MuhenkanInEdit entry. | |
559 */ | |
560 static int | |
561 _Xsj3cSetMuEdit(buf, table) | |
562 Xsj3cBuf buf; | |
563 Sjrctable table; | |
564 { | |
565 if (table->value[0]) { | |
566 if (_Xsj3cCmp(table->value[0], "hiragana")) { | |
567 buf->togglemode = MODE_HIRA; | |
568 } else if (_Xsj3cCmp(table->value[0], "zkatakana")) { | |
569 buf->togglemode = MODE_ZKATA; | |
570 } else if (_Xsj3cCmp(table->value[0], "hkatakana")) { | |
571 buf->togglemode = MODE_HKATA; | |
572 } else if (_Xsj3cCmp(table->value[0], "halpha")) { | |
573 buf->togglemode = MODE_HALPHA; | |
574 } else if (_Xsj3cCmp(table->value[0], "zalpha")) { | |
575 buf->togglemode = MODE_ZALPHA; | |
576 } else if (_Xsj3cCmp(table->value[0], "jis")) { | |
577 buf->togglemode = MODE_JIS; | |
578 } else if (_Xsj3cCmp(table->value[0], "sjis")) { | |
579 buf->togglemode = MODE_SJIS; | |
580 } else if (_Xsj3cCmp(table->value[0], "kuten")) { | |
581 buf->togglemode = MODE_KUTEN; | |
582 } else if (_Xsj3cCmp(table->value[0], "euc")) { | |
583 buf->togglemode = MODE_EUC; | |
584 } else { | |
585 Xsj3cWarning("Unknown toggle mode"); | |
586 } | |
587 } | |
588 | |
589 return 1; | |
590 } | |
591 | |
592 /* | |
593 * _Xsj3cSetMToggle() | |
594 * Set a parameter by .MuhenkanToggle entry. | |
595 */ | |
596 static int | |
597 _Xsj3cSetMToggle(buf, table) | |
598 Xsj3cBuf buf; | |
599 Sjrctable table; | |
600 { | |
601 if (!table->value[0]) | |
602 return 0; | |
603 if (_Xsj3cCmp(table->value[0],"on")) | |
604 buf->dotoggle = ON; | |
605 else | |
606 buf->dotoggle = OFF; | |
607 return 1; | |
608 } | |
609 | |
610 /* | |
611 * _Xsj3cSetGuide() | |
612 * Set a parameter by .guide entry. | |
613 */ | |
614 int | |
615 _Xsj3cSetGuide(buf, table) | |
616 Xsj3cBuf buf; | |
617 Sjrctable table; | |
618 { | |
619 Xsj3csMode mode; | |
620 wchar data[KANABUFSIZ]; | |
621 | |
622 if (table->key[1] && table->value[0]) { | |
623 if (_Xsj3cCmp(table->key[1], "hiragana")) { | |
624 mode = MODE_HIRA; | |
625 } else if (_Xsj3cCmp(table->key[1], "zkatakana")) { | |
626 mode = MODE_ZKATA; | |
627 } else if (_Xsj3cCmp(table->key[1], "hkatakana")) { | |
628 mode = MODE_HKATA; | |
629 } else if (_Xsj3cCmp(table->key[1], "halpha")) { | |
630 mode = MODE_HALPHA; | |
631 } else if (_Xsj3cCmp(table->key[1], "zalpha")) { | |
632 mode = MODE_ZALPHA; | |
633 } else if (_Xsj3cCmp(table->key[1], "jis")) { | |
634 mode = MODE_JIS; | |
635 } else if (_Xsj3cCmp(table->key[1], "sjis")) { | |
636 mode = MODE_SJIS; | |
637 } else if (_Xsj3cCmp(table->key[1], "kuten")) { | |
638 mode = MODE_KUTEN; | |
639 } else if (_Xsj3cCmp(table->key[1], "euc")) { | |
640 mode = MODE_EUC; | |
641 } else if (_Xsj3cCmp(table->key[1], "toroku")) { | |
642 mode = MODE_TOROKU; | |
643 } else if (_Xsj3cCmp(table->key[1], "register")) { | |
644 mode = MODE_TOROKU; | |
645 } else if (_Xsj3cCmp(table->key[1], "syoukyo")) { | |
646 mode = MODE_SYOUKYO; | |
647 } else if (_Xsj3cCmp(table->key[1], "eliminate")) { | |
648 mode = MODE_SYOUKYO; | |
649 } else if (_Xsj3cCmp(table->key[1], "kanji")) { | |
650 mode = MODE_KANJI; | |
651 } else if (_Xsj3cCmp(table->key[1], "edit")) { | |
652 mode = MODE_EDIT; | |
653 } else if (_Xsj3cCmp(table->key[1], "candidate")) { | |
654 mode = MODE_CAND; | |
655 } else if (_Xsj3cCmp(table->key[1], "symbol")) { | |
656 mode = MODE_SYMBOL; | |
657 } else if (_Xsj3cCmp(table->key[1], "hinsi")) { | |
658 mode = MODE_HINSI; | |
659 } else if (_Xsj3cCmp(table->key[1], "quote")) { | |
660 mode = MODE_QUOTE; | |
661 } else { | |
662 Xsj3cWarning("Unknown display mode key \"%s\"",table->key[1]); | |
663 return 0; | |
664 } | |
665 _Xsj3cmINtowOUT(buf->rcfile, table->value[0], data, | |
666 &buf->modelen[mode]); | |
667 if (!buf->modestr[mode]) { | |
668 if (!(buf->modestr[mode] | |
669 = (wchar *)malloc((buf->modelen[mode] + 1) * sizeof(wchar)))) | |
670 Xsj3cError("Cannot allocate for mode string"); | |
671 } else { | |
672 if (!(buf->modestr[mode] = (wchar *)realloc(buf->modestr[mode], | |
673 (buf->modelen[mode] + 1) * sizeof(wchar)))) | |
674 Xsj3cError("Cannot reallocate for mode string"); | |
675 } | |
676 _Xsj3cWcpy(buf->modestr[mode], data); | |
677 return 1; | |
678 } else { | |
679 return 0; | |
680 } | |
681 } | |
682 | |
683 /* | |
684 * _Xsj3cSetBStudy() | |
685 * Set a parameter by .bstudy entry. | |
686 */ | |
687 static int | |
688 _Xsj3cSetBStudy(buf, table) | |
689 Xsj3cBuf buf; | |
690 Sjrctable table; | |
691 { | |
692 if (!table->value[0]) | |
693 return 0; | |
694 if (_Xsj3cCmp(table->value[0],"on")) | |
695 buf->gakusyuu = ON; | |
696 else | |
697 buf->gakusyuu = OFF; | |
698 return 1; | |
699 } | |
700 | |
701 /* | |
702 * _Xsj3cSetFlushAfterConv() | |
703 * Set a parameter by .flushafterconversion entry. | |
704 */ | |
705 static int | |
706 _Xsj3cSetFlushAfterConv(buf, table) | |
707 Xsj3cBuf buf; | |
708 Sjrctable table; | |
709 { | |
710 if (!table->value[0]) | |
711 return 0; | |
712 if (_Xsj3cCmp(table->value[0],"on")) | |
713 buf->flushaconv = ON; | |
714 else | |
715 buf->flushaconv = OFF; | |
716 return 1; | |
717 } | |
718 | |
719 /* | |
720 * _Xsj3cSetFlushInConv() | |
721 * Set a parameter by .FlushInConversion entry. | |
722 */ | |
723 static int | |
724 _Xsj3cSetFlushInConv(buf, table) | |
725 Xsj3cBuf buf; | |
726 Sjrctable table; | |
727 { | |
728 if (!table->value[0]) | |
729 return 0; | |
730 if (_Xsj3cCmp(table->value[0],"on")) | |
731 buf->flushiconv = ON; | |
732 else if (_Xsj3cCmp(table->value[0],"off")) | |
733 buf->flushiconv = OFF; | |
734 else if (_Xsj3cCmp(table->value[0],"edit")) | |
735 buf->flushiconv = EDIT; | |
736 else | |
737 buf->flushiconv = NONE; | |
738 return 1; | |
739 } | |
740 | |
741 /* | |
742 * _Xsj3cSetFlushSelectConv() | |
743 * Set a parameter by .FlushSelectConversion entry. | |
744 */ | |
745 static int | |
746 _Xsj3cSetFlushSelectConv(buf, table) | |
747 Xsj3cBuf buf; | |
748 Sjrctable table; | |
749 { | |
750 if (!table->value[0]) | |
751 return 0; | |
752 if (_Xsj3cCmp(table->value[0],"on")) | |
753 buf->flushsconv = ON; | |
754 else if (_Xsj3cCmp(table->value[0],"off")) | |
755 buf->flushsconv = OFF; | |
756 else if (_Xsj3cCmp(table->value[0],"edit")) | |
757 buf->flushsconv = EDIT; | |
758 else | |
759 buf->flushsconv = NONE; | |
760 return 1; | |
761 } | |
762 | |
763 /* | |
764 * _Xsj3cSetFlushEndConv() | |
765 * Set a parameter by .FlushEndConversion entry. | |
766 */ | |
767 static int | |
768 _Xsj3cSetFlushEndConv(buf, table) | |
769 Xsj3cBuf buf; | |
770 Sjrctable table; | |
771 { | |
772 if (!table->value[0]) | |
773 return 0; | |
774 if (_Xsj3cCmp(table->value[0],"on")) | |
775 buf->flusheconv = ON; | |
776 else | |
777 buf->flusheconv = OFF; | |
778 return 1; | |
779 } | |
780 | |
781 /* | |
782 * _Xsj3cSetRkeBell() | |
783 * Set a parameter by .rkerrbell entry. | |
784 */ | |
785 static int | |
786 _Xsj3cSetRkeBell(buf, table) | |
787 Xsj3cBuf buf; | |
788 Sjrctable table; | |
789 { | |
790 if (!table->value[0]) | |
791 return 0; | |
792 if (_Xsj3cCmp(table->value[0],"on")) | |
793 buf->rkbell = ON; | |
794 else | |
795 buf->rkbell = OFF; | |
796 return 1; | |
797 } | |
798 | |
799 /* | |
800 * _Xsj3cSetSj3Serv() | |
801 * Set a parameter by .server entry. | |
802 */ | |
803 static int | |
804 _Xsj3cSetSj3Serv(buf, table) | |
805 Xsj3cBuf buf; | |
806 Sjrctable table; | |
807 { | |
808 if (table->value[0]) { | |
809 static char hostname1[32]; | |
810 _Xsj3cReadAscii(buf->rcfile, table->value[0], hostname1); | |
811 buf->sj3serv = hostname1; | |
812 return 1; | |
813 } | |
814 return 0; | |
815 } | |
816 | |
817 /* | |
818 * _Xsj3cSetNormal() | |
819 * Set a parameter by .SetNormal entry. | |
820 */ | |
821 static int | |
822 _Xsj3cSetNormal(buf, table) | |
823 Xsj3cBuf buf; | |
824 Sjrctable table; | |
825 { | |
826 if (table->value[0] && iscntrl(*table->value[0])) { | |
827 register unsigned char *c; | |
828 register int len; | |
829 if (buf->setnormal) { | |
830 c = buf->setnormal; | |
831 while (*c != '\0') { | |
832 if (*c == *table->value[0]) | |
833 return 1; /* same code */ | |
834 c++; | |
835 } | |
836 len = c - buf->setnormal; | |
837 buf->setnormal = (unsigned char *)realloc(buf->setnormal, len + 2); | |
838 *(buf->setnormal + len) = *table->value[0]; | |
839 *(buf->setnormal + len + 1) = '\0'; | |
840 } else { | |
841 buf->setnormal = (unsigned char *)malloc(2); | |
842 c = buf->setnormal; | |
843 *c++ = *table->value[0]; | |
844 *c = '\0'; | |
845 } | |
846 return 1; | |
847 } | |
848 return 0; | |
849 } | |
850 | |
851 /* | |
852 * _Xsj3cSetThroughNext() | |
853 * Set a parameter by .ThroughtNext entry. | |
854 */ | |
855 static int | |
856 _Xsj3cSetThroughNext(buf, table) | |
857 Xsj3cBuf buf; | |
858 Sjrctable table; | |
859 { | |
860 if (table->value[0] && iscntrl(*table->value[0])) { | |
861 register unsigned char *c; | |
862 int len; | |
863 if (buf->throughnext) { | |
864 c = buf->throughnext; | |
865 while (*c != '\0') { | |
866 if (*c == *table->value[0]) | |
867 return 1; /* same code */ | |
868 c++; | |
869 } | |
870 len = c - buf->throughnext; | |
871 buf->throughnext | |
872 = (unsigned char *)realloc(buf->throughnext, len + 2); | |
873 *(buf->throughnext + len) = *table->value[0]; | |
874 *(buf->throughnext + len + 1) = '\0'; | |
875 } else { | |
876 buf->throughnext = (unsigned char *)malloc(2); | |
877 c = buf->throughnext; | |
878 *c++ = *table->value[0]; | |
879 *c = '\0'; | |
880 } | |
881 return 1; | |
882 } | |
883 return 0; | |
884 } | |
885 | |
886 /* | |
887 * _Xsj3cSetSj3Serv2() | |
888 * Set a parameter by .sj3serv2 entry. | |
889 */ | |
890 static int | |
891 _Xsj3cSetSj3Serv2(buf, table) | |
892 Xsj3cBuf buf; | |
893 Sjrctable table; | |
894 { | |
895 if (table->value[0]) { | |
896 static char hostname2[32]; | |
897 _Xsj3cReadAscii(buf->rcfile, table->value[0], hostname2); | |
898 buf->sj3serv2 = hostname2; | |
899 return 1; | |
900 } | |
901 return 0; | |
902 } | |
903 | |
904 /* | |
905 * _Xsj3cSetAlphaConv() | |
906 * Set a parameter by .AlphabetConversion entry. | |
907 */ | |
908 static int | |
909 _Xsj3cSetAlphaConv(buf, table) | |
910 Xsj3cBuf buf; | |
911 Sjrctable table; | |
912 { | |
913 if (!table->value[0]) | |
914 return 0; | |
915 if (_Xsj3cCmp(table->value[0],"on")) | |
916 buf->alphaconv = ON; | |
917 else | |
918 buf->alphaconv = OFF; | |
919 return 1; | |
920 } | |
921 | |
922 /* | |
923 * _Xsj3cSetBackDisplay() | |
924 * Set a parameter by .BackDisplay entry. | |
925 */ | |
926 static int | |
927 _Xsj3cSetBackDisplay(buf, table) | |
928 Xsj3cBuf buf; | |
929 Sjrctable table; | |
930 { | |
931 if (!table->value[0]) | |
932 return 0; | |
933 if (_Xsj3cCmp(table->value[0],"on")) | |
934 buf->backdisplay = ON; | |
935 else | |
936 buf->backdisplay = OFF; | |
937 return 1; | |
938 } | |
939 | |
940 /* | |
941 * _Xsj3cSetSegLast() | |
942 * Set a parameter by .BeginConversionLast entry. | |
943 */ | |
944 static int | |
945 _Xsj3cSetSegLast(buf, table) | |
946 Xsj3cBuf buf; | |
947 Sjrctable table; | |
948 { | |
949 if (!table->value[0]) | |
950 return 0; | |
951 if (_Xsj3cCmp(table->value[0],"on")) | |
952 buf->beginlastseg = ON; | |
953 else if (_Xsj3cCmp(table->value[0],"off")) | |
954 buf->beginlastseg = OFF; | |
955 else | |
956 buf->beginlastseg = NONE; | |
957 return 1; | |
958 } | |
959 | |
960 /* | |
961 * _Xsj3cSetShrinkAll() | |
962 * Set a parameter by .ShrinkAll entry. | |
963 */ | |
964 static int | |
965 _Xsj3cSetShrinkAll(buf, table) | |
966 Xsj3cBuf buf; | |
967 Sjrctable table; | |
968 { | |
969 if (!table->value[0]) | |
970 return 0; | |
971 if (_Xsj3cCmp(table->value[0],"on")) | |
972 buf->shrinkall = ON; | |
973 else | |
974 buf->shrinkall = OFF; | |
975 return 1; | |
976 } | |
977 | |
978 /* | |
979 * _Xsj3cSetDelChange() | |
980 * Set a parameter by .DeleteChangeSegment entry. | |
981 */ | |
982 static int | |
983 _Xsj3cSetDelChange(buf, table) | |
984 Xsj3cBuf buf; | |
985 Sjrctable table; | |
986 { | |
987 if (!table->value[0]) | |
988 return 0; | |
989 if (_Xsj3cCmp(table->value[0],"all")) | |
990 buf->delchange = ALL; | |
991 else if (_Xsj3cCmp(table->value[0],"after")) | |
992 buf->delchange = AFTER; | |
993 else | |
994 buf->delchange = ONE; | |
995 return 1; | |
996 } | |
997 | |
998 /* | |
999 * _Xsj3cSetFlushChange() | |
1000 * Set a parameter by .FlushChangeSegment entry. | |
1001 */ | |
1002 static int | |
1003 _Xsj3cSetFlushChange(buf, table) | |
1004 Xsj3cBuf buf; | |
1005 Sjrctable table; | |
1006 { | |
1007 if (!table->value[0]) | |
1008 return 0; | |
1009 if (_Xsj3cCmp(table->value[0],"all")) | |
1010 buf->flushchange = ALL; | |
1011 else | |
1012 buf->flushchange = ONE; | |
1013 return 1; | |
1014 } | |
1015 | |
1016 /* | |
1017 * _Xsj3cSetExpandKConv() | |
1018 * Set a parameter by .ExpandKanjiConversion entry. | |
1019 */ | |
1020 static int | |
1021 _Xsj3cSetExpandKConv(buf, table) | |
1022 Xsj3cBuf buf; | |
1023 Sjrctable table; | |
1024 { | |
1025 Xsj3cFlag input, conved; | |
1026 | |
1027 if (!(table->value[0] && table->value[1])) | |
1028 return 0; | |
1029 if (_Xsj3cCmp(table->value[0],"on")) | |
1030 input = ON; | |
1031 else | |
1032 input = OFF; | |
1033 if (_Xsj3cCmp(table->value[1],"on")) | |
1034 conved = ON; | |
1035 else | |
1036 conved = OFF; | |
1037 buf->expandkconv = (conved << 1) + input; | |
1038 return 1; | |
1039 } | |
1040 | |
1041 /* | |
1042 * _Xsj3cSetShrinkKConv() | |
1043 * Set a parameter by .ShrinkKanjiConversion entry. | |
1044 */ | |
1045 static int | |
1046 _Xsj3cSetShrinkKConv(buf, table) | |
1047 Xsj3cBuf buf; | |
1048 Sjrctable table; | |
1049 { | |
1050 Xsj3cFlag input, conved; | |
1051 | |
1052 if (!(table->value[0] && table->value[1])) | |
1053 return 0; | |
1054 if (_Xsj3cCmp(table->value[0],"on")) | |
1055 input = ON; | |
1056 else | |
1057 input = OFF; | |
1058 if (_Xsj3cCmp(table->value[1],"on")) | |
1059 conved = ON; | |
1060 else | |
1061 conved = OFF; | |
1062 buf->shrinkkconv = (conved << 1) + input; | |
1063 return 1; | |
1064 } | |
1065 | |
1066 /* | |
1067 * _Xsj3cSetExpandMConv() | |
1068 * Set a parameter by .ExpandModeConversion entry. | |
1069 */ | |
1070 static int | |
1071 _Xsj3cSetExpandMConv(buf, table) | |
1072 Xsj3cBuf buf; | |
1073 Sjrctable table; | |
1074 { | |
1075 Xsj3cFlag input, conved; | |
1076 | |
1077 if (!(table->value[0] && table->value[1])) | |
1078 return 0; | |
1079 if (_Xsj3cCmp(table->value[0],"on")) | |
1080 input = ON; | |
1081 else | |
1082 input = OFF; | |
1083 if (_Xsj3cCmp(table->value[1],"on")) | |
1084 conved = ON; | |
1085 else | |
1086 conved = OFF; | |
1087 buf->expandmconv = (conved << 1) + input; | |
1088 return 1; | |
1089 } | |
1090 | |
1091 /* | |
1092 * _Xsj3cSetShrinkMConv() | |
1093 * Set a parameter by .ShrinkModeConversion entry. | |
1094 */ | |
1095 static int | |
1096 _Xsj3cSetShrinkMConv(buf, table) | |
1097 Xsj3cBuf buf; | |
1098 Sjrctable table; | |
1099 { | |
1100 Xsj3cFlag input, conved; | |
1101 | |
1102 if (!(table->value[0] && table->value[1])) | |
1103 return 0; | |
1104 if (_Xsj3cCmp(table->value[0],"on")) | |
1105 input = ON; | |
1106 else | |
1107 input = OFF; | |
1108 if (_Xsj3cCmp(table->value[1],"on")) | |
1109 conved = ON; | |
1110 else | |
1111 conved = OFF; | |
1112 buf->shrinkmconv = (conved << 1) + input; | |
1113 return 1; | |
1114 } | |
1115 | |
1116 /* | |
1117 * _Xsj3cSetMoveLoop() | |
1118 * Set a parameter by .MoveLoop entry. | |
1119 */ | |
1120 static int | |
1121 _Xsj3cSetMoveLoop(buf, table) | |
1122 Xsj3cBuf buf; | |
1123 Sjrctable table; | |
1124 { | |
1125 if (!table->value[0]) | |
1126 return 0; | |
1127 if (_Xsj3cCmp(table->value[0],"on")) | |
1128 buf->moveloop = ON; | |
1129 else | |
1130 buf->moveloop = OFF; | |
1131 return 1; | |
1132 } | |
1133 | |
1134 /* | |
1135 * _Xsj3cSetJumpBySeg() | |
1136 * Set a parameter by .JumpBySegment entry. | |
1137 */ | |
1138 static int | |
1139 _Xsj3cSetJumpBySeg(buf, table) | |
1140 Xsj3cBuf buf; | |
1141 Sjrctable table; | |
1142 { | |
1143 Xsj3cFlag input, conved; | |
1144 | |
1145 if (!(table->value[0] && table->value[1])) | |
1146 return 0; | |
1147 if (_Xsj3cCmp(table->value[0],"on")) | |
1148 input = ON; | |
1149 else | |
1150 input = OFF; | |
1151 if (_Xsj3cCmp(table->value[1],"on")) | |
1152 conved = ON; | |
1153 else | |
1154 conved = OFF; | |
1155 buf->jumpbyseg = (conved << 1) + input; | |
1156 return 1; | |
1157 } | |
1158 | |
1159 /* | |
1160 * _Xsj3cSetModeBySeg() | |
1161 * Set a parameter by .MoveBySegment entry. | |
1162 */ | |
1163 static int | |
1164 _Xsj3cSetModeBySeg(buf, table) | |
1165 Xsj3cBuf buf; | |
1166 Sjrctable table; | |
1167 { | |
1168 Xsj3cFlag input, conved; | |
1169 | |
1170 if (!(table->value[0] && table->value[1])) | |
1171 return 0; | |
1172 if (_Xsj3cCmp(table->value[0],"on")) | |
1173 input = ON; | |
1174 else | |
1175 input = OFF; | |
1176 if (_Xsj3cCmp(table->value[1],"on")) | |
1177 conved = ON; | |
1178 else | |
1179 conved = OFF; | |
1180 buf->movebyseg = (conved << 1) + input; | |
1181 return 1; | |
1182 } | |
1183 | |
1184 /* | |
1185 * _Xsj3cSetDelBySeg() | |
1186 * Set a parameter by .DeleteBySegment entry. | |
1187 */ | |
1188 static int | |
1189 _Xsj3cSetDelBySeg(buf, table) | |
1190 Xsj3cBuf buf; | |
1191 Sjrctable table; | |
1192 { | |
1193 Xsj3cFlag input, conved; | |
1194 | |
1195 if (!(table->value[0] && table->value[1])) | |
1196 return 0; | |
1197 if (_Xsj3cCmp(table->value[0],"on")) | |
1198 input = ON; | |
1199 else | |
1200 input = OFF; | |
1201 if (_Xsj3cCmp(table->value[1],"on")) | |
1202 conved = ON; | |
1203 else | |
1204 conved = OFF; | |
1205 buf->delbyseg = (conved << 1) + input; | |
1206 return 1; | |
1207 } | |
1208 | |
1209 /* | |
1210 * _Xsj3cSetKillBySeg() | |
1211 * Set a parameter by .KillBySegment entry. | |
1212 */ | |
1213 static int | |
1214 _Xsj3cSetKillBySeg(buf, table) | |
1215 Xsj3cBuf buf; | |
1216 Sjrctable table; | |
1217 { | |
1218 Xsj3cFlag input, conved; | |
1219 | |
1220 if (!(table->value[0] && table->value[1])) | |
1221 return 0; | |
1222 if (_Xsj3cCmp(table->value[0],"on")) | |
1223 input = ON; | |
1224 else | |
1225 input = OFF; | |
1226 if (_Xsj3cCmp(table->value[1],"on")) | |
1227 conved = ON; | |
1228 else | |
1229 conved = OFF; | |
1230 buf->killbyseg = (conved << 1) + input; | |
1231 return 1; | |
1232 } | |
1233 | |
1234 /* | |
1235 * _Xsj3cSetMuhenCursorLast() | |
1236 * Set a parameter by .MuhenkanCursorLast entry. | |
1237 */ | |
1238 static int | |
1239 _Xsj3cSetMuhenCursorLast(buf, table) | |
1240 Xsj3cBuf buf; | |
1241 Sjrctable table; | |
1242 { | |
1243 if (!table->value[0]) | |
1244 return 0; | |
1245 if (_Xsj3cCmp(table->value[0],"on")) | |
1246 buf->muhencurlast = ON; | |
1247 else | |
1248 buf->muhencurlast = OFF; | |
1249 return 1; | |
1250 } | |
1251 | |
1252 /* | |
1253 * _Xsj3cSetEditCursorLast() | |
1254 * Set a parameter by .EditCursorLast entry. | |
1255 */ | |
1256 static int | |
1257 _Xsj3cSetEditCursorLast(buf, table) | |
1258 Xsj3cBuf buf; | |
1259 Sjrctable table; | |
1260 { | |
1261 if (!table->value[0]) | |
1262 return 0; | |
1263 if (_Xsj3cCmp(table->value[0],"on")) | |
1264 buf->editcurlast = ON; | |
1265 else | |
1266 buf->editcurlast = OFF; | |
1267 return 1; | |
1268 } | |
1269 | |
1270 /* | |
1271 * _Xsj3cSetFlushCursorLast() | |
1272 * Set a parameter by .FlushCursorLast entry. | |
1273 */ | |
1274 static int | |
1275 _Xsj3cSetFlushCursorLast(buf, table) | |
1276 Xsj3cBuf buf; | |
1277 Sjrctable table; | |
1278 { | |
1279 if (!table->value[0]) | |
1280 return 0; | |
1281 if (_Xsj3cCmp(table->value[0],"on")) | |
1282 buf->flushcurlast = ON; | |
1283 else | |
1284 buf->flushcurlast = OFF; | |
1285 return 1; | |
1286 } | |
1287 | |
1288 /* | |
1289 * _Xsj3cSetUnconvSeg() | |
1290 * Set a parameter by .MuhenkanSegment entry. | |
1291 */ | |
1292 static int | |
1293 _Xsj3cSetUnconvSeg(buf, table) | |
1294 Xsj3cBuf buf; | |
1295 Sjrctable table; | |
1296 { | |
1297 if (!table->value[0]) | |
1298 return 0; | |
1299 if (_Xsj3cCmp(table->value[0],"all")) | |
1300 buf->muhenseg = ALL; | |
1301 else if (_Xsj3cCmp(table->value[0],"after")) | |
1302 buf->muhenseg = AFTER; | |
1303 else | |
1304 buf->muhenseg = ONE; | |
1305 return 1; | |
1306 } | |
1307 | |
1308 /* | |
1309 * _Xsj3cSetConvSeg() | |
1310 * Set a parameter by .HenkanSegment entry. | |
1311 */ | |
1312 static int | |
1313 _Xsj3cSetConvSeg(buf, table) | |
1314 Xsj3cBuf buf; | |
1315 Sjrctable table; | |
1316 { | |
1317 if (!table->value[0]) | |
1318 return 0; | |
1319 if (_Xsj3cCmp(table->value[0],"all")) | |
1320 buf->henkanseg = ALL; | |
1321 else if (_Xsj3cCmp(table->value[0],"after")) | |
1322 buf->henkanseg = AFTER; | |
1323 else | |
1324 buf->henkanseg = ONE; | |
1325 return 1; | |
1326 } | |
1327 | |
1328 /* | |
1329 * _Xsj3cSetModeConv() | |
1330 * Set a parameter by .ModeConversion entry. | |
1331 */ | |
1332 static int | |
1333 _Xsj3cSetModeConv(buf, table) | |
1334 Xsj3cBuf buf; | |
1335 Sjrctable table; | |
1336 { | |
1337 Xsj3csMode mode; | |
1338 Xsj3cFlag input, conved, noinput; | |
1339 | |
1340 if (table->key[1] && table->value[0] && table->value[1] && | |
1341 table->value[2]) { | |
1342 if (_Xsj3cCmp(table->key[1], "hiragana")) { | |
1343 mode = MODE_HIRA; | |
1344 } else if (_Xsj3cCmp(table->key[1], "zkatakana")) { | |
1345 mode = MODE_ZKATA; | |
1346 } else if (_Xsj3cCmp(table->key[1], "hkatakana")) { | |
1347 mode = MODE_HKATA; | |
1348 } else if (_Xsj3cCmp(table->key[1], "halpha")) { | |
1349 mode = MODE_HALPHA; | |
1350 } else if (_Xsj3cCmp(table->key[1], "zalpha")) { | |
1351 mode = MODE_ZALPHA; | |
1352 } else if (_Xsj3cCmp(table->key[1], "rollup")) { | |
1353 mode = MODE_ROLLUP; | |
1354 } else if (_Xsj3cCmp(table->key[1], "rolldown")) { | |
1355 mode = MODE_ROLLDOWN; | |
1356 } else { | |
1357 Xsj3cWarning("Unknown conversion mode"); | |
1358 } | |
1359 if (_Xsj3cCmp(table->value[0],"on")) | |
1360 input = ON; | |
1361 else | |
1362 input = OFF; | |
1363 if (_Xsj3cCmp(table->value[1],"on")) | |
1364 conved = ON; | |
1365 else | |
1366 conved = OFF; | |
1367 if (_Xsj3cCmp(table->value[2],"on")) | |
1368 noinput = ON; | |
1369 else | |
1370 noinput = OFF; | |
1371 buf->modeconv[mode] = (noinput << 2) + (conved << 1) + input; | |
1372 return 1; | |
1373 } else { | |
1374 return 0; | |
1375 } | |
1376 } | |
1377 | |
1378 /* | |
1379 * _Xsj3cSetUnderLine() | |
1380 * Set a parameter by .ConvertedUnderLine entry. | |
1381 */ | |
1382 static int | |
1383 _Xsj3cSetUnderLine(buf, table) | |
1384 Xsj3cBuf buf; | |
1385 Sjrctable table; | |
1386 { | |
1387 if (!table->value[0]) | |
1388 return 0; | |
1389 if (_Xsj3cCmp(table->value[0],"on")) | |
1390 buf->convedunderline = ON; | |
1391 else | |
1392 buf->convedunderline = OFF; | |
1393 return 1; | |
1394 } | |
1395 | |
1396 /* | |
1397 * _Xsj3cSetDispMChange() | |
1398 * Set a parameter by .DisplayModeChange entry. | |
1399 */ | |
1400 static int | |
1401 _Xsj3cSetDispMChange(buf, table) | |
1402 Xsj3cBuf buf; | |
1403 Sjrctable table; | |
1404 { | |
1405 if (!table->value[0]) | |
1406 return 0; | |
1407 if (_Xsj3cCmp(table->value[0],"on")) | |
1408 buf->dispmodechange = ON; | |
1409 else | |
1410 buf->dispmodechange = OFF; | |
1411 return 1; | |
1412 } | |
1413 | |
1414 /* | |
1415 * _Xsj3cSetDelLastMove() | |
1416 * Set a parameter by .DeleteLastMove entry. | |
1417 */ | |
1418 static int | |
1419 _Xsj3cSetDelLastMove(buf, table) | |
1420 Xsj3cBuf buf; | |
1421 Sjrctable table; | |
1422 { | |
1423 if (!table->value[0]) | |
1424 return 0; | |
1425 if (_Xsj3cCmp(table->value[0],"on")) | |
1426 buf->dellastmove = ON; | |
1427 else | |
1428 buf->dellastmove = OFF; | |
1429 return 1; | |
1430 } | |
1431 | |
1432 /* | |
1433 * _Xsj3cSetKanaInput() | |
1434 * Set a parameter by .KanaInputOnly entry. | |
1435 */ | |
1436 static int | |
1437 _Xsj3cSetKanaInput(buf, table) | |
1438 Xsj3cBuf buf; | |
1439 Sjrctable table; | |
1440 { | |
1441 if (!table->value[0]) | |
1442 return 0; | |
1443 if (_Xsj3cCmp(table->value[0],"on")) | |
1444 buf->kanaonly = ON; | |
1445 else | |
1446 buf->kanaonly = OFF; | |
1447 return 1; | |
1448 } | |
1449 | |
1450 /* | |
1451 * _Xsj3cSetInputSame() | |
1452 * Set a parameter by .InputSameTime entry. | |
1453 */ | |
1454 static int | |
1455 _Xsj3cSetInputSame(buf, table) | |
1456 Xsj3cBuf buf; | |
1457 Sjrctable table; | |
1458 { | |
1459 if (!table->value[0]) | |
1460 return 0; | |
1461 if (_Xsj3cCmp(table->value[0],"on")) | |
1462 buf->inputsame = ON; | |
1463 else | |
1464 buf->inputsame = OFF; | |
1465 return 1; | |
1466 } | |
1467 | |
1468 /* | |
1469 * _Xsj3cSetCntrlSame() | |
1470 * Set a parameter by .CntrlSameTime entry. | |
1471 */ | |
1472 static int | |
1473 _Xsj3cSetCntrlSame(buf, table) | |
1474 Xsj3cBuf buf; | |
1475 Sjrctable table; | |
1476 { | |
1477 if (!table->value[0]) | |
1478 return 0; | |
1479 if (_Xsj3cCmp(table->value[0],"on")) | |
1480 buf->cntrlsame = ON; | |
1481 else | |
1482 buf->cntrlsame = OFF; | |
1483 return 1; | |
1484 } | |
1485 | |
1486 /* | |
1487 * _Xsj3cSetSelectConv() | |
1488 * Set a parameter by .BeforeSelectConversion entry. | |
1489 */ | |
1490 static int | |
1491 _Xsj3cSetSelectConv(buf, table) | |
1492 Xsj3cBuf buf; | |
1493 Sjrctable table; | |
1494 { | |
1495 if (!table->value[0]) | |
1496 return 0; | |
1497 if (_Xsj3cCmp(table->value[0],"on")) | |
1498 buf->selectconv = ON; | |
1499 else | |
1500 buf->selectconv = OFF; | |
1501 return 1; | |
1502 } | |
1503 | |
1504 /* | |
1505 * _Xsj3cSetBeforeConv() | |
1506 * Set a parameter by .BeforeConversion entry. | |
1507 */ | |
1508 static int | |
1509 _Xsj3cSetBeforeConv(buf, table) | |
1510 Xsj3cBuf buf; | |
1511 Sjrctable table; | |
1512 { | |
1513 if (!table->value[0]) | |
1514 return 0; | |
1515 if (_Xsj3cCmp(table->value[0],"on")) | |
1516 buf->beforeconv = ON; | |
1517 else | |
1518 buf->beforeconv = OFF; | |
1519 return 1; | |
1520 } | |
1521 | |
1522 /* | |
1523 * _Xsj3cSetLastDoubleConv() | |
1524 * Set a parameter by .BeforeConversion entry. | |
1525 */ | |
1526 static int | |
1527 _Xsj3cSetLastDoubleConv(buf, table) | |
1528 Xsj3cBuf buf; | |
1529 Sjrctable table; | |
1530 { | |
1531 if (!table->value[0]) | |
1532 return 0; | |
1533 if (_Xsj3cCmp(table->value[0],"on")) | |
1534 buf->lastdoubleconv = ON; | |
1535 else | |
1536 buf->lastdoubleconv = OFF; | |
1537 return 1; | |
1538 } | |
1539 | |
1540 /* | |
1541 * _Xsj3cSetSelectCount() | |
1542 * Set a parameter by .SelectCount entry. | |
1543 */ | |
1544 static int | |
1545 _Xsj3cSetSelectCount(buf, table) | |
1546 Xsj3cBuf buf; | |
1547 Sjrctable table; | |
1548 { | |
1549 register unsigned char *p; | |
1550 | |
1551 if (!table->value[0]) | |
1552 return 0; | |
1553 p = table->value[0]; | |
1554 while (*p != '\0') { | |
1555 if (!isdigit(*p++)) | |
1556 return 0; | |
1557 } | |
1558 buf->selectcount = atoi(table->value[0]); | |
1559 return 1; | |
1560 } | |
1561 | |
1562 /* | |
1563 * _Xsj3cSetSelectBackMove() | |
1564 * Set a parameter by .SelectBackSpaceMove entry. | |
1565 */ | |
1566 static int | |
1567 _Xsj3cSetSelectBackMove(buf, table) | |
1568 Xsj3cBuf buf; | |
1569 Sjrctable table; | |
1570 { | |
1571 if (!table->value[0]) | |
1572 return 0; | |
1573 if (_Xsj3cCmp(table->value[0],"on")) | |
1574 buf->selectback = ON; | |
1575 else | |
1576 buf->selectback = OFF; | |
1577 return 1; | |
1578 } | |
1579 | |
1580 /* | |
1581 * _Xsj3cSetCandidatePad() | |
1582 * Set a parameter by .CandidatePadding entry. | |
1583 */ | |
1584 static int | |
1585 _Xsj3cSetCandidatePad(buf, table) | |
1586 Xsj3cBuf buf; | |
1587 Sjrctable table; | |
1588 { | |
1589 if (!table->value[0]) | |
1590 return 0; | |
1591 if (_Xsj3cCmp(table->value[0],"on")) | |
1592 buf->candpadding = ON; | |
1593 else | |
1594 buf->candpadding = OFF; | |
1595 return 1; | |
1596 } | |
1597 | |
1598 /* | |
1599 * _Xsj3cSetNextRCFile() | |
1600 * Set a parameter by .NextRCFile entry. | |
1601 */ | |
1602 static int | |
1603 _Xsj3cSetNextRCFile(buf, table) | |
1604 Xsj3cBuf buf; | |
1605 Sjrctable table; | |
1606 { | |
1607 char file[BUFSIZ]; | |
1608 | |
1609 if (table->value[0]) { | |
1610 strcpy (file, buf->rcfile); | |
1611 _Xsj3cReadAscii(file, table->value[0], buf->rcfile); | |
1612 return 1; | |
1613 } | |
1614 return 0; | |
1615 } | |
1616 | |
1617 /* | |
1618 * _Xsj3cSetIncludeRCFile() | |
1619 * Set a parameter by .include entry. | |
1620 */ | |
1621 static int | |
1622 _Xsj3cSetIncludeRCFile(buf, table) | |
1623 Xsj3cBuf buf; | |
1624 Sjrctable table; | |
1625 { | |
1626 char file[BUFSIZ], name[BUFSIZ]; | |
1627 SjrcRec rctable; | |
1628 struct functable *functp; | |
1629 FILE *fp; | |
1630 register int line; | |
1631 int status; | |
1632 | |
1633 inc_cnt++; | |
1634 if (inc_cnt > SJRC_INCLUDE_MAX) { | |
1635 Xsj3cWarning("sjrc include nesting too deep"); | |
1636 return 0; | |
1637 } | |
1638 if (table->value[0]) { | |
1639 /* Get include file and open */ | |
1640 _Xsj3cReadAscii(table->value[0], table->value[0], name); | |
1641 strcpy(file, name); | |
1642 if ((fp = fopen(file, "r")) == NULL) { | |
1643 strcpy(file, SJ3DEFPATH); | |
1644 strcat(file, name); | |
1645 if ((fp = fopen(file, "r")) == NULL) { | |
1646 Xsj3cWarning("can't open include sjrc file %s", file); | |
1647 return 0; | |
1648 } | |
1649 } | |
1650 } else { | |
1651 return 0; | |
1652 } | |
1653 | |
1654 /* Read sjrc file and set buffer fields */ | |
1655 for (line = 0; (status = | |
1656 _Xsj3cReadRC(fp, &rctable)) != END; line++) { | |
1657 functp = funcs; | |
1658 if (status == NORMAL) { | |
1659 while (functp->keyword != NULL) { | |
1660 if (_Xsj3cCmp(rctable.key[0], functp->keyword)) { | |
1661 if (!(*(functp->func))(buf, &rctable)) | |
1662 Xsj3cWarning("wrong format in include sjrc file. %s:%d", | |
1663 file, line + 1); | |
1664 break; | |
1665 } | |
1666 functp++; | |
1667 } | |
1668 } else if (status == COMMENT || status == OTHERS) { | |
1669 continue; | |
1670 } else { | |
1671 Xsj3cWarning("bad line in sjrc include file. %s:%d", | |
1672 file, line + 1); | |
1673 continue; | |
1674 } | |
1675 } | |
1676 fclose(fp); | |
1677 return 1; | |
1678 } |