X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=ir-tcl.c;h=efe1fcbff65d7c1ffbda43a01a1ad8258046037d;hb=5ab718625d35ca64c34d9962427feeaaa1b00086;hp=331dc8242d9ac1edf382e22a4fcc50ff2ece2357;hpb=1dd38a40abd18e88d3bc5452b3cf8feb3c917637;p=ir-tcl-moved-to-github.git diff --git a/ir-tcl.c b/ir-tcl.c index 331dc82..efe1fcb 100644 --- a/ir-tcl.c +++ b/ir-tcl.c @@ -3,7 +3,16 @@ * (c) Index Data 1995 * * $Log: ir-tcl.c,v $ - * Revision 1.8 1995-03-15 08:25:16 adam + * Revision 1.11 1995-03-16 17:54:03 adam + * Minor changes really. + * + * Revision 1.10 1995/03/15 16:14:50 adam + * Blocking arg in cs_create changed. + * + * Revision 1.9 1995/03/15 13:59:24 adam + * Minor changes. + * + * Revision 1.8 1995/03/15 08:25:16 adam * New method presentStatus to check for error on present. Misc. cleanup * of IRRecordList manipulations. Full MARC record presentation in * search.tcl. @@ -36,6 +45,7 @@ #include #include +#include #include @@ -45,7 +55,7 @@ typedef struct { COMSTACK cs_link; int preferredMessageSize; - int maximumMessageSize; + int maximumRecordSize; Odr_bitmask options; Odr_bitmask protocolVersion; char *idAuthentication; @@ -293,7 +303,7 @@ static int do_init_request (void *obj, Tcl_Interp *interp, req.options = &p->options; req.protocolVersion = &p->protocolVersion; req.preferredMessageSize = &p->preferredMessageSize; - req.maximumRecordSize = &p->maximumMessageSize; + req.maximumRecordSize = &p->maximumRecordSize; req.idAuthentication = p->idAuthentication; req.implementationId = p->implementationId; @@ -363,19 +373,19 @@ static int do_preferredMessageSize (void *obj, Tcl_Interp *interp, } /* - * do_maximumMessageSize: Set/get maximum message size + * do_maximumRecordSize: Set/get maximum record size */ -static int do_maximumMessageSize (void *obj, Tcl_Interp *interp, +static int do_maximumRecordSize (void *obj, Tcl_Interp *interp, int argc, char **argv) { char buf[20]; if (argc == 3) { if (Tcl_GetInt (interp, argv[2], - &((IRObj *)obj)->maximumMessageSize)==TCL_ERROR) + &((IRObj *)obj)->maximumRecordSize)==TCL_ERROR) return TCL_ERROR; } - sprintf (buf, "%d", ((IRObj *)obj)->maximumMessageSize); + sprintf (buf, "%d", ((IRObj *)obj)->maximumRecordSize); Tcl_AppendResult (interp, buf, NULL); return TCL_OK; } @@ -502,12 +512,12 @@ static int do_disconnect (void *obj, Tcl_Interp *interp, if (cs_type (p->cs_link) == tcpip_type) { cs_close (p->cs_link); - p->cs_link = cs_create (tcpip_type, 0); + p->cs_link = cs_create (tcpip_type, 1); } else if (cs_type (p->cs_link) == mosi_type) { cs_close (p->cs_link); - p->cs_link = cs_create (mosi_type, 0); + p->cs_link = cs_create (mosi_type, 1); } else { @@ -527,9 +537,9 @@ static int do_comstack (void *obj, Tcl_Interp *interp, if (argc == 3) { if (!strcmp (argv[2], "tcpip")) - ((IRObj *)obj)->cs_link = cs_create (tcpip_type, 0); + ((IRObj *)obj)->cs_link = cs_create (tcpip_type, 1); else if (!strcmp (argv[2], "mosi")) - ((IRObj *)obj)->cs_link = cs_create (mosi_type, 0); + ((IRObj *)obj)->cs_link = cs_create (mosi_type, 1); else { interp->result = "wrong comstack type"; @@ -624,7 +634,7 @@ static int ir_obj_method (ClientData clientData, Tcl_Interp *interp, { 0, "protocolVersion", do_protocolVersion }, { 0, "options", do_options }, { 1, "preferredMessageSize", do_preferredMessageSize }, - { 1, "maximumMessageSize", do_maximumMessageSize }, + { 1, "maximumRecordSize", do_maximumRecordSize }, { 1, "implementationName", do_implementationName }, { 1, "implementationId", do_implementationId }, { 1, "idAuthentication", do_idAuthentication }, @@ -664,9 +674,9 @@ static int ir_obj_mk (ClientData clientData, Tcl_Interp *interp, } if (!(obj = ir_malloc (interp, sizeof(*obj)))) return TCL_ERROR; - obj->cs_link = cs_create (tcpip_type, 0); + obj->cs_link = cs_create (tcpip_type, 1); - obj->maximumMessageSize = 32768; + obj->maximumRecordSize = 32768; obj->preferredMessageSize = 4096; obj->idAuthentication = NULL; @@ -1020,18 +1030,27 @@ static int do_presentStatus (void *o, Tcl_Interp *interp, int argc, char **argv) { IRSetObj *obj = o; + const char *cp; char buf[28]; switch (obj->which) { case Z_Records_DBOSD: - Tcl_AppendResult (interp, "DBOSD", NULL); + Tcl_AppendElement (interp, "DBOSD"); break; case Z_Records_NSD: - sprintf (buf, "NSD %d", obj->condition); - Tcl_AppendResult (interp, buf, " {", - (obj->addinfo ? obj->addinfo : ""), - "}", NULL); + Tcl_AppendElement (interp, "NSD"); + sprintf (buf, "%d", obj->condition); + Tcl_AppendElement (interp, buf); + cp = diagbib1_str (obj->condition); + if (cp) + Tcl_AppendElement (interp, (char*) cp); + else + Tcl_AppendElement (interp, ""); + if (obj->addinfo) + Tcl_AppendElement (interp, obj->addinfo); + else + Tcl_AppendElement (interp, ""); break; } return TCL_OK; @@ -1329,6 +1348,8 @@ void ir_select_proc (ClientData clientData) ir_select_remove (cs_fileno (p->cs_link), p); return; } + if (r == 1) + return ; odr_setbuf (p->odr_in, p->buf_in, r); printf ("cs_get ok, got %d\n", r); if (!z_APDU (p->odr_in, &apdu, 0))