*** empty log message ***
authorhanda <handa>
Fri, 15 Sep 2006 01:53:26 +0000 (01:53 +0000)
committerhanda <handa>
Fri, 15 Sep 2006 01:53:26 +0000 (01:53 +0000)
m17n-imconf.c [new file with mode: 0644]
run-im.c [deleted file]

diff --git a/m17n-imconf.c b/m17n-imconf.c
new file mode 100644 (file)
index 0000000..d24aa26
--- /dev/null
@@ -0,0 +1,322 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <m17n.h>
+#include <m17n-misc.h>
+
+MPlist *error_invalid_format;
+MPlist *error_unknown_command;
+MPlist *error_invalid_arg;
+MPlist *error_command_fail;
+MPlist *error_lock_fail;
+
+MSymbol Merror, Mvalue;
+MSymbol Meval_function;
+
+#define ERROR(msg)             \
+  do {                         \
+    m17n_object_ref (msg);     \
+    return msg;                        \
+  } while (0)
+
+MPlist *eval (MPlist *);
+
+#define INTEGERP(plist) (mplist_key (plist) == Minteger)
+#define SYMBOLP(plist) (mplist_key (plist) == Msymbol)
+#define MTEXTP(plist) (mplist_key (plist) == Mtext)
+#define PLISTP(plist) (mplist_key (plist) == Mplist)
+#define TAILP(plist) (mplist_key (plist) == Mnil)
+
+MPlist *eval_help (MPlist *arg);
+
+MPlist *
+eval_set (MPlist *arg)
+{
+  MSymbol var;
+
+  if (! SYMBOLP (arg))
+    ERROR (error_invalid_arg);
+  var = mplist_value (arg);
+  arg = mplist_next (arg);
+  if (TAILP (arg))
+    msymbol_put (var, Mvalue, NULL);
+  else if (PLISTP (arg))
+    msymbol_put (var, Mvalue, eval (mplist_value (arg)));
+  else
+    {
+      m17n_object_ref (arg);
+      msymbol_put (var, Mvalue, arg);
+    }
+  return NULL;
+}
+
+MPlist *
+eval_open (MPlist *arg)
+{
+  MSymbol lang, name;
+  MInputMethod *im;;
+
+  if (! SYMBOLP (arg))
+    ERROR (error_invalid_arg);
+  lang = mplist_value (arg);
+  arg = mplist_next (arg);
+  if (! SYMBOLP (arg))
+    ERROR (error_invalid_arg);
+  name = mplist_value (arg);
+  im = minput_open_im (lang, name, Mnil);
+  arg = mplist ();
+  mplist_add (arg, Mt, im);
+  return arg;
+}
+
+MPlist *
+eval_close (MPlist *arg)
+{
+  MPlist *value;
+
+  if (! SYMBOLP (arg))
+    ERROR (error_invalid_arg);
+  value = msymbol_get (mplist_value (arg), Mvalue);
+  if (! value)
+    ERROR (error_invalid_arg);
+  minput_close_im (mplist_value (value));
+  return NULL;
+}
+
+MPlist *
+parse_arg_common (MPlist *arg, MSymbol *lang, MSymbol *name, MSymbol *target)
+{
+  if (TAILP (arg))
+    *lang = Mt, *name = Mnil, *target = Mnil;
+  else
+    {
+      if (! SYMBOLP (arg))
+       return NULL;
+      *lang = mplist_value (arg);
+      arg = mplist_next (arg);
+      if (! SYMBOLP (arg))
+       return NULL;
+      *name = mplist_value (arg);
+      arg = mplist_next (arg);
+      if (SYMBOLP (arg))
+       {
+         *target = mplist_value (arg);
+         arg = mplist_next (arg);
+       }
+      else if (TAILP (arg))
+       *target = Mnil;
+      else
+       return NULL;
+    }
+  return arg;
+}
+
+MPlist *
+call_get_common (MPlist *(*func) (MSymbol, MSymbol, MSymbol), MPlist *arg)
+{
+  MSymbol lang, name, target;
+
+  arg = parse_arg_common (arg, &lang, &name, &target);
+  if (! arg)
+    ERROR (error_invalid_arg);
+  if (! TAILP (arg))
+    return arg;
+  arg = func (lang, name, target);
+  if (! arg)
+    ERROR (error_command_fail);
+  /* Prevent it be freed.  */
+  m17n_object_ref (arg);
+  return arg;
+}
+
+MPlist *
+eval_get_command (MPlist *arg)
+{
+  return call_get_common (minput_get_command, arg);
+}
+
+MPlist *
+eval_get_variable (MPlist *arg)
+{
+  return call_get_common (minput_get_variable, arg);
+}
+
+MPlist *
+call_config_common (int (*func) (MSymbol, MSymbol, MSymbol, MPlist *),
+                   MPlist *arg)
+{
+  MSymbol lang, name, target;
+
+  arg = parse_arg_common (arg, &lang, &name, &target);
+  if (! arg)
+    ERROR (error_invalid_arg);
+  if (TAILP (arg))
+    arg = NULL;
+  if (func (lang, name, target, arg) < 0)
+    ERROR (error_command_fail);
+  return NULL;
+}
+
+MPlist *
+eval_config_command (MPlist *arg)
+{
+  return call_config_common (minput_config_command, arg);
+}
+
+MPlist *
+eval_config_variable (MPlist *arg)
+{
+  return call_config_common (minput_config_variable, arg);
+}
+
+MPlist *
+eval_save_config (MPlist *arg)
+{
+  int ret = minput_save_config ();
+
+  if (ret < 0)
+    ERROR (error_command_fail);
+  if (ret == 0)
+    ERROR (error_lock_fail);
+  return NULL;
+}
+
+struct EvalFunc {
+  MPlist *(*eval_func) (MPlist *arg);
+  char *form;
+} eval_functions[] =
+  { {eval_help, "help"},
+    {eval_set, "set SYMBOL FORM"},
+    {eval_open, "open LANG NAME"},
+    {eval_close, "close SYMBOL"},
+    {eval_get_command, "get-command [LANG NAME [COMMAND]]"},
+    {eval_config_command, "config-command LANG NAME [COMMAND [(KEY ...) ...]]"},
+    {eval_get_variable, "get-variable [LANG NAME [VARIABLE]]"},
+    {eval_config_variable, "config-variable LANG NAME [VARIABLE [VALUE]]"},
+    {eval_save_config, "save-config"} };
+
+MPlist *
+eval_help (MPlist *arg)
+{
+  int i;
+
+  printf ("Valid FORMs are:\n");
+  for (i = 0; i < (sizeof eval_functions) / (sizeof eval_functions[0]); i++)
+    printf ("  %s\n", eval_functions[i].form);
+  printf ("  SYMBOL -- print the value of SYMBOL\n");
+  return NULL;
+}
+
+MPlist *
+eval (MPlist *plist)
+{
+  MSymbol cmd;
+  struct EvalFunc *eval_func;
+
+  if (! SYMBOLP (plist))
+    ERROR (error_invalid_format);
+  cmd = mplist_value (plist);
+  eval_func = msymbol_get (cmd, Meval_function);
+  if (! eval_func)
+    {
+      if (mplist_key (mplist_next (plist)) == Mnil)
+       {
+         MPlist *value = msymbol_get (cmd, Mvalue);
+
+         if (value)
+           return value;
+       }
+      ERROR (error_unknown_command);
+    }
+
+  return eval_func->eval_func (mplist_next (plist));
+}
+
+void
+init (void)
+{
+  M17N_INIT ();
+
+  Merror = msymbol ("error");
+  Mvalue = msymbol ("value");
+
+  Meval_function = msymbol ("eval-function");
+  msymbol_put (msymbol ("help"), Meval_function, eval_functions + 0);
+  msymbol_put (msymbol ("set"), Meval_function, eval_functions + 1);
+  msymbol_put (msymbol ("open"), Meval_function, eval_functions + 2);
+  msymbol_put (msymbol ("close"), Meval_function, eval_functions + 3);
+  msymbol_put (msymbol ("get-command"), Meval_function, eval_functions + 4);
+  msymbol_put (msymbol ("config-command"), Meval_function, eval_functions + 5);
+  msymbol_put (msymbol ("get-variable"), Meval_function, eval_functions + 6);
+  msymbol_put (msymbol ("config-variable"), Meval_function, eval_functions + 7);
+  msymbol_put (msymbol ("save-config"), Meval_function, eval_functions + 8);
+
+  error_invalid_format = mplist ();
+  mplist_add (error_invalid_format, Msymbol, Merror);
+  mplist_add (error_invalid_format, Msymbol, msymbol ("invalid-format"));
+
+  error_unknown_command = mplist ();
+  mplist_add (error_unknown_command, Msymbol, Merror);
+  mplist_add (error_unknown_command, Msymbol, msymbol ("unknwon-command"));
+
+  error_invalid_arg = mplist ();
+  mplist_add (error_invalid_arg, Msymbol, Merror);
+  mplist_add (error_invalid_arg, Msymbol, msymbol ("invalid-argument"));
+
+  error_command_fail = mplist ();
+  mplist_add (error_command_fail, Msymbol, Merror);
+  mplist_add (error_command_fail, Msymbol, msymbol ("command-fail"));
+
+  error_lock_fail = mplist ();
+  mplist_add (error_lock_fail, Msymbol, Merror);
+  mplist_add (error_lock_fail, Msymbol, msymbol ("lock-fail"));
+}
+
+void
+fini (void)
+{
+  m17n_object_unref (error_invalid_format);
+  m17n_object_unref (error_unknown_command);
+  m17n_object_unref (error_invalid_arg);
+  m17n_object_unref (error_command_fail);
+  m17n_object_unref (error_lock_fail);
+
+  M17N_FINI ();
+}
+
+int
+main ()
+{
+  char line[256];
+
+  init ();
+
+  while (printf ("> ") && fgets (line, 256, stdin) != NULL)
+    {
+      MText *mt;
+      MPlist *plist, *val;
+      int len = strlen (line);
+
+      if (line[len - 1] == '\n')
+       line[--len] = '\0';
+      if (len == 0)
+       continue;
+
+      mt = mtext_from_data (line, len, MTEXT_FORMAT_US_ASCII);
+      plist = mplist_deserialize (mt);
+      val = eval (plist);
+
+      if (val)
+       {
+         mdebug_dump_plist (val, 0);
+         putc ('\n', stderr);
+         fflush (stderr);
+         m17n_object_unref (val);
+       }
+      m17n_object_unref (plist);
+      m17n_object_unref (mt);
+    }
+
+  fini ();
+  exit (0);
+}
diff --git a/run-im.c b/run-im.c
deleted file mode 100644 (file)
index 63bbf3e..0000000
--- a/run-im.c
+++ /dev/null
@@ -1,346 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <m17n.h>
-#include <m17n-misc.h>
-
-MPlist *error_invalid_format;
-MPlist *error_unknown_command;
-MPlist *error_invalid_arg;
-MPlist *error_command_fail;
-MPlist *error_lock_fail;
-
-MSymbol Merror, Mvalue;
-MSymbol Meval_function;
-
-#define ERROR(msg)             \
-  do {                         \
-    m17n_object_ref (msg);     \
-    return msg;                        \
-  } while (0)
-
-MPlist *eval (MPlist *);
-
-#define INTEGERP(plist) (mplist_key (plist) == Minteger)
-#define SYMBOLP(plist) (mplist_key (plist) == Msymbol)
-#define MTEXTP(plist) (mplist_key (plist) == Mtext)
-#define PLISTP(plist) (mplist_key (plist) == Mplist)
-#define TAILP(plist) (mplist_key (plist) == Mnil)
-
-MPlist *eval_help (MPlist *arg);
-
-MPlist *
-eval_set (MPlist *arg)
-{
-  MSymbol var;
-
-  if (! SYMBOLP (arg))
-    ERROR (error_invalid_arg);
-  var = mplist_value (arg);
-  arg = mplist_next (arg);
-  if (TAILP (arg))
-    msymbol_put (var, Mvalue, NULL);
-  else if (PLISTP (arg))
-    msymbol_put (var, Mvalue, eval (mplist_value (arg)));
-  else
-    {
-      m17n_object_ref (arg);
-      msymbol_put (var, Mvalue, arg);
-    }
-  return NULL;
-}
-
-MPlist *
-eval_open (MPlist *arg)
-{
-  MSymbol lang, name;
-  MInputMethod *im;;
-
-  if (! SYMBOLP (arg))
-    ERROR (error_invalid_arg);
-  lang = mplist_value (arg);
-  arg = mplist_next (arg);
-  if (! SYMBOLP (arg))
-    ERROR (error_invalid_arg);
-  name = mplist_value (arg);
-  im = minput_open_im (lang, name, Mnil);
-  arg = mplist ();
-  mplist_add (arg, Mt, im);
-  return arg;
-}
-
-MPlist *
-eval_close (MPlist *arg)
-{
-  MPlist *value;
-
-  if (! SYMBOLP (arg))
-    ERROR (error_invalid_arg);
-  value = msymbol_get (mplist_value (arg), Mvalue);
-  if (! value)
-    ERROR (error_invalid_arg);
-  minput_close_im (mplist_value (value));
-  return NULL;
-}
-
-MPlist *
-eval_get_command (MPlist *arg)
-{
-  MSymbol lang, name, command;
-
-  if (! SYMBOLP (arg))
-    ERROR (error_invalid_arg);
-  lang = mplist_value (arg);
-  arg = mplist_next (arg);
-  if (! SYMBOLP (arg))
-    ERROR (error_invalid_arg);
-  name = mplist_value (arg);
-  arg = mplist_next (arg);
-  if (SYMBOLP (arg))
-    command = mplist_value (arg);
-  else if (TAILP (arg))
-    command = Mnil;
-  else
-    ERROR (error_invalid_arg);
-  arg = minput_get_command (lang, name, command);
-  if (arg)
-    m17n_object_ref (arg);
-  return arg;
-}
-
-MPlist *
-eval_config_command (MPlist *arg)
-{
-  MSymbol lang, name, command;
-  MPlist *keyseq;
-
-  if (! SYMBOLP (arg))
-    ERROR (error_invalid_arg);
-  lang = mplist_value (arg);
-  arg = mplist_next (arg);
-  if (! SYMBOLP (arg))
-    ERROR (error_invalid_arg);
-  name = mplist_value (arg);
-  arg = mplist_next (arg);
-  if (SYMBOLP (arg))
-    {
-      command = mplist_value (arg);
-      arg = mplist_next (arg);
-    }
-  else if (TAILP (arg))
-    command = Mnil;
-  else
-    ERROR (error_invalid_arg);
-  if (PLISTP (arg))
-    keyseq = arg;
-  else
-    keyseq = NULL;
-  if (minput_config_command (lang, name, command, keyseq) < 0)
-    ERROR (error_command_fail);
-  return NULL;
-}
-
-MPlist *
-eval_get_variable (MPlist *arg)
-{
-  MSymbol lang, name, variable;
-
-  if (! SYMBOLP (arg))
-    ERROR (error_invalid_arg);
-  lang = mplist_value (arg);
-  arg = mplist_next (arg);
-  if (! SYMBOLP (arg))
-    ERROR (error_invalid_arg);
-  name = mplist_value (arg);
-  arg = mplist_next (arg);
-  if (SYMBOLP (arg))
-    variable = mplist_value (arg);
-  else if (TAILP (arg))
-    variable = Mnil;
-  else
-    ERROR (error_invalid_arg);
-  arg = minput_get_variable (lang, name, variable);
-  if (arg)
-    m17n_object_ref (arg);
-  return arg;
-}
-
-MPlist *
-eval_config_variable (MPlist *arg)
-{
-  MSymbol lang, name, variable;
-
-  if (! SYMBOLP (arg))
-    ERROR (error_invalid_arg);
-  lang = mplist_value (arg);
-  arg = mplist_next (arg);
-  if (! SYMBOLP (arg))
-    ERROR (error_invalid_arg);
-  name = mplist_value (arg);
-  arg = mplist_next (arg);
-  if (SYMBOLP (arg))
-    {
-      variable = mplist_value (arg);
-      arg = mplist_next (arg);
-    }
-  else if (TAILP (arg))
-    variable = Mnil;
-  else
-    ERROR (error_invalid_arg);
-  if (TAILP (arg))
-    arg = NULL;
-  if (minput_config_variable (lang, name, variable, arg) < 0)
-    ERROR (error_command_fail);
-  return NULL;
-}
-
-MPlist *
-eval_save_config (MPlist *arg)
-{
-  int ret = minput_save_config ();
-
-  if (ret < 0)
-    ERROR (error_command_fail);
-  if (ret == 0)
-    ERROR (error_lock_fail);
-  return NULL;
-}
-
-struct EvalFunc {
-  MPlist *(*eval_func) (MPlist *arg);
-  char *form;
-} eval_functions[] =
-  { {eval_help, "help"},
-    {eval_set, "set SYMBOL FORM"},
-    {eval_open, "open LANG NAME"},
-    {eval_close, "close SYMBOL"},
-    {eval_get_command, "get-command LANG NAME [COMMAND]"},
-    {eval_config_command, "config-command LANG NAME [COMMAND [(KEY ...) ...]]"},
-    {eval_get_variable, "get-variable LANG NAME [VARIABLE]"},
-    {eval_config_variable, "config-variable LANG NAME [VARIABLE [VALUE]]"},
-    {eval_save_config, "save-config"} };
-
-MPlist *
-eval_help (MPlist *arg)
-{
-  int i;
-
-  printf ("Valid FORMs are:\n");
-  for (i = 0; i < (sizeof eval_functions) / (sizeof eval_functions[0]); i++)
-    printf ("  %s\n", eval_functions[i].form);
-  printf ("  SYMBOL -- print the value of SYMBOL\n");
-  return NULL;
-}
-
-MPlist *
-eval (MPlist *plist)
-{
-  MSymbol cmd;
-  struct EvalFunc *eval_func;
-
-  if (! SYMBOLP (plist))
-    ERROR (error_invalid_format);
-  cmd = mplist_value (plist);
-  eval_func = msymbol_get (cmd, Meval_function);
-  if (! eval_func)
-    {
-      if (mplist_key (mplist_next (plist)) == Mnil)
-       {
-         MPlist *value = msymbol_get (cmd, Mvalue);
-
-         if (value)
-           return value;
-       }
-      ERROR (error_unknown_command);
-    }
-
-  return eval_func->eval_func (mplist_next (plist));
-}
-
-void
-init (void)
-{
-  M17N_INIT ();
-
-  Merror = msymbol ("error");
-  Mvalue = msymbol ("value");
-
-  Meval_function = msymbol ("eval-function");
-  msymbol_put (msymbol ("help"), Meval_function, eval_functions + 0);
-  msymbol_put (msymbol ("set"), Meval_function, eval_functions + 1);
-  msymbol_put (msymbol ("open"), Meval_function, eval_functions + 2);
-  msymbol_put (msymbol ("close"), Meval_function, eval_functions + 3);
-  msymbol_put (msymbol ("get-command"), Meval_function, eval_functions + 4);
-  msymbol_put (msymbol ("config-command"), Meval_function, eval_functions + 5);
-  msymbol_put (msymbol ("get-variable"), Meval_function, eval_functions + 6);
-  msymbol_put (msymbol ("config-variable"), Meval_function, eval_functions + 7);
-  msymbol_put (msymbol ("save-config"), Meval_function, eval_functions + 8);
-
-  error_invalid_format = mplist ();
-  mplist_add (error_invalid_format, Msymbol, Merror);
-  mplist_add (error_invalid_format, Msymbol, msymbol ("invalid-format"));
-
-  error_unknown_command = mplist ();
-  mplist_add (error_unknown_command, Msymbol, Merror);
-  mplist_add (error_unknown_command, Msymbol, msymbol ("unknwon-command"));
-
-  error_invalid_arg = mplist ();
-  mplist_add (error_invalid_arg, Msymbol, Merror);
-  mplist_add (error_invalid_arg, Msymbol, msymbol ("invalid-argument"));
-
-  error_command_fail = mplist ();
-  mplist_add (error_command_fail, Msymbol, Merror);
-  mplist_add (error_command_fail, Msymbol, msymbol ("command-fail"));
-
-  error_lock_fail = mplist ();
-  mplist_add (error_lock_fail, Msymbol, Merror);
-  mplist_add (error_lock_fail, Msymbol, msymbol ("lock-fail"));
-}
-
-void
-fini (void)
-{
-  m17n_object_unref (error_invalid_format);
-  m17n_object_unref (error_unknown_command);
-  m17n_object_unref (error_invalid_arg);
-  m17n_object_unref (error_command_fail);
-
-  M17N_FINI ();
-}
-
-int
-main ()
-{
-  char line[256];
-
-  init ();
-
-  while (printf ("> ") && fgets (line, 256, stdin) != NULL)
-    {
-      MText *mt;
-      MPlist *plist, *val;
-      int len = strlen (line);
-
-      if (line[len - 1] == '\n')
-       line[--len] = '\0';
-      if (len == 0)
-       continue;
-
-      mt = mtext_from_data (line, len, MTEXT_FORMAT_US_ASCII);
-      plist = mplist_deserialize (mt);
-      val = eval (plist);
-
-      if (val)
-       {
-         mdebug_dump_plist (val, 0);
-         putc ('\n', stderr);
-         fflush (stderr);
-         m17n_object_unref (val);
-       }
-      m17n_object_unref (plist);
-      m17n_object_unref (mt);
-    }
-
-  fini ();
-  exit (0);
-}