+/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
+
+/*
+ $Header: b2nod.h,v 1.4 85/08/22 16:42:43 timo Exp $
+*/
+
+/* Units */
+
+typedef intlet typenode;
+
+#define _Nodetype(len) ((len) & 0377)
+#define _Nbranches(len) ((len) >> 8)
+#define Nodetype(v) _Nodetype((v)->len)
+#define Nbranches(v) _Nbranches((v)->len)
+#define Branch(v, n) ((Ats(v)+(n)))
+
+#define Unit(n) (n>=HOW_TO && n<=REFINEMENT)
+#define Command(n) (n>=SUITE && n<=EXTENDED_COMMAND)
+#define Expression(n) ((n>=TAG && n<=TAB_DIS)||(n>=TAGformal && n<=TAGzerprd))
+#define Comparison(n) (n>=LESS_THAN && n<=UNEQUAL)
+
+#define HOW_TO 0
+#define YIELD 1
+#define TEST 2
+#define REFINEMENT 3
+
+/* Commands */
+
+#define SUITE 4
+#define PUT 5
+#define INSERT 6
+#define REMOVE 7
+#define CHOOSE 8
+#define DRAW 9
+#define SET_RANDOM 10
+#define DELETE 11
+#define CHECK 12
+#define SHARE 13
+
+#define WRITE 14
+#define READ 15
+#define READ_RAW 16
+
+#define IF 17
+#define WHILE 18
+#define FOR 19
+
+#define SELECT 20
+#define TEST_SUITE 21
+#define ELSE 22
+
+#define QUIT 23
+#define RETURN 24
+#define REPORT 25
+#define SUCCEED 26
+#define FAIL 27
+
+#define USER_COMMAND 28
+#define EXTENDED_COMMAND 29
+
+/* Expressions, targets, tests */
+
+#define TAG 30
+#define COMPOUND 31
+
+/* Expressions, targets */
+
+#define COLLATERAL 32
+#define SELECTION 33
+#define BEHEAD 34
+#define CURTAIL 35
+
+/* Expressions, tests */
+
+#define UNPARSED 36
+
+/* Expressions */
+
+#define MONF 37
+#define DYAF 38
+#define NUMBER 39
+#define TEXT_DIS 40
+#define TEXT_LIT 41
+#define TEXT_CONV 42
+#define ELT_DIS 43
+#define LIST_DIS 44
+#define RANGE_DIS 45
+#define TAB_DIS 46
+
+/* Tests */
+
+#define AND 47
+#define OR 48
+#define NOT 49
+#define SOME_IN 50
+#define EACH_IN 51
+#define NO_IN 52
+#define SOME_PARSING 53
+#define EACH_PARSING 54
+#define NO_PARSING 55
+#define MONPRD 56
+#define DYAPRD 57
+#define LESS_THAN 58
+#define AT_MOST 59
+#define GREATER_THAN 60
+#define AT_LEAST 61
+#define EQUAL 62
+#define UNEQUAL 63
+#define Nonode 64
+
+#define TAGformal 65
+#define TAGlocal 66
+#define TAGglobal 67
+#define TAGmystery 68
+#define TAGrefinement 69
+#define TAGzerfun 70
+#define TAGzerprd 71
+
+#define ACTUAL 72
+#define FORMAL 73
+
+value node1();
+value node2();
+value node3();
+value node4();
+value node5();
+value node6();
+value node8();
+value node9();
+typenode nodetype();
+/* Procedure display(); */
+/* Procedure fix_nodes(); */
+
+#define First_fieldnr 0
+
+#define UNIT_NAME First_fieldnr
+#define HOW_FORMALS First_fieldnr + 1 /* HOW'TO */
+#define HOW_COMMENT First_fieldnr + 2
+#define HOW_SUITE First_fieldnr + 3
+#define HOW_REFINEMENT First_fieldnr + 4
+#define HOW_R_NAMES First_fieldnr + 5
+#define HOW_NLOCALS First_fieldnr + 6
+#define FPR_ADICITY First_fieldnr + 1 /* YIELD, TEST */
+#define FPR_FORMALS First_fieldnr + 2
+#define FPR_COMMENT First_fieldnr + 3
+#define FPR_SUITE First_fieldnr + 4
+#define FPR_REFINEMENT First_fieldnr + 5
+#define FPR_R_NAMES First_fieldnr + 6
+#define FPR_NLOCALS First_fieldnr + 7
+
+#define FML_KEYW First_fieldnr /* FORMALS HOW'TO */
+#define FML_TAG First_fieldnr + 1
+#define FML_NEXT First_fieldnr + 2
+
+#define SUI_LINO First_fieldnr /* SUITE */
+#define SUI_CMD First_fieldnr + 1
+#define SUI_COMMENT First_fieldnr + 2
+#define SUI_NEXT First_fieldnr + 3
+#define REF_NAME First_fieldnr /* REFINEMENT */
+#define REF_COMMENT First_fieldnr + 1
+#define REF_SUITE First_fieldnr + 2
+#define REF_NEXT First_fieldnr + 3
+#define REF_START First_fieldnr + 4
+
+#define PUT_EXPR First_fieldnr /* PUT */
+#define PUT_TARGET First_fieldnr + 1
+#define INS_EXPR First_fieldnr /* INSERT */
+#define INS_TARGET First_fieldnr + 1
+#define RMV_EXPR First_fieldnr /* REMOVE */
+#define RMV_TARGET First_fieldnr + 1
+#define CHS_TARGET First_fieldnr /* CHOOSE */
+#define CHS_EXPR First_fieldnr + 1
+#define DRW_TARGET First_fieldnr /* DRAW */
+#define SET_EXPR First_fieldnr /* SET'RANDOM */
+#define DEL_TARGET First_fieldnr /* DELETE */
+#define CHK_TEST First_fieldnr /* CHECK */
+#define SHR_TARGET First_fieldnr /* SHARE */
+
+#define WRT_L_LINES First_fieldnr /* WRITE */
+#define WRT_EXPR First_fieldnr + 1
+#define WRT_R_LINES First_fieldnr + 2
+#define RD_TARGET First_fieldnr /* READ */
+#define RD_EXPR First_fieldnr + 1
+#define RDW_TARGET First_fieldnr /* READ'RAW */
+
+#define IF_TEST First_fieldnr /* IF */
+#define IF_COMMENT First_fieldnr + 1
+#define IF_SUITE First_fieldnr + 2
+#define WHL_TEST First_fieldnr /* WHILE */
+#define WHL_COMMENT First_fieldnr + 1
+#define WHL_SUITE First_fieldnr + 2
+#define FOR_TARGET First_fieldnr /* FOR */
+#define FOR_EXPR First_fieldnr + 1
+#define FOR_COMMENT First_fieldnr + 2
+#define FOR_SUITE First_fieldnr + 3
+
+#define SLT_COMMENT First_fieldnr /* SELECT */
+#define SLT_TSUITE First_fieldnr + 1
+#define TSUI_LINO First_fieldnr /* TEST SUITE */
+#define TSUI_TEST First_fieldnr + 1
+#define TSUI_COMMENT First_fieldnr + 2
+#define TSUI_SUITE First_fieldnr + 3
+#define TSUI_NEXT First_fieldnr + 4
+#define ELSE_LINO First_fieldnr /* ELSE */
+#define ELSE_COMMENT First_fieldnr + 1
+#define ELSE_SUITE First_fieldnr + 2
+
+#define RTN_EXPR First_fieldnr /* RETURN */
+#define RPT_TEST First_fieldnr /* REPORT */
+
+#define UCMD_NAME First_fieldnr /* USER COMMAND */
+#define UCMD_ACTUALS First_fieldnr + 1
+#define UCMD_DEF First_fieldnr + 2
+#define ACT_KEYW First_fieldnr /* ACTUALS USER COMMAND */
+#define ACT_EXPR First_fieldnr + 1
+#define ACT_NEXT First_fieldnr + 2
+#define ACT_START First_fieldnr + 3
+
+#define ECMD_NAME First_fieldnr /* EXTENDED COMMAND */
+#define ECMD_ACTUALS First_fieldnr + 1
+
+#define COMP_FIELD First_fieldnr /* COMPOUND */
+#define COLL_SEQ First_fieldnr /* COLLATERAL */
+#define MON_NAME First_fieldnr /* MONADIC FUNCTION */
+#define MON_RIGHT First_fieldnr + 1
+#define MON_FCT First_fieldnr + 2
+#define DYA_NAME First_fieldnr + 1 /* DYADIC FUNCTION */
+#define DYA_LEFT First_fieldnr
+#define DYA_RIGHT First_fieldnr + 2
+#define DYA_FCT First_fieldnr + 3
+#define TAG_NAME First_fieldnr /* TAG */
+#define TAG_ID First_fieldnr + 1
+#define NUM_VALUE First_fieldnr /* NUMBER */
+#define NUM_TEXT First_fieldnr + 1
+#define XDIS_QUOTE First_fieldnr /* TEXT DIS */
+#define XDIS_NEXT First_fieldnr + 1
+#define XLIT_TEXT First_fieldnr /* TEXT LIT */
+#define XLIT_NEXT First_fieldnr + 1
+#define XCON_EXPR First_fieldnr /* TEXT CONV */
+#define XCON_NEXT First_fieldnr + 1
+#define LDIS_SEQ First_fieldnr /* LIST DIS */
+#define RDIS_LWB First_fieldnr /* RANGE DIS */
+#define RDIS_UPB First_fieldnr + 1
+#define TDIS_SEQ First_fieldnr /* TAB_DIS */
+#define SEL_TABLE First_fieldnr /* SELECTION */
+#define SEL_KEY First_fieldnr + 1
+#define TRIM_LEFT First_fieldnr /* BEHEAD, CURTAIL */
+#define TRIM_RIGHT First_fieldnr + 1
+#define UNP_SEQ First_fieldnr /* UNPARSED */
+#define UNP_TEXT First_fieldnr + 1
+
+#define AND_LEFT First_fieldnr /* AND */
+#define AND_RIGHT First_fieldnr + 1
+#define OR_LEFT First_fieldnr /* OR */
+#define OR_RIGHT First_fieldnr + 1
+#define NOT_RIGHT First_fieldnr /* NOT */
+#define QUA_TARGET First_fieldnr /* QUANTIFICATION */
+#define QUA_EXPR First_fieldnr + 1
+#define QUA_TEST First_fieldnr + 2
+#define REL_LEFT First_fieldnr /* ORDER TEST */
+#define REL_RIGHT First_fieldnr + 1