#ifndef _foldert_h_
#define _foldert_h_

typedef struct AlFolderType_struct *AlFolderType;

#include <stdio.h>
#include <string.h>
#include "sysdep.h"
#include "assert.h"
#include "bool.h"
#include "folder.h"
#include "registry.h"
#include "darray.h"
#include "msg.h"
#include "FieldCore.h"
#include "FieldType.h"
#include "memory.h"

#define KEY char *
#define INDICES unsigned *
#define STRING char *

extern Registry AlFolderTypeRegistry;

/* set up typedefs for pointers to functions that return pointers to objects */
/* ------------------------------------------------------------------------- */
typedef VOIDP (*VOIDP_FUNCPTR) ();
typedef Msg (*MSG_FUNCPTR) ();
typedef NORET (*NORET_FUNCPTR) ();
typedef Bool (*BOOL_FUNCPTR) ();

#ifdef __STDC__

extern NORET AlFolderT_register(STRING, VOIDP_FUNCPTR, VOIDP_FUNCPTR, 
				NORET_FUNCPTR, BOOL_FUNCPTR, BOOL_FUNCPTR, 
				NORET_FUNCPTR, NORET_FUNCPTR, VOIDP);
extern STRING AlFolderT_name(AlFolderType);     /* get name of FolderType ob */
extern AlFolderType AlFolderT_get_folder_type(STRING);  /* get FT ob by name */
extern STRING AlFolderT_default_name(); /* get name of default FolderType ob */
extern AlFolderType AlFolderT_default_type();          /* get default FT ob  */
extern VOIDP AlFolderT_eval_create_from_file(AlFolderType, STRING, int);
extern VOIDP AlFolderT_eval_create_from_stdin(AlFolderType);
extern Bool AlFolderT_remove_msg(AlFolderType, VOIDP, Msg);
extern Bool AlFolderT_add_msg(AlFolderType, VOIDP, Msg);
extern NORET AlFolderT_print_self(AlFolderType, VOIDP, FILE *);
extern NORET AlFolderT_eval_destroy(AlFolderType, VOIDP);
extern NORET AlFolderT_eval_next_msg(AlFolderType, VOIDP,
				   char **, char **, char **,
				   Registry, Bool, Bool, Bool, Msg);

#else

extern NORET AlFolderT_register();
extern STRING AlFolderT_name();               /* get name of FolderType ob */
extern AlFolderType AlFolderT_get_folder_type(); /* get FolderType by name */
extern STRING AlFolderT_default_name(); /* get name of default FolderType ob */
extern AlFolderType AlFolderT_default_type();          /* get default FT ob  */
extern VOIDP AlFolderT_eval_create_from_file();
extern VOIDP AlFolderT_eval_create_from_stdin();
extern Bool AlFolderT_remove_msg();
extern Bool AlFolderT_add_msg();
extern NORET AlFolderT_print_self();
extern NORET AlFolderT_eval_destroy();
extern NORET AlFolderT_eval_next_msg();

#endif      /* end of  #ifdef __STDC__  */

#endif         /* end of ifndef _foldert_h_  :: DO NOT WRITE BELOW THIS LINE. */
