#include <exec/types.h>
#include <ctype.h>
#include <libraries/dos.h>

#define MAXILINE  (1500)     /* largest logical line to read */
#define MAXBUFF   (400)      /* largest line produced from macro processor*/
#define MAXCMD    (1800)     /* absolute largest command produced */
#define COMMENT   '#'        /* delimits a comment        */
#define MAKEFILE  "makefile" /* name of default makefile */
#define BUILTINS  "c:builtins.make" 
#define DEFTIME   0          /* default time when a file doesn't exist */
#define COLON     ':'
#define SEMICOLON ';'
#define ESCAPE    '$'
#define FILENAME  1
#define EOS       0
#define ASSIGN    '='

typedef struct _sn
   {
   struct _sn    *next;
   char          *string;
   } STRNODE;

typedef struct _tn
   {
   struct _tn    *lnode;       /* pointer to left subtree         */
   struct _tn    *rnode;       /* pointer to right subtree        */
   struct _sn    *targets;     /* name of files being made        */
   struct _sn    *depends;     /* names of dependant files        */
   struct _sn    *commands;    /* Actions to be done to make file */
   char          error;        /* any errors occured on branch    */
   } TNODE;

typedef struct _bn
   {
   struct _bn    *lnode;       /* pointer to left subtree         */
   struct _bn    *rnode;       /* pointer to right subtree        */
   char          *name;        /* item name                       */
   char          *inode;       /* pointer to date for name        */
   } TREENODE;

/*----------------------------------------------------------------*/
extern TREENODE  *Root;          /* Root of file-name tree        */
extern TREENODE  *Macros;        /* Root of macro substitutions   */
extern BPTR   OutputFile;
extern int    Inputline;         /* current input line number     */
extern char   *cmdbuff;
extern char   AlwaysRebuild;     /* -a */
#ifdef DEBUG
extern char   DebugMode;         /* -d */
#endif
extern char   CreateBatch;       /* -c */
extern char   IgnoreErrors;      /* -i */
extern char   PrintMakeFile;     /* -p */
extern char   ContinueBranches;  /* -k */
extern char   NoExecuteMode;     /* -c -n */
extern char   DontPrintErrors;   /* -q */
extern char   SilentMode;        /* -s */
extern char   RespectCase;       /* -o */
extern char   QuestionMode;      /* -q */

extern BPTR stdin, stdout, stderr;
BPTR Open(), Input(), Output();
VOID Close();
LONG Read(), Write();

extern char *getmem();

extern char *getline(), *gmem();
extern STRNODE *makestr();
extern char *find();
extern long gtime();
