X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=recctrl%2Frecctrl.c;h=4c3a60544bf477b65233b8dc4a170975c78ccde0;hb=08f481538f810a51b7f60d1c65b1dc7b121cf3a0;hp=b0e7b9b2b4a467bb6abae9847401f6b1b85b9080;hpb=c325477904a47c61586ad9b756b9280c22351c6b;p=idzebra-moved-to-github.git diff --git a/recctrl/recctrl.c b/recctrl/recctrl.c index b0e7b9b..4c3a605 100644 --- a/recctrl/recctrl.c +++ b/recctrl/recctrl.c @@ -1,34 +1,26 @@ -/* - * Copyright (C) 1994-1996, Index Data I/S - * All rights reserved. - * Sebastian Hammer, Adam Dickmeiss - * - * $Log: recctrl.c,v $ - * Revision 1.2 1996-10-29 14:03:16 adam - * Include zebrautl.h instead of alexutil.h. - * - * Revision 1.1 1996/10/11 10:57:24 adam - * New module recctrl. Used to manage records (extract/retrieval). - * - * Revision 1.5 1996/06/04 10:18:59 adam - * Minor changes - removed include of ctype.h. - * - * Revision 1.4 1995/12/04 17:59:24 adam - * More work on regular expression conversion. - * - * Revision 1.3 1995/12/04 14:22:30 adam - * Extra arg to recType_byName. - * Started work on new regular expression parsed input to - * structured records. - * - * Revision 1.2 1995/11/15 14:46:19 adam - * Started work on better record management system. - * - * Revision 1.1 1995/09/27 12:22:28 adam - * More work on extract in record control. - * Field name is not in isam keys but in prefix in dictionary words. - * - */ +/* $Id: recctrl.c,v 1.6 2002-08-02 19:26:56 adam Exp $ + Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 + Index Data Aps + +This file is part of the Zebra server. + +Zebra is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Zebra is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Zebra; see the file LICENSE.zebra. If not, write to the +Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. +*/ + + #include #include #include @@ -37,8 +29,54 @@ #include "rectext.h" #include "recgrs.h" -RecType recType_byName (const char *name, char *subType) +struct recTypeEntry { + RecType recType; + struct recTypeEntry *next; + int init_flag; + void *clientData; +}; + +struct recTypes { + data1_handle dh; + struct recTypeEntry *entries; +}; + +RecTypes recTypes_init (data1_handle dh) +{ + RecTypes p = (RecTypes) nmem_malloc (data1_nmem_get (dh), sizeof(*p)); + + p->dh = dh; + p->entries = 0; + return p; +} + +void recTypes_destroy (RecTypes rts) { + struct recTypeEntry *rte; + + for (rte = rts->entries; rte; rte = rte->next) + if (rte->init_flag) + (*(rte->recType)->destroy)(rte->clientData); +} + +void recTypes_add_handler (RecTypes rts, RecType rt) +{ + struct recTypeEntry *rte; + + rte = (struct recTypeEntry *) + nmem_malloc (data1_nmem_get (rts->dh), sizeof(*rte)); + + rte->recType = rt; + rte->init_flag = 0; + rte->clientData = 0; + rte->next = rts->entries; + rts->entries = rte; +} + +RecType recType_byName (RecTypes rts, const char *name, char *subType, + void **clientDataP) +{ + struct recTypeEntry *rte; char *p; char tmpname[256]; @@ -50,10 +88,23 @@ RecType recType_byName (const char *name, char *subType) } else *subType = '\0'; - if (!strcmp (recTypeGrs->name, tmpname)) - return recTypeGrs; - if (!strcmp (recTypeText->name, tmpname)) - return recTypeText; - return NULL; + for (rte = rts->entries; rte; rte = rte->next) + if (!strcmp (rte->recType->name, tmpname)) + { + if (!rte->init_flag) + { + rte->init_flag = 1; + rte->clientData = + (*(rte->recType)->init)(rte->recType); + } + *clientDataP = rte->clientData; + return rte->recType; + } + return 0; } +void recTypes_default_handlers (RecTypes rts) +{ + recTypes_add_handler (rts, recTypeGrs); + recTypes_add_handler (rts, recTypeText); +}