ack/util/opt/line.h
1991-02-01 10:21:39 +00:00

93 lines
1.7 KiB
C

/*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright".
*/
/* $Header$ */
#define NARGBYTES 14
struct argbytes {
argb_p ab_next;
short ab_index;
char ab_contents[NARGBYTES];
};
typedef struct {
sym_p av_sp;
offset av_offset;
} s_a_val;
typedef struct {
short ac_length;
argb_t ac_con;
} s_a_con;
typedef union {
offset a_offset;
num_p a_np;
sym_p a_sp;
s_a_val a_val;
argb_t a_string;
s_a_con a_con;
} un_a_a;
struct arg {
arg_p a_next;
short a_typ;
un_a_a a_a;
};
/* possible values for .a_typ
*/
#define ARGOFF 0
#define ARGNUM 1
#define ARGSYM 2
#define ARGVAL 3
#define ARGSTR 4
#define ARGICN 5
#define ARGUCN 6
#define ARGFCN 7
typedef struct {
sym_p lasv_sp;
short lasv_short;
} s_la_sval;
typedef struct {
sym_p lalv_sp;
offset lalv_offset;
} s_la_lval;
typedef union {
short la_short;
offset la_offset;
num_p la_np;
sym_p la_sp;
s_la_sval la_sval;
s_la_lval la_lval;
arg_p la_arg;
} un_l_a;
struct line {
line_p l_next; /* maintains linked list */
byte l_instr; /* instruction number */
byte l_optyp; /* specifies what follows */
un_l_a l_a;
};
/* Possible values for .l_optyp */
#define OPNO 0 /* no operand */
#define OPSHORT 1 /* 16 bit number */
#define OPOFFSET 2 /* 16 or 32 bit number */
#define OPNUMLAB 3 /* local label for branches */
#define OPSYMBOL 4 /* global label or procedurename */
#define OPSVAL 5 /* symbol + 16 bit constant */
#define OPLVAL 6 /* symbol + 16 or 32 bit constant */
#define OPLIST 7 /* operand list for some pseudos */
#define OPMINI 8 /* start of minis */
#define Z_OPMINI (OPMINI+100) /* tunable */
#define CANMINI(x) ((x)>=OPMINI-Z_OPMINI && (x)<256-Z_OPMINI)