comparison src/mule-canna.c @ 1650:34abfb24e891

[xemacs-hg @ 2003-08-28 15:44:04 by james] Fix the C++ build, with many module-specific fixes.
author james
date Thu, 28 Aug 2003 15:44:30 +0000
parents 4f4c898836ab
children de0e5e7132db
comparison
equal deleted inserted replaced
1649:9afdad50eaf7 1650:34abfb24e891
167 #endif /* !CANNA2 */ 167 #endif /* !CANNA2 */
168 extern char *jrKanjiError; 168 extern char *jrKanjiError;
169 169
170 /* #### is this global really necessary? */ 170 /* #### is this global really necessary? */
171 #define KEYTOSTRSIZE 2048 171 #define KEYTOSTRSIZE 2048
172 static unsigned char key_buffer[KEYTOSTRSIZE]; 172 static char key_buffer[KEYTOSTRSIZE];
173 static char **warning; 173 static char **warning;
174 174
175 static int canna_empty_info, canna_through_info; 175 static int canna_empty_info, canna_through_info;
176 static int canna_underline; 176 static int canna_underline;
177 static int canna_inhibit_hankakukana; 177 static int canna_inhibit_hankakukana;
189 static Fixnum canna_ichiran_revLen; 189 static Fixnum canna_ichiran_revLen;
190 static Lisp_Object Vcanna_mode_string; 190 static Lisp_Object Vcanna_mode_string;
191 191
192 static int IRCP_context; 192 static int IRCP_context;
193 193
194 static Lisp_Object storeResults (unsigned char *, int, jrKanjiStatus *); 194 static Lisp_Object storeResults (char *, int, jrKanjiStatus *);
195 static Lisp_Object kanjiYomiList (int, int); 195 static Lisp_Object kanjiYomiList (int, int);
196 static Lisp_Object CANNA_mode_keys (void); 196 static Lisp_Object CANNA_mode_keys (void);
197 197
198 #ifdef CANNA_MULE 198 #ifdef CANNA_MULE
199 static void m2c (unsigned char *, int, unsigned char *); 199 static void m2c (unsigned char *, int, unsigned char *);
220 len = jrKanjiString (0, XCHAR (ch), key_buffer, KEYTOSTRSIZE, &ks); 220 len = jrKanjiString (0, XCHAR (ch), key_buffer, KEYTOSTRSIZE, &ks);
221 return storeResults (key_buffer, len, &ks); 221 return storeResults (key_buffer, len, &ks);
222 } 222 }
223 223
224 static Lisp_Object 224 static Lisp_Object
225 storeResults (unsigned char *buf, int len, jrKanjiStatus *ks) 225 storeResults (char *buf, int len, jrKanjiStatus *ks)
226 { 226 {
227 Lisp_Object val = Qnil; 227 Lisp_Object val = Qnil;
228 228
229 if (len < 0) 229 if (len < 0)
230 { /* Error detected */ 230 { /* Error detected */
231 val = make_string ((unsigned char*) jrKanjiError, strlen (jrKanjiError)); 231 val = make_string ((unsigned char*) jrKanjiError, strlen (jrKanjiError));
232 } 232 }
233 else 233 else
234 { 234 {
235 /* 確定した文字列 (the confirmed string) */ 235 /* 確定した文字列 (the confirmed string) */
236 Vcanna_kakutei_string = make_string (buf, len); 236 Vcanna_kakutei_string = make_string ((unsigned char *) buf, len);
237 val = make_int (len); 237 val = make_int (len);
238 /* 確定した文字列の読みの情報... 238 /* 確定した文字列の読みの情報...
239 (info about the reading of the confirmed string) */ 239 (info about the reading of the confirmed string) */
240 Vcanna_kakutei_yomi = Vcanna_kakutei_romaji = Qnil; 240 Vcanna_kakutei_yomi = Vcanna_kakutei_romaji = Qnil;
241 if (ks->info & KanjiYomiInfo) 241 if (ks->info & KanjiYomiInfo)
242 { 242 {
243 unsigned char *p = buf + len + 1; 243 char *p = buf + len + 1;
244 int yomilen = strlen (p); 244 int yomilen = strlen (p);
245 245
246 if (len + yomilen + 1 < KEYTOSTRSIZE) 246 if (len + yomilen + 1 < KEYTOSTRSIZE)
247 { 247 {
248 int yomilen2; 248 int yomilen2;
249 249
250 Vcanna_kakutei_yomi = make_string (p, yomilen); /* 読み 250 Vcanna_kakutei_yomi =
251 (reading) */ 251 make_string ((unsigned char *) p, yomilen); /* 読み (reading) */
252 p += yomilen + 1; 252 p += yomilen + 1;
253 yomilen2 = strlen (p); 253 yomilen2 = strlen (p);
254 if (len + yomilen + yomilen2 + 2 < KEYTOSTRSIZE) 254 if (len + yomilen + yomilen2 + 2 < KEYTOSTRSIZE)
255 { 255 {
256 Vcanna_kakutei_romaji = make_string (p, yomilen2); 256 Vcanna_kakutei_romaji =
257 make_string ((unsigned char *) p, yomilen2);
257 /* ローマ字 (romanization) */ 258 /* ローマ字 (romanization) */
258 } 259 }
259 } 260 }
260 } 261 }
261 262
307 308
308 /* モードの情報 (mode information) */ 309 /* モードの情報 (mode information) */
309 Vcanna_mode_string = Qnil; 310 Vcanna_mode_string = Qnil;
310 if (ks->info & KanjiModeInfo) 311 if (ks->info & KanjiModeInfo)
311 { 312 {
312 Vcanna_mode_string = make_string (ks->mode, strlen (ks->mode)); 313 Vcanna_mode_string =
314 make_string (ks->mode, strlen ((const char *) ks->mode));
313 } 315 }
314 316
315 /* その他の情報 (other information) */ 317 /* その他の情報 (other information) */
316 canna_empty_info = (ks->info & KanjiEmptyInfo) ? 1 : 0; 318 canna_empty_info = (ks->info & KanjiEmptyInfo) ? 1 : 0;
317 canna_through_info = (ks->info & KanjiThroughInfo) ? 1 : 0; 319 canna_through_info = (ks->info & KanjiThroughInfo) ? 1 : 0;
380 else 382 else
381 { 383 {
382 char servername[256]; 384 char servername[256];
383 385
384 CHECK_STRING (server); 386 CHECK_STRING (server);
385 strncpy (servername, XSTRING_DATA (server), XSTRING_LENGTH (server)); 387 strncpy (servername, (const char *) XSTRING_DATA (server),
388 XSTRING_LENGTH (server));
386 servername[XSTRING_LENGTH (server)] = '\0'; 389 servername[XSTRING_LENGTH (server)] = '\0';
387 jrKanjiControl (0, KC_SETSERVERNAME, servername); 390 jrKanjiControl (0, KC_SETSERVERNAME, servername);
388 } 391 }
389 392
390 if (NILP (rcfile)) 393 if (NILP (rcfile))
394 else 397 else
395 { 398 {
396 char rcname[256]; 399 char rcname[256];
397 400
398 CHECK_STRING (rcfile); 401 CHECK_STRING (rcfile);
399 strncpy (rcname, XSTRING_DATA (rcfile), XSTRING_LENGTH (rcfile)); 402 strncpy (rcname, (const char *) XSTRING_DATA (rcfile),
403 XSTRING_LENGTH (rcfile));
400 rcname[XSTRING_LENGTH (rcfile)] = '\0'; 404 rcname[XSTRING_LENGTH (rcfile)] = '\0';
401 jrKanjiControl (0, KC_SETINITFILENAME, rcname); 405 jrKanjiControl (0, KC_SETINITFILENAME, rcname);
402 } 406 }
403 407
404 warning = (char **) 0; 408 warning = (char **) 0;
415 for (p = q = (unsigned char **) warning ; *q ; q++) 419 for (p = q = (unsigned char **) warning ; *q ; q++)
416 ; 420 ;
417 while (p < q) 421 while (p < q)
418 { 422 {
419 q--; 423 q--;
420 val = Fcons (make_string (*q, strlen (*q)), val); 424 val = Fcons (make_string (*q, strlen ((const char *) *q)), val);
421 } 425 }
422 } 426 }
423 val = Fcons (val, Qnil); 427 val = Fcons (val, Qnil);
424 428
425 if (res == -1) 429 if (res == -1)
426 { 430 {
427 val = Fcons (make_string ((unsigned char*) jrKanjiError, 431 val = Fcons (make_string ((unsigned char *) jrKanjiError,
428 strlen (jrKanjiError)), val); 432 strlen (jrKanjiError)), val);
429 /* イニシャライズで失敗した場合。 (on initialization failure) */ 433 /* イニシャライズで失敗した場合。 (on initialization failure) */
430 return Fcons (Qnil, val); 434 return Fcons (Qnil, val);
431 } 435 }
432 else 436 else
475 val = Qnil; 479 val = Qnil;
476 if (warning) 480 if (warning)
477 { 481 {
478 for (p = (unsigned char**) warning ; *p ; p++) 482 for (p = (unsigned char**) warning ; *p ; p++)
479 { 483 {
480 val = Fcons (make_string (*p, strlen (*p)), val); 484 val = Fcons (make_string (*p, strlen ((const char *) *p)), val);
481 } 485 }
482 } 486 }
483 val = Fcons (val, Qnil); 487 val = Fcons (val, Qnil);
484 IRCP_context = -1; 488 IRCP_context = -1;
485 return val; 489 return val;
504 ks.echoStr = XSTRING_DATA (str); 508 ks.echoStr = XSTRING_DATA (str);
505 ks.length = XSTRING_LENGTH (str); 509 ks.length = XSTRING_LENGTH (str);
506 #else /* CANNA_MULE */ 510 #else /* CANNA_MULE */
507 m2c (XSTRING_DATA (str), XSTRING_LENGTH (str), cbuf); 511 m2c (XSTRING_DATA (str), XSTRING_LENGTH (str), cbuf);
508 ks.echoStr = cbuf; 512 ks.echoStr = cbuf;
509 ks.length = strlen (cbuf); 513 ks.length = strlen ((const char *) cbuf);
510 #endif /* CANNA_MULE */ 514 #endif /* CANNA_MULE */
511 ksv.ks = &ks; 515 ksv.ks = &ks;
512 len = jrKanjiControl (0, KC_DEFINEKANJI, (char *)&ksv); 516 len = jrKanjiControl (0, KC_DEFINEKANJI, (char *)&ksv);
513 return storeResults (key_buffer, ksv.val, ksv.ks); 517 return storeResults (key_buffer, ksv.val, ksv.ks);
514 } 518 }
574 #ifndef CANNA_MULE 578 #ifndef CANNA_MULE
575 strncpy (key_buffer, XSTRING_DATA (yomi), XSTRING_LENGTH (yomi)); 579 strncpy (key_buffer, XSTRING_DATA (yomi), XSTRING_LENGTH (yomi));
576 ks.length = XSTRING_LENGTH (yomi); 580 ks.length = XSTRING_LENGTH (yomi);
577 key_buffer[ks.length] = '\0'; 581 key_buffer[ks.length] = '\0';
578 #else /* CANNA_MULE */ 582 #else /* CANNA_MULE */
579 m2c (XSTRING_DATA (yomi), XSTRING_LENGTH (yomi), key_buffer); 583 m2c (XSTRING_DATA (yomi), XSTRING_LENGTH (yomi),
584 (unsigned char *) key_buffer);
580 ks.length = strlen (key_buffer); 585 ks.length = strlen (key_buffer);
581 #endif /* CANNA_MULE */ 586 #endif /* CANNA_MULE */
582 587
583 if (NILP (roma)) 588 if (NILP (roma))
584 { 589 {
593 XSTRING_LENGTH (roma)); 598 XSTRING_LENGTH (roma));
594 key_buffer[XSTRING_LENGTH (yomi) + 1 + XSTRING_LENGTH (roma)] = '\0'; 599 key_buffer[XSTRING_LENGTH (yomi) + 1 + XSTRING_LENGTH (roma)] = '\0';
595 ks.mode = (unsigned char *)(key_buffer + XSTRING_LENGTH (yomi) + 1); 600 ks.mode = (unsigned char *)(key_buffer + XSTRING_LENGTH (yomi) + 1);
596 #else /* CANNA_MULE */ 601 #else /* CANNA_MULE */
597 ks.mode = (unsigned char *)(key_buffer + ks.length + 1); 602 ks.mode = (unsigned char *)(key_buffer + ks.length + 1);
598 m2c (XSTRING_DATA (roma), XSTRING_LENGTH (roma), ks.mode); 603 m2c (XSTRING_DATA (roma), XSTRING_LENGTH (roma),
604 (unsigned char *) ks.mode);
599 #endif /* CANNA_MULE */ 605 #endif /* CANNA_MULE */
600 } 606 }
601 607
602 ks.echoStr = (unsigned char *) key_buffer; 608 ks.echoStr = (unsigned char *) key_buffer;
603 ksv.buffer = (unsigned char *) key_buffer; /* 返値用 (return value) */ 609 ksv.buffer = (unsigned char *) key_buffer; /* 返値用 (return value) */
650 656
651 #ifndef CANNA_MULE 657 #ifndef CANNA_MULE
652 strncpy (key_buffer, XSTRING_DATA (str), XSTRING_LENGTH (str)); 658 strncpy (key_buffer, XSTRING_DATA (str), XSTRING_LENGTH (str));
653 key_buffer[XSTRING_LENGTH (str)] = '\0'; 659 key_buffer[XSTRING_LENGTH (str)] = '\0';
654 #else /* CANNA_MULE */ 660 #else /* CANNA_MULE */
655 m2c (XSTRING_DATA (str), XSTRING_LENGTH (str), key_buffer); 661 m2c (XSTRING_DATA (str), XSTRING_LENGTH (str), (unsigned char *) key_buffer);
656 #endif /* CANNA_MULE */ 662 #endif /* CANNA_MULE */
657 p = (unsigned char**) key_buffer; 663 p = (unsigned char**) key_buffer;
658 n = jrKanjiControl (0, KC_PARSE, (char *) &p); 664 n = jrKanjiControl (0, KC_PARSE, (char *) &p);
659 val = Qnil; 665 val = Qnil;
660 while (n > 0) 666 while (n > 0)
661 { 667 {
662 n--; 668 n--;
663 val = Fcons (make_string (p[n], strlen (p[n])), val); 669 val = Fcons (make_string (p[n], strlen ((const char *) p[n])), val);
664 } 670 }
665 return val; 671 return val;
666 } 672 }
667 673
668 DEFUN ("canna-query-mode", Fcanna_query_mode, 0, 0, 0, /* 674 DEFUN ("canna-query-mode", Fcanna_query_mode, 0, 0, 0, /*
669 Get current mode string. 675 Get current mode string.
670 */ 676 */
671 ()) 677 ())
672 { 678 {
673 unsigned char buf[256]; 679 char buf[256];
674 680
675 jrKanjiControl (0, KC_QUERYMODE, buf); 681 jrKanjiControl (0, KC_QUERYMODE, buf);
676 return make_string (buf, strlen (buf)); 682 return make_string ((unsigned char *) buf, strlen (buf));
677 } 683 }
678 684
679 /* 685 /*
680 * Functions following this line are for KKCP interface compatible 686 * Functions following this line are for KKCP interface compatible
681 * library. These functions may be used by MILK system. 687 * library. These functions may be used by MILK system.
741 yomibuf[XSTRING_LENGTH (yomi)] = '\0'; 747 yomibuf[XSTRING_LENGTH (yomi)] = '\0';
742 nbun = RkBgnBun (IRCP_context, XSTRING_DATA (yomi), XSTRING_LENGTH (yomi), 748 nbun = RkBgnBun (IRCP_context, XSTRING_DATA (yomi), XSTRING_LENGTH (yomi),
743 (RK_XFER << RK_XFERBITS) | RK_KFER); 749 (RK_XFER << RK_XFERBITS) | RK_KFER);
744 #else /* CANNA_MULE */ 750 #else /* CANNA_MULE */
745 m2c (XSTRING_DATA (yomi), XSTRING_LENGTH (yomi), yomibuf); 751 m2c (XSTRING_DATA (yomi), XSTRING_LENGTH (yomi), yomibuf);
746 nbun = RkBgnBun (IRCP_context, (char *) yomibuf, strlen (yomibuf), 752 nbun = RkBgnBun (IRCP_context, (char *) yomibuf,
753 strlen ((const char *) yomibuf),
747 (RK_XFER << RK_XFERBITS) | RK_KFER); 754 (RK_XFER << RK_XFERBITS) | RK_KFER);
748 #endif /* CANNA_MULE */ 755 #endif /* CANNA_MULE */
749 756
750 return kanjiYomiList (IRCP_context, nbun); 757 return kanjiYomiList (IRCP_context, nbun);
751 } 758 }
796 RkGoTo (IRCP_context, XINT (bunsetsu)); 803 RkGoTo (IRCP_context, XINT (bunsetsu));
797 len = RkGetKanjiList (IRCP_context, RkBuf, RKBUFSIZE); 804 len = RkGetKanjiList (IRCP_context, RkBuf, RKBUFSIZE);
798 p = RkBuf; 805 p = RkBuf;
799 for (i = 0 ; i < len ; i++) 806 for (i = 0 ; i < len ; i++)
800 { 807 {
801 slen = strlen (p); 808 slen = strlen ((const char *) p);
802 if (NILP(res)) 809 if (NILP(res))
803 { 810 {
804 endp = res = Fcons (make_string (p, slen), Qnil); 811 endp = res = Fcons (make_string (p, slen), Qnil);
805 } 812 }
806 else 813 else
1849 mule_make_string (unsigned char *p, int l) 1856 mule_make_string (unsigned char *p, int l)
1850 { 1857 {
1851 unsigned char cbuf[4096]; 1858 unsigned char cbuf[4096];
1852 1859
1853 c2mu (p,l,cbuf); 1860 c2mu (p,l,cbuf);
1854 return (make_string (cbuf,strlen (cbuf))); 1861 return (make_string (cbuf, strlen ((const char *) cbuf)));
1855 } 1862 }
1856 1863
1857 /* return the MULE internal string length of EUC string */ 1864 /* return the MULE internal string length of EUC string */
1858 /* Modified by sb to return a character count not byte count. */ 1865 /* Modified by sb to return a character count not byte count. */
1859 static int 1866 static int