Headers have changed a little.
[ir-tcl-moved-to-github.git] / ir-tcl.c
index 331dc82..efe1fcb 100644 (file)
--- 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 <odr.h>
 #include <proto.h>
+#include <diagbib1.h>
 
 #include <tcl.h>
 
@@ -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))