diff Wnn/jutil/wnnkill.c @ 0:bbc77ca4def5

initial import
author Yoshiki Yazawa <yaz@cc.rim.or.jp>
date Thu, 13 Dec 2007 04:30:14 +0900
parents
children a7ccf412ba02
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Wnn/jutil/wnnkill.c	Thu Dec 13 04:30:14 2007 +0900
@@ -0,0 +1,284 @@
+/*
+ *  $Id: wnnkill.c,v 1.10 2005/01/30 17:14:20 aonoto 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 FreeWnn Project 1999, 2000, 2002, 2004, 2005
+ *
+ * Maintainer:  FreeWnn Project   <freewnn@tomo.gr.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 of the License, 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef lint
+static char *rcs_id = "$Id: wnnkill.c,v 1.10 2005/01/30 17:14:20 aonoto Exp $";
+#endif /* lint */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <stdio.h>
+#if STDC_HEADERS
+#  include <stdlib.h>
+#  include <string.h>
+#elif HAVE_STRINGS_H
+#  include <strings.h>
+#endif /* STDC_HEADERS */
+#if HAVE_UNISTD_H
+#  include <unistd.h>
+#endif
+#include <stdarg.h>		/* assume ANSI-C */
+#include "jllib.h"
+#include "jslib.h"
+#include "jd_sock.h"
+#include "commonhd.h"
+#include "wnn_config.h"
+#include "wnn_os.h"
+
+WNN_JSERVER_ID *js;
+struct wnn_ret_buf rb = { 0, NULL };
+#define BUFSTRLEN 1024
+
+#ifdef JAPANESE
+int ocode = TTY_KCODE;
+#endif
+#ifdef  CHINESE
+#ifdef  TAIWANESE
+int ocode = (TTY_TCODE + 6);
+#else /* TAIWANESE */
+int ocode = (TTY_CCODE + 4);
+#endif /* TAIWANESE */
+#endif /* CHINESE */
+#ifdef KOREAN
+int ocode = TTY_HCODE;
+#endif
+
+static void out (const char* format, ...);
+static void usage (char *prog);
+
+int
+main (int argc, char** argv)
+{
+  int c;
+  char *serv;
+  int x;
+  static char lang[64] = { 0 };
+  char *server_env = NULL;
+  char *prog = argv[0];
+  extern char *_wnn_get_machine_of_serv_defs (), *get_server_env ();
+
+/*
+  char* p;
+
+    if ((p = getenv("LANG")) != NULL) {
+        strcpy(lang, p);
+           lang[5] = '\0';
+    } else {
+        lang[0] = '\0';
+    }
+
+    if (*lang == '\0')
+*/
+  strcpy (lang, WNN_DEFAULT_LANG);
+
+#ifdef JAPANESE
+#  define OPTSTRING "USJL:"
+#endif
+#ifdef  CHINESE
+#  define OPTSTRING "USJBCL:"
+#endif /* CHINESE */
+#ifdef KOREAN
+#  define OPTSTRING "UL:"
+#endif
+
+  while ((c = getopt (argc, argv, OPTSTRING)) != EOF)
+    {
+      switch (c)
+        {
+        case 'U':
+#ifdef JAPANESE
+          ocode = J_EUJIS;
+#endif
+#ifdef CHINESE
+          ocode = C_EUGB;
+#endif
+#ifdef KOREAN
+          ocode = K_EUKSC;
+#endif
+          break;
+#ifdef JAPANESE
+        case 'J':
+          ocode = J_JIS;
+          break;
+        case 'S':
+          ocode = J_SJIS;
+          break;
+#endif
+#ifdef  CHINESE
+        case 'B':
+          ocode = (C_BIG5 + 6);
+          break;
+        case 'C':
+          ocode = (C_ECNS11643 + 6);
+          break;
+#endif /* CHINESE */
+        case 'L':
+          strcpy (lang, optarg);
+          break;
+        default:
+	  usage (prog);
+	  exit (1);
+          break;
+        }
+    }
+  if (optind)
+    {
+      optind--;
+      argc -= optind;
+      argv += optind;
+    }
+
+  if ((server_env = get_server_env (lang)) == NULL)
+    {
+      server_env = WNN_DEF_SERVER_ENV;
+    }
+  if (argc > 1)
+    {
+      serv = argv[1];
+    }
+  else if (!(serv = getenv (server_env)))
+    {
+      serv = "";
+    }
+
+  if (!*serv)
+    {
+      if (serv = _wnn_get_machine_of_serv_defs (lang))
+        {
+          if ((js = js_open_lang (serv, lang, WNN_TIMEOUT)) == NULL)
+            {
+              serv = "";
+            }
+        }
+    }
+  if (js == NULL && (js = js_open_lang (serv, lang, WNN_TIMEOUT)) == NULL)
+    {
+      out ("%s:", prog);
+      if (serv && *serv)
+        out ("%s", serv);
+      out ("%s\n", wnn_perror_lang (lang));
+/*      fprintf(stderr, "Can't connect to jserver.\n"); */
+      exit (255);
+    }
+  if ((x = js_kill (js)) > 0)
+    {
+      if (x == 1)
+	out ("%d User Exists.\n", x);
+      else
+	out ("%d Users Exist.\n", x);
+      out ("%s Not Killed.\n", server_env);
+      exit (1);
+    }
+  else if (x == 0)
+    {
+      out ("%s Terminated\n", server_env);
+      exit (0);
+    }
+  else
+    {
+      out ("%s Terminated\n", server_env);
+      exit (2);
+    }
+  exit (0);
+}
+
+#ifdef JAPANESE
+extern int eujis_to_jis8 (), eujis_to_sjis ();
+#endif
+#ifdef CHINESE
+extern int ecns_to_big5 ();
+#endif
+
+static void
+out (const char* format, ...)
+{
+  va_list ap;
+  char buf[BUFSTRLEN];
+  char jbuf[BUFSTRLEN];
+  int len;
+
+  va_start (ap, format);
+#ifdef HAVE_SNPRINTF	/* Should also have vsnprintf */
+  vsnprintf (buf, BUFSTRLEN, format, ap);
+#else
+  vsprintf (buf, format, ap);	/* Dangerous */
+#endif /* HAVE_SNPRINTF */
+  va_end (ap);
+  len = strlen (buf);
+
+  switch (ocode)
+    {
+#ifdef JAPANESE
+    case J_EUJIS:
+#endif
+#ifdef  CHINESE
+    case (C_EUGB + 4):
+    case (C_ECNS11643 + 6):
+#endif /* CHINESE */
+#ifdef KOREAN
+    case K_EUKSC:
+#endif
+      strncpy (jbuf, buf, len + 1);
+      break;
+#ifdef JAPANESE
+    case J_JIS:
+      eujis_to_jis8 (jbuf, buf, len + 1);
+      break;
+    case J_SJIS:
+      eujis_to_sjis (jbuf, buf, len + 1);
+      break;
+#endif
+#ifdef  CHINESE
+    case (C_BIG5 + 6):
+      ecns_to_big5 (jbuf, buf, len + 1);
+      break;
+#endif /* CHINESE */
+    }
+  fprintf (stderr, "%s", jbuf);
+}
+
+static void
+usage (char *prog)
+{
+  fprintf (stderr, "Usage: %s [-%s] [-L lang] [hostname]\n", prog,
+#if defined(JAPANESE)
+	   "USJ"
+#elif defined(CHINESE)
+	   "USJBC"
+#elif defined(KOREAN)
+	   "U"
+#else
+	   "<Unexpected Situation!>"
+#endif
+	  );
+}