Help <command> gives help information about individual commands.
authorAdam Dickmeiss <adam@indexdata.dk>
Thu, 18 Jan 1996 13:54:47 +0000 (13:54 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Thu, 18 Jan 1996 13:54:47 +0000 (13:54 +0000)
Status without arguments gives list of available predefined targets.

kernel/default.res
kernel/urp.c

index 5a3cf47..d82bb18 100644 (file)
@@ -1,5 +1,5 @@
 # Email gateway - general kernel resources
-# $Id: default.res,v 1.28 1995/07/20 08:16:36 adam Exp $
+# $Id: default.res,v 1.29 1996/01/18 13:54:47 adam Exp $
 #
 # Important directories, programs, etc.
 gw.reply.mta: /usr/lib/sendmail
@@ -200,6 +200,9 @@ gw.help.def:\n
 gw.help.account:\n
  \taccount <account>\n
  Sets authentication string. Necessary for some targets.\n
+gw.help.status:\n
+ \tstatus\n
+ Displays information about previous result sets and how they were obtained.\n
 gw.help.general: You 
  have triggered the "help"-information on the Email gateway. \n\n
  This preliminary service is a very early alpha release of a Email service
index 1f1315b..ff59ae0 100644 (file)
  * Europagate, 1995
  *
  * $Log: urp.c,v $
- * Revision 1.46  1995/07/28 10:51:09  adam
+ * Revision 1.47  1996/01/18 13:54:48  adam
+ * Help <command> gives help information about individual commands.
+ * Status without arguments gives list of available predefined targets.
+ *
+ * Revision 1.46  1995/07/28  10:51:09  adam
  * Bug fix: account from previous session had effect when new target command
  * was executed.
  *
@@ -380,33 +384,83 @@ static void help_general (void)
                              "Commands available in this service:\n"));
 }
 
+static struct command_word command_tab [] = 
+{
+{   "find",     "find"},
+{   "show",     "show"},
+{   "base",     "base" },
+{   "help",     "help" },
+{   "info",     "info" },
+{   "continue", "continue" },
+{   "status",   "status" },
+{   "stop",     "stop" },
+{   "target",   "target" },
+{   "def",      "def" },
+{   "account",  "account" },
+{   NULL, NULL }
+};
+
+
 static int exec_help (struct ccl_token *list)
 {
+    int no = 0;
     static char *sep = "-------------------------------\\n";
-    help_general ();
+    if (list->kind != CCL_TOK_EOL)
+        no = command_search_str (command_tab, list->name, list->len,
+                                 "ccl.command.");
+    if (!no)
+        help_general ();
 
-    put_esc_str (sep);
-    put_esc_str (gw_res_get (info.kernel_res, "gw.help.target",
-                             "target <name> - selects a given target\n"));
+    if (!no || no == 9)
+    {
+        put_esc_str (sep);
+        put_esc_str (gw_res_get (info.kernel_res, "gw.help.target",
+                                 "target <name> - selects a given target\n"));
+    }
 
-    put_esc_str (sep);
-    put_esc_str (gw_res_get (info.kernel_res, "gw.help.base",
+    if (!no || no == 3)
+    {
+        put_esc_str (sep);
+        put_esc_str (gw_res_get (info.kernel_res, "gw.help.base",
                              "base <base>..  - selects databases\n"));
+    }
+
+    if (!no || no == 1)
+    {
+        put_esc_str (sep);
+        put_esc_str (gw_res_get (info.kernel_res, "gw.help.find",
+                                 "find <query>   - performs a search\n"));
+    }
+
+    if (!no || no == 2)
+    {
+        put_esc_str (sep);
+        put_esc_str (gw_res_get (info.kernel_res, "gw.help.show",
+                                 "show <spec>    - retrieves and displays "
+                                 "records\n"));
+    }
+
+    if (!no || no == 10)
+    {
+        put_esc_str (sep);
+        put_esc_str (gw_res_get (info.kernel_res, "gw.help.def",
+                                 "def <setting> <value> user definitons\n"));
+    }
+
+    if (!no || no == 11)
+    {
+        put_esc_str (sep);
+        put_esc_str (gw_res_get (info.kernel_res, "gw.help.account",
+                                 "account <str>    sets authentication\n"));
+    }
+
+    if (!no || no == 7)
+    {
+        put_esc_str (sep);
+        put_esc_str (gw_res_get (info.kernel_res, "gw.help.status",
+                                 "status           status information\n"));
+    }
 
-    put_esc_str (sep);
-    put_esc_str (gw_res_get (info.kernel_res, "gw.help.find",
-                             "find <query>   - performs a search request\n"));
-
-    put_esc_str (sep);
-    put_esc_str (gw_res_get (info.kernel_res, "gw.help.show",
-                             "show <spec>    - retrieves and displays "
-                             "records\n"));
-    put_esc_str (sep);
-    put_esc_str (gw_res_get (info.kernel_res, "gw.help.def",
-                             "def <setting> <value> sets/gets definitons\n"));
-    put_esc_str (sep);
-    put_esc_str (gw_res_get (info.kernel_res, "gw.help.account",
-                             "account <str>    sets authentication string\n"));
     return 0;
 }
 
@@ -520,11 +574,43 @@ static int exec_account (struct ccl_token *list)
     return 0;
 }
 
+void handle_target_list (const char *name, const char *value)
+{
+    GwRes res;
+    const char *p;
+
+    if (strlen(name) < 10)
+        return;
+    if (memcmp (name, "gw.target.", 10))
+        return;
+    fprintf (reply_fd, "%s\n", name+10);
+    res = gw_res_init ();
+    gw_res_merge (res, value);
+    p = gw_res_get (res, "gw.description", NULL);
+    if (p)
+    {
+        put_esc_str (p);
+        put_esc_str ("\\n");
+    }
+    p = gw_res_get (res, "gw.databases", NULL);
+    if (p)
+        fprintf (reply_fd, "  Databases: %s\n", p);
+    fprintf (reply_fd, "\n");
+    gw_res_close (res);
+}
+
+static int exec_target_list (void)
+{
+    gw_res_trav (info.kernel_res, NULL, handle_target_list);
+    fprintf (reply_fd, "\n");
+    return 0;
+}
+
 static int exec_target (struct ccl_token *list)
 {
     int len;
     if (list->kind == CCL_TOK_EOL)
-        return -1;
+        return exec_target_list ();
     len = list->len;
     memcpy (info.target, list->name, len);
     info.target [len] = '\0';
@@ -983,22 +1069,6 @@ static int exec_def (struct ccl_token *list)
  */
 static int exec_command (const char *str, int *stop_flag)
 {
-    static struct command_word command_tab [] = 
-    {
-    {   "find",     "find"},
-    {   "show",     "show"},
-    {   "base",     "base" },
-    {   "help",     "help" },
-    {   "info",     "info" },
-    {   "continue", "continue" },
-    {   "status",   "status" },
-    {   "stop",     "stop" },
-    {   "target",   "target" },
-    {   "def",      "def" },
-    {   "account",  "account" },
-    {   NULL, NULL }
-    };
-
     struct ccl_token *cmd;
     const char *cp = str;
     int no;