X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=recctrl%2Fdanbibr.c;h=d949124cf83d3f8e05a6c16529cd62afb619c80d;hb=9b9f570a2960c2c8a7026b2faee943794b08ce49;hp=1235f87ec497b0eee8af037f4e217c407e13d9ef;hpb=898ddf495d4c0306bfbe2ad91a0a368cad9af505;p=idzebra-moved-to-github.git diff --git a/recctrl/danbibr.c b/recctrl/danbibr.c index 1235f87..d949124 100644 --- a/recctrl/danbibr.c +++ b/recctrl/danbibr.c @@ -1,6 +1,6 @@ -/* $Id: danbibr.c,v 1.3 2004-05-26 13:26:17 adam Exp $ - Copyright (C) 2004 - Index Data Aps +/* $Id: danbibr.c,v 1.10 2005-03-31 12:42:06 adam Exp $ + Copyright (C) 1995-2005 + Index Data ApS This file is part of the Zebra server. @@ -26,11 +26,9 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include -#include "grsread.h" +#include #include -#include -#include #define READ_CHUNK 200 @@ -39,7 +37,7 @@ struct danbibr_info { char read_buf[READ_CHUNK+1]; /* space for \0 */ }; -static void *grs_init_danbib(void) +static void *init_danbib(Res res, RecType rt) { struct danbibr_info *p = (struct danbibr_info *) xmalloc (sizeof(*p)); @@ -84,13 +82,12 @@ static int read_rec(struct grs_read_info *p) static data1_node *mk_tree(struct grs_read_info *p, const char *rec_buf) { data1_node *root = data1_mk_root(p->dh, p->mem, "danbib"); + data1_node *root_tag = data1_mk_tag(p->dh, p->mem, "danbib", 0, root); const char *cp = rec_buf; - root = data1_mk_tag(p->dh, p->mem, "danbib", 0, root); - if (1) /* all */ { - data1_node *text_node = data1_mk_tag(p->dh, p->mem, "text", 0, root); + data1_node *text_node = data1_mk_tag(p->dh, p->mem, "text", 0, root_tag); data1_mk_text_n(p->dh, p->mem, rec_buf, strlen(rec_buf), text_node); } while (*cp) @@ -121,7 +118,7 @@ static data1_node *mk_tree(struct grs_read_info *p, const char *rec_buf) data1_node *hnode; sprintf(elemstr, "head%d", no); - hnode = data1_mk_tag(p->dh, p->mem, elemstr, 0, root); + hnode = data1_mk_tag(p->dh, p->mem, elemstr, 0, root_tag); data1_mk_text_n(p->dh, p->mem, start_text, cp - start_text, hnode); start_text = cp+1; @@ -137,7 +134,7 @@ static data1_node *mk_tree(struct grs_read_info *p, const char *rec_buf) { data1_node *tag_node = data1_mk_tag_n(p->dh, p->mem, - start_tag, cp - start_tag, 0, root); + start_tag, cp - start_tag, 0, root_tag); cp++; start_text = cp; while (*cp != '\n' && *cp) @@ -189,7 +186,7 @@ static data1_node *mk_tree(struct grs_read_info *p, const char *rec_buf) return root; } -static data1_node *grs_read_danbib (struct grs_read_info *p) +static data1_node *read_danbib (struct grs_read_info *p) { struct danbibr_info *info = p->clientData; @@ -198,7 +195,7 @@ static data1_node *grs_read_danbib (struct grs_read_info *p) return 0; } -static void grs_destroy_danbib(void *clientData) +static void destroy_danbib(void *clientData) { struct danbibr_info *p = (struct danbibr_info *) clientData; @@ -206,12 +203,38 @@ static void grs_destroy_danbib(void *clientData) xfree (p); } -static struct recTypeGrs danbib_type = { - "danbib", - grs_init_danbib, - grs_destroy_danbib, - grs_read_danbib + +static int extract_danbib(void *clientData, struct recExtractCtrl *ctrl) +{ + return zebra_grs_extract(clientData, ctrl, read_danbib); +} + +static int retrieve_danbib(void *clientData, struct recRetrieveCtrl *ctrl) +{ + return zebra_grs_retrieve(clientData, ctrl, read_danbib); +} + +static struct recType danbib_type = { + 0, + "grs.danbib", + init_danbib, + 0, + destroy_danbib, + extract_danbib, + retrieve_danbib, +}; + +RecType +#ifdef IDZEBRA_STATIC_GRS_DANBIB +idzebra_filter_grs_danbib +#else +idzebra_filter +#endif + +[] = { + &danbib_type, + 0, }; + -RecTypeGrs recTypeGrs_danbib = &danbib_type;