diff Xwnmo/xjutil/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/xjutil/prologue.c	Thu Dec 13 04:30:14 2007 +0900
@@ -0,0 +1,332 @@
+/*
+ * $Id: prologue.c,v 1.2 2001/06/14 18:16:13 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 "jslib.h"
+#include "jd_sock.h"
+#include "commonhd.h"
+#include "config.h"
+#include "sdefine.h"
+#include "xjutil.h"
+#include "sxheader.h"
+#include "rk_spclval.h"
+#include "rk_fundecl.h"
+#include "xext.h"
+
+extern char *getenv ();
+extern FILE *fopen ();
+
+int
+open_romkan ()
+{
+  int rk_option_flg;
+  extern int keyin ();
+
+  if (rkfile_name == NULL)
+    return (-1);
+  cur_rk_table = romkan_table_init (NULL, rkfile_name, NULL, bytcntfn, NULL, 0);
+  rk_option_flg = RK_REDRAW | RK_CHMOUT | (excellent_delete ? 0 : RK_SIMPLD);
+
+  cur_rk = (Romkan *) romkan_init5 (rubout_code, rk_option_flg);
+  if (cur_rk == NULL)
+    {
+      return (-1);
+    }
+  else
+    {
+      return (0);
+    }
+}
+
+static 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;
+
+  if ((area_start = (char *) 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 (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);
+}
+
+int
+init_wnn ()
+{
+  if (init_key_table (xjutil->lang) == -1)
+    {
+      return (-1);
+    }
+
+  if (open_romkan () == -1)
+    {
+      return (-1);
+    }
+
+  if (allocate_areas () == -1)
+    {
+      return (-1);
+    }
+  return (0);
+}
+
+typedef struct _js_list_str
+{
+  WNN_JSERVER_ID *js;
+  char *host_name;
+  struct _js_list_str *next;
+}
+js_list_str;
+
+static js_list_str *js_list = NULL;
+
+static WNN_JSERVER_ID *
+find_same_js (host_name)
+     char *host_name;
+{
+  js_list_str *j;
+
+  if (!host_name || !*host_name)
+    {
+      for (j = js_list; j; j = j->next)
+        {
+          if (js_list->host_name == NULL)
+            return (js_list->js);
+        }
+      return (NULL);
+    }
+  else
+    {
+      for (j = js_list; j; j = j->next)
+        {
+          if (!strcmp (js_list->host_name, host_name))
+            return (js_list->js);
+        }
+      return (NULL);
+    }
+}
+
+static int
+add_same_js (js, host_name)
+     WNN_JSERVER_ID *js;
+     char *host_name;
+{
+  js_list_str *j;
+
+  if (!(j = (js_list_str *) Malloc (sizeof (js_list_str))))
+    return (-1);
+  j->js = js;
+  j->host_name = host_name;
+  j->next = js_list;
+  js_list = j;
+  return (0);
+}
+
+int
+connect_server ()
+{
+  register WNN_JSERVER_ID *js = NULL;
+  char *machine_n;
+  WnnEnv *p;
+  int i;
+  char environment[PATHNAMELEN];
+  extern char *_wnn_get_machine_of_serv_defs ();
+
+  for (i = 0, p = normal_env; p; p = p->next, i++)
+    {
+      cur_normal_env = p;
+      js = NULL;
+      if (!p->host_name || !*p->host_name)
+        {
+          if (machine_n = _wnn_get_machine_of_serv_defs (xjutil->lang))
+            {
+              p->host_name = alloc_and_copy (machine_n);
+              if (js = find_same_js (p->host_name))
+                goto NEXT_STEP1;
+              if ((js = js_open_lang (p->host_name, xjutil->lang, WNN_TIMEOUT)) == NULL)
+                {
+                  p->host_name = NULL;
+                }
+            }
+          if (!p->host_name || !*p->host_name)
+            {
+              p->host_name = alloc_and_copy ("unix");
+            }
+        }
+      if (js = find_same_js (p->host_name))
+        goto NEXT_STEP1;
+      if (js == NULL)
+        {
+          if ((js = js_open_lang (p->host_name, xjutil->lang, WNN_TIMEOUT)) == NULL)
+            {
+              return (-1);
+            }
+        }
+      add_same_js (js, p->host_name);
+    NEXT_STEP1:
+      environment[0] = '\0';
+      strcpy (environment, username);
+      strcat (environment, p->env_name_str);
+      if ((p->env = js_connect_lang (js, environment, xjutil->lang)) == NULL)
+        {
+          return (-1);
+        }
+      save_env_id[i] = p->env->env_id;
+    }
+  for (i = 0, p = reverse_env; p; p = p->next, i++)
+    {
+      cur_reverse_env = p;
+      js = NULL;
+      if (!p->host_name || !*p->host_name)
+        {
+          if (machine_n = _wnn_get_machine_of_serv_defs (xjutil->lang))
+            {
+              p->host_name = alloc_and_copy (machine_n);
+              if (js = find_same_js (p->host_name))
+                goto NEXT_STEP2;
+              if ((js = js_open_lang (p->host_name, xjutil->lang, WNN_TIMEOUT)) == NULL)
+                {
+                  p->host_name = NULL;
+                }
+            }
+          if (!p->host_name || !*p->host_name)
+            {
+              p->host_name = alloc_and_copy ("unix");
+            }
+        }
+      if (js = find_same_js (p->host_name))
+        goto NEXT_STEP2;
+      if (js == NULL)
+        {
+          if ((js = js_open_lang (p->host_name, xjutil->lang, WNN_TIMEOUT)) == NULL)
+            {
+              return (-1);
+            }
+        }
+      add_same_js (js, p->host_name);
+    NEXT_STEP2:
+      environment[0] = '\0';
+      strcpy (environment, username);
+      strcat (environment, p->env_name_str);
+      if ((p->env = js_connect_lang (js, environment, xjutil->lang)) == NULL)
+        {
+          return (-1);
+        }
+      save_env_id[i] = p->env->env_id;
+    }
+  return (0);
+}
+
+int
+init_xcvtkey ()
+{
+  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)) == -1)
+        {
+          fprintf (stderr, "File \"%s\" can't open.", cvt_fun_file);
+        }
+      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)) == -1)
+        {
+          fprintf (stderr, "File \"%s\" can't open.", cvt_meta_file);
+        }
+      else
+        {
+          cvt_key_tbl_cnt = ret;
+        }
+    }
+  if (cvt_key_file && *cvt_key_file)
+    {
+      if (cvt_key_setup (cvt_key_file) == -1)
+        {
+          fprintf (stderr, "File \"%s\" can't open.", cvt_key_file);
+        }
+    }
+  return (0);
+}