X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=client%2Fclient.c;h=5edf45746e526876b7d29abc578a083c61d5f70d;hp=4f6cd7913e767652c63093d75b8dcec14d9dc326;hb=6c5cedfce30df58be034fd3555ae6935b3023882;hpb=5c03aa670c7420063f751a66e200987ea4bf40eb diff --git a/client/client.c b/client/client.c index 4f6cd79..5edf457 100644 --- a/client/client.c +++ b/client/client.c @@ -1,11 +1,41 @@ /* - * Copyright (c) 1995, Index Data. + * Copyright (c) 1995-1996, Index Data. * See the file LICENSE for details. * Sebastian Hammer, Adam Dickmeiss * * $Log: client.c,v $ - * Revision 1.33 1996-05-09 07:25:22 quinn - * Sm + * 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 + * Work + * + * Revision 1.40 1996/08/29 14:19:34 quinn + * Fixed conflict (CVS) + * + * Revision 1.39 1996/08/27 10:43:22 quinn + * Made select() optional + * + * Revision 1.38 1996/08/12 14:09:11 adam + * Default prefix query attribute set defined by using p_query_attset. + * + * Revision 1.37 1996/07/06 19:58:29 quinn + * System headerfiles gathered in yconfig + * + * Revision 1.36 1996/06/10 08:53:47 quinn + * Added Summary + * + * Revision 1.35 1996/06/03 09:45:50 quinn + * Added display of OIDs in the GRS routine. + * + * Revision 1.34 1996/05/09 07:26:49 quinn + * *** empty log message *** + * + * Revision 1.33 1996/05/09 07:25:22 quinn + * Small * * Revision 1.32 1996/03/15 11:05:33 adam * The user can set the preferred query type (prefix, ccl, ..) with the @@ -112,17 +142,11 @@ * to illustrate the use of the YAZ service-level API. */ +#include #include #include -#ifdef WINDOWS #include -#else -#include -#endif #include -#ifdef _AIX -#include -#endif #include #include @@ -145,7 +169,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; @@ -159,7 +184,6 @@ static ODR_MEM session_mem; /* memory handle for init-response */ static Z_InitResponse *session = 0; /* session parameters */ static char last_scan[512] = "0"; static char last_cmd[100] = "?"; -static oid_value attributeset = VAL_BIB1; static FILE *marcdump = 0; static char marcdump_file[512] = "marc.out"; @@ -381,6 +405,21 @@ static void display_grs1(Z_GenericRecord *r, int level) printf("%s\n", t->content->u.string); else if (t->content->which == Z_ElementData_numeric) printf("%d\n", *t->content->u.numeric); + else if (t->content->which == Z_ElementData_oid) + { + int *ip = t->content->u.oid; + oident *oent; + + if ((oent = oid_getentbyoid(t->content->u.oid))) + printf("OID: %s\n", oent->desc); + else + { + printf("{"); + while (ip && *ip >= 0) + printf(" %d", *(ip++)); + printf(" }\n"); + } + } else if (t->content->which == Z_ElementData_noDataRequested) printf("[No data requested]\n"); else if (t->content->which == Z_ElementData_elementEmpty) @@ -456,7 +495,9 @@ static void display_record(Z_DatabaseRecord *p) r->which = type->what; } } - if (r->which == Z_External_octet && p->u.octet_aligned->len) + 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); else if (ent->value == VAL_SUTRS) { @@ -544,7 +585,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; @@ -600,8 +640,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; @@ -708,12 +748,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; iresultSetId = setstring; } + + +#if 0 + if (1) + { + static Z_Range range; + static Z_Range *rangep = ⦥ + req->num_ranges = 1; +#endif + + + + + + + + + req->resultSetStartPoint = &setno; req->numberOfRecordsRequested = &nos; prefsyn.proto = protocol; @@ -848,10 +924,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 = # @@ -948,12 +1023,30 @@ int cmd_format(char *arg) recordsyntax = VAL_DANMARC; return 1; } + else if (!strcmp(arg, "ukmarc")) + { + printf("Preferred format is UKMARC\n"); + recordsyntax = VAL_UKMARC; + return 1; + } else if (!strcmp(arg, "grs1")) { printf("Preferred format is GRS1\n"); recordsyntax = VAL_GRS1; return 1; } + else if (!strcmp(arg, "soif")) + { + printf("Preferred format is SOIF\n"); + recordsyntax = VAL_SOIF; + return 1; + } + else if (!strcmp(arg, "summary")) + { + printf("Preferred format is Summary\n"); + recordsyntax = VAL_SUMMARY; + return 1; + } else if (!strcmp(arg, "explain")) { printf("Preferred format is Explain\n"); @@ -962,7 +1055,7 @@ int cmd_format(char *arg) } else { - printf("Specify one of {sutrs,usmarc,danmarc,grs1}.\n"); + printf("Specify one of {sutrs,usmarc,danmarc,ukmarc,grs1,summary,explain}.\n"); return 0; } } @@ -987,7 +1080,6 @@ int cmd_elements(char *arg) int cmd_attributeset(char *arg) { char what[100]; - oid_value v; if (!arg || !*arg) { @@ -995,12 +1087,11 @@ int cmd_attributeset(char *arg) return 0; } sscanf(arg, "%s", what); - if ((v = oid_getvalbyname(what)) == VAL_NONE) + if (p_query_attset (what)) { printf("Unknown attribute set name\n"); return 0; } - attributeset = v; return 1; } @@ -1065,7 +1156,7 @@ static void initialize(void) #endif } -static int client(void) +static int client(int wait) { static struct { char *cmd; @@ -1100,9 +1191,12 @@ static int client(void) while (1) { int res; +#ifdef USE_SELECT fd_set input; +#endif char line[1024], word[1024], arg[1024]; +#ifdef USE_SELECT FD_ZERO(&input); FD_SET(0, &input); if (conn) @@ -1114,7 +1208,10 @@ static int client(void) } if (!res) continue; - if (FD_ISSET(0, &input)) + if (!wait && FD_ISSET(0, &input)) +#else + if (!wait) +#endif { /* quick & dirty way to get a command line. */ if (!gets(line)) @@ -1142,9 +1239,14 @@ static int client(void) res = 1; } if (res < 2) + { printf(C_PROMPT); + continue; + } } +#ifdef USE_SELECT if (conn && FD_ISSET(cs_fileno(conn), &input)) +#endif { do { @@ -1211,6 +1313,7 @@ static int client(void) } while (cs_more(conn)); } + wait = 0; } return 0; } @@ -1218,6 +1321,7 @@ static int client(void) int main(int argc, char **argv) { initialize(); + cmd_base("Default"); if (argc > 1) cmd_open(argv[1]); else @@ -1227,5 +1331,5 @@ int main(int argc, char **argv) perror(marcdump_file); exit(1); } - return client(); + return client((argc > 1)); }