* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: client.c,v 1.342 2007-05-30 21:56:59 adam Exp $
+ * $Id: client.c,v 1.350 2007-08-21 13:19:44 adam Exp $
*/
/** \file client.c
* \brief yaz-client program
int rl_attempted_completion_over = 0;
#endif
-/* set this one to 1, to avoid decode of unknown MARCs */
-#define AVOID_MARC_DECODE 1
-
#define maxOtherInfosSupported 10
struct eoi {
Odr_oid oid[OID_SIZE];
}
}
}
+ if (ext->which == Z_External_itemOrder)
+ {
+ Z_IOTaskPackage *otp = ext->u.itemOrder->u.taskPackage;
+ if (otp && otp->targetPart && otp->targetPart->itemRequest)
+ {
+ Z_External *ext = otp->targetPart->itemRequest;
+ if (ext->which == Z_External_octet)
+ {
+ Odr_oct *doc = ext->u.octet_aligned;
+ printf("Got itemRequest doc %.*s\n",
+ doc->len, doc->buf);
+ }
+ }
+ }
}
if (res->taskPackage && res->taskPackage->which == Z_External_octet)
{
if (t->displayTerm)
printf("%s", t->displayTerm);
else if (t->term->which == Z_Term_general)
- {
printf("%.*s", t->term->u.general->len, t->term->u.general->buf);
- sprintf(last_scan_line, "%.*s", t->term->u.general->len,
- t->term->u.general->buf);
- }
else
printf("Term (not general)");
+ if (t->term->which == Z_Term_general)
+ sprintf(last_scan_line, "%.*s", t->term->u.general->len,
+ t->term->u.general->buf);
+
if (t->globalOccurrences)
printf (" (%d)\n", *t->globalOccurrences);
else
return 1;
}
-void source_rcfile(void)
+void source_rc_file(const char *rc_file)
{
- /* Look for a $HOME/.yazclientrc and source it if it exists */
+ /* If rc_file != NULL, source that. Else
+ Look for .yazclientrc and read it if it exists.
+ If it does not exist, read $HOME/.yazclientrc instead */
struct stat statbuf;
- char fname[1000];
- char* homedir = getenv("HOME");
-
- sprintf(fname, "%.500s%s%s", homedir ? homedir : "",
- homedir ? "/" : "",
- ".yazclientrc");
- if (stat(fname,&statbuf)==0)
- cmd_source(fname, 0 );
+ if (rc_file)
+ {
+ if (stat(rc_file, &statbuf) == 0)
+ cmd_source(rc_file, 0);
+ else
+ {
+ fprintf(stderr, "yaz_client: cannot source '%s'\n", rc_file);
+ exit(1);
+ }
+ }
+ else
+ {
+ char fname[1000];
+ strcpy(fname, ".yazclientrc");
+ if (stat(fname, &statbuf)==0)
+ {
+ cmd_source(fname, 0);
+ }
+ else
+ {
+ const char* homedir = getenv("HOME");
+ if (homedir)
+ {
+ sprintf(fname, "%.800s/%s", homedir, ".yazclientrc");
+ if (stat(fname, &statbuf)==0)
+ cmd_source(fname, 0);
+ }
+ }
+ }
}
void add_to_readline_history(void *client_data, const char *line)
#endif
}
-static void initialize(void)
+static void initialize(const char *rc_file)
{
FILE *inf;
int i;
cmd_format("usmarc");
- source_rcfile();
+ source_rc_file(rc_file);
file_history = file_history_new();
file_history_load(file_history);
const char *connection_head = z_HTTP_header_lookup(hres->headers,
"Connection");
if (!yaz_srw_check_content_type(hres))
- printf("Content type does not appear to be XML");
+ printf("Content type does not appear to be XML\n");
else
{
Z_SOAP *soap_package = 0;
char *open_command = 0;
char *auth_command = 0;
char *arg;
+ const char *rc_file = 0;
int ret;
#if HAVE_LOCALE_H
ODR_MASK_SET(&z3950_options, Z_Options_delSet);
ODR_MASK_SET(&z3950_options, Z_Options_negotiationModel);
- while ((ret = options("k:c:q:a:b:m:v:p:u:t:Vxd:", argv, argc, &arg)) != -2)
+ while ((ret = options("k:c:q:a:b:m:v:p:u:t:Vxd:f:", argv, argc, &arg)) != -2)
{
switch (ret)
{
exit(1);
}
break;
+ case 'a':
+ if (!strcmp(arg, "-"))
+ apdu_file=stderr;
+ else
+ apdu_file=fopen(arg, "a");
+ break;
+ case 'b':
+ if (!strcmp(arg, "-"))
+ ber_file=stderr;
+ else
+ ber_file=fopen(arg, "a");
+ break;
+ case 'c':
+ strncpy (ccl_fields, arg, sizeof(ccl_fields)-1);
+ ccl_fields[sizeof(ccl_fields)-1] = '\0';
+ break;
case 'd':
dump_file_prefix = arg;
break;
+ case 'f':
+ rc_file = arg;
+ break;
case 'k':
kilobytes = atoi(arg);
break;
exit (1);
}
break;
- case 't':
- outputCharset = xstrdup(arg);
- break;
- case 'c':
- strncpy (ccl_fields, arg, sizeof(ccl_fields)-1);
- ccl_fields[sizeof(ccl_fields)-1] = '\0';
+ case 'p':
+ yazProxy = xstrdup(arg);
break;
case 'q':
strncpy (cql_fields, arg, sizeof(cql_fields)-1);
cql_fields[sizeof(cql_fields)-1] = '\0';
break;
- case 'b':
- if (!strcmp(arg, "-"))
- ber_file=stderr;
- else
- ber_file=fopen(arg, "a");
- break;
- case 'a':
- if (!strcmp(arg, "-"))
- apdu_file=stderr;
- else
- apdu_file=fopen(arg, "a");
- break;
- case 'x':
- hex_dump = 1;
- break;
- case 'p':
- yazProxy = xstrdup(arg);
+ case 't':
+ outputCharset = xstrdup(arg);
break;
case 'u':
if (!auth_command)
case 'V':
show_version();
break;
+ case 'x':
+ hex_dump = 1;
+ break;
default:
fprintf (stderr, "Usage: %s "
- " [-a <apdulog>]"
+ " [-a apdulog]"
" [-b berdump]"
- " [-d dump]\n"
- " [-c cclfields]"
+ " [-c cclfile]"
+ " [-d dump]"
+ " [-f cmdfile]"
" [-k size]"
- " [-m <marclog>]\n"
- " [-p <proxy-addr>]"
- " [-q cqlfields]"
- " [-u <auth>]"
+ " [-m marclog]"
+ " [-p proxy-addr]"
+ " [-q cqlfile]"
+ " [-t dispcharset]"
+ " [-u auth]"
+ " [-v loglevel]"
" [-V]"
- " [<server-addr>]\n",
+ " [-x]"
+ " [server-addr]\n",
prog);
exit (1);
}
}
- initialize();
+ initialize(rc_file);
if (auth_command)
{
#ifdef HAVE_GETTIMEOFDAY