Mercurial > freewnn
diff Xwnmo/xwnmo/key_bind.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/key_bind.c Thu Dec 13 04:30:14 2007 +0900 @@ -0,0 +1,1085 @@ +/* + * $Id: key_bind.c,v 1.2 2001/06/14 18:16:16 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, 1992 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 <pwd.h> +#include "commonhd.h" +#include "config.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 */ + +extern char *getenv (); +#ifdef XJUTIL +static struct kansuu kansuu_hyo[] = { + {"send_string", "send what is in the buffer to pty.", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"forward_char", "cursor wo hitotu maeni susumeru.", 1, + NULL, forward_char, NULL, NULL, NULL, + forward_char, forward_char, NULL, NULL, NULL, + '\0'}, + {"backward_char", "cursor wo hitotu usironi susumeru.", 1, + NULL, backward_c, NULL, NULL, NULL, + backward_char, backward_char, NULL, NULL, NULL, + '\0'}, + {"goto_top_of_line", "", 1, + NULL, c_top, NULL, NULL, NULL, + c_top, c_top, NULL, NULL, NULL, + '\0'}, + {"goto_end_of_line", "", 1, + NULL, c_end, c_end_nobi, NULL, NULL, + c_end, c_end, NULL, NULL, NULL, + '\0'}, + {"delete_char_at_cursor", "", 1, + NULL, delete_c, NULL, NULL, NULL, + t_delete_char, t_delete_char, NULL, NULL, NULL, + '\0'}, + {"kaijo", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"henkan", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"tan_henkan", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"tan_henkan_dai", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"jikouho", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"zenkouho", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"jikouho_dai", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"zenkouho_dai", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"select_jikouho", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"select_jikouho_dai", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"kill", "", 1, + NULL, kill_c, NULL, NULL, NULL, + t_kill, t_kill, NULL, NULL, NULL, + '\0'}, + {"yank", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"yank_e", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"bunsetu_nobasi", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"bunsetu_chijime", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"jisho_utility", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"jisho_utility_e", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"touroku", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"touroku_e", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"kakutei", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"sainyuuryoku", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"sainyuuryoku_e", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"kuten", "", 0, + NULL, kuten, NULL, NULL, NULL, + kuten, kuten, NULL, NULL, NULL, + '\0'}, + {"kuten_e", "", 0, + NULL, kuten, NULL, kuten, NULL, + kuten, kuten, NULL, NULL, NULL, + '\0'}, + {"jis", "", 0, + NULL, jis, NULL, NULL, NULL, + jis, jis, NULL, NULL, NULL, + '\0'}, + {"jis_e", "", 0, + NULL, jis, NULL, jis, NULL, + jis, jis, NULL, NULL, NULL, + '\0'}, + {"redraw_line", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"redraw_line_e", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"previous_history_e", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"previous_history", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"next_history_e", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"next_history", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"touroku_mark_set", "", 0, + NULL, NULL, NULL, NULL, NULL, + t_markset, NULL, NULL, NULL, NULL, + '\0'}, + {"touroku_return", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, t_ret, NULL, NULL, NULL, + '\0'}, + {"quit", "", 0, + NULL, NULL, NULL, NULL, quit_select, + t_quit, t_quit, quit_select, quit_select, quit_select, + '\0'}, + {"touroku_jump_forward", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, t_jmp_forward, NULL, NULL, NULL, + '\0'}, + {"touroku_jump_backward", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, t_jmp_backward, NULL, NULL, NULL, + '\0'}, + {"change_to_insert_mode", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"quote_e", "", 0, + NULL, quote, NULL, quote, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"quote", "", 0, + NULL, quote, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"send_ascii_char", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"toggle_send_ascii_char", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"not_send_ascii_char", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"pop_send_ascii_char", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"quote_send_ascii_char", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"select_select", "", 0, + NULL, NULL, NULL, NULL, select_select, + NULL, NULL, kworddel_op, select_select, select_select, + '\0'}, + {"lineend_select", "", 0, + NULL, NULL, NULL, NULL, lineend_select, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"linestart_select", "", 0, + NULL, NULL, NULL, NULL, linestart_select, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"previous_select", "", 0, + NULL, NULL, NULL, NULL, xw_previous_select, + NULL, NULL, xw_previous_select, xw_previous_select, + xw_previous_message, + '\0'}, + {"next_select", "", 0, + NULL, NULL, NULL, NULL, xw_next_select, + NULL, NULL, xw_next_select, xw_next_select, xw_next_message, + '\0'}, + {"backward_select", "", 0, + NULL, NULL, NULL, NULL, backward_select, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"forward_select", "", 0, + NULL, NULL, NULL, NULL, forward_select, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"reconnect_jserver", "", 0, + reconnect_server, reconnect_server, reconnect_server, reconnect_server, + reconnect_server, + reconnect_server, reconnect_server, reconnect_server, reconnect_server, + reconnect_server, + '\0'}, + {"henkan_on", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"inspect", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"sakujo_kouho", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"nobi_henkan_dai", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"nobi_henkan", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"del_entry", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, kworddel, kdicdel, NULL, + '\0'}, + {"use_entry", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, kworduse, kdicuse, NULL, + '\0'}, + {"com_entry", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, kwordcom, kdiccom, NULL, + '\0'}, + {"kana_henkan", "", 1, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"hindo_set", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, kwordhindo, NULL, NULL, + '\0'}, + {"ima_bit", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, kwordima, NULL, NULL, + '\0'}, + {"change_locale", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"change_locale_ct", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'} +}; +#else /* XJUTIL */ +extern int lang_c (); +extern int lang_ct (); +static struct kansuu kansuu_hyo[] = { + {"send_string", "send what is in the buffer to pty.", 0, + send_string, send_string, send_string, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"forward_char", "cursor wo hitotu maeni susumeru.", 1, + forward_bunsetsu, forward_char, henkan_forward, NULL, NULL, + forward_char, forward_char, NULL, NULL, NULL, + '\0'}, + {"backward_char", "cursor wo hitotu usironi susumeru.", 1, + backward_bunsetsu, backward_c, henkan_backward, NULL, NULL, + backward_char, backward_char, NULL, NULL, NULL, + '\0'}, + {"goto_top_of_line", "", 1, + top_bunsetsu, c_top, jmptijime, NULL, NULL, + c_top, c_top, NULL, NULL, NULL, + '\0'}, + {"goto_end_of_line", "", 1, + end_bunsetsu, c_end, c_end_nobi, NULL, NULL, + c_end, c_end, NULL, NULL, NULL, + '\0'}, + {"delete_char_at_cursor", "", 1, + NULL, delete_c, NULL, NULL, NULL, + t_delete_char, t_delete_char, NULL, NULL, NULL, + '\0'}, + {"kaijo", "", 0, + kaijo, NULL, kaijo, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"henkan", "", 1, + NULL, ren_henkan, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"tan_henkan", "", 1, + NULL, tan_henkan, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"tan_henkan_dai", "", 1, + NULL, tan_henkan_dai, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"jikouho", "", 0, + jikouho_c, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"zenkouho", "", 0, + zenkouho_c, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"jikouho_dai", "", 0, + jikouho_dai_c, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"zenkouho_dai", "", 0, + zenkouho_dai_c, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"select_jikouho", "", 0, + select_jikouho, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"select_jikouho_dai", "", 0, + select_jikouho_dai, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"kill", "", 1, + NULL, kill_c, NULL, NULL, NULL, + t_kill, t_kill, NULL, NULL, NULL, + '\0'}, + {"yank", "", 1, + NULL, yank_c, NULL, NULL, NULL, + t_yank, t_yank, NULL, NULL, NULL, + '\0'}, + {"yank_e", "", 1, + NULL, yank_c, NULL, yank_c, NULL, + t_yank, t_yank, NULL, NULL, NULL, + '\0'}, + {"bunsetu_nobasi", "", 0, + enlarge_bunsetsu, NULL, forward, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"bunsetu_chijime", "", 0, + smallen_bunsetsu, NULL, tijime, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"jisho_utility", "", 0, + jutil_c, jutil_c, jutil_c, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"jisho_utility_e", "", 0, + jutil_c, jutil_c, jutil_c, jutil_c, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"touroku", "", 1, + touroku_c, touroku_c, touroku_c, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"touroku_e", "", 1, + touroku_c, touroku_c, touroku_c, touroku_c, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"kakutei", "", 1, + kakutei, kakutei, kakutei, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"sainyuuryoku", "", 1, + NULL, remember_me, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"sainyuuryoku_e", "", 1, + NULL, remember_me, NULL, remember_me, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"kuten", "", 0, + NULL, kuten, NULL, NULL, NULL, + kuten, kuten, NULL, NULL, NULL, + '\0'}, + {"kuten_e", "", 0, + NULL, kuten, NULL, kuten, NULL, + kuten, kuten, NULL, NULL, NULL, + '\0'}, + {"jis", "", 0, + NULL, jis, NULL, NULL, NULL, + jis, jis, NULL, NULL, NULL, + '\0'}, + {"jis_e", "", 0, + NULL, jis, NULL, jis, NULL, + jis, jis, NULL, NULL, NULL, + '\0'}, + {"redraw_line", "", 1, + reset_line, reset_line, reset_line, NULL, reset_line, + reset_line, reset_line, NULL, NULL, NULL, + '\0'}, + {"redraw_line_e", "", 1, + reset_line, reset_line, reset_line, reset_line, reset_line, + reset_line, reset_line, NULL, NULL, NULL, + '\0'}, + {"previous_history_e", "", 1, + NULL, previous_history, NULL, previous_history, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"previous_history", "", 1, + NULL, previous_history, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"next_history_e", "", 1, + NULL, next_history, NULL, next_history, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"next_history", "", 1, + NULL, next_history, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, +/*{ "touroku_mark_set", "", 0, + NULL, NULL, NULL, NULL, NULL, + t_markset, NULL, NULL, NULL, NULL, + '\0'}, */ + {"touroku_mark_set", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"touroku_return", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, t_ret, NULL, NULL, NULL, + '\0'}, + {"quit", "", 0, + NULL, NULL, NULL, NULL, quit_select, + t_quit, t_quit, NULL, NULL, quit_select, + '\0'}, + {"touroku_jump_forward", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, t_jmp_forward, NULL, NULL, NULL, + '\0'}, + {"touroku_jump_backward", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, t_jmp_backward, NULL, NULL, NULL, + '\0'}, + {"change_to_insert_mode", "", 0, + insert_it_as_yomi, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"quote_e", "", 0, + NULL, quote, NULL, quote, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"quote", "", 0, + NULL, quote, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"send_ascii_char", "", 0, + send_ascii, send_ascii, send_ascii, send_ascii, send_ascii, + send_ascii, send_ascii, send_ascii, send_ascii, send_ascii, + '\0'}, + {"toggle_send_ascii_char", "", 0, + toggle_send_ascii, toggle_send_ascii, toggle_send_ascii, toggle_send_ascii, + toggle_send_ascii, + toggle_send_ascii, toggle_send_ascii, toggle_send_ascii, toggle_send_ascii, + toggle_send_ascii, + '\0'}, + {"not_send_ascii_char", "", 0, + not_send_ascii, not_send_ascii, not_send_ascii, not_send_ascii, not_send_ascii, + not_send_ascii, not_send_ascii, not_send_ascii, not_send_ascii, not_send_ascii, + '\0'}, + {"pop_send_ascii_char", "", 0, + pop_send_ascii, pop_send_ascii, pop_send_ascii, pop_send_ascii, pop_send_ascii, + pop_send_ascii, pop_send_ascii, pop_send_ascii, pop_send_ascii, pop_send_ascii, + '\0'}, + {"quote_send_ascii_char", "", 0, + NULL, NULL, NULL, quote_send_ascii_e, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"select_select", "", 0, + NULL, NULL, NULL, NULL, select_select, + NULL, NULL, NULL, NULL, select_select, + '\0'}, + {"lineend_select", "", 0, + NULL, NULL, NULL, NULL, lineend_select, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"linestart_select", "", 0, + NULL, NULL, NULL, NULL, linestart_select, + NULL, NULL, NULL, NULL, NULL, + '\0'}, +/*{ "previous_select", "", 0, + NULL, NULL, NULL, NULL, previous_select, + NULL, NULL, NULL, NULL, previous_select, + '\0'},*/ + {"previous_select", "", 0, + NULL, NULL, NULL, NULL, previous_select, + NULL, NULL, NULL, NULL, xw_back_inspect, + '\0'}, +/*{ "next_select", "", 0, + NULL, NULL, NULL, NULL, next_select, + NULL, NULL, NULL, NULL, NULL, + '\0'},*/ + {"next_select", "", 0, + NULL, NULL, NULL, NULL, next_select, + NULL, NULL, NULL, NULL, xw_next_inspect, + '\0'}, + {"backward_select", "", 0, + NULL, NULL, NULL, NULL, backward_select, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"forward_select", "", 0, + NULL, NULL, NULL, NULL, forward_select, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"reconnect_jserver", "", 0, + reconnect_server, reconnect_server, reconnect_server, reconnect_server, + reconnect_server, + reconnect_server, reconnect_server, reconnect_server, reconnect_server, + reconnect_server, + '\0'}, + {"henkan_on", "", 0, + henkan_off, henkan_off, henkan_off, henkan_off, henkan_off, + henkan_off, henkan_off, henkan_off, henkan_off, henkan_off, + '\0'}, + {"inspect", "", 0, + inspect_kouho, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"sakujo_kouho", "", 0, + sakujo_kouho, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"nobi_henkan_dai", "", 0, + NULL, NULL, nobi_henkan_dai, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"nobi_henkan", "", 0, + NULL, NULL, nobi_henkan, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"del_entry", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, inspectdel, + '\0'}, + {"use_entry", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, inspectuse, + '\0'}, + {"com_entry", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"kana_henkan", "", 1, + NULL, kankana_ren_henkan, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"hindo_set", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"ima_bit", "", 0, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + '\0'}, + {"change_locale", "", 0, + lang_c, lang_c, lang_c, lang_c, lang_c, + lang_c, lang_c, lang_c, lang_c, lang_c, + '\0'}, + {"change_locale_ct", "", 0, + lang_ct, lang_ct, lang_ct, lang_ct, lang_ct, + lang_ct, lang_ct, lang_ct, lang_ct, lang_ct, + '\0'} +}; +#endif /* XJUTIL */ + +int kansuu_hyo_entry_suu = sizeof (kansuu_hyo) / sizeof (struct kansuu); + +/** argument expansion. */ +static int +expand_argument (st) + char *st; +{ + int num; + + if (*st == '^') + { + num = (*(st + 1)) & 0x1f; + } + else if (*st == '0' || *st == '\\') + { + if (*(st + 1) == 'x' || *(st + 1) == 'X') + { + sscanf (st + 2, "%x", &num); + } + else + { + sscanf (st, "%o", &num); + } + } + else if (!('0' <= *st && *st <= '9')) + { + return (-1); + } + else + { + num = atoi (st); + } + if (num >= TBL_SIZE) + { + print_out1 ("In uumkey file, you can only bind a function to code less than %d.", (char *) TBL_SIZE); + return (-1); + } + return (num); +} + +static void +remove_key_bind (p) + register struct kansuu *p; +{ + register int tbl; + register int com; +#ifdef XJUTIL +#define MTABLE main_table +#else +#define MTABLE (m_table->m_table) + register MainTable *m_table; + + m_table = c_c->m_table; +#endif + + for (tbl = 0; tbl < TBL_CNT; tbl++) + { + if (p->func[tbl] != NULL) + { + for (com = 0; com < TBL_SIZE; com++) + { + if (MTABLE[tbl][com] == p->func[tbl]) + { + MTABLE[tbl][com] = (int (*)()) 0; + MTABLE[tbl][com] = 0; + } + } + } + } +} + +static struct kansuu * +find_entry (com_name, tbl) + char *com_name; + struct kansuu **tbl; +{ + register int k; + register struct kansuu **p; + + p = tbl + ((com_name[0] - 'a') * ONE_CHAR_TBL); + for (k = 0; k < ONE_CHAR_TBL && *p; k++, p++) + { + if (strcmp (com_name, (*p)->kansuumei) == 0) + { + if ((*p)->key_binded) + { + return (*p); + } + } + } + return (NULL); +} + +int +expand_expr (s, lang) + char *s, *lang; +{ + char tmp[EXPAND_PATH_LENGTH]; + register char *p, *s1; + int noerr, expandsuc; + struct passwd *u; + extern struct passwd *getpwnam (); + + if (*s != '~' && *s != '@') + { + strcpy (tmp, s); + *s = '\0'; + noerr = 1; + } + else + { + if ((int) strlen (s) >= EXPAND_PATH_LENGTH) + return (-1); + + s1 = s; + if (NULL != (p = index (++s1, '/'))) + { + strcpy (tmp, p); + *p = '\0'; + } + else + *tmp = '\0'; + if (*s == '~') + { + if (*s1) + { + noerr = expandsuc = (NULL != (u = getpwnam (s1)) && (int) (strlen (p = u->pw_dir) + strlen (tmp)) < EXPAND_PATH_LENGTH); + } + else + { + noerr = expandsuc = (NULL != (p = getenv ("HOME")) && (int) (strlen (p) + strlen (tmp)) < EXPAND_PATH_LENGTH); + } + } + else + { /* then, *s must be '@' */ + if (!strcmp (s1, "HOME")) + { + noerr = expandsuc = (NULL != (p = getenv ("HOME")) && (int) (strlen (p) + strlen (tmp)) < EXPAND_PATH_LENGTH); + } + else if (!strcmp (s1, "LIBDIR")) + { + noerr = expandsuc = ((int) (strlen (p = LIBDIR) + strlen (tmp)) < EXPAND_PATH_LENGTH); + } + else if (!strcmp (s1, "LANG")) + { + noerr = expandsuc = ((int) (strlen (p = lang) + strlen (tmp)) < EXPAND_PATH_LENGTH); + } + else + { /* @HOME, @LIBDIR igai ha kaenai */ + noerr = 1; + expandsuc = 0; + } + } + if (expandsuc) + strcpy (s, p); + } + + if (noerr) + { + int len = strlen ("@USR"); + int len1 = strlen ("@LANG"); + p = tmp; + for (; *p; p++) + { + if (!strncmp (p, "@USR", len)) + { + if ((int) (strlen (username) + strlen (p) + strlen (s) - len) < EXPAND_PATH_LENGTH) + { + strcat (s, username); + p += len - 1; + } + else + { + return (-1); + } + } + else if (!strncmp (p, "@LANG", len1)) + { + if ((int) (strlen (lang) + strlen (p) + strlen (s) - len) < EXPAND_PATH_LENGTH) + { + strcat (s, lang); + p += len1 - 1; + } + else + { + return (-1); + } + } + else + { + strncat (s, p, 1); + } + } + } + return (noerr ? 0 : -1); +} + +static int +key_binding (file_name, lang) + char *file_name; + char *lang; +{ + register int k, kk; + FILE *fp, *fopen (); + char func_name[64]; + int com_cnt; + int com_num; + char buf[256]; + char com_name[16][EXPAND_PATH_LENGTH]; + int lc = 0; + int tbl; + register struct kansuu **one_char_tbl, **p, *pp; + + if ((fp = fopen (file_name, "r")) == NULL) + { + print_out1 ("Key_binding file \"%s\" doesn't exist.", file_name); + return (-1); + } + if (!(p = (struct kansuu **) Calloc (ONE_CHAR_TBL * ('z' - 'a' + 1), sizeof (struct kansuu *)))) + { + malloc_error ("allocation of work area for key binding"); + fclose (fp); + return (-1); + } + one_char_tbl = p; + for (k = 0; k < kansuu_hyo_entry_suu; k++) + { + p = one_char_tbl + ((kansuu_hyo[k].kansuumei[0] - 'a') * ONE_CHAR_TBL); + for (kk = 0; *p && kk < ONE_CHAR_TBL; kk++, p++); + if (kk == ONE_CHAR_TBL) + { + print_out ("work area for key binding overflowed"); + Free (one_char_tbl); + fclose (fp); + return (-1); + } + *p = &kansuu_hyo[k]; + } + + for (tbl = 0; tbl < TBL_CNT; tbl++) + { + romkan_clear_tbl[tbl][rubout_code] = 0; + } + main_table[1][rubout_code] = rubout_c; + main_table[5][rubout_code] = t_rubout; + main_table[6][rubout_code] = t_rubout; + + lc = 0; + while (fgets (buf, 256, fp)) + { + lc += 1; + if ((*buf == ';') || (*buf == ':') || (*buf == '\n')) + continue; + if ((com_cnt = sscanf (buf, "%s %s %s %s %s %s %s %s %s %s %s", + func_name, com_name[0], com_name[1], com_name[2], com_name[3], com_name[4], com_name[5], com_name[6], com_name[7], com_name[8], com_name[9])) < 2) + { + print_out2 ("In uumkey file \"%s\", Line %d is illegal.", file_name, (char *) lc); + continue; /* every command needs at least 1 argument. */ + } + + if (strcmp (func_name, "include") == 0) + { + if (0 != expand_expr (com_name[0], lang)) + { + print_out3 ("In uumkey file \"%s\", %s %s.", file_name, com_name[0], msg_get (cd, 22, default_message[22], lang)); + } + key_binding (com_name[0], lang); + } + else if (strcmp (func_name, "unset") == 0) + { + if ((pp = find_entry (com_name[0], one_char_tbl)) != NULL) + { + pp->key_binded = 0; + remove_key_bind (pp); + } + else if (strcmp (com_name[0], "quote_keyin") == 0) + { +#ifndef XJUTIL + quote_code = -1; +#endif /* !XJUTIL */ + } + } + else if (strcmp (func_name, "quote_keyin") == 0) + { +#ifndef XJUTIL + if ((com_num = expand_argument (com_name[0])) < 0) + { + print_out3 ("In uumkey file \"%s\",%s is an inappropriate code for %s.", file_name, com_name[0], func_name); + fflush (stderr); + } + else + quote_code = com_num; +#endif /* !XJUTIL */ + } + else + { + p = one_char_tbl + ((func_name[0] - 'a') * ONE_CHAR_TBL); + for (k = 0; k < ONE_CHAR_TBL && *p; k++, p++) + { + if (strcmp (func_name, (*p)->kansuumei) == 0) + { /*found! */ + if ((*p)->key_binded) + remove_key_bind (*p); + (*p)->key_binded = (char) 1; + for (kk = 0; kk < com_cnt - 1; kk++) + { + com_num = expand_argument (com_name[kk]); + if (com_num < 0) + { + print_out3 ("In uumkey file \"%s\",%s is an inappropriate code for %s.", file_name, com_name[kk], func_name); + fflush (stderr); + } + else + { + for (tbl = 0; tbl < TBL_CNT; tbl++) + { + if ((main_table[tbl][com_num] != NULL) && ((*p)->func[tbl] != NULL)) + { + print_out7 ("In uumkey file \"%s\", %s(0x%x)%s at line %d (%s)(table No. %d).", + file_name, (char *) com_name[kk], (char *) com_num, (char *) msg_get (cd, 23, default_message[23], lang), (char *) lc, (*p)->kansuumei, (char *) tbl); + main_table[tbl][com_num] = (*p)->func[tbl]; + romkan_clear_tbl[tbl][com_num] = (*p)->romkan_flag; + } + else if ((*p)->func[tbl] != NULL) + { + main_table[tbl][com_num] = (*p)->func[tbl]; + romkan_clear_tbl[tbl][com_num] = (*p)->romkan_flag; + } + } + } + } + break; + } /* end of routine when command is founded. */ + } /* loop while command is founded */ + if (k == ONE_CHAR_TBL || !*p) + { + print_out2 ("In uumkey file \"%s\", unknown entry name %s.", file_name, func_name); + } + } + } + fclose (fp); + Free (one_char_tbl); + return (0); +} + +int +init_key_table (lang) + char *lang; +{ + FILE *fp = NULL, *fopen (); + char file_name[PATHNAMELEN]; + int j, k; + extern int fclose (); + +#ifdef XJUTIL + if (uumkey_name && *uumkey_name) + strcpy (file_name, uumkey_name); + if ((fp = fopen (file_name, "r")) != NULL) + { + fclose (fp); + } + else + { + print_out2 ("%s %s", msg_get (cd, 72, default_message[72], lang), CPFILE); + return (-1); + } +#else /* XJUTIL */ + /* from uumrc */ + if (uumkeyname != NULL && uumkeyname[0] != '\0') + { + strcpy (file_name, uumkeyname); + if (fp = fopen (file_name, "r")) + fclose (fp); + } + if (!fp) + { + if (strcpy (file_name, LIBDIR), strcat (file_name, "/"), strcat (file_name, lang), strcat (file_name, CPFILE), (fp = fopen (file_name, "r")) != NULL) + { + /* default */ + if (!(uumkeyname = alloc_and_copy (file_name))) + { + return (-1); + } + fclose (fp); + } + } + if (!fp) + { + print_out2 ("%s %s", msg_get (cd, 21, default_message[21], lang), CPFILE); + return (-1); + } + + if (!(c_c->m_table = (MainTable *) Malloc (sizeof (MainTable)))) + { + malloc_error ("allocation of buffer for key binding"); + return (-1); + } + c_c->m_table->re_count = 1; +#endif /* XJUTIL */ + for (j = 0; j < TBL_CNT; j++) + { + for (k = 0; k < TBL_SIZE; k++) + { + main_table[j][k] = (int (*)()) 0; + } + if (j < 3) + { + main_table[j][NEWLINE] = (int (*)()) 0; + main_table[j][CR] = (int (*)()) 0; + } + } + if (key_binding (file_name, lang) == -1) + return (-1); + return (0); +} + +/* + Local Variables: + eval: (setq kanji-flag t) + eval: (setq kanji-fileio-code 0) + eval: (mode-line-kanji-code-update) + End: +*/