yaubil.c
changeset 13 f4c15ad3cf93
parent 12 9f7256ede8fc
child 14 026c65e3e7d8
--- a/yaubil.c	Sun Apr 04 16:48:22 2010 +0300
+++ b/yaubil.c	Wed Apr 07 22:27:43 2010 +0300
@@ -38,7 +38,13 @@
 
 static module_info_t info_yaubil_experimental = {
 	.branch      = "experimental",
-	.api         = 15,
+#ifndef HAVE_CMD_ID
+	.api         = 20,
+#elif defined HAVE_CMD_SAFE
+	.api         = 24,
+#else
+	.api         = 23,
+#endif
 	.version     = PROJECT_VERSION,
 	.description = DESCRIPTION,
 	.requires    = NULL,
@@ -58,6 +64,23 @@
 	.next        = &info_yaubil_experimental,
 };
 
+#ifdef HAVE_CMD_ID
+static gpointer yaubil_multi_cmid = NULL;
+static gpointer yaubil_if_cmid    = NULL;
+static gpointer yaubil_then_cmid  = NULL;
+static gpointer yaubil_else_cmid  = NULL;
+static gpointer yaubil_eval_cmid  = NULL;
+static gpointer yaubil_let_cmid   = NULL;
+#ifdef HAVE_CMD_SAFE
+static gboolean yaubil_multi_set_safe = FALSE;
+static gboolean yaubil_if_set_safe    = FALSE;
+static gboolean yaubil_then_set_safe  = FALSE;
+static gboolean yaubil_else_set_safe  = FALSE;
+static gboolean yaubil_eval_set_safe  = FALSE;
+static gboolean yaubil_let_set_safe   = FALSE;
+#endif
+#endif
+
 static gboolean ifresult = TRUE;
 
 #define MSGPREFIX "yaubil: "
@@ -921,22 +944,68 @@
 
 static void yaubil_init (void)
 {
+#ifndef HAVE_CMD_ID
 	cmd_add ("multi", "", COMPL_CMD, COMPL_CMD, do_multi, NULL);
 	cmd_add ("if", "", 0, 0, do_if, NULL);
 	cmd_add ("then", "", COMPL_CMD, COMPL_CMD, do_then, NULL);
 	cmd_add ("else", "", COMPL_CMD, COMPL_CMD, do_else, NULL);
 	cmd_add ("eval", "", 0, 0, do_eval, NULL);
 	cmd_add ("let", "", 0, 0, do_let, NULL);
+#else
+	yaubil_multi_cmid = cmd_add ("multi", "", COMPL_CMD, COMPL_CMD, do_multi, NULL);
+	yaubil_if_cmid    = cmd_add ("if", "", 0, 0, do_if, NULL);
+	yaubil_then_cmid  = cmd_add ("then", "", COMPL_CMD, COMPL_CMD, do_then, NULL);
+	yaubil_else_cmid  = cmd_add ("else", "", COMPL_CMD, COMPL_CMD, do_else, NULL);
+	yaubil_eval_cmid  = cmd_add ("eval", "", 0, 0, do_eval, NULL);
+	yaubil_let_cmid   = cmd_add ("let", "", 0, 0, do_let, NULL);
+#ifdef HAVE_CMD_SAFE
+	yaubil_multi_set_safe = cmd_set_safe ("multi", TRUE);
+	yaubil_if_set_safe    = cmd_set_safe ("if", TRUE);
+	yaubil_then_set_safe  = cmd_set_safe ("then", TRUE);
+	yaubil_else_set_safe  = cmd_set_safe ("else", TRUE);
+	yaubil_eval_set_safe  = cmd_set_safe ("eval", TRUE);
+	yaubil_let_set_safe   = cmd_set_safe ("let", TRUE);
+#endif
+#endif
 }
 
 static void yaubil_uninit (void)
 {
+#ifndef HAVE_CMD_ID
 	cmd_del ("multi");
 	cmd_del ("if");
 	cmd_del ("then");
 	cmd_del ("else");
 	cmd_del ("eval");
 	cmd_del ("let");
+#else
+	if (yaubil_multi_cmid)
+		cmd_del (yaubil_multi_cmid);
+	if (yaubil_if_cmid)
+		cmd_del (yaubil_if_cmid);
+	if (yaubil_then_cmid)
+		cmd_del (yaubil_then_cmid);
+	if (yaubil_else_cmid)
+		cmd_del (yaubil_else_cmid);
+	if (yaubil_eval_cmid)
+		cmd_del (yaubil_eval_cmid);
+	if (yaubil_let_cmid)
+		cmd_del (yaubil_let_cmid);
+#ifdef HAVE_CMD_SAFE
+	if (yaubil_multi_set_safe)
+		cmd_set_safe ("multi", FALSE);
+	if (yaubil_if_set_safe)
+		cmd_set_safe ("if", FALSE);
+	if (yaubil_then_set_safe)
+		cmd_set_safe ("then", FALSE);
+	if (yaubil_else_set_safe)
+		cmd_set_safe ("else", FALSE);
+	if (yaubil_eval_set_safe)
+		cmd_set_safe ("eval", FALSE);
+	if (yaubil_let_set_safe)
+		cmd_set_safe ("let", FALSE);
+#endif
+#endif
 }
 
 /* The End */