/* * File: imp.h * * Header file for IMP80 compiler * * Bob Eager August 2002 * */ #ifdef __IBMC__ #pragma strings(readonly) #if 0 #pragma info(nogot,nopor,noppc,nouni,nouse) #endif #endif /* Compiler version details */ #define RELEASE 1 /* Major release number */ #define EDIT 0 /* Edit number */ #define LADATE "31 Aug 2002" /* Date last altered */ #define COMPILER "IMP80 compiler"/* Compiler description */ #include #include #include /* Miscellaneous defines */ #define NO 0 #define YES 1 /* Define the following symbol nonzero only if debugging the compiler */ #define DEBUG 1 /* Miscellaneous constants */ #define CONCOP 13 /* Code for string concatenation */ #define FIXEDGLALEN 48 /* Bytes */ #define MAXIDEPTH 10 /* Maximum %INCLUDE depth */ #define MAXLEVELS 31 /* Maximum textual levels */ #define IMAX 0x7fffffff /* Maximum positive integer */ #define SNPT 0x00001006 /* Ptype for special name */ #define MINSHORT -131072 /* Minimum %short value */ #define MAXSHORT 131071 /* Maximum %short value */ #define MAXSTRING 255 /* Maximum string length */ #define UNASSPAT 0x81818181 /* Unassigned pattern */ /* Type definitions */ typedef void VOID, *PVOID; typedef int BOOL, *PBOOL; typedef char CHAR, *PCHAR; typedef signed char SCHAR, *PSCHAR; typedef unsigned char UCHAR, *PUCHAR; typedef short SHORT, *PSHORT; typedef unsigned short USHORT, *PUSHORT; typedef int INT, *PINT; typedef unsigned int UINT, *PUINT; typedef long LONG, *PLONG; typedef unsigned long ULONG, *PULONG; /* Formats of cells in 'aslist' */ typedef struct LISTF_ { INT s1; INT s2; INT s3; INT link; } LISTF; typedef struct RDA_ { UCHAR uptype; UCHAR ptype; UCHAR xb; UCHAR flag; INT d; INT xtra; } RDA; typedef struct RDB_ { INT s1; double lr; } RDB; typedef struct RDC_ { INT s1; float r; INT xtra; } RDC; typedef union RD_ { RDA a; RDB b; RDC c; } RD; /* Function definitions */ extern VOID asm_mul(INT[], INT); extern VOID binsert(PINT, PINT, INT, INT, INT); #if DEBUG extern VOID check_asl(VOID); #endif extern VOID clear_list(PINT); extern VOID epilogue(VOID); extern INT eqstring(PUCHAR, PUCHAR); extern VOID fault(INT, UINT, UINT); extern VOID forget(INT); extern VOID from12(INT, PINT, PINT); extern VOID from123(INT, PINT, PINT, PINT); extern INT fromar2(INT); extern INT fromar4(INT); extern VOID iexit(INT); extern VOID imptoc(PUCHAR, PUCHAR); extern VOID init_reguse(VOID); extern VOID insert_at_end(PINT, INT, INT, INT); extern INT intexp(PINT); extern VOID message(PUCHAR, INT); extern VOID mlink(PINT); extern VOID ncode(PUCHAR, PUCHAR, UINT); extern VOID pack(PINT); extern VOID pass1(VOID); extern VOID pass2(VOID); extern VOID p0(INT); extern VOID p1(INT, INT, INT); extern VOID pf0(INT); extern VOID pf1s(INT, INT); extern VOID pname(INT); extern VOID pop(PINT, PVOID, PVOID, PVOID); extern VOID ppj(INT, INT); #if DEBUG extern VOID print_list(INT); #endif extern PCHAR printname(PCHAR, INT); /* was PUCHAR */ extern VOID printuse(VOID); extern VOID prologue(VOID); extern VOID push(PINT, INT, INT, INT); extern VOID rdisplay(INT); extern VOID remember(VOID); extern VOID replace123(INT, INT, INT, INT); extern VOID restore(INT); extern VOID restore_state(VOID); extern VOID runtime_entry(VOID); extern VOID runtime_init(VOID); extern VOID save_state(VOID); extern VOID skip_app(VOID); extern VOID skip_exp(VOID); extern VOID test_app(PINT); extern VOID toar2(INT, INT); extern VOID toar4(INT, INT); extern VOID toar8(INT, PUCHAR); extern VOID unpack(VOID); extern VOID warn(INT, UINT); extern VOID wput(USHORT); extern PCHAR xalloc(INT); /* Was PUCHAR */ extern VOID xabort(VOID); /* Macros */ #define unless(x) if(!(x)) #define until(x) while(!(x)) /* Inline functions */ #define from1(cell) (aslist[cell].s1) #define from2(cell) (aslist[cell].s2) #define from3(cell) (aslist[cell].s3) #define replace1(cell, s1) (aslist[cell].s1 = s1) #define replace2(cell, s2) (aslist[cell].s2 = s2) #define replace3(cell, s3) (aslist[cell].s3 = s3) /* * End of file: imp.h * */