X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=client%2Fclient.c;h=0327810d8fc67e19a2a440acf24431b4d0a28570;hb=aebe2207088a26a1d6a3f4dad6bd32b6a41109a8;hp=3cfa3d5cc438302050408d7b433b09f766e4f598;hpb=1121eeb134f61c6c2510143858db59045c1b6757;p=yaz-moved-to-github.git diff --git a/client/client.c b/client/client.c index 3cfa3d5..0327810 100644 --- a/client/client.c +++ b/client/client.c @@ -1,8 +1,8 @@ /* - * Copyright (c) 1995-2002, Index Data + * Copyright (c) 1995-2003, Index Data * See the file LICENSE for details. * - * $Id: client.c,v 1.176 2002-12-16 13:13:53 adam Exp $ + * $Id: client.c,v 1.183 2003-02-23 20:40:17 adam Exp $ */ #include @@ -97,7 +97,8 @@ static int auto_reconnect = 0; typedef enum { QueryType_Prefix, QueryType_CCL, - QueryType_CCL2RPN + QueryType_CCL2RPN, + QueryType_CQL } QueryType; static QueryType queryType = QueryType_Prefix; @@ -144,6 +145,7 @@ const char* query_type_as_string(QueryType q) case QueryType_Prefix: return "prefix (RPN sent to server)"; case QueryType_CCL: return "CCL (CCL sent to server) "; case QueryType_CCL2RPN: return "CCL -> RPN (RPN sent to server)"; + case QueryType_CQL: return "CQL (CQL sent to server)"; default: return "unknown Query type internal yaz-client error"; } @@ -426,11 +428,11 @@ static int cmd_base(char *arg) void cmd_open_remember_last_open_command(char* arg, char* new_open_command) { - if(last_open_command != arg) - { - if(last_open_command) xfree(last_open_command); - last_open_command = xstrdup(new_open_command); - } + if(last_open_command != arg) + { + if(last_open_command) xfree(last_open_command); + last_open_command = xstrdup(new_open_command); + } } int cmd_open(char *arg) @@ -455,7 +457,7 @@ int cmd_open(char *arg) { base[0] = '\0'; conn = cs_create_host(arg, 1, &add); - cmd_open_remember_last_open_command(arg,arg); + cmd_open_remember_last_open_command(arg,arg); } else { @@ -463,7 +465,7 @@ int cmd_open(char *arg) if (sscanf (arg, "%100[^/]/%100s", type_and_host, base) < 1) return 0; - cmd_open_remember_last_open_command(arg,type_and_host); + cmd_open_remember_last_open_command(arg,type_and_host); if (yazProxy) conn = cs_create_host(yazProxy, 1, &add); else @@ -501,19 +503,18 @@ int cmd_open(char *arg) void try_reconnect() { - - char* open_command; + char* open_command; - if(!( auto_reconnect && last_open_command) ) return ; + if(!( auto_reconnect && last_open_command) ) return ; - open_command = (char *) xmalloc (strlen(last_open_command)+6); - strcpy (open_command, "open "); + open_command = (char *) xmalloc (strlen(last_open_command)+6); + strcpy (open_command, "open "); - strcat (open_command, last_open_command); + strcat (open_command, last_open_command); - process_cmd_line(open_command); + process_cmd_line(open_command); - xfree(open_command); + xfree(open_command); } int cmd_authentication(char *arg) @@ -693,7 +694,6 @@ static void display_record(Z_External *r) while (inbytesleft) { - int i; size_t outbytesleft = sizeof(outbuf); char *outp = outbuf; size_t r = yaz_iconv (cd, (char**) &inp, @@ -876,6 +876,7 @@ static int send_searchRequest(char *arg) Z_RPNQuery *RPNquery; Odr_oct ccl_query; YAZ_PQF_Parser pqf_parser; + Z_External *ext; if (queryType == QueryType_CCL2RPN) { @@ -962,6 +963,16 @@ static int send_searchRequest(char *arg) query.u.type_1 = RPNquery; ccl_rpn_delete (rpn); break; + case QueryType_CQL: + query.which = Z_Query_type_104; + ext = (Z_External *) odr_malloc(out, sizeof(*ext)); + ext->direct_reference = odr_getoidbystr(out, "1.2.840.10003.16.2"); + ext->indirect_reference = 0; + ext->descriptor = 0; + ext->which = Z_External_CQL; + ext->u.cql = odr_strdup(out, arg); + query.u.type_104 = ext; + break; default: printf ("Unsupported query type\n"); return 0; @@ -1776,13 +1787,14 @@ static int send_presentRequest(char *arg) compo.u.complex->generic = (Z_Specification *) odr_malloc(out, sizeof(*compo.u.complex->generic)); - compo.u.complex->generic->schema = (Odr_oid *) + compo.u.complex->generic->which = Z_Schema_oid; + compo.u.complex->generic->schema.oid = (Odr_oid *) odr_oiddup(out, oid_ent_to_oid(&prefschema, oid)); - if (!compo.u.complex->generic->schema) + if (!compo.u.complex->generic->schema.oid) { /* OID wasn't a schema! Try record syntax instead. */ prefschema.oclass = CLASS_RECSYN; - compo.u.complex->generic->schema = (Odr_oid *) + compo.u.complex->generic->schema.oid = (Odr_oid *) odr_oiddup(out, oid_ent_to_oid(&prefschema, oid)); } if (!elementSetNames) @@ -2169,17 +2181,19 @@ int cmd_schema(char *arg) int cmd_format(char *arg) { + oid_value nsyntax; if (!arg || !*arg) { printf("Usage: format \n"); return 0; } - recordsyntax = oid_getvalbyname (arg); - if (recordsyntax == VAL_NONE) + nsyntax = oid_getvalbyname (arg); + if (strcmp(arg, "none") && nsyntax == VAL_NONE) { printf ("unknown record syntax\n"); return 0; } + recordsyntax = nsyntax; return 1; } @@ -2226,12 +2240,15 @@ int cmd_querytype (char *arg) queryType = QueryType_Prefix; else if (!strcmp (arg, "ccl2rpn") || !strcmp (arg, "cclrpn")) queryType = QueryType_CCL2RPN; + else if (!strcmp(arg, "cql")) + queryType = QueryType_CQL; else { printf ("Querytype must be one of:\n"); printf (" prefix - Prefix query\n"); printf (" ccl - CCL query\n"); printf (" ccl2rpn - CCL query converted to RPN\n"); + printf (" cql - CQL\n"); return 0; } return 1;