Pristine Ack-5.5
[Ack-5.5.git] / util / opt / line.h
1 /*
2  * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
3  * See the copyright notice in the ACK home directory, in the file "Copyright".
4  */
5 /* $Id: line.h,v 2.5 1994/06/24 10:40:06 ceriel Exp $ */
6
7 #define NARGBYTES       14
8 struct argbytes {
9         argb_p  ab_next;
10         short   ab_index;
11         char    ab_contents[NARGBYTES];
12 };
13
14 typedef struct {
15         sym_p   av_sp;
16         offset  av_offset;
17 } s_a_val;
18
19 typedef struct {
20         short   ac_length;
21         argb_t  ac_con;
22 } s_a_con;
23
24 typedef union {
25         offset  a_offset;
26         num_p   a_np;
27         sym_p   a_sp;
28         s_a_val a_val;
29         argb_t  a_string;
30         s_a_con a_con;
31 } un_a_a;
32
33 struct arg {
34         arg_p   a_next;
35         short   a_typ;
36         un_a_a  a_a;
37 };
38
39 /* possible values for .a_typ
40  */
41
42 #define ARGOFF  0
43 #define ARGNUM  1
44 #define ARGSYM  2
45 #define ARGVAL  3
46 #define ARGSTR  4
47 #define ARGICN  5
48 #define ARGUCN  6
49 #define ARGFCN  7
50
51 typedef struct {
52         sym_p   lasv_sp;
53         short   lasv_short;
54 } s_la_sval;
55
56 typedef struct {
57         sym_p   lalv_sp;
58         offset  lalv_offset;
59 } s_la_lval;
60
61 typedef union {
62         short   la_short;
63         offset  la_offset;
64         num_p   la_np;
65         sym_p   la_sp;
66         s_la_sval la_sval;
67         s_la_lval la_lval;
68         arg_p   la_arg;
69 } un_l_a;
70
71 struct line {
72         line_p          l_next;         /* maintains linked list */
73         byte            l_instr;        /* instruction number */
74         byte            l_optyp;        /* specifies what follows */
75         un_l_a          l_a;
76 };
77
78 /* Possible values for .l_optyp */
79
80 #define OPNO            0       /* no operand */
81 #define OPSHORT         1       /* 16 bit number */
82 #define OPOFFSET        2       /* 16 or 32 bit number */
83 #define OPNUMLAB        3       /* local label for branches */
84 #define OPSYMBOL        4       /* global label or procedurename */
85 #define OPSVAL          5       /* symbol + 16 bit constant */
86 #define OPLVAL          6       /* symbol + 16 or 32 bit constant */
87 #define OPLIST          7       /* operand list for some pseudos */
88 #define OPMINI          8       /* start of minis */
89
90 #define Z_OPMINI        (OPMINI+100)    /* tunable */
91
92 #define CANMINI(x) ((x)>=OPMINI-Z_OPMINI && (x)<256-Z_OPMINI)