comparison src/mule-wnnfns.c @ 70:131b0175ea99 r20-0b30

Import from CVS: tag r20-0b30
author cvs
date Mon, 13 Aug 2007 09:02:59 +0200
parents
children 1ce6082ce73f
comparison
equal deleted inserted replaced
69:804d1389bcd6 70:131b0175ea99
1 /*
2 Copyright (C) 1995 Free Software Foundation, Inc.
3 Copyright (C) 1995 Sun Microsystems, Inc.
4
5 This file is part of XEmacs.
6
7 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 Free Software Foundation; either version 2, or (at your option) any
10 later version.
11
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with XEmacs; see the file COPYING. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
21
22 /* Synched up with: Mule 2.3. Not in FSF. */
23
24 /* Jserver Interface for Mule
25 Coded by Yutaka Ishikawa at ETL (yisikawa@etl.go.jp)
26 Satoru Tomura at ETL (tomura@etl.go.jp)
27 Modified for Wnn4 library by
28 Toshiaki Shingu (shingu@cpr.canon.co.jp)
29 Hiroshi Kuribayashi (kuri@nff.ncl.omron.co.jp) */
30
31 /*
32 * Functions defined in this file are
33 * (wnn-server-open wnn-host-name login-name)
34 * wnn-host-name: STRING or NIL
35 * login-name: STRING
36 * RETURNS: BOOLEAN
37 * DESCRIPTION:
38 * jserver $B$H@\B3$7!"%5!<%P!<FbIt$K@5JQ49!?5UJQ49#2$D$N4D6-$r(B
39 * $B:n$k!#%(%i!<$N;~$O(B nil $B$rJV$9!#(B
40 *
41 * (wnn-server-close)
42 * RETURNS: BOOLEAN
43 * DESCRIPTION:
44 * jserver $B$H$N@\B3$r@Z$k!#<-=q!"IQEY$O%;!<%V$5$l$J$$!#(B
45 *
46 * (wnn-server-dict-add dict-file-name hindo-file-name priority
47 * dict-file-mode hindo-file-mode pw1 pw2)
48 * dict-file-name: STRING
49 * hindo-file-name: STRING or NULL-STRING
50 * priority: INTEGER
51 * dict-file-mode: BOOLEAN
52 * hindo-file-mode: BOOLEAN
53 * pw1: STRING or NIL
54 * pw2: STRING or NIL
55 * DESCRIPTION:
56 * $B<-=q09:37:18!%$%kL>!"IQEY09:37:18!%$%kL>!"M%@hEY!"<-=q09:37:18!%$%k%b!<%(BI
57 * $BIQEY09:37:18!%$%k%b!<%I$G;XDj$7$?<-=q$r/export/willow0/xemacs-20.0-release/editor/src/mule/SCCS/s.mule-wnnfns.cC09:37:18!$KDI2C$9$k!(B#
58 * pw1, pw2 $B$O<-=q09:37:18!%$%k!"IQEY09:37:18!%$%k$N9%o!<%I!(B#
59 *
60 * (wnn-server-dict-delete dic-no)
61 * dic-no: INTEGER
62 * RETURNS: $B%(%i!<$N;~(B nil
63 * DESCRIPTION: dic-no $B$N<-=qHV9f$N<-=q$r!"/export/willow0/xemacs-20.0-release/editor/src/mule/SCCS/s.mule-wnnfns.cC09:37:18!$+$i(B
64 * $B:o=|$9$k!#(B
65 *
66 * (wnn-server-dict-list)
67 * RETURNS: ((dic-no1 file-name1 comment1 word-no1 nice1)
68 * (dic-no2 file-name2 comment2 word-no2 nice2)...)
69 * DESCRIPTION: $B/export/willow0/xemacs-20.0-release/editor/src/mule/SCCS/s.mule-wnnfns.cC09:37:18!>e$N<-=q$N%j%9%H$rF@$k!#(B
70 *
71 * (wnn-server-dict-comment dic-no comment)
72 * RETURNS: $B%(%i!<$N;~(B nil
73 * DESCRIPTION: dic-no $B$N<-=q$K%3%a%s%H$r$D$1$k!#(B
74 *
75 * (wnn-server-set-rev rev)
76 * rev: BOOLEAN
77 * rev $B$,(B nil $B$N;~$O@5JQ49!"$=$l0J30$N;~$O5UJQ49(B
78 *
79 * (wnn-server-henkan-begin henkan-string)
80 * henkan-string: STRING
81 * RETURNS: bunsetu-suu
82 * DESCRIPTION:
83 * $B2>L>4A;zJQ49$r$7!"Bh0l8uJd$NJ8@a?t$rJV$9!#(B
84 *
85 * (wnn-server-zenkouho bunsetu-no dai)
86 * bunsetu-no: INTEGER
87 * dai: BOOLEAN
88 * RETURNS: offset
89 * DESCRIPTION:
90 * $BJ8@aHV9f$G;XDj$5$l$?J8@a$NA48uJd$r$H$j$@$7(B
91 * $B!"8=:_$N%*09:37:18;89H$rJV$9!#(B
92 *
93 * (wnn-server-get-zenkouho offset)
94 * bunsetu-no: INTEGER
95 * dai: BOOLEAN
96 * RETURNS: list of zenkouho
97 * DESCRIPTION:
98 * $B%*09:37:18;96H$G;XDj$5$l$?8uJd$rF@$k!#(B
99 *
100 * (wnn-server-zenkouho-bun)
101 * RETURNS: INTEGER
102 * DESCRIPTION:
103 * $BA48uJd$rI=<($7$F$$$kJ8@aHV9f$rF@$k!#(B
104 *
105 * (wnn-server-zenkouho-suu)
106 * RETURNS: INTEGER
107 * DESCRIPTION:
108 * $BA48uJd$rI=<($7$F$$$kJ8@a$NA48uJd?t$rF@$k!#(B
109 *
110 * (wnn-server-dai-top bun-no)
111 * bun-no: INTEGER
112 * RETURNS: BOOLEAN
113 * DESCRIPTION:
114 * $BJ8@a$,BgJ8@a$N@hF,$J$i(B t
115 *
116 * (wnn-server-dai-end bun-no)
117 * bun-no: INTEGER
118 * RETURNS: INTEGER
119 * DESCRIPTION:
120 * $B<!$NBgJ8@a$NJ8@aHV9f$rF@$k!#(B
121 *
122 * (wnn-server-henkan-kakutei kouho-no dai)
123 * kouho-no: INTEGER
124 * dai: BOOLEAN
125 * RETURNS: BOOLEAN
126 * DESCRIPTION:
127 * $B8uJdHV9f$G<($5$l$?8uJd$rA*Br$9$k!#(B
128 * (wnn-server-zenkouho) $B$r8F$s$F$+$i$G$J$$$H$$$1$J$$!#(B
129 *
130 * (wnn-server-bunsetu-henkou bunsetu-no bunsetu-length dai)
131 * bunsetu-no: INTEGER
132 * bunsetu-length: INTEGER
133 * dai: BOOLEAN
134 * RETURNS:
135 * DESCRIPTION:
136 * $BJ8@a$ND9$5$rJQ99$9$k!#(B
137 *
138 * (wnn-bunsetu-kouho-inspect bunsetu-no)
139 * bunsetu-no: INTEGER
140 * RETURNS: (kanji yomi jisho-no serial-no hinsi hindo
141 * ima hyoka daihyoka kangovect)
142 * DESCRIPTION:
143 * $BJ8@a$N?'!9$J>pJs$rJQ49/export/willow0/xemacs-20.0-release/editor/src/mule/SCCS/s.mule-wnnfns.cC09:37:18!$+$i$H$j=P$9!#(B
144 *
145 * (wnn-server-henkan-quit)
146 * RETURNS: BOOLEAN
147 * DESCRIPTION:
148 * $B2?$b$7$J$$!#(B
149 *
150 * (wnn-server-bunsetu-kanji bun-no)
151 * RETURNS: (bunsetu-kanji length)
152 * DESCRIPTION:
153 *
154 * (wnn-server-bunsetu-yomi bun-no)
155 * RETURNS: (bunsetu-yomi length)
156 * DESCRIPTION:
157 *
158 * (wnn-server-bunsetu-suu)
159 * RETURNS: bunsetu-suu
160 * DESCRIPTION:
161 *
162 * (wnn-server-hindo-update &optional bunsetu-no)
163 * bunsetu-no: INTEGER
164 * RETURNS: BOOLEAN
165 * DESCRIPTION:
166 * $BIQEY>pJs$r99?7$9$k!#(B
167 *
168 * (wnn-server-word-add dic-no tango yomi comment hinsi)
169 * dic-no: INTEGER
170 * tango: STRING
171 * yoni: STRING
172 * comment: STRING
173 * hinsi: INTEGER
174 * RETURNS: BOOLEAN
175 * DESCRIPTION:
176 * $B<-=q$KC18l$rEPO?$9$k!#(B
177 *
178 * (wnn-server-word-delete dic-no entry)
179 * dic-no: INTEGER
180 * entry: INTEGER
181 * RETURNS: BOOLEAN
182 * DESCRIPTION:
183 * $B<-=q$+$i%(%s15(B $BSe(Bp $B1995jHV9f$G<($5$l$kC18l$r:o=|$9$k!(B#
184 *
185 * (wnn-server-word-use dic-no entry)
186 * dic-no: INTEGER
187 * entry: INTEGER
188 * RETURNS: BOOLEAN
189 * DESCRIPTION:
190 * $B<-=q$+$i%(%s15(B $BSe(Bp $B1995jHV9f$G<($5$l$kC18l$NM-8z!?L58z$r1(B5 $BSe(Bp $B19950%k$9$k!(B#
191 *
192 * (wnn-server-word-info dic-no entry)
193 * dic-no: INTEGER
194 * entry: INTEGER
195 * RETURNS: (yomi kanji comment hindo hinsi)
196 * DESCRIPTION:
197 * $B<-=q$+$i%(%s15(B $BSe(Bp $B1995jHV9f$G<($5$l$kC18l$N>pJs$rF@$k!(B#
198 *
199 * (wnn-server-word-hindo-set dic-no entry hindo)
200 * dic-no: INTEGER
201 * entry: INTEGER
202 * hindo: INTEGER
203 * RETURNS: BOOLEAN
204 * DESCRIPTION:
205 * $B<-=q$+$i%(%s15(B $BSe(Bp $B1995jHV9f$G<($5$l$kC18l$NIQEY$r@_Dj$9$k!(B#
206 *
207 * (wnn-server-word-search yomi)
208 * yomi: STRING
209 * RETURNS: a LIST of dict-joho
210 * DESCRIPTION:
211 * $BA4$F$N<-=q$+$iC18l8!:w$r9T$J$&!#(B
212 *
213 * (wnn-server-dict-save)
214 * RETURNS: BOOLEAN
215 * DESCRIPTION:
216 * $BA4$F$N<-=q$HIQEY09:37:18!%$%k$r%;!<%V$9$k!(B#
217 *
218 * (wnn-server-get-param)
219 * RETURNS: (n nsho p1 p2 p3 ... p15)
220 * DESCRIPTION: $BJQ49i%a!<%?$rF@$k!(B#
221 *
222 * (wnn-server-set-param n sho p1 ... p15)
223 * RETURNS: $B%(%i!<$N;~(B nil
224 * DESCRIPTION: $BJQ49i%a!<%?$r@_Dj$9$k!(B#
225 *
226 * (wnn-server-get-msg error-no)
227 * RETURNS: $B%(%i!<%a225;!<%8(B
228 * DESCRIPTION: $B%(%i!<HV9f$+$i%a226;!<%8$rF@$k!#(B
229 *
230 * (wnn-server-fuzokugo-set fname)
231 * RETURNS: $B%(%i!<$N;~(B nil
232 * DESCRIPTION: $B/export/willow0/xemacs-20.0-release/editor/src/mule/SCCS/s.mule-wnnfns.cC09:37:18!$KImB08l09:37:18!%$%k$rFI$_9~$`!(B#
233 *
234 * (wnn-server-fuzokugo-get)
235 * RETURNS: $B09:37:18!%$%kL(B>
236 * DESCRIPTION: $B/export/willow0/xemacs-20.0-release/editor/src/mule/SCCS/s.mule-wnnfns.cC09:37:18!$NImB08l09:37:18!%$%kL>$rF@$k!(B#
237 *
238 * (wnn-server-isconnect)
239 * RETURNS: $B%3mule-wnnfns.c/%H$7$F$l$P(B t, $B$7$F$J$1$l$P(B nil
240 * DESCRIPTION: $B%5!<%P$H7Q$C$F$$$k$+D4$Y$k!#(B
241 *
242 * (wnn-server-hinsi-dicts hinsi-no)
243 * RETURNS: (dic-no1 dic-no2 ...)
244 * DESCRIPTION: hinsi-no $B$NIJ;l$,EPO?$G$-$k<-=q$N%j%9%H$rF@$k!#(B
245 * hinsi-no = -1 $B$N$H$-$K$O!"EPO?2DG=$JA4<-=q$rF@$k!#(B
246 *
247 * (wnn-server-hinsi-list dic-no name)
248 * RETURNS: (name1 name2 ... )
249 * DESCRIPTION: dic-no $B$N<-=q$G!"IJ;l%N!<%I$KB0$9$k(B
250 * $BIJ;l%N!<%I!JL>!K$N%j%9%H$rF@$k!#(B
251 * $BIJ;lL>$rM?$($?;~$O!"#0$rJV$9!#(B
252 *
253 * (wnn-server-hinsi-name hinsi-no)
254 * RETURNS: hinsi-name
255 * DESCRIPTION: $BIJ;lHV9f$+$iL>A0$r<h$k!#(B
256 *
257 * (wnn-server-hinsi-number hinsi-name)
258 * RETURNS: hinsi-no
259 * DESCRIPTION: $BIJ;lL>$rIJ;lHV9f$KJQ49$9$k!#(B
260 *
261 * (wnn-server-version)
262 * RETURNS: version ID(int)
263 *
264 */
265
266 #include <config.h>
267 #include "lisp.h"
268
269 #include "buffer.h"
270 #include "window.h"
271
272 #include "commonhd.h"
273 #include "jllib.h"
274 #include "cplib.h"
275
276 /* UCHAR $B$,Fs=EDj5A$5$l$k$N$G(B */
277 #define _UCHAR_T
278
279 #define EGG_TIMEOUT 5
280 #define NSERVER 4
281 #define WNNSERVER_J 0
282 #define WNNSERVER_C 1
283 #define WNNSERVER_T 2
284 #define WNNSERVER_K 3
285
286 static struct wnn_buf *wnnfns_buf[NSERVER];
287 static struct wnn_env *wnnfns_env_norm[NSERVER];
288 static struct wnn_env *wnnfns_env_rev[NSERVER];
289 static int wnnfns_norm;
290 static unsigned char lb_wnn_server_type[NSERVER] =
291 {LEADING_BYTE_JP, LEADING_BYTE_CN, LEADING_BYTE_INV, LEADING_BYTE_KR};
292
293 /* Lisp Variables and Constants Definition */
294 Lisp_Object Qjserver;
295 Lisp_Object Qcserver;
296 /*Lisp_Object Qtserver;*/
297 Lisp_Object Qkserver;
298 Lisp_Object Qwnn_no_uniq;
299 Lisp_Object Qwnn_uniq;
300 Lisp_Object Qwnn_uniq_kanji;
301 Lisp_Object Vwnn_server_type;
302 Lisp_Object Vcwnn_zhuyin;
303 Lisp_Object Vwnnenv_sticky;
304 Lisp_Object Vwnn_uniq_level;
305 int lb_sisheng;
306
307 /* Lisp functions definition */
308
309
310
311 DEFUN ("wnn-server-open", Fwnn_open, 2, 2, 0, /*
312 Connect to jserver of host HNAME, make an environment with
313 login name LNAME in the server.
314 Return nil if error occurs
315 */
316 (hname, lname))
317 {
318 char envname[32];
319 char langname[32];
320 char hostname[32];
321 int snum;
322 CHECK_STRING (lname);
323
324 snum = check_wnn_server_type ();
325 switch (snum)
326 {
327 case WNNSERVER_J:
328 strcpy (langname, "ja_JP");
329 break;
330 case WNNSERVER_C:
331 strcpy (langname, "zh_CN");
332 break;
333 /*
334 case WNNSERVER_T:
335 strcpy (langname, "zh_TW");
336 break;
337 */
338 case WNNSERVER_K:
339 strcpy (langname, "ko_KR");
340 break;
341 }
342 strncpy (envname, XSTRING (lname)->data, 32);
343 if (hname == Qnil) strcpy (hostname, "");
344 else
345 {
346 CHECK_STRING (hname);
347 strncpy (hostname, XSTRING (hname)->data, 32);
348 }
349 CHECK_STRING (lname);
350 if (!(wnnfns_buf[snum] = jl_open_lang (envname, hostname, langname,
351 0, 0, 0, EGG_TIMEOUT)))
352 {
353 return Qnil;
354 }
355 if (!jl_isconnect (wnnfns_buf[snum])) return Qnil;
356 wnnfns_env_norm[snum] = jl_env_get (wnnfns_buf[snum]);
357 /* if (Vwnnenv_sticky == Qt) jl_env_sticky_e (wnnfns_env_norm[snum]);
358 else jl_env_un_sticky_e (wnnfns_env_norm[snum]);*/
359 strcat (envname, "R");
360 if (!(wnnfns_env_rev[snum] = jl_connect_lang (envname, hostname, langname,
361 0, 0, 0, EGG_TIMEOUT)))
362 {
363 return Qnil;
364 }
365 /* if (Vwnnenv_sticky == Qt) jl_env_sticky_e (wnnfns_env_rev[snum]);
366 else jl_env_un_sticky_e (wnnfns_env_rev[snum]);*/
367 return Qt;
368 }
369
370
371 DEFUN ("wnn-server-close", Fwnn_close, 0, 0, 0, /*
372 Close the connection to jserver, Dictionary and friquency files
373 are not saved.
374 */
375 ())
376 {
377 int snum;
378 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
379 if (!wnnfns_buf[snum]) return Qnil;
380 if (wnnfns_env_norm[snum])
381 {
382 if (Vwnnenv_sticky == Qnil) jl_env_un_sticky_e (wnnfns_env_norm[snum]);
383 else jl_env_sticky_e (wnnfns_env_norm[snum]);
384 jl_disconnect (wnnfns_env_norm[snum]);
385 }
386 if (wnnfns_env_rev[snum])
387 {
388 if (Vwnnenv_sticky == Qnil) jl_env_un_sticky_e (wnnfns_env_rev[snum]);
389 else jl_env_sticky_e (wnnfns_env_rev[snum]);
390 jl_disconnect (wnnfns_env_rev[snum]);
391 }
392 jl_env_set (wnnfns_buf[snum], 0);
393 jl_close (wnnfns_buf[snum]);
394 wnnfns_buf[snum] = (struct wnn_buf *) 0;
395 wnnfns_env_norm[snum] = wnnfns_env_rev[snum] = (struct wnn_env *) 0;
396 return Qt;
397 }
398
399 DEFUN ("wnn-server-dict-add", Fwnn_dict_add, 5, MANY, 0, /*
400 Add dictionary specified by DICT-FILE-NAME, FREQ-FILE-NAME,
401 PRIORITY, DICT-FILE-MODE, FREQ-FILE-MODE.
402 Specify password files of dictionary and frequency, PW1 and PW2, if needed.
403 */
404 (int nargs, Lisp_Object *args))
405 {
406 static int yes_or_no ();
407 static void puts2 ();
408 struct gcpro gcpro1;
409 int snum;
410 CHECK_STRING (args[0]);
411 CHECK_STRING (args[1]);
412 CHECK_INT (args[2]);
413 if (args[5] != Qnil) CHECK_STRING (args[5]);
414 if (args[6] != Qnil) CHECK_STRING (args[6]);
415 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
416 if (!wnnfns_buf[snum]) return Qnil;
417 GCPRO1 (*args);
418 gcpro1.nvars = nargs;
419 if (jl_dic_add (wnnfns_buf[snum],
420 XSTRING (args[0])->data,
421 XSTRING (args[1])->data,
422 wnnfns_norm ? WNN_DIC_ADD_NOR : WNN_DIC_ADD_REV,
423 XINT (args[2]),
424 (args[3] == Qnil) ? WNN_DIC_RDONLY : WNN_DIC_RW,
425 (args[4] == Qnil) ? WNN_DIC_RDONLY : WNN_DIC_RW,
426 (args[5] == Qnil) ? 0 : XSTRING (args[5])->data,
427 (args[6] == Qnil) ? 0 : XSTRING (args[6])->data,
428 yes_or_no,
429 puts2 ) < 0)
430 {
431 UNGCPRO;
432 return Qnil;
433 }
434 UNGCPRO;
435 return Qt;
436 }
437
438 DEFUN ("wnn-server-dict-delete", Fwnn_dict_delete, 1, 1, 0, /*
439 Remove dictionary specified by DIC-NUMBER from buffer.
440 */
441 (dicno))
442 {
443 int no;
444 int snum;
445 CHECK_INT (dicno);
446 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
447 no = XINT (dicno);
448 if (!wnnfns_buf[snum]) return Qnil;
449 if (jl_dic_delete (wnnfns_buf[snum], no) < 0) return Qnil;
450 return Qt;
451 }
452
453 DEFUN ("wnn-server-dict-list", Fwnn_dict_list, 0, 0, 0, /*
454 Return information of dictionaries.
455 */
456 ())
457 {
458 WNN_DIC_INFO *dicinfo;
459 int cnt, i;
460 unsigned char comment[1024];
461 Lisp_Object val;
462 int snum;
463 unsigned char lb;
464
465 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
466 lb = lb_wnn_server_type[snum];
467 if (!wnnfns_buf[snum]) return Qnil;
468 #ifdef WNN6
469 if((cnt = jl_fi_dic_list (wnnfns_buf[snum], 0x3f, &dicinfo)) < 0)
470 return Qnil;
471 #else
472 if((cnt = jl_dic_list (wnnfns_buf[snum], &dicinfo)) < 0) return Qnil;
473 #endif
474 val = Qnil;
475 for (i = 0, dicinfo += cnt; i < cnt; i++)
476 {
477 dicinfo--;
478 w2m (dicinfo->comment, comment, lb);
479 val = Fcons (Fcons (make_int (dicinfo->dic_no),
480 list4 (make_string (dicinfo->fname, strlen
481 (dicinfo->fname)),
482 make_string (comment, strlen (comment)),
483 make_int (dicinfo->gosuu),
484 make_int (dicinfo->nice))), val);
485 }
486 return val;
487 }
488
489 DEFUN ("wnn-server-dict-comment", Fwnn_dict_comment, 2, 2, 0, /*
490 Set comment to dictionary specified by DIC-NUMBER.
491 Comment string COMMENT
492 */
493 (dicno, comment))
494 {
495 w_char wbuf[512];
496 int snum;
497 CHECK_INT (dicno);
498 CHECK_STRING (comment);
499 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
500 if (!wnnfns_buf[snum]) return Qnil;
501 m2w (XSTRING (comment)->data, wbuf);
502 if (jl_dic_comment_set (wnnfns_buf[snum], XINT (dicno), wbuf) < 0)
503 return Qnil;
504 return Qt;
505 }
506
507
508 DEFUN ("wnn-server-set-rev", Fwnn_set_rev, 1, 1, 0, /*
509 Switch the translation mode to normal if T, or reverse if NIL.
510 */
511 (rev))
512 {
513 int snum;
514 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
515 if (rev == Qnil)
516 {
517 if ((!wnnfns_buf[snum]) || (!wnnfns_env_norm[snum])) return;
518 jl_env_set (wnnfns_buf[snum], wnnfns_env_norm[snum]);
519 wnnfns_norm = 1;
520 }
521 else
522 {
523 if ((!wnnfns_buf[snum]) || (!wnnfns_env_rev[snum])) return;
524 jl_env_set (wnnfns_buf[snum], wnnfns_env_rev[snum]);
525 wnnfns_norm = 0;
526 }
527 }
528
529 DEFUN ("wnn-server-henkan-begin", Fwnn_begin_henkan, 1, 1, 0, /*
530 Translate YOMI string to kanji. Retuen the number of bunsetsu.
531 */
532 (hstring))
533 {
534 int cnt;
535 w_char wbuf[5000];
536 int snum;
537 CHECK_STRING (hstring);
538 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
539 if (!wnnfns_buf[snum]) return Qnil;
540 m2w (XSTRING (hstring)->data, wbuf);
541 if (snum == WNNSERVER_C)
542 w2y (wbuf);
543
544 #ifdef WNN6
545 if ((cnt = jl_fi_ren_conv (wnnfns_buf[snum], wbuf, 0, -1, WNN_USE_MAE)) < 0)
546 return Qnil;
547 #else
548 if ((cnt = jl_ren_conv (wnnfns_buf[snum], wbuf, 0, -1, WNN_USE_MAE)) < 0)
549 return Qnil;
550 return make_int (cnt);
551 }
552
553 DEFUN ("wnn-server-zenkouho", Fwnn_zenkouho, 2, 2, 0, /*
554 Get zenkouho at BUNSETSU-NUMBER. Second argument DAI is T
555 if dai-bunsetsu, NIL if sho-bunsetsu. Return the current offset of zenkouho.
556 */
557 (bunNo, dai))
558 {
559 int no, offset;
560 int snum;
561 int uniq_level;
562 CHECK_INT (bunNo);
563 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
564 if (!wnnfns_buf[snum]) return Qnil;
565 no = XINT (bunNo);
566 if (Vwnn_uniq_level == Qwnn_no_uniq) uniq_level = WNN_NO_UNIQ;
567 else if (Vwnn_uniq_level == Qwnn_uniq) uniq_level = WNN_UNIQ;
568 else uniq_level = WNN_UNIQ_KNJ;
569 if (dai == Qnil)
570 {
571 if (offset = jl_zenkouho (wnnfns_buf[snum],no,WNN_USE_MAE, uniq_level) < 0)
572 return Qnil;
573 }
574 else
575 {
576 if (offset = jl_zenkouho_dai (wnnfns_buf[snum], no, dai_end (no, snum),
577 WNN_USE_MAE, uniq_level) < 0)
578 return Qnil;
579 }
580 return make_int (offset);
581 }
582
583
584 DEFUN ("wnn-server-get-zenkouho", Fwnn_get_zenkouho, 1, 1, 0, /*
585 Get kanji string of KOUHO-NUMBER
586 */
587 (kouhoNo))
588 {
589 unsigned char kanji_buf[256];
590 w_char wbuf[256];
591 int snum;
592 unsigned char lb;
593 CHECK_INT (kouhoNo);
594 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
595 lb = lb_wnn_server_type[snum];
596 if (!wnnfns_buf[snum]) return Qnil;
597 jl_get_zenkouho_kanji (wnnfns_buf[snum], XINT (kouhoNo), wbuf);
598 w2m (wbuf, kanji_buf, lb);
599 return make_string (kanji_buf, strlen (kanji_buf));
600 }
601
602 DEFUN ("wnn-server-zenkouho-bun", Fwnn_zenkouho_bun, 0, 0, 0, /*
603 For Wnn.
604 */
605 ())
606 {
607 int snum;
608 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
609 return make_int (jl_zenkouho_bun (wnnfns_buf[snum]));
610 }
611
612 DEFUN ("wnn-server-zenkouho-suu", Fwnn_zenkouho_suu, 0, 0, 0, /*
613 Return the number of zen kouho
614 */
615 ())
616 {
617 int snum;
618 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
619 return make_int (jl_zenkouho_suu (wnnfns_buf[snum]));
620 }
621
622 DEFUN ("wnn-server-dai-top", Fwnn_dai_top, 1, 1, 0, /*
623 Return T if bunsetsu BUN-NUMBER is dai-bunsetsu.
624 */
625 (bunNo))
626 {
627 int snum;
628 CHECK_INT (bunNo);
629 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
630 if (!wnnfns_buf[snum]) return Qnil;
631 if (jl_dai_top (wnnfns_buf[snum], XINT (bunNo)) == 1) return Qt;
632 else return Qnil;
633 }
634
635 DEFUN ("wnn-server-dai-end", Fwnn_dai_end, 1, 1, 0, /*
636 Return the bunsetu number of the next dai-bunsetsu after BUN-NUMBER.
637 */
638 (bunNo))
639 {
640 int snum;
641 CHECK_INT (bunNo);
642 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
643 if (!wnnfns_buf[snum]) return Qnil;
644 return make_int (dai_end (XINT (bunNo), snum));
645 }
646
647 DEFUN ("wnn-server-henkan-kakutei", Fwnn_kakutei, 2, 2, 0, /*
648 Set candidate with OFFSET, DAI. DAI is T if dai-bunsetsu.
649 */
650 (offset, dai))
651 {
652 int snum;
653 CHECK_INT (offset);
654 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
655 if (!wnnfns_buf[snum]) return Qnil;
656 if (dai == Qnil)
657 {
658 if (jl_set_jikouho (wnnfns_buf[snum], XINT (offset)) < 0) return Qnil;
659 }
660 else
661 {
662 if (jl_set_jikouho_dai (wnnfns_buf[snum], XINT (offset)) < 0)
663 return Qnil;
664 }
665 return Qt;
666 }
667
668 DEFUN ("wnn-server-bunsetu-henkou", Fwnn_bunsetu_henkou, 3, 3, 0, /*
669 Change length of BUN-NUMBER bunsetu to LEN. DAI is T if dai-bunsetsu.
670 */
671 (bunNo, len, dai))
672 {
673 Lisp_Object val;
674 int cnt, no;
675 int snum;
676 CHECK_INT (bunNo);
677 CHECK_INT (len);
678 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
679 if (!wnnfns_buf[snum]) return Qnil;
680 no = XINT (bunNo);
681 #ifdef WNN6
682 if ((cnt = jl_fi_nobi_conv (wnnfns_buf[snum], no, XINT(len), -1, WNN_USE_MAE,
683 (dai == Qnil) ? WNN_SHO : WNN_DAI)) < 0)
684 return Qnil;
685 #else
686 if ((cnt = jl_nobi_conv (wnnfns_buf[snum], no, XINT(len), -1, WNN_USE_MAE,
687 (dai == Qnil) ? WNN_SHO : WNN_DAI)) < 0)
688 return Qnil;
689 #endif
690 return make_int (cnt);
691 }
692
693 DEFUN ("wnn-server-inspect", Fwnn_inspect, 1, 1, 0, /*
694 Get bunsetsu information specified by BUN-NUMBER.
695 */
696 (bunNo))
697 {
698 Lisp_Object val;
699 struct wnn_jdata *info_buf;
700 unsigned char cbuf[512];
701 w_char wbuf[256];
702 int bun_no, yomilen, jirilen, i;
703 int snum;
704 unsigned char lb;
705 CHECK_INT (bunNo);
706 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
707 lb = lb_wnn_server_type[snum];
708 if (!wnnfns_buf[snum]) return Qnil;
709 bun_no = XINT (bunNo);
710 val = Qnil;
711 val = Fcons (make_int (wnnfns_buf[snum]->bun[bun_no]->kangovect), val);
712 val = Fcons (make_int (wnnfns_buf[snum]->bun[bun_no]->daihyoka), val);
713 val = Fcons (make_int (wnnfns_buf[snum]->bun[bun_no]->hyoka), val);
714 val = Fcons (make_int (wnnfns_buf[snum]->bun[bun_no]->ima), val);
715 val = Fcons (make_int (wnnfns_buf[snum]->bun[bun_no]->hindo), val);
716 val = Fcons (make_int (wnnfns_buf[snum]->bun[bun_no]->hinsi), val);
717 val = Fcons (make_int (wnnfns_buf[snum]->bun[bun_no]->entry), val);
718 val = Fcons (make_int (wnnfns_buf[snum]->bun[bun_no]->dic_no), val);
719 yomilen = jl_get_yomi (wnnfns_buf[snum], bun_no, bun_no + 1, wbuf);
720 jirilen = wnnfns_buf[snum]->bun[bun_no]->jirilen;
721 for (i = yomilen; i >= jirilen; i--) wbuf[i+1] = wbuf[i];
722 wbuf[jirilen] = '+';
723 w2m (wbuf, cbuf, lb);
724 val = Fcons (make_string (cbuf, strlen (cbuf)), val);
725 jl_get_kanji (wnnfns_buf[snum], bun_no, bun_no + 1, wbuf);
726 w2m (wbuf, cbuf, lb);
727 val = Fcons (make_string (cbuf, strlen (cbuf)), val);
728 return val;
729 }
730
731
732 DEFUN ("wnn-server-henkan-quit", Fwnn_quit_henkan, 0, 0, 0, /*
733 do nothing
734 */
735 ())
736 {
737 int snum;
738 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
739 if (!wnnfns_buf[snum]) return Qnil;
740 return Qt;
741 }
742
743 DEFUN ("wnn-server-bunsetu-kanji", Fwnn_bunsetu_kanji, 1, 1, 0, /*
744 Get the pair of kanji and length of bunsetsu specified by BUN-NUMBER.
745 */
746 (bunNo))
747 {
748 int no;
749 unsigned char kanji_buf[256];
750 w_char wbuf[256];
751 int kanji_len;
752 int snum;
753 unsigned char lb;
754 CHECK_INT (bunNo);
755 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
756 lb = lb_wnn_server_type[snum];
757 if (!wnnfns_buf[snum]) return Qnil;
758 no = XINT (bunNo);
759 kanji_len = jl_get_kanji (wnnfns_buf[snum], no, no + 1, wbuf);
760 w2m (wbuf, kanji_buf, lb);
761 return Fcons (make_string (kanji_buf, strlen (kanji_buf)),
762 make_int (kanji_len));
763 }
764
765 DEFUN ("wnn-server-bunsetu-yomi", Fwnn_bunsetu_yomi, 1, 1, 0, /*
766 Get the pair of yomi and length of bunsetsu specified by BUN-NUMBER.
767 */
768 (bunNo))
769 {
770 int no;
771 unsigned char yomi_buf[256];
772 w_char wbuf[256];
773 int yomi_len;
774 int snum;
775 unsigned char lb;
776 CHECK_INT (bunNo);
777 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
778 lb = lb_wnn_server_type[snum];
779 if (!wnnfns_buf[snum]) return Qnil;
780 no = XINT (bunNo);
781 yomi_len = jl_get_yomi (wnnfns_buf[snum], no, no + 1, wbuf);
782 w2m (wbuf, yomi_buf, lb);
783 return Fcons (make_string (yomi_buf, strlen (yomi_buf)),
784 make_int (yomi_len));
785 }
786
787 DEFUN ("wnn-server-bunsetu-suu", Fwnn_bunsetu_suu, 0, 0, 0, /*
788 Get the number of bunsetsu.
789 */
790 ())
791 {
792 int snum;
793 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
794 if (!wnnfns_buf[snum]) return Qnil;
795 return make_int (jl_bun_suu (wnnfns_buf[snum]));
796 }
797
798 DEFUN ("wnn-server-hindo-update", Fwnn_hindo_update, 0, 1, 0, /*
799 Update frequency of bunsetsu specified by NUM-NUMBER.
800 */
801 (bunNo))
802 {
803 int no;
804 Lisp_Object val;
805 int snum;
806 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
807 if (bunNo == Qnil) no = -1;
808 else
809 {
810 CHECK_INT (bunNo);
811 no = XINT (bunNo);
812 }
813 if (!wnnfns_buf[snum]) return Qnil;
814 #ifdef WNN6
815 if (jl_optimize_fi (wnnfns_buf[snum], 0, no) < 0) return Qnil;
816 #else
817 if (jl_update_hindo (wnnfns_buf[snum], 0, no) < 0) return Qnil;
818 #endif
819 return Qt;
820 }
821
822
823 DEFUN ("wnn-server-word-add", Fwnn_word_toroku, 5, 5, 0, /*
824 Add a word to dictionary. Arguments are
825 DIC-NUMBER, KANJI, YOMI, COMMENT, HINSI-NUMBER
826 */
827 (dicno, kanji, yomi, comment, hinsi))
828 {
829 w_char yomi_buf[256], kanji_buf[256], comment_buf[256];
830 int snum;
831 CHECK_INT (dicno);
832 CHECK_STRING (kanji);
833 CHECK_STRING (yomi);
834 CHECK_STRING (comment);
835 CHECK_INT (hinsi);
836 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
837 if (!wnnfns_buf[snum]) return Qnil;
838 m2w (XSTRING (yomi)->data, yomi_buf);
839 if (snum == WNNSERVER_C)
840 w2y (yomi_buf);
841 m2w (XSTRING (kanji)->data, kanji_buf);
842 m2w (XSTRING (comment)->data, comment_buf);
843 if (jl_word_add (wnnfns_buf[snum], XINT (dicno), yomi_buf, kanji_buf,
844 comment_buf, XINT (hinsi), 0) < 0)
845 return Qnil;
846 else return Qt;
847 }
848
849
850 DEFUN ("wnn-server-word-delete", Fwnn_word_sakujo, 2, 2, 0, /*
851 Delete a word from dictionary, specified by DIC-NUMBER, SERIAL-NUMBER
852 */
853 (no, serial))
854 {
855 int snum;
856 CHECK_INT (no);
857 CHECK_INT (serial);
858 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
859 if (!wnnfns_buf[snum]) return Qnil;
860 if (jl_word_delete (wnnfns_buf[snum], XINT (no), XINT (serial)) < 0)
861 return Qnil;
862 else return Qt;
863 }
864
865
866 DEFUN ("wnn-server-word-use", Fwnn_word_use, 2, 2, 0, /*
867 Toggle on/off word, specified by DIC-NUMBER and SERIAL-NUMBER
868 */
869 (no, serial))
870 {
871 int snum;
872 CHECK_INT (no);
873 CHECK_INT (serial);
874 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
875 if (!wnnfns_buf[snum]) return Qnil;
876 if (jl_word_use (wnnfns_buf[snum], XINT (no), XINT (serial)) < 0)
877 return Qnil;
878 else return Qt;
879 }
880
881 DEFUN ("wnn-server-word-info", Fwnn_word_info, 2, 2, 0, /*
882 Return list of yomi, kanji, comment, hindo, hinshi.
883 */
884 (no, serial))
885 {
886 Lisp_Object val;
887 struct wnn_jdata *info_buf;
888 unsigned char cbuf[512];
889 int snum;
890 unsigned char lb;
891 CHECK_INT (no);
892 CHECK_INT (serial);
893 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
894 lb = lb_wnn_server_type[snum];
895 if (!wnnfns_buf[snum]) return Qnil;
896 if ((int)(info_buf = jl_word_info (wnnfns_buf[snum],
897 XINT (no), XINT (serial))) <= 0)
898 {
899 return Qnil;
900 }
901 else
902 {
903 val = Qnil;
904 val = Fcons (make_int (info_buf->hinshi), val);
905 val = Fcons (make_int (info_buf->hindo), val);
906 w2m (info_buf->com, cbuf, lb);
907 val = Fcons (make_string (cbuf, strlen (cbuf)), val);
908 w2m (info_buf->kanji, cbuf, lb);
909 val = Fcons (make_string (cbuf, strlen (cbuf)), val);
910 w2m (info_buf->yomi, cbuf, lb);
911 val = Fcons (make_string (cbuf, strlen (cbuf)), val);
912 return val;
913 }
914 }
915
916 DEFUN ("wnn-server-word-hindo-set", Fwnn_hindo_set, 3, 3, 0, /*
917 Set frequency to arbitrary value. Specified by DIC-NUMBER,
918 SERIAL-NUMBER, FREQUENCY
919 */
920 (no, serial, hindo))
921 {
922 int snum;
923 CHECK_INT (no);
924 CHECK_INT (serial);
925 CHECK_INT (hindo);
926 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
927 if (!wnnfns_buf[snum]) return Qnil;
928 if (js_hindo_set (jl_env_get (wnnfns_buf[snum]),
929 XINT (no),
930 XINT (serial),
931 WNN_HINDO_NOP,
932 XINT (hindo)) < 0)
933 return Qnil;
934 else return Qt;
935 }
936
937
938 DEFUN ("wnn-server-word-search", Fwnn_dict_search, 1, 1, 0, /*
939 Search a word YOMI from buffer.
940 Return list of (kanji hinshi freq dic_no serial).
941 */
942 (yomi))
943 {
944 Lisp_Object val;
945 struct wnn_jdata *wordinfo;
946 int i, count;
947 w_char wbuf[256];
948 unsigned char kanji_buf[256];
949 int kanji_len;
950 int snum;
951 unsigned char lb;
952 CHECK_STRING (yomi);
953 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
954 lb = lb_wnn_server_type[snum];
955 if (!wnnfns_buf[snum]) return Qnil;
956 m2w (XSTRING (yomi)->data, wbuf);
957 if (snum == WNNSERVER_C)
958 w2y (wbuf);
959 if ((count = jl_word_search_by_env (wnnfns_buf[snum],
960 wbuf, &wordinfo)) < 0)
961 return Qnil;
962 val = Qnil;
963 for (i = 0, wordinfo += count; i < count; i++)
964 {
965 wordinfo--;
966 w2m (wordinfo->kanji, kanji_buf, lb);
967 val = Fcons (Fcons (make_string (kanji_buf, strlen (kanji_buf)),
968 list4 (make_int (wordinfo->hinshi),
969 make_int (wordinfo->hindo),
970 make_int (wordinfo->dic_no),
971 make_int (wordinfo->serial))),
972 val);
973 }
974 return val;
975 }
976
977 DEFUN ("wnn-server-dict-save", Fwnn_dict_save, 0, 0, 0, /*
978 Save all dictionaries and frequency files.
979 */
980 ())
981 {
982 int snum;
983 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
984 if (!wnnfns_buf[snum]) return Qnil;
985 if (jl_dic_save_all (wnnfns_buf[snum]) < 0) return Qnil;
986 else return Qt;
987 }
988
989 DEFUN ("wnn-server-get-param", Fwnn_get_param, 0, 0, 0, /*
990 Returns (n nsho hindo len jiri flag jisho sbn dbn_len sbn_cnt
991 suuji kana eisuu kigou toji_kakko fuzokogo kaikakko)
992 */
993 ())
994 {
995 struct wnn_param param;
996 int snum;
997 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
998 if (!wnnfns_buf[snum]) return Qnil;
999 if (jl_param_get (wnnfns_buf[snum], &param) < 0) return Qnil;
1000 return Fcons (make_int (param.n),
1001 Fcons (make_int (param.nsho),
1002 Fcons (make_int (param.p1),
1003 Fcons (make_int (param.p2),
1004 Fcons (make_int (param.p3),
1005 Fcons (make_int (param.p4),
1006 Fcons (make_int (param.p5),
1007 Fcons (make_int (param.p6),
1008 Fcons (make_int (param.p7),
1009 Fcons (make_int (param.p8),
1010 Fcons (make_int (param.p9),
1011 Fcons (make_int (param.p10),
1012 Fcons (make_int (param.p11),
1013 Fcons (make_int (param.p12),
1014 Fcons (make_int (param.p13),
1015 Fcons (make_int (param.p14),
1016 Fcons (make_int (param.p15),Qnil)))))))))))))))));
1017 }
1018
1019 DEFUN ("wnn-server-set-param", Fwnn_set_param, 17, MANY, 0, /*
1020 Set parameters, n nsho hindo len jiri flag jisho sbn dbn_len sbn_cnt
1021 suuji kana eisuu kigou toji_kakko fuzokogo kaikakko
1022 */
1023 (int nargs, Lisp_Object *args))
1024 {
1025 int rc;
1026 struct wnn_param param;
1027 int snum;
1028 for (rc = 0; rc < 17; rc++) CHECK_INT (args[rc]);
1029 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
1030 if (!wnnfns_buf[snum]) return Qnil;
1031 param.n = XINT (args[0]);
1032 param.nsho = XINT (args[1]);
1033 param.p1 = XINT (args[2]);
1034 param.p2 = XINT (args[3]);
1035 param.p3 = XINT (args[4]);
1036 param.p4 = XINT (args[5]);
1037 param.p5 = XINT (args[6]);
1038 param.p6 = XINT (args[7]);
1039 param.p7 = XINT (args[8]);
1040 param.p8 = XINT (args[9]);
1041 param.p9 = XINT (args[10]);
1042 param.p10 = XINT (args[11]);
1043 param.p11 = XINT (args[12]);
1044 param.p12 = XINT (args[13]);
1045 param.p13 = XINT (args[14]);
1046 param.p14 = XINT (args[15]);
1047 param.p15 = XINT (args[16]);
1048
1049 rc = jl_param_set (wnnfns_buf[snum], &param);
1050 if (rc < 0) return Qnil;
1051 return Qt;
1052 }
1053
1054 DEFUN ("wnn-server-get-msg", Fwnn_get_msg, 0, 0, 0, /*
1055 Get message string from wnn_perror.
1056 */
1057 ())
1058 {
1059 char mbuf[256];
1060 char *msgp;
1061 int snum;
1062 unsigned char lb;
1063 char langname[32];
1064 /* CHECK_INT (errno);*/
1065 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
1066 lb = lb_wnn_server_type[snum];
1067 switch (snum)
1068 {
1069 case WNNSERVER_J:
1070 strcpy (langname, "ja_JP");
1071 break;
1072 case WNNSERVER_C:
1073 strcpy (langname, "zh_CN");
1074 break;
1075 /*
1076 case WNNSERVER_T:
1077 strcpy (langname, "zh_TW");
1078 break;
1079 */
1080 case WNNSERVER_K:
1081 strcpy (langname, "ko_KR");
1082 break;
1083 }
1084 if (!wnnfns_buf[snum]) return Qnil;
1085 /* msgp = msg_get (wnn_msg_cat, XINT (errno), 0, 0);*/
1086 msgp = wnn_perror_lang (langname);
1087 c2m (msgp, mbuf, lb);
1088 return make_string (mbuf, strlen (mbuf));
1089 }
1090
1091
1092 DEFUN ("wnn-server-fuzokugo-set", Fwnn_fuzokugo_set, 1, 1, 0, /*
1093 For Wnn.
1094 */
1095 (file))
1096 {
1097 int snum;
1098 CHECK_STRING (file);
1099 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
1100 if (!wnnfns_buf[snum]) return Qnil;
1101 if (jl_fuzokugo_set (wnnfns_buf[snum], XSTRING (file)->data) < 0)
1102 return Qnil;
1103 return Qt;
1104 }
1105
1106 DEFUN ("wnn-server-fuzokugo-get", Fwnn_fuzokugo_get, 0, 0, 0, /*
1107 For Wnn.
1108 */
1109 ())
1110 {
1111 char fname[256];
1112 int snum;
1113 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
1114 if (!wnnfns_buf[snum]) return Qnil;
1115 if (jl_fuzokugo_get (wnnfns_buf[snum], fname) < 0) return Qnil;
1116 return make_string (fname, strlen (fname));
1117 }
1118
1119
1120 DEFUN ("wnn-server-isconnect", Fwnn_isconnect, 0, 0, 0, /*
1121 For Wnn.
1122 */
1123 ())
1124 {
1125 int snum;
1126 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
1127 if (!wnnfns_buf[snum]) return Qnil;
1128 if (jl_isconnect (wnnfns_buf[snum])) return Qt;
1129 else return Qnil;
1130 }
1131
1132 DEFUN ("wnn-server-hinsi-dicts", Fwnn_hinsi_dicts, 1, 1, 0, /*
1133 For Wnn.
1134 */
1135 (hinsi))
1136 {
1137 int *area;
1138 int cnt;
1139 Lisp_Object val;
1140 int snum;
1141 CHECK_INT (hinsi);
1142 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
1143 if (!wnnfns_buf[snum]) return Qnil;
1144 if ((cnt = jl_hinsi_dicts (wnnfns_buf[snum], XINT (hinsi), &area)) < 0)
1145 return Qnil;
1146 val = Qnil;
1147 for (area += cnt; cnt > 0; cnt--)
1148 {
1149 area--;
1150 val = Fcons (make_int (*area), val);
1151 }
1152 return val;
1153 }
1154
1155 DEFUN ("wnn-server-hinsi-list", Fwnn_hinsi_list, 2, 2, 0, /*
1156 For Wnn.
1157 */
1158 (dicno, name))
1159 {
1160 int cnt;
1161 Lisp_Object val;
1162 w_char wbuf[256];
1163 w_char **area;
1164 unsigned char cbuf[512];
1165 int snum;
1166 unsigned char lb;
1167 CHECK_INT (dicno);
1168 CHECK_STRING (name);
1169 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
1170 lb = lb_wnn_server_type[snum];
1171 if (!wnnfns_buf[snum]) return Qnil;
1172 m2w (XSTRING (name)->data, wbuf);
1173 if ((cnt = jl_hinsi_list (wnnfns_buf[snum], XINT (dicno), wbuf, &area)) < 0)
1174 return Qnil;
1175 if (cnt == 0) return make_int (0);
1176 val = Qnil;
1177 for (area += cnt; cnt > 0; cnt--)
1178 {
1179 area--;
1180 w2m (*area, cbuf, lb);
1181 val = Fcons (make_string (cbuf, strlen (cbuf)), val);
1182 }
1183 return val;
1184 }
1185
1186 DEFUN ("wnn-server-hinsi-name", Fwnn_hinsi_name, 1, 1, 0, /*
1187 For Wnn.
1188 */
1189 (no))
1190 {
1191 unsigned char name[256];
1192 w_char *wname;
1193 int snum;
1194 unsigned char lb;
1195 CHECK_INT (no);
1196 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
1197 lb = lb_wnn_server_type[snum];
1198 if (!wnnfns_buf[snum]) return Qnil;
1199 if ((wname = jl_hinsi_name (wnnfns_buf[snum], XINT (no))) == 0) return Qnil;
1200 w2m (wname, name, lb);
1201 return make_string (name, strlen (name));
1202 }
1203 #ifdef WNN6
1204 DEFUN ("wnn-server-fisys-dict-add", Fwnn_fisys_dict_add, 3, MANY, 0, /*
1205 Add dictionary specified by FISYS-DICT-FILE-NAME, FISYS-FREQ-FILE-NAME,
1206 FISYS-FREQ-FILE-MODE.
1207 Specify password files of dictionary and frequency, PW1 and PW2, if needed.
1208 */
1209 (int nargs, Lisp_Object *args))
1210 {
1211 static int yes_or_no();
1212 static void puts2();
1213 struct gcpro gcpro1;
1214 int snum;
1215 CHECK_STRING (args[0]);
1216 CHECK_STRING (args[1]);
1217 if (args[3] != Qnil) CHECK_STRING (args[3]);
1218 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1219 if(!wnnfns_buf[snum]) return Qnil;
1220 GCPRO1 (*args);
1221 gcpro1.nvars = nargs;
1222 if(jl_fi_dic_add(wnnfns_buf[snum],
1223 XSTRING(args[0])->data,
1224 XSTRING(args[1])->data,
1225 WNN_FI_SYSTEM_DICT,
1226 WNN_DIC_RDONLY,
1227 (args[2] == Qnil) ? WNN_DIC_RDONLY : WNN_DIC_RW,
1228 0,
1229 (args[3] == Qnil) ? 0 : XSTRING(args[3])->data,
1230 yes_or_no,
1231 puts2 ) < 0) {
1232 UNGCPRO;
1233 return Qnil;
1234 }
1235 UNGCPRO;
1236 return Qt;
1237 }
1238
1239 DEFUN ("wnn-server-fiusr-dict-add", Fwnn_fiusr_dict_add, 4, MANY, 0, /*
1240 Add dictionary specified by FIUSR-DICT-FILE-NAME, FIUSR-FREQ-FILE-NAME,
1241 FIUSR-DICT-FILE-MODE, FIUSR-FREQ-FILE-MODE.
1242 Specify password files of dictionary and frequency, PW1 and PW2, if needed.
1243 */
1244 (int nargs, Lisp_Object *args))
1245 {
1246 static int yes_or_no();
1247 static void puts2();
1248 struct gcpro gcpro1;
1249 int snum;
1250 CHECK_STRING (args[0]);
1251 CHECK_STRING (args[1]);
1252 if (args[4] != Qnil) CHECK_STRING (args[4]);
1253 if (args[5] != Qnil) CHECK_STRING (args[5]);
1254 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1255 if(!wnnfns_buf[snum]) return Qnil;
1256 GCPRO1 (*args);
1257 gcpro1.nvars = nargs;
1258 if(jl_fi_dic_add(wnnfns_buf[snum],
1259 XSTRING(args[0])->data,
1260 XSTRING(args[1])->data,
1261 WNN_FI_USER_DICT,
1262 (args[2] == Qnil) ? WNN_DIC_RDONLY : WNN_DIC_RW,
1263 (args[3] == Qnil) ? WNN_DIC_RDONLY : WNN_DIC_RW,
1264 (args[4] == Qnil) ? 0 : XSTRING(args[4])->data,
1265 (args[5] == Qnil) ? 0 : XSTRING(args[5])->data,
1266 yes_or_no,
1267 puts2 ) < 0) {
1268 UNGCPRO;
1269 return Qnil;
1270 }
1271 UNGCPRO;
1272 return Qt;
1273 }
1274
1275 DEFUN ("wnn-server-notrans-dict-add", Fwnn_notrans_dict_add, 3, MANY, 0, /*
1276 Add dictionary specified by NOTRANS-DICT-FILE-NAME, PRIORITY, DICT-FILE-MODE.
1277 Specify password files of dictionary and frequency PW1 if needed.
1278 */
1279 (int nargs, Lisp_Object *args))
1280 {
1281 static int yes_or_no();
1282 static void puts2();
1283 struct gcpro gcpro1;
1284 int snum;
1285 int dic_no;
1286 struct wnn_env *cur_env;
1287 unsigned long vmask = 0;
1288 struct wnn_henkan_env henv;
1289 CHECK_STRING (args[0]);
1290 CHECK_INT (args[1]);
1291 if (args[3] != Qnil) CHECK_STRING (args[3]);
1292 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1293 if(!wnnfns_buf[snum]) return Qnil;
1294 GCPRO1 (*args);
1295 gcpro1.nvars = nargs;
1296 if(wnnfns_norm)
1297 cur_env = wnnfns_env_norm[snum];
1298 else
1299 cur_env = wnnfns_env_rev[snum];
1300 dic_no = js_get_autolearning_dic(cur_env, WNN_MUHENKAN_LEARNING);
1301 if (dic_no == WNN_NO_LEARNING) {
1302 if((dic_no = jl_dic_add(wnnfns_buf[snum],
1303 XSTRING(args[0])->data,
1304 0,
1305 wnnfns_norm ? WNN_DIC_ADD_NOR : WNN_DIC_ADD_REV,
1306 XINT(args[1]),
1307 WNN_DIC_RW, WNN_DIC_RW,
1308 (args[3] == Qnil) ? 0 : XSTRING(args[3])->data,
1309 0,
1310 yes_or_no,
1311 puts2)) < 0) {
1312 UNGCPRO;
1313 return Qnil;
1314 }
1315 js_set_autolearning_dic(cur_env, WNN_MUHENKAN_LEARNING, dic_no);
1316 }
1317 if(!js_is_loaded_temporary_dic(cur_env)) {
1318 if(js_temporary_dic_add(cur_env,
1319 wnnfns_norm ? WNN_DIC_ADD_NOR : WNN_DIC_ADD_REV) < 0) {
1320 UNGCPRO;
1321 return Qnil;
1322 }
1323 }
1324 vmask |= WNN_ENV_MUHENKAN_LEARN_MASK;
1325 henv.muhenkan_flag = (args[2] == Qnil) ? WNN_DIC_RDONLY : WNN_DIC_RW;
1326 if(jl_set_henkan_env(wnnfns_buf[snum],
1327 vmask,
1328 &henv) < 0) {
1329 UNGCPRO;
1330 return Qnil;
1331 }
1332 UNGCPRO;
1333 return Qt;
1334 }
1335
1336 DEFUN ("wnn-server-bmodify-dict-add", Fwnn_bmodify_dict_add, 3, MANY, 0, /*
1337 Add dictionary specified by BMODIFY-DICT-FILE-NAME, PRIORITY, DICT-FILE-MODE.
1338 Specify password files of dictionary and frequency PW1 if needed.
1339 */
1340 (int nargs, Lisp_Object *args))
1341 {
1342 static int yes_or_no();
1343 static void puts2();
1344 struct gcpro gcpro1;
1345 int snum;
1346 int dic_no;
1347 struct wnn_env *cur_env;
1348 unsigned long vmask = 0;
1349 struct wnn_henkan_env henv;
1350 CHECK_STRING (args[0]);
1351 CHECK_INT (args[1]);
1352 if (args[3] != Qnil) CHECK_STRING (args[3]);
1353 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1354 if(!wnnfns_buf[snum]) return Qnil;
1355 GCPRO1 (*args);
1356 gcpro1.nvars = nargs;
1357 if(wnnfns_norm)
1358 cur_env = wnnfns_env_norm[snum];
1359 else
1360 cur_env = wnnfns_env_rev[snum];
1361 dic_no = js_get_autolearning_dic(cur_env, WNN_BUNSETSUGIRI_LEARNING);
1362 if (dic_no == WNN_NO_LEARNING) {
1363 if((dic_no = jl_dic_add(wnnfns_buf[snum],
1364 XSTRING(args[0])->data,
1365 0,
1366 wnnfns_norm ? WNN_DIC_ADD_NOR : WNN_DIC_ADD_REV,
1367 XINT(args[1]),
1368 WNN_DIC_RW, WNN_DIC_RW,
1369 (args[3] == Qnil) ? 0 : XSTRING(args[3])->data,
1370 0,
1371 yes_or_no,
1372 puts2)) < 0) {
1373 UNGCPRO;
1374 return Qnil;
1375 }
1376 js_set_autolearning_dic(cur_env, WNN_BUNSETSUGIRI_LEARNING, dic_no);
1377 }
1378 if(!js_is_loaded_temporary_dic(cur_env)) {
1379 if(js_temporary_dic_add(cur_env,
1380 wnnfns_norm ? WNN_DIC_ADD_NOR : WNN_DIC_ADD_REV) < 0) {
1381 UNGCPRO;
1382 return Qnil;
1383 }
1384 }
1385 vmask |= WNN_ENV_BUNSETSUGIRI_LEARN_MASK;
1386 henv.bunsetsugiri_flag = (args[2] == Qnil) ? WNN_DIC_RDONLY : WNN_DIC_RW;
1387 if(jl_set_henkan_env(wnnfns_buf[snum],
1388 vmask,
1389 &henv) < 0) {
1390 UNGCPRO;
1391 return Qnil;
1392 }
1393 UNGCPRO;
1394 return Qt;
1395 }
1396
1397 DEFUN ("wnn-server-set-last-is-first", Fwnn_last_is_first, 1, 1, 0, /*
1398 For FI-Wnn.
1399 */
1400 (mode))
1401 {
1402 int snum;
1403 unsigned long vmask = 0;
1404 struct wnn_henkan_env henv;
1405 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1406 if(!wnnfns_buf[snum]) return Qnil;
1407 vmask |= WNN_ENV_LAST_IS_FIRST_MASK;
1408 henv.last_is_first_flag = (mode == Qnil) ? False : True;
1409 if(jl_set_henkan_env(wnnfns_buf[snum],
1410 vmask,
1411 &henv) < 0) return Qnil;
1412 return Qt;
1413 }
1414
1415 DEFUN ("wnn-server-set-complex-conv-mode", Fwnn_complex_conv, 1, 1, 0, /*
1416 For FI-Wnn.
1417 */
1418 (mode))
1419 {
1420 int snum;
1421 unsigned long vmask = 0;
1422 struct wnn_henkan_env henv;
1423 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1424 if(!wnnfns_buf[snum]) return Qnil;
1425 vmask |= WNN_ENV_COMPLEX_CONV_MASK;
1426 henv.complex_flag = (mode == Qnil) ? False : True;
1427 if(jl_set_henkan_env(wnnfns_buf[snum],
1428 vmask,
1429 &henv) < 0) return Qnil;
1430 return Qt;
1431 }
1432
1433 DEFUN ("wnn-server-set-okuri-learn-mode", Fwnn_okuri_learn, 1, 1, 0, /*
1434 For FI-Wnn.
1435 */
1436 (mode))
1437 {
1438 int snum;
1439 unsigned long vmask = 0;
1440 struct wnn_henkan_env henv;
1441 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1442 if(!wnnfns_buf[snum]) return Qnil;
1443 vmask |= WNN_ENV_OKURI_LEARN_MASK;
1444 henv.okuri_learn_flag = (mode == Qnil) ? False : True;
1445 if(jl_set_henkan_env(wnnfns_buf[snum],
1446 vmask,
1447 &henv) < 0) return Qnil;
1448 return Qt;
1449 }
1450
1451 DEFUN ("wnn-server-set-okuri-flag", Fwnn_okuri_flag, 1, 1, 0, /*
1452 For FI-Wnn.
1453 */
1454 (mode))
1455 {
1456 int snum;
1457 unsigned long vmask = 0;
1458 struct wnn_henkan_env henv;
1459 CHECK_INT (mode);
1460 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1461 if(!wnnfns_buf[snum]) return Qnil;
1462 if(mode != WNN_OKURI_REGULATION &&
1463 mode != WNN_OKURI_NO &&
1464 mode != WNN_OKURI_YES)
1465 return Qnil;
1466 else
1467 henv.okuri_flag = mode;
1468 vmask |= WNN_ENV_OKURI_MASK;
1469 if(jl_set_henkan_env(wnnfns_buf[snum],
1470 vmask,
1471 &henv) < 0) return Qnil;
1472 return Qt;
1473 }
1474
1475 DEFUN ("wnn-server-set-prefix-learn-mode", Fwnn_prefix_learn, 1, 1, 0, /*
1476 For FI-Wnn.
1477 */
1478 (mode))
1479 {
1480 int snum;
1481 unsigned long vmask = 0;
1482 struct wnn_henkan_env henv;
1483 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1484 if(!wnnfns_buf[snum]) return Qnil;
1485 vmask |= WNN_ENV_PREFIX_LEARN_MASK;
1486 henv.prefix_learn_flag = (mode == Qnil) ? False : True;
1487 if(jl_set_henkan_env(wnnfns_buf[snum],
1488 vmask,
1489 &henv) < 0) return Qnil;
1490 return Qt;
1491 }
1492
1493 DEFUN ("wnn-server-set-prefix-flag", Fwnn_prefix_flag, 1, 1, 0, /*
1494 For FI-Wnn.
1495 */
1496 (mode))
1497 {
1498 int snum;
1499 unsigned long vmask = 0;
1500 struct wnn_henkan_env henv;
1501 CHECK_INT (mode);
1502 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1503 if(!wnnfns_buf[snum]) return Qnil;
1504 if(mode != WNN_KANA_KOUHO && mode != WNN_KANJI_KOUHO)
1505 return Qnil;
1506 else
1507 henv.prefix_flag = mode;
1508 vmask |= WNN_ENV_PREFIX_MASK;
1509 if(jl_set_henkan_env(wnnfns_buf[snum],
1510 vmask,
1511 &henv) < 0) return Qnil;
1512 return Qt;
1513 }
1514
1515 DEFUN ("wnn-server-set-suffix-learn-mode", Fwnn_suffix_learn, 1, 1, 0, /*
1516 For FI-Wnn.
1517 */
1518 (mode))
1519 {
1520 int snum;
1521 unsigned long vmask = 0;
1522 struct wnn_henkan_env henv;
1523 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1524 if(!wnnfns_buf[snum]) return Qnil;
1525 vmask |= WNN_ENV_SUFFIX_LEARN_MASK;
1526 henv.suffix_learn_flag = (mode == Qnil) ? False : True;
1527 if(jl_set_henkan_env(wnnfns_buf[snum],
1528 vmask,
1529 &henv) < 0) return Qnil;
1530 return Qt;
1531 }
1532
1533 DEFUN ("wnn-server-set-common-learn-mode", Fwnn_common_learn, 1, 1, 0, /*
1534 For FI-Wnn.
1535 */
1536 (mode))
1537 {
1538 int snum;
1539 unsigned long vmask = 0;
1540 struct wnn_henkan_env henv;
1541 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1542 if(!wnnfns_buf[snum]) return Qnil;
1543 vmask |= WNN_ENV_COMMON_LAERN_MASK;
1544 henv.common_learn_flag = (mode == Qnil) ? False : True;
1545 if(jl_set_henkan_env(wnnfns_buf[snum],
1546 vmask,
1547 &henv) < 0) return Qnil;
1548 return Qt;
1549 }
1550
1551 DEFUN ("wnn-server-set-freq-func-mode", Fwnn_freq_func, 1, 1, 0, /*
1552 For FI-Wnn.
1553 */
1554 (mode))
1555 {
1556 int snum;
1557 unsigned long vmask = 0;
1558 struct wnn_henkan_env henv;
1559 CHECK_INT (mode);
1560 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1561 if(!wnnfns_buf[snum]) return Qnil;
1562 if(mode != 0 && mode != 1 && mode != 2 && mode != 3 && mode != 4)
1563 return Qnil;
1564 else
1565 henv.freq_func_flag = mode;
1566 vmask |= WNN_ENV_FREQ_FUNC_MASK;
1567 if(jl_set_henkan_env(wnnfns_buf[snum],
1568 vmask,
1569 &henv) < 0) return Qnil;
1570 return Qt;
1571 }
1572
1573 DEFUN ("wnn-server-set-numeric-mode", Fwnn_numeric, 1, 1, 0, /*
1574 For FI-Wnn.
1575 */
1576 (mode))
1577 {
1578 int snum;
1579 unsigned long vmask = 0;
1580 struct wnn_henkan_env henv;
1581 CHECK_INT (mode);
1582 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1583 if(!wnnfns_buf[snum]) return Qnil;
1584 if(mode != WNN_NUM_KANSUUJI &&
1585 mode != WNN_NUM_KANOLD &&
1586 mode != WNN_NUM_HANCAN &&
1587 mode != WNN_NUM_ZENCAN &&
1588 mode != WNN_NUM_HAN &&
1589 mode != WNN_NUM_ZEN &&
1590 mode != WNN_NUM_KAN)
1591 return Qnil;
1592 else
1593 henv.numeric_flag = mode;
1594 vmask |= WNN_ENV_NUMERIC_MASK;
1595 if(jl_set_henkan_env(wnnfns_buf[snum],
1596 vmask,
1597 &henv) < 0) return Qnil;
1598 return Qt;
1599 }
1600
1601 DEFUN ("wnn-server-set-alphabet-mode", Fwnn_alphabet, 1, 1, 0, /*
1602 For FI-Wnn.
1603 */
1604 (mode))
1605 {
1606 int snum;
1607 unsigned long vmask = 0;
1608 struct wnn_henkan_env henv;
1609 CHECK_INT (mode);
1610 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1611 if(!wnnfns_buf[snum]) return Qnil;
1612 if(mode != WNN_ALP_HAN && mode != WNN_ALP_ZEN)
1613 return Qnil;
1614 else
1615 henv.alphabet_flag = mode;
1616 vmask |= WNN_ENV_ALPHABET_MASK;
1617 if(jl_set_henkan_env(wnnfns_buf[snum],
1618 vmask,
1619 &henv) < 0) return Qnil;
1620 return Qt;
1621 }
1622
1623 DEFUN ("wnn-server-set-symbol-mode", Fwnn_symbol, 1, 1, 0, /*
1624 For FI-Wnn.
1625 */
1626 (mode))
1627 {
1628 int snum;
1629 unsigned long vmask = 0;
1630 struct wnn_henkan_env henv;
1631 CHECK_INT (mode);
1632 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1633 if(!wnnfns_buf[snum]) return Qnil;
1634 if(mode != WNN_KIG_HAN && mode != WNN_KIG_JIS && mode != WNN_KIG_ASC)
1635 return Qnil;
1636 else
1637 henv.symbol_flag = mode;
1638 vmask |= WNN_ENV_SYMBOL_MASK;
1639 if(jl_set_henkan_env(wnnfns_buf[snum],
1640 vmask,
1641 &henv) < 0) return Qnil;
1642 return Qt;
1643 }
1644
1645 DEFUN ("wnn-server-set-yuragi-mode", Fwnn_yuragi, 1, 1, 0, /*
1646 For FI-Wnn.
1647 */
1648 (mode))
1649 {
1650 int snum;
1651 unsigned long vmask = 0;
1652 struct wnn_henkan_env henv;
1653 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1654 if(!wnnfns_buf[snum]) return Qnil;
1655 vmask |= WNN_ENV_YURAGI_MASK;
1656 henv.yuragi_flag = (mode == Qnil) ? False : True;
1657 if(jl_set_henkan_env(wnnfns_buf[snum],
1658 vmask,
1659 &henv) < 0) return Qnil;
1660 return Qt;
1661 }
1662
1663 DEFUN ("wnn-reset-previous-info", Fwnn_reset_prev, 0, 0, 0, /*
1664 For FI-Wnn.
1665 */
1666 ())
1667 {
1668 int snum;
1669 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1670 if(!wnnfns_buf[snum]) return Qnil;
1671 if(jl_reset_prev_bun(wnnfns_buf[snum]) < 0) return Qnil;
1672 return Qt;
1673 }
1674 #endif /* Wnn6 */
1675
1676 DEFUN ("wnn-server-version", Fwnn_version, 0, 0, 0, /*
1677 Returns Wnn server version ID.
1678 */
1679 ())
1680 {
1681 int snum;
1682 int serv;
1683 int libv;
1684 struct wnn_env *cur_env;
1685 if ((snum = check_wnn_server_type()) == -1) return Qnil;
1686 if(!wnnfns_buf[snum]) return Qnil;
1687 if(wnnfns_norm)
1688 cur_env = wnnfns_env_norm[snum];
1689 else
1690 cur_env = wnnfns_env_rev[snum];
1691 if(js_version (cur_env->js_id,&serv,&libv) < 0) return Qnil;
1692 return make_int (serv);
1693 }
1694
1695 DEFUN ("wnn-server-hinsi-number", Fwnn_hinsi_number, 1, 1, 0, /*
1696 For Wnn.
1697 */
1698 (name))
1699 {
1700 w_char w_buf[256];
1701 int no;
1702 int snum;
1703 CHECK_STRING (name);
1704 if ((snum = check_wnn_server_type ()) == -1) return Qnil;
1705 if (!wnnfns_buf[snum]) return Qnil;
1706 m2w (XSTRING (name)->data, w_buf);
1707 if ((no = jl_hinsi_number (wnnfns_buf[snum], w_buf)) < 0) return Qnil;
1708 return make_int (no);
1709 }
1710
1711 void
1712 syms_of_mule_wnn (void)
1713 {
1714 DEFSUBR (Fwnn_open);
1715 DEFSUBR (Fwnn_close);
1716 DEFSUBR (Fwnn_dict_add);
1717 DEFSUBR (Fwnn_dict_delete);
1718 DEFSUBR (Fwnn_dict_list);
1719 DEFSUBR (Fwnn_dict_comment);
1720 DEFSUBR (Fwnn_set_rev);
1721 DEFSUBR (Fwnn_begin_henkan);
1722 DEFSUBR (Fwnn_zenkouho);
1723 DEFSUBR (Fwnn_get_zenkouho);
1724 DEFSUBR (Fwnn_zenkouho_bun);
1725 DEFSUBR (Fwnn_zenkouho_suu);
1726 DEFSUBR (Fwnn_dai_top);
1727 DEFSUBR (Fwnn_dai_end);
1728 DEFSUBR (Fwnn_kakutei);
1729 DEFSUBR (Fwnn_bunsetu_henkou);
1730 DEFSUBR (Fwnn_inspect);
1731 DEFSUBR (Fwnn_quit_henkan);
1732 DEFSUBR (Fwnn_bunsetu_kanji);
1733 DEFSUBR (Fwnn_bunsetu_yomi);
1734 DEFSUBR (Fwnn_bunsetu_suu);
1735 DEFSUBR (Fwnn_hindo_update);
1736 DEFSUBR (Fwnn_word_toroku);
1737 DEFSUBR (Fwnn_word_sakujo);
1738 DEFSUBR (Fwnn_word_use);
1739 DEFSUBR (Fwnn_word_info);
1740 DEFSUBR (Fwnn_hindo_set);
1741 DEFSUBR (Fwnn_dict_search);
1742 DEFSUBR (Fwnn_dict_save);
1743 DEFSUBR (Fwnn_get_param);
1744 DEFSUBR (Fwnn_set_param);
1745 DEFSUBR (Fwnn_get_msg);
1746 DEFSUBR (Fwnn_fuzokugo_set);
1747 DEFSUBR (Fwnn_fuzokugo_get);
1748 DEFSUBR (Fwnn_isconnect);
1749 DEFSUBR (Fwnn_hinsi_dicts);
1750 DEFSUBR (Fwnn_hinsi_list);
1751 DEFSUBR (Fwnn_hinsi_name);
1752 DEFSUBR (Fwnn_hinsi_number);
1753 #ifdef WNN6
1754 DEFSUBR (Fwnn_fisys_dict_add);
1755 DEFSUBR (Fwnn_fiusr_dict_add);
1756 DEFSUBR (Fwnn_notrans_dict_add);
1757 DEFSUBR (Fwnn_bmodify_dict_add);
1758 DEFSUBR (Fwnn_last_is_first);
1759 DEFSUBR (Fwnn_complex_conv);
1760 DEFSUBR (Fwnn_okuri_learn);
1761 DEFSUBR (Fwnn_okuri_flag);
1762 DEFSUBR (Fwnn_prefix_learn);
1763 DEFSUBR (Fwnn_prefix_flag);
1764 DEFSUBR (Fwnn_suffix_learn);
1765 DEFSUBR (Fwnn_common_learn);
1766 DEFSUBR (Fwnn_freq_func);
1767 DEFSUBR (Fwnn_numeric);
1768 DEFSUBR (Fwnn_alphabet);
1769 DEFSUBR (Fwnn_symbol);
1770 DEFSUBR (Fwnn_yuragi);
1771 DEFSUBR (Fwnn_reset_prev);
1772 #endif /* Wnn6 */
1773 DEFSUBR (Fwnn_version);
1774
1775 defsymbol (&Qjserver, "jserver");
1776 defsymbol (&Qcserver, "cserver");
1777 /* defsymbol (&Qtserver, "tserver"); */
1778 defsymbol (&Qkserver, "kserver");
1779
1780 defsymbol (&Qwnn_no_uniq, "wnn-no-uniq");
1781 defsymbol (&Qwnn_uniq, "wnn-uniq");
1782 defsymbol (&Qwnn_uniq_kanji, "wnn-uniq-kanji");
1783 }
1784
1785 void
1786 vars_of_mule_wnn (void)
1787 {
1788 int i;
1789
1790 DEFVAR_INT ("lb-sisheng", &lb_sisheng /*
1791 Leading character for Sisheng.
1792 */ );
1793 DEFVAR_LISP ("wnn-server-type", &Vwnn_server_type /*
1794 *jserver, cserver ..
1795 */ );
1796 DEFVAR_LISP ("cwnn-zhuyin", &Vcwnn_zhuyin /*
1797 *pinyin or zhuyin
1798 */ );
1799 DEFVAR_LISP ("wnnenv-sticky", &Vwnnenv_sticky /*
1800 *If non-nil, make environment sticky
1801 */ );
1802 DEFVAR_LISP ("wnn-uniq-level", &Vwnn_uniq_level /*
1803 *Uniq level
1804 */ );
1805
1806 Vwnn_server_type = Qjserver;
1807 Vcwnn_zhuyin = Qnil;
1808 Vwnnenv_sticky = Qnil;
1809
1810 Vwnn_uniq_level = Qwnn_uniq;
1811
1812 for (i = 0; i < NSERVER; i++)
1813 {
1814 wnnfns_buf[i] = (struct wnn_buf *) 0;
1815 wnnfns_env_norm[i] = (struct wnn_env *) 0;
1816 wnnfns_env_rev[i] = (struct wnn_env *) 0;
1817 }
1818 }
1819
1820 void
1821 w2m (w_char *wp, unsigned char *mp, unsigned char lb)
1822 {
1823 w_char wc;
1824 w_char pzy[10];
1825 int i, len;
1826
1827 while (wc = *wp++)
1828 {
1829 switch (wc & 0x8080)
1830 {
1831 case 0x80:
1832 if (Vwnn_server_type == Qcserver)
1833 {
1834 len = cwnn_yincod_pzy (pzy, wc,
1835 (Vcwnn_zhuyin == Qnil)
1836 ? CWNN_PINYIN
1837 : CWNN_ZHUYIN);
1838 for (i = 0; i < len; i++)
1839 {
1840 if (pzy[i] & 0x80)
1841 {
1842 *mp++ = LEADING_BYTE_PRV11;
1843 *mp++ = lb_sisheng;
1844 }
1845 *mp++ = pzy[i];
1846 }
1847 }
1848 else
1849 {
1850 *mp++ = LEADING_BYTE_KANA;
1851 *mp++ = (wc & 0xff);
1852 }
1853 break;
1854 case 0x8080:
1855 *mp++ = lb;
1856 *mp++ = (wc & 0xff00) >> 8;
1857 *mp++ = wc & 0x00ff;
1858 break;
1859 case 0x8000:
1860 if (lb == LEADING_BYTE_JP)
1861 *mp++ = LEADING_BYTE_JP2;
1862 else if (lb == LEADING_BYTE_BIG5_1)
1863 *mp++ = LEADING_BYTE_BIG5_2;
1864 else
1865 *mp++ = lb;
1866 *mp++ = (wc & 0xff00) >> 8;
1867 *mp++ = wc & 0x00ff | 0x80;
1868 break;
1869 default:
1870 *mp++ = wc & 0x00ff;
1871 break;
1872 }
1873 }
1874 *mp = 0;
1875 }
1876
1877 void
1878 m2w (unsigned char *mp, w_char *wp)
1879 {
1880 unsigned int ch;
1881
1882 while (ch = *mp++)
1883 {
1884 if (BUFBYTE_ASCII_P (ch))
1885 {
1886 *wp++ = ch;
1887 }
1888 else if (BUFBYTE_LEADING_BYTE_P (ch))
1889 {
1890 switch (ch)
1891 {
1892 case LEADING_BYTE_KANA:
1893 *wp++ = *mp++; break;
1894 case LEADING_BYTE_ROMAN:
1895 *wp++ = *mp++ & 0x7F; break;
1896 case LEADING_BYTE_JPOLD:
1897 case LEADING_BYTE_CN:
1898 case LEADING_BYTE_JP:
1899 case LEADING_BYTE_KR:
1900 /* case LEADING_BYTE_TW: */
1901 ch = *mp++;
1902 *wp++ = (ch << 8) | *mp++;
1903 break;
1904 case LEADING_BYTE_JP2:
1905 ch = *mp++;
1906 *wp++ = (ch << 8) | (*mp++ & 0x7f);
1907 break;
1908 case LEADING_BYTE_PRV11:
1909 ch = *mp++;
1910 if (ch == lb_sisheng)
1911 *wp++ = 0x8e80 | *mp++;
1912 else
1913 mp++;
1914 break;
1915 default: /* ignore this character */
1916 mp += mule_charset_bytes[ch] - 1;
1917 }
1918 }
1919 }
1920 *wp = 0;
1921 }
1922
1923 void
1924 _xp (int x)
1925 {
1926 printf ("%x\n", x); fflush (stdout);
1927 }
1928
1929 void
1930 w2y (w_char *w)
1931 {
1932 unsigned long pbuf[5000], ybuf[5000];
1933 unsigned long *pin;
1934 w_char *y;
1935 int len;
1936
1937 pin = pbuf;
1938 y = w;
1939 while (1)
1940 {
1941 if (*w == 0)
1942 {*pin =0; break;}
1943 else *pin = *w;
1944 w++; pin++;
1945 }
1946 len = cwnn_pzy_yincod (ybuf, pbuf,
1947 (Vcwnn_zhuyin == Qnil) ? CWNN_PINYIN : CWNN_ZHUYIN);
1948 if (len <= 0)
1949 return;
1950
1951 pin = ybuf;
1952 while (1)
1953 {
1954 if (*pin == 0 || len == 0)
1955 {*y = 0;break;}
1956 *y = *pin;
1957 y++; pin++; len--;
1958 }
1959 }
1960
1961 void
1962 c2m (unsigned char *cp, unsigned char *mp, unsigned char lb)
1963 {
1964 unsigned char ch;
1965 while (ch = *cp)
1966 {
1967 if (ch & 0x80)
1968 {
1969 *mp++ = lb;
1970 *mp++ = *cp++;
1971 }
1972 *mp++ = *cp++;
1973 }
1974 *mp = 0;
1975 }
1976
1977 int
1978 dai_end (int no, int server)
1979 {
1980 for (no++; no < jl_bun_suu (wnnfns_buf[server])
1981 && !jl_dai_top (wnnfns_buf[server], no); no++);
1982 return (no);
1983 }
1984
1985 static int
1986 yes_or_no (unsigned char *s)
1987 {
1988 extern Lisp_Object Fy_or_n_p ();
1989 unsigned char mbuf[512];
1990 unsigned char lb;
1991 int len;
1992 int snum;
1993 if ((snum = check_wnn_server_type ()) == -1) return 0;
1994 lb = lb_wnn_server_type[snum];
1995 /* if no message found, create file without query */
1996 /* if (wnn_msg_cat->msg_bd == 0) return 1;*/
1997 if (*s == 0) return 1;
1998 c2m (s, mbuf, lb);
1999 /* truncate "(Y/N)" */
2000 for (len = 0; (mbuf[len]) && (len < 512); len++);
2001 for (; (mbuf[len] != '(') && (len > 0); len--);
2002 if (Fy_or_n_p (make_string (mbuf, len)) == Qnil) return 0;
2003 else return (1);
2004 }
2005
2006 static void
2007 puts2 (char *s)
2008 {
2009 Lisp_Object args[1];
2010 char mbuf[512];
2011 unsigned char lb;
2012 extern Lisp_Object Fmessage ();
2013 int snum;
2014 if ((snum = check_wnn_server_type ()) == -1) return;
2015 lb = lb_wnn_server_type[snum];
2016 c2m (s, mbuf, lb);
2017 args[0] = make_string (mbuf, strlen (mbuf));
2018 Fmessage (1, args);
2019 }
2020
2021 int
2022 check_wnn_server_type (void)
2023 {
2024 if (Vwnn_server_type == Qjserver)
2025 {
2026 return WNNSERVER_J;
2027 }
2028 else if (Vwnn_server_type == Qcserver)
2029 {
2030 return WNNSERVER_C;
2031 }
2032 /* else if (Vwnn_server_type == Qtserver)
2033 {
2034 return WNNSERVER_T;
2035 } */
2036 else if (Vwnn_server_type == Qkserver)
2037 {
2038 return WNNSERVER_K;
2039 }
2040 else return -1;
2041 }