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