+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)