1 2 /* 3 HEADER: ; 4 TITLE: Frankenstein Cross Assemblers; 5 VERSION: 2.0; 6 DESCRIPTION: " Reconfigurable Cross-assembler producing Intel (TM) 7 Hex format object records. "; 8 FILENAME: frasmdat.h; 9 SEE-ALSO: ; 10 AUTHORS: Mark Zenier; 11 */ 12 13 /* 14 description structures and data used in parser and output phases 15 history September 15, 1987 16 August 3, 1988 Global 17 September 14, 1990 6 char portable var 18 */ 19 20 #include <ctype.h> 21 #define PRINTCTRL(char) ((char)+'@') 22 23 #ifdef USEINDEX 24 #define strchr index 25 #endif 26 27 #ifdef NOSTRING 28 extern char * strncpy(); 29 extern char * strchr(); 30 extern int strcmp(); 31 extern int strlen(); 32 #else 33 #include <string.h> 34 #endif 35 36 #define local 37 38 #define TRUE 1 39 #define FALSE 0 40 41 #define hexch(cv) (hexcva[(cv)&0xf]) 42 extern char hexcva[]; 43 44 struct slidx { int first, last; struct symel *sym; }; 45 46 47 /* symbol table element */ 48 struct symel 49 { 50 const char *symstr; 51 int tok; 52 int seg; 53 unsigned flags; 54 int value; 55 struct symel *nextsym; 56 int symnum; 57 }; 58 59 #define SSG_UNUSED ( 0) 60 #define SSG_UNDEF (-1) 61 #define SSG_ABS ( 8) 62 #define SSG_RESV (-2) 63 #define SSG_EQU ( 2) 64 #define SSG_SET ( 3) 65 66 #define SFLAG_NONE ( 0) 67 #define SFLAG_QUIET (1 << 0) 68 #define SFLAG_ARRAY (1 << 1) 69 70 #define SYMNULL (struct symel *) NULL 71 72 /* opcode symbol table element */ 73 74 struct opsym 75 { 76 const char *opstr; 77 int token; 78 int numsyn; 79 int subsyn; 80 }; 81 82 struct opsynt 83 { 84 int syntaxgrp; 85 int elcnt; 86 int gentabsub; 87 }; 88 89 struct igel 90 { 91 int selmask; 92 int criteria; 93 const char *genstr; 94 }; 95 96 #define PPEXPRLEN 1024 97 98 struct evalrel 99 { 100 int seg; 101 int value; 102 char exprstr[PPEXPRLEN]; 103 }; 104 105 #define INBUFFSZ (1 << 20) 106 107 extern int nextsymnum; 108 extern struct symel **symbindex; 109 110 extern struct opsym optab[]; 111 extern int gnumopcode; 112 extern struct opsynt ostab[]; 113 extern struct igel igtab[]; 114 extern int ophashlnk[]; 115 116 #define NUMPEXP 6 117 extern struct evalrel evalr[NUMPEXP]; 118 119 #define PESTKDEPTH (1 << 12) 120 struct evstkel 121 { 122 int v; 123 int s; 124 }; 125 126 extern struct evstkel estk[PESTKDEPTH], *estkm1p; 127 128 extern int currseg; 129 extern int locctr; 130 extern int currpag; 131 132 extern LZFILE *yyin; 133 extern int listflag; 134 extern int hexvalid, hexflag; 135 extern FILE *romoutf, *binoutf, *cfgoutf, *loutf; 136 extern char *loutfn; 137 extern int listlineno; 138 extern int errorcnt, warncnt; 139 140 141 #define IFSTKDEPTH 256 142 extern int ifstkpt; 143 enum If_Mode { If_Active, If_Skip, If_Err }; 144 extern enum If_Mode elseifstk[IFSTKDEPTH], endifstk[IFSTKDEPTH]; 145 extern int expmacstk[IFSTKDEPTH]; 146 147 extern int frarptact, frarptcnt, frarptskip; 148 149 #define FILESTKDPTH 32 150 extern int currfstk; 151 #define nextfstk (currfstk+1) 152 struct fstkel 153 { 154 const char *fnm; 155 LZFILE *fpt; 156 int line; 157 }; 158 extern struct fstkel infilestk[FILESTKDPTH]; 159 160 extern int lnumstk[FILESTKDPTH]; 161 162 enum readacts 163 { 164 Nra_normal, 165 Nra_new, 166 Nra_end 167 } ; 168 169 extern enum readacts nextreadact; 170 171 172 #ifndef macintosh 173 #include <stdlib.h> 174 #endif 175 176 extern struct symel * endsymbol; 177 extern char ignosyn[] ; 178 extern char ignosel[] ; 179 180 #define NUM_CHTA 6 181 extern int chtnxalph, *chtcpoint, *chtnpoint ; 182 extern int *(chtatab[NUM_CHTA]); 183 184 #define CF_END -2 185 #define CF_INVALID -1 186 #define CF_UNDEF 0 187 #define CF_CHAR 1 188 #define CF_NUMBER 2 189 190 #include "asm/typetags.h" 191 192 /* Values for CLASSIFY operator */ 193 #define CLASS_ABS (-1) 194 #define CLASS_SET (-2) 195 #define CLASS_EQU (-3) 196 #define CLASS_STRING (-4) 197 #define CLASS_FEATURE (-5) 198 #define CLASS_RESV (-6) 199 #define CLASS_EMPTY (-7) 200 #define CLASS_UNUSED (-8) 201 #define CLASS_UNKNOWN (-9) 202 #define CLASS_UNDEF (-10000) 203 204 extern path_t * as1600_search_path; 205 206 /* The moment we started the assembler. */ 207 extern time_t asm_time; 208 extern struct tm asm_time_local; 209 extern struct tm asm_time_gmt; 210 211 #include "intvec.h" 212