Mercurial > freewnn
diff Xwnmo/xwnmo/select_ele.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/select_ele.c Thu Dec 13 04:30:14 2007 +0900 @@ -0,0 +1,380 @@ +/* + * $Id: select_ele.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" +#ifdef XJUTIL +#include "xjutil.h" +#include "sxheader.h" +#include "xext.h" +#else /* XJUTIL */ +#include "xim.h" +#include "sheader.h" +#include "ext.h" +#endif /* XJUTIL */ + +static int kosuu; /* kosuu of elements */ + +static int +change_decimal (c1) + int c1; +{ + if (c1 >= '0' && c1 <= '9') + return (c1 - '0'); + if (c1 >= 'A' && c1 <= 'Z') + return (c1 - 'A' + 10); + if (c1 >= 'a' && c1 <= 'z') + return (c1 - 'a' + 10); + return (-1); +} + +#define IsJIKOUHO(mode) (mode & (JIS_IN|KUTEN_IN|JIKOUHO)) +#ifdef XJUTIL +#define SEL_RET (xjutil->sel_ret) +#else /* XJUTIL */ +#define SEL_RET (xim->sel_ret) +#endif /* XJUTIL */ +int +xw_select_one_element (c, kosuu1, init, title, mode, key_tbl, in) + char **c; + int kosuu1; + int init; + char *title; + int mode; + int (**key_tbl) (); + int in; +{ + static int d; + int c1; + int ret; +#ifndef XJUTIL + static WnnClientRec *c_c_sv = 0; +#endif /* !XJUTIL */ + static int select_step = 0; + +#ifndef XJUTIL + if (in == -99) + { + end_ichiran (); + SEL_RET = -1; + select_step = 0; + ret = -1; + goto RET; + } + if (c_c_sv != 0 && c_c != c_c_sv) + { + ring_bell (); + return (-1); + } +#endif /* !XJUTIL */ + if (select_step == 0) + { + kosuu = kosuu1; + if (init_ichiran ((unsigned char **) c, kosuu1, init, (unsigned char *) title, (unsigned char *) "", (unsigned char *) "", NULL, 0, mode) == -1) + { + ring_bell (); + return (-1); + } +#ifndef XJUTIL + c_c_sv = c_c; +#endif /* !XJUTIL */ + select_step++; + return (BUFFER_IN_CONT); + } + c1 = in; +#ifdef XJUTIL + if (!cur_root->ichi->map) + return (BUFFER_IN_CONT); +#else /* XJUTIL */ + if (!xim->cur_j_c_root->ichi->map) + return (BUFFER_IN_CONT); +#endif /* XJUTIL */ + if (SEL_RET == -1) + { + d = change_decimal (c1); + } + else if (SEL_RET == -2) + { + end_ichiran (); + SEL_RET = -1; + select_step = 0; + ret = -1; + goto RET; + } + else + { + /* + end_ichiran(); + */ + if (IsJIKOUHO (mode)) + { + d = find_ji_hilite (); + } + else + { + d = find_hilite (); + } + SEL_RET = -1; + } + if (d >= 0 && d < kosuu) + { + end_ichiran (); + select_step = 0; + ret = d; + goto RET; + } + if ((c1 < 256) && (key_tbl[c1] != NULL)) + { + if ((ret = (*key_tbl[c1]) ()) == 1) + { + if (IsJIKOUHO (mode)) + { + d = find_ji_hilite (); + } + else + { + d = find_hilite (); + } + end_ichiran (); + select_step = 0; + ret = d; + goto RET; + } + else if (ret == -1) + { + end_ichiran (); + select_step = 0; + ret = -1; + goto RET; + } + else if (ret == -3) + { + ring_bell (); + } + } + return (BUFFER_IN_CONT); +RET: +#ifndef XJUTIL + c_c_sv = 0; +#endif /* !XJUTIL */ + select_step = 0; + return (ret); +} + +#ifdef nodef +int +xw_select_one_jikouho (c, kosuu1, init, title, mode, key_tbl, in) + char **c; + int kosuu1; + int init; + char *title; + int mode; + int (**key_tbl) (); + int in; +{ + int ret; + static int d, c1; + static WnnClientRec *c_c_sv = 0; + static int select_step = 0; + + if (in == -99) + { + end_ichiran (); + SEL_RET = -1; + select_step = 0; + ret = -1; + goto RET; + } + if (c_c_sv != 0 && c_c != c_c_sv) + { + ring_bell (); + return (-1); + } + if (select_step == 0) + { + kosuu = kosuu1; + if (init_ichiran ((unsigned char **) c, kosuu1, init, (unsigned char *) title, (unsigned char *) "", (unsigned char *) "", NULL, 0, mode) == -1) + { + ring_bell (); + return (-1); + } + c_c_sv = c_c; + select_step++; + return (BUFFER_IN_CONT); + } + else + { + c1 = 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; + select_step = 0; + return (-1); + } + else if (xim->sel_ret != -1) + { + d = find_ji_hilite (); + end_ichiran (); + xim->sel_ret = -1; + c_c_sv = 0; + select_step = 0; + return (d); + } + else if ((c1 < 256) && (key_tbl[c1] != NULL)) + { + if ((ret = (*key_tbl[c1]) ()) == 1) + { + d = find_ji_hilite (); + end_ichiran (); + c_c_sv = 0; + select_step = 0; + return (d); + } + else if (ret == -1) + { + end_ichiran (); + c_c_sv = 0; + select_step = 0; + return (-1); + } + else if (ret == -3) + { + ring_bell (); + return (BUFFER_IN_CONT); + } + else + { + return (BUFFER_IN_CONT); + } + } + else + { + ring_bell (); + return (BUFFER_IN_CONT); + } + } +} +#endif + + +#ifndef XJUTIL +static void +display_all () +{ + redraw_ichi_w (); +} +#endif + +int +forward_select () +{ + xw_forward_select (); + return (0); +} + +int +backward_select () +{ + xw_backward_select (); + return (0); +} + +int +lineend_select () +{ + xw_lineend_select (); + return (0); +} + +int +linestart_select () +{ + xw_linestart_select (); + return (0); +} + +int +select_select () +{ + return (1); /* return mm from upper function */ +} + +int +quit_select () +{ + return (-1); +} + +int +previous_select () +{ + xw_previous_select (); + return (0); +} + +int +next_select () +{ + xw_next_select (); + return (0); +} + +#ifndef XJUTIL +int +redraw_select () +{ + display_all (); + return (0); +} +#endif /* !XJUTIL */ + +/* + Local Variables: + eval: (setq kanji-flag t) + eval: (setq kanji-fileio-code 0) + eval: (mode-line-kanji-code-update) + End: +*/