X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=recctrl%2Frecgrs.c;h=1531b048421e68360381f857b2e5e9d3779b0ba0;hb=5f8ba9f35bd3c9aeafe26613021f2edd141b8611;hp=601e80a9fa06fc86ce17532b103914a976ceefbf;hpb=42143dd8393ba4fbad62289dcff47b150c1f4be5;p=idzebra-moved-to-github.git diff --git a/recctrl/recgrs.c b/recctrl/recgrs.c index 601e80a..1531b04 100644 --- a/recctrl/recgrs.c +++ b/recctrl/recgrs.c @@ -1,10 +1,31 @@ /* - * Copyright (C) 1994-1996, Index Data I/S + * Copyright (C) 1994-1997, Index Data I/S * All rights reserved. * Sebastian Hammer, Adam Dickmeiss * * $Log: recgrs.c,v $ - * Revision 1.2 1996-10-11 16:06:43 quinn + * Revision 1.8 1997-09-09 13:38:14 adam + * Partial port to WIN95/NT. + * + * Revision 1.7 1997/09/05 15:30:10 adam + * Changed prototype for chr_map_input - added const. + * Added support for C++, headers uses extern "C" for public definitions. + * + * Revision 1.6 1997/09/04 13:54:40 adam + * Added MARC filter - type grs.marc. where syntax refers + * to abstract syntax. New method tellf in retrieve/extract method. + * + * Revision 1.5 1997/07/15 16:29:03 adam + * Initialized dummy variable to keep checker gcc happy. + * + * Revision 1.4 1997/04/30 08:56:08 quinn + * null + * + * Revision 1.2 1996/10/11 16:06:43 quinn + * Revision 1.3 1997/02/24 10:41:50 adam + * Cleanup of code and commented out the "end element-end-record" code. + * + * Revision 1.2 1996/10/11 16:06:43 quinn * Fixed arguments to nodetogr * * Revision 1.1 1996/10/11 10:57:25 adam @@ -97,7 +118,9 @@ #include #include #include +#ifndef WINDOWS #include +#endif #include #include @@ -118,6 +141,7 @@ static data1_node *read_grs_type (struct grs_read_info *p, const char *type) } tab[] = { { "sgml", grs_read_sgml }, { "regx", grs_read_regx }, + { "marc", grs_read_marc }, { NULL, NULL } }; const char *cp = strchr (type, '.'); @@ -145,9 +169,9 @@ static void grs_init(void) static void dumpkeys_word(data1_node *n, struct recExtractCtrl *p, data1_att *att) { - char *b = n->u.data.data; + const char *b = n->u.data.data; int remain; - char **map = 0; + const char **map = 0; remain = n->u.data.len - (b - n->u.data.data); if (remain > 0) @@ -173,7 +197,7 @@ static void dumpkeys_word(data1_node *n, struct recExtractCtrl *p, i = 0; while (map && *map && **map != *CHR_SPACE) { - char *cp = *map; + const char *cp = *map; while (i < GRS_MAX_WORD && *cp) buf[i++] = *(cp++); @@ -199,8 +223,9 @@ static void dumpkeys_word(data1_node *n, struct recExtractCtrl *p, static void dumpkeys_phrase(data1_node *n, struct recExtractCtrl *p, data1_att *att) { - char *b = n->u.data.data; - char buf[GRS_MAX_WORD+1], **map = 0; + const char *b = n->u.data.data; + char buf[GRS_MAX_WORD+1]; + const char **map = 0; RecWord wrd; int i = 0, remain; @@ -225,7 +250,7 @@ static void dumpkeys_phrase(data1_node *n, struct recExtractCtrl *p, buf[i++] = *CHR_SPACE; while (map && *map && **map != *CHR_SPACE) { - char *cp = *map; + const char *cp = *map; if (i >= GRS_MAX_WORD) break; @@ -374,6 +399,7 @@ static int grs_extract(struct recExtractCtrl *p) gri.readf = p->readf; gri.seekf = p->seekf; + gri.tellf = p->tellf; gri.endf = p->endf; gri.fh = p->fh; gri.offset = p->offset; @@ -385,7 +411,7 @@ static int grs_extract(struct recExtractCtrl *p) if (dumpkeys(n, p, 0) < 0) { data1_free_tree(n); - return -1; + return -2; } data1_free_tree(n); nmem_destroy(mem); @@ -469,6 +495,7 @@ static int grs_retrieve(struct recRetrieveCtrl *p) gri.readf = p->readf; gri.seekf = p->seekf; + gri.tellf = p->tellf; gri.endf = NULL; gri.fh = p->fh; gri.offset = 0; @@ -568,9 +595,10 @@ static int grs_retrieve(struct recRetrieveCtrl *p) p->input_format : VAL_SUTRS)) { data1_marctab *marctab; - int dummy; + int dummy; case VAL_GRS1: + dummy = 0; if (!(p->rec_buf = data1_nodetogr(node, selected, p->odr, &dummy))) p->diagnostic = 2; /* this should be better specified */ else