1 #ifndef TYPES_H_
2 #define TYPES_H_
3 
4 typedef enum { LIST_ON, LIST_CODE, LIST_OFF, LIST_PREV } listing_mode;
5 typedef enum { WARNING, ERROR } warnerr;
6 
7 typedef enum
8 {
9     REC_INVALID = 0,
10     REC_LIST_MODE,
11     REC_ERROR,
12     REC_LIST_LINE,
13     REC_SET_EQU,
14     REC_COMMENT,
15     REC_USER_COMMENT,
16     REC_LOC_SET,
17     REC_RESERVE_RANGE,
18     REC_MARK_RANGE,
19     REC_DATA_BLOCK,
20     REC_FILE_START,
21     REC_FILE_EXIT,
22     REC_CFGVAR_INT,
23     REC_CFGVAR_STR,
24     REC_SRCFILE_OVER,
25     REC_AS1600_CFG,
26     REC_LISTING_COLUMN,
27     REC_OVERWRITE
28 } irec_type;
29 
30 typedef enum
31 {
32     ACFG_INVALID = 0,
33     ACFG_LIST_SRC_COLUMN,   /* Column to print source code in in listing    */
34     ACFG_LIST_HEX_SOURCE,   /* Numb. of hex vals to list next to source     */
35     ACFG_LIST_HEX_PER_LINE, /* Numb. of hex vals to list per line otheriwse */
36 } as1600_cfg_item;
37 
38 typedef struct intermed_rec intermed_rec;
39 
40 struct intermed_rec
41 {
42     int             line : 24;
43     irec_type       type :  8;
44 };
45 
46 typedef struct irec_string
47 {
48     intermed_rec    irec;
49     const char      *string;
50 } irec_string;
51 
52 typedef struct irec_list_mode
53 {
54     intermed_rec    irec;
55     listing_mode    mode;
56 } irec_list_mode;
57 
58 typedef struct irec_set_equ
59 {
60     intermed_rec    irec;
61     unsigned int    value;
62 } irec_set_equ;
63 
64 typedef struct irec_loc_set
65 {
66     intermed_rec    irec;
67     int             type;
68     int             seg;
69     int             pag;
70     int             loc;
71     const char      *mode;
72 } irec_loc_set;
73 
74 typedef struct irec_mark_range
75 {
76     intermed_rec    irec;
77     const char      *mode;
78     int             lo;
79     int             hi;
80     int             pag;
81 } irec_mark_range;
82 
83 typedef struct irec_reserve_range
84 {
85     intermed_rec    irec;
86     int             endaddr;
87 } irec_reserve_range;
88 
89 typedef struct irec_cfgvar_int
90 {
91     intermed_rec    irec;
92     const char      *var;
93     int             value;
94 } irec_cfgvar_int;
95 
96 typedef struct irec_cfgvar_str
97 {
98     intermed_rec    irec;
99     const char      *var;
100     const char      *value;
101 } irec_cfgvar_str;
102 
103 typedef struct irec_srcfile_over
104 {
105     intermed_rec    irec;
106     const char      *file;
107     int             line;
108 } irec_srcfile_over;
109 
110 typedef struct irec_as1600_cfg
111 {
112     intermed_rec    irec;
113     as1600_cfg_item item;
114     int             int_value;
115 } irec_as1600_cfg;
116 
117 typedef struct irec_listing_column
118 {
119     intermed_rec    irec;
120     int             hex_source;
121     int             hex_no_src;
122     int             source_col;
123 } irec_listing_column;
124 
125 typedef struct irec_overwrite
126 {
127     intermed_rec    irec;
128     int             err_if_overwritten;     /* -1 means "no change" */
129     int             force_overwrite;        /* -1 means "no change" */
130 } irec_overwrite;
131 
132 typedef union irec_union
133 {
134     intermed_rec        irec;
135     irec_string         string;
136     irec_set_equ        set_equ;
137     irec_list_mode      list_mode;
138     irec_loc_set        loc_set;
139     irec_mark_range     mark_range;
140     irec_reserve_range  reserve_range;
141     irec_cfgvar_int     cfgvar_int;
142     irec_cfgvar_str     cfgvar_str;
143     irec_srcfile_over   srcfile_over;
144     irec_as1600_cfg     as1600_cfg;
145     irec_listing_column listing_column;
146     irec_overwrite      overwrite;
147 } irec_union;
148 
149 #endif
150