X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=recctrl%2Frecgrs.c;h=d2beb77da6414c214d4135252ff6a97f487c1398;hb=6e044d5a523bb4363d07af757ebf1bcfe0ad6c04;hp=9b07e1355f1ce2d455f5dc37c146fb11639191f1;hpb=ec5e593725d0d141d2005c3fc11207bde70912e0;p=idzebra-moved-to-github.git diff --git a/recctrl/recgrs.c b/recctrl/recgrs.c index 9b07e13..d2beb77 100644 --- a/recctrl/recgrs.c +++ b/recctrl/recgrs.c @@ -1,10 +1,29 @@ /* - * Copyright (C) 1994-1998, Index Data I/S + * Copyright (C) 1994-1999, Index Data * All rights reserved. * Sebastian Hammer, Adam Dickmeiss * * $Log: recgrs.c,v $ - * Revision 1.18 1998-03-05 08:41:31 adam + * Revision 1.24 1999-02-02 14:51:28 adam + * Updated WIN32 code specific sections. Changed header. + * + * Revision 1.23 1998/10/18 07:51:10 adam + * Changed one logf call. + * + * Revision 1.22 1998/10/16 08:14:37 adam + * Updated record control system. + * + * Revision 1.21 1998/07/01 09:16:10 adam + * Element localno only added when it's greater than 0. + * + * Revision 1.20 1998/05/20 10:12:26 adam + * Implemented automatic EXPLAIN database maintenance. + * Modified Zebra to work with ASN.1 compiled version of YAZ. + * + * Revision 1.19 1998/03/11 11:19:05 adam + * Changed the way sequence numbers are generated. + * + * Revision 1.18 1998/03/05 08:41:31 adam * Minor changes. * * Revision 1.17 1998/02/10 12:03:06 adam @@ -150,7 +169,7 @@ #include #include #include -#ifndef WINDOWS +#ifndef WIN32 #include #endif @@ -162,8 +181,6 @@ #define GRS_MAX_WORD 512 -static int seqno = 0; - static data1_node *read_grs_type (struct grs_read_info *p, const char *type) { static struct { @@ -193,7 +210,11 @@ static data1_node *read_grs_type (struct grs_read_info *p, const char *type) return NULL; } -static void grs_init(void) +static void grs_init(RecType recType) +{ +} + +static void grs_destroy(RecType recType) { } @@ -291,13 +312,11 @@ static int dumpkeys(data1_node *n, struct recExtractCtrl *p, int level) else { wrd.reg_type = *tlist->structure; - wrd.seqno = seqno; wrd.string = n->u.data.data; wrd.length = n->u.data.len; - wrd.attrSet = tlist->att->parent->ordinal; + wrd.attrSet = (int) (tlist->att->parent->reference); wrd.attrUse = tlist->att->locals->local; - (*p->add)(&wrd); - seqno = wrd.seqno; + (*p->addWord)(&wrd); } } } @@ -309,12 +328,28 @@ static int dumpkeys(data1_node *n, struct recExtractCtrl *p, int level) return 0; } +int grs_extract_tree(struct recExtractCtrl *p, data1_node *n) +{ + oident oe; + int oidtmp[OID_SIZE]; + + oe.proto = PROTO_Z3950; + oe.oclass = CLASS_SCHEMA; + oe.value = n->u.root.absyn->reference; + + if ((oid_ent_to_oid (&oe, oidtmp))) + (*p->addSchema)(p, oidtmp); + + return dumpkeys(n, p, 0); +} + static int grs_extract(struct recExtractCtrl *p) { data1_node *n; NMEM mem; struct grs_read_info gri; - seqno = 0; + oident oe; + int oidtmp[OID_SIZE]; mem = nmem_create (); gri.readf = p->readf; @@ -329,6 +364,13 @@ static int grs_extract(struct recExtractCtrl *p) n = read_grs_type (&gri, p->subType); if (!n) return -1; + + oe.proto = PROTO_Z3950; + oe.oclass = CLASS_SCHEMA; + oe.value = n->u.root.absyn->reference; + if ((oid_ent_to_oid (&oe, oidtmp))) + (*p->addSchema)(p, oidtmp); + if (dumpkeys(n, p, 0) < 0) { data1_free_tree(p->dh, n); @@ -403,7 +445,7 @@ static int process_comp(data1_handle dh, data1_node *n, Z_RecordComposition *c) } if (espec) { - logf (LOG_LOG, "Element: Espec-1 match"); + logf (LOG_DEBUG, "Element: Espec-1 match"); return data1_doespec1(dh, n, espec); } else @@ -463,7 +505,7 @@ static int grs_retrieve(struct recRetrieveCtrl *p) } logf (LOG_DEBUG, "grs_retrieve: localControlNumber"); - if ((dnew = data1_insert_taggeddata(p->dh, node, node, + if (p->localno > 0 && (dnew = data1_insert_taggeddata(p->dh, node, node, "localControlNumber", mem))) { dnew->u.data.what = DATA1I_text; @@ -619,6 +661,7 @@ static struct recType grs_type = { "grs", grs_init, + grs_destroy, grs_extract, grs_retrieve };