X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=recctrl%2Frecctrl.c;h=9530959a2e85621d4343f2910521d1a79be14e67;hb=cc4fcee50354f71ed32a586de6d226b61139819e;hp=cd4359b4b39fd59755b08b4aa550a991a10ba7da;hpb=75049be3951292bbbbd53d83ca38ccbd191e4b08;p=idzebra-moved-to-github.git diff --git a/recctrl/recctrl.c b/recctrl/recctrl.c index cd4359b..9530959 100644 --- a/recctrl/recctrl.c +++ b/recctrl/recctrl.c @@ -1,10 +1,16 @@ /* - * Copyright (C) 1994-1998, Index Data + * Copyright (C) 1994-1999, Index Data * All rights reserved. * Sebastian Hammer, Adam Dickmeiss * * $Log: recctrl.c,v $ - * Revision 1.3 1998-10-16 08:14:36 adam + * Revision 1.5 1999-05-26 07:49:14 adam + * C++ compilation. + * + * Revision 1.4 1999/05/20 12:57:18 adam + * Implemented TCL filter. Updated recctrl system. + * + * Revision 1.3 1998/10/16 08:14:36 adam * Updated record control system. * * Revision 1.2 1996/10/29 14:03:16 adam @@ -44,6 +50,7 @@ struct recTypeEntry { RecType recType; struct recTypeEntry *next; int init_flag; + void *clientData; }; struct recTypes { @@ -66,22 +73,25 @@ void recTypes_destroy (RecTypes rts) for (rte = rts->entries; rte; rte = rte->next) if (rte->init_flag) - (*(rte->recType)->destroy)(rte->recType); + (*(rte->recType)->destroy)(rte->clientData); } void recTypes_add_handler (RecTypes rts, RecType rt) { struct recTypeEntry *rte; - rte = nmem_malloc (data1_nmem_get (rts->dh), sizeof(*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) +RecType recType_byName (RecTypes rts, const char *name, char *subType, + void **clientDataP) { struct recTypeEntry *rte; char *p; @@ -101,8 +111,10 @@ RecType recType_byName (RecTypes rts, const char *name, char *subType) if (!rte->init_flag) { rte->init_flag = 1; - (*(rte->recType)->init)(rte->recType); + rte->clientData = + (*(rte->recType)->init)(rte->recType); } + *clientDataP = rte->clientData; return rte->recType; } return 0;