From 63ce3b67bdea2b7cd0531f3f11ccbc8c94753455 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Tue, 13 Oct 1998 16:12:23 +0000 Subject: [PATCH] Added support for Surrogate Diagnostics for Scan Term entries. --- include/backend.h | 11 ++++++--- server/seshigh.c | 71 ++++++++++++++++++++++++++++++++++++----------------- ztest/ztest.c | 23 ++++++++++++++--- 3 files changed, 76 insertions(+), 29 deletions(-) diff --git a/include/backend.h b/include/backend.h index d31fc72..2cd4745 100644 --- a/include/backend.h +++ b/include/backend.h @@ -24,7 +24,10 @@ * OF THIS SOFTWARE. * * $Log: backend.h,v $ - * Revision 1.22 1998-09-02 12:41:51 adam + * Revision 1.23 1998-10-13 16:12:23 adam + * Added support for Surrogate Diagnostics for Scan Term entries. + * + * Revision 1.22 1998/09/02 12:41:51 adam * Added decode stream in bend search structures. * * Revision 1.21 1998/07/20 12:38:41 adam @@ -157,8 +160,10 @@ typedef struct } bend_scanrequest; struct scan_entry { - char *term; - int occurrences; + char *term; /* the returned scan term */ + int occurrences; /* no of occurrences or -1 if error (see below) */ + int errcode; /* Bib-1 diagnostic code; only used when occur.= -1 */ + char *errstring; /* Additional string */ }; typedef enum { diff --git a/server/seshigh.c b/server/seshigh.c index 5421432..0a54b65 100644 --- a/server/seshigh.c +++ b/server/seshigh.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: seshigh.c,v $ - * Revision 1.80 1998-09-02 12:41:53 adam + * Revision 1.81 1998-10-13 16:12:24 adam + * Added support for Surrogate Diagnostics for Scan Term entries. + * + * Revision 1.80 1998/09/02 12:41:53 adam * Added decode stream in bend search structures. * * Revision 1.79 1998/08/19 16:10:08 adam @@ -885,11 +888,15 @@ static void set_addinfo (Z_DefaultDiagFormat *dr, char *addinfo) static Z_Records *diagrec(association *assoc, int error, char *addinfo) { int oid[OID_SIZE]; - Z_Records *rec = (Z_Records *)odr_malloc (assoc->encode, sizeof(*rec)); + Z_Records *rec = (Z_Records *) + odr_malloc (assoc->encode, sizeof(*rec)); oident bib1; - int *err = (int *)odr_malloc (assoc->encode, sizeof(*err)); - Z_DiagRec *drec = (Z_DiagRec *)odr_malloc (assoc->encode, sizeof(*drec)); - Z_DefaultDiagFormat *dr = (Z_DefaultDiagFormat *)odr_malloc (assoc->encode, sizeof(*dr)); + int *err = (int *) + odr_malloc (assoc->encode, sizeof(*err)); + Z_DiagRec *drec = (Z_DiagRec *) + odr_malloc (assoc->encode, sizeof(*drec)); + Z_DefaultDiagFormat *dr = (Z_DefaultDiagFormat *) + odr_malloc (assoc->encode, sizeof(*dr)); bib1.proto = assoc->proto; bib1.oclass = CLASS_DIAGSET; @@ -1512,23 +1519,43 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) Odr_oct *o; tab[i] = e = (Z_Entry *)odr_malloc(assoc->encode, sizeof(*e)); - e->which = Z_Entry_termInfo; - e->u.termInfo = t = (Z_TermInfo *)odr_malloc(assoc->encode, sizeof(*t)); - t->suggestedAttributes = 0; - t->displayTerm = 0; - t->alternativeTerm = 0; - t->byAttributes = 0; - t->otherTermInfo = 0; - t->globalOccurrences = &srs->entries[i].occurrences; - t->term = (Z_Term *)odr_malloc(assoc->encode, sizeof(*t->term)); - t->term->which = Z_Term_general; - t->term->u.general = o = (Odr_oct *)odr_malloc(assoc->encode, - sizeof(Odr_oct)); - o->buf = (unsigned char *)odr_malloc(assoc->encode, o->len = o->size = - strlen(srs->entries[i].term)); - memcpy(o->buf, srs->entries[i].term, o->len); - logf(LOG_DEBUG, " term #%d: '%s' (%d)", i, - srs->entries[i].term, srs->entries[i].occurrences); + if (srs->entries[i].occurrences >= 0) + { + e->which = Z_Entry_termInfo; + e->u.termInfo = t = (Z_TermInfo *) + odr_malloc(assoc->encode, sizeof(*t)); + t->suggestedAttributes = 0; + t->displayTerm = 0; + t->alternativeTerm = 0; + t->byAttributes = 0; + t->otherTermInfo = 0; + t->globalOccurrences = &srs->entries[i].occurrences; + t->term = (Z_Term *) + odr_malloc(assoc->encode, sizeof(*t->term)); + t->term->which = Z_Term_general; + t->term->u.general = o = + (Odr_oct *)odr_malloc(assoc->encode, sizeof(Odr_oct)); + o->buf = (unsigned char *) + odr_malloc(assoc->encode, o->len = o->size = + strlen(srs->entries[i].term)); + memcpy(o->buf, srs->entries[i].term, o->len); + logf(LOG_DEBUG, " term #%d: '%s' (%d)", i, + srs->entries[i].term, srs->entries[i].occurrences); + } + else + { + Z_Records *zrecords = diagrec (assoc, + srs->entries[i].errcode, + srs->entries[i].errstring); + logf(LOG_DEBUG, " term sd code=%d addinfo=%s", + srs->entries[i].errcode, + (srs->entries[i].errstring?srs->entries[i].errstring : + "")); + assert (zrecords->which == Z_Records_NSD); + e->which = Z_Entry_surrogateDiagnostic; + e->u.surrogateDiagnostic = + zrecords->u.nonSurrogateDiagnostic; + } } } } diff --git a/ztest/ztest.c b/ztest/ztest.c index 06e2a58..e6ce6a2 100644 --- a/ztest/ztest.c +++ b/ztest/ztest.c @@ -7,7 +7,10 @@ * Chas Woodfield, Fretwell Downing Datasystems. * * $Log: ztest.c,v $ - * Revision 1.13 1998-08-19 16:10:09 adam + * Revision 1.14 1998-10-13 16:12:25 adam + * Added support for Surrogate Diagnostics for Scan Term entries. + * + * Revision 1.13 1998/08/19 16:10:09 adam * Changed som member names of DeleteResultSetRequest/Response. * * Revision 1.12 1998/07/20 12:38:44 adam @@ -260,7 +263,8 @@ bend_fetchresult *bend_fetch(void *handle, bend_fetchrequest *q, int *fd) */ bend_scanresult *bend_scan(void *handle, bend_scanrequest *q, int *fd) { - bend_scanresult *r = (bend_scanresult *) odr_malloc (q->stream, sizeof(*r)); + bend_scanresult *r = (bend_scanresult *) + odr_malloc (q->stream, sizeof(*r)); static FILE *f = 0; static struct scan_entry list[200]; static char entries[200][80]; @@ -317,8 +321,19 @@ bend_scanresult *bend_scan(void *handle, bend_scanrequest *q, int *fd) po = pos - r->term_position + r->num_entries + 1; /* find pos */ if (po < 0) po += 200; - list[r->num_entries].term = entries[po]; - list[r->num_entries].occurrences = hits[po]; + + if (!strcmp (term, "sd") && r->num_entries == 2) + { + list[r->num_entries].term = entries[pos]; + list[r->num_entries].occurrences = -1; + list[r->num_entries].errcode = 233; + list[r->num_entries].errstring = "SD for Scan Term"; + } + else + { + list[r->num_entries].term = entries[po]; + list[r->num_entries].occurrences = hits[po]; + } } } else if (r->num_entries) -- 1.7.10.4