X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;ds=inline;f=ir-tcl.c;h=07844611cb346ede177dca949a31cff6db59cd7a;hb=90d2ffd756ec050835a2fb048b89d9508b7fbe2e;hp=ae10fcc88c3353f7fe27b156a2b701b44f17b7d9;hpb=abebb38601de949966e36c4606232c88f755289b;p=ir-tcl-moved-to-github.git diff --git a/ir-tcl.c b/ir-tcl.c index ae10fcc..0784461 100644 --- a/ir-tcl.c +++ b/ir-tcl.c @@ -5,7 +5,23 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: ir-tcl.c,v $ - * Revision 1.105 1998-04-02 14:31:08 adam + * Revision 1.110 1998-10-20 15:15:31 adam + * Changed scan response handler. + * + * Revision 1.109 1998/10/13 21:23:26 adam + * Fixed searchStatus method. + * + * Revision 1.108 1998/10/12 11:48:08 adam + * Removed printf call. + * + * Revision 1.107 1998/06/10 13:00:46 adam + * Added ir-version command. + * + * Revision 1.106 1998/05/20 12:25:35 adam + * Fixed bug that occurred in rare cases when encoding of incoming + * records failed. + * + * Revision 1.105 1998/04/02 14:31:08 adam * This version works with compiled ASN.1 code. * * Revision 1.104 1998/02/27 14:26:07 adam @@ -653,13 +669,14 @@ int ir_tcl_named_bits (struct ir_named_entry *tab, Odr_bitmask *ob, ODR_MASK_ZERO (ob); for (no = 0; no < argc; no++) { + int ok = 0; for (ti = tab; ti->name; ti++) - if (!strcmp (argv[no], ti->name)) + if (!strcmp(argv[no], "@all") || !strcmp (argv[no], ti->name)) { ODR_MASK_SET (ob, ti->pos); - break; + ok = 1; } - if (!ti->name) + if (!ok) { Tcl_AppendResult (interp, "bad bit mask ", argv[no], NULL); return ir_tcl_error_exec (interp, argc, argv); @@ -3330,7 +3347,6 @@ static int do_scanLine (void *obj, Tcl_Interp *interp, int argc, char **argv) " position\"", NULL); return TCL_ERROR; } - printf ("argv[2]=%s\n", argv[2]); if (Tcl_GetInt (interp, argv[2], &i) == TCL_ERROR) return TCL_ERROR; if (!p->entries_flag || !p->entries || i >= p->num_entries || i < 0) @@ -3485,6 +3501,18 @@ static int ir_log_proc (ClientData clientData, Tcl_Interp *interp, } +/* + * ir_version: log ir version + */ +static int ir_version (ClientData clientData, Tcl_Interp *interp, + int argc, char **argv) +{ + Tcl_AppendElement (interp, IR_TCL_VERSION); + Tcl_AppendElement (interp, YAZ_VERSION); + return TCL_OK; +} + + /* ------------------------------------------------------- */ static void ir_initResponse (void *obj, Z_InitResponse *initrs) { @@ -3591,7 +3619,8 @@ static void ir_handleDBRecord (IrTcl_Obj *p, IrTcl_RecordList *rl, { struct oident *ident; Z_ext_typeent *etype; - + + logf (LOG_DEBUG, "handleDBRecord size=%d", oe->u.octet_aligned->len); rl->u.dbrec.size = oe->u.octet_aligned->len; rl->u.dbrec.buf = NULL; @@ -3609,7 +3638,10 @@ static void ir_handleDBRecord (IrTcl_Obj *p, IrTcl_RecordList *rl, odr_setbuf (p->odr_in, (char*) oe->u.octet_aligned->buf, oe->u.octet_aligned->len, 0); if (!(*etype->fun)(p->odr_in, (char **) &rr, 0)) + { + rl->u.dbrec.type = VAL_NONE; return; + } switch (etype->what) { case Z_External_sutrs: @@ -3745,11 +3777,13 @@ static void ir_searchResponse (void *o, Z_SearchResponse *searchrs, logf (LOG_DEBUG, "Search response, no object!"); return; } - setobj->searchStatus = searchrs->searchStatus ? 1 : 0; + setobj->searchStatus = *searchrs->searchStatus; get_referenceId (&setobj->set_inher.referenceId, searchrs->referenceId); setobj->resultCount = *searchrs->resultCount; if (searchrs->presentStatus) setobj->presentStatus = *searchrs->presentStatus; + else + setobj->presentStatus = Z_RES_NONE; if (searchrs->nextResultSetPosition) setobj->nextResultSetPosition = *searchrs->nextResultSetPosition; @@ -3838,7 +3872,6 @@ static void ir_scanResponse (void *o, Z_ScanResponse *scanrs, Z_Entry **ze; scanobj->entries_flag = 1; -#ifdef ASN_COMPILED if (scanrs->entries) { scanobj->num_entries = scanrs->entries->num_entries; @@ -3846,15 +3879,6 @@ static void ir_scanResponse (void *o, Z_ScanResponse *scanrs, sizeof(*scanobj->entries)); ze = scanrs->entries->entries; } -#else - if (scanrs->entries->which == Z_ListEntries_entries) - { - scanobj->num_entries = scanrs->entries->u.entries->num_entries; - scanobj->entries = ir_tcl_malloc (scanobj->num_entries * - sizeof(*scanobj->entries)); - ze = scanrs->entries->u.entries->entries; - } -#endif for (i=0; inum_entries; i++, ze++) { scanobj->entries[i].which = (*ze)->which; @@ -3886,21 +3910,11 @@ static void ir_scanResponse (void *o, Z_ScanResponse *scanrs, break; } } -#ifdef ASN_COMPILED if (scanrs->entries->nonsurrogateDiagnostics) ir_handleDiags (&scanobj->nonSurrogateDiagnosticList, &scanobj->nonSurrogateDiagnosticNum, scanrs->entries->nonsurrogateDiagnostics, scanrs->entries->num_nonsurrogateDiagnostics); -#else - if (scanrs->entries->which == Z_ListEntries_nonSurrogateDiagnostics) - ir_handleDiags (&scanobj->nonSurrogateDiagnosticList, - &scanobj->nonSurrogateDiagnosticNum, - scanrs->entries->u.nonSurrogateDiagnostics-> - diagRecs, - scanrs->entries->u.nonSurrogateDiagnostics-> - num_diagRecs); -#endif } } @@ -4195,6 +4209,8 @@ EXPORT (int,Irtcl_Init) (Tcl_Interp *interp) (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); Tcl_CreateCommand (interp, "ir-log", ir_log_proc, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL); + Tcl_CreateCommand (interp, "ir-version", ir_version, (ClientData) NULL, + (Tcl_CmdDeleteProc *) NULL); nmem_init (); return TCL_OK; }