/* zebrash.c - command-line interface to zebra API
- * $ID$
+ * $Id: zebrash.c,v 1.6 2003-02-12 15:45:59 heikki Exp $
*
* Copyrigth 2003 Index Data Aps
*
sscanf(a," %i", &v);
return v;
}
+
+int onecommand( char *line, char *outbuff);
/**************************************
* Simple support commands
{
if (!zs)
strcat(outbuff,"zebra seems not to have been started, "
- "stopping anyway");
+ "stopping anyway\n");
zebra_stop(zs);
zs=0;
return 0; /* ok */
{
if (!zs)
strcat(outbuff,"zebra seems not to have been started, "
- "trying anyway");
+ "trying anyway\n");
zh=zebra_open(zs);
return 0; /* ok */
}
{
if (!zh)
strcat(outbuff,"Seems like you have not called zebra_open,"
- "trying anyway");
+ "trying anyway\n");
zebra_close(zh);
return 0; /* ok */
}
static int cmd_quickstart( char *args[], char *outbuff)
{
- cmd_zebra_start(args,outbuff);
- cmd_zebra_open(args,outbuff);
- yaz_log_init_file("zebrash.log");
- yaz_log_init_prefix("ZebraSh");
- strcat(outbuff,"Started zebra, log in zebrash.log");
- return 0; /* ok */
+ char tmp[128];
+ onecommand("yaz_log_file zebrash.log",outbuff);
+ onecommand("yaz_log_prefix ZebraSh", outbuff);
+ sprintf(tmp, "yaz_log_level 0x%x", LOG_DEFAULT_LEVEL | LOG_APP);
+ onecommand(tmp,outbuff);
+ logf(LOG_APP,"quickstart");
+ onecommand("zebra_start",outbuff);
+ onecommand("zebra_open",outbuff);
+ onecommand("select_database Default",outbuff);
+ strcat(outbuff,"ok\n");
+ return 0;
}
/**************************************
{
char *fn = defarg(args[1],0);
char tmp[255];
- sprintf(tmp, "sending yaz-log to %s ",fn);
+ sprintf(tmp, "sending yaz-log to %s\n",fn);
strcat(outbuff, tmp);
yaz_log_init_file(fn);
return 0; /* ok */
{
int lev = defargint(args[1],LOG_DEFAULT_LEVEL);
char tmp[255];
- sprintf(tmp, "setting yaz-log to level %d (ox%x)",lev,lev);
+ sprintf(tmp, "setting yaz-log to level %d (ox%x)\n",lev,lev);
strcat(outbuff, tmp);
yaz_log_init_level(lev);
return 0; /* ok */
{
char *pref = defarg(args[1],"ZebraSh");
char tmp[255];
- sprintf(tmp, "setting yaz-log prefix to %s",pref);
+ sprintf(tmp, "setting yaz-log prefix to %s\n",pref);
strcat(outbuff, tmp);
yaz_log_init_prefix(pref);
return 0; /* ok */
static int cmd_errcode ( char *args[], char *outbuff)
{
char tmp[MAX_OUT_BUFF];
- sprintf(tmp, "errCode: %d ",
+ sprintf(tmp, "errCode: %d \n",
zebra_errCode (zh));
strcat(outbuff, tmp);
return 0; /* ok */
static int cmd_errstr ( char *args[], char *outbuff)
{
char tmp[MAX_OUT_BUFF];
- sprintf(tmp, "errStr: %s",
+ sprintf(tmp, "errStr: %s\n",
zebra_errString (zh));
strcat(outbuff, tmp);
return 0; /* ok */
return 0; /* ok */
}
+/**************************************
+ * Admin commands
+ */
+
+static int cmd_init ( char *args[], char *outbuff)
+{
+ zebra_init(zh);
+ return 0; /* ok */
+}
+
+static int cmd_select_database ( char *args[], char *outbuff)
+{
+ char *db=args[1];
+ if (!db)
+ db="Default";
+ return zebra_select_database(zh, args[1]);
+}
/**************************************
* Command table, parser, and help
"[filename]",
"Directs the log to filename (or stderr)",
cmd_yaz_log_file },
- { "yaz_log_file",
+ { "yaz_log_level",
"[level]",
"Sets the logging level (or returns to default)",
cmd_yaz_log_level },
"Displays zebra's additional error message",
cmd_erradd},
+ { "", "Admin:","", 0},
+ { "init", "",
+ "Initializes the zebra database, destroying all data in it",
+ cmd_init},
+ { "select_database", "basename",
+ "Selects a database",
+ cmd_select_database},
+
{ "", "Misc:","", 0},
{ "echo", "string",
"ouputs the string",
int n;
char argbuf[MAX_ARG_LEN];
int rc;
+ logf(LOG_APP,"%s",line);
strncpy(argbuf,line, MAX_ARG_LEN-1);
argbuf[MAX_ARG_LEN-1]='\0'; /* just to be sure */
n=split_args(argbuf, args);
if (0==n)
- return 0; /* no command on line, too bad */
+ return -1; /* no command on line, too bad */
for (i=0;cmds[i].cmd;i++)
if (0==strcmp(cmds[i].cmd, args[0]))
{
args[0]="";
return ((cmds[i].testfunc)(args,outbuff));
}
- sprintf (outbuff, "Unknown command '%s'. Try help",args[0] );
- return -1;
+ strcat(outbuff, "Unknown command '");
+ strcat(outbuff,args[0] );
+ strcat(outbuff,"'. Try help");
+ logf(LOG_APP,"Unknown command");
+ return -2;
}
static int cmd_help( char *args[], char *outbuff)
{
int i;
char tmp[MAX_ARG_LEN];
- if (args[1])
- { /* help for a single command */
+ if (args[1])
+ { /* help for a single command */
for (i=0;cmds[i].cmd;i++)
if (0==strcmp(cmds[i].cmd, args[1]))
{
}
/* If Zebra reports an error after an operation,
- * append it to the outbuff */
+ * append it to the outbuff and log it */
static void Zerrors ( char *outbuff)
{
int ec;
ec=zebra_errCode (zh);
if (ec)
{
- sprintf(tmp, "Zebra error %d: %s, (%s) \n",
+ sprintf(tmp, "Zebra error %d: %s, (%s)",
ec, zebra_errString (zh),
zebra_errAdd (zh) );
strcat(outbuff, tmp);
+ strcat(outbuff, "\n");
+ logf(LOG_APP, tmp);
}
}
void shell()
{
int rc=0;
+ char tmp[MAX_ARG_LEN];
while (rc!=-99)
{
char buf[MAX_ARG_LEN];
printf (PROMPT);
fflush (stdout);
if (!fgets (buf, MAX_ARG_LEN-1, stdin))
- break;
+ break;
#endif
outbuff[0]='\0';
rc=onecommand(buf, outbuff);
+ if (rc==0)
+ {
+ strcat(outbuff, "OK\n");
+ logf(LOG_APP, "OK");
+ }
+ else if (rc > 0)
+ {
+ sprintf(tmp, "command returned %d\n",rc);
+ strcat(outbuff,tmp);
+ }
Zerrors(outbuff);
printf("%s\n", outbuff);
- }
-
- }
-
+ } /* while */
+} /* shell() */
+
/**************************************
* Main