* 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.
*
"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;
}
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';
*/
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;