X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=zoom%2Fzoomsh.c;h=5f99d663c2976be8ccf5226175cc497a70c9e984;hb=daa259b6e86d28f72c82488ee9b0f7bb2ce52b8c;hp=111f629a9d1bdd3a8576ca997af7a4dab07846a6;hpb=fb6d99a0c7e07d9cc4a315c447deaf6564a85505;p=yaz-moved-to-github.git diff --git a/zoom/zoomsh.c b/zoom/zoomsh.c index 111f629..5f99d66 100644 --- a/zoom/zoomsh.c +++ b/zoom/zoomsh.c @@ -2,10 +2,12 @@ * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: zoomsh.c,v 1.37 2005-06-25 15:46:08 adam Exp $ + * $Id: zoomsh.c,v 1.42 2006-10-31 14:08:03 adam Exp $ */ -/* ZOOM-C Shell */ +/** \file zoomsh.c + \brief ZOOM C command line tool (shell) +*/ #include #include @@ -122,6 +124,30 @@ static void cmd_get (ZOOM_connection *c, ZOOM_resultset *r, } } +static void cmd_rget(ZOOM_connection *c, ZOOM_resultset *r, + ZOOM_options options, + const char **args) +{ + char key[40]; + if (next_token_copy (args, key, sizeof(key)) < 0) + { + printf ("missing argument for get\n"); + } + else + { + int i; + for (i = 0; i"); + } + } +} + static void cmd_close (ZOOM_connection *c, ZOOM_resultset *r, ZOOM_options options, const char **args) @@ -158,22 +184,36 @@ static void display_records (ZOOM_connection c, int pos = i + start; ZOOM_record rec = ZOOM_resultset_record (r, pos); const char *db = ZOOM_record_get (rec, "database", 0); - int len, opac_len; - const char *render = ZOOM_record_get (rec, "render", &len); - const char *opac_render = ZOOM_record_get (rec, "opac", &opac_len); - const char *syntax = ZOOM_record_get (rec, "syntax", 0); - /* if rec is non-null, we got a record for display */ - if (rec) + + if (ZOOM_record_error(rec, 0, 0, 0)) { - char oidbuf[100]; - (void) oid_name_to_dotstring(CLASS_RECSYN, syntax, oidbuf); - printf ("%d %s %s (%s)\n", - pos+1, (db ? db : "unknown"), syntax, oidbuf); - if (render) - fwrite (render, 1, len, stdout); - printf ("\n"); - if (opac_render) - fwrite (opac_render, 1, opac_len, stdout); + const char *msg; + const char *addinfo; + const char *diagset; + int error = ZOOM_record_error(rec, &msg, &addinfo, &diagset); + + printf("%d %s: %s (%s:%d) %s\n", pos, (db ? db : "unknown"), + msg, diagset, error, addinfo); + } + else + { + int len, opac_len; + const char *render = ZOOM_record_get (rec, "render", &len); + const char *opac_render = ZOOM_record_get (rec, "opac", &opac_len); + const char *syntax = ZOOM_record_get (rec, "syntax", 0); + /* if rec is non-null, we got a record for display */ + if (rec) + { + char oidbuf[100]; + (void) oid_name_to_dotstring(CLASS_RECSYN, syntax, oidbuf); + printf ("%d %s %s (%s)\n", + pos, (db ? db : "unknown"), syntax, oidbuf); + if (render) + fwrite (render, 1, len, stdout); + printf ("\n"); + if (opac_render) + fwrite (opac_render, 1, opac_len, stdout); + } } } @@ -330,8 +370,8 @@ static void cmd_search (ZOOM_connection *c, ZOOM_resultset *r, int start = ZOOM_options_get_int (options, "start", 0); int count = ZOOM_options_get_int (options, "count", 0); - printf ("%s: %d hits\n", ZOOM_connection_option_get(c[i], "host"), - ZOOM_resultset_size(r[i])); + printf ("%s: %ld hits\n", ZOOM_connection_option_get(c[i], "host"), + (long) ZOOM_resultset_size(r[i])); /* and display */ display_records (c[i], r[i], start, count); } @@ -488,6 +528,8 @@ static int cmd_parse (ZOOM_connection *c, ZOOM_resultset *r, cmd_set (c, r, options, buf); else if (is_command ("get", cmd_str, cmd_len)) cmd_get (c, r, options, buf); + else if (is_command ("rget", cmd_str, cmd_len)) + cmd_rget (c, r, options, buf); else if (is_command ("connect", cmd_str, cmd_len)) cmd_connect (c, r, options, buf); else if (is_command ("open", cmd_str, cmd_len))