* Sebastian Hammer, Adam Dickmeiss
*
* $Log: ir-tcl.c,v $
- * Revision 1.48 1995-06-27 19:03:50 adam
+ * Revision 1.50 1995-07-20 08:09:49 adam
+ * client.tcl: Targets removed from hotTargets list when targets
+ * are removed/modified.
+ * ir-tcl.c: More work on triggerResourceControl.
+ *
+ * Revision 1.49 1995/06/30 12:39:21 adam
+ * Bug fix: loadFile didn't set record type.
+ * The MARC routines are a little less strict in the interpretation.
+ * Script display.tcl replaces the old marc.tcl.
+ * New interactive script: shell.tcl.
+ *
+ * Revision 1.48 1995/06/27 19:03:50 adam
* Bug fix in do_present in ir-tcl.c: p->set_child member weren't set.
* nextResultSetPosition used instead of setOffset.
*
if (argc <= 0)
return TCL_OK;
- Tcl_AppendResult (interp, "Bad method. Possible methods:", NULL);
+ Tcl_AppendResult (interp, "Bad method: ", argv[1],
+ ". Possible methods:", NULL);
for (tab_i = tab; tab_i->tab; tab_i++)
for (t = tab_i->tab; t->name; t++)
Tcl_AppendResult (interp, " ", t->name, NULL);
/* ------------------------------------------------------- */
/*
+ * ir-tcl_send_APDU: send APDU
+ */
+static int ir_tcl_send_APDU (Tcl_Interp *interp, IrTcl_Obj *p, Z_APDU *apdu,
+ const char *msg)
+{
+ int r;
+
+ if (!z_APDU (p->odr_out, &apdu, 0))
+ {
+ Tcl_AppendResult (interp, odr_errlist [odr_geterror (p->odr_out)],
+ NULL);
+ odr_reset (p->odr_out);
+ return TCL_ERROR;
+ }
+ p->sbuf = odr_getbuf (p->odr_out, &p->slen, NULL);
+ odr_reset (p->odr_out);
+ if ((r=cs_put (p->cs_link, p->sbuf, p->slen)) < 0)
+ {
+ sprintf (interp->result, "cs_put failed in %s", msg);
+ do_disconnect (p, NULL, 2, NULL);
+ return TCL_ERROR;
+ }
+ else if (r == 1)
+ {
+ ir_select_add_write (cs_fileno(p->cs_link), p);
+ logf (LOG_DEBUG, "Sent part of %s (%d bytes)", msg, p->slen);
+ }
+ else
+ logf (LOG_DEBUG, "Sent whole %s (%d bytes)", msg, p->slen);
+ return TCL_OK;
+}
+
+/*
* do_init_request: init method on IR object
*/
static int do_init_request (void *obj, Tcl_Interp *interp,
Z_APDU *apdu;
IrTcl_Obj *p = obj;
Z_InitRequest *req;
- int r;
if (argc <= 0)
return TCL_OK;
interp->result = "not connected";
return TCL_ERROR;
}
- odr_reset (p->odr_out);
apdu = zget_APDU (p->odr_out, Z_APDU_initRequest);
req = apdu->u.initRequest;
req->implementationVersion = p->implementationVersion;
req->userInformationField = 0;
- if (!z_APDU (p->odr_out, &apdu, 0))
- {
- Tcl_AppendResult (interp, odr_errlist [odr_geterror (p->odr_out)],
- NULL);
- odr_reset (p->odr_out);
- return TCL_ERROR;
- }
- p->sbuf = odr_getbuf (p->odr_out, &p->slen, NULL);
- if ((r=cs_put (p->cs_link, p->sbuf, p->slen)) < 0)
- {
- interp->result = "cs_put failed in init";
- do_disconnect (p, NULL, 2, NULL);
- return TCL_ERROR;
- }
- else if (r == 1)
- {
- ir_select_add_write (cs_fileno(p->cs_link), p);
- logf (LOG_DEBUG, "Sent part of initializeRequest (%d bytes)", p->slen);
- }
- else
- logf (LOG_DEBUG, "Sent whole initializeRequest (%d bytes)", p->slen);
- return TCL_OK;
+ return ir_tcl_send_APDU (interp, p, apdu, "init");
}
/*
ODR_MASK_ZERO (&p->options);
ODR_MASK_SET (&p->options, 0);
ODR_MASK_SET (&p->options, 1);
+ ODR_MASK_SET (&p->options, 4);
ODR_MASK_SET (&p->options, 7);
ODR_MASK_SET (&p->options, 14);
return TCL_OK;
IrTcl_eval (p->interp, p->callback);
}
}
- if (p->hostname)
- Tcl_AppendElement (interp, p->hostname);
return TCL_OK;
}
ODR_MASK_ZERO (&p->options);
ODR_MASK_SET (&p->options, 0);
ODR_MASK_SET (&p->options, 1);
+ ODR_MASK_SET (&p->options, 4);
ODR_MASK_SET (&p->options, 7);
ODR_MASK_SET (&p->options, 14);
IrTcl_Obj *p = obj;
Z_APDU *apdu;
Z_TriggerResourceControlRequest *req;
- int r;
+ bool_t is_false = 0;
if (argc <= 0)
return TCL_OK;
}
apdu = zget_APDU (p->odr_out, Z_APDU_triggerResourceControlRequest);
req = apdu->u.triggerResourceControlRequest;
+ *req->requestedAction = Z_TriggerResourceCtrl_cancel;
+ req->resultSetWanted = &is_false;
- if (!z_APDU (p->odr_out, &apdu, 0))
- {
- Tcl_AppendResult (interp, odr_errlist [odr_geterror (p->odr_out)],
- NULL);
- odr_reset (p->odr_out);
- return TCL_ERROR;
- }
- p->sbuf = odr_getbuf (p->odr_out, &p->slen, NULL);
- if ((r=cs_put (p->cs_link, p->sbuf, p->slen)) < 0)
- {
- interp->result = "cs_put failed in triggerResourceControl";
- do_disconnect (p, NULL, 2, NULL);
- return TCL_ERROR;
- }
- else if (r == 1)
- {
- ir_select_add_write (cs_fileno(p->cs_link), p);
- logf (LOG_DEBUG, "Sent part of triggerResourceControl (%d bytes)",
- p->slen);
- }
- else
- logf (LOG_DEBUG, "Sent whole of triggerResourceControl (%d bytes)",
- p->slen);
- return TCL_OK;
+ return ir_tcl_send_APDU (interp, p, apdu, "triggerResourceControl");
}
/*
interp->result = "not connected";
return TCL_ERROR;
}
- odr_reset (p->odr_out);
apdu = zget_APDU (p->odr_out, Z_APDU_searchRequest);
req = apdu->u.searchRequest;
interp->result = "unknown query method";
return TCL_ERROR;
}
- if (!z_APDU (p->odr_out, &apdu, 0))
- {
- interp->result = odr_errlist [odr_geterror (p->odr_out)];
- odr_reset (p->odr_out);
- return TCL_ERROR;
- }
- p->sbuf = odr_getbuf (p->odr_out, &p->slen, NULL);
- if ((r=cs_put (p->cs_link, p->sbuf, p->slen)) < 0)
- {
- interp->result = "cs_put failed in search";
- return TCL_ERROR;
- }
- else if (r == 1)
- {
- ir_select_add_write (cs_fileno(p->cs_link), p);
- logf (LOG_DEBUG, "Sent part of searchRequest (%d bytes)", p->slen);
- }
- else
- {
- logf (LOG_DEBUG, "Whole search request (%d bytes)", p->slen);
- }
- return TCL_OK;
+ return ir_tcl_send_APDU (interp, p, apdu, "search");
}
/*
Z_PresentRequest *req;
int start;
int number;
- int r;
if (argc <= 0)
return TCL_OK;
p = obj->parent;
p->set_child = obj;
- odr_reset (p->odr_out);
obj->start = start;
obj->number = number;
}
else
req->preferredRecordSyntax = 0;
-
- if (!z_APDU (p->odr_out, &apdu, 0))
- {
- interp->result = odr_errlist [odr_geterror (p->odr_out)];
- odr_reset (p->odr_out);
- return TCL_ERROR;
- }
- p->sbuf = odr_getbuf (p->odr_out, &p->slen, NULL);
- if ((r=cs_put (p->cs_link, p->sbuf, p->slen)) < 0)
- {
- interp->result = "cs_put failed in present";
- return TCL_ERROR;
- }
- else if (r == 1)
- {
- ir_select_add_write (cs_fileno(p->cs_link), p);
- logf (LOG_DEBUG, "Part of present request, start=%d, num=%d"
- " (%d bytes)", start, number, p->slen);
- }
- else
- {
- logf (LOG_DEBUG, "Whole present request, start=%d, num=%d"
- " (%d bytes)", start, number, p->slen);
- }
- return TCL_OK;
+
+ return ir_tcl_send_APDU (interp, p, apdu, "present");
}
/*
IrTcl_RecordList *rl;
rl = new_IR_record (setobj, no, Z_NamePlusRecord_databaseRecord);
+ rl->u.dbrec.type = VAL_USMARC;
rl->u.dbrec.buf = buf;
rl->u.dbrec.size = size;
no++;
Z_APDU *apdu;
IrTcl_ScanObj *obj = o;
IrTcl_Obj *p = obj->parent;
- int r;
oident bib1;
#if CCL2RPN
struct ccl_rpn_node *rpn;
interp->result = "not connected";
return TCL_ERROR;
}
- odr_reset (p->odr_out);
bib1.proto = p->protocol_type;
bib1.class = CLASS_ATTSET;
*req->numberOfTermsRequested);
logf (LOG_DEBUG, "preferredPositionInResponse=%d",
*req->preferredPositionInResponse);
-
- if (!z_APDU (p->odr_out, &apdu, 0))
- {
- interp->result = odr_errlist [odr_geterror (p->odr_out)];
- odr_reset (p->odr_out);
- return TCL_ERROR;
- }
- p->sbuf = odr_getbuf (p->odr_out, &p->slen, NULL);
- if ((r=cs_put (p->cs_link, p->sbuf, p->slen)) < 0)
- {
- interp->result = "cs_put failed in scan";
- return TCL_ERROR;
- }
- else if (r == 1)
- {
- ir_select_add_write (cs_fileno(p->cs_link), p);
- logf (LOG_DEBUG, "Sent part of scanRequest (%d bytes)", p->slen);
- }
- else
- {
- logf (LOG_DEBUG, "Whole scan request (%d bytes)", p->slen);
- }
- return TCL_OK;
+
+ return ir_tcl_send_APDU (interp, p, apdu, "scan");
}
/*
rl->u.dbrec.size = zr->u.octet_aligned->len;
rl->u.dbrec.type = VAL_USMARC;
- ident = oid_getentbyoid (oe->direct_reference);
- rl->u.dbrec.type = ident->value;
-
+ if ((ident = oid_getentbyoid (oe->direct_reference)))
+ rl->u.dbrec.type = ident->value;
if (oe->which == ODR_EXTERNAL_octet && rl->u.dbrec.size > 0)
{
char *buf = (char*) zr->u.octet_aligned->buf;