1 /*
2 * $Id: inspect.c,v 1.5 2002/03/30 01:45:41 hiroo Exp $
3 */
4
5 /*
6 * FreeWnn is a network-extensible Kana-to-Kanji conversion system.
7 * This file is part of FreeWnn.
8 *
9 * Copyright Kyoto University Research Institute for Mathematical Sciences
10 * 1987, 1988, 1989, 1990, 1991, 1992
11 * Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 1999
12 * Copyright ASTEC, Inc. 1987, 1988, 1989, 1990, 1991, 1992
13 * Copyright FreeWnn Project 1999, 2000, 2002
14 *
15 * Maintainer: FreeWnn Project <freewnn@tomo.gr.jp>
16 *
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation; either version 2 of the License, or
20 * (at your option) any later version.
21 *
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
26 *
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30 */
31 #ifdef HAVE_CONFIG_H
32 # include <config.h>
33 #endif
34
35 #include <stdio.h>
36 #if STDC_HEADERS
37 # include <string.h>
38 #elif HAVE_STRINGS_H
39 # include <strings.h>
40 #endif /* STDC_HEADERS */
41
42 #include "jllib.h"
43 #include "commonhd.h"
44 #include "sdefine.h"
45 #include "sheader.h"
46 #include "wnn_config.h"
47 #include "buffer.h"
48
49 int
inspect(bun_no)50 inspect (bun_no)
51 int bun_no;
52 {
53 char buf[1024];
54 char *c = buf;
55
56 if (make_string_for_ke (bun_no, buf, sizeof (buf)) == -1)
57 {
58 print_msg_getc ("Error in inspect");
59 return (0);
60 }
61 select_line_element (&c, 1, 0, "", 0, 0, main_table[9]);
62 return (1);
63 }
64
65 static int next_flag;
66 #define I_NEXT 1
67 #define I_PREV 2
68 #define I_CUR 3
69
70 int
inspect_kouho()71 inspect_kouho ()
72 {
73 push_cursor ();
74 next_flag = I_CUR;
75 while (next_flag)
76 {
77 if (next_flag == I_NEXT || next_flag == I_PREV)
78 {
79 if (jl_zenkouho_bun (bun_data_) != cur_bnst_ || jl_zenkouho_daip (bun_data_) != WNN_SHO)
80 {
81 jl_zenkouho (bun_data_, cur_bnst_, WNN_USE_ZENGO, WNN_UNIQ);
82 }
83 if (next_flag == I_NEXT)
84 {
85 jl_next (bun_data_);
86 }
87 else
88 {
89 jl_previous (bun_data_);
90 }
91 make_kanji_buffer (cur_bnst_);
92 c_b->t_m_start = bunsetsuend[cur_bnst_];
93 c_b->t_b_st = bunsetsu[dai_top (bun_data_, cur_bnst_)];
94 c_b->t_b_end = bunsetsuend[dai_end (bun_data_, cur_bnst_) - 1];
95 }
96 next_flag = 0;
97 inspect (cur_bnst_);
98 }
99 pop_cursor ();
100 t_print_l ();
101 return (0);
102 }
103
104 /*
105 * Very Dirty, but we permit only this inspect function to manipulate
106 * directly the contents of bun_data_.
107 */
108
109 static int Bun_no;
110
111 int
make_string_for_ke(bun_no,buf,buf_size)112 make_string_for_ke (bun_no, buf, buf_size)
113 int bun_no;
114 char *buf;
115 int buf_size;
116 {
117 struct wnn_jl_bun *bun;
118 w_char buf1[1024];
119 w_char save_c;
120 char tmp[WNN_HINSI_NAME_LEN * 2];
121
122 Bun_no = bun_no;
123 bun = bun_data_->bun[bun_no];
124 jl_get_kanji (bun_data_, bun_no, bun_no + 1, buf1);
125 if (print_out_func)
126 (*print_out_func) (buf1, buf1, Strlen (buf1));
127 wnn_delete_w_ss2 (buf1, Strlen (buf1));
128 sStrcpy (buf, buf1);
129 strcat (buf, " ");
130 jl_get_yomi (bun_data_, bun_no, bun_no + 1, buf1);
131 if (print_out_func)
132 (*print_out_func) (buf1, buf1, Strlen (buf1));
133 wnn_delete_w_ss2 (buf1, Strlen (buf1));
134 save_c = *(buf1 + bun->jirilen);
135 *(buf1 + bun->jirilen) = 0;
136 sStrcpy (buf + strlen (buf), buf1);
137 *(buf1 + bun->jirilen) = save_c;
138 strcat (buf, "-");
139 sStrcpy (buf + strlen (buf), buf1 + bun->jirilen);
140
141 set_escape_code (buf);
142
143 strcat (buf, " (");
144 if (bun->dic_no >= 0)
145 {
146 update_dic_list (bun_data_);
147 dic_nickname (bun->dic_no, buf + strlen (buf));
148 sStrcpy (tmp, jl_hinsi_name (bun_data_, bun->hinsi));
149 sprintf (buf + strlen (buf), ":%d %s", bun->entry, tmp);
150 if (bun->hindo != 0x7f)
151 {
152 sprintf (buf + strlen (buf), MSG_GET (16), bun->ima ? '*' : ' ', bun->hindo);
153 }
154 else
155 {
156 sprintf (buf + strlen (buf), " ---------");
157 } /* Means This entry is not used.
158 This must not appear in ordinary use! */
159
160 }
161 else
162 {
163 sStrcpy (tmp, jl_hinsi_name (bun_data_, bun->hinsi));
164 sprintf (buf + strlen (buf), "GIJI BUNSETU:%s", tmp);
165 }
166 strcat (buf, ") ");
167 sprintf (buf + strlen (buf), MSG_GET (17), bun->hyoka, bun->kangovect);
168
169 if (bun->dai_top)
170 {
171 if (bun->daihyoka != -1)
172 {
173 sprintf (buf + strlen (buf), "(%s:%d) ", MSG_GET (18), bun->daihyoka);
174 }
175 else
176 {
177 sprintf (buf + strlen (buf), "(%s:---) ", MSG_GET (18));
178 }
179 }
180
181 return (0);
182 }
183
184 static void sakujo_kouho1 ();
185
186 int
sakujo_kouho()187 sakujo_kouho ()
188 {
189 push_cursor ();
190 sakujo_kouho1 (cur_bnst_);
191 pop_cursor ();
192 t_print_l ();
193 return (0);
194 }
195
196 static void
sakujo_kouho1(bun_no)197 sakujo_kouho1 (bun_no)
198 int bun_no;
199 {
200 w_char w_buf[512];
201 char buf[512];
202 int kanji_len = jl_kanji_len (bun_data_, bun_no, bun_no + 1) - jl_fuzoku_len (bun_data_, bun_no);
203
204 jl_get_kanji (bun_data_, bun_no, bun_no + 1, w_buf);
205 w_buf[kanji_len] = 0;
206 sStrcpy (buf, w_buf);
207 strcat (buf, MSG_GET (19));
208 /*
209 strcat(buf," �ɤ�:");
210 */
211 jl_get_yomi (bun_data_, bun_no, bun_no + 1, w_buf);
212 w_buf[jl_jiri_len (bun_data_, bun_no)] = 0;
213 sStrcpy (buf + strlen (buf), w_buf);
214 set_escape_code (buf);
215 strcat (buf, " ");
216 sprintf (buf + strlen (buf), MSG_GET (20));
217 /*
218 sprintf(buf + strlen(buf), "�������ޤ���?(Y/N)");
219 */
220 if (yes_or_no (buf) == 1)
221 {
222 if (jl_word_delete (bun_data_, bun_data_->bun[bun_no]->dic_no, bun_data_->bun[bun_no]->entry) == -1)
223 {
224 errorkeyin ();
225 return;
226 }
227 }
228 }
229
230 int
inspectdel()231 inspectdel ()
232 {
233 struct wnn_jl_bun *bun = bun_data_->bun[Bun_no];
234 int type;
235 w_char buf1[1024];
236 char buf[512];
237 int kanji_len = jl_kanji_len (bun_data_, Bun_no, Bun_no + 1) - jl_fuzoku_len (bun_data_, Bun_no);
238
239 type = dicinfo[find_dic_by_no (bun->dic_no)].type;
240 if (type != WNN_UD_DICT && type != WNN_REV_DICT && type != BWNN_REV_DICT && type != CWNN_REV_DICT)
241 {
242 print_msg_getc (MSG_GET (21));
243 /*
244 print_msg_getc("��������μ���Υ���ȥ�Ϻ������ޤ���(ǡ��?)");
245 */
246 return (0);
247 }
248 if (dicinfo[find_dic_by_no (bun->dic_no)].rw == WNN_DIC_RDONLY)
249 {
250 print_msg_getc (MSG_GET (22));
251 /*
252 print_msg_getc("��ɥ����μ���Υ���ȥ�Ϻ������ޤ���(ǡ��?)");
253 */
254 return (0);
255 }
256
257 jl_get_kanji (bun_data_, Bun_no, Bun_no + 1, buf1);
258 buf1[kanji_len] = 0;
259
260 strcpy (buf, MSG_GET (23));
261 /*
262 strcpy(buf, "��");
263 */
264 sStrcpy (buf + strlen (buf), buf1);
265 sprintf (buf + strlen (buf), MSG_GET (24));
266 /*
267 sprintf(buf + strlen(buf), "�פ������ޤ���(Y/N)");
268 */
269 set_escape_code (buf);
270 if (yes_or_no (buf) == 1)
271 {
272 if (jl_word_delete (bun_data_, bun->dic_no, bun->entry) == -1)
273 {
274 errorkeyin ();
275 return (0);
276 }
277 return (1);
278 }
279 return (0);
280 }
281
282 int
inspectuse()283 inspectuse ()
284 {
285 struct wnn_jl_bun *bun = bun_data_->bun[Bun_no];
286 w_char buf1[1024];
287 char buf[512];
288 int kanji_len = jl_kanji_len (bun_data_, Bun_no, Bun_no + 1) - jl_fuzoku_len (bun_data_, Bun_no);
289
290 if (dicinfo[find_dic_by_no (bun->dic_no)].hindo_rw == WNN_DIC_RDONLY)
291 {
292 print_msg_getc (MSG_GET (25));
293 /*
294 print_msg_getc("��ɥ��������٤��ѹ�����ޤ���(ǡ��?)");
295 */
296 return (0);
297 }
298 strcpy (buf, MSG_GET (23));
299 /*
300 strcpy(buf, "��");
301 */
302 jl_get_kanji (bun_data_, Bun_no, Bun_no + 1, buf1);
303 buf1[kanji_len] = 0;
304 sStrcpy (buf + strlen (buf), buf1);
305 set_escape_code (buf);
306 sprintf (buf + strlen (buf), MSG_GET (26));
307 /*
308 sprintf(buf + strlen(buf), "�פλ��Ѥ���ߤ��ޤ���(Y/N)");
309 */
310 if (yes_or_no (buf) == 1)
311 {
312 if (jl_word_use (bun_data_, bun->dic_no, bun->entry) == -1)
313 {
314 errorkeyin ();
315 return (0);
316 }
317 return (1);
318 }
319 return (0);
320 }
321
322 int
next_inspect()323 next_inspect ()
324 {
325 next_flag = I_NEXT;
326 return (1);
327 }
328
329 int
previous_inspect()330 previous_inspect ()
331 {
332 next_flag = I_PREV;
333 return (1);
334 }
335