#ifndef _FTREG_H_
#define _FTREG_H_  1
 /* #include "stddef.h"  */

#include "sysdep.h"
#include "bool.h"
#include "biregistry.h"
#include "FieldType.h"


struct AlFieldTypeRegistry_str {
#ifdef __STDC__
  const char *                  name;
#else
  char *                        name;
#endif
  FieldParserProc 		*parser;
  FieldUnParserProc		*un_parser;
  FieldOpArg                    *fieldOpList;
  IndexOpArg                    *indexOpList;
  InterFieldOpArg               *interFieldOpList;
  FieldFreeParsedDataProc 	*free_parsed_data;
};

#define RegisterFieldType(f) AlFTreg_register_field_type(f)
#ifdef __STDC__
extern NORET    AlFTreg_init(NOARGS);
extern Biregistry AlFTreg_get_globalref(NOARGS);
extern NORET    AlFTreg_register_field_type(struct AlFieldTypeRegistry_str *);
extern NORET    AlFTreg_get_all_field_types(Darray);
extern const char *   AlFTreg_obj_to_string(AlFieldType);
extern AlFieldType  AlFTreg_string_to_obj(const char *);
extern Bool     AlFTreg_exists_obj(AlFieldType);
extern Bool     AlFTreg_exists_string(const char *);
#else
extern NORET    AlFTreg_init();
extern Biregistry AlFTreg_get_globalref();
extern NORET    AlFTreg_register_field_type();
extern NORET    AlFTreg_get_all_field_types();
extern char *   AlFTreg_obj_to_string();
extern AlFieldType  AlFTreg_string_to_obj();
extern Bool     AlFTreg_exists_obj();
extern Bool     AlFTreg_exists_string();
#endif

#endif


/**************************************************
  DESCRIPTION OF FUNCTIONS
extern Registry AlFTreg_get_globalref();
     IN: -
     RE: a biregistry which contains <name,AlFieldType> pairs.  You can use 
         the Registry functions to get a AlFieldType from a name.

extern NORET     AlFTreg_register_field_type(struct AlFieldTypeRegistry_str *);
     IN: takes a AlFieldTypeRegistry_str which contains all the info about
         a new field type.  Read the document /mit/rap/lens/R/FT_registering.t
     RE: -

extern NORET     AlFTreg_get_all_field_types(Darray);
     IN: a Darray. The names of the available field types will be added to
         the Darray by the Darray_addl(..) function.
     RE: -

****************************************************/



