X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=client%2Fclient.c;h=1016778a17eac4819891f8c74a549ee02b7ec8e8;hp=cf0de2671e032a71f41558d30845a5e5891a6a78;hb=c066a043f79860daf37234db3509156a3fc9205f;hpb=febd96e724a673b84f5db8f48dfb71c805c7f5e6 diff --git a/client/client.c b/client/client.c index cf0de26..1016778 100644 --- a/client/client.c +++ b/client/client.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: client.c,v $ - * Revision 1.75 1999-02-01 15:37:32 adam + * Revision 1.76 1999-03-11 11:12:07 adam + * Added GNU readline support. HTML display in client. + * + * Revision 1.75 1999/02/01 15:37:32 adam * Fixed minor bug introduced by previous commit. * * Revision 1.74 1999/02/01 15:35:21 adam @@ -272,6 +275,13 @@ #include #endif +#if HAVE_READLINE_READLINE_H +#include +#endif +#if HAVE_READLINE_HISTORY_H +#include +#endif + #define C_PROMPT "Z> " static ODR out, in, print; /* encoding and decoding streams */ @@ -666,9 +676,15 @@ static void display_record(Z_DatabaseRecord *p) else if (r->which == Z_External_octet && p->u.octet_aligned->len) { const char *octet_buf = (char*)p->u.octet_aligned->buf; - if (ent->value == VAL_TEXT_XML || ent->value == VAL_APPLICATION_XML) + if (ent->value == VAL_TEXT_XML || ent->value == VAL_APPLICATION_XML || + ent->value == VAL_HTML) { - fwrite (octet_buf, 1, p->u.octet_aligned->len, stdout); + int i; + for (i = 0; iu.octet_aligned->len; i++) + if (octet_buf[i] > 126 || octet_buf[i] < 7) + printf ("<%02X>", octet_buf[i]); + else + fputc (octet_buf[i], stdout); printf ("\n"); } else @@ -1883,13 +1899,25 @@ static int client(int wait) #else if (!wait) #endif - { - /* quick & dirty way to get a command line. */ - char *end_p; - if (!fgets(line, 1023, stdin)) - break; - if ((end_p = strchr (line, '\n'))) - *end_p = '\0'; + { +#if HAVE_READLINE_READLINE_H + char* line_in; + line_in=readline(C_PROMPT); +#if HAVE_READLINE_HISTORY_H + if (*line_in) + add_history(line_in); +#endif + strcpy(line,line_in); + free (line_in); +#else + char *end_p; + printf (C_PROMPT); + fflush(stdout); + if (!fgets(line, 1023, stdin)) + break; + if ((end_p = strchr (line, '\n'))) + *end_p = '\0'; +#endif if ((res = sscanf(line, "%s %[^;]", word, arg)) <= 0) { strcpy(word, last_cmd); @@ -1914,7 +1942,6 @@ static int client(int wait) } if (res < 2) { - printf(C_PROMPT); continue; } } @@ -2003,8 +2030,6 @@ static int client(int wait) } } while (conn && cs_more(conn)); - printf(C_PROMPT); - fflush(stdout); } } return 0; @@ -2046,10 +2071,7 @@ int main(int argc, char **argv) } } if (!opened) - { initialize (); - printf (C_PROMPT); - } return client (opened); }