+ char *name; /* Name of record type */
+ void *(*init)(RecType recType); /* Init function - called once */
+ void (*destroy)(void *clientData); /* Destroy function */
+ int (*extract)(void *clientData,
+ struct recExtractCtrl *ctrl); /* Extract proc */
+ int (*retrieve)(void *clientData,
+ struct recRetrieveCtrl *ctrl); /* Retrieve proc */
+};
+
+#define RECCTRL_EXTRACT_OK 0
+#define RECCTRL_EXTRACT_EOF 1
+#define RECCTRL_EXTRACT_ERROR_GENERIC 2
+#define RECCTRL_EXTRACT_ERROR_NO_SUCH_FILTER 3
+
+typedef struct recTypes *RecTypes;
+
+RecTypes recTypes_init (data1_handle dh);
+void recTypes_destroy (RecTypes recTypes);
+void recTypes_default_handlers (RecTypes recTypes);
+
+RecType recType_byName (RecTypes rts, const char *name, char *subType,
+ void **clientDataP);
+
+int grs_extract_tree(struct recExtractCtrl *p, data1_node *n);
+
+#ifdef __cplusplus
+}
+#endif