#include "em_parser.h"

#define NOSEG		5
#define UNKNOWN		(-1)


#define TRUE		1
#define	FALSE		0


#define MAX_ARGS	4

/* All the different types of C_INSTR's, based on types of the arguments. */
#define NO_ARGS		0
#define C_ARG		1
#define D_ARG		2
#define F_ARG		3
#define L_ARG		4
#define N_ARG		5
#define O_ARG		6
#define R_ARG		7
#define S_ARG		8
#define Z_ARG		9
#define W_ARG		10
#define EXTERNAL	11
#define EXTERNAL_DNAM	12
#define EXTERNAL_DLB	13
#define P_ARG		14
#define B_ARG		15
#define STRING_ARITH	16
#define BSS_EXT_DNAM	17
#define BSS_EXT_DLB	18
#define BSS_STR_AR	19
#define BSS_W_ARG	20
#define BSS_PNAM	21
#define BSS_ILB		22
#define ID_N_ARG	23
#define ARITH_ARITH	24
#define EXT_DNAM 	25
#define EXT_DLB		26
#define ONE_INT		27
#define _STRING		28


typedef struct {
		char *header;		 /* The declaration of parameters for
					  * each type of C_INSTR.
					  */
		int arg_type[MAX_ARGS];	 /* Type of the $i's after the
					  * conversions ( extnd_name(), etc.).
					  */
		char *arg_id[MAX_ARGS],	 /* Names of the parameters, to be used
					  * left of the '==>' sign.
					  */
		     *arg_conv[MAX_ARGS];/* Names of the parameters, to be used
					  * right of the '==>' sign.
					  */
	} t_C_info;


typedef struct {
		char *lexeme;
		int C_instr_type;
	} t_token;


extern t_C_info C_info[], *C_instr_info;
extern int storage_default[4][3], segment;