X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=recctrl%2Frecgrs.c;h=b4ef25cd00ca9e6c5888aaae385e7bf8627f5815;hb=e9b33fe049e35d06dfeedb830feea32553d26cee;hp=4ebbe6f39477aa87c06f88909fad87fd2b8b91e3;hpb=85a2a0b28cb516d28ac70b7824f2b7d4b07e56ae;p=idzebra-moved-to-github.git diff --git a/recctrl/recgrs.c b/recctrl/recgrs.c index 4ebbe6f..b4ef25c 100644 --- a/recctrl/recgrs.c +++ b/recctrl/recgrs.c @@ -1,10 +1,28 @@ /* - * 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.20 1998-05-20 10:12:26 adam + * Revision 1.26 1999-03-02 16:15:44 quinn + * Added "tagsysno" and "tagrank" directives to zebra.cfg. + * + * Revision 1.25 1999/02/18 15:01:26 adam + * Minor changes. + * + * 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. * @@ -157,7 +175,7 @@ #include #include #include -#ifndef WINDOWS +#ifndef WIN32 #include #endif @@ -198,7 +216,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) { } @@ -429,7 +451,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 @@ -447,6 +469,7 @@ static int grs_retrieve(struct recRetrieveCtrl *p) int res, selected = 0; NMEM mem; struct grs_read_info gri; + char *tagname; mem = nmem_create(); gri.readf = p->readf; @@ -476,22 +499,24 @@ static int grs_retrieve(struct recRetrieveCtrl *p) dnew->u.data.len = strlen(dnew->u.data.data); } - logf (LOG_DEBUG, "grs_retrieve: score"); - if (p->score >= 0 && (dnew = + tagname = res_get_def(p->res, "tagrank", "rank"); + if (strcmp(tagname, "0") && p->score >= 0 && (dnew = data1_insert_taggeddata(p->dh, node, - node, "rank", + node, tagname, mem))) { + logf (LOG_DEBUG, "grs_retrieve: %s", tagname); dnew->u.data.what = DATA1I_num; dnew->u.data.data = dnew->lbuf; sprintf(dnew->u.data.data, "%d", p->score); dnew->u.data.len = strlen(dnew->u.data.data); } - logf (LOG_DEBUG, "grs_retrieve: localControlNumber"); - if ((dnew = data1_insert_taggeddata(p->dh, node, node, - "localControlNumber", mem))) + tagname = res_get_def(p->res, "tagsysno", "localControlNumber"); + if (strcmp(tagname, "0") && p->localno > 0 && + (dnew = data1_insert_taggeddata(p->dh, node, node, tagname, mem))) { + logf (LOG_DEBUG, "grs_retrieve: %s", tagname); dnew->u.data.what = DATA1I_text; dnew->u.data.data = dnew->lbuf; sprintf(dnew->u.data.data, "%d", p->localno); @@ -604,11 +629,23 @@ static int grs_retrieve(struct recRetrieveCtrl *p) if (!(p->rec_buf = data1_nodetobuf(p->dh, node, selected, (int*)&p->rec_len))) p->diagnostic = 238; + else + { + char *new_buf = (char*) odr_malloc (p->odr, p->rec_len); + memcpy (new_buf, p->rec_buf, p->rec_len); + p->rec_buf = new_buf; + } break; case VAL_SOIF: if (!(p->rec_buf = data1_nodetosoif(p->dh, node, selected, (int*)&p->rec_len))) p->diagnostic = 238; + else + { + char *new_buf = (char*) odr_malloc (p->odr, p->rec_len); + memcpy (new_buf, p->rec_buf, p->rec_len); + p->rec_buf = new_buf; + } break; default: if (!node->u.root.absyn) @@ -628,9 +665,12 @@ static int grs_retrieve(struct recRetrieveCtrl *p) if (!(p->rec_buf = data1_nodetomarc(p->dh, marctab, node, selected, (int*)&p->rec_len))) - { p->diagnostic = 238; - break; + else + { + char *new_buf = (char*) odr_malloc (p->odr, p->rec_len); + memcpy (new_buf, p->rec_buf, p->rec_len); + p->rec_buf = new_buf; } } if (node) @@ -645,6 +685,7 @@ static struct recType grs_type = { "grs", grs_init, + grs_destroy, grs_extract, grs_retrieve };