X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=client%2Fclient.c;h=1057b99373e2fed4dd30655c99dc2d6f1b84e502;hp=248115a43bf25352cda7b2488186d3f81424e99e;hb=88941d4a9e272daca9323cd19bf4829b6d32871b;hpb=8ad1f962f612a8a14a0b1abad080fd18987caf4e diff --git a/client/client.c b/client/client.c index 248115a..1057b99 100644 --- a/client/client.c +++ b/client/client.c @@ -4,7 +4,17 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: client.c,v $ - * Revision 1.42 1996-10-08 10:44:57 quinn + * Revision 1.45 1997-05-14 06:53:29 adam + * C++ support. + * + * Revision 1.44 1997/05/05 11:20:35 adam + * Client uses "options" utility and marc dump filename may be specified + * as an option (-m ). + * + * Revision 1.43 1996/11/08 11:03:26 adam + * Client accepts multiple database names. + * + * Revision 1.42 1996/10/08 10:44:57 quinn * Resolved conflicts. * * Revision 1.41 1996/10/07 15:29:03 quinn @@ -154,6 +164,7 @@ #include #include #include +#include #include @@ -166,7 +177,8 @@ static ODR out, in, print; /* encoding and decoding streams */ static COMSTACK conn = 0; /* our z-association */ static Z_IdAuthentication *auth = 0; /* our current auth definition */ -static char database[512] = "Default"; /* Database name */ +static char *databaseNames[128]; +static int num_databaseNames = 0; static int setnumber = 0; /* current result set number */ static int smallSetUpperBound = 0; static int largeSetLowerBound = 1; @@ -181,7 +193,6 @@ static Z_InitResponse *session = 0; /* session parameters */ static char last_scan[512] = "0"; static char last_cmd[100] = "?"; static FILE *marcdump = 0; -static char marcdump_file[512] = "marc.out"; typedef enum { QueryType_Prefix, @@ -362,7 +373,7 @@ static void display_variant(Z_Variant *v, int level) for (i = 0; i < v->num_triples; i++) { - printf("%*sclass=%d,type=%d", level * 4, "", *v->triples[i]->class, + printf("%*sclass=%d,type=%d", level * 4, "", *v->triples[i]->zclass, *v->triples[i]->type); if (v->triples[i]->which == Z_Triple_internationalString) printf(",value=%s\n", v->triples[i]->value.internationalString); @@ -494,7 +505,12 @@ static void display_record(Z_DatabaseRecord *p) if (ent->value == VAL_SOIF) printf("%.*s", r->u.octet_aligned->len, r->u.octet_aligned->buf); else if (r->which == Z_External_octet && p->u.octet_aligned->len) - marc_display ((char*)p->u.octet_aligned->buf, stdout); + { + const char *marc_buf = (char*)p->u.octet_aligned->buf; + marc_display (marc_buf, stdout); + if (marcdump) + fwrite (marc_buf, strlen (marc_buf), 1, marcdump); + } else if (ent->value == VAL_SUTRS) { if (r->which != Z_External_sutrs) @@ -581,7 +597,6 @@ static int send_searchRequest(char *arg) { Z_APDU *apdu = zget_APDU(out, Z_APDU_searchRequest); Z_SearchRequest *req = apdu->u.searchRequest; - char *databaseNames = database; Z_Query query; #if CCL2RPN struct ccl_rpn_node *rpn; @@ -637,8 +652,8 @@ static int send_searchRequest(char *arg) req->smallSetElementSetNames = req->mediumSetElementSetNames = elementSetNames; } - req->num_databaseNames = 1; - req->databaseNames = &databaseNames; + req->num_databaseNames = num_databaseNames; + req->databaseNames = databaseNames; req->query = &query; @@ -745,12 +760,30 @@ static int cmd_status(char *arg) static int cmd_base(char *arg) { + int i; + char *cp; + if (!*arg) { - printf("Usage: base \n"); + printf("Usage: base ...\n"); return 0; } - strcpy(database, arg); + for (i = 0; inum_ranges = 1; #endif - - - - - - - - - req->resultSetStartPoint = &setno; req->numberOfRecordsRequested = &nos; prefsyn.proto = protocol; @@ -879,7 +903,7 @@ int cmd_cancel(char *arg) Z_APDU *apdu = zget_APDU(out, Z_APDU_triggerResourceControlRequest); Z_TriggerResourceControlRequest *req = apdu->u.triggerResourceControlRequest; - bool_t false = 0; + bool_t rfalse = 0; if (!session) { @@ -892,7 +916,7 @@ int cmd_cancel(char *arg) return 0; } *req->requestedAction = Z_TriggerResourceCtrl_cancel; - req->resultSetWanted = &false; + req->resultSetWanted = &rfalse; send_apdu(apdu); printf("Sent cancel request\n"); @@ -903,10 +927,9 @@ int send_scanrequest(char *string, int pp, int num) { Z_APDU *apdu = zget_APDU(out, Z_APDU_scanRequest); Z_ScanRequest *req = apdu->u.scanRequest; - char *db = database; - req->num_databaseNames = 1; - req->databaseNames = &db; + req->num_databaseNames = num_databaseNames; + req->databaseNames = databaseNames; req->termListAndStartPoint = p_query_scan(out, protocol, &req->attributeSet, string); req->numberOfTermsRequested = # @@ -1300,15 +1323,36 @@ static int client(int wait) int main(int argc, char **argv) { + char *prog = *argv; + char *arg; + int ret; + int opened = 0; + initialize(); - if (argc > 1) - cmd_open(argv[1]); - else - printf(C_PROMPT); - if (*marcdump_file && !(marcdump = fopen(marcdump_file, "a"))) + cmd_base("Default"); + + while ((ret = options("m:", argv, argc, &arg)) != -2) { - perror(marcdump_file); - exit(1); + switch (ret) + { + case 0: + cmd_open (arg); + opened = 1; + break; + case 'm': + if (!(marcdump = fopen (arg, "a"))) + { + perror (arg); + exit (1); + } + break; + default: + fprintf (stderr, "Usage: %s [-m ] []\n", + prog); + exit (1); + } } - return client((argc > 1)); + if (!opened) + printf (C_PROMPT); + return client (opened); }