Pristine Ack-5.5
[Ack-5.5.git] / modules / src / read_em / em_comp.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: em_comp.h,v 1.11 1994/06/24 11:21:15 ceriel Exp $ */
6 #ifndef __EMCOMP_INCLUDED__
7 #define __EMCOMP_INCLUDED__
8
9 #include <ansi.h>
10
11 struct e_arg {
12         int     ema_argtype;            /* type of this argument */
13         union e_simple_arg {
14                 arith   emu_cst;        /* a cst */
15                 label   emu_dlb;        /* a numeric data label */
16                 label   emu_ilb;        /* an instruction label */
17                 char    *emu_dnam;      /* a data label */
18                 char    *emu_pnam;      /* a procedure name */
19                 char    *emu_string;    /* a string (fcon,icon,ucon,scon) */
20         }       ema_arg;
21         arith   ema_szoroff;
22 };
23 #define ema_cst         ema_arg.emu_cst
24 #define ema_dlb         ema_arg.emu_dlb
25 #define ema_ilb         ema_arg.emu_ilb
26 #define ema_dnam        ema_arg.emu_dnam
27 #define ema_pnam        ema_arg.emu_pnam
28 #define ema_nlocals     ema_szoroff
29 #define ema_string      ema_arg.emu_string
30
31
32 struct e_instr {
33         int             em_type;        /* Type of this instr */
34 #define EM_MNEM         256             /* A machine instruction */
35 #define EM_PSEU         257             /* A pseudo */
36 #define EM_STARTMES     258             /* Start of a MES pseudo */
37 #define EM_MESARG       259             /* A member in a MES list */
38 #define EM_ENDMES       260             /* End of a MES pseudo */
39 #define EM_DEFILB       261             /* An instruction label definition */
40 #define EM_DEFDLB       262             /* A numeric data label definition */
41 #define EM_DEFDNAM      263             /* A non-numeric data label def */
42 #define EM_ERROR        264             /* Recoverable error */
43 #define EM_FATAL        265             /* Unrecoverable error */
44 #define EM_EOF          266             /* End of file */
45         int             em_opcode;
46         struct e_arg    em_arg;
47 };
48
49 _PROTOTYPE(int EM_open, (char *));
50 _PROTOTYPE(void EM_close, (void));
51 _PROTOTYPE(int EM_getinstr, (struct e_instr *));
52 _PROTOTYPE(int EM_mkcalls, (struct e_instr *));
53
54 extern arith
55         EM_holsize;
56 #define EM_bsssize EM_holsize
57 extern int
58         EM_holinit;
59 #define EM_bssinit EM_holinit
60
61 #define em_ilb          em_arg.ema_ilb
62 #define em_dlb          em_arg.ema_dlb
63 #define em_dnam         em_arg.ema_dnam
64 #define em_argtype      em_arg.ema_argtype
65 #define em_cst          em_arg.ema_cst
66 #define em_pnam         em_arg.ema_pnam
67 #define em_nlocals      em_arg.ema_nlocals
68 #define em_string       em_arg.ema_string
69 #define em_off          em_arg.ema_szoroff
70 #define em_size         em_arg.ema_szoroff
71
72 /* Arguments for EXC pseudo: */
73 #define em_exc1         em_arg.ema_cst
74 #define em_exc2         em_arg.ema_szoroff
75
76 extern char
77         *EM_error, *EM_filename;
78 extern unsigned int
79         EM_lineno;
80 extern int
81         EM_wordsize, EM_pointersize;
82 #endif /* __EMCOMP_INCLUDED__ */