comparison src/mule-wnnfns.c @ 5200:70ed8a0d8da8

port Mule-ization of mule-wnnfns.c from ben-unicode-internal -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-04-12 Ben Wing <ben@xemacs.org> * charset.h: * lisp.h: * lisp.h (XREALLOC_ARRAY): * text.h: Port charset_codepoint_to_itext(), buffer_itext_to_charset_codepoint(), EXTBYTE_STRING_TO_ALLOCA(), `enum converr' from ben-unicode-internal, for use with the mule-wnnfns.c changes. * mule-wnnfns.c: * mule-wnnfns.c (Fwnn_open): * mule-wnnfns.c (Fwnn_dict_add): * mule-wnnfns.c (Fwnn_dict_list): * mule-wnnfns.c (Fwnn_get_zenkouho): * mule-wnnfns.c (Fwnn_inspect): * mule-wnnfns.c (Fwnn_bunsetu_kanji): * mule-wnnfns.c (Fwnn_bunsetu_yomi): * mule-wnnfns.c (Fwnn_word_info): * mule-wnnfns.c (Fwnn_dict_search): * mule-wnnfns.c (Fwnn_get_msg): * mule-wnnfns.c (Fwnn_fuzokugo_set): * mule-wnnfns.c (Fwnn_fuzokugo_get): * mule-wnnfns.c (Fwnn_hinsi_list): * mule-wnnfns.c (Fwnn_fisys_dict_add): * mule-wnnfns.c (Fwnn_fiusr_dict_add): * mule-wnnfns.c (Fwnn_notrans_dict_add): * mule-wnnfns.c (Fwnn_bmodify_dict_add): * mule-wnnfns.c (reinit_vars_of_mule_wnn): * mule-wnnfns.c (vars_of_mule_wnn): * mule-wnnfns.c (w2m): * mule-wnnfns.c (m2w): * mule-wnnfns.c (yes_or_no): * mule-wnnfns.c (puts2): * mule-wnnfns.c (check_wnn_server_type): Mule-ize, borrowed from ben-unicode-internal.
author Ben Wing <ben@xemacs.org>
date Mon, 12 Apr 2010 00:55:04 -0500
parents c0934cef10c6
children 308d34e9f07d
comparison
equal deleted inserted replaced
5199:49e931565616 5200:70ed8a0d8da8
1 /* -*- coding: utf-8 -*- 1 /* -*- coding: utf-8 -*-
2 Copyright (C) 1995 Free Software Foundation, Inc. 2 Copyright (C) 1995 Free Software Foundation, Inc.
3 Copyright (C) 1995 Sun Microsystems, Inc. 3 Copyright (C) 1995 Sun Microsystems, Inc.
4 Copyright (C) 2005, 2010 Ben Wing.
4 5
5 This file is part of XEmacs. 6 This file is part of XEmacs.
6 7
7 XEmacs is free software; you can redistribute it and/or modify it 8 XEmacs is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the 9 under the terms of the GNU General Public License as published by the
265 266
266 #include <config.h> 267 #include <config.h>
267 #include "lisp.h" 268 #include "lisp.h"
268 269
269 #include "buffer.h" 270 #include "buffer.h"
271 #include "charset.h"
270 #include "window.h" 272 #include "window.h"
271 #include "sysdep.h" 273 #include "sysdep.h"
272 274
273 #include "wnn/commonhd.h" 275 #include "wnn/commonhd.h"
274 #include "charset.h"
275 #include "wnn/jllib.h" 276 #include "wnn/jllib.h"
276 #include "wnn/cplib.h" 277 #include "wnn/cplib.h"
277 278
278 /* UCHAR が二重定義されるので */ 279 /* UCHAR が二重定義されるので */
279 #define _UCHAR_T 280 #define _UCHAR_T
284 #define WNNSERVER_C 1 285 #define WNNSERVER_C 1
285 #define WNNSERVER_T 2 286 #define WNNSERVER_T 2
286 #define WNNSERVER_K 3 287 #define WNNSERVER_K 3
287 288
288 int check_wnn_server_type (void); 289 int check_wnn_server_type (void);
289 void w2m (w_char *wp, unsigned char *mp, unsigned char lb); 290 void w2m (w_char *wp, Ibyte *mp, Lisp_Object charset);
290 void m2w (unsigned char *mp, w_char *wp); 291 void m2w (Ibyte *mp, w_char *wp);
291 void w2y (w_char *w); 292 void w2y (w_char *w);
292 void c2m (unsigned char *cp, unsigned char *mp, unsigned char lb); 293 void c2m (UExtbyte *cp, Ibyte *mp, Lisp_Object charset);
293 static void puts2 (char *s); 294 static void puts2 (char *s);
294 static int dai_end (int no, int server); 295 static int dai_end (int no, int server);
295 static int yes_or_no (unsigned char *s); 296 static int yes_or_no (UExtbyte *s);
296 297
297 /* Why doesn't wnn have a prototype for these? */ 298 /* Why doesn't wnn have a prototype for these? */
298 typedef unsigned int letter; 299 typedef unsigned int letter;
299 int cwnn_yincod_pzy(w_char *, w_char, int); 300 int cwnn_yincod_pzy(w_char *, w_char, int);
300 int cwnn_pzy_yincod(letter *, letter *, int); 301 int cwnn_pzy_yincod(letter *, letter *, int);
301 302
302 static struct wnn_buf *wnnfns_buf[NSERVER]; 303 static struct wnn_buf *wnnfns_buf[NSERVER];
303 static struct wnn_env *wnnfns_env_norm[NSERVER]; 304 static struct wnn_env *wnnfns_env_norm[NSERVER];
304 static struct wnn_env *wnnfns_env_rev[NSERVER]; 305 static struct wnn_env *wnnfns_env_rev[NSERVER];
305 static int wnnfns_norm; 306 static int wnnfns_norm;
306 static unsigned char lb_wnn_server_type[NSERVER] = 307 static Lisp_Object charset_wnn_server_type[NSERVER];
307 {LEADING_BYTE_JAPANESE_JISX0208, LEADING_BYTE_CHINESE_GB2312, LEADING_BYTE_THAI_TIS620, LEADING_BYTE_KOREAN_KSC5601};
308 308
309 /* Lisp Variables and Constants Definition */ 309 /* Lisp Variables and Constants Definition */
310 Lisp_Object Qjserver; 310 Lisp_Object Qjserver;
311 Lisp_Object Qcserver; 311 Lisp_Object Qcserver;
312 /*Lisp_Object Qtserver;*/ 312 /*Lisp_Object Qtserver;*/
319 Lisp_Object Qwnn_kana, Qwnn_eisuu, Qwnn_kigou, Qwnn_toji_kakko, Qwnn_fuzokogo, Qwnn_kaikakko; 319 Lisp_Object Qwnn_kana, Qwnn_eisuu, Qwnn_kigou, Qwnn_toji_kakko, Qwnn_fuzokogo, Qwnn_kaikakko;
320 Lisp_Object Vwnn_server_type; 320 Lisp_Object Vwnn_server_type;
321 Lisp_Object Vcwnn_zhuyin; 321 Lisp_Object Vcwnn_zhuyin;
322 Lisp_Object Vwnnenv_sticky; 322 Lisp_Object Vwnnenv_sticky;
323 Lisp_Object Vwnn_uniq_level; 323 Lisp_Object Vwnn_uniq_level;
324 Fixnum lb_sisheng; 324 Lisp_Object Qchinese_sisheng;
325 325
326 /* Lisp functions definition */ 326 /* Lisp functions definition */
327 327
328 DEFUN ("wnn-server-open", Fwnn_open, 2, 2, 0, /* 328 DEFUN ("wnn-server-open", Fwnn_open, 2, 2, 0, /*
329 Connect to jserver of host HNAME, make an environment with 329 Connect to jserver of host HNAME, make an environment with
330 login name LNAME in the server. 330 login name LNAME in the server.
331 Return nil if error occurs. 331 Return nil if error occurs.
332 */ 332 */
333 (hname, lname)) 333 (hname, lname))
334 { 334 {
335 char *envname; 335 Extbyte *envname;
336 char *langname; 336 Ascbyte *langname;
337 char *hostname; 337 Extbyte *hostname;
338 int snum; 338 int snum;
339 int size;
340 CHECK_STRING (lname);
341 339
342 snum = check_wnn_server_type (); 340 snum = check_wnn_server_type ();
343 switch (snum) 341 switch (snum)
344 { 342 {
345 case WNNSERVER_J: 343 case WNNSERVER_J:
358 break; 356 break;
359 case -1: 357 case -1:
360 default: 358 default:
361 return Qnil; 359 return Qnil;
362 } 360 }
363 size = XSTRING_LENGTH (lname) > 1024 ? 1026 : XSTRING_LENGTH (lname) + 2; 361 /* #### This is extremely stupid. I'm sure these alloca() copies are
364 /* !!#### */ 362 unnecessary, but the old code went out of its way to do this. --ben */
365 envname = (char *) ALLOCA (size); 363 CHECK_STRING (lname);
366 strncpy (envname, (char *) XSTRING_DATA (lname), size-2); 364 EXTBYTE_STRING_TO_ALLOCA (LISP_STRING_TO_EXTERNAL (lname, Qnative),
367 envname[size-2] = '\0'; 365 envname);
368 if (NILP (hname)) hostname = ""; 366 if (NILP (hname)) hostname = "";
369 else 367 else
370 { 368 {
371 CHECK_STRING (hname); 369 CHECK_STRING (hname);
372 size = XSTRING_LENGTH(hname) > 1024 ? 1025 : XSTRING_LENGTH(hname) + 1; 370 EXTBYTE_STRING_TO_ALLOCA (LISP_STRING_TO_EXTERNAL (hname, Qnative),
373 371 hostname);
374 hostname = (char *) ALLOCA (size); 372 }
375 strncpy (hostname, (char *) XSTRING_DATA (hname), size-1);
376 hostname[size-1] = '\0';
377 }
378 CHECK_STRING (lname);
379 /* 97/4/16 jhod@po.iijnet.or.jp 373 /* 97/4/16 jhod@po.iijnet.or.jp
380 * libwnn uses SIGALRM, so we need to stop and start interrupts. 374 * libwnn uses SIGALRM, so we need to stop and start interrupts.
381 */ 375 */
382 stop_interrupts(); 376 stop_interrupts ();
383 if (!(wnnfns_buf[snum] = jl_open_lang (envname, hostname, langname, 377 if (!(wnnfns_buf[snum] = jl_open_lang (envname, hostname, langname,
384 0, 0, 0, EGG_TIMEOUT))) 378 0, 0, 0, EGG_TIMEOUT)))
385 { 379 {
386 start_interrupts(); 380 start_interrupts ();
387 return Qnil; 381 return Qnil;
388 } 382 }
389 if (!jl_isconnect (wnnfns_buf[snum])) 383 if (!jl_isconnect (wnnfns_buf[snum]))
390 { 384 {
391 start_interrupts(); 385 start_interrupts ();
392 return Qnil; 386 return Qnil;
393 } 387 }
394 wnnfns_env_norm[snum] = jl_env_get (wnnfns_buf[snum]); 388 wnnfns_env_norm[snum] = jl_env_get (wnnfns_buf[snum]);
395 /* if (Vwnnenv_sticky == Qt) jl_env_sticky_e (wnnfns_env_norm[snum]); 389 /* if (Vwnnenv_sticky == Qt) jl_env_sticky_e (wnnfns_env_norm[snum]);
396 else jl_env_un_sticky_e (wnnfns_env_norm[snum]);*/ 390 else jl_env_un_sticky_e (wnnfns_env_norm[snum]);*/
397 strcat (envname, "R"); 391 strcat (envname, "R");
398 if (!(wnnfns_env_rev[snum] = jl_connect_lang (envname, hostname, langname, 392 if (!(wnnfns_env_rev[snum] = jl_connect_lang (envname, hostname, langname,
399 0, 0, 0, EGG_TIMEOUT))) 393 0, 0, 0, EGG_TIMEOUT)))
400 { 394 {
401 start_interrupts(); 395 start_interrupts ();
402 return Qnil; 396 return Qnil;
403 } 397 }
404 /* if (Vwnnenv_sticky == Qt) jl_env_sticky_e (wnnfns_env_rev[snum]); 398 /* if (Vwnnenv_sticky == Qt) jl_env_sticky_e (wnnfns_env_rev[snum]);
405 else jl_env_un_sticky_e (wnnfns_env_rev[snum]);*/ 399 else jl_env_un_sticky_e (wnnfns_env_rev[snum]);*/
406 start_interrupts(); 400 start_interrupts ();
407 return Qt; 401 return Qt;
408 } 402 }
409 403
410 404
411 DEFUN ("wnn-server-close", Fwnn_close, 0, 0, 0, /* 405 DEFUN ("wnn-server-close", Fwnn_close, 0, 0, 0, /*
453 if ((snum = check_wnn_server_type ()) == -1) return Qnil; 447 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
454 if (!wnnfns_buf[snum]) return Qnil; 448 if (!wnnfns_buf[snum]) return Qnil;
455 GCPRO1 (*args); 449 GCPRO1 (*args);
456 gcpro1.nvars = nargs; 450 gcpro1.nvars = nargs;
457 if (jl_dic_add (wnnfns_buf[snum], 451 if (jl_dic_add (wnnfns_buf[snum],
458 XSTRING_DATA (args[0]), 452 LISP_STRING_TO_EXTERNAL (args[0], Qfile_name),
459 XSTRING_DATA (args[1]), 453 LISP_STRING_TO_EXTERNAL (args[1], Qfile_name),
460 wnnfns_norm ? WNN_DIC_ADD_NOR : WNN_DIC_ADD_REV, 454 wnnfns_norm ? WNN_DIC_ADD_NOR : WNN_DIC_ADD_REV,
461 XINT (args[2]), 455 XINT (args[2]),
462 NILP (args[3]) ? WNN_DIC_RDONLY : WNN_DIC_RW, 456 NILP (args[3]) ? WNN_DIC_RDONLY : WNN_DIC_RW,
463 NILP (args[4]) ? WNN_DIC_RDONLY : WNN_DIC_RW, 457 NILP (args[4]) ? WNN_DIC_RDONLY : WNN_DIC_RW,
464 NILP (args[5]) ? 0 : XSTRING_DATA (args[5]), 458 NILP (args[5]) ? 0 :
465 NILP (args[6]) ? 0 : XSTRING_DATA (args[6]), 459 LISP_STRING_TO_EXTERNAL (args[5], Qfile_name),
460 NILP (args[6]) ? 0 :
461 LISP_STRING_TO_EXTERNAL (args[6], Qfile_name),
466 yes_or_no, 462 yes_or_no,
467 puts2 ) < 0) 463 puts2 ) < 0)
468 { 464 {
469 UNGCPRO; 465 UNGCPRO;
470 return Qnil; 466 return Qnil;
493 */ 489 */
494 ()) 490 ())
495 { 491 {
496 WNN_DIC_INFO *dicinfo; 492 WNN_DIC_INFO *dicinfo;
497 int cnt, i; 493 int cnt, i;
498 unsigned char comment[1024]; 494 Ibyte comment[1024];
499 Lisp_Object val; 495 Lisp_Object val;
500 int snum; 496 int snum;
501 unsigned char lb; 497 Lisp_Object charset;
502 498
503 if ((snum = check_wnn_server_type ()) == -1) return Qnil; 499 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
504 lb = lb_wnn_server_type[snum]; 500 charset = charset_wnn_server_type[snum];
505 if (!wnnfns_buf[snum]) return Qnil; 501 if (!wnnfns_buf[snum]) return Qnil;
506 #ifdef WNN6 502 #ifdef WNN6
507 if((cnt = jl_fi_dic_list (wnnfns_buf[snum], 0x3f, &dicinfo)) < 0) 503 if((cnt = jl_fi_dic_list (wnnfns_buf[snum], 0x3f, &dicinfo)) < 0)
508 return Qnil; 504 return Qnil;
509 #else 505 #else
511 #endif 507 #endif
512 val = Qnil; 508 val = Qnil;
513 for (i = 0, dicinfo += cnt; i < cnt; i++) 509 for (i = 0, dicinfo += cnt; i < cnt; i++)
514 { 510 {
515 dicinfo--; 511 dicinfo--;
516 w2m (dicinfo->comment, comment, lb); 512 w2m (dicinfo->comment, comment, charset);
517 /* #### The following has not been Mule-ized!!
518 fname and comment must be ASCII strings! */
519 val = 513 val =
520 Fcons (Fcons (make_int (dicinfo->dic_no), 514 Fcons (Fcons (make_int (dicinfo->dic_no),
521 list4 (make_string ((Ibyte *) (dicinfo->fname), 515 list4 (build_extstring (dicinfo->fname, Qfile_name),
522 strlen (dicinfo->fname)), 516 build_istring (comment),
523 make_string (comment, strlen ((char *) comment)),
524 make_int (dicinfo->gosuu), 517 make_int (dicinfo->gosuu),
525 make_int (dicinfo->nice))), val); 518 make_int (dicinfo->nice))), val);
526 } 519 }
527 return val; 520 return val;
528 } 521 }
628 DEFUN ("wnn-server-get-zenkouho", Fwnn_get_zenkouho, 1, 1, 0, /* 621 DEFUN ("wnn-server-get-zenkouho", Fwnn_get_zenkouho, 1, 1, 0, /*
629 Get kanji string of KOUHO-NUMBER. 622 Get kanji string of KOUHO-NUMBER.
630 */ 623 */
631 (kouhoNo)) 624 (kouhoNo))
632 { 625 {
633 unsigned char kanji_buf[256]; 626 Ibyte kanji_buf[256];
634 w_char wbuf[256]; 627 w_char wbuf[256];
635 int snum; 628 int snum;
636 unsigned char lb; 629 Lisp_Object charset;
637 CHECK_INT (kouhoNo); 630 CHECK_INT (kouhoNo);
638 if ((snum = check_wnn_server_type ()) == -1) return Qnil; 631 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
639 lb = lb_wnn_server_type[snum]; 632 charset = charset_wnn_server_type[snum];
640 if (!wnnfns_buf[snum]) return Qnil; 633 if (!wnnfns_buf[snum]) return Qnil;
641 jl_get_zenkouho_kanji (wnnfns_buf[snum], XINT (kouhoNo), wbuf); 634 jl_get_zenkouho_kanji (wnnfns_buf[snum], XINT (kouhoNo), wbuf);
642 w2m (wbuf, kanji_buf, lb); 635 w2m (wbuf, kanji_buf, charset);
643 return make_string (kanji_buf, strlen ((char *) kanji_buf)); 636 return build_istring (kanji_buf);
644 } 637 }
645 638
646 DEFUN ("wnn-server-zenkouho-bun", Fwnn_zenkouho_bun, 0, 0, 0, /* 639 DEFUN ("wnn-server-zenkouho-bun", Fwnn_zenkouho_bun, 0, 0, 0, /*
647 For Wnn. 640 For Wnn.
648 */ 641 */
737 Get bunsetsu information specified by BUN-NUMBER. 730 Get bunsetsu information specified by BUN-NUMBER.
738 */ 731 */
739 (bunNo)) 732 (bunNo))
740 { 733 {
741 Lisp_Object val; 734 Lisp_Object val;
742 unsigned char cbuf[512]; 735 Ibyte cbuf[512];
743 w_char wbuf[256]; 736 w_char wbuf[256];
744 int bun_no, yomilen, jirilen, i; 737 int bun_no, yomilen, jirilen, i;
745 int snum; 738 int snum;
746 unsigned char lb; 739 Lisp_Object charset;
747 CHECK_INT (bunNo); 740 CHECK_INT (bunNo);
748 if ((snum = check_wnn_server_type ()) == -1) return Qnil; 741 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
749 lb = lb_wnn_server_type[snum]; 742 charset = charset_wnn_server_type[snum];
750 if (!wnnfns_buf[snum]) return Qnil; 743 if (!wnnfns_buf[snum]) return Qnil;
751 bun_no = XINT (bunNo); 744 bun_no = XINT (bunNo);
752 val = Qnil; 745 val = Qnil;
753 val = Fcons (make_int (wnnfns_buf[snum]->bun[bun_no]->kangovect), val); 746 val = Fcons (make_int (wnnfns_buf[snum]->bun[bun_no]->kangovect), val);
754 val = Fcons (make_int (wnnfns_buf[snum]->bun[bun_no]->daihyoka), val); 747 val = Fcons (make_int (wnnfns_buf[snum]->bun[bun_no]->daihyoka), val);
760 val = Fcons (make_int (wnnfns_buf[snum]->bun[bun_no]->dic_no), val); 753 val = Fcons (make_int (wnnfns_buf[snum]->bun[bun_no]->dic_no), val);
761 yomilen = jl_get_yomi (wnnfns_buf[snum], bun_no, bun_no + 1, wbuf); 754 yomilen = jl_get_yomi (wnnfns_buf[snum], bun_no, bun_no + 1, wbuf);
762 jirilen = wnnfns_buf[snum]->bun[bun_no]->jirilen; 755 jirilen = wnnfns_buf[snum]->bun[bun_no]->jirilen;
763 for (i = yomilen; i >= jirilen; i--) wbuf[i+1] = wbuf[i]; 756 for (i = yomilen; i >= jirilen; i--) wbuf[i+1] = wbuf[i];
764 wbuf[jirilen] = '+'; 757 wbuf[jirilen] = '+';
765 w2m (wbuf, cbuf, lb); 758 w2m (wbuf, cbuf, charset);
766 val = Fcons (make_string (cbuf, strlen ((char *) cbuf)), val); 759 val = Fcons (build_istring (cbuf), val);
767 jl_get_kanji (wnnfns_buf[snum], bun_no, bun_no + 1, wbuf); 760 jl_get_kanji (wnnfns_buf[snum], bun_no, bun_no + 1, wbuf);
768 w2m (wbuf, cbuf, lb); 761 w2m (wbuf, cbuf, charset);
769 return Fcons (make_string (cbuf, strlen ((char *) cbuf)), val); 762 return Fcons (build_istring (cbuf), val);
770 } 763 }
771 764
772 765
773 DEFUN ("wnn-server-henkan-quit", Fwnn_quit_henkan, 0, 0, 0, /* 766 DEFUN ("wnn-server-henkan-quit", Fwnn_quit_henkan, 0, 0, 0, /*
774 do nothing. 767 do nothing.
785 Get the pair of kanji and length of bunsetsu specified by BUN-NUMBER. 778 Get the pair of kanji and length of bunsetsu specified by BUN-NUMBER.
786 */ 779 */
787 (bunNo)) 780 (bunNo))
788 { 781 {
789 int no; 782 int no;
790 unsigned char kanji_buf[256]; 783 Ibyte kanji_buf[256];
791 w_char wbuf[256]; 784 w_char wbuf[256];
792 int kanji_len; 785 int kanji_len;
793 int snum; 786 int snum;
794 unsigned char lb; 787 Lisp_Object charset;
795 CHECK_INT (bunNo); 788 CHECK_INT (bunNo);
796 if ((snum = check_wnn_server_type ()) == -1) return Qnil; 789 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
797 lb = lb_wnn_server_type[snum]; 790 charset = charset_wnn_server_type[snum];
798 if (!wnnfns_buf[snum]) return Qnil; 791 if (!wnnfns_buf[snum]) return Qnil;
799 no = XINT (bunNo); 792 no = XINT (bunNo);
800 kanji_len = jl_get_kanji (wnnfns_buf[snum], no, no + 1, wbuf); 793 kanji_len = jl_get_kanji (wnnfns_buf[snum], no, no + 1, wbuf);
801 w2m (wbuf, kanji_buf, lb); 794 w2m (wbuf, kanji_buf, charset);
802 return Fcons (make_string (kanji_buf, strlen ((char *) kanji_buf)), 795 return Fcons (build_istring (kanji_buf), make_int (kanji_len));
803 make_int (kanji_len));
804 } 796 }
805 797
806 DEFUN ("wnn-server-bunsetu-yomi", Fwnn_bunsetu_yomi, 1, 1, 0, /* 798 DEFUN ("wnn-server-bunsetu-yomi", Fwnn_bunsetu_yomi, 1, 1, 0, /*
807 Get the pair of yomi and length of bunsetsu specified by BUN-NUMBER. 799 Get the pair of yomi and length of bunsetsu specified by BUN-NUMBER.
808 */ 800 */
809 (bunNo)) 801 (bunNo))
810 { 802 {
811 int no; 803 int no;
812 unsigned char yomi_buf[256]; 804 Ibyte yomi_buf[256];
813 w_char wbuf[256]; 805 w_char wbuf[256];
814 int yomi_len; 806 int yomi_len;
815 int snum; 807 int snum;
816 unsigned char lb; 808 Lisp_Object charset;
817 CHECK_INT (bunNo); 809 CHECK_INT (bunNo);
818 if ((snum = check_wnn_server_type ()) == -1) return Qnil; 810 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
819 lb = lb_wnn_server_type[snum]; 811 charset = charset_wnn_server_type[snum];
820 if (!wnnfns_buf[snum]) return Qnil; 812 if (!wnnfns_buf[snum]) return Qnil;
821 no = XINT (bunNo); 813 no = XINT (bunNo);
822 yomi_len = jl_get_yomi (wnnfns_buf[snum], no, no + 1, wbuf); 814 yomi_len = jl_get_yomi (wnnfns_buf[snum], no, no + 1, wbuf);
823 w2m (wbuf, yomi_buf, lb); 815 w2m (wbuf, yomi_buf, charset);
824 return Fcons (make_string (yomi_buf, strlen ((char *) yomi_buf)), 816 return Fcons (build_istring (yomi_buf), make_int (yomi_len));
825 make_int (yomi_len));
826 } 817 }
827 818
828 DEFUN ("wnn-server-bunsetu-suu", Fwnn_bunsetu_suu, 0, 0, 0, /* 819 DEFUN ("wnn-server-bunsetu-suu", Fwnn_bunsetu_suu, 0, 0, 0, /*
829 Get the number of bunsetsu. 820 Get the number of bunsetsu.
830 */ 821 */
923 */ 914 */
924 (no, serial)) 915 (no, serial))
925 { 916 {
926 Lisp_Object val; 917 Lisp_Object val;
927 struct wnn_jdata *info_buf; 918 struct wnn_jdata *info_buf;
928 unsigned char cbuf[512]; 919 Ibyte cbuf[512];
929 int snum; 920 int snum;
930 unsigned char lb; 921 Lisp_Object charset;
931 CHECK_INT (no); 922 CHECK_INT (no);
932 CHECK_INT (serial); 923 CHECK_INT (serial);
933 if ((snum = check_wnn_server_type ()) == -1) return Qnil; 924 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
934 lb = lb_wnn_server_type[snum]; 925 charset = charset_wnn_server_type[snum];
935 if (!wnnfns_buf[snum]) return Qnil; 926 if (!wnnfns_buf[snum]) return Qnil;
936 if ((info_buf = jl_word_info (wnnfns_buf[snum], 927 if ((info_buf = jl_word_info (wnnfns_buf[snum],
937 XINT (no), XINT (serial))) != NULL) 928 XINT (no), XINT (serial))) != NULL)
938 { 929 {
939 return Qnil; 930 return Qnil;
941 else 932 else
942 { 933 {
943 val = Qnil; 934 val = Qnil;
944 val = Fcons (make_int (info_buf->hinshi), val); 935 val = Fcons (make_int (info_buf->hinshi), val);
945 val = Fcons (make_int (info_buf->hindo), val); 936 val = Fcons (make_int (info_buf->hindo), val);
946 w2m (info_buf->com, cbuf, lb); 937 w2m (info_buf->com, cbuf, charset);
947 val = Fcons (make_string (cbuf, strlen ((char *) cbuf)), val); 938 val = Fcons (build_istring (cbuf), val);
948 w2m (info_buf->kanji, cbuf, lb); 939 w2m (info_buf->kanji, cbuf, charset);
949 val = Fcons (make_string (cbuf, strlen ((char *) cbuf)), val); 940 val = Fcons (build_istring (cbuf), val);
950 w2m (info_buf->yomi, cbuf, lb); 941 w2m (info_buf->yomi, cbuf, charset);
951 val = Fcons (make_string (cbuf, strlen ((char *) cbuf)), val); 942 val = Fcons (build_istring (cbuf), val);
952 return val; 943 return val;
953 } 944 }
954 } 945 }
955 946
956 DEFUN ("wnn-server-word-hindo-set", Fwnn_hindo_set, 3, 3, 0, /* 947 DEFUN ("wnn-server-word-hindo-set", Fwnn_hindo_set, 3, 3, 0, /*
982 (yomi)) 973 (yomi))
983 { 974 {
984 Lisp_Object val; 975 Lisp_Object val;
985 struct wnn_jdata *wordinfo; 976 struct wnn_jdata *wordinfo;
986 int i, count; 977 int i, count;
987 w_char wbuf[256]; 978 w_char wbuf[256];
988 unsigned char kanji_buf[256]; 979 Ibyte kanji_buf[256];
989 int snum; 980 int snum;
990 unsigned char lb; 981 Lisp_Object charset;
991 CHECK_STRING (yomi); 982 CHECK_STRING (yomi);
992 if ((snum = check_wnn_server_type ()) == -1) return Qnil; 983 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
993 lb = lb_wnn_server_type[snum]; 984 charset = charset_wnn_server_type[snum];
994 if (!wnnfns_buf[snum]) return Qnil; 985 if (!wnnfns_buf[snum]) return Qnil;
995 m2w (XSTRING_DATA (yomi), wbuf); 986 m2w (XSTRING_DATA (yomi), wbuf);
996 if (snum == WNNSERVER_C) 987 if (snum == WNNSERVER_C)
997 w2y (wbuf); 988 w2y (wbuf);
998 if ((count = jl_word_search_by_env (wnnfns_buf[snum], 989 if ((count = jl_word_search_by_env (wnnfns_buf[snum],
1000 return Qnil; 991 return Qnil;
1001 val = Qnil; 992 val = Qnil;
1002 for (i = 0, wordinfo += count; i < count; i++) 993 for (i = 0, wordinfo += count; i < count; i++)
1003 { 994 {
1004 wordinfo--; 995 wordinfo--;
1005 w2m (wordinfo->kanji, kanji_buf, lb); 996 w2m (wordinfo->kanji, kanji_buf, charset);
1006 val = Fcons (Fcons (make_string (kanji_buf, strlen ((char *) kanji_buf)), 997 val = Fcons (Fcons (build_istring (kanji_buf),
1007 list4 (make_int (wordinfo->hinshi), 998 list4 (make_int (wordinfo->hinshi),
1008 make_int (wordinfo->hindo), 999 make_int (wordinfo->hindo),
1009 make_int (wordinfo->dic_no), 1000 make_int (wordinfo->dic_no),
1010 make_int (wordinfo->serial))), 1001 make_int (wordinfo->serial))),
1011 val); 1002 val);
1132 DEFUN ("wnn-server-get-msg", Fwnn_get_msg, 0, 0, 0, /* 1123 DEFUN ("wnn-server-get-msg", Fwnn_get_msg, 0, 0, 0, /*
1133 Get message string from wnn_perror. 1124 Get message string from wnn_perror.
1134 */ 1125 */
1135 ()) 1126 ())
1136 { 1127 {
1137 unsigned char mbuf[256]; 1128 Ibyte mbuf[256];
1138 char *msgp; 1129 char *msgp;
1139 int snum; 1130 int snum;
1140 unsigned char lb; 1131 Lisp_Object charset;
1141 char langname[32]; 1132 char langname[32];
1142 /* CHECK_INT (errno);*/ 1133 /* CHECK_INT (errno);*/
1143 if ((snum = check_wnn_server_type ()) == -1) return Qnil; 1134 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
1144 lb = lb_wnn_server_type[snum]; 1135 charset = charset_wnn_server_type[snum];
1145 switch (snum) 1136 switch (snum)
1146 { 1137 {
1147 case WNNSERVER_J: 1138 case WNNSERVER_J:
1148 strcpy (langname, "ja_JP"); 1139 strcpy (langname, "ja_JP");
1149 break; 1140 break;
1160 break; 1151 break;
1161 } 1152 }
1162 if (!wnnfns_buf[snum]) return Qnil; 1153 if (!wnnfns_buf[snum]) return Qnil;
1163 /* msgp = msg_get (wnn_msg_cat, XINT (errno), 0, 0);*/ 1154 /* msgp = msg_get (wnn_msg_cat, XINT (errno), 0, 0);*/
1164 msgp = wnn_perror_lang (langname); 1155 msgp = wnn_perror_lang (langname);
1165 c2m ((unsigned char *) msgp, mbuf, lb); 1156 c2m ((UExtbyte *) msgp, mbuf, charset);
1166 return make_string (mbuf, strlen ((char *) mbuf)); 1157 return build_istring (mbuf);
1167 } 1158 }
1168 1159
1169 1160
1170 DEFUN ("wnn-server-fuzokugo-set", Fwnn_fuzokugo_set, 1, 1, 0, /* 1161 DEFUN ("wnn-server-fuzokugo-set", Fwnn_fuzokugo_set, 1, 1, 0, /*
1171 For Wnn. 1162 For Wnn.
1174 { 1165 {
1175 int snum; 1166 int snum;
1176 CHECK_STRING (file); 1167 CHECK_STRING (file);
1177 if ((snum = check_wnn_server_type ()) == -1) return Qnil; 1168 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
1178 if (!wnnfns_buf[snum]) return Qnil; 1169 if (!wnnfns_buf[snum]) return Qnil;
1179 if (jl_fuzokugo_set (wnnfns_buf[snum], XSTRING_DATA (file)) < 0) 1170 if (jl_fuzokugo_set (wnnfns_buf[snum],
1171 LISP_STRING_TO_EXTERNAL (file, Qfile_name)) < 0)
1180 return Qnil; 1172 return Qnil;
1181 return Qt; 1173 return Qt;
1182 } 1174 }
1183 1175
1184 DEFUN ("wnn-server-fuzokugo-get", Fwnn_fuzokugo_get, 0, 0, 0, /* 1176 DEFUN ("wnn-server-fuzokugo-get", Fwnn_fuzokugo_get, 0, 0, 0, /*
1189 char fname[256]; 1181 char fname[256];
1190 int snum; 1182 int snum;
1191 if ((snum = check_wnn_server_type ()) == -1) return Qnil; 1183 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
1192 if (!wnnfns_buf[snum]) return Qnil; 1184 if (!wnnfns_buf[snum]) return Qnil;
1193 if (jl_fuzokugo_get (wnnfns_buf[snum], fname) < 0) return Qnil; 1185 if (jl_fuzokugo_get (wnnfns_buf[snum], fname) < 0) return Qnil;
1194 return make_string ((Ibyte *) fname, strlen (fname)); 1186 return build_extstring (fname, Qfile_name);
1195 } 1187 }
1196 1188
1197 1189
1198 DEFUN ("wnn-server-isconnect", Fwnn_isconnect, 0, 0, 0, /* 1190 DEFUN ("wnn-server-isconnect", Fwnn_isconnect, 0, 0, 0, /*
1199 For Wnn. 1191 For Wnn.
1235 */ 1227 */
1236 (dicno, name)) 1228 (dicno, name))
1237 { 1229 {
1238 int cnt; 1230 int cnt;
1239 Lisp_Object val; 1231 Lisp_Object val;
1240 w_char wbuf[256]; 1232 w_char wbuf[256];
1241 w_char **area; 1233 w_char **area;
1242 unsigned char cbuf[512]; 1234 Ibyte cbuf[512];
1243 int snum; 1235 int snum;
1244 unsigned char lb; 1236 Lisp_Object charset;
1245 CHECK_INT (dicno); 1237 CHECK_INT (dicno);
1246 CHECK_STRING (name); 1238 CHECK_STRING (name);
1247 if ((snum = check_wnn_server_type ()) == -1) return Qnil; 1239 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
1248 lb = lb_wnn_server_type[snum]; 1240 charset = charset_wnn_server_type[snum];
1249 if (!wnnfns_buf[snum]) return Qnil; 1241 if (!wnnfns_buf[snum]) return Qnil;
1250 m2w (XSTRING_DATA (name), wbuf); 1242 m2w (XSTRING_DATA (name), wbuf);
1251 if ((cnt = jl_hinsi_list (wnnfns_buf[snum], XINT (dicno), wbuf, &area)) < 0) 1243 if ((cnt = jl_hinsi_list (wnnfns_buf[snum], XINT (dicno), wbuf, &area)) < 0)
1252 return Qnil; 1244 return Qnil;
1253 if (cnt == 0) return make_int (0); 1245 if (cnt == 0) return make_int (0);
1254 val = Qnil; 1246 val = Qnil;
1255 for (area += cnt; cnt > 0; cnt--) 1247 for (area += cnt; cnt > 0; cnt--)
1256 { 1248 {
1257 area--; 1249 area--;
1258 w2m (*area, cbuf, lb); 1250 w2m (*area, cbuf, charset);
1259 val = Fcons (make_string (cbuf, strlen ((char *) cbuf)), val); 1251 val = Fcons (build_istring (cbuf), val);
1260 } 1252 }
1261 return val; 1253 return val;
1262 } 1254 }
1263 1255
1264 DEFUN ("wnn-server-hinsi-name", Fwnn_hinsi_name, 1, 1, 0, /* 1256 DEFUN ("wnn-server-hinsi-name", Fwnn_hinsi_name, 1, 1, 0, /*
1265 For Wnn. 1257 For Wnn.
1266 */ 1258 */
1267 (no)) 1259 (no))
1268 { 1260 {
1269 unsigned char name[256]; 1261 Ibyte name[256];
1270 w_char *wname; 1262 w_char *wname;
1271 int snum; 1263 int snum;
1272 unsigned char lb; 1264 Lisp_Object charset;
1273 CHECK_INT (no); 1265 CHECK_INT (no);
1274 if ((snum = check_wnn_server_type ()) == -1) return Qnil; 1266 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
1275 lb = lb_wnn_server_type[snum]; 1267 charset = charset_wnn_server_type[snum];
1276 if (!wnnfns_buf[snum]) return Qnil; 1268 if (!wnnfns_buf[snum]) return Qnil;
1277 if ((wname = jl_hinsi_name (wnnfns_buf[snum], XINT (no))) == 0) return Qnil; 1269 if ((wname = jl_hinsi_name (wnnfns_buf[snum], XINT (no))) == 0) return Qnil;
1278 w2m (wname, name, lb); 1270 w2m (wname, name, charset);
1279 return make_string (name, strlen ((char *) name)); 1271 return build_istring (name);
1280 } 1272 }
1281 #ifdef WNN6 1273 #ifdef WNN6
1282 DEFUN ("wnn-server-fisys-dict-add", Fwnn_fisys_dict_add, 3, MANY, 0, /* 1274 DEFUN ("wnn-server-fisys-dict-add", Fwnn_fisys_dict_add, 3, MANY, 0, /*
1283 Add dictionary specified by FISYS-DICT-FILE-NAME, FISYS-FREQ-FILE-NAME, 1275 Add dictionary specified by FISYS-DICT-FILE-NAME, FISYS-FREQ-FILE-NAME,
1284 FISYS-FREQ-FILE-MODE. 1276 FISYS-FREQ-FILE-MODE.
1288 { 1280 {
1289 struct gcpro gcpro1; 1281 struct gcpro gcpro1;
1290 int snum; 1282 int snum;
1291 CHECK_STRING (args[0]); 1283 CHECK_STRING (args[0]);
1292 CHECK_STRING (args[1]); 1284 CHECK_STRING (args[1]);
1293 if (! NILP (args[3])) CHECK_STRING (args[3]); 1285 if (!NILP (args[3])) CHECK_STRING (args[3]);
1294 if ((snum = check_wnn_server_type()) == -1) return Qnil; 1286 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1295 if(!wnnfns_buf[snum]) return Qnil; 1287 if (!wnnfns_buf[snum]) return Qnil;
1296 GCPRO1 (*args); 1288 GCPRO1 (*args);
1297 gcpro1.nvars = nargs; 1289 gcpro1.nvars = nargs;
1298 if(jl_fi_dic_add(wnnfns_buf[snum], 1290 if (jl_fi_dic_add (wnnfns_buf[snum],
1299 XSTRING_DATA (args[0]), 1291 LISP_STRING_TO_EXTERNAL (args[0], Qfile_name),
1300 XSTRING_DATA (args[1]), 1292 LISP_STRING_TO_EXTERNAL (args[1], Qfile_name),
1301 WNN_FI_SYSTEM_DICT, 1293 WNN_FI_SYSTEM_DICT,
1302 WNN_DIC_RDONLY, 1294 WNN_DIC_RDONLY,
1303 NILP (args[2]) ? WNN_DIC_RDONLY : WNN_DIC_RW, 1295 NILP (args[2]) ? WNN_DIC_RDONLY : WNN_DIC_RW,
1304 0, 1296 0,
1305 NILP (args[3]) ? 0 : XSTRING_DATA (args[3]), 1297 NILP (args[3]) ? 0 :
1306 yes_or_no, 1298 LISP_STRING_TO_EXTERNAL (args[3], Qfile_name),
1307 puts2 ) < 0) { 1299 yes_or_no,
1308 UNGCPRO; 1300 puts2) < 0)
1309 return Qnil; 1301 {
1310 } 1302 UNGCPRO;
1303 return Qnil;
1304 }
1311 UNGCPRO; 1305 UNGCPRO;
1312 return Qt; 1306 return Qt;
1313 } 1307 }
1314 1308
1315 DEFUN ("wnn-server-fiusr-dict-add", Fwnn_fiusr_dict_add, 4, MANY, 0, /* 1309 DEFUN ("wnn-server-fiusr-dict-add", Fwnn_fiusr_dict_add, 4, MANY, 0, /*
1321 { 1315 {
1322 struct gcpro gcpro1; 1316 struct gcpro gcpro1;
1323 int snum; 1317 int snum;
1324 CHECK_STRING (args[0]); 1318 CHECK_STRING (args[0]);
1325 CHECK_STRING (args[1]); 1319 CHECK_STRING (args[1]);
1326 if (! NILP (args[4])) CHECK_STRING (args[4]); 1320 if (!NILP (args[4])) CHECK_STRING (args[4]);
1327 if (! NILP (args[5])) CHECK_STRING (args[5]); 1321 if (!NILP (args[5])) CHECK_STRING (args[5]);
1328 if ((snum = check_wnn_server_type()) == -1) return Qnil; 1322 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1329 if(!wnnfns_buf[snum]) return Qnil; 1323 if (!wnnfns_buf[snum]) return Qnil;
1330 GCPRO1 (*args); 1324 GCPRO1 (*args);
1331 gcpro1.nvars = nargs; 1325 gcpro1.nvars = nargs;
1332 if(jl_fi_dic_add(wnnfns_buf[snum], 1326 if (jl_fi_dic_add (wnnfns_buf[snum],
1333 XSTRING_DATA (args[0]), 1327 LISP_STRING_TO_EXTERNAL (args[0], Qfile_name),
1334 XSTRING_DATA (args[1]), 1328 LISP_STRING_TO_EXTERNAL (args[1], Qfile_name),
1335 WNN_FI_USER_DICT, 1329 WNN_FI_USER_DICT,
1336 NILP (args[2]) ? WNN_DIC_RDONLY : WNN_DIC_RW, 1330 NILP (args[2]) ? WNN_DIC_RDONLY : WNN_DIC_RW,
1337 NILP (args[3]) ? WNN_DIC_RDONLY : WNN_DIC_RW, 1331 NILP (args[3]) ? WNN_DIC_RDONLY : WNN_DIC_RW,
1338 NILP (args[4]) ? 0 : XSTRING_DATA (args[4]), 1332 NILP (args[4]) ? 0 :
1339 NILP (args[5]) ? 0 : XSTRING_DATA (args[5]), 1333 LISP_STRING_TO_EXTERNAL (args[4], Qfile_name),
1340 yes_or_no, 1334 NILP (args[5]) ? 0 :
1341 puts2 ) < 0) { 1335 LISP_STRING_TO_EXTERNAL (args[5], Qfile_name),
1342 UNGCPRO; 1336 yes_or_no,
1343 return Qnil; 1337 puts2) < 0)
1344 } 1338 {
1339 UNGCPRO;
1340 return Qnil;
1341 }
1345 UNGCPRO; 1342 UNGCPRO;
1346 return Qt; 1343 return Qt;
1347 } 1344 }
1348 1345
1349 DEFUN ("wnn-server-notrans-dict-add", Fwnn_notrans_dict_add, 3, MANY, 0, /* 1346 DEFUN ("wnn-server-notrans-dict-add", Fwnn_notrans_dict_add, 3, MANY, 0, /*
1368 if(wnnfns_norm) 1365 if(wnnfns_norm)
1369 cur_env = wnnfns_env_norm[snum]; 1366 cur_env = wnnfns_env_norm[snum];
1370 else 1367 else
1371 cur_env = wnnfns_env_rev[snum]; 1368 cur_env = wnnfns_env_rev[snum];
1372 dic_no = js_get_autolearning_dic(cur_env, WNN_MUHENKAN_LEARNING); 1369 dic_no = js_get_autolearning_dic(cur_env, WNN_MUHENKAN_LEARNING);
1373 if (dic_no == WNN_NO_LEARNING) { 1370 if (dic_no == WNN_NO_LEARNING)
1374 if((dic_no = jl_dic_add(wnnfns_buf[snum], 1371 {
1375 XSTRING_DATA (args[0]), 1372 if ((dic_no = jl_dic_add (wnnfns_buf[snum],
1376 0, 1373 LISP_STRING_TO_EXTERNAL (args[0],
1377 wnnfns_norm ? WNN_DIC_ADD_NOR : WNN_DIC_ADD_REV, 1374 Qfile_name),
1378 XINT(args[1]), 1375 0,
1379 WNN_DIC_RW, WNN_DIC_RW, 1376 wnnfns_norm ? WNN_DIC_ADD_NOR :
1380 NILP (args[3]) ? 0 : XSTRING_DATA (args[3]), 1377 WNN_DIC_ADD_REV,
1381 0, 1378 XINT (args[1]),
1382 yes_or_no, 1379 WNN_DIC_RW, WNN_DIC_RW,
1383 puts2)) < 0) { 1380 NILP (args[3]) ? 0 :
1381 LISP_STRING_TO_EXTERNAL (args[3],
1382 Qfile_name),
1383 0,
1384 yes_or_no,
1385 puts2)) < 0)
1386 {
1384 UNGCPRO; 1387 UNGCPRO;
1385 return Qnil; 1388 return Qnil;
1386 } 1389 }
1387 js_set_autolearning_dic(cur_env, WNN_MUHENKAN_LEARNING, dic_no); 1390 js_set_autolearning_dic (cur_env, WNN_MUHENKAN_LEARNING, dic_no);
1388 } 1391 }
1389 if(!js_is_loaded_temporary_dic(cur_env)) { 1392 if (!js_is_loaded_temporary_dic (cur_env))
1390 if(js_temporary_dic_add(cur_env, 1393 {
1391 wnnfns_norm ? WNN_DIC_ADD_NOR : WNN_DIC_ADD_REV) < 0) { 1394 if (js_temporary_dic_add (cur_env,
1395 wnnfns_norm ? WNN_DIC_ADD_NOR :
1396 WNN_DIC_ADD_REV) < 0)
1397 {
1392 UNGCPRO; 1398 UNGCPRO;
1393 return Qnil; 1399 return Qnil;
1394 } 1400 }
1395 } 1401 }
1396 vmask |= WNN_ENV_MUHENKAN_LEARN_MASK; 1402 vmask |= WNN_ENV_MUHENKAN_LEARN_MASK;
1397 henv.muhenkan_flag = NILP (args[2]) ? WNN_DIC_RDONLY : WNN_DIC_RW; 1403 henv.muhenkan_flag = NILP (args[2]) ? WNN_DIC_RDONLY : WNN_DIC_RW;
1398 if(jl_set_henkan_env(wnnfns_buf[snum], 1404 if (jl_set_henkan_env (wnnfns_buf[snum],
1399 vmask, 1405 vmask,
1400 &henv) < 0) { 1406 &henv) < 0)
1407 {
1401 UNGCPRO; 1408 UNGCPRO;
1402 return Qnil; 1409 return Qnil;
1403 } 1410 }
1404 UNGCPRO; 1411 UNGCPRO;
1405 return Qt; 1412 return Qt;
1406 } 1413 }
1407 1414
1408 DEFUN ("wnn-server-bmodify-dict-add", Fwnn_bmodify_dict_add, 3, MANY, 0, /* 1415 DEFUN ("wnn-server-bmodify-dict-add", Fwnn_bmodify_dict_add, 3, MANY, 0, /*
1427 if(wnnfns_norm) 1434 if(wnnfns_norm)
1428 cur_env = wnnfns_env_norm[snum]; 1435 cur_env = wnnfns_env_norm[snum];
1429 else 1436 else
1430 cur_env = wnnfns_env_rev[snum]; 1437 cur_env = wnnfns_env_rev[snum];
1431 dic_no = js_get_autolearning_dic(cur_env, WNN_BUNSETSUGIRI_LEARNING); 1438 dic_no = js_get_autolearning_dic(cur_env, WNN_BUNSETSUGIRI_LEARNING);
1432 if (dic_no == WNN_NO_LEARNING) { 1439 if (dic_no == WNN_NO_LEARNING)
1433 if((dic_no = jl_dic_add(wnnfns_buf[snum], 1440 {
1434 XSTRING_DATA (args[0]), 1441 if ((dic_no = jl_dic_add (wnnfns_buf[snum],
1435 0, 1442 LISP_STRING_TO_EXTERNAL (args[0],
1436 wnnfns_norm ? WNN_DIC_ADD_NOR : WNN_DIC_ADD_REV, 1443 Qfile_name),
1437 XINT(args[1]), 1444 0,
1438 WNN_DIC_RW, WNN_DIC_RW, 1445 wnnfns_norm ? WNN_DIC_ADD_NOR :
1439 NILP (args[3]) ? 0 : XSTRING_DATA (args[3]), 1446 WNN_DIC_ADD_REV,
1440 0, 1447 XINT(args[1]),
1441 yes_or_no, 1448 WNN_DIC_RW, WNN_DIC_RW,
1442 puts2)) < 0) { 1449 NILP (args[3]) ? 0 :
1450 LISP_STRING_TO_EXTERNAL (args[3],
1451 Qfile_name),
1452 0,
1453 yes_or_no,
1454 puts2)) < 0)
1455 {
1443 UNGCPRO; 1456 UNGCPRO;
1444 return Qnil; 1457 return Qnil;
1445 } 1458 }
1446 js_set_autolearning_dic(cur_env, WNN_BUNSETSUGIRI_LEARNING, dic_no); 1459 js_set_autolearning_dic (cur_env, WNN_BUNSETSUGIRI_LEARNING, dic_no);
1447 } 1460 }
1448 if(!js_is_loaded_temporary_dic(cur_env)) { 1461 if (!js_is_loaded_temporary_dic (cur_env))
1449 if(js_temporary_dic_add(cur_env, 1462 {
1450 wnnfns_norm ? WNN_DIC_ADD_NOR : WNN_DIC_ADD_REV) < 0) { 1463 if (js_temporary_dic_add (cur_env,
1464 wnnfns_norm ? WNN_DIC_ADD_NOR :
1465 WNN_DIC_ADD_REV) < 0)
1466 {
1451 UNGCPRO; 1467 UNGCPRO;
1452 return Qnil; 1468 return Qnil;
1453 } 1469 }
1454 } 1470 }
1455 vmask |= WNN_ENV_BUNSETSUGIRI_LEARN_MASK; 1471 vmask |= WNN_ENV_BUNSETSUGIRI_LEARN_MASK;
1456 henv.bunsetsugiri_flag = NILP (args[2]) ? WNN_DIC_RDONLY : WNN_DIC_RW; 1472 henv.bunsetsugiri_flag = NILP (args[2]) ? WNN_DIC_RDONLY : WNN_DIC_RW;
1457 if(jl_set_henkan_env(wnnfns_buf[snum], 1473 if (jl_set_henkan_env (wnnfns_buf[snum],
1458 vmask, 1474 vmask,
1459 &henv) < 0) { 1475 &henv) < 0)
1476 {
1460 UNGCPRO; 1477 UNGCPRO;
1461 return Qnil; 1478 return Qnil;
1462 } 1479 }
1463 UNGCPRO; 1480 UNGCPRO;
1464 return Qt; 1481 return Qt;
1465 } 1482 }
1466 1483
1467 DEFUN ("wnn-server-set-last-is-first", Fwnn_last_is_first, 1, 1, 0, /* 1484 DEFUN ("wnn-server-set-last-is-first", Fwnn_last_is_first, 1, 1, 0, /*
1884 { 1901 {
1885 wnnfns_buf[i] = (struct wnn_buf *) 0; 1902 wnnfns_buf[i] = (struct wnn_buf *) 0;
1886 wnnfns_env_norm[i] = (struct wnn_env *) 0; 1903 wnnfns_env_norm[i] = (struct wnn_env *) 0;
1887 wnnfns_env_rev[i] = (struct wnn_env *) 0; 1904 wnnfns_env_rev[i] = (struct wnn_env *) 0;
1888 } 1905 }
1906
1907 charset_wnn_server_type[0] = Vcharset_japanese_jisx0208;
1908 charset_wnn_server_type[1] = Vcharset_chinese_gb2312;
1909 charset_wnn_server_type[2] = Vcharset_thai_tis620;
1910 charset_wnn_server_type[3] = Vcharset_korean_ksc5601;
1889 } 1911 }
1890 1912
1891 void 1913 void
1892 vars_of_mule_wnn (void) 1914 vars_of_mule_wnn (void)
1893 { 1915 {
1894 DEFVAR_INT ("lb-sisheng", &lb_sisheng /*
1895 Leading character for Sisheng.
1896 */ );
1897 DEFVAR_LISP ("wnn-server-type", &Vwnn_server_type /* 1916 DEFVAR_LISP ("wnn-server-type", &Vwnn_server_type /*
1898 *jserver, cserver .. 1917 *jserver, cserver ..
1899 */ ); 1918 */ );
1900 DEFVAR_LISP ("cwnn-zhuyin", &Vcwnn_zhuyin /* 1919 DEFVAR_LISP ("cwnn-zhuyin", &Vcwnn_zhuyin /*
1901 *pinyin or zhuyin 1920 *pinyin or zhuyin
1909 1928
1910 Vwnn_server_type = Qjserver; 1929 Vwnn_server_type = Qjserver;
1911 Vcwnn_zhuyin = Qnil; 1930 Vcwnn_zhuyin = Qnil;
1912 Vwnnenv_sticky = Qnil; 1931 Vwnnenv_sticky = Qnil;
1913 1932
1933 DEFSYMBOL (Qchinese_sisheng);
1934
1914 Vwnn_uniq_level = Qwnn_uniq; 1935 Vwnn_uniq_level = Qwnn_uniq;
1915 1936
1916 Fprovide (intern ("wnn")); 1937 Fprovide (intern ("wnn"));
1917 } 1938 }
1918 1939
1940 /* Convert from the wide-char format expected for wnn to the XEmacs string
1941 format. */
1942
1919 void 1943 void
1920 w2m (w_char *wp, unsigned char *mp, unsigned char lb) 1944 w2m (w_char *wp, Ibyte *mp, Lisp_Object charset)
1921 { 1945 {
1922 w_char wc; 1946 w_char wc;
1923 w_char pzy[10]; 1947 w_char pzy[10];
1924 int i, len; 1948 int i, len;
1925 1949
1935 ? CWNN_PINYIN 1959 ? CWNN_PINYIN
1936 : CWNN_ZHUYIN); 1960 : CWNN_ZHUYIN);
1937 for (i = 0; i < len; i++) 1961 for (i = 0; i < len; i++)
1938 { 1962 {
1939 if (pzy[i] & 0x80) 1963 if (pzy[i] & 0x80)
1940 { 1964 mp += charset_codepoint_to_itext
1941 *mp++ = PRE_LEADING_BYTE_PRIVATE_1; /* #### Not sure about this one... */ 1965 (Fget_charset (Qchinese_sisheng), 0, pzy[i] & 0x7f, mp,
1942 *mp++ = lb_sisheng; 1966 CONVERR_USE_PRIVATE);
1943 } 1967 else
1944 *mp++ = pzy[i]; 1968 /* @@#### Correct? */
1969 mp += charset_codepoint_to_itext
1970 (Vcharset_ascii, 0, pzy[i] & 0x7f, mp,
1971 CONVERR_USE_PRIVATE);
1945 } 1972 }
1946 } 1973 }
1947 else 1974 else
1948 { 1975 mp += charset_codepoint_to_itext (Vcharset_katakana_jisx0201,
1949 *mp++ = LEADING_BYTE_KATAKANA_JISX0201; 1976 0, wc & 0x7f, mp,
1950 *mp++ = (wc & 0xff); 1977 CONVERR_USE_PRIVATE);
1951 }
1952 break; 1978 break;
1953 case 0x8080: 1979 case 0x8080:
1954 *mp++ = lb; 1980 mp += charset_codepoint_to_itext (charset, (wc & 0x7f00) >> 8,
1955 *mp++ = (wc & 0xff00) >> 8; 1981 wc & 0x007f, mp,
1956 *mp++ = wc & 0x00ff; 1982 CONVERR_USE_PRIVATE);
1957 break; 1983 break;
1958 case 0x8000: 1984 case 0x8000:
1959 if (lb == LEADING_BYTE_JAPANESE_JISX0208) 1985 {
1960 *mp++ = LEADING_BYTE_JAPANESE_JISX0212; 1986 Lisp_Object newchar = charset;
1961 else if (lb == LEADING_BYTE_CHINESE_BIG5_1) 1987 if (EQ (charset, Vcharset_japanese_jisx0208))
1962 *mp++ = LEADING_BYTE_CHINESE_BIG5_2; 1988 newchar = Vcharset_japanese_jisx0212;
1963 else 1989 #ifndef UNICODE_INTERNAL
1964 *mp++ = lb; 1990 /* @@#### Something very strange about this */
1965 *mp++ = (wc & 0xff00) >> 8; 1991 else if (EQ (charset, Vcharset_chinese_big5_1))
1966 *mp++ = (wc & 0x00ff) | 0x80; 1992 newchar = Vcharset_chinese_big5_2;
1967 break; 1993 #endif /* not UNICODE_INTERNAL */
1994 mp += charset_codepoint_to_itext (newchar, (wc & 0x7f00) >> 8,
1995 wc & 0x007f, mp,
1996 CONVERR_USE_PRIVATE);
1997 break;
1998 }
1968 default: 1999 default:
1969 *mp++ = wc & 0x00ff; 2000 mp += set_itext_ichar (mp, wc & 0x00ff);
1970 break; 2001 break;
1971 } 2002 }
1972 } 2003 }
1973 *mp = 0; 2004 *mp = 0;
1974 } 2005 }
1975 2006
2007 /* Convert XEmacs string format to the wide-char format expected for wnn. */
1976 void 2008 void
1977 m2w (unsigned char *mp, w_char *wp) 2009 m2w (Ibyte *mp, w_char *wp)
1978 { 2010 {
1979 int ch; 2011 while (*mp)
1980 2012 {
1981 while ((ch = *mp++) != 0) 2013 Lisp_Object charset;
1982 { 2014 int c1, c2;
1983 if (ibyte_leading_byte_p (ch)) 2015 int ch;
1984 { 2016
1985 switch (ch) 2017 /* @@#### current_buffer dependency */
1986 { 2018 buffer_itext_to_charset_codepoint (mp, current_buffer,
1987 case LEADING_BYTE_KATAKANA_JISX0201: 2019 &charset, &c1, &c2, CONVERR_FAIL);
1988 *wp++ = *mp++; break; 2020 INC_IBYTEPTR (mp);
1989 case LEADING_BYTE_LATIN_JISX0201: 2021 if (EQ (charset, Vcharset_ascii) ||
1990 *wp++ = *mp++ & 0x7F; break; 2022 EQ (charset, Vcharset_latin_jisx0201) ||
1991 case LEADING_BYTE_JAPANESE_JISX0208_1978: 2023 EQ (charset, Vcharset_katakana_jisx0201))
1992 case LEADING_BYTE_CHINESE_GB2312: 2024 ch = c2;
1993 case LEADING_BYTE_JAPANESE_JISX0208: 2025 else if (EQ (charset, Vcharset_japanese_jisx0208) ||
1994 case LEADING_BYTE_KOREAN_KSC5601: 2026 EQ (charset, Vcharset_japanese_jisx0208_1978) ||
1995 /* case LEADING_BYTE_TW: */ 2027 EQ (charset, Vcharset_chinese_gb2312) ||
1996 ch = *mp++; 2028 EQ (charset, Vcharset_korean_ksc5601)
1997 *wp++ = (ch << 8) | *mp++; 2029 /* || other 2-byte charsets??? */
1998 break; 2030 )
1999 case LEADING_BYTE_JAPANESE_JISX0212: 2031 ch = ((c1 | 0x80) << 8) + (c2 | 0x80);
2000 ch = *mp++; 2032 else if (EQ (charset, Vcharset_japanese_jisx0212))
2001 *wp++ = (ch << 8) | (*mp++ & 0x7f); 2033 ch = ((c1 | 0x80) << 8) + c2;
2002 break; 2034 else if (EQ (charset, Fget_charset (Qchinese_sisheng)))
2003 case PRE_LEADING_BYTE_PRIVATE_1: /* #### Not sure about this one... */ 2035 ch = 0x8e80 | c2;
2004 ch = *mp++; 2036 else /* Ignore character */
2005 if (ch == lb_sisheng) 2037 continue;
2006 *wp++ = 0x8e80 | *mp++; 2038 *wp++ = (w_char) ch;
2007 else
2008 mp++;
2009 break;
2010 default: /* ignore this character */
2011 mp += rep_bytes_by_first_byte(ch) - 1;
2012 }
2013 }
2014 else
2015 {
2016 *wp++ = ch;
2017 }
2018 } 2039 }
2019 *wp = 0; 2040 *wp = 0;
2020 } 2041 }
2021 2042
2022 void 2043 void
2049 *y = *pin; 2070 *y = *pin;
2050 y++; pin++; len--; 2071 y++; pin++; len--;
2051 } 2072 }
2052 } 2073 }
2053 2074
2075 /* Converts text in the multi-byte locale-specific format returned by some
2076 WNN functions into XEmacs-internal. This format appears to be a simple
2077 MBCS encoding with a single locale, and we could use probably existing
2078 coding systems to handle it. */
2079
2054 void 2080 void
2055 c2m (unsigned char *cp, unsigned char *mp, unsigned char lb) 2081 c2m (UExtbyte *cp, Ibyte *mp, Lisp_Object charset)
2056 { 2082 {
2057 unsigned char ch; 2083 UExtbyte ch;
2058 while ((ch = *cp) != 0) 2084 while ((ch = *cp) != 0)
2059 { 2085 {
2060 if (ch & 0x80) 2086 if (ch & 0x80)
2061 { 2087 {
2062 *mp++ = lb; 2088 mp += charset_codepoint_to_itext (charset, cp[0] & 0x7f,
2063 *mp++ = *cp++; 2089 cp[1] & 0x7f, mp,
2090 CONVERR_USE_PRIVATE);
2091 cp += 2;
2064 } 2092 }
2065 *mp++ = *cp++; 2093 else
2094 *mp++ = *cp++; /* Guaranteed ASCII */
2066 } 2095 }
2067 *mp = 0; 2096 *mp = 0;
2068 } 2097 }
2069 2098
2070 static int 2099 static int
2074 && !jl_dai_top (wnnfns_buf[server], no); no++); 2103 && !jl_dai_top (wnnfns_buf[server], no); no++);
2075 return (no); 2104 return (no);
2076 } 2105 }
2077 2106
2078 static int 2107 static int
2079 yes_or_no (unsigned char *s) 2108 yes_or_no (UExtbyte *s)
2080 { 2109 {
2081 unsigned char mbuf[512]; 2110 Ibyte mbuf[512];
2082 unsigned char lb; 2111 Lisp_Object charset;
2083 int len; 2112 int len;
2084 int snum; 2113 int snum;
2085 if ((snum = check_wnn_server_type ()) == -1) return 0; 2114 if ((snum = check_wnn_server_type ()) == -1) return 0;
2086 lb = lb_wnn_server_type[snum]; 2115 charset = charset_wnn_server_type[snum];
2087 /* if no message found, create file without query */ 2116 /* if no message found, create file without query */
2088 /* if (wnn_msg_cat->msg_bd == 0) return 1;*/ 2117 /* if (wnn_msg_cat->msg_bd == 0) return 1;*/
2089 if (*s == 0) return 1; 2118 if (*s == 0) return 1;
2090 c2m (s, mbuf, lb); 2119 c2m (s, mbuf, charset);
2091 /* truncate "(Y/N)" */ 2120 /* truncate "(Y/N)" */
2092 for (len = 0; (mbuf[len]) && (len < 512); len++); 2121 for (len = 0; (mbuf[len]) && (len < 512); len++);
2093 for (; (mbuf[len] != '(') && (len > 0); len--); 2122 for (; (mbuf[len] != '(') && (len > 0); len--);
2094 { 2123 {
2095 Lisp_Object yes, str; 2124 Lisp_Object yes, str;
2096 struct gcpro gcpro1; 2125 struct gcpro gcpro1;
2097 2126
2098 str = make_string (mbuf, len); 2127 str = make_string (mbuf, len);
2099 GCPRO1 (str); 2128 GCPRO1 (str);
2100 yes = call1(Qyes_or_no_p, str); 2129 yes = call1 (Qyes_or_no_p, str);
2101 UNGCPRO; 2130 UNGCPRO;
2102 if (NILP (yes)) return 0; 2131 if (NILP (yes)) return 0;
2103 else return (1); 2132 else return (1);
2104 } 2133 }
2105 } 2134 }
2106 2135
2107 static void 2136 static void
2108 puts2 (char *s) 2137 puts2 (char *UNUSED (s))
2109 { 2138 {
2110 #if 0 /* jhod: We don't really need this echoed... */ 2139 #if 0 /* jhod: We don't really need this echoed... */
2111 #if 0 2140 Ibyte mbuf[512];
2112 Lisp_Object args[1]; 2141 Lisp_Object charset;
2113 char mbuf[512];
2114 unsigned char lb;
2115 extern Lisp_Object Fmessage ();
2116 int snum; 2142 int snum;
2117 if ((snum = check_wnn_server_type ()) == -1) return; 2143 if ((snum = check_wnn_server_type ()) == -1) return;
2118 lb = lb_wnn_server_type[snum]; 2144 charset = charset_wnn_server_type[snum];
2119 c2m (s, mbuf, lb); 2145 c2m (s, mbuf, charset);
2120 args[0] = make_string (mbuf, strlen (mbuf)); 2146 message ("%s", mbuf);
2121 Fmessage (1, args);
2122 #else
2123 message("%s",s);
2124 #endif
2125 #endif 2147 #endif
2126 } 2148 }
2127 2149
2128 int 2150 int
2129 check_wnn_server_type (void) 2151 check_wnn_server_type (void)