/* * $Id: uif1.c,v 1.2 2001/06/14 18:16:17 ura Exp $ */ /* * FreeWnn is a network-extensible Kana-to-Kanji conversion system. * This file is part of FreeWnn. * * Copyright Kyoto University Research Institute for Mathematical Sciences * 1987, 1988, 1989, 1990, 1991, 1992 * Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 1999 * Copyright ASTEC, Inc. 1987, 1988, 1989, 1990, 1991, 1992 * Copyright 1991 by Massachusetts Institute of Technology * * Author: OMRON SOFTWARE Co., Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Emacs; see the file COPYING. If not, write to the * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Commentary: * * Change log: * * Last modified date: 8,Feb.1999 * * Code: * */ /* Version 4.0 */ #include #include "commonhd.h" #include "sdefine.h" #include "xim.h" #include "sheader.h" #include "ext.h" #include "rk_spclval.h" #include "rk_fundecl.h" int jutil_c (in) int in; { static WnnClientRec *c_c_sv = NULL; static int jutil_c_step = 0; if (c_c_sv != NULL && c_c != c_c_sv) { ring_bell (); return (-1); } if (jutil_c_step == 0) { if (c_c_sv) { return (-1); } c_c_sv = c_c; push_func (c_c, jutil_c); if (!isconect_jserver ()) { c_c_sv = NULL; pop_func (c_c); return (0); } jutil_c_step = 1; } if (jutil (in) == BUFFER_IN_CONT) { return (BUFFER_IN_CONT); } c_c_sv = NULL; pop_func (c_c); jutil_c_step = 0; return (0); } int touroku_c () { if (!isconect_jserver ()) { return (0); } touroku (); return (0); } int reconnect_jserver_body (in) int in; { int k; int c; static int c_p = 0; static WnnClientRec *c_c_sv = 0; static int j_con_step = 0; static char hostname[32]; static char *lang; if (c_c->use_server == 0) return (0); if (in == -99) { end_ichiran (); c_c_sv = 0; j_con_step = 0; romkan_clear (); return (-1); } if (c_c_sv != 0 && c_c != c_c_sv) { ring_bell (); return (-1); } if (c_c_sv == 0) { for (k = 0; k < 32; hostname[k++] = '\0'); c_c_sv = c_c; c_p = 0; lang = cur_lang->lang; } if (j_con_step == 0) { if (init_ichiran ((unsigned char **) NULL, 0, -1, (unsigned char *) msg_get (cd, 29, default_message[29], lang), (unsigned char *) msg_get (cd, 30, default_message[30], lang), (unsigned char *) msg_get (cd, 19, default_message[19], lang), NULL, 32, NYUURYOKU) == -1) { ring_bell (); c_c_sv = 0; return (-1); } sprintf (hostname, "%s", servername); c_p = strlen (hostname); draw_nyuu_w ((unsigned char *) hostname, 1); j_con_step++; return (BUFFER_IN_CONT); } if (j_con_step == 1) { c = in; if (!xim->cur_j_c_root->ichi->map) return (BUFFER_IN_CONT); if (xim->sel_ret == -2) { end_ichiran (); xim->sel_ret = -1; c_c_sv = 0; j_con_step = 0; romkan_clear (); return (-1); } if (c < 256) { if ((c == ESC) || (t_quit == main_table[5][c])) { end_ichiran (); c_c_sv = 0; romkan_clear (); return (-1); } else if (henkan_off == main_table[5][c]) { ring_bell (); } else if (c == rubout_code && c_p) { hostname[--c_p] = '\0'; } else if (c == NEWLINE || c == CR) { if (c_p == 0) { goto RET; } else { end_ichiran (); goto NEXT; } } else if (c > 20 && c < 128) { hostname[c_p++] = (char) c; goto RET; } else { ring_bell (); } } else { ring_bell (); } RET: clear_nyuu_w (); draw_nyuu_w ((unsigned char *) hostname, 1); return (BUFFER_IN_CONT); } NEXT: if (servername) Free (servername); servername = alloc_and_copy (hostname); if (connect_server (cur_lang) < 0) goto ERROR_RET; if (c_c->use_server && !jl_isconnect (bun_data_)) { print_msg_getc (" %s", msg_get (cd, 32, default_message[32], lang), NULL, NULL); } else { print_msg_getc (" %s", msg_get (cd, 33, default_message[33], lang), NULL, NULL); } ERROR_RET: c_c_sv = 0; j_con_step = 0; romkan_clear (); return (0); } int lang_c (in) int in; { static WnnClientRec *c_c_sv = 0; XIMLangRec *xl; XIMNestLangRec *p; int ret; if (in == -99) { c_c_sv = 0; pop_func (c_c); return (0); } if (c_c_sv != 0 && c_c != c_c_sv) { ring_bell (); return (-1); } if (c_c_sv == 0) { c_c_sv = c_c; push_func (c_c, lang_c); } if ((ret = lang_set (in, &xl, &p)) == BUFFER_IN_CONT) { return (BUFFER_IN_CONT); } c_c_sv = 0; pop_func (c_c); if (ret >= 0) { change_lang (xl, p); } return (0); } int lang_ct (in) int in; { static WnnClientRec *c_c_sv = 0; XIMLangRec *xl; XIMNestLangRec *p; int ret; if (c_c_sv != 0 && c_c != c_c_sv) { ring_bell (); return (-1); } if (c_c_sv == 0) { c_c_sv = c_c; push_func (c_c, lang_ct); } if ((ret = lang_set_ct (in, &xl, &p)) == BUFFER_IN_CONT) { return (BUFFER_IN_CONT); } c_c_sv = 0; pop_func (c_c); if (ret >= 0) { change_lang (xl, p); } return (0); } #define UNGETBUFSIZE 32 static unsigned int unget_buf[UNGETBUFSIZE]; static int count = 0; int push_unget_buf (c) int c; { if ((count + 1) >= UNGETBUFSIZE) return (-1); unget_buf[count++] = c; unget_buf[count] = EOLTTR; return (0); } unsigned int * get_unget_buf () { if (count <= 0) unget_buf[0] = EOLTTR; count = 0; return (unget_buf); } int if_unget_buf () { if (count > 0) return (1); return (0); }