X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=grs.c;h=2adc2e00501fe1a9a94840df8f116715dc20b537;hb=d026c3e06f6e19e5ed4174ab1a504a4b5af79183;hp=fc62ff99fd504c157221e4ee130bfebb38ec6559;hpb=0b17556c40fba07f064ed5e48015604568c9f583;p=ir-tcl-moved-to-github.git diff --git a/grs.c b/grs.c index fc62ff9..2adc2e0 100644 --- a/grs.c +++ b/grs.c @@ -1,11 +1,20 @@ /* * IR toolkit for tcl/tk - * (c) Index Data 1995 + * (c) Index Data 1995-1997 * See the file LICENSE for details. * Sebastian Hammer, Adam Dickmeiss * * $Log: grs.c,v $ - * Revision 1.8 1996-07-03 13:31:10 adam + * Revision 1.11 1997-11-19 11:22:09 adam + * Object identifiers can be accessed in GRS-1 records. + * + * Revision 1.10 1997/09/09 10:19:52 adam + * New MSV5.0 port with fewer warnings. + * + * Revision 1.9 1996/08/16 15:07:44 adam + * First work on Explain. + * + * Revision 1.8 1996/07/03 13:31:10 adam * The xmalloc/xfree functions from YAZ are used to manage memory. * * Revision 1.7 1996/06/05 09:26:20 adam @@ -81,6 +90,8 @@ void ir_tcl_grs_del (IrTcl_GRS_Record **grs_record) break; case Z_ElementData_trueOrFalse: case Z_ElementData_oid: + xfree (e->tagData.oid); + break; case Z_ElementData_intUnit: case Z_ElementData_elementNotThere: case Z_ElementData_elementEmpty: @@ -116,6 +127,7 @@ void ir_tcl_grs_mk (Z_GenericRecord *r, IrTcl_GRS_Record **grs_record) for (i = 0; i < r->num_elements; i++, e++) { Z_TaggedElement *t; + int len; t = r->elements[i]; if (t->tagType) @@ -152,6 +164,10 @@ void ir_tcl_grs_mk (Z_GenericRecord *r, IrTcl_GRS_Record **grs_record) e->tagData.bool = *t->content->u.trueOrFalse; break; case Z_ElementData_oid: + len = 1+oid_oidlen (t->content->u.oid); + e->tagData.oid = ir_tcl_malloc (len * sizeof(*e->tagData.oid)); + memcpy (e->tagData.oid, t->content->u.oid, + len * sizeof(*e->tagData.oid)); break; case Z_ElementData_intUnit: break; @@ -200,7 +216,7 @@ static int ir_tcl_get_grs_r (Tcl_Interp *interp, IrTcl_GRS_Record *grs_record, } else { - int len = strlen(cp1+1); + size_t len = strlen(cp1+1); if (cp1[len] == ')') len--; if (len && strlen(e->tagVal.str) == len && @@ -252,7 +268,20 @@ static int ir_tcl_get_grs_r (Tcl_Interp *interp, IrTcl_GRS_Record *grs_record, e->tagData.bool ? "1" : "0", " ", NULL); break; case Z_ElementData_oid: - Tcl_AppendResult (interp, " oid {} ", NULL); + Tcl_AppendResult (interp, " oid", NULL); + if (!e->tagData.oid) + Tcl_AppendResult (interp, "{}", NULL); + else + { + int i; + int sep = ' '; + for (i = 0; e->tagData.oid[i] >= 0; i++) + { + sprintf (tmpbuf, "%c%d", sep, e->tagData.oid[i]); + Tcl_AppendResult (interp, tmpbuf, NULL); + sep = '.'; + } + } break; case Z_ElementData_intUnit: Tcl_AppendResult (interp, " intUnit {} ", NULL);