X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzebrash.c;h=ecf3c9e3945ce8b4de3626decc238de4d2115912;hb=c6d31ee570fabe247e8b1fe708d04b9684cf43e3;hp=37dbdb13011d0689fabed32879309eb6a97a945f;hpb=322abc688457f766fbcfe5598cd83a2fbc5d0c4c;p=idzebra-moved-to-github.git diff --git a/index/zebrash.c b/index/zebrash.c index 37dbdb1..ecf3c9e 100644 --- a/index/zebrash.c +++ b/index/zebrash.c @@ -1,5 +1,5 @@ /* zebrash.c - command-line interface to zebra API - * $ID$ + * $Id: zebrash.c,v 1.11 2003-06-23 14:35:41 heikki Exp $ * * Copyrigth 2003 Index Data Aps * @@ -7,7 +7,7 @@ #include #include -#include +#include #include #if HAVE_READLINE_READLINE_H @@ -32,7 +32,7 @@ ZebraService zs=0; /* our global handle to zebra */ ZebraHandle zh=0; /* the current session */ - /* time being, only one session works */ +/* time being, only one session works */ /************************************** * Help functions @@ -43,121 +43,134 @@ static int split_args( char *line, char** args ) { /* splits line into individual null-terminated strings, * returns pointers to them in args */ /* FIXME - do we need to handle quoted args ?? */ - char *p=line; - int i=0; - int n=0; - args[0]=0; /* by default */ - while (*p==' ' || *p=='\t' || *p=='\n') - p++; - while (*p) - { + char *p=line; + int i=0; + int n=0; + args[0]=0; /* by default */ while (*p==' ' || *p=='\t' || *p=='\n') - p++; - if (*p=='#') /* skip comments */ - break; - args[i++]=p; - args[i]=0; - while (*p && *p!=' ' && *p!='\t' && *p!='\n' && *p!='#') - p++; - *p++='\0'; - } - n=i; - while (n1) - args[0]= line + (args[1]-argbuf); /* rest of the line */ - else - args[0]=""; - return ((cmds[i].testfunc)(args,outbuff)); + const char *cp = args[i]; + printf ("args %d :%s:\n", i, cp ? cp : ""); + } +#endif + if (0==n) + return -90; /* no command on line, too bad */ + + if (0==strcmp(args[0],"expect")) + { + char *rest; + if (n>1) + rest= line + (args[1]-argbuf); /* rest of the line */ + else + return -1; /* need something to expect */ + printf("expecting '%s'\n",rest); /*!*/ + if (0==strstr(prevout,rest)) + { + printf( "Failed expectation, '%s' not found\n"); + exit(9); + } + return 0; } - sprintf (outbuff, "Unknown command '%s'. Try help",args[0] ); - return -1; -} - - static int cmd_help( char *args[], char *outbuff) - { - int i; - char tmp[MAX_ARG_LEN]; - if (args[1]) - { /* help for a single command */ - for (i=0;cmds[i].cmd;i++) - if (0==strcmp(cmds[i].cmd, args[1])) - { - strcat(outbuff,cmds[i].cmd); - strcat(outbuff," "); - strcat(outbuff,cmds[i].args); - strcat(outbuff,"\n"); - strcat(outbuff,cmds[i].explanation); - strcat(outbuff,"\n"); - return 0; - } - strcat(outbuff, "Unknown command "); - strcat(outbuff, args[1] ); - } - else - { /* list all commands */ - strcpy(tmp," "); for (i=0;cmds[i].cmd;i++) - if (cmds[i].explanation) - { - /* sprintf(tmp, "%s %s %s\n", - cmds[i].cmd, cmds[i].args, cmds[i].explanation); - */ - strcat(tmp, cmds[i].cmd); - strcat(tmp," "); - if (!*cmds[i].cmd) - { - strcat(outbuff, tmp); - strcat(outbuff,"\n"); - strcpy(tmp," "); - if (*cmds[i].args) - { - strcat(outbuff, cmds[i].args); - strcat(outbuff,"\n"); - } - } - if (strlen(tmp)>50) - { - strcat(outbuff,tmp); - strcat(outbuff,"\n"); - strcpy(tmp," "); - } - } - strcat(outbuff,tmp); - } - return 0; - } + if (0==strcmp(cmds[i].cmd, args[0])) + { + if (n>1) + args[0]= line + (args[1]-argbuf); /* rest of the line */ + else + args[0]=""; + return ((cmds[i].testfunc)(args,outbuff)); + } + strcat(outbuff, "Unknown command '"); + strcat(outbuff,args[0] ); + strcat(outbuff,"'. Try help"); + logf(LOG_APP,"Unknown command"); + return -90; +} +static int cmd_help( char *args[], char *outbuff) +{ + int i; + char tmp[MAX_ARG_LEN]; + if (args[1]) + { /* help for a single command */ + for (i=0;cmds[i].cmd;i++) + if (0==strcmp(cmds[i].cmd, args[1])) + { + strcat(outbuff,cmds[i].cmd); + strcat(outbuff," "); + strcat(outbuff,cmds[i].args); + strcat(outbuff,"\n"); + strcat(outbuff,cmds[i].explanation); + strcat(outbuff,"\n"); + return 0; + } + strcat(outbuff, "Unknown command "); + strcat(outbuff, args[1] ); + } + else + { /* list all commands */ + strcpy(tmp," "); + for (i=0;cmds[i].cmd;i++) + if (cmds[i].explanation) + { + /* sprintf(tmp, "%s %s %s\n", + cmds[i].cmd, cmds[i].args, cmds[i].explanation); + */ + strcat(tmp, cmds[i].cmd); + strcat(tmp," "); + if (!*cmds[i].cmd) + { + strcat(outbuff, tmp); + strcat(outbuff,"\n"); + strcpy(tmp," "); + if (*cmds[i].args) + { + strcat(outbuff, cmds[i].args); + strcat(outbuff,"\n"); + } + } + if (strlen(tmp)>50) + { + strcat(outbuff,tmp); + strcat(outbuff,"\n"); + strcpy(tmp," "); + } + } + strcat(outbuff,tmp); + } + return 0; +} +/* If Zebra reports an error after an operation, + * append it to the outbuff and log it */ +static void Zerrors ( char *outbuff) +{ + int ec; + char tmp[MAX_OUT_BUFF]; + if (!zh) + return ; + ec=zebra_errCode (zh); + if (ec) + { + sprintf(tmp, " Zebra error %d: %s, (%s)", + ec, zebra_errString (zh), + zebra_errAdd (zh) ); + strcat(outbuff, tmp); + strcat(outbuff, "\n"); + logf(LOG_APP, tmp); + zebra_clearError(zh); + } +} + /************************************** * The shell */ void shell() { - int rc=0; - while (rc!=-99) - { - char buf[MAX_ARG_LEN]; - char outbuff[MAX_OUT_BUFF]; + int rc=0; + char tmp[MAX_ARG_LEN]; + char outbuff[MAX_OUT_BUFF]=""; + char prevout[MAX_OUT_BUFF]=""; /* previous output for 'expect' */ + while (rc!=-99) + { + char buf[MAX_ARG_LEN]; #if HAVE_READLINE_READLINE_H - char* line_in; - line_in=readline(PROMPT); - if (!line_in) + char* line_in; + line_in=readline(PROMPT); + if (!line_in) break; #if HAVE_READLINE_HISTORY_H - if (*line_in) + if (*line_in) add_history(line_in); #endif - if(strlen(line_in) > MAX_ARG_LEN-1) { + if(strlen(line_in) > MAX_ARG_LEN-1) { fprintf(stderr,"Input line too long\n"); break; - }; - strcpy(buf,line_in); - free (line_in); + }; + strcpy(buf,line_in); + free (line_in); #else - printf (PROMPT); - fflush (stdout); - if (!fgets (buf, MAX_ARG_LEN-1, stdin)) - break; + printf (PROMPT); + fflush (stdout); + if (!fgets (buf, MAX_ARG_LEN-1, stdin)) + break; #endif - outbuff[0]='\0'; - rc=onecommand(buf, outbuff); + + strncpy(prevout, outbuff, MAX_OUT_BUFF); + outbuff[0]='\0'; + rc=onecommand(buf, outbuff, prevout); + if (rc==0) + { + strcat(outbuff, " OK\n"); + logf(LOG_APP, "OK"); + } + else if (rc>-90) + { + sprintf(tmp, " command returned %d\n",rc); + strcat(outbuff,tmp); + } + Zerrors(outbuff); printf("%s\n", outbuff); - } - - } - + } /* while */ +} /* shell() */ + /************************************** * Main @@ -409,6 +660,6 @@ void shell() int main (int argc, char ** args) { - shell(); - return 0; + shell(); + return 0; } /* main */