Mercurial > freewnn
diff Xwnmo/xwnmo/prologue.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/prologue.c Thu Dec 13 04:30:14 2007 +0900 @@ -0,0 +1,394 @@ +/* + * $Id: prologue.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, 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 + */ +/* Standard Interface + * Initialize Routine + */ + +#include <stdio.h> +#include "commonhd.h" +#include "config.h" +#include "sdefine.h" +#include <X11/Xos.h> +#include "xim.h" +#include "sheader.h" +#include "ext.h" +#include "rk_spclval.h" +#include "rk_fundecl.h" + +extern char *getenv (); +extern FILE *fopen (); + +/** Initialize of romkan */ +int +open_romkan (ld) + XIMLangDataBase *ld; +{ + int rk_option_flg; + + rk_option_flg = RK_REDRAW | RK_CHMOUT | (excellent_delete ? 0 : RK_SIMPLD); + + if (ld->rk_table == NULL) + { + if ((ld->rk_table = romkan_table_init (NULL, ld->rkfile_name, NULL, bytcntfn, NULL, 0)) +/* + bytcntfn, letterpickfn, NULL, 0)) +*/ + == NULL) + { + return (-1); + } + } + cur_rk_table = ld->rk_table; + c_c->rk = (Romkan *) romkan_init5 (rubout_code, rk_option_flg); + if (c_c->rk == NULL) + return (-1); + else + { + c_c->rk->rk_table = cur_rk_table; + return (0); + } +} + + + +/** Open the wnnenvrc_R file */ +static int +get_envrc_name_reverse (str, lang) + char *str, *lang; +{ + extern int access (); + + if (c_c->cur_reverse_env == NULL || reverse_envrcname == NULL || reverse_envrcname[0] == '\0') + return (0); + strcpy (str, reverse_envrcname); + if (access (str, R_OK) == -1) + { + return (-1); + } + return (1); +} + +/** Open the wnnenvrc file */ +static int +get_envrc_name (str, lang) + char *str, *lang; +{ + if (c_c->cur_normal_env == NULL || envrcname == NULL || envrcname[0] == '\0') + { + strcpy (str, LIBDIR); + strcat (str, "/"); + strcat (str, lang); + strcat (str, ENVRCFILE); + } + else + { + strcpy (str, envrcname); + } + return (1); +} + +/* Allocate of Wnn Area */ +int +allocate_areas () +{ + char *area_start; + char *area_pter; + + int k; + int total_size; + int len1 = maxchg * sizeof (w_char); + int return_buf_len = len1 * 7; + + total_size = return_buf_len + len1 * 3 + maxbunsetsu * sizeof (int) * 3 + maxbunsetsu * sizeof (struct wnn_env *); + + if ((area_start = Malloc (total_size)) == NULL) + { + malloc_error ("allocation of Wnn's area"); + return (-1); + } + + area_pter = area_start; + return_buf = (w_char *) area_pter; + area_pter += return_buf_len; + input_buffer = (w_char *) area_pter; + area_pter += len1; + kill_buffer = (w_char *) area_pter; + area_pter += len1; + remember_buf = (w_char *) area_pter; + *remember_buf = 0; + area_pter += len1; + + bunsetsu = (int *) area_pter; + area_pter += maxbunsetsu * sizeof (int); + bunsetsuend = (int *) area_pter; + area_pter += maxbunsetsu * sizeof (int); + bunsetsu_env = (struct wnn_env **) area_pter; + area_pter += maxbunsetsu * sizeof (struct wnn_env *); + touroku_bnst = (int *) area_pter; + area_pter += maxbunsetsu * sizeof (int); + for (k = 0; k < maxbunsetsu; k++) + { + bunsetsu[k] = 0; + bunsetsuend[k] = 0; + touroku_bnst[k] = 0; + } + return (0); +} + +void +free_areas () +{ + Free (return_buf); +} + +static struct wnn_buf * +local_jl_open_lang () +{ + struct wnn_buf *buf; + register char **c, *p; + + if (!(p = Malloc (sizeof (struct wnn_buf) + sizeof (char *)))) + { + malloc_error ("allocation of work area for Wnn"); + return (NULL); + } + buf = (struct wnn_buf *) p; + p += sizeof (struct wnn_buf); + buf->bun_suu = 0; + buf->zenkouho_suu = 0; + buf->zenkouho_daip = 0; + buf->c_zenkouho = -1; + buf->zenkouho_bun = -1; + buf->zenkouho_end_bun = -1; + buf->free_heap = NULL; + c = (char **) p; + *c = NULL; + buf->heap = (char *) c; + buf->zenkouho_dai_suu = 0; + buf->msize_bun = 0; + buf->msize_zenkouho = 0; + buf->zenkouho_dai_suu = 0; + buf->bun = NULL; + buf->zenkouho_dai = NULL; + buf->zenkouho = NULL; + buf->down_bnst = NULL; + buf->zenkouho_dai = NULL; + buf->env = NULL; + return (buf); +} + +/** Connecting to jserver */ +int +connect_server (db) + XIMLangDataBase *db; +{ + char environment[PATHNAMELEN]; + char uumrc_name[PATHNAMELEN]; + register WnnEnv *p; + WnnEnv *save_cur_normal_env = NULL, *save_cur_reverse_env = NULL; + + if ((db->lang == NULL) || (db->connect_serv == False)) + { + if (c_c->normal_env == NULL) + { + if (get_new_env (c_c, NULL, 0) < 0) + return (-1); + } + c_c->use_server = 0; + c_c->cur_normal_env = c_c->normal_env; + uumrc_name[0] = '\0'; + if (!(bun_data_ = local_jl_open_lang ())) + return (-1); + return (0); + } + else + { + c_c->use_server = 1; + } + + if (c_c->cur_normal_env) + save_cur_normal_env = c_c->cur_normal_env; + for (p = c_c->normal_env; p; p = p->next) + { + c_c->cur_normal_env = p; + get_envrc_name (uumrc_name, db->lang); /* use username for env-name */ + environment[0] = '\0'; + strcpy (environment, username); + strcat (environment, p->env_name_str); + if (servername == NULL && def_servername && *def_servername) + { + servername = alloc_and_copy (def_servername); + } + if (bun_data_ == NULL) + { + bun_data_ = jl_open_lang (environment, servername, db->lang, uumrc_name, yes_or_no_lock, print_msg_wait, WNN_TIMEOUT); + if (!bun_data_) + { + if (wnn_errorno == WNN_ALLOC_FAIL) + { + malloc_error ("alloction of work area for Wnn"); + } + return (-1); + } + if (bun_data_->env != NULL) + { + env_normal = bun_data_->env; + } + } + else if (env_normal == 0 || jl_isconnect_e (env_normal) == 0) + { + env_normal = jl_connect_lang (environment, servername, db->lang, uumrc_name, yes_or_no_lock, print_msg_wait, WNN_TIMEOUT); + } + if (env_normal) + { + if (normal_sticky) + jl_env_sticky_e (env_normal); + else + jl_env_un_sticky_e (env_normal); + } + } + if (save_cur_normal_env) + { + c_c->cur_normal_env = save_cur_normal_env; + if (env_normal) + jl_env_set (bun_data_, env_normal); + } + if (c_c->normal_env == NULL) + { + if (get_new_env (c_c, NULL, 0) < 0) + return (-1); + c_c->use_server = 0; + c_c->cur_normal_env = c_c->normal_env; + uumrc_name[0] = '\0'; + if (!(bun_data_ = local_jl_open_lang ())) + return (-1); + } + + if (c_c->cur_reverse_env) + save_cur_reverse_env = c_c->cur_reverse_env; + for (p = c_c->reverse_env; p; p = p->next) + { + c_c->cur_reverse_env = p; + if (get_envrc_name_reverse (uumrc_name, db->lang) > 0) + { + environment[0] = '\0'; + strcpy (environment, username); + strcat (environment, p->env_name_str); + strcat (environment, "R"); + if (reverse_servername == NULL && def_reverse_servername && *def_reverse_servername) + { + reverse_servername = alloc_and_copy (def_reverse_servername); + } + env_reverse = jl_connect_lang (environment, reverse_servername, db->lang, uumrc_name, yes_or_no_lock, print_msg_wait, WNN_TIMEOUT); + if (env_reverse) + { + if (reverse_sticky) + jl_env_sticky_e (env_reverse); + else + jl_env_un_sticky_e (env_reverse); + } + } + } + if (save_cur_reverse_env) + c_c->cur_reverse_env = save_cur_reverse_env; +#ifdef USING_XJUTIL + if (!isstart_xjutil (db->lang)) + xjutil_start (); +#endif /* USING_XJUTIL */ + return (0); +} + +int +init_xcvtkey () +{ + char tmp_file[MAXPATHLEN]; + int ret; + + cvt_key_tbl_cnt = 0; + /* Backward compatibility for cvt_meta and cvt_fun. */ + if (cvt_fun_file && *cvt_fun_file) + { + if ((ret = cvt_meta_and_fun_setup (cvt_fun_file, cvt_key_tbl, NULL)) == -1) + { + print_out1 ("I can't open cvt_fun file \"%s\".", cvt_fun_file); + cvt_fun_file = NULL; + } + else + { + cvt_key_tbl_cnt = ret; + } + } + if (cvt_meta_file && *cvt_meta_file) + { + if ((ret = cvt_meta_and_fun_setup (cvt_meta_file, cvt_key_tbl, "Meta")) == -1) + { + print_out1 ("I can't open cvt_meta file \"%s\".", cvt_meta_file); + cvt_meta_file = NULL; + } + else + { + cvt_key_tbl_cnt = ret; + } + } + + if (cvt_key_file && *cvt_key_file) + { + if (cvt_key_setup (cvt_key_file) == -1) + { + print_out1 ("I can't open cvt_key file \"%s\", use default file.", cvt_key_file); + cvt_key_file = NULL; + } + } + if (cvt_key_file == NULL) + { + strcat (strcpy (tmp_file, LIBDIR), CVTKEYFILE); + if (!(cvt_key_file = alloc_and_copy (tmp_file))) + return (-1); + if (cvt_key_setup (cvt_key_file) == -1) + { + print_out1 ("I can't open default cvt_key file \"%s\".\n I don't convert function keys.", cvt_key_file); + Free (cvt_key_file); + cvt_key_file = NULL; + } + } + return (0); +}