Mercurial > freewnn
diff Xwnmo/xwnmo/uif1.c @ 0:bbc77ca4def5
initial import
author | Yoshiki Yazawa <yaz@cc.rim.or.jp> |
---|---|
date | Thu, 13 Dec 2007 04:30:14 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Xwnmo/xwnmo/uif1.c Thu Dec 13 04:30:14 2007 +0900 @@ -0,0 +1,334 @@ +/* + * $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. <freewnn@rd.kyoto.omronsoft.co.jp> + * + * 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 <stdio.h> +#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); +}