
#ifndef HH_TEMPLATE_H
#define HH_TEMPLATE_H

#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif

#ifndef EXEC_MEMORY_H
#include <exec/memory.h>
#endif

#ifndef _CDECL
#define _CDECL(a) _cdecl(a)
#ifndef _cdecl(a)
#define _cdecl(a) ()
#endif
#endif

#define MEMF_X		(MEMF_PUBLIC|MEMF_CLEAR)
#define MEMF_CHIP_X	(MEMF_CHIP|MEMF_X)
#define MEMF_FAST_X	(MEMF_FAST|MEMF_X)

typedef struct TEMPLATE {
       BOOL tp_Flags;       /* A/K/S or EOTP */
       TEXT  *tp_Key;        /* KeyWord */
       TEXT  **tp_UserVar;   /* If Not NULL, Filled With ArgV */
       TEXT  *tp_ArgV;       /* Set By FetchTemplate() */
} TEMPLATE;

extern TEMPLATE Template[]; /* User Must Declare The Real Array */

/* TEMPLATE.tp_Flags, user settable */
#define NOFLAGS    (0x00L)   /* Normal Name */
#define A_FLAG     (0x01L)   /* One That Must Be Given */
#define K_FLAG     (0x02L)   /* Keyword Must Be Preceded If Given */
#define S_FLAG     (0x04L)   /* The Ultimate Switch */
#define EOTP       (0x80L)   /* End Of Template */
/* another flag, but set by FetchTemplate() */
#define FETCHED    (0x40L)   /* Found A Match */

extern BOOL  FetchTemplate   _CDECL((LONG argc, TEXT *argv[]));
extern VOID  ReleaseTemplate _CDECL((VOID));
extern TEXT *KeyArgV         _CDECL((TEXT *key));
extern TEXT *DefaultKeyArgV  _CDECL((TEXT *key, TEXT *defkey));

#endif

