1 /*
2 * $Id: basic_op.c,v 1.2 2001/06/14 18:16:14 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 */
42 #include <stdio.h>
43 #include "commonhd.h"
44 #include "sdefine.h"
45 #ifdef XJUTIL
46 #include "xjutil.h"
47 #include "sxheader.h"
48 #include "xext.h"
49 #else /* XJUTIL */
50 #include "xim.h"
51 #include "sheader.h"
52 #include "ext.h"
53 #endif /* XJUTIL */
54 #include "rk_spclval.h"
55 #include "rk_fundecl.h"
56
57 /*
58 * The buflen is a length of buffer. The mode is status of reverse and
59 * under-line. Input a initial strings in the buffer.
60 */
61
62 int
redraw_nisemono()63 redraw_nisemono ()
64 {
65 call_t_redraw_move (c_b->t_c_p, c_b->t_c_p, c_b->maxlen, 2, 1);
66 check_scroll ();
67 return (0);
68 }
69
70 #ifdef XJUTIL
71 int
buffer_in()72 buffer_in ()
73 {
74 unsigned int c;
75 int ret;
76 unsigned int romkan;
77 int ignored = 0;
78 int in;
79 unsigned int *output;
80
81 while (1)
82 {
83 in = keyin ();
84 output = romkan_henkan (in);
85 conv_ltr_to_ieuc (output);
86 if (input_func)
87 (*input_func) (output, output);
88 for (; *output != EOLTTR; output++)
89 {
90 c = ((romkan = *output) & 0x0000ffff);
91 if (isSPCL (romkan))
92 {
93 if (romkan == REDRAW)
94 {
95 (*c_b->redraw_fun) ();
96 continue;
97 }
98 else if (romkan == CHMSIG)
99 { /* mode changed */
100 if (redraw_when_chmsig_func)
101 (*redraw_when_chmsig_func) ();
102 disp_mode ();
103 continue;
104 }
105 else if (romkan == NISEBP)
106 { /* error */
107 ring_bell ();
108 continue;
109 }
110 else
111 {
112 continue; /* if (romkan == EOLTTR) */
113 }
114 }
115 if (ignored)
116 {
117 if (isNISE (romkan))
118 {
119 if (c == rubout_code)
120 {
121 --ignored;
122 }
123 else
124 {
125 ++ignored;
126 }
127 }
128 else
129 {
130 ignored = 0;
131 }
132 continue;
133 }
134 if (isNISE (romkan) && (ESCAPE_CHAR (c) || NOT_NORMAL_CHAR (c)) && c != rubout_code)
135 {
136 ++ignored;
137 continue;
138 }
139
140 if (c < TBL_SIZE && c_b->key_table[c])
141 {
142 if (c_b->rk_clear_tbl[c])
143 romkan_clear ();
144 ret = (*c_b->key_table[c]) (c, romkan);
145 }
146 else if (c >= 0x80 && c <= 0x9f)
147 {
148 ret = 0;
149 ring_bell ();
150 }
151 else if (!(ESCAPE_CHAR (c)) || c == 0x09)
152 { /* TAB is not ESCAPE char */
153 if (c_b->maxlen < c_b->buflen)
154 {
155 if (c_b->key_in_fun)
156 {
157 ret = (*c_b->key_in_fun) (c, romkan);
158 }
159 else
160 {
161 ret = insert_char (c);
162 call_t_redraw_move (c_b->t_c_p + 1, c_b->t_c_p, c_b->maxlen, 0, 1);
163 check_scroll ();
164 kk_cursor_normal ();
165 }
166 }
167 else
168 {
169 romkan_clear ();
170 ret = 0;
171 }
172 }
173 else
174 {
175 if (c_b->ctrl_code_fun)
176 {
177 ret = (*c_b->ctrl_code_fun) (c, romkan);
178 }
179 else
180 {
181 ret = 0;
182 ring_bell ();
183 }
184 }
185 if (ret == 1)
186 {
187 return (0);
188 }
189 else if (ret == -1)
190 {
191 return (-1);
192 }
193 }
194 }
195 }
196
197 int
kana_in(mode,buffer,buflen)198 kana_in (mode, buffer, buflen)
199 int mode;
200 w_char *buffer;
201 int buflen;
202 {
203 ClientBuf c_b1, *c_btmp;
204
205 c_btmp = c_b;
206 c_b = &c_b1;
207 c_b->buffer = buffer;
208 c_b->hanten = mode;
209 c_b->maxlen = Strlen (buffer);
210 c_b->t_c_p = c_b->maxlen;
211 c_b->buflen = buflen;
212 c_b->t_m_start = -2;
213 c_b->key_table = main_table[6];
214 c_b->rk_clear_tbl = romkan_clear_tbl[6];
215 c_b->key_in_fun = (int (*)()) NULL;
216 c_b->redraw_fun = redraw_nisemono;
217 c_b->ctrl_code_fun = (int (*)()) NULL;
218 kill_buffer_offset = 0;
219
220 init_screen ();
221 if (buffer_in () == -1)
222 {
223 xjutil->sel_ret = -1;
224 c_b = c_btmp;
225 return (-1);
226 }
227 if (xjutil->sel_ret == -2)
228 {
229 xjutil->sel_ret = -1;
230 c_b = c_btmp;
231 return (-1);
232 }
233 c_b->buffer[c_b->maxlen] = 0;
234 c_b = c_btmp;
235 return (0);
236 }
237
238 #ifdef nodef
239 int
kana_in_w_char_msg(mode,buffer,buflen)240 kana_in_w_char_msg (mode, buffer, buflen)
241 int mode;
242 w_char *buffer;
243 int buflen;
244 {
245 static ClientBuf c_b1, *c_btmp;
246 c_btmp = c_b;
247 c_b = &c_b1;
248 if ((c_b->buffer = (w_char *) Malloc (buflen * 2)) == NULL)
249 {
250 print_msg_getc ("Error occured in malloc.");
251 return (-1);
252 }
253 c_b->t_m_start = 0;
254 Strcpy (c_b->buffer, buffer);
255
256 c_b->hanten = mode;
257 c_b->maxlen = Strlen (c_b->buffer);
258 c_b->t_c_p = c_b->maxlen;
259 c_b->buflen = buflen;
260 c_b->redraw_fun = redraw_nisemono;
261 c_b->key_table = main_table[6];
262 c_b->rk_clear_tbl = romkan_clear_tbl[6];
263 c_b->key_in_fun = NULL;
264 c_b->ctrl_code_fun = NULL;
265 kill_buffer_offset = 0;
266
267 init_screen ();
268 if (buffer_in () == -1)
269 {
270 Free (c_b->buffer);
271 c_b = c_btmp;
272 return (-1);
273 }
274 Free (c_b->buffer);
275 Strncpy (buffer, c_b->buffer, c_b->maxlen);
276 buffer[c_b->maxlen] = 0;
277 c_b = c_btmp;
278 return (0);
279 }
280 #endif
281 #else /* XJUTIL */
282
283 int
buffer_in(in)284 buffer_in (in)
285 int in;
286 {
287 unsigned int c;
288 int ret;
289 unsigned int romkan;
290 unsigned int *output;
291
292 if (if_unget_buf ())
293 {
294 output = get_unget_buf ();
295 }
296 else
297 {
298 if (c_c->func_stack_count >= 0 && c_c->command_func_stack[c_c->func_stack_count] != 0)
299 {
300 ret = (*c_c->command_func_stack[c_c->func_stack_count]) (in);
301 return (-1);
302 }
303 else
304 {
305 ignored = 0;
306 output = romkan_henkan (in);
307 }
308 }
309 conv_ltr_to_ieuc (output);
310 if (input_func)
311 (*input_func) (output, output);
312 for (; *output != EOLTTR; output++)
313 {
314 c = ((romkan = *output) & 0x0000ffff);
315 if (isSPCL (romkan))
316 {
317 if (romkan == REDRAW)
318 {
319 (*c_b->redraw_fun) ();
320 continue;
321 }
322 else if (romkan == CHMSIG)
323 { /* mode changed */
324 if (redraw_when_chmsig_func)
325 (*redraw_when_chmsig_func) ();
326 disp_mode ();
327 continue;
328 }
329 else if (romkan == NISEBP)
330 { /* error */
331 ring_bell ();
332 continue;
333 }
334 else if (romkan == SENDCH)
335 {
336 c = ((romkan = *++output) & 0x0000ffff);
337 romkan_clear ();
338 send_string (c);
339 return (0);
340 }
341 else
342 {
343 continue;
344 }
345 }
346 if (ignored)
347 {
348 if (isNISE (romkan))
349 {
350 if (c == rubout_code)
351 {
352 --ignored;
353 }
354 else
355 {
356 ++ignored;
357 }
358 }
359 else
360 {
361 ignored = 0;
362 }
363 continue;
364 }
365 if (isNISE (romkan) && (ESCAPE_CHAR (c) || NOT_NORMAL_CHAR (c)) && c != rubout_code)
366 {
367 ++ignored;
368 continue;
369 }
370
371 if (c < TBL_SIZE && c_b->key_table[c])
372 {
373 if (c_b->rk_clear_tbl[c])
374 romkan_clear ();
375 ret = (*c_b->key_table[c]) (c, romkan);
376 /*
377 }else if(c >= 0x80 && c <= 0x9f){
378 ret = return_it(c, romkan);
379 */
380 }
381 else if (!(c >= 0x80 && c <= 0x9f) && (!(ESCAPE_CHAR (c)) || c == 0x09))
382 { /* TAB is not ESCAPE char */
383 if (c_b->maxlen < c_b->buflen)
384 {
385 if (c_b->key_in_fun)
386 {
387 ret = (*c_b->key_in_fun) (c, romkan);
388 }
389 else
390 {
391 ret = insert_char (c);
392 call_t_redraw_move (c_b->t_c_p + 1, c_b->t_c_p, c_b->maxlen, 0, 1);
393 check_scroll ();
394 kk_cursor_normal ();
395 if (henkan_on_kuten && c_b->t_c_p == c_b->maxlen)
396 henkan_if_maru (c);
397 }
398 }
399 else
400 {
401 romkan_clear ();
402 ret = 0;
403 }
404 }
405 else
406 {
407 if (c_b->ctrl_code_fun)
408 {
409 ret = (*c_b->ctrl_code_fun) (c, romkan);
410 }
411 else
412 {
413 ret = 0;
414 ring_bell ();
415 }
416 }
417 if (ret == 1)
418 {
419 return (0);
420 }
421 else if (ret == -1)
422 {
423 return (-1);
424 }
425 continue;
426 }
427 return (-1);
428 }
429 #endif /* XJUTIL */
430
431 int
delete_char1()432 delete_char1 ()
433 {
434 if (c_b->t_c_p < c_b->maxlen)
435 {
436 Strncpy (c_b->buffer + c_b->t_c_p, c_b->buffer + c_b->t_c_p + 1, c_b->maxlen - c_b->t_c_p - 1);
437 c_b->maxlen -= 1;
438 }
439 return (0);
440 }
441
442 int
t_delete_char()443 t_delete_char ()
444 {
445 delete_char1 ();
446 /* kk_cursor_invisible(); */
447 call_t_redraw_move (c_b->t_c_p, c_b->t_c_p, c_b->maxlen, 2, 1);
448 check_scroll ();
449 /* kk_cursor_normal(); */
450 return (0);
451 }
452
453 int
t_rubout(c,romkan)454 t_rubout (c, romkan)
455 int c, romkan;
456 {
457 if (c_b->t_c_p != 0)
458 {
459 backward ();
460 t_delete_char ();
461 }
462 return (0);
463 }
464
465
466 #ifdef XJUTIL
467 int
kuten()468 kuten ()
469 {
470 input_a_char_from_function (in_kuten);
471 return (0);
472 }
473
474 int
jis()475 jis ()
476 {
477 input_a_char_from_function (in_jis);
478 return (0);
479 }
480
481 int
482 input_a_char_from_function (fun)
483 int (*fun) ();
484 {
485 int c, in = 0;
486 int ret = -1;
487
488 for (;;)
489 {
490 if ((c = (*fun) (in)) != BUFFER_IN_CONT)
491 {
492 if (c == -1)
493 return (ret);
494 if (c_b->key_in_fun)
495 {
496 ret = (*c_b->key_in_fun) (c, c);
497 }
498 else
499 {
500 ret = insert_char (c);
501 t_redraw_move (c_b->t_c_p + 1, c_b->t_c_p, c_b->maxlen, 0);
502 }
503 break;
504 }
505 in = keyin ();
506 }
507 return (ret);
508 }
509
510 #else /* XJUTIL */
511
512 int
kuten(in)513 kuten (in)
514 int in;
515 {
516 static WnnClientRec *c_c_sv = 0;
517 int ret = -1;
518 #ifdef CALLBACKS
519 int c;
520 static int save_c;
521 #endif /* CALLBACKS */
522
523 #ifdef CALLBACKS
524 if (IsPreeditCallbacks (cur_x) && cur_x->cb_redraw_needed)
525 {
526 if (c_b->key_in_fun)
527 {
528 ret = (*c_b->key_in_fun) (save_c, save_c);
529 }
530 else
531 {
532 ret = insert_char (save_c);
533 t_redraw_move (c_b->t_c_p + 1, c_b->t_c_p, c_b->maxlen, 0);
534 check_scroll ();
535 }
536 c_c_sv = 0;
537 pop_func (c_c);
538 cur_x->cb_redraw_needed = 0;
539 return (0);
540 }
541 #endif /* CALLBACKS */
542 if (c_c_sv != 0 && c_c != c_c_sv)
543 {
544 ring_bell ();
545 return (0);
546 }
547 if (c_c_sv == 0)
548 {
549 c_c_sv = c_c;
550 push_func (c_c, kuten);
551 }
552 #ifdef CALLBACKS
553 if ((c = in_kuten (in)) == BUFFER_IN_CONT)
554 {
555 return (BUFFER_IN_CONT);
556 }
557 else if (c != -1)
558 {
559 if (IsPreeditCallbacks (cur_x))
560 {
561 cur_x->cb_redraw_needed = 1;
562 SendCBRedraw ();
563 save_c = c;
564 return (BUFFER_IN_CONT);
565 }
566 if (c_b->key_in_fun)
567 {
568 ret = (*c_b->key_in_fun) (c, c);
569 }
570 else
571 {
572 ret = insert_char (c);
573 t_redraw_move (c_b->t_c_p + 1, c_b->t_c_p, c_b->maxlen, 0);
574 check_scroll ();
575 }
576 }
577 #else /* CALLBACKS */
578 if ((ret = input_a_char_from_function (in_kuten, in)) == BUFFER_IN_CONT)
579 {
580 return (BUFFER_IN_CONT);
581 }
582 #endif /* CALLBACKS */
583 c_c_sv = 0;
584 pop_func (c_c);
585 return (ret);
586 }
587
588 int
jis(in)589 jis (in)
590 int in;
591 {
592 static WnnClientRec *c_c_sv = 0;
593 int ret = -1;
594 #ifdef CALLBACKS
595 int c;
596 static int save_c;
597 #endif /* CALLBACKS */
598
599 #ifdef CALLBACKS
600 if (IsPreeditCallbacks (cur_x) && cur_x->cb_redraw_needed)
601 {
602 if (c_b->key_in_fun)
603 {
604 ret = (*c_b->key_in_fun) (save_c, save_c);
605 }
606 else
607 {
608 ret = insert_char (save_c);
609 t_redraw_move (c_b->t_c_p + 1, c_b->t_c_p, c_b->maxlen, 0);
610 check_scroll ();
611 }
612 c_c_sv = 0;
613 pop_func (c_c);
614 cur_x->cb_redraw_needed = 0;
615 return (0);
616 }
617 #endif /* CALLBACKS */
618 if (c_c_sv != 0 && c_c != c_c_sv)
619 {
620 ring_bell ();
621 return (0);
622 }
623 if (c_c_sv == 0)
624 {
625 c_c_sv = c_c;
626 push_func (c_c, jis);
627 }
628 #ifdef CALLBACKS
629 if ((c = in_jis (in)) == BUFFER_IN_CONT)
630 {
631 return (BUFFER_IN_CONT);
632 }
633 else if (c != -1)
634 {
635 if (IsPreeditCallbacks (cur_x))
636 {
637 cur_x->cb_redraw_needed = 1;
638 SendCBRedraw ();
639 save_c = c;
640 return (BUFFER_IN_CONT);
641 }
642 if (c_b->key_in_fun)
643 {
644 ret = (*c_b->key_in_fun) (c, c);
645 }
646 else
647 {
648 ret = insert_char (c);
649 t_redraw_move (c_b->t_c_p + 1, c_b->t_c_p, c_b->maxlen, 0);
650 check_scroll ();
651 }
652 }
653 #else /* CALLBACKS */
654 if ((ret = input_a_char_from_function (in_jis, in)) == BUFFER_IN_CONT)
655 {
656 return (BUFFER_IN_CONT);
657 }
658 #endif /* CALLBACKS */
659 c_c_sv = 0;
660 pop_func (c_c);
661 return (ret);
662 }
663
664 #ifndef CALLBACKS
665 int
666 input_a_char_from_function (fun, in)
667 int (*fun) ();
668 int in;
669 {
670 int c;
671 int ret = -1;
672
673 if ((c = (*fun) (in)) != -1)
674 {
675 if (c == BUFFER_IN_CONT)
676 {
677 return (BUFFER_IN_CONT);
678 }
679 if (c_b->key_in_fun)
680 {
681 ret = (*c_b->key_in_fun) (c, c);
682 }
683 else
684 {
685 ret = insert_char (c);
686 t_redraw_move (c_b->t_c_p + 1, c_b->t_c_p, c_b->maxlen, 0);
687 check_scroll ();
688 }
689 }
690 return (ret);
691 }
692 #endif /* !CALLBACKS */
693 #endif /* !XJUTIL */
694
695 int
t_kill()696 t_kill ()
697 {
698 kill_buffer_offset = MIN_VAL (c_b->maxlen - c_b->t_c_p, maxchg);
699 Strncpy (kill_buffer, c_b->buffer + c_b->t_c_p, kill_buffer_offset);
700 c_b->maxlen = c_b->t_c_p;
701 t_redraw_move (c_b->t_c_p, c_b->t_c_p, c_b->maxlen, 1);
702 check_scroll ();
703 return (0);
704 }
705
706 int
t_yank()707 t_yank ()
708 {
709 if (kill_buffer_offset <= c_b->buflen - c_b->t_c_p)
710 {
711 Strncpy (c_b->buffer + c_b->t_c_p + kill_buffer_offset, c_b->buffer + c_b->t_c_p, c_b->maxlen - c_b->t_c_p);
712 Strncpy (c_b->buffer + c_b->t_c_p, kill_buffer, kill_buffer_offset);
713 c_b->maxlen += kill_buffer_offset;
714 call_t_redraw_move (c_b->t_c_p + kill_buffer_offset, c_b->t_c_p, c_b->maxlen, 0, 1);
715 check_scroll ();
716 }
717 return (0);
718 }
719
720 int
t_ret()721 t_ret ()
722 {
723 return (1);
724 }
725
726 int
t_quit()727 t_quit ()
728 {
729 return (-1);
730 }
731
732 int
c_top()733 c_top ()
734 {
735 (*c_top_func) ();
736 return (0);
737 }
738
739 int
c_end()740 c_end ()
741 {
742 (*c_end_func) ();
743 return (0);
744 }
745
746 int
c_end_nobi()747 c_end_nobi ()
748 {
749 (*c_end_nobi_func) ();
750 return (0);
751 }
752
753 int
t_jmp_backward()754 t_jmp_backward ()
755 {
756 int k;
757 for (k = 1; k < touroku_bnst_cnt; k++)
758 {
759 if (touroku_bnst[k] >= c_b->t_c_p)
760 {
761 if (touroku_bnst[k - 1] >= c_b->t_m_start)
762 {
763 call_t_redraw_move_1 (touroku_bnst[k - 1], touroku_bnst[k - 1], c_b->maxlen, 0, 1, 0, 3);
764 }
765 else
766 {
767 c_top ();
768 }
769 return (0);
770 }
771 }
772 backward ();
773 return (0);
774 }
775
776 int
t_jmp_forward()777 t_jmp_forward ()
778 {
779 int k;
780
781 for (k = 1; k < touroku_bnst_cnt; k++)
782 {
783 if (touroku_bnst[k] > c_b->t_c_p)
784 {
785 call_t_redraw_move_1 (touroku_bnst[k], c_b->t_c_p, c_b->maxlen, 0, 1, 0, 3);
786 return (0);
787 }
788 }
789 forward_char ();
790 return (0);
791 }
792
793 int
forward_char()794 forward_char ()
795 {
796 if (c_b->t_c_p < c_b->maxlen)
797 {
798 call_t_redraw_move_2 (c_b->t_c_p + 1, c_b->t_c_p, c_b->t_m_start, c_b->t_c_p + 2, c_b->t_c_p + 1, 0, 1);
799 }
800 return (0);
801 }
802
803 int
forward()804 forward ()
805 {
806 if (c_b->t_c_p < c_b->maxlen)
807 {
808 t_move (c_b->t_c_p + 1);
809 }
810 return (0);
811 }
812
813 int
backward_char()814 backward_char ()
815 {
816 if (c_b->t_c_p >= 1 && c_b->t_c_p > c_b->t_m_start)
817 {
818 call_t_redraw_move_2 (c_b->t_c_p - 1, c_b->t_c_p - 1, c_b->t_m_start, c_b->t_c_p + 1, c_b->t_c_p, 0, 1);
819 }
820 return (0);
821 }
822
823 int
backward()824 backward ()
825 {
826 if (c_b->t_c_p >= 1 && c_b->t_c_p > c_b->t_m_start)
827 {
828 t_move (c_b->t_c_p - 1);
829 }
830 return (0);
831 }
832
833 int
insert_char(c)834 insert_char (c)
835 int c;
836 {
837 if (c_b->maxlen < c_b->buflen)
838 {
839 Strncpy (c_b->buffer + c_b->t_c_p + 1, c_b->buffer + c_b->t_c_p, c_b->maxlen - c_b->t_c_p);
840 c_b->maxlen += 1;
841 c_b->buffer[c_b->t_c_p] = (w_char) (c & 0xffff);
842 }
843 return (0);
844 }
845
846 int
insert_string(string,len)847 insert_string (string, len)
848 w_char *string;
849 int len;
850 {
851 if (c_b->maxlen + len <= c_b->buflen)
852 {
853 Strncpy (c_b->buffer + c_b->t_c_p + len, c_b->buffer + c_b->t_c_p, c_b->maxlen - c_b->t_c_p);
854 Strncpy (c_b->buffer + c_b->t_c_p, string, len);
855 c_b->maxlen += len;
856 }
857 return (0);
858 }
859
860 #ifdef XJUTIL
861 int
quote()862 quote ()
863 {
864 unsigned int c;
865 c = keyin ();
866 if (empty_modep () && c_b->key_in_fun)
867 return ((*c_b->key_in_fun) (c, c));
868 insert_char (c);
869 t_redraw_move (c_b->t_c_p + 1, c_b->t_c_p, c_b->maxlen, 0);
870 romkan_clear ();
871 return (0);
872 }
873 #else /* XJUTIL */
874 int
quote(in)875 quote (in)
876 int in;
877 {
878 static WnnClientRec *c_c_sv = 0;
879
880 if (in == -99)
881 {
882 romkan_clear ();
883 c_c_sv = 0;
884 pop_func (c_c);
885 return (0);
886 }
887 if (c_c_sv != 0 && c_c != c_c_sv)
888 {
889 ring_bell ();
890 return (0);
891 }
892 if (c_c_sv == 0)
893 {
894 c_c_sv = c_c;
895 push_func (c_c, quote);
896 return (BUFFER_IN_CONT);
897 }
898 if (empty_modep ())
899 {
900 if (send_ascii_char)
901 {
902 c_c_sv = 0;
903 pop_func (c_c);
904 return (return_it_if_ascii (in, 0));
905 }
906 else
907 {
908 insert_char_and_change_to_insert_mode (in);
909 }
910 }
911 else
912 {
913 insert_char (in);
914 t_redraw_move (c_b->t_c_p + 1, c_b->t_c_p, c_b->maxlen, 0);
915 check_scroll ();
916 }
917 romkan_clear ();
918 c_c_sv = 0;
919 pop_func (c_c);
920 return (0);
921 }
922
923 int
reset_line()924 reset_line ()
925 {
926 if (empty_modep () == 0)
927 {
928 redraw_xj_all ();
929 }
930 return (0);
931 }
932 #endif /* XJUTIL */
933
934 void
redraw_line()935 redraw_line ()
936 {
937 throw_col (0);
938 disp_mode ();
939 if (!empty_modep ())
940 {
941 t_print_l ();
942 }
943 }
944