/* Micro-C header file */

#define DEBUG	error(-1)

/*#include "CCLIB.TXT" */
#include "stdio.h"

#define SIZE_INT   4

#define INT	(-1)
#define CHAR	(-2)
#define UNSIGNED	(-3)
#define POINTER (-4)
#define ARRAY	(-5)
#define STRUCT	(-6)
#define UNION	(-7)
#define FUNCTION	(-8)
#define EMPTY	(-9)

#define STATIC	(-10)
#define GOTO	(-11)
#define RETURN	(-12)
#define BREAK	(-13)
#define CONTINUE	(-14)
#define IF	(-15)
#define ELSE	(-16)
#define FOR	(-17)
#define DO	(-18)
#define WHILE	(-19)
#define SWITCH	(-20)
#define CASE	(-21)
#define DEFAULT (-22)
#define RESERVE (-23)
#define TAG	(-24)
#define FIELD	(-25)
#define IDENT	(-26)
#define STRING	(-27)
#define MACRO	(-28)
#define BLABEL	(-29)
#define FLABEL	(-30)
#define TYPEDEF (-31)
#define SIZEOF	(-32)
#define TYPE	(-33)
#define LONG	(-34)
#define SHORT	(-35)
#define EXTRN	(-36)

#define TOP	0
#define GDECL	1
#define GSDECL	2
#define GUDECL	3
#define ADECL	4
#define LDECL	5
#define LSDECL	6
#define LUDECL	7
#define STADECL 8
#define STAT	9
#define GTDECL	10
#define LTDECL	11

#define GVAR	1
#define RGVAR	2
#define CRGVAR	3
#define LVAR	4
#define RLVAR	5
#define CRLVAR	6
#define CONST	7
#define FNAME	8
#define INDIRECT	9
#define RINDIRECT	10
#define CRINDIRECT	11
#define ADDRESS 12
#define MINUS	13
#define LNOT	14
#define BNOT	15
#define INC	16
#define POSTINC 17
#define PREINC	18
#define CPOSTINC	19
#define CPREINC 20
#define DEC	21
#define CPOSTDEC	22
#define CPREDEC 23
#define MUL	24
#define UMUL	25
#define DIV	26
#define UDIV	27
#define MOD	28
#define UMOD	29
#define ADD	30
#define SUB	31
#define RSHIFT	32
#define URSHIFT 33
#define LSHIFT	34
#define ULSHIFT 35
#define GT	36
#define UGT	37
#define GE	38
#define UGE	39
#define LT	40
#define ULT	41
#define LE	42
#define ULE	43
#define EQ	44
#define NEQ	45
#define BAND	46
#define EOR	47
#define BOR	48
#define LAND	49
#define LOR	50
#define COND	51
#define ASS	52
#define CASS	53
#define ASSOP	54
#define CASSOP	55
#define COMMA	56
#define LPAR	57
#define RPAR	58
#define LBRA	59
#define RBRA	60
#define LC	61
#define RC	62
#define COLON	63
#define SM	64
#define PERIOD	65
#define ARROW	66

#define US	1
#define AS	100

#define FILERR	1
#define DCERR	2
#define STERR	3
#define EXERR	4
#define CNERR	5
#define CHERR	6
#define GSERR	7
#define LSERR	8
#define STRERR	9
#define LNERR	10
#define EOFERR	11
#define MCERR	12
#define INCERR	13
#define HPERR	14
#define TYERR	15
#define LVERR	16
#define UDERR	17
#define OPTION	18

#define GSYMS	4500
#define LSYMS	500

#define HEAPSIZE	1000
/* #define CHEAPSIZE	3000 */
#define CHEAPSIZE	256000
#define LBUFSIZE	4096

#define FILES 3
#define OUTPUT_FILE_NAME "mcout.s"

EXTERN int sym,ch,chsave,type,mode,stmode,gfree,lfree,mflag,lineno,glineno;
EXTERN int labelno,gpc,lvar,disp,debug;
EXTERN int symval,args,heap[HEAPSIZE];
EXTERN int blabel,clabel,dlabel,cslabel,ilabel,control,ac,ac2,lsrc,chk,asmf;

EXTERN unsigned hash;

EXTERN char linebuf[LBUFSIZE],namebuf[LBUFSIZE],*chptr,*chptrsave;
EXTERN char *name,*cheapp,**av,/*obuf[320],*/*sptr,escape();
EXTERN int arg_offset,stat_no,int_size,disp_offset,endian,csvalue,csvalue1;
EXTERN int retlabel,retpending;

EXTERN FILE *obuf;

typedef struct nametable {
	char *nm;
	int sc,ty,dsp; } NMTBL;

EXTERN NMTBL ntable[GSYMS+LSYMS],*nptr,*gnptr,*decl0(),*decl1(),*lsearch(),*gsearch();

EXTERN struct {int fd,ln;/*char fcb[320]*/FILE *fcb;} *filep,filestack[FILES];
EXTERN char cheap[CHEAPSIZE];