/***   constants.h   ***/

#define OPEN	1
#define CLOSE 	2
#define COLON	3
#define COMMA	4
#define VERT	5
#define AGAIN	6
#define GOON	7
#define EXIT	8
#define EQ	9
#define BECOMES	10
#define AT	11
#define GOTO	12
#define WHILE	13
#define DO	14
#define FOR	15
#define FROM	16
#define BY	17
#define TO	18
#define OD	19
#define IS	20
#define ISNT	21
#define DTRUE	22
#define DFALSE	23
#define EMPTY	24
#define OF	25
#define NIL	26
#define SKIP	27

/*----------------------------------------------------------------------*/
/* declarative symbols */

#define VOID	28
#define REF	29
#define FLEX	30
#define PROC	31
#define MODE	32
#define STRUCT	33
#define UNION	34
#define OP	35
#define PRIO	36
#define INT	37
#define REAL	38
#define BOOL	39
#define CHAR	40
#define STRING	41
#define COMPL	42
#define BITS	43
#define LOC	44
#define HEAP	45

#define declarative_symbol(x)  ((x==OPEN) | ((VOID <= x) & (x <= HEAP)))


/*----------------------------------------------------------------------*/
/* constants not in program text */

#define OPROUT	46
#define COLL	47
#define ROW	48
#define BOOK	49
#define ENDPROG 50

/*----------------------------------------------------------------------*/
/* victal symbols */

#define FORMAL	  -1
#define ACTUAL	  -2
#define VIRTUAL	  -3

/*----------------------------------------------------------------------*/
/* standard functions and operations, their internal form start at 57 */

#define	plusto_ST	-50
#define plusab_ST	-51
#define minab_ST	-52
#define	timeab_ST	-53
#define	overab_ST	-54
#define	modab_ST	-55
#define	divab_ST	-56

#define ab_ST(x)	(x>=divab_ST)

#define	or_ST		-58
#define and_ST		-59

#define ab_bool_ST(x)	(x>=and_ST)

#define eq_ST		-60       /* has internal form 66, see in repr.c */
#define ne_ST		-61
#define less_ST		-62
#define greater_ST	-63
#define le_ST		-64
#define ge_ST		-65

#define ab_bool_cmp_ST(x)   (x>=ge_ST)

#define plus_ST		-66
#define min_ST		-67
#define times_ST	-68
#define div_ST		-69
#define over_ST		-70
#define mod_ST		-71
#define elem_ST		-72

#define aritm_ST(x)   (x>=elem_ST)

#define up_ST		-73
#define down_ST		-74

#define updown_ST(x)   (x>=down_ST)

#define upb_ST		-75
#define lwb_ST		-76
#define plit_ST		-77

/* unary operators */

#define	not_ST		-80
#define abs_ST		-81
#define odd_ST		-82
#define	sign_ST		-83
#define	entier_ST	-84
#define round_ST	-85
#define	re_ST		-86
#define	im_ST		-87
#define	conj_ST		-88
#define	arg_ST		-89
#define	repr_ST		-90
#define bin_ST		-91

/*----------------------------------------------------------------------*/
/*  standard procedures  */

#define sqrt_ST		-100
#define exp_ST		-101
#define log_ST		-102
#define cos_ST		-103
#define arccos_ST	-104
#define sin_ST		-105
#define arcsin_ST	-106
#define tan_ST		-107
#define arctan_ST	-108

#define math_ST(x)	((sqrt_ST>=x) & (x>=arctan_ST))

#define print_ST	-110
#define read_ST		-111
#define write_ST	-112

#define transput_ST(x)	((write_ST<=x) & (x<=print_ST))

#define newline_ST	-113
#define space_ST	-114
#define newpage_ST	-115

#define layout_ST(x)	((newpage_ST<=x) & (x<=newline_ST))

#define random_ST	-116
#define bitspack_ST	-117

/* other standard identifiers */

#define pi_tag		50
#define re_tag		51
#define im_tag		52
#define stand_in	53
#define stand_out	54
#define bitswidth	55
#define blank_tag	56

/*----------------------------------------------------------------------*/
/* standard modes */

#define int_mode	2
#define real_mode	3
#define bool_mode	4
#define row_mode	5
#define char_mode	6
#define bits_mode	7
#define void_mode	8
#define string_mode	9
#define cmpl_mode	10
#define row_of_bool_mode 11

