1 /*
2 * $Id: printf.c,v 1.2 2001/06/14 18:16:16 ura 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 1991, 1992 by Massachusetts Institute of Technology
14 *
15 * Author: OMRON SOFTWARE Co., Ltd. <freewnn@rd.kyoto.omronsoft.co.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, or (at your option)
20 * 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 GNU Emacs; see the file COPYING. If not, write to the
29 * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
30 *
31 * Commentary:
32 *
33 * Change log:
34 *
35 * Last modified date: 8,Feb.1999
36 *
37 * Code:
38 *
39 */
40 /* Version 4.0
41 xwnmo
42 */
43 #include <stdio.h>
44 #include "commonhd.h"
45 #include "sdefine.h"
46 #ifdef XJUTIL
47 #include "xjutil.h"
48 #include "sxheader.h"
49 #include "xext.h"
50 #else /* XJUTIL */
51 #include "xim.h"
52 #include "sheader.h"
53 #include "ext.h"
54 #endif /* XJUTIL */
55 #include "jllib.h"
56
57 #ifdef XJUTIL
58 extern int cursor_colum;
59 static int t_byte_first = 0;
60 w_char work_wc;
61 #else /* XJUTIL */
62 #define t_byte_first (c_c->two_byte_first)
63 #define work_wc (c_c->wc)
64 #endif /* XJUTIL */
65
66 #define W_BUFLEN 32
67 static w_char w_buffer[W_BUFLEN];
68 static int w_maxbuf = 0;
69 static char buf[256];
70 #ifdef XJUTIL
71 static int tmp_buf[32];
72 #endif /* XJUTIL */
73
74 int
char_q_len(x)75 char_q_len (x)
76 w_char x;
77 {
78 return ((*char_q_len_func) (x));
79 }
80
81 void
put_char(x)82 put_char (x)
83 unsigned char x;
84 {
85 if ((x & 0x80) != 0)
86 {
87 if (t_byte_first == 1)
88 {
89 work_wc += x;
90 JWMflushw_buf (&work_wc, 1);
91 t_byte_first = 0;
92 }
93 else
94 {
95 t_byte_first = 1;
96 work_wc = x * 0x100;
97 }
98 }
99 else
100 {
101 work_wc = x;
102 t_byte_first = 0;
103 JWMflushw_buf (&work_wc, 1);
104 }
105 }
106
107 void
flushw_buf()108 flushw_buf ()
109 {
110 JWMflushw_buf (w_buffer, w_maxbuf);
111 w_maxbuf = 0;
112 }
113
114 int
w_putchar(w)115 w_putchar (w)
116 w_char w;
117 {
118 w_char wch = w;
119 w_char tmp_wch[10];
120 int len, i, c_len = 0;
121 int ret_col = 0;
122
123 delete_w_ss2 (&wch, 1);
124 if (ESCAPE_CHAR (wch))
125 {
126 ret_col = char_q_len (wch);
127 w_buffer[w_maxbuf++] = (w_char) ('^');
128 if (wch == 0x7f)
129 w_buffer[w_maxbuf++] = (w_char) ('?');
130 else
131 w_buffer[w_maxbuf++] = (w_char) (wch + 'A' - 1);
132 }
133 else
134 {
135 if (print_out_func)
136 {
137 len = (*print_out_func) (tmp_wch, &wch, 1);
138 delete_w_ss2 (tmp_wch, len);
139 for (i = 0; i < len; i++)
140 {
141 w_buffer[w_maxbuf++] = tmp_wch[i];
142 c_len = char_q_len (tmp_wch[i]);
143 ret_col += c_len;
144 }
145 }
146 else
147 {
148 ret_col = char_q_len (wch);
149 w_buffer[w_maxbuf++] = wch;
150 }
151 }
152 cursor_colum += ret_col;
153 if (w_maxbuf >= W_BUFLEN - 2)
154 {
155 flushw_buf ();
156 }
157 return (ret_col);
158 }
159
160 void
put_char1(c)161 put_char1 (c)
162 int c;
163 {
164 put_char ((unsigned char) c);
165 cursor_colum += 1;
166 }
167
168 void
putchar_norm(c)169 putchar_norm (c)
170 char c;
171 {
172 push_hrus ();
173 put_char1 (c);
174 pop_hrus ();
175 }
176
177 void
print_msg_getc(format,arg1,arg2,arg3)178 print_msg_getc (format, arg1, arg2, arg3)
179 register char *format;
180 char *arg1, *arg2, *arg3;
181 {
182 int ret;
183
184 sprintf (buf, format, arg1, arg2, arg3);
185 init_yes_or_no ((unsigned char *) buf, YesMessage);
186 for (;;)
187 {
188 #ifdef XJUTIL
189 ret = xw_read (tmp_buf);
190 if (ret != -1 && cur_root->yes_no->map)
191 break;
192 #else /* XJUTIL */
193 ret = get_yes_no_event ();
194 if (ret && cur_p->yes_no->map)
195 break;
196 xim->sel_ret = -1;
197 #endif /* XJUTIL */
198 }
199 end_yes_or_no ();
200 return;
201 }
202
203 #ifdef XJUTIL
204 #define CUR_LANG xjutil->lang
205 #else
206 #define CUR_LANG cur_lang->lang
207 #endif
208 extern char *wnn_perror_lang ();
209 void
errorkeyin()210 errorkeyin ()
211 {
212 print_msg_getc ("%s", wnn_perror_lang (CUR_LANG), NULL, NULL);
213 }
214
215 #undef CUR_LANG
216
217 void
print_out7(format,x1,x2,x3,x4,x5,x6,x7)218 print_out7 (format, x1, x2, x3, x4, x5, x6, x7)
219 char *format;
220 char *x1, *x2, *x3, *x4, *x5, *x6, *x7;
221 {
222 extern char *prgname;
223 extern int fflush ();
224
225 fprintf (stderr, "%s : ", prgname);
226 fprintf (stderr, format, x1, x2, x3, x4, x5, x6, x7);
227 fprintf (stderr, "\r\n");
228 fflush (stderr);
229 }
230
231 void
print_out3(format,x1,x2,x3)232 print_out3 (format, x1, x2, x3)
233 char *format;
234 char *x1, *x2, *x3;
235 {
236 extern char *prgname;
237 extern int fflush ();
238
239 fprintf (stderr, "%s : ", prgname);
240 fprintf (stderr, format, x1, x2, x3);
241 fprintf (stderr, "\r\n");
242 fflush (stderr);
243 }
244
245 void
print_out2(format,x1,x2)246 print_out2 (format, x1, x2)
247 char *format;
248 char *x1, *x2;
249 {
250 extern char *prgname;
251 extern int fflush ();
252
253 fprintf (stderr, "%s : ", prgname);
254 fprintf (stderr, format, x1, x2);
255 fprintf (stderr, "\r\n");
256 fflush (stderr);
257 }
258
259 void
print_out1(format,x1)260 print_out1 (format, x1)
261 char *format;
262 char *x1;
263 {
264 extern char *prgname;
265 extern int fflush ();
266
267 fprintf (stderr, "%s : ", prgname);
268 fprintf (stderr, format, x1);
269 fprintf (stderr, "\r\n");
270 fflush (stderr);
271 }
272
273 void
print_out(format)274 print_out (format)
275 char *format;
276 {
277 extern char *prgname;
278 extern int fflush ();
279
280 fprintf (stderr, "%s : ", prgname);
281 fprintf (stderr, format);
282 fprintf (stderr, "\r\n");
283 fflush (stderr);
284 }
285
286 void
malloc_error(x)287 malloc_error (x)
288 char *x;
289 {
290 print_out1 ("Malloc failed in %s.", x);
291 }
292
293 void
print_msg_wait(format)294 print_msg_wait (format)
295 register char *format;
296 {
297 init_yes_or_no ((unsigned char *) format, MessageOnly);
298 for (;;)
299 {
300 #ifdef XJUTIL
301 xw_read (tmp_buf);
302 if (cur_root->yes_no->map && cur_root->yes_no->exp)
303 break;
304 #else /* XJUTIL */
305 get_yes_no_event ();
306 if (cur_p->yes_no->map && cur_p->yes_no->exp)
307 break;
308 xim->sel_ret = -1;
309 #endif /* XJUTIL */
310 }
311 XFlush (dpy);
312 sleep (2);
313 end_yes_or_no ();
314 }
315