

B<NAME>=1

B<CNST>=2

P<SS>=
         <UI><SEP>,
         '%IF'<SC><COND>'%THEN'<UI><ELSE><SEP>,
         <CNST>':'<SS>,
         '%FINISH'<ELSE><SEP>,
         '%INTEGER'<ARR><SEP>,
         <RT><SPEC><NAME><FPP><SEP>,
         '%END'<SEP>,
         '%BEGIN'<SEP>,
         '%ENDOFPROGRAM'<SEP>,
         <SEP>;

P<UI>=
         <NAME><APP><ASS>,
         '->'<CNST>,
         '%START',
         '%RETURN',
         '%RESULT='<+-\><OPD><EXPR>,
         '%STOP';

P<ELSE>=
         '%ELSE'<UI>,
         ;

P<SEP>=
         '
',
         ';';

P<APP>=
         '('<+-\><OPD><EXPR><EXPS>')',
         ;

P<+-\>=
         '+',
         '-',
         '\',
         ;

P<OPD>=
         <NAME><APP>,
         <CNST>,
         '('<+-\><OPD><EXPR>')';

P<EXPR>=
         <OP><OPD><EXPR>,
         ;

P<OP>=
         '<<',
         '>>',
         '&',
         '!!',
         '!',
         '**',
         '/',
         '*',
         '+',
         '-';

P<EXPS>=
         ','<+-\><OPD><EXPR><EXPS>,
         ;

P<ASS>=
         '='<+-\><OPD><EXPR>,
         ;

P<SC>=
         <+-\><OPD><EXPR><COMP><+-\><OPD><EXPR>,
         '('<SC><COND>')';

P<COND>=
         '%AND'<SC><ANDC>,
         '%OR'<SC><ORC>,
         ;

P<ANDC>=
         '%AND'<SC><ANDC>,
         ;

P<ORC>=
         '%OR'<SC><ORC>,
         ;

P<COMP>=
         '=',
         '\=',
         '<=',
         '<',
         '>=',
         '>';

P<ARR>=
         '%ARRAY'<NAME><NAMS>'('<+-\><OPD><EXPR>':'
                                    <+-\><OPD><EXPR><BPS>')',
         <NAME><NAMS>;

P<NAMS>=
         ','<NAME><NAMS>,
         ;

P<BPS>=
         ','<+-\><OPD><EXPR>':'<+-\><OPD><EXPR>,
         ;

P<RT>=
         '%ROUTINE',
         '%INTEGERFN';

P<SPEC>=
         '%SPEC',
         ;

P<FPP>=
         '(%INTEGER'<ARRN><NAME><NAMS><FPS>')',
         ;

P<ARRN>=
         '%ARRAYNAME',
         '%NAME',
         ;

P<FPS>=
         ',%INTEGER'<ARRN><NAME><NAMS><FPS>,
         ;
EPRG:
;%ROUTINESPEC READ SYMBOL(%INTEGERNAME I)

;%INTEGERFNSPEC NEXT SYMBOL

;%ROUTINESPEC SKIP SYMBOL

;%ROUTINESPEC PRINT SYMBOL(%INTEGER I)

;%ROUTINESPEC READ(%INTEGERNAME I)

;%ROUTINESPEC WRITE(%INTEGER I,J)

;%ROUTINESPEC SPACE

;%ROUTINESPEC SPACES(%INTEGER I)

;%ROUTINESPEC NEWLINE

;%ROUTINESPEC NEWLINES(%INTEGER I)

;%ROUTINESPEC NEWPAGE

;%BEGIN
         STR   BR1,  STP,  0
         LDA   BR1,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+0

;%ROUTINESPEC READ PS

;%ROUTINESPEC READ LINE

;%INTEGERFNSPEC COMPARE

;%ROUTINESPEC SS

;%ROUTINESPEC FAULT(%INTEGER A,B,C,D)

;%INTEGERFNSPEC CHNEXT

;%INTEGERFNSPEC NEWCELL

;%INTEGERFNSPEC RETURN CELL(%INTEGER I)

;%ROUTINESPEC PRINT NAME(%INTEGER I)

;%INTEGER AP,APP,TP,PSP,ASL,BTN,CTN,CHP,FAULTS,LEVEL,CA,COMP,SCF

;%INTEGERARRAY PS(-1000:-600)                 ;! REDUCED PHRASE STRUCTURE
         LDA   ACC,  ,     1000
         NEG   ACC,  ,     0
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     600
         NEG   ACC,  ,     0
         LDA   ACC,  ACC,  1
         STR   ACC,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  23
         ADD   STP,  BR1,  3

;%INTEGERARRAY TAG,LINK(0:1023)               ;! TAGS LISTS
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     1023
         LDA   ACC,  ACC,  1
         STR   ACC,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  25
         ADD   STP,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  27
         ADD   STP,  BR1,  3

;%INTEGERARRAY A(1:200)                       ;! ANALYSIS RECORD
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     200
         LDA   ACC,  ACC,  1
         STR   ACC,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  29
         ADD   STP,  BR1,  3

;%INTEGERARRAY T(1:300)                       ;! SOURCE TEXT
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     300
         LDA   ACC,  ACC,  1
         STR   ACC,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  31
         ADD   STP,  BR1,  3

;%INTEGERARRAY BAT,COT(0:1023)                ;! BRANCH, CONST TABLES
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     1023
         LDA   ACC,  ACC,  1
         STR   ACC,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  33
         ADD   STP,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  35
         ADD   STP,  BR1,  3

;%INTEGERARRAY CH(1:512)                      ;! NAME CHAR TABLE
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     512
         LDA   ACC,  ACC,  1
         STR   ACC,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  37
         ADD   STP,  BR1,  3

;%INTEGERARRAY JUMP,STAR,BRT,NAME,RTP,BR,CHPP,START,RAD(0:15)  ;! LEVEL INFORMATION
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     15
         LDA   ACC,  ACC,  1
         STR   ACC,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  39
         ADD   STP,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  41
         ADD   STP,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  43
         ADD   STP,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  45
         ADD   STP,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  47
         ADD   STP,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  49
         ADD   STP,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  51
         ADD   STP,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  53
         ADD   STP,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  55
         ADD   STP,  BR1,  3

;%INTEGERARRAY TRUE,FALSE(1:6)                ;! CONDITIONAL BRANCH INSTRUCTIONS
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     6
         LDA   ACC,  ACC,  1
         STR   ACC,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  57
         ADD   STP,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  59
         ADD   STP,  BR1,  3

;%INTEGERARRAY PREC,UCN(1:12)                 ;! OPERATOR PRECEDENCES, TYPES
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     12
         LDA   ACC,  ACC,  1
         STR   ACC,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  61
         ADD   STP,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  63
         ADD   STP,  BR1,  3

;%INTEGERARRAY OPR(0:12)                      ;! MACHINE OPERATIONS
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     12
         LDA   ACC,  ACC,  1
         STR   ACC,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  65
         ADD   STP,  BR1,  3

;%INTEGERARRAY PT,PN,PTC(1:15)                ;! FOR RT SPECS, HEADINGS
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     15
         LDA   ACC,  ACC,  1
         STR   ACC,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  67
         ADD   STP,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  69
         ADD   STP,  BR1,  3
         SUB   STP,  BR1,  2
         STR   STP,  BR1,  71
         ADD   STP,  BR1,  3

;     READ PS                             ;! READ IN AND REDUCE PHRASE STRUCTURE
         BAL   WK,   ,      BT+11

;     ASL=0                               ;! CLEAR HASHING AREA &
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  14

;10:  TAG(ASL)=0                          ;!  CREATE AVAILABLE SPACE LIST
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  2
         LOAD  ACC,  BR1,  14
         ADD   ACC,  BR1,  25
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     LINK(ASL)=0                         ;!  IN REMAINDER
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  2
         LOAD  ACC,  BR1,  14
         ADD   ACC,  BR1,  27
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     %IF ASL>=256 %AND ASL<1023 %THEN LINK(ASL)=ASL+1
         LOAD  ACC,  BR1,  14
         SUB   ACC,  ,      CT+1
         BL    ACC,  ,      BT+21
         LOAD  ACC,  BR1,  14
         SUB   ACC,  ,      CT+2
         BNL   ACC,  ,      BT+21
         LOAD  ACC,  BR1,  14
         ADD   ACC,  ,      CT+3
         STR   ACC,  BR1,  2
         LOAD  ACC,  BR1,  14
         ADD   ACC,  BR1,  27
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     ASL=ASL+1
         LOAD  ACC,  BR1,  14
         ADD   ACC,  ,      CT+4
         STR   ACC,  BR1,  14

;     %IF ASL<=1023 %THEN ->10
         LOAD  ACC,  BR1,  14
         SUB   ACC,  ,      CT+5
         BNG   ACC,  ,      BT+20

;     ASL=256                             ;! AVAILABLE SPACE LIST POINTER
         LDA   ACC,  ,     256
         STR   ACC,  BR1,  14

;     BR(0)=M'BR0'                        ;! BASE REGISTER MNEMONICS
         LOAD  ACC,  ,      CT+6
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     0
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(1)=M'BR1'
         LOAD  ACC,  ,      CT+7
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     1
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(2)=M'BR2'
         LOAD  ACC,  ,      CT+8
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     2
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(3)=M'BR3'
         LOAD  ACC,  ,      CT+9
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     3
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(4)=M'BR4'
         LOAD  ACC,  ,      CT+10
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     4
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(5)=M'BR5'
         LOAD  ACC,  ,      CT+11
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     5
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(6)=M'BR6'
         LOAD  ACC,  ,      CT+12
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     6
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(7)=M'BR7'
         LOAD  ACC,  ,      CT+13
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     7
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(8)=M'BR8'
         LOAD  ACC,  ,      CT+14
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     8
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(9)=M'BR9'
         LOAD  ACC,  ,      CT+15
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     9
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(10)=M'BR10'
         LOAD  ACC,  ,      CT+16
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     10
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(11)=M'BR11'
         LOAD  ACC,  ,      CT+17
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     11
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(12)=M'BR12'
         LOAD  ACC,  ,      CT+18
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     12
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(13)=M'BR13'
         LOAD  ACC,  ,      CT+19
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     13
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(14)=M'BR14'
         LOAD  ACC,  ,      CT+20
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     14
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BR(15)=M'BR15'
         LOAD  ACC,  ,      CT+21
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     15
         ADD   ACC,  BR1,  49
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     TRUE(1)=M'BZ'                       ;! CONDITIONAL BRANCH MNEMONICS
         LDA   ACC,  ,     16986
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     1
         ADD   ACC,  BR1,  57
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     FALSE(1)=M'BNZ'
         LOAD  ACC,  ,      CT+22
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     1
         ADD   ACC,  BR1,  59
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     TRUE(2)=M'BNZ'
         LOAD  ACC,  ,      CT+23
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     2
         ADD   ACC,  BR1,  57
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     FALSE(2)=M'BZ'
         LDA   ACC,  ,     16986
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     2
         ADD   ACC,  BR1,  59
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     TRUE(3)=M'BNG'
         LOAD  ACC,  ,      CT+24
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     3
         ADD   ACC,  BR1,  57
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     FALSE(3)=M'BG'
         LDA   ACC,  ,     16967
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     3
         ADD   ACC,  BR1,  59
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     TRUE(4)=M'BL'
         LDA   ACC,  ,     16972
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     4
         ADD   ACC,  BR1,  57
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     FALSE(4)=M'BNL'
         LOAD  ACC,  ,      CT+25
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     4
         ADD   ACC,  BR1,  59
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     TRUE(5)=M'BNL'
         LOAD  ACC,  ,      CT+26
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     5
         ADD   ACC,  BR1,  57
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     FALSE(5)=M'BL'
         LDA   ACC,  ,     16972
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     5
         ADD   ACC,  BR1,  59
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     TRUE(6)=M'BG'
         LDA   ACC,  ,     16967
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     6
         ADD   ACC,  BR1,  57
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     FALSE(6)=M'BNG'
         LOAD  ACC,  ,      CT+27
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     6
         ADD   ACC,  BR1,  59
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     PREC(1)=3                           ;! OPERATOR PRECEDENCES
         LDA   ACC,  ,     3
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     1
         ADD   ACC,  BR1,  61
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     PREC(2)=3                           ;! 4 : HIGHEST
         LDA   ACC,  ,     3
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     2
         ADD   ACC,  BR1,  61
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     PREC(3)=2                           ;! 1 : LOWEST
         LDA   ACC,  ,     2
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     3
         ADD   ACC,  BR1,  61
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     PREC(4)=1
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     4
         ADD   ACC,  BR1,  61
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     PREC(5)=1
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     5
         ADD   ACC,  BR1,  61
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     PREC(6)=3
         LDA   ACC,  ,     3
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     6
         ADD   ACC,  BR1,  61
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     PREC(7)=2
         LDA   ACC,  ,     2
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     7
         ADD   ACC,  BR1,  61
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     PREC(8)=2
         LDA   ACC,  ,     2
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     8
         ADD   ACC,  BR1,  61
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     PREC(9)=1
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     9
         ADD   ACC,  BR1,  61
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     PREC(10)=1
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     10
         ADD   ACC,  BR1,  61
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     PREC(11)=1
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     11
         ADD   ACC,  BR1,  61
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     PREC(12)=4
         LDA   ACC,  ,     4
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     12
         ADD   ACC,  BR1,  61
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     OPR(0)=M'LOAD'                      ;! MACHINE INSTRUCTION MNEMONICS
         LOAD  ACC,  ,      CT+28
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     0
         ADD   ACC,  BR1,  65
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     OPR(1)=M'SHL'
         LOAD  ACC,  ,      CT+29
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     1
         ADD   ACC,  BR1,  65
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     OPR(2)=M'SHR'
         LOAD  ACC,  ,      CT+30
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     2
         ADD   ACC,  BR1,  65
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     OPR(3)=M'AND'
         LOAD  ACC,  ,      CT+31
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     3
         ADD   ACC,  BR1,  65
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     OPR(4)=M'XOR'
         LOAD  ACC,  ,      CT+32
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     4
         ADD   ACC,  BR1,  65
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     OPR(5)=M'OR'
         LDA   ACC,  ,     20306
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     5
         ADD   ACC,  BR1,  65
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     OPR(6)=M'EXP'
         LOAD  ACC,  ,      CT+33
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     6
         ADD   ACC,  BR1,  65
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     OPR(7)=M'DIV'
         LOAD  ACC,  ,      CT+34
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     7
         ADD   ACC,  BR1,  65
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     OPR(8)=M'MLT'
         LOAD  ACC,  ,      CT+35
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     8
         ADD   ACC,  BR1,  65
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     OPR(9)=M'ADD'
         LOAD  ACC,  ,      CT+36
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     9
         ADD   ACC,  BR1,  65
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     OPR(10)=M'SUB'
         LOAD  ACC,  ,      CT+37
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     10
         ADD   ACC,  BR1,  65
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     OPR(11)=M'NEG'
         LOAD  ACC,  ,      CT+38
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     11
         ADD   ACC,  BR1,  65
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     OPR(12)=M'NOT'
         LOAD  ACC,  ,      CT+39
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     12
         ADD   ACC,  BR1,  65
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     UCN(1)=3                            ;! OPERATOR TYPES
         LDA   ACC,  ,     3
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     1
         ADD   ACC,  BR1,  63
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     UCN(2)=3                            ;! 1 : UNARY
         LDA   ACC,  ,     3
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     2
         ADD   ACC,  BR1,  63
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     UCN(3)=2                            ;! 2 : BINARY COMMUTATIVE
         LDA   ACC,  ,     2
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     3
         ADD   ACC,  BR1,  63
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     UCN(3)=2                            ;! 3 : BINARY NON-COMMUTATIVE
         LDA   ACC,  ,     2
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     3
         ADD   ACC,  BR1,  63
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     UCN(4)=2
         LDA   ACC,  ,     2
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     4
         ADD   ACC,  BR1,  63
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     UCN(5)=2
         LDA   ACC,  ,     2
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     5
         ADD   ACC,  BR1,  63
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     UCN(6)=3
         LDA   ACC,  ,     3
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     6
         ADD   ACC,  BR1,  63
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     UCN(7)=3
         LDA   ACC,  ,     3
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     7
         ADD   ACC,  BR1,  63
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     UCN(8)=2
         LDA   ACC,  ,     2
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     8
         ADD   ACC,  BR1,  63
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     UCN(9)=2
         LDA   ACC,  ,     2
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     9
         ADD   ACC,  BR1,  63
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     UCN(10)=3
         LDA   ACC,  ,     3
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     10
         ADD   ACC,  BR1,  63
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     UCN(11)=1
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     11
         ADD   ACC,  BR1,  63
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     UCN(12)=1
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     12
         ADD   ACC,  BR1,  63
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     BTN=0                               ;! BRANCH TABLE POINTER
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  15

;     CTN=0                               ;! CONSTANT TABLE POINTER
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  16

;     CHP=1                               ;! NAME CHARACTER TABLE POINTER
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  17

;     FAULTS=0                            ;! FAULT COUNT
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  18

;     LEVEL=0                             ;! TEXTUAL LEVEL
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  19

;     SCF=0                               ;! CONDITION FLAG
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  22

;     JUMP(0)=0                           ;! JUMP LIST POINTER
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     0
         ADD   ACC,  BR1,  39
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     STAR(0)=0                           ;! STORAGE ALLOCATION POSITION IN COT
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     0
         ADD   ACC,  BR1,  41
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     NAME(0)=0                           ;! NAME LIST POINTER
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     0
         ADD   ACC,  BR1,  45
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     RTP(0)=-1                           ;! ROUTINE TYPE
         LDA   ACC,  ,     1
         NEG   ACC,  ,     0
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     0
         ADD   ACC,  BR1,  47
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     CHPP(0)=0                           ;! NAME CHARACTER TABLE POSITION
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     0
         ADD   ACC,  BR1,  51
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     START(0)=0                          ;! START/FINISH LIST
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     0
         ADD   ACC,  BR1,  53
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     RAD(0)=10                           ;! NEXT RELATIVE ADDRESS TO BE ALLOCATED
         LDA   ACC,  ,     10
         STR   ACC,  BR1,  2
         LDA   ACC,  ,     0
         ADD   ACC,  BR1,  55
         LOAD  WK,   BR1,  2
         STR   WK,   ACC,  0

;     CA=0                                ;! CURRENT CODE DUMPING ADDRESS
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  20

;     PRINT SYMBOL('P')
         LDA   ACC,  ,     80
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     PRINT SYMBOL('R')
         LDA   ACC,  ,     82
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     PRINT SYMBOL('G')
         LDA   ACC,  ,     71
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     PRINT SYMBOL(':')
         LDA   ACC,  ,     58
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;1:   READ LINE
         BAL   WK,   ,      BT+12

;     TP=1                                      ;! TEXT POINTER
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  12

;2:   %IF T(TP)='!' %THEN ->3                   ;! COMMENT - SKIP TO END
         LOAD  ACC,  BR1,  12
         ADD   ACC,  BR1,  31
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+40
         BZ    ACC,  ,      BT+24

;     PSP=-1000                                 ;! START OF <SS> IN PHRASE STRUCTURE TABLES
         LDA   ACC,  ,     1000
         NEG   ACC,  ,     0
         STR   ACC,  BR1,  13

;     AP=1
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  10

;     %IF COMPARE=1 %THEN %START                ;! SUCCESSFUL ANALYSIS
         BAL   WK,   ,      BT+13
         SUB   ACC,  ,      CT+41
         BNZ   ACC,  ,      BT+25

;        AP=1                                   ;! ANALYSIS RECORD POINTER
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  10

;        SS                                     ;! PROCESS SOURCE STATEMENT
         BAL   WK,   ,      BT+14

;        %IF T(TP-1)=';' %THEN ->2              ;! FURTHER STATEMENT ON THIS LINE
         LOAD  ACC,  BR1,  12
         SUB   ACC,  ,      CT+42
         ADD   ACC,  BR1,  31
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+43
         BZ    ACC,  ,      BT+23

;        ->1 ; %FINISH                          ;! GO TO READ NEXT LINE
         B     ,     ,      BT+22

;     FAULT(M'SYNT',M'AX ?',M'    ',M'    ')    ;! UNSUCCESSFUL ANALYSIS
         LOAD  ACC,  ,      CT+44
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+45
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+46
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+47
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;5:   %IF T(TP)=10 %THEN ->1                    ;! NEWLINE - READ NEXT LINE
         LOAD  ACC,  BR1,  12
         ADD   ACC,  BR1,  31
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+48
         BZ    ACC,  ,      BT+22

;     %IF T(TP)=';' %THEN %START                ;! END OF STATEMENT
         LOAD  ACC,  BR1,  12
         ADD   ACC,  BR1,  31
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+49
         BNZ   ACC,  ,      BT+27

;        TP=TP+1                                ;! TP TO START OF NEXT STATEMENT
         LOAD  ACC,  BR1,  12
         ADD   ACC,  ,      CT+50
         STR   ACC,  BR1,  12

;        ->2 ; %FINISH                          ;! GO TO EXAMINE NEXT STATEMENT
         B     ,     ,      BT+23

;3:   TP=TP+1                                   ;! SKIP TO NEXT CHARACTER OF STATEMENT
         LOAD  ACC,  BR1,  12
         ADD   ACC,  ,      CT+51
         STR   ACC,  BR1,  12

;     ->5
         B     ,     ,      BT+26

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE READ PS
         B     ,     ,      BT+28
         STR   BR2,  STP,  0
         LDA   BR2,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+52

;! READ IN AND REDUCE PHRASE STRUCTURE

;%INTEGER PNP,ALT,P,I,J,K

;%INTEGERARRAY PN,PSP(256:300)    ;! PHRASE NAME CHARS & POINTERS TO START OF PHRASES IN PS
         LDA   ACC,  ,     256
         STR   ACC,  BR2,  2
         LDA   ACC,  ,     300
         LDA   ACC,  ACC,  1
         STR   ACC,  BR2,  3
         SUB   STP,  BR2,  2
         STR   STP,  BR2,  16
         ADD   STP,  BR2,  3
         SUB   STP,  BR2,  2
         STR   STP,  BR2,  18
         ADD   STP,  BR2,  3

;%ROUTINESPEC INSERT LIT

;%INTEGERFNSPEC GET PN

;     PNP=256                               ;! PN POINTER
         LDA   ACC,  ,     256
         STR   ACC,  BR2,  10

;     P=-1000                               ;! PS POINTER
         LDA   ACC,  ,     1000
         NEG   ACC,  ,     0
         STR   ACC,  BR2,  12

;1:   READ SYMBOL(I)
         LDA   ACC,  BR2,  13
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+0

;     %IF I='B' %THEN %START                ;! BUILT-IN PHRASE
         LOAD  ACC,  BR2,  13
         SUB   ACC,  ,      CT+53
         BNZ   ACC,  ,      BT+32

;2:      READ SYMBOL(I)                        ;! SKIP TO <
         LDA   ACC,  BR2,  13
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+0

;        %IF I\='<' %THEN ->2
         LOAD  ACC,  BR2,  13
         SUB   ACC,  ,      CT+54
         BNZ   ACC,  ,      BT+33

;        J=GET PN                           ;! READ PHRASE NAME & GET POSITION IN PSP
         BAL   WK,   ,      BT+30
         STR   ACC,  BR2,  14

;3:      READ SYMBOL(I)                        ;! SKIP TO =
         LDA   ACC,  BR2,  13
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+0

;        %IF I\='=' %THEN ->3
         LOAD  ACC,  BR2,  13
         SUB   ACC,  ,      CT+55
         BNZ   ACC,  ,      BT+34

;        READ(K)                            ;! READ PHRASE NUMBER
         LDA   ACC,  BR2,  15
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+4

;        PSP(J)=K                           ;! FILL IN PHRASE NUMBER
         LOAD  ACC,  BR2,  15
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  14
         ADD   ACC,  BR2,  18
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;        ->1 ; %FINISH                      ;! GO TO DEAL WITH NEXT PHRASE
         B     ,     ,      BT+31

;     %IF I='P' %THEN %START                ;! PHRASE
         LOAD  ACC,  BR2,  13
         SUB   ACC,  ,      CT+56
         BNZ   ACC,  ,      BT+35

;4:      READ SYMBOL(I)                        ;! SKIP TO <
         LDA   ACC,  BR2,  13
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+0

;        %IF I\='<' %THEN ->4
         LOAD  ACC,  BR2,  13
         SUB   ACC,  ,      CT+57
         BNZ   ACC,  ,      BT+36

;        PSP(GET PN)=P                      ;! READ PHRASE NAME & FILL IN PS POSITION
         LOAD  ACC,  BR2,  12
         STR   ACC,  BR2,  2
         BAL   WK,   ,      BT+30
         ADD   ACC,  BR2,  18
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;7:      ALT=P                              ;! REMEMBER START POSITION IN PS OF THIS ALTERNATIVE
         LOAD  ACC,  BR2,  12
         STR   ACC,  BR2,  11

;6:      P=P+1                              ;! NEXT PS POSITION
         LOAD  ACC,  BR2,  12
         ADD   ACC,  ,      CT+58
         STR   ACC,  BR2,  12

;5:      READ SYMBOL(I)                        ;! START OF NEXT ITEM IN THIS ALTERNATIVE
         LDA   ACC,  BR2,  13
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+0

;        %IF I='''' %THEN %START            ;! LITERAL TEXT
         LOAD  ACC,  BR2,  13
         SUB   ACC,  ,      CT+59
         BNZ   ACC,  ,      BT+40

;           INSERT LIT                      ;! READ LITERAL & INSERT IN PS
         BAL   WK,   ,      BT+29

;           ->5 ; %FINISH                   ;! GO FOR NEXT ITEM
         B     ,     ,      BT+39

;        %IF I='<' %THEN %START             ;! ITEM IS A PHRASE NAME
         LOAD  ACC,  BR2,  13
         SUB   ACC,  ,      CT+60
         BNZ   ACC,  ,      BT+41

;           PS(P)=GET PN                    ;! READ PHRASE NAME & FILL IN PS WITH PSP POSITION
         BAL   WK,   ,      BT+30
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  12
         ADD   ACC,  BR1,  23
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;           ->6 ; %FINISH                   ;! GO FOR NEXT ITEM
         B     ,     ,      BT+38

;        %IF I=',' %THEN %START             ;! END OF THIS ALTERNATIVE
         LOAD  ACC,  BR2,  13
         SUB   ACC,  ,      CT+61
         BNZ   ACC,  ,      BT+42

;           PS(ALT)=P                       ;! FILL IN POINTER TO END OF ALTERNATIVE
         LOAD  ACC,  BR2,  12
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  11
         ADD   ACC,  BR1,  23
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;           ->7 ; %FINISH                   ;! GO FOR START OF NEXT ALTERNATIVE
         B     ,     ,      BT+37

;        %IF I=';' %THEN %START             ;! END OF PHRASE DEFINITION
         LOAD  ACC,  BR2,  13
         SUB   ACC,  ,      CT+62
         BNZ   ACC,  ,      BT+43

;           PS(ALT)=P                       ;! FILL IN POINTER TO END OF ALTERNATIVE
         LOAD  ACC,  BR2,  12
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  11
         ADD   ACC,  BR1,  23
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;           PS(P)=0                         ;! FILL IN END OF PHRASE MARKER
         LDA   ACC,  ,     0
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  12
         ADD   ACC,  BR1,  23
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;           P=P+1                           ;! NEXT PS POSITION FOR START OF NEXT PHRASE DEFINITION
         LOAD  ACC,  BR2,  12
         ADD   ACC,  ,      CT+63
         STR   ACC,  BR2,  12

;           ->1 ; %FINISH                   ;! GO FOR NEXT PHRASE
         B     ,     ,      BT+31

;        ->5 ; %FINISH                      ;! SKIP TO SOMETHING SIGNIFICANT
         B     ,     ,      BT+39

;     %IF I='E' %THEN %START                ;! END OF PHRASE STRUCTURE DEFINITIONS
         LOAD  ACC,  BR2,  13
         SUB   ACC,  ,      CT+64
         BNZ   ACC,  ,      BT+44

;        I=-1000                            ;! REPLACE ALL POINTERS TO PSP WITH CORRECT PS POINTERS
         LDA   ACC,  ,     1000
         NEG   ACC,  ,     0
         STR   ACC,  BR2,  13

;8:      %IF PS(I)>=256 %THEN PS(I)=PSP(PS(I))
         LOAD  ACC,  BR2,  13
         ADD   ACC,  BR1,  23
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+65
         BL    ACC,  ,      BT+46
         LOAD  ACC,  BR2,  13
         ADD   ACC,  BR1,  23
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR2,  18
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  13
         ADD   ACC,  BR1,  23
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;        I=I+1
         LOAD  ACC,  BR2,  13
         ADD   ACC,  ,      CT+66
         STR   ACC,  BR2,  13

;        %IF I\=P %THEN ->8
         LOAD  ACC,  BR2,  13
         SUB   ACC,  BR2,  12
         BNZ   ACC,  ,      BT+45

;        %RETURN ; %FINISH
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     ->1                                   ;! SKIP TO SOMETHING SIGNIFICANT
         B     ,     ,      BT+31

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%ROUTINE INSERT LIT
         B     ,     ,      BT+47
         STR   BR3,  STP,  0
         LDA   BR3,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+67

;! INSERT LITERAL TEXT INTO 'PS'

;%INTEGER SH,I

;     SH=0                                  ;! % SHIFT VALUE TO 0
         LDA   ACC,  ,     0
         STR   ACC,  BR3,  10

;1:   READ SYMBOL(I)
         LDA   ACC,  BR3,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+0

;     %IF I='''' %THEN %START
         LOAD  ACC,  BR3,  11
         SUB   ACC,  ,      CT+68
         BNZ   ACC,  ,      BT+49

;        %IF NEXT SYMBOL\='''' %THEN %RETURN    ;! END OF LITERAL
         BAL   WK,   ,      BT+1
         SUB   ACC,  ,      CT+69
         BZ    ACC,  ,      BT+50
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;        READ SYMBOL(I)                    ;! QUOTE INSIDE LITERAL - IGNORE ONE
         LDA   ACC,  BR3,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+0

;        %FINISH

;     %IF I='%' %THEN SH=128 %ELSE %START   ;! SHIFT VALUE TO 128 FOR %
         LOAD  ACC,  BR3,  11
         SUB   ACC,  ,      CT+70
         BNZ   ACC,  ,      BT+51
         LDA   ACC,  ,     128
         STR   ACC,  BR3,  10
         B     ,     ,      BT+52

;        %IF I<'A' %OR I>'Z' %THEN SH=0     ;! END OF KEYWORD - SHIFT VALUE TO 0
         LOAD  ACC,  BR3,  11
         SUB   ACC,  ,      CT+71
         BL    ACC,  ,      BT+53
         LOAD  ACC,  BR3,  11
         SUB   ACC,  ,      CT+72
         BNG   ACC,  ,      BT+54
         LDA   ACC,  ,     0
         STR   ACC,  BR3,  10

;        PS(P)=I+SH                     ;! STORE SHIFTED (POSSIBLY) CHAR IN PS
         LOAD  ACC,  BR3,  11
         ADD   ACC,  BR3,  10
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR2,  12
         ADD   ACC,  BR1,  23
         LOAD  WK,   BR3,  2
         STR   WK,   ACC,  0

;        P=P+1                          ;! MOVE TO NEXT POSITION IN PS
         LOAD  ACC,  BR2,  12
         ADD   ACC,  ,      CT+73
         STR   ACC,  BR2,  12

;        %FINISH

;     ->1
         B     ,     ,      BT+48

;%END
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%INTEGERFN GET PN
         B     ,     ,      BT+55
         STR   BR3,  STP,  0
         LDA   BR3,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+74

;! READ IN PHRASE NAME AND GET INDEX IN 'PSP'

;%INTEGER NP,S,I

;     NP=0                            ;! TO ACCUMULATE PHRASE NAME CHARS
         LDA   ACC,  ,     0
         STR   ACC,  BR3,  10

;     S=24                            ;! INITIAL SHIFT VALUE TO PACK CHARS
         LDA   ACC,  ,     24
         STR   ACC,  BR3,  11

;1:   READ SYMBOL(I)
         LDA   ACC,  BR3,  12
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+0

;     %IF I\='>' %THEN %START         ;! NOT END OF NAME YET
         LOAD  ACC,  BR3,  12
         SUB   ACC,  ,      CT+75
         BZ    ACC,  ,      BT+57

;        NP=NP!I<<S                   ;! PACK NEXT CHAR OF PHRASE NAME
         LOAD  ACC,  BR3,  12
         SHL   ACC,  BR3,  11
         OR    ACC,  BR3,  10
         STR   ACC,  BR3,  10

;        S=S-8                        ;! REDUCE SHIFT VALUE FOR NEXT CHAR
         LOAD  ACC,  BR3,  11
         SUB   ACC,  ,      CT+76
         STR   ACC,  BR3,  11

;        ->1 ; %FINISH
         B     ,     ,      BT+56

;     %IF PNP\=256 %THEN %START       ;! NOT FIRST PHRASE NAME
         LOAD  ACC,  BR2,  10
         SUB   ACC,  ,      CT+77
         BZ    ACC,  ,      BT+58

;        I=256                        ;! SCAN NAMES TO FIND IF ALREADY IN
         LDA   ACC,  ,     256
         STR   ACC,  BR3,  12

;2:      %IF NP=PN(I) %THEN %RESULT=I
         LOAD  ACC,  BR3,  12
         ADD   ACC,  BR2,  16
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR3,  10
         SUB   ACC,  BR3,  2
         BNZ   ACC,  ,      BT+60
         LOAD  ACC,  BR3,  12
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;        I=I+1
         LOAD  ACC,  BR3,  12
         ADD   ACC,  ,      CT+78
         STR   ACC,  BR3,  12

;        %IF I\=PNP %THEN ->2
         LOAD  ACC,  BR3,  12
         SUB   ACC,  BR2,  10
         BNZ   ACC,  ,      BT+59

;        %FINISH

;     PN(PNP)=NP                      ;! INSERT NEW NAME IN DICTIONARY
         LOAD  ACC,  BR3,  10
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR2,  10
         ADD   ACC,  BR2,  16
         LOAD  WK,   BR3,  2
         STR   WK,   ACC,  0

;     PSP(PNP)=99999                  ;! UNDEFINED PHRASE MARKER
         LOAD  ACC,  ,      CT+79
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR2,  10
         ADD   ACC,  BR2,  18
         LOAD  WK,   BR3,  2
         STR   WK,   ACC,  0

;     PNP=PNP+1                       ;! MOVE TO NEXT DICTIONARY POSITION
         LOAD  ACC,  BR2,  10
         ADD   ACC,  ,      CT+80
         STR   ACC,  BR2,  10

;     %RESULT=PNP-1
         LOAD  ACC,  BR2,  10
         SUB   ACC,  ,      CT+81
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         STOP  ,     ,     0
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE READ LINE
         B     ,     ,      BT+61
         STR   BR2,  STP,  0
         LDA   BR2,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+82

;! LEXICAL PHASE - READ & CLEAN UP NEXT LINE OF TEXT

;%ROUTINESPEC STORE(%INTEGER I)

;%INTEGER SH,I

;     NEWLINES(2)
         LDA   ACC,  ,     2
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+9

;     PRINT SYMBOL(';')
         LDA   ACC,  ,     59
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     SH=0                                ;! % & LITERAL SHIFT VALUE TO 0
         LDA   ACC,  ,     0
         STR   ACC,  BR2,  10

;     TP=1                                ;! POINTER TO TEXT ARRAY T
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  12

;1:   READ SYMBOL(I)
         LDA   ACC,  BR2,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+0

;     %IF I=10 %AND TP=1 %THEN ->1
         LOAD  ACC,  BR2,  11
         SUB   ACC,  ,      CT+83
         BNZ   ACC,  ,      BT+64
         LOAD  ACC,  BR1,  12
         SUB   ACC,  ,      CT+84
         BZ    ACC,  ,      BT+63

;     PRINT SYMBOL(I)
         LOAD  ACC,  BR2,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     %IF I='''' %THEN %START
         LOAD  ACC,  BR2,  11
         SUB   ACC,  ,      CT+85
         BNZ   ACC,  ,      BT+65

;        SH=128                           ;! SHIFT VALUE FOR LITERAL
         LDA   ACC,  ,     128
         STR   ACC,  BR2,  10

;2:      STORE(I)                         ;! STORE SHIFTED CHAR IN TEXT ARRAY
         LOAD  ACC,  BR2,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+62

;        READ SYMBOL(I)
         LDA   ACC,  BR2,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+0

;        PRINT SYMBOL(I)
         LOAD  ACC,  BR2,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;        %IF I=10 %THEN PRINT SYMBOL(';')
         LOAD  ACC,  BR2,  11
         SUB   ACC,  ,      CT+86
         BNZ   ACC,  ,      BT+67
         LDA   ACC,  ,     59
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;        %IF I\='''' %THEN ->2            ;! NOT END OF LITERAL YET
         LOAD  ACC,  BR2,  11
         SUB   ACC,  ,      CT+87
         BNZ   ACC,  ,      BT+66

;        READ SYMBOL(I)
         LDA   ACC,  BR2,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+0

;        PRINT SYMBOL(I)
         LOAD  ACC,  BR2,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;        %IF I='''' %THEN ->2             ;! QUOTE IN LITERAL - IGNORE ONE
         LOAD  ACC,  BR2,  11
         SUB   ACC,  ,      CT+88
         BZ    ACC,  ,      BT+66

;        SH=0                             ;! SHIFT VALUE TO 0 FOR END OF LITERAL
         LDA   ACC,  ,     0
         STR   ACC,  BR2,  10

;        STORE('''')                      ;! STORE UNSHIFTED VALUE TO MARK END
         LDA   ACC,  ,     39
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+62

;        %FINISH

;     %IF I='%' %THEN SH=128 %ELSE %START ;! SHIFT VALUE TO 128 FOR KEYWORD
         LOAD  ACC,  BR2,  11
         SUB   ACC,  ,      CT+89
         BNZ   ACC,  ,      BT+68
         LDA   ACC,  ,     128
         STR   ACC,  BR2,  10
         B     ,     ,      BT+69

;        %IF I<'A' %OR I>'Z' %THEN SH=0   ;! SHIFT VALUE TO 0 FOR END OF KEYWORD
         LOAD  ACC,  BR2,  11
         SUB   ACC,  ,      CT+90
         BL    ACC,  ,      BT+70
         LOAD  ACC,  BR2,  11
         SUB   ACC,  ,      CT+91
         BNG   ACC,  ,      BT+71
         LDA   ACC,  ,     0
         STR   ACC,  BR2,  10

;        %IF I\=' ' %THEN %START          ;! IGNORE SPACES
         LOAD  ACC,  BR2,  11
         SUB   ACC,  ,      CT+92
         BZ    ACC,  ,      BT+72

;           STORE(I)
         LOAD  ACC,  BR2,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+62

;           %IF I=10 %THEN %START         ;! NEWLINE CHAR
         LOAD  ACC,  BR2,  11
         SUB   ACC,  ,      CT+93
         BNZ   ACC,  ,      BT+73

;              %IF T(TP-2)='C'+128 %THEN %START
         LDA   ACC,  ,     67
         ADD   ACC,  ,      CT+94
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR1,  12
         SUB   ACC,  ,      CT+95
         ADD   ACC,  BR1,  31
         LOAD  ACC,  ACC,  0
         SUB   ACC,  BR2,  2
         BNZ   ACC,  ,      BT+74

;                 TP=TP-2
         LOAD  ACC,  BR1,  12
         SUB   ACC,  ,      CT+96
         STR   ACC,  BR1,  12

;                 PRINT SYMBOL(';')
         LDA   ACC,  ,     59
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;                 %FINISH %ELSE %RETURN
         B     ,     ,      BT+75
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;              %FINISH

;           %FINISH

;        %FINISH

;     ->1
         B     ,     ,      BT+63

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%ROUTINE STORE(%INTEGER I)
I PAR NOT AS SPEC 
         B     ,     ,      BT+76
         STR   BR3,  STP,  0
         LDA   BR3,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+97

;! STORE (POSSIBLY) SHIFTED CHARACTER IN TEXT ARRAY & CHECK LINE NOT TOO LONG

;     %IF TP>300 %THEN %START
         LOAD  ACC,  BR1,  12
         SUB   ACC,  ,      CT+98
         BNG   ACC,  ,      BT+77

;        FAULT(M'STAT',M'MNT ',M'TOO ',M'LONG')
         LOAD  ACC,  ,      CT+99
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+100
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+101
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+102
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        TP=1
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  12

;        %FINISH

;     T(TP)=I+SH                      ;! STORE CHAR IN TEXT ARRAY
         LOAD  ACC,  BR3,  10
         ADD   ACC,  BR2,  10
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR1,  12
         ADD   ACC,  BR1,  31
         LOAD  WK,   BR3,  2
         STR   WK,   ACC,  0

;     TP=TP+1                         ;! MOVE TO NEXT POSITION
         LOAD  ACC,  BR1,  12
         ADD   ACC,  ,      CT+103
         STR   ACC,  BR1,  12

;%END
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%INTEGERFN COMPARE
         B     ,     ,      BT+78
         STR   BR2,  STP,  0
         LDA   BR2,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+104

;! ANALYSE PHRASE

;%INTEGERFNSPEC NAME            ;! BUILT-IN PHRASE NAME

;%INTEGERFNSPEC CNST            ;! BUILT-IN PHRASE <CNST>

;%INTEGER APP,TPP,PSPP,AE,N

;     TPP=TP                              ;! PRESERVE INITIAL TEXT POINTER
         LOAD  ACC,  BR1,  12
         STR   ACC,  BR2,  11

;     APP=AP                              ;! PRESERVE INITIAL ANALYSIS RECORD
         LOAD  ACC,  BR1,  10
         STR   ACC,  BR2,  10

;     A(AP)=1                             ;! ALTERNATIVE 1 FIRST
         LDA   ACC,  ,     1
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;11:  AE=PS(PSP)                          ;! POINTER TO END OF ALTERNATIVE
         LOAD  ACC,  BR1,  13
         ADD   ACC,  BR1,  23
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  13

;     PSP=PSP+1                           ;! FIRST ITEM OF ALTERNATIVE DEFN
         LOAD  ACC,  BR1,  13
         ADD   ACC,  ,      CT+105
         STR   ACC,  BR1,  13

;12:  %IF PSP=AE %THEN %RESULT=1          ;! END OF ALT REACHED - SUCCESS
         LOAD  ACC,  BR1,  13
         SUB   ACC,  BR2,  13
         BNZ   ACC,  ,      BT+83
         LDA   ACC,  ,     1
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     N=PS(PSP)                           ;! NEXT ITEM OF ALT DEFN
         LOAD  ACC,  BR1,  13
         ADD   ACC,  BR1,  23
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  14

;     PSP=PSP+1                           ;! FOR FOLLOWING ITEM
         LOAD  ACC,  BR1,  13
         ADD   ACC,  ,      CT+106
         STR   ACC,  BR1,  13

;     %IF N<0 %THEN %START                ;! SUB-PHRASE
         LOAD  ACC,  BR2,  14
         BNL   ACC,  ,      BT+84

;        PSPP=PSP                         ;! PRESERVE PS POINTER
         LOAD  ACC,  BR1,  13
         STR   ACC,  BR2,  12

;        PSP=N                            ;! POINTER TO DEFN OF SUB-PHRASE
         LOAD  ACC,  BR2,  14
         STR   ACC,  BR1,  13

;        AP=AP+1                          ;! NEXT ANALYSIS RECORD POSITION
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+107
         STR   ACC,  BR1,  10

;        N=COMPARE                        ;! RECURSIVE COMPARISON FOR SUB-PHRASE
         BAL   WK,   ,      BT+13
         STR   ACC,  BR2,  14

;        PSP=PSPP                         ;! RESTORE PS POINTER
         LOAD  ACC,  BR2,  12
         STR   ACC,  BR1,  13

;        %IF N=1 %THEN ->12               ;! SUCCESSFUL COMPARISON - GO FOR NEXT ITEM
         LOAD  ACC,  BR2,  14
         SUB   ACC,  ,      CT+108
         BZ    ACC,  ,      BT+82

;        ->13 ; %FINISH                   ;! UNSUCCESSFUL - GO FOR NEXT ALTERNATIVE
         B     ,     ,      BT+85

;     %IF N=1 %THEN %START                ;! BUILT-IN PHRASE <NAME>
         LOAD  ACC,  BR2,  14
         SUB   ACC,  ,      CT+109
         BNZ   ACC,  ,      BT+86

;        %IF NAME=1 %THEN ->12            ;! SUCCESS
         BAL   WK,   ,      BT+79
         SUB   ACC,  ,      CT+110
         BZ    ACC,  ,      BT+82

;        ->13 ; %FINISH                   ;! FAILURE
         B     ,     ,      BT+85

;     %IF N=2 %THEN %START                ;! BUILT-IN PHRASE CNST
         LOAD  ACC,  BR2,  14
         SUB   ACC,  ,      CT+111
         BNZ   ACC,  ,      BT+87

;        %IF CNST=1 %THEN ->12            ;! SUCCESS
         BAL   WK,   ,      BT+80
         SUB   ACC,  ,      CT+112
         BZ    ACC,  ,      BT+82

;        ->13 ; %FINISH                   ;! FAILURE
         B     ,     ,      BT+85

;     %IF N=T(TP) %THEN %START            ;! LITERAL - MATCHES SOURCE CHAR
         LOAD  ACC,  BR1,  12
         ADD   ACC,  BR1,  31
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  14
         SUB   ACC,  BR2,  2
         BNZ   ACC,  ,      BT+88

;        TP=TP+1                          ;! MOVE TO NEXT SOURCE CHAR
         LOAD  ACC,  BR1,  12
         ADD   ACC,  ,      CT+113
         STR   ACC,  BR1,  12

;        ->12 ; %FINISH                   ;! GO FOR NEXT ITEM
         B     ,     ,      BT+82

;13:  %IF PS(AE)=0 %THEN %RESULT=0        ;! END OF PHRASE
         LOAD  ACC,  BR2,  13
         ADD   ACC,  BR1,  23
         LOAD  ACC,  ACC,  0
         BNZ   ACC,  ,      BT+89
         LDA   ACC,  ,     0
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     PSP=AE                              ;! START OF DEFN OF NEXT ALTERNATIVE
         LOAD  ACC,  BR2,  13
         STR   ACC,  BR1,  13

;     TP=TPP                              ;! BACKTRACK SOURCE TEXT
         LOAD  ACC,  BR2,  11
         STR   ACC,  BR1,  12

;     AP=APP                              ;!  AND ANALYSIS RECORD POINTERS
         LOAD  ACC,  BR2,  10
         STR   ACC,  BR1,  10

;     A(AP)=A(AP)+1                       ;! COUNT ALTERNATIVE NUMBER ON ONE
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         ADD   ACC,  ,      CT+114
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;     ->11                                ;! GO TO ANALYSE NEW ALTERNATIVE
         B     ,     ,      BT+81

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%INTEGERFN NAME
         B     ,     ,      BT+90
         STR   BR3,  STP,  0
         LDA   BR3,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+115

;! RECOGNISE AND INSERT NAME IN HASHING AREA OF TAG/LINK ARRAYS

;%INTEGER I,J,K,L,M,N

;     I=T(TP)                             ;! FIRST SOURCE CHAR
         LOAD  ACC,  BR1,  12
         ADD   ACC,  BR1,  31
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  10

;     %IF I<'A' %OR I>'Z' %OR (I='M' %AND T(TP+1)=''''+128) %THENRESULT=0
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+116
         BL    ACC,  ,      BT+91
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+117
         BG    ACC,  ,      BT+91
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+118
         BNZ   ACC,  ,      BT+92
         LDA   ACC,  ,     39
         ADD   ACC,  ,      CT+119
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR1,  12
         ADD   ACC,  ,      CT+120
         ADD   ACC,  BR1,  31
         LOAD  ACC,  ACC,  0
         SUB   ACC,  BR3,  2
         BNZ   ACC,  ,      BT+92
         LDA   ACC,  ,     0
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;                                         ;! FAILURE - NOT A LETTER OR AN M-TYPE CONSTANT

;     J=CHP                               ;! NEXT POSITION IN CHARACTER ARRAY
         LOAD  ACC,  BR1,  17
         STR   ACC,  BR3,  11

;     K=I<<16                             ;! LEAVE HOLE FOR LENGTH & PACK FIRST CHAR
         LOAD  ACC,  BR3,  10
         SHL   ACC,  ,      CT+121
         STR   ACC,  BR3,  12

;     L=1                                 ;! NO OF CHARS
         LDA   ACC,  ,     1
         STR   ACC,  BR3,  13

;     M=8                                 ;! NEXT SHIFT VALUE FOR PACKING
         LDA   ACC,  ,     8
         STR   ACC,  BR3,  14

;     N=I                                 ;! SUM VALUE OF CHARS FOR HASHING
         LOAD  ACC,  BR3,  10
         STR   ACC,  BR3,  15

;1:   TP=TP+1
         LOAD  ACC,  BR1,  12
         ADD   ACC,  ,      CT+122
         STR   ACC,  BR1,  12

;     I=T(TP)                             ;! NEXT CHAR FROM TEXT ARRAY
         LOAD  ACC,  BR1,  12
         ADD   ACC,  BR1,  31
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  10

;     %IF ('0'<=I %AND I<='9') %OR ('A'<=I %AND I<='Z') %THEN %START
         LDA   ACC,  ,     48
         SUB   ACC,  BR3,  10
         BG    ACC,  ,      BT+94
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+123
         BNG   ACC,  ,      BT+95
         LDA   ACC,  ,     65
         SUB   ACC,  BR3,  10
         BG    ACC,  ,      BT+96
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+124
         BG    ACC,  ,      BT+96

;                                         ;! A DIGIT OR A LETTER

;        K=K!I<<M                         ;! PACK NEXT LETTER
         LOAD  ACC,  BR3,  10
         SHL   ACC,  BR3,  14
         OR    ACC,  BR3,  12
         STR   ACC,  BR3,  12

;        L=L+1                            ;! CHARACTER COUNT
         LOAD  ACC,  BR3,  13
         ADD   ACC,  ,      CT+125
         STR   ACC,  BR3,  13

;        M=M-8                            ;! NEXT SHIFT
         LOAD  ACC,  BR3,  14
         SUB   ACC,  ,      CT+126
         STR   ACC,  BR3,  14

;        N=N+I                            ;! SUM OF LETTERS
         LOAD  ACC,  BR3,  15
         ADD   ACC,  BR3,  10
         STR   ACC,  BR3,  15

;        %IF M<0 %THEN %START             ;! PACKED WORD OF CHARS FULL
         LOAD  ACC,  BR3,  14
         BNL   ACC,  ,      BT+97

;           CH(CH NEXT)=K                 ;! STORE WORD IN CHAR ARRAY
         LOAD  ACC,  BR3,  12
         STR   ACC,  BR3,  2
         BAL   WK,   ,      BT+16
         ADD   ACC,  BR1,  37
         LOAD  WK,   BR3,  2
         STR   WK,   ACC,  0

;           K=0                           ;! PACKING WORD TO ZERO
         LDA   ACC,  ,     0
         STR   ACC,  BR3,  12

;           M=24                          ;! NEW SHIFT VALUE
         LDA   ACC,  ,     24
         STR   ACC,  BR3,  14

;           %FINISH

;        ->1 ; %FINISH                    ;! GO FOR NEXT CHAR
         B     ,     ,      BT+93

;     %IF K\=0 %THEN CH(CH NEXT)=K        ;! STORE ANY REMAINING CHARS IN CHAR ARRAY
         LOAD  ACC,  BR3,  12
         BZ    ACC,  ,      BT+98
         LOAD  ACC,  BR3,  12
         STR   ACC,  BR3,  2
         BAL   WK,   ,      BT+16
         ADD   ACC,  BR1,  37
         LOAD  WK,   BR3,  2
         STR   WK,   ACC,  0

;     CH(J)=CH(J)!L<<24                   ;! FILL IN LENGTH IN HOLE LEFT IN FIRST WORD
         LOAD  ACC,  BR3,  13
         SHL   ACC,  ,      CT+127
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR3,  11
         ADD   ACC,  BR1,  37
         LOAD  ACC,  ACC,  0
         OR    ACC,  BR3,  2
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR3,  11
         ADD   ACC,  BR1,  37
         LOAD  WK,   BR3,  2
         STR   WK,   ACC,  0

;     I=(N&15)<<4!N>>4&15                 ;! HASH VALUE
         LOAD  ACC,  BR3,  15
         SHR   ACC,  ,      CT+128
         AND   ACC,  ,      CT+129
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR3,  15
         AND   ACC,  ,      CT+130
         SHL   ACC,  ,      CT+131
         OR    ACC,  BR3,  2
         STR   ACC,  BR3,  10

;     K=I                                 ;! SCAN DICTIONARY FOR NAME
         LOAD  ACC,  BR3,  10
         STR   ACC,  BR3,  12

;2:   %IF TAG(K)\=0 %THEN %START          ;! A NAME IN THIS POSITION
         LOAD  ACC,  BR3,  12
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         BZ    ACC,  ,      BT+100

;        L=TAG(K)                         ;! CHAR ARRAY POSITION
         LOAD  ACC,  BR3,  12
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  13

;        M=J                              ;! CHAR ARRAY POSITION OF NEW NAME
         LOAD  ACC,  BR3,  11
         STR   ACC,  BR3,  14

;4:      %IF CH(L)=CH(M) %THEN %START     ;! PACKED WORDS MATCH
         LOAD  ACC,  BR3,  14
         ADD   ACC,  BR1,  37
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR3,  13
         ADD   ACC,  BR1,  37
         LOAD  ACC,  ACC,  0
         SUB   ACC,  BR3,  2
         BNZ   ACC,  ,      BT+102

;           M=M+1                         ;! NEXT WORD OF NEW NAME
         LOAD  ACC,  BR3,  14
         ADD   ACC,  ,      CT+132
         STR   ACC,  BR3,  14

;           %IF M=CHP %THEN %START        ;! NAMES MATCH
         LOAD  ACC,  BR3,  14
         SUB   ACC,  BR1,  17
         BNZ   ACC,  ,      BT+103

;              CHP=J                      ;! MOVE CHP BACK SINCE NAME ALREADY IN
         LOAD  ACC,  BR3,  11
         STR   ACC,  BR1,  17

;              ->3 ; %FINISH
         B     ,     ,      BT+104

;           L=L+1                         ;! NEXT WORD OF OLD NAME
         LOAD  ACC,  BR3,  13
         ADD   ACC,  ,      CT+133
         STR   ACC,  BR3,  13

;           ->4 ; %FINISH                 ;! GO FOR NEXT WORD
         B     ,     ,      BT+101

;        K=(K+1)&255                      ;! NO MATCH SO TRY NEXT DICTIONARY POSITION
         LOAD  ACC,  BR3,  12
         ADD   ACC,  ,      CT+134
         AND   ACC,  ,      CT+135
         STR   ACC,  BR3,  12

;        %IF K=I %THEN %START             ;! STARTING POSITION REACHED AGAIN
         LOAD  ACC,  BR3,  12
         SUB   ACC,  BR3,  10
         BNZ   ACC,  ,      BT+105

;           FAULT(M'DICT',M'IONA',M'RY F',M'ULL ')
         LOAD  ACC,  ,      CT+136
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+137
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+138
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+139
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;           %STOP ; %FINISH
         STOP  ,     ,     0

;        ->2 ; %FINISH
         B     ,     ,      BT+99

;     TAG(K)=J                            ;! STORE CHAR ARRAY POSITION OF NAME
         LOAD  ACC,  BR3,  11
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR3,  12
         ADD   ACC,  BR1,  25
         LOAD  WK,   BR3,  2
         STR   WK,   ACC,  0

;3:   AP=AP+1                             ;! NEXT ANALYSIS RECORD POSITION
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+140
         STR   ACC,  BR1,  10

;     A(AP)=K                             ;! STORE IDENTIFICATION NO OF NAME
         LOAD  ACC,  BR3,  12
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  WK,   BR3,  2
         STR   WK,   ACC,  0

;     %RESULT=1                           ;! SUCCESS
         LDA   ACC,  ,     1
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         STOP  ,     ,     0
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%INTEGERFN CNST
         B     ,     ,      BT+106
         STR   BR3,  STP,  0
         LDA   BR3,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+141

;! RECOGNISE INTEGER AND LITERAL TEXT CONSTANTS

;%INTEGER I,J,K

;     I=T(TP)                             ;! FIRST CHAR
         LOAD  ACC,  BR1,  12
         ADD   ACC,  BR1,  31
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  10

;     %IF I='M' %AND T(TP+1)=''''+128 %THEN %START  ;! M-TYPE CONSTANT
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+142
         BNZ   ACC,  ,      BT+107
         LDA   ACC,  ,     39
         ADD   ACC,  ,      CT+143
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR1,  12
         ADD   ACC,  ,      CT+144
         ADD   ACC,  BR1,  31
         LOAD  ACC,  ACC,  0
         SUB   ACC,  BR3,  2
         BNZ   ACC,  ,      BT+107

;        TP=TP+1                          ;! IGNORE THE M
         LOAD  ACC,  BR1,  12
         ADD   ACC,  ,      CT+145
         STR   ACC,  BR1,  12

;        I=T(TP)
         LOAD  ACC,  BR1,  12
         ADD   ACC,  BR1,  31
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  10

;        %FINISH

;     %IF I=''''+128 %THEN %START         ;! START OF A LITERAL
         LDA   ACC,  ,     39
         ADD   ACC,  ,      CT+146
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR3,  10
         SUB   ACC,  BR3,  2
         BNZ   ACC,  ,      BT+108

;        J=0                              ;! TO ACCUMULATE LITERAL VALUE
         LDA   ACC,  ,     0
         STR   ACC,  BR3,  11

;        K=0                              ;! CHARACTER COUNT
         LDA   ACC,  ,     0
         STR   ACC,  BR3,  12

;1:      TP=TP+1
         LOAD  ACC,  BR1,  12
         ADD   ACC,  ,      CT+147
         STR   ACC,  BR1,  12

;        I=T(TP)                          ;! NEXT CHAR
         LOAD  ACC,  BR1,  12
         ADD   ACC,  BR1,  31
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  10

;        %IF I\='''' %THEN %START         ;! NOT END OF LITERAL
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+148
         BZ    ACC,  ,      BT+110

;           J=J<<8!I&127                  ;! PACK CHAR
         LOAD  ACC,  BR3,  10
         AND   ACC,  ,      CT+149
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR3,  11
         SHL   ACC,  ,      CT+150
         OR    ACC,  BR3,  2
         STR   ACC,  BR3,  11

;           K=K+1                         ;! COUNT CHAR
         LOAD  ACC,  BR3,  12
         ADD   ACC,  ,      CT+151
         STR   ACC,  BR3,  12

;           ->1 ; %FINISH
         B     ,     ,      BT+109

;        TP=TP+1                          ;! POINTER AFTER QUOTE
         LOAD  ACC,  BR1,  12
         ADD   ACC,  ,      CT+152
         STR   ACC,  BR1,  12

;        %IF K>4 %THEN FAULT(M'STRI',M'NG T',M'OO L',M'ONG ')
         LOAD  ACC,  BR3,  12
         SUB   ACC,  ,      CT+153
         BNG   ACC,  ,      BT+111
         LOAD  ACC,  ,      CT+154
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+155
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+156
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+157
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        ->2 ; %FINISH
         B     ,     ,      BT+112

;     %IF I<'0' %OR I>'9' %THEN %RESULT=0 ;! NOT A CONSTANT
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+158
         BL    ACC,  ,      BT+113
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+159
         BNG   ACC,  ,      BT+114
         LDA   ACC,  ,     0
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     J=0
         LDA   ACC,  ,     0
         STR   ACC,  BR3,  11

;3:   J=10*J+I-'0'                        ;! ACCUMULATE DECIMAL VALUE
         LDA   ACC,  ,     10
         MLT   ACC,  BR3,  11
         ADD   ACC,  BR3,  10
         SUB   ACC,  ,      CT+160
         STR   ACC,  BR3,  11

;     TP=TP+1
         LOAD  ACC,  BR1,  12
         ADD   ACC,  ,      CT+161
         STR   ACC,  BR1,  12

;     I=T(TP)                             ;! NEXT CHAR
         LOAD  ACC,  BR1,  12
         ADD   ACC,  BR1,  31
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  10

;     %IF '0'<=I %AND I<='9' %THEN ->3    ;! A DIGIT - STILL PART OF CONSTANT
         LDA   ACC,  ,     48
         SUB   ACC,  BR3,  10
         BG    ACC,  ,      BT+116
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+162
         BNG   ACC,  ,      BT+115

;2:   AP=AP+1                             ;! NEXT ANALYSIS RECORD POSITION
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+163
         STR   ACC,  BR1,  10

;     A(AP)=J                             ;! FILL IN VALUE OF CONSTANT
         LOAD  ACC,  BR3,  11
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  WK,   BR3,  2
         STR   WK,   ACC,  0

;     %RESULT=1                           ;! SUCCESS
         LDA   ACC,  ,     1
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         STOP  ,     ,     0
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         STOP  ,     ,     0
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE SS
         B     ,     ,      BT+117
         STR   BR2,  STP,  0
         LDA   BR2,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+164

;! COMPILE SOURCE STATEMENT

;%ROUTINESPEC UI

;%ROUTINESPEC SCCOND(%INTEGERNAME LABEL)

;%ROUTINESPEC SEXPR

;%INTEGERFNSPEC FIND LABEL

;%ROUTINESPEC CHECK

;%ROUTINESPEC UNSET

;%ROUTINESPEC PUSH START(%INTEGER FLAG,LABEL)

;%INTEGERFNSPEC BT NEXT

;%INTEGERFNSPEC CT NEXT

;%INTEGERFNSPEC WS NEXT

;%ROUTINESPEC STORE TAG(%INTEGER NAME,FORM,TYPE,DIM,LEV,AD)

;%ROUTINESPEC DUMP(%INTEGER OP,REG,BASE,DISP)

;%ROUTINESPEC SKIP SEXPR

;%ROUTINESPEC SKIP APP

;%ROUTINESPEC RT

;%ROUTINESPEC ARRAD

;%ROUTINESPEC ENTER(%INTEGER TYPE,ALLOC)

;%ROUTINESPEC RETURN

;%INTEGER I,J,K,L,M,N,P,Q,R,WS,LABEL

;     I=A(AP)                             ;! ANALYSIS RECORD ENTRY
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  10

;     AP=AP+1                             ;! FOR FOLLOWING ENTRY
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+165
         STR   ACC,  BR1,  10

;     WS=2                                ;! SET WORKSPACE POINTER
         LDA   ACC,  ,     2
         STR   ACC,  BR2,  19

;     %IF I=1 %THEN ->10                  ;! UNCONDITIONAL INSTRUCTION
         LOAD  ACC,  BR2,  10
         SUB   ACC,  ,      CT+166
         BZ    ACC,  ,      BT+136

;     %IF I=2 %THEN ->20                  ;! CONDITIONAL STATEMENT
         LOAD  ACC,  BR2,  10
         SUB   ACC,  ,      CT+167
         BZ    ACC,  ,      BT+137

;     %IF I=3 %THEN ->30                  ;! LABEL
         LOAD  ACC,  BR2,  10
         SUB   ACC,  ,      CT+168
         BZ    ACC,  ,      BT+138

;     %IF I=4 %THEN ->40                  ;! %FINISH
         LOAD  ACC,  BR2,  10
         SUB   ACC,  ,      CT+169
         BZ    ACC,  ,      BT+139

;     %IF I=5 %THEN ->50                  ;! DECLARATIONS
         LOAD  ACC,  BR2,  10
         SUB   ACC,  ,      CT+170
         BZ    ACC,  ,      BT+140

;     %IF I=6 %THEN ->60                  ;! ROUTINE/FN SPEC
         LOAD  ACC,  BR2,  10
         SUB   ACC,  ,      CT+171
         BZ    ACC,  ,      BT+141

;     %IF I=7 %THEN ->70                  ;! %END
         LOAD  ACC,  BR2,  10
         SUB   ACC,  ,      CT+172
         BZ    ACC,  ,      BT+142

;     %IF I=8 %THEN ->80                  ;! %BEGIN
         LOAD  ACC,  BR2,  10
         SUB   ACC,  ,      CT+173
         BZ    ACC,  ,      BT+143

;     %IF I=9 %THEN ->90                  ;! %ENDOFPROGRAM
         LOAD  ACC,  BR2,  10
         SUB   ACC,  ,      CT+174
         BZ    ACC,  ,      BT+144

;     %RETURN                             ;! <SEP>
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! UI

;10:  UI                                  ;! COMPILE UNCONDITIONAL INSTRUCTION
         BAL   WK,   ,      BT+118

;     %RETURN
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! %IF . . . %THEN . . .  %ELSE

;20:  SCCOND(I)                           ;! COMPILE CONDITION
         LDA   ACC,  BR2,  10
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+119

;     %IF A(AP)=2 %THEN %START            ;! AP ON <UI> - JUMP INSTRUCTION
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+175
         BNZ   ACC,  ,      BT+145

;        AP=AP+2                          ;! AP ON <ELSE>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+176
         STR   ACC,  BR1,  10

;        J=-1                             ;! MARKER FOR 'JUMP'
         LDA   ACC,  ,     1
         NEG   ACC,  ,     0
         STR   ACC,  BR2,  11

;        %FINISH %ELSE %START             ;! NOT A JUMP
         B     ,     ,      BT+146

;        %IF A(AP)=3 %THEN %START         ;! %START
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+177
         BNZ   ACC,  ,      BT+147

;           %IF A(AP+1)=1 %THEN FAULT(M'%STA',M'RT %',M'ELSE',M' ?  ')
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+178
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+179
         BNZ   ACC,  ,      BT+148
         LOAD  ACC,  ,      CT+180
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+181
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+182
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+183
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;           PUSH START(0,I)
         LDA   ACC,  ,     0
         STR   ACC,  STP,  10
         LOAD  ACC,  BR2,  10
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+124

;           %RETURN ; %FINISH
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;        UI                               ;! COMPILE REMAINING UNCOND. INSTNS.
         BAL   WK,   ,      BT+118

;        J=0                              ;! 'NOT JUMP' MARKER
         LDA   ACC,  ,     0
         STR   ACC,  BR2,  11

;        %FINISH

;     %IF A(AP)=1 %THEN %START            ;! <ELSE>-CLAUSE PRESENT
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+184
         BNZ   ACC,  ,      BT+149

;        %IF J=0 %THEN %START             ;! <UI> WAS NOT A JUMP
         LOAD  ACC,  BR2,  11
         BNZ   ACC,  ,      BT+150

;           J=BT NEXT                     ;! JUMP ROUND <ELSE>-CLAUSE <UI>
         BAL   WK,   ,      BT+125
         STR   ACC,  BR2,  11

;           DUMP('B',0,M'BT',J)
         LDA   ACC,  ,     66
         STR   ACC,  STP,  10
         LDA   ACC,  ,     0
         STR   ACC,  STP,  11
         LDA   ACC,  ,     16980
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  11
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           %FINISH

;        %IF I>=0 %THEN BAT(I)=CA         ;! FILL IN LABEL ON <ELSE>-CLAUSE <UI>
         LOAD  ACC,  BR2,  10
         BL    ACC,  ,      BT+151
         LOAD  ACC,  BR1,  20
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  10
         ADD   ACC,  BR1,  33
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;        AP=AP+1                          ;! AP ON <UI>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+185
         STR   ACC,  BR1,  10

;        %IF A(AP)=3 %THEN %START         ;! %START
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+186
         BNZ   ACC,  ,      BT+152

;           PUSH START(1,J)
         LDA   ACC,  ,     1
         STR   ACC,  STP,  10
         LOAD  ACC,  BR2,  11
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+124

;           %RETURN ; %FINISH
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;        UI                               ;! COMPILE REMAINING <UI>S
         BAL   WK,   ,      BT+118

;        I=J                              ;! JUMP AROUND LABEL
         LOAD  ACC,  BR2,  11
         STR   ACC,  BR2,  10

;        %FINISH

;     %IF I>=0 %THEN BAT(I)=CA            ;! TO BRANCH ROUND THE UI
         LOAD  ACC,  BR2,  10
         BL    ACC,  ,      BT+153
         LOAD  ACC,  BR1,  20
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  10
         ADD   ACC,  BR1,  33
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;     %RETURN
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! CONST: . . .

;30:  I=FIND LABEL                        ;! LOCATE/INSERT LABEL IN JUMP LIST
         BAL   WK,   ,      BT+121
         STR   ACC,  BR2,  10

;     %IF I>=0 %THEN %START               ;! VALID LABEL
         LOAD  ACC,  BR2,  10
         BL    ACC,  ,      BT+154

;        %IF BAT(I)>=0 %THEN %START
         LOAD  ACC,  BR2,  10
         ADD   ACC,  BR1,  33
         LOAD  ACC,  ACC,  0
         BL    ACC,  ,      BT+155

;           WRITE(LABEL,1)
         LOAD  ACC,  BR2,  20
         STR   ACC,  STP,  10
         LDA   ACC,  ,     1
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+5

;           SPACES(2)
         LDA   ACC,  ,     2
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+7

;           FAULT(M'LABE',M'L SE',M'T TW',M'ICE ')
         LOAD  ACC,  ,      CT+187
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+188
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+189
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+190
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;           %FINISH

;        BAT(I)=CA                        ;! FILL IN LABEL ADDRESS
         LOAD  ACC,  BR1,  20
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  10
         ADD   ACC,  BR1,  33
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;        %FINISH

;     SS                                  ;! COMPILE STATEMENT AFTER LABEL
         BAL   WK,   ,      BT+14

;     %RETURN
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! %FINISH . . .

;40:  I=START(LEVEL)                           ;! LINK TO FIRST CELL IN START LIST
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  53
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  10

;     %IF I=0 %THEN %START                     ;! NO CELLS IN LIST
         LOAD  ACC,  BR2,  10
         BNZ   ACC,  ,      BT+156

;        FAULT(M'SPUR',M'IOUS',M' %FI',M'NISH')
         LOAD  ACC,  ,      CT+191
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+192
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+193
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+194
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        %RETURN ; %FINISH
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     J=TAG(I)&65535                           ;! JUMP AROUND LABEL
         LOAD  ACC,  BR2,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         AND   ACC,  ,      CT+195
         STR   ACC,  BR2,  11

;     K=TAG(I)>>16                             ;! BEFORE OR AFTER %ELSE MARKER
         LOAD  ACC,  BR2,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         SHR   ACC,  ,      CT+196
         STR   ACC,  BR2,  12

;     START(LEVEL)=RETURN CELL(I)              ;! POP UP CELL
         LOAD  ACC,  BR2,  10
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+18
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  53
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;     %IF A(AP)=1 %THEN %START                 ;! %ELSE PRESENT
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+197
         BNZ   ACC,  ,      BT+157

;        %IF K=1 %THEN FAULT(M'TWO ',M'%ELS',M'ES !',M'    ')
         LOAD  ACC,  BR2,  12
         SUB   ACC,  ,      CT+198
         BNZ   ACC,  ,      BT+158
         LOAD  ACC,  ,      CT+199
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+200
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+201
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+202
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        K=BT NEXT                             ;! JUMP AROUND <UI>
         BAL   WK,   ,      BT+125
         STR   ACC,  BR2,  12

;        DUMP('B',0,M'BT',K)
         LDA   ACC,  ,     66
         STR   ACC,  STP,  10
         LDA   ACC,  ,     0
         STR   ACC,  STP,  11
         LDA   ACC,  ,     16980
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  12
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        %IF J\=65535 %THEN BAT(J)=CA          ;! FILL IN LABEL ON <UI> IF NECESSARY
         LOAD  ACC,  BR2,  11
         SUB   ACC,  ,      CT+203
         BZ    ACC,  ,      BT+159
         LOAD  ACC,  BR1,  20
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  11
         ADD   ACC,  BR1,  33
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;        AP=AP+1                               ;! AP ON <UI>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+204
         STR   ACC,  BR1,  10

;        %IF A(AP)=3 %THEN %START              ;! %START
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+205
         BNZ   ACC,  ,      BT+160

;           PUSH START(1,K)
         LDA   ACC,  ,     1
         STR   ACC,  STP,  10
         LOAD  ACC,  BR2,  12
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+124

;           %RETURN ; %FINISH
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;        UI                                    ;! COMPILE REMAINING <UI>S
         BAL   WK,   ,      BT+118

;        J=K                                   ;! JUMP AROUND LABEL
         LOAD  ACC,  BR2,  12
         STR   ACC,  BR2,  11

;        %FINISH

;     %IF J\=65535 %THEN BAT(J)=CA             ;! FILL IN JUMP AROUND LABEL IF NECESSARY
         LOAD  ACC,  BR2,  11
         SUB   ACC,  ,      CT+206
         BZ    ACC,  ,      BT+161
         LOAD  ACC,  BR1,  20
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  11
         ADD   ACC,  BR1,  33
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;     %RETURN
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! DECLARATIONS

;50:  %IF A(AP)=1 %THEN %START                        ;! <ARR> = %ARRAY
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+207
         BNZ   ACC,  ,      BT+162

;        APP=AP                                       ;! SAVE AP
         LOAD  ACC,  BR1,  10
         STR   ACC,  BR1,  11

;51:     AP=AP+2                                      ;! AP ON <NAMS>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+208
         STR   ACC,  BR1,  10

;        %IF A(AP)=1 %THEN ->51                       ;! SKIP DOWN TO END OF LIST OF NAMES
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+209
         BZ    ACC,  ,      BT+163

;        AP=AP+1                                      ;! AP ON <+-\>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+210
         STR   ACC,  BR1,  10

;        SEXPR                                        ;! COMPILE EXPRESSION - LOWER BOUND
         BAL   WK,   ,      BT+120

;        DUMP(M'STR',M'ACC',BR(LEVEL),WS NEXT)        ;! STORE VALUE IN WORKSPACE
         LOAD  ACC,  ,      CT+211
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+212
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         BAL   WK,   ,      BT+127
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        SEXPR                                        ;! COMPILE EXPRESSION - UPPER BOUND
         BAL   WK,   ,      BT+120

;        DUMP(M'LDA',M'ACC',M'ACC',1)                 ;! INCREMENT VALUE BY 1
         LOAD  ACC,  ,      CT+213
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+214
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+215
         STR   ACC,  STP,  12
         LDA   ACC,  ,     1
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        %IF A(AP)=1 %THEN %START                     ;! 2-DIM ARRAYS
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+216
         BNZ   ACC,  ,      BT+164

;           DUMP(M'SUB',M'ACC',BR(LEVEL),WS-1)        ;! PERFORM 2-DIM ARRAY DECLARATION CALCULATIONS
         LOAD  ACC,  ,      CT+217
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+218
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  19
         SUB   ACC,  ,      CT+219
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(M'STR',M'ACC',BR(LEVEL),WS NEXT)
         LOAD  ACC,  ,      CT+220
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+221
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         BAL   WK,   ,      BT+127
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           AP=AP+1
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+222
         STR   ACC,  BR1,  10

;           SEXPR                                     ;! LOWER BOUND EXPR FOR 2ND DIM
         BAL   WK,   ,      BT+120

;           DUMP(M'MLT',M'ACC',BR(LEVEL),WS-1)
         LOAD  ACC,  ,      CT+223
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+224
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  19
         SUB   ACC,  ,      CT+225
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(M'STR',M'ACC',BR(LEVEL),WS NEXT)
         LOAD  ACC,  ,      CT+226
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+227
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         BAL   WK,   ,      BT+127
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           SEXPR                                     ;! UPPER BOUND EXPR FOR 2ND DIM
         BAL   WK,   ,      BT+120

;           DUMP(M'LDA',M'ACC',M'ACC',1)
         LOAD  ACC,  ,      CT+228
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+229
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+230
         STR   ACC,  STP,  12
         LDA   ACC,  ,     1
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(M'MLT',M'ACC',BR(LEVEL),WS-2)
         LOAD  ACC,  ,      CT+231
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+232
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  19
         SUB   ACC,  ,      CT+233
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(M'STR',M'ACC',BR(LEVEL),WS NEXT)
         LOAD  ACC,  ,      CT+234
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+235
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         BAL   WK,   ,      BT+127
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           WS=WS-4                                   ;! RESTORE WORKSPACE POINTER
         LOAD  ACC,  BR2,  19
         SUB   ACC,  ,      CT+236
         STR   ACC,  BR2,  19

;           I=2                                       ;! NO OF DIMS
         LDA   ACC,  ,     2
         STR   ACC,  BR2,  10

;           %FINISH %ELSE %START                      ;! 1-DIM ARRAYS
         B     ,     ,      BT+165

;           DUMP(M'STR',M'ACC',BR(LEVEL),WS NEXT)
         LOAD  ACC,  ,      CT+237
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+238
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         BAL   WK,   ,      BT+127
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           WS=WS-2                                   ;! RESTORE WORKSPACE POINTER
         LOAD  ACC,  BR2,  19
         SUB   ACC,  ,      CT+239
         STR   ACC,  BR2,  19

;           I=1                                       ;! NO OF DIMS
         LDA   ACC,  ,     1
         STR   ACC,  BR2,  10

;           %FINISH

;        J=2                                          ;! TAG FOR 'ARRAY'
         LDA   ACC,  ,     2
         STR   ACC,  BR2,  11

;        AP=APP                                       ;! RESTORE AP TO BEFORE LIST OF NAMES
         LOAD  ACC,  BR1,  11
         STR   ACC,  BR1,  10

;        %FINISH %ELSE %START                         ;! SCALAR DECLARATIONS
         B     ,     ,      BT+166

;        I=0                                          ;! DIMS=0 FOR SCALARS
         LDA   ACC,  ,     0
         STR   ACC,  BR2,  10

;        J=0                                          ;! TAG FOR SCALAR
         LDA   ACC,  ,     0
         STR   ACC,  BR2,  11

;        %FINISH

;52:  STORE TAG(A(AP+1),J,1,I,LEVEL,RAD(LEVEL))       ;! PUSHDOWN TAG FOR THIS NAME
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+240
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         LOAD  ACC,  BR2,  11
         STR   ACC,  STP,  11
         LDA   ACC,  ,     1
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  10
         STR   ACC,  STP,  13
         LOAD  ACC,  BR1,  19
         STR   ACC,  STP,  14
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  55
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  15
         BAL   WK,   ,      BT+128

;     %IF I=0 %THEN RAD(LEVEL)=RAD(LEVEL)+1 %ELSE %START;! ONE RELATIVE LOCATION FOR SCALARS
         LOAD  ACC,  BR2,  10
         BNZ   ACC,  ,      BT+168
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  55
         LOAD  ACC,  ACC,  0
         ADD   ACC,  ,      CT+241
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  55
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0
         B     ,     ,      BT+169

;        %IF I=1 %THEN %START                         ;! 1-DIM ARRAYS
         LOAD  ACC,  BR2,  10
         SUB   ACC,  ,      CT+242
         BNZ   ACC,  ,      BT+170

;           DUMP(M'SUB',M'STP',BR(LEVEL),WS)
         LOAD  ACC,  ,      CT+243
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+244
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  19
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(M'STR',M'STP',BR(LEVEL),RAD(LEVEL))
         LOAD  ACC,  ,      CT+245
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+246
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  55
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(M'ADD',M'STP',BR(LEVEL),WS+1)
         LOAD  ACC,  ,      CT+247
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+248
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  19
         ADD   ACC,  ,      CT+249
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           %FINISH %ELSE %START                      ;! 2-DIM ARRAYS
         B     ,     ,      BT+171

;           DUMP(M'LOAD',M'ACC',BR(LEVEL),WS+1)
         LOAD  ACC,  ,      CT+250
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+251
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  19
         ADD   ACC,  ,      CT+252
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(M'STR',M'ACC',BR(LEVEL),RAD(LEVEL))
         LOAD  ACC,  ,      CT+253
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+254
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  55
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(M'SUB',M'STP',BR(LEVEL),WS+2)
         LOAD  ACC,  ,      CT+255
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+256
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  19
         ADD   ACC,  ,      CT+257
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(M'LDA',M'ACC',M'STP',0)
         LOAD  ACC,  ,      CT+258
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+259
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+260
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(M'SUB',M'ACC',BR(LEVEL),WS)
         LOAD  ACC,  ,      CT+261
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+262
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  19
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(M'STR',M'ACC',BR(LEVEL),RAD(LEVEL)+1)
         LOAD  ACC,  ,      CT+263
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+264
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  55
         LOAD  ACC,  ACC,  0
         ADD   ACC,  ,      CT+265
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(M'ADD',M'STP',BR(LEVEL),WS+3)
         LOAD  ACC,  ,      CT+266
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+267
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  19
         ADD   ACC,  ,      CT+268
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           %FINISH

;        RAD(LEVEL)=RAD(LEVEL)+2                      ;! 2 RELATIVE LOCATIONS FOR ARRAYS
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  55
         LOAD  ACC,  ACC,  0
         ADD   ACC,  ,      CT+269
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  55
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;        %FINISH

;     AP=AP+2                                         ;! AP ON <NAMS>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+270
         STR   ACC,  BR1,  10

;     %IF A(AP)=1 %THEN ->52                          ;! MORE NAMES IN LIST OF NAMES
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+271
         BZ    ACC,  ,      BT+167

;     %RETURN
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! RT SPEC? . . .

;60:  I=A(AP)-1                                          ;! ROUTINE/FN
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+272
         STR   ACC,  BR2,  10

;     J=A(AP+1)                                          ;! SPEC ?
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+273
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  11

;     K=A(AP+2)                                          ;! NAME OF ROUTIINE OR FN
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+274
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  12

;     AP=AP+3                                            ;! AP ON <FPP>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+275
         STR   ACC,  BR1,  10

;     L=0                                                ;! PARAMETER COUNT
         LDA   ACC,  ,     0
         STR   ACC,  BR2,  13

;     M=10                                               ;! FIRST RELATIVE ADDRESS TO BE ALLOCATED
         LDA   ACC,  ,     10
         STR   ACC,  BR2,  14

;63:  %IF A(AP)=1 %THEN %START                           ;! PARAMETERS PRESENT
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+276
         BNZ   ACC,  ,      BT+173

;        AP=AP+1                                         ;! AP ON <ARRN>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+277
         STR   ACC,  BR1,  10

;        %IF A(AP)=1 %THEN N=3 %ELSE N=3-A(AP)           ;! SET TAG FOR PARAMETER FORM
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+278
         BNZ   ACC,  ,      BT+174
         LDA   ACC,  ,     3
         STR   ACC,  BR2,  15
         B     ,     ,      BT+175
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  2
         LDA   ACC,  ,     3
         SUB   ACC,  BR2,  2
         STR   ACC,  BR2,  15

;        P=N<<28!1<<24!(LEVEL+1)<<16                     ;! SET UP PATTERN FOR WHOLE TAG
         LOAD  ACC,  BR1,  19
         ADD   ACC,  ,      CT+279
         SHL   ACC,  ,      CT+280
         STR   ACC,  BR2,  2
         LDA   ACC,  ,     1
         SHL   ACC,  ,      CT+281
         STR   ACC,  BR2,  3
         LOAD  ACC,  BR2,  15
         SHL   ACC,  ,      CT+282
         OR    ACC,  BR2,  3
         OR    ACC,  BR2,  2
         STR   ACC,  BR2,  16

;62:     L=L+1                                           ;! PARAMETER COUNT
         LOAD  ACC,  BR2,  13
         ADD   ACC,  ,      CT+283
         STR   ACC,  BR2,  13

;        %IF L>15 %THEN %START
         LOAD  ACC,  BR2,  13
         SUB   ACC,  ,      CT+284
         BNG   ACC,  ,      BT+177

;           FAULT(M'TOO ',M'MANY',M' PAR',M'AMS ')
         LOAD  ACC,  ,      CT+285
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+286
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+287
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+288
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;           ->61 ; %FINISH                               ;! IGNORE SUPERFLUOUS PARAMS
         B     ,     ,      BT+178

;        PT(L)=P!M                                       ;! STORE TAG FOR THIS PARAM
         LOAD  ACC,  BR2,  16
         OR    ACC,  BR2,  14
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  13
         ADD   ACC,  BR1,  67
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;        PN(L)=A(AP+1)                                   ;! STORE THE NAMES IDENT. NO
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+289
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  13
         ADD   ACC,  BR1,  69
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;        %IF N=3 %THEN M=M+2 %ELSE M=M+1                 ;! NEXT RELATIVE ADDRESS
         LOAD  ACC,  BR2,  15
         SUB   ACC,  ,      CT+290
         BNZ   ACC,  ,      BT+179
         LOAD  ACC,  BR2,  14
         ADD   ACC,  ,      CT+291
         STR   ACC,  BR2,  14
         B     ,     ,      BT+180
         LOAD  ACC,  BR2,  14
         ADD   ACC,  ,      CT+292
         STR   ACC,  BR2,  14

;        AP=AP+2                                         ;! AP ON <NAMS>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+293
         STR   ACC,  BR1,  10

;        %IF A(AP)=1 %THEN ->62                          ;! MORE NAMES IN LIST
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+294
         BZ    ACC,  ,      BT+176

;        AP=AP+1                                         ;! AP ON <FPS>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+295
         STR   ACC,  BR1,  10

;        ->63 ; %FINISH
         B     ,     ,      BT+172

;61:  N=LINK(K)                                          ;! LINK TO TAG FOR NAME OF ROUTINE OR FN
         LOAD  ACC,  BR2,  12
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  15

;     %IF N=0 %OR TAG(N)>>16&15<LEVEL %THEN %START       ;! NAME NOT SET OR SET AT LOWER LEVEL
         LOAD  ACC,  BR2,  15
         BZ    ACC,  ,      BT+181
         LOAD  ACC,  BR2,  15
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         SHR   ACC,  ,      CT+296
         AND   ACC,  ,      CT+297
         SUB   ACC,  BR1,  19
         BNL   ACC,  ,      BT+182

;        %IF L>0 %THEN %START                            ;! PARAMETERS PRESENT
         LOAD  ACC,  BR2,  13
         BNG   ACC,  ,      BT+183

;           P=1                                          ;! PARAMETER COUNT
         LDA   ACC,  ,     1
         STR   ACC,  BR2,  16

;           Q=K                                          ;! 'INSERT AFTER' POINTER
         LOAD  ACC,  BR2,  12
         STR   ACC,  BR2,  17

;64:        R=NEWCELL                                    ;! PUSHDOWN TAG FOR PARAMETER
         BAL   WK,   ,      BT+17
         STR   ACC,  BR2,  18

;           TAG(R)=PT(P)
         LOAD  ACC,  BR2,  16
         ADD   ACC,  BR1,  67
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  18
         ADD   ACC,  BR1,  25
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;           LINK(R)=LINK(Q)
         LOAD  ACC,  BR2,  17
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  18
         ADD   ACC,  BR1,  27
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;           PTC(P)=R                                     ;! SAVE POINTER TO TAG CELL
         LOAD  ACC,  BR2,  18
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  16
         ADD   ACC,  BR1,  71
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;           LINK(Q)=R
         LOAD  ACC,  BR2,  18
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  17
         ADD   ACC,  BR1,  27
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;           Q=R                                          ;! NEW VALUE FOR 'INSERT AFTER' POINTER
         LOAD  ACC,  BR2,  18
         STR   ACC,  BR2,  17

;           P=P+1                                        ;! PARAMETER COUNT
         LOAD  ACC,  BR2,  16
         ADD   ACC,  ,      CT+298
         STR   ACC,  BR2,  16

;           %IF P<=L %THEN ->64                          ;! MORE PARAMETERS YET
         LOAD  ACC,  BR2,  16
         SUB   ACC,  BR2,  13
         BNG   ACC,  ,      BT+184

;           %FINISH

;        STORE TAG(K,4,I,L,LEVEL,BT NEXT)                ;! PUSHDOWN TAG FOR NAME OF ROUTINE OR FN
         LOAD  ACC,  BR2,  12
         STR   ACC,  STP,  10
         LDA   ACC,  ,     4
         STR   ACC,  STP,  11
         LOAD  ACC,  BR2,  10
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  13
         STR   ACC,  STP,  13
         LOAD  ACC,  BR1,  19
         STR   ACC,  STP,  14
         BAL   WK,   ,      BT+125
         STR   ACC,  STP,  15
         BAL   WK,   ,      BT+128

;        %IF LEVEL=0 %THEN BAT(BTN-1)=K+65536            ;! FLAG FOR EXTERNAL SPECS
         LOAD  ACC,  BR1,  19
         BNZ   ACC,  ,      BT+185
         LOAD  ACC,  BR2,  12
         ADD   ACC,  ,      CT+299
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR1,  15
         SUB   ACC,  ,      CT+300
         ADD   ACC,  BR1,  33
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;        %FINISH %ELSE %START                            ;! NAME ALREADY SET AT THIS LEVEL
         B     ,     ,      BT+186

;        %IF J=2 %AND TAG(N)>>28=4 %THEN %START          ;! STATEMENT NOT A SPEC & FORM OF NAME IS RT
         LOAD  ACC,  BR2,  11
         SUB   ACC,  ,      CT+301
         BNZ   ACC,  ,      BT+187
         LOAD  ACC,  BR2,  15
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         SHR   ACC,  ,      CT+302
         SUB   ACC,  ,      CT+303
         BNZ   ACC,  ,      BT+187

;           %IF TAG(N)>>24&15\=I %THEN %START
         LOAD  ACC,  BR2,  15
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         SHR   ACC,  ,      CT+304
         AND   ACC,  ,      CT+305
         SUB   ACC,  BR2,  10
         BZ    ACC,  ,      BT+188

;              PRINT NAME(K)
         LOAD  ACC,  BR2,  12
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;              FAULT(M'RT N',M'OT A',M'S SP',M'EC  ')
         LOAD  ACC,  ,      CT+306
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+307
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+308
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+309
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;              %FINISH

;           %IF BAT(TAG(N)&65535)>=0 %THEN %START
         LOAD  ACC,  BR2,  15
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         AND   ACC,  ,      CT+310
         ADD   ACC,  BR1,  33
         LOAD  ACC,  ACC,  0
         BL    ACC,  ,      BT+189

;              PRINT NAME(K)
         LOAD  ACC,  BR2,  12
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;              FAULT(M'RT A',M'PPEA',M'RS T',M'WICE')
         LOAD  ACC,  ,      CT+311
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+312
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+313
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+314
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;              %FINISH

;           P=TAG(N)>>20&15                              ;! NO OF PARAMS IN SPEC
         LOAD  ACC,  BR2,  15
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         SHR   ACC,  ,      CT+315
         AND   ACC,  ,      CT+316
         STR   ACC,  BR2,  16

;           %IF L\=P %THEN %START
         LOAD  ACC,  BR2,  13
         SUB   ACC,  BR2,  16
         BZ    ACC,  ,      BT+190

;              FAULT(M'PARS',M' NOT',M' AS ',M'SPEC')
         LOAD  ACC,  ,      CT+317
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+318
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+319
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+320
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;              %IF L>P %THEN L=P                         ;! IGNORE SUPERFLUOUS PARAMS
         LOAD  ACC,  BR2,  13
         SUB   ACC,  BR2,  16
         BNG   ACC,  ,      BT+191
         LOAD  ACC,  BR2,  16
         STR   ACC,  BR2,  13

;              %FINISH

;           %IF L>0 %THEN %START                         ;! PARAMS PRESENT
         LOAD  ACC,  BR2,  13
         BNG   ACC,  ,      BT+192

;              P=1                                       ;! PARAM COUNT
         LDA   ACC,  ,     1
         STR   ACC,  BR2,  16

;              Q=LINK(N)                                 ;! LINK TO TAG OF FIRST PARAM
         LOAD  ACC,  BR2,  15
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  17

;67:           %IF PT(P)!TAG(Q)&15<<20\=TAG(Q) %THEN %START
         LOAD  ACC,  BR2,  17
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  2
         LDA   ACC,  ,     15
         SHL   ACC,  ,      CT+321
         STR   ACC,  BR2,  3
         LOAD  ACC,  BR2,  17
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         AND   ACC,  BR2,  3
         STR   ACC,  BR2,  3
         LOAD  ACC,  BR2,  16
         ADD   ACC,  BR1,  67
         LOAD  ACC,  ACC,  0
         OR    ACC,  BR2,  3
         SUB   ACC,  BR2,  2
         BZ    ACC,  ,      BT+194

;                 PRINT NAME(PN(P))
         LOAD  ACC,  BR2,  16
         ADD   ACC,  BR1,  69
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;                 FAULT(M'PAR ',M'NOT ',M'AS S',M'PEC ')
         LOAD  ACC,  ,      CT+322
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+323
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+324
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+325
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;                 %FINISH

;              PTC(P)=Q                                  ;! SAVE POINTER TO TAG CELL
         LOAD  ACC,  BR2,  17
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  16
         ADD   ACC,  BR1,  71
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;              P=P+1                                     ;! PARAM COUNT
         LOAD  ACC,  BR2,  16
         ADD   ACC,  ,      CT+326
         STR   ACC,  BR2,  16

;              Q=LINK(Q)                                 ;! NEXT TAG CELL
         LOAD  ACC,  BR2,  17
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  17

;              %IF P<=L %THEN ->67                       ;! MORE PARAMS
         LOAD  ACC,  BR2,  16
         SUB   ACC,  BR2,  13
         BNG   ACC,  ,      BT+193

;              %FINISH

;           %FINISH %ELSE %START
         B     ,     ,      BT+195

;           PRINT NAME(K)
         LOAD  ACC,  BR2,  12
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;           FAULT(M'NAME',M' SET',M' TWI',M'CE  ')
         LOAD  ACC,  ,      CT+327
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+328
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+329
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+330
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;           %FINISH

;        %FINISH

;68:  %IF J=2 %THEN %START                               ;! STATEMENT NOT A SPEC
         LOAD  ACC,  BR2,  11
         SUB   ACC,  ,      CT+331
         BNZ   ACC,  ,      BT+197

;        BRT(LEVEL)=BT NEXT                              ;! BRANCH ROUND ROUTINE OR FN
         BAL   WK,   ,      BT+125
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  43
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;        DUMP('B',0,M'BT',BRT(LEVEL))
         LDA   ACC,  ,     66
         STR   ACC,  STP,  10
         LDA   ACC,  ,     0
         STR   ACC,  STP,  11
         LDA   ACC,  ,     16980
         STR   ACC,  STP,  12
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  43
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        BAT(TAG(LINK(K))&65535)=CA                      ;! FILL IN ADDRESS OF THIS ROUTINE OR FN
         LOAD  ACC,  BR1,  20
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR2,  12
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         AND   ACC,  ,      CT+332
         ADD   ACC,  BR1,  33
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;        %IF LEVEL=15 %THEN FAULT(M'TOO ',M'MANY',M' LEV',M'ELS ') %C
;                              %ELSE LEVEL=LEVEL+1       ;! NEXT TEXTUAL LEVEL
         LOAD  ACC,  BR1,  19
         SUB   ACC,  ,      CT+333
         BNZ   ACC,  ,      BT+198
         LOAD  ACC,  ,      CT+334
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+335
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+336
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+337
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15
         B     ,     ,      BT+199
         LOAD  ACC,  BR1,  19
         ADD   ACC,  ,      CT+338
         STR   ACC,  BR1,  19

;        ENTER(I,M)
         LOAD  ACC,  BR2,  10
         STR   ACC,  STP,  10
         LOAD  ACC,  BR2,  14
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+134

;        %IF L>0 %THEN %START                            ;! PARAMS PRESENT
         LOAD  ACC,  BR2,  13
         BNG   ACC,  ,      BT+200

;           P=1                                          ;! PARAM COUNT
         LDA   ACC,  ,     1
         STR   ACC,  BR2,  16

;69:        I=PT(P)                                      ;! PUSHDOWN TAGS FOR PARAMS
         LOAD  ACC,  BR2,  16
         ADD   ACC,  BR1,  67
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  10

;           %IF I>>28=3 %THEN STORE TAG(PN(P),3,1,0,LEVEL,PTC(P)) %C
;              %ELSE STORE TAG(PN(P),I>>28,1,0,LEVEL,I&65535) ;! TREAT ARRAYNAMES SPECIALLY
         LOAD  ACC,  BR2,  10
         SHR   ACC,  ,      CT+339
         SUB   ACC,  ,      CT+340
         BNZ   ACC,  ,      BT+202
         LOAD  ACC,  BR2,  16
         ADD   ACC,  BR1,  69
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         LDA   ACC,  ,     3
         STR   ACC,  STP,  11
         LDA   ACC,  ,     1
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         LOAD  ACC,  BR1,  19
         STR   ACC,  STP,  14
         LOAD  ACC,  BR2,  16
         ADD   ACC,  BR1,  71
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  15
         BAL   WK,   ,      BT+128
         B     ,     ,      BT+203
         LOAD  ACC,  BR2,  16
         ADD   ACC,  BR1,  69
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         LOAD  ACC,  BR2,  10
         SHR   ACC,  ,      CT+341
         STR   ACC,  STP,  11
         LDA   ACC,  ,     1
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         LOAD  ACC,  BR1,  19
         STR   ACC,  STP,  14
         LOAD  ACC,  BR2,  10
         AND   ACC,  ,      CT+342
         STR   ACC,  STP,  15
         BAL   WK,   ,      BT+128

;           P=P+1
         LOAD  ACC,  BR2,  16
         ADD   ACC,  ,      CT+343
         STR   ACC,  BR2,  16

;           %IF P<=L %THEN ->69                          ;! MORE PARAMS YET
         LOAD  ACC,  BR2,  16
         SUB   ACC,  BR2,  13
         BNG   ACC,  ,      BT+201

;           %FINISH

;        %FINISH

;     %RETURN
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! %END

;70:  CHECK                                       ;! CHECK LABELS & START/FINISH BLOCKS
         BAL   WK,   ,      BT+122

;     COT(STAR(LEVEL))=RAD(LEVEL)                 ;! STORE STATIC ALLOCATION FOR THIS LEVEL
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  55
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  41
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR1,  35
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;     UNSET                                       ;! UNSET NAMES DECLARED AT THIS LEVEL
         BAL   WK,   ,      BT+123

;     CHP=CHPP(LEVEL)
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  51
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR1,  17

;     %IF RTP(LEVEL)\=0 %THEN DUMP(M'STOP',0,0,0) ;! %STOP FOR FNS
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  47
         LOAD  ACC,  ACC,  0
         BZ    ACC,  ,      BT+204
         LOAD  ACC,  ,      CT+344
         STR   ACC,  STP,  10
         LDA   ACC,  ,     0
         STR   ACC,  STP,  11
         LDA   ACC,  ,     0
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     RETURN                                      ;! DUMP %RETURN CODE
         BAL   WK,   ,      BT+135

;     LEVEL=LEVEL-1                               ;! DECREMENT TEXTUAL LEVEL COUNT
         LOAD  ACC,  BR1,  19
         SUB   ACC,  ,      CT+345
         STR   ACC,  BR1,  19

;     %IF LEVEL<1 %THEN %START                    ;! NOT BACK AT OUTER LEVEL YET
         LOAD  ACC,  BR1,  19
         SUB   ACC,  ,      CT+346
         BNL   ACC,  ,      BT+205

;        FAULT(M'EXCE',M'SS %',M'END ',M'    ')
         LOAD  ACC,  ,      CT+347
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+348
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+349
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+350
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        ->71 ; %FINISH                           ;! TREAT AS %ENDOFPROGRAM
         B     ,     ,      BT+206

;     BAT(BRT(LEVEL))=CA                          ;! FILL ADDR FOR BRANCH ROUND ROUTINE/FN
         LOAD  ACC,  BR1,  20
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  43
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR1,  33
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;     %RETURN
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! %BEGIN

;80:  %IF LEVEL\=0 %THEN %START
         LOAD  ACC,  BR1,  19
         BZ    ACC,  ,      BT+207

;        FAULT(M'%BEG',M'IN E',M'XTRA',M'    ')   ;! NO INTERNAL BLOCKS ALLOWED
         LOAD  ACC,  ,      CT+351
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+352
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+353
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+354
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        %RETURN ; %FINISH
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     %IF CA\=0 %OR RAD(0)\=10 %THEN %START
         LOAD  ACC,  BR1,  20
         BNZ   ACC,  ,      BT+208
         LDA   ACC,  ,     0
         ADD   ACC,  BR1,  55
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+355
         BZ    ACC,  ,      BT+209

;        FAULT(M'%BEG',M'IN N',M'OT F',M'IRST')
         LOAD  ACC,  ,      CT+356
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+357
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+358
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+359
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        %RETURN ; %FINISH
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     LEVEL=1                                ;! TEXTUAL LEVEL COUNT TO 1
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  19

;     ENTER(-1,10)
         LDA   ACC,  ,     1
         NEG   ACC,  ,     0
         STR   ACC,  STP,  10
         LDA   ACC,  ,     10
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+134

;     %RETURN
         LDA   STP,  BR2,  0
         LOAD  BR2,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! %ENDOFPROGRAM

;90:  CHECK                                  ;! CHECK LABELS & START/FINISHES
         BAL   WK,   ,      BT+122

;     COT(STAR(LEVEL))=RAD(LEVEL)            ;! FILL IN STATIC ALLOCATION FOR OUTER BLOCK
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  55
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  41
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR1,  35
         LOAD  WK,   BR2,  2
         STR   WK,   ACC,  0

;     UNSET                                  ;! UNSET NAMES DECLARED AT THIS LEVEL
         BAL   WK,   ,      BT+123

;     %IF LEVEL\=1 %THEN FAULT(M'TOO ',M'FEW ',M'%END',M'S   ')
         LOAD  ACC,  BR1,  19
         SUB   ACC,  ,      CT+360
         BZ    ACC,  ,      BT+210
         LOAD  ACC,  ,      CT+361
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+362
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+363
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+364
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;71:  DUMP(M'STOP',0,0,0)                    ;! %STOP
         LOAD  ACC,  ,      CT+365
         STR   ACC,  STP,  10
         LDA   ACC,  ,     0
         STR   ACC,  STP,  11
         LDA   ACC,  ,     0
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     PRINT SYMBOL('B')                      ;! PRINT OUT BRANCH TABLE
         LDA   ACC,  ,     66
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     PRINT SYMBOL('T')
         LDA   ACC,  ,     84
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     PRINT SYMBOL(':')
         LDA   ACC,  ,     58
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     NEWLINE
         BAL   WK,   ,      BT+8

;     CA=0
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  20

;93:  %IF CA\=BTN %THEN %START
         LOAD  ACC,  BR1,  20
         SUB   ACC,  BR1,  15
         BZ    ACC,  ,      BT+212

;        DUMP('B',0,M'PRG',BAT(CA))          ;! BRANCH RELATIVE TO START OF PROGRAM
         LDA   ACC,  ,     66
         STR   ACC,  STP,  10
         LDA   ACC,  ,     0
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+366
         STR   ACC,  STP,  12
         LOAD  ACC,  BR1,  20
         ADD   ACC,  BR1,  33
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        ->93 ; %FINISH
         B     ,     ,      BT+211

;     PRINT SYMBOL('C')                      ;! PRINT OUT CONSTANT TABLE
         LDA   ACC,  ,     67
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     PRINT SYMBOL('T')
         LDA   ACC,  ,     84
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     PRINT SYMBOL(':')
         LDA   ACC,  ,     58
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     NEWLINE
         BAL   WK,   ,      BT+8

;     I=0
         LDA   ACC,  ,     0
         STR   ACC,  BR2,  10

;91:  %IF I\=CTN %THEN %START
         LOAD  ACC,  BR2,  10
         SUB   ACC,  BR1,  16
         BZ    ACC,  ,      BT+214

;        WRITE(COT(I),10)
         LOAD  ACC,  BR2,  10
         ADD   ACC,  BR1,  35
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         LDA   ACC,  ,     10
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+5

;        NEWLINE
         BAL   WK,   ,      BT+8

;        I=I+1
         LOAD  ACC,  BR2,  10
         ADD   ACC,  ,      CT+367
         STR   ACC,  BR2,  10

;        ->91 ; %FINISH
         B     ,     ,      BT+213

;     PRINT SYMBOL(';')
         LDA   ACC,  ,     59
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     WRITE(FAULTS,1)                        ;! NUMBER OF PROGRAM FAULTS
         LOAD  ACC,  BR1,  18
         STR   ACC,  STP,  10
         LDA   ACC,  ,     1
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+5

;     FAULT(M' FAU',M'LTS ',M'IN P',M'ROGM')
         LOAD  ACC,  ,      CT+368
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+369
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+370
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+371
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;     %STOP
         STOP  ,     ,     0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE UI
         B     ,     ,      BT+215
         STR   BR3,  STP,  0
         LDA   BR3,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+372

;! COMPILE UNCONDITIONAL INSTRUCTION

;%INTEGER I,J,K,L

;     I=A(AP)                            ;! NEXT ANALYSIS RECORD ENTRY
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  10

;     AP=AP+1
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+373
         STR   ACC,  BR1,  10

;     %IF I=1 %THEN ->10                 ;! ROUTINE CALL OR ASSIGNMENT STATEMENT
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+374
         BZ    ACC,  ,      BT+216

;     %IF I=2 %THEN ->20                 ;! JUMP INSTRUCTION
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+375
         BZ    ACC,  ,      BT+217

;     %IF I=3 %THEN ->30                 ;! %START
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+376
         BZ    ACC,  ,      BT+218

;     %IF I=4 %THEN ->40                 ;! %RETURN
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+377
         BZ    ACC,  ,      BT+219

;     %IF I=5 %THEN ->50                 ;! %RESULT=
         LOAD  ACC,  BR3,  10
         SUB   ACC,  ,      CT+378
         BZ    ACC,  ,      BT+220

;     DUMP(M'STOP',0,0,0)                ;! %STOP
         LOAD  ACC,  ,      CT+379
         STR   ACC,  STP,  10
         LDA   ACC,  ,     0
         STR   ACC,  STP,  11
         LDA   ACC,  ,     0
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     %RETURN
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! NAME APP ASS

;10:  I=LINK(A(AP))                             ;! POINTER TO NAME TAGS
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  10

;     %IF I=0 %THEN %START
         LOAD  ACC,  BR3,  10
         BNZ   ACC,  ,      BT+221

;        PRINT NAME(A(AP))
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;        FAULT(M'NAME',M' NOT',M' SET',0)
         LOAD  ACC,  ,      CT+380
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+381
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+382
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        %FINISH %ELSE I=TAG(I)                ;! NAME TAGS OR ZERO TO AVOID DIAGNOSTICS
         B     ,     ,      BT+222
         LOAD  ACC,  BR3,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  10

;     J=AP                                      ;! PRESERVE ANALYSIS RECORD POINTER
         LOAD  ACC,  BR1,  10
         STR   ACC,  BR3,  11

;     AP=AP+1                                   ;! AP ON <APP>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+383
         STR   ACC,  BR1,  10

;     SKIP APP                                  ;! SKIP TO <ASS>
         BAL   WK,   ,      BT+131

;     %IF A(AP)=2 %THEN %START                  ;! ROUTINE CALL
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+384
         BNZ   ACC,  ,      BT+223

;        %IF I>>24=64 %THEN %START              ;! 'FORM/TYPE' IS ROUTINE
         LOAD  ACC,  BR3,  10
         SHR   ACC,  ,      CT+385
         SUB   ACC,  ,      CT+386
         BNZ   ACC,  ,      BT+224

;           AP=J                                ;! RESTORE AP TO <NAME>
         LOAD  ACC,  BR3,  11
         STR   ACC,  BR1,  10

;           RT                                  ;! CALL ROUTINE
         BAL   WK,   ,      BT+132

;           %FINISH %ELSE %START
         B     ,     ,      BT+225

;           %IF I\=0 %THEN %START
         LOAD  ACC,  BR3,  10
         BZ    ACC,  ,      BT+226

;              PRINT NAME(A(J))
         LOAD  ACC,  BR3,  11
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;              FAULT(M'NOT ',M'ROUT',M'INE ',M'NAME')
         LOAD  ACC,  ,      CT+387
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+388
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+389
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+390
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;              %FINISH

;           %FINISH

;        AP=AP+1                                ;! AP AFTER <UI>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+391
         STR   ACC,  BR1,  10

;        %RETURN ; %FINISH
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     K=I>>28                                   ;! 'FORM' OF NAME
         LOAD  ACC,  BR3,  10
         SHR   ACC,  ,      CT+392
         STR   ACC,  BR3,  12

;     %IF K=4 %THEN %START
         LOAD  ACC,  BR3,  12
         SUB   ACC,  ,      CT+393
         BNZ   ACC,  ,      BT+227

;        PRINT NAME(A(J))
         LOAD  ACC,  BR3,  11
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;        FAULT(M'NAME',M' NOT',M' A D',M'ESTN') ;! ROUTINE/FN FORM
         LOAD  ACC,  ,      CT+394
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+395
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+396
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+397
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        I=0                                    ;! CLEAR TAGS TO AVOID FURTHER DIAGNOSTIC
         LDA   ACC,  ,     0
         STR   ACC,  BR3,  10

;        %FINISH

;     AP=AP+1                                   ;! AP ON <+-\>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+398
         STR   ACC,  BR1,  10

;     SEXPR
         BAL   WK,   ,      BT+120

;     %IF I=0 %THEN %RETURN                     ;! LHS NAME NOT SET
         LOAD  ACC,  BR3,  10
         BNZ   ACC,  ,      BT+228
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     %IF K>=2 %THEN %START                     ;! LHS AN ARRAY TYPE
         LOAD  ACC,  BR3,  12
         SUB   ACC,  ,      CT+399
         BL    ACC,  ,      BT+229

;        DUMP(M'STR',M'ACC',BR(LEVEL),WS NEXT)  ;! PRESERVE ACCUMMULATOR
         LOAD  ACC,  ,      CT+400
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+401
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         BAL   WK,   ,      BT+127
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        K=AP                                   ;! PRESERVE AP
         LOAD  ACC,  BR1,  10
         STR   ACC,  BR3,  12

;        AP=J                                    ;! RESTORE INITIALANAL REC POINTER
         LOAD  ACC,  BR3,  11
         STR   ACC,  BR1,  10

;        ARRAD                                  ;! CALCULATE ARRAY ELEMENT ADDRESS
         BAL   WK,   ,      BT+133

;        WS=WS-1                                ;! RESTORE WORKSPACE POINTER
         LOAD  ACC,  BR2,  19
         SUB   ACC,  ,      CT+402
         STR   ACC,  BR2,  19

;        DUMP(M'LOAD',M'WK',BR(LEVEL),WS)       ;! RESTORE ACCUMMULATOR
         LOAD  ACC,  ,      CT+403
         STR   ACC,  STP,  10
         LDA   ACC,  ,     22347
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  19
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        DUMP(M'STR',M'WK',M'ACC',0)            ;! DUMP ASSIGNMENT
         LOAD  ACC,  ,      CT+404
         STR   ACC,  STP,  10
         LDA   ACC,  ,     22347
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+405
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        AP=K                                   ;! RESTORE AP TO AFTER <UI>
         LOAD  ACC,  BR3,  12
         STR   ACC,  BR1,  10

;        %RETURN ; %FINISH
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     %IF K=1 %THEN %START
         LOAD  ACC,  BR3,  12
         SUB   ACC,  ,      CT+406
         BNZ   ACC,  ,      BT+230

;        DUMP(M'LOAD',M'WK',BR(I>>16&15),I&65535);! INDIRECT ASSIGMENT
         LOAD  ACC,  ,      CT+407
         STR   ACC,  STP,  10
         LDA   ACC,  ,     22347
         STR   ACC,  STP,  11
         LOAD  ACC,  BR3,  10
         SHR   ACC,  ,      CT+408
         AND   ACC,  ,      CT+409
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR3,  10
         AND   ACC,  ,      CT+410
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        DUMP(M'STR',M'ACC',M'WK',0)
         LOAD  ACC,  ,      CT+411
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+412
         STR   ACC,  STP,  11
         LDA   ACC,  ,     22347
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        %FINISH %ELSE DUMP(M'STR',M'ACC',BR(I>>16&15),I&65535)
         B     ,     ,      BT+231
         LOAD  ACC,  ,      CT+413
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+414
         STR   ACC,  STP,  11
         LOAD  ACC,  BR3,  10
         SHR   ACC,  ,      CT+415
         AND   ACC,  ,      CT+416
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR3,  10
         AND   ACC,  ,      CT+417
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     %IF A(J+1)=1 %THEN %START
         LOAD  ACC,  BR3,  11
         ADD   ACC,  ,      CT+418
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+419
         BNZ   ACC,  ,      BT+232

;        PRINT NAME(A(J))
         LOAD  ACC,  BR3,  11
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;        FAULT(M'SCAL',M'AR H',M'AS P',M'ARAM')
         LOAD  ACC,  ,      CT+420
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+421
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+422
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+423
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        %FINISH

;     %RETURN
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! -> CONST

;     PRINT SYMBOL('B')                      ;! PRINT OUT BRANCH TABLE
         LDA   ACC,  ,     66
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     PRINT SYMBOL('T')
         LDA   ACC,  ,     84
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     PRINT SYMBOL(':')
         LDA   ACC,  ,     58
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     NEWLINE
         BAL   WK,   ,      BT+8

;     CA=0
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  20

;93:  %IF CA\=BTN %THEN %START
         LOAD  ACC,  BR1,  20
         SUB   ACC,  BR1,  15
         BZ    ACC,  ,      BT+234

;        DUMP('B',0,M'PRG',BAT(CA))          ;! BRANCH RELATIVE TO START OF PROGRAM
         LDA   ACC,  ,     66
         STR   ACC,  STP,  10
         LDA   ACC,  ,     0
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+424
         STR   ACC,  STP,  12
         LOAD  ACC,  BR1,  20
         ADD   ACC,  BR1,  33
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        ->93 ; %FINISH
         B     ,     ,      BT+233

;     PRINT SYMBOL('C')                      ;! PRINT OUT CONSTANT TABLE
         LDA   ACC,  ,     67
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     PRINT SYMBOL('T')
         LDA   ACC,  ,     84
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     PRINT SYMBOL(':')
         LDA   ACC,  ,     58
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     NEWLINE
         BAL   WK,   ,      BT+8

;     I=0
         LDA   ACC,  ,     0
         STR   ACC,  BR3,  10

;91:  %IF I\=CTN %THEN %START
         LOAD  ACC,  BR3,  10
         SUB   ACC,  BR1,  16
         BZ    ACC,  ,      BT+236

;        WRITE(COT(I),10)
         LOAD  ACC,  BR3,  10
         ADD   ACC,  BR1,  35
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         LDA   ACC,  ,     10
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+5

;        NEWLINE
         BAL   WK,   ,      BT+8

;        I=I+1
         LOAD  ACC,  BR3,  10
         ADD   ACC,  ,      CT+425
         STR   ACC,  BR3,  10

;        ->91 ; %FINISH
         B     ,     ,      BT+235

;     PRINT SYMBOL(';')
         LDA   ACC,  ,     59
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     WRITE(FAULTS,1)                        ;! NUMBER OF PROGRAM FAULTS
         LOAD  ACC,  BR1,  18
         STR   ACC,  STP,  10
         LDA   ACC,  ,     1
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+5

;     FAULT(M' FAU',M'LTS ',M'IN P',M'ROGM')
         LOAD  ACC,  ,      CT+426
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+427
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+428
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+429
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;     %STOP
         STOP  ,     ,     0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE UI
         B     ,     ,      BT+238
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+430

;! COMPILE UNCONDITIONAL INSTRUCTION

;%INTEGER I,J,K,L

;     I=A(AP)                            ;! NEXT ANALYSIS RECORD ENTRY
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  10

;     AP=AP+1
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+431
         STR   ACC,  BR1,  10

;     %IF I=1 %THEN ->10                 ;! ROUTINE CALL OR ASSIGNMENT STATEMENT
         LOAD  ACC,  BR4,  10
         SUB   ACC,  ,      CT+432
         BZ    ACC,  ,      BT+239

;     %IF I=2 %THEN ->20                 ;! JUMP INSTRUCTION
         LOAD  ACC,  BR4,  10
         SUB   ACC,  ,      CT+433
         BZ    ACC,  ,      BT+240

;     %IF I=3 %THEN ->30                 ;! %START
         LOAD  ACC,  BR4,  10
         SUB   ACC,  ,      CT+434
         BZ    ACC,  ,      BT+241

;     %IF I=4 %THEN ->40                 ;! %RETURN
         LOAD  ACC,  BR4,  10
         SUB   ACC,  ,      CT+435
         BZ    ACC,  ,      BT+242

;     %IF I=5 %THEN ->50                 ;! %RESULT=
         LOAD  ACC,  BR4,  10
         SUB   ACC,  ,      CT+436
         BZ    ACC,  ,      BT+243

;     DUMP(M'STOP',0,0,0)                ;! %STOP
         LOAD  ACC,  ,      CT+437
         STR   ACC,  STP,  10
         LDA   ACC,  ,     0
         STR   ACC,  STP,  11
         LDA   ACC,  ,     0
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     %RETURN
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! NAME APP ASS

;10:  I=LINK(A(AP))                             ;! POINTER TO NAME TAGS
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  10

;     %IF I=0 %THEN %START
         LOAD  ACC,  BR4,  10
         BNZ   ACC,  ,      BT+244

;        PRINT NAME(A(AP))
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;        FAULT(M'NAME',M' NOT',M' SET',0)
         LOAD  ACC,  ,      CT+438
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+439
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+440
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        %FINISH %ELSE I=TAG(I)                ;! NAME TAGS OR ZERO TO AVOID DIAGNOSTICS
         B     ,     ,      BT+245
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  10

;     J=AP                                      ;! PRESERVE ANALYSIS RECORD POINTER
         LOAD  ACC,  BR1,  10
         STR   ACC,  BR4,  11

;     AP=AP+1                                   ;! AP ON <APP>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+441
         STR   ACC,  BR1,  10

;     SKIP APP                                  ;! SKIP TO <ASS>
         BAL   WK,   ,      BT+131

;     %IF A(AP)=2 %THEN %START                  ;! ROUTINE CALL
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+442
         BNZ   ACC,  ,      BT+246

;        %IF I>>24=64 %THEN %START              ;! 'FORM/TYPE' IS ROUTINE
         LOAD  ACC,  BR4,  10
         SHR   ACC,  ,      CT+443
         SUB   ACC,  ,      CT+444
         BNZ   ACC,  ,      BT+247

;           AP=J                                ;! RESTORE AP TO <NAME>
         LOAD  ACC,  BR4,  11
         STR   ACC,  BR1,  10

;           RT                                  ;! CALL ROUTINE
         BAL   WK,   ,      BT+132

;           %FINISH %ELSE %START
         B     ,     ,      BT+248

;           %IF I\=0 %THEN %START
         LOAD  ACC,  BR4,  10
         BZ    ACC,  ,      BT+249

;              PRINT NAME(A(J))
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;              FAULT(M'NOT ',M'ROUT',M'INE ',M'NAME')
         LOAD  ACC,  ,      CT+445
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+446
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+447
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+448
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;              %FINISH

;           %FINISH

;        AP=AP+1                                ;! AP AFTER <UI>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+449
         STR   ACC,  BR1,  10

;        %RETURN ; %FINISH
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     K=I>>28                                   ;! 'FORM' OF NAME
         LOAD  ACC,  BR4,  10
         SHR   ACC,  ,      CT+450
         STR   ACC,  BR4,  12

;     %IF K=4 %THEN %START
         LOAD  ACC,  BR4,  12
         SUB   ACC,  ,      CT+451
         BNZ   ACC,  ,      BT+250

;        PRINT NAME(A(J))
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;        FAULT(M'NAME',M' NOT',M' A D',M'ESTN') ;! ROUTINE/FN FORM
         LOAD  ACC,  ,      CT+452
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+453
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+454
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+455
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        I=0                                    ;! CLEAR TAGS TO AVOID FURTHER DIAGNOSTIC
         LDA   ACC,  ,     0
         STR   ACC,  BR4,  10

;        %FINISH

;     AP=AP+1                                   ;! AP ON <+-\>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+456
         STR   ACC,  BR1,  10

;     SEXPR
         BAL   WK,   ,      BT+120

;     %IF I=0 %THEN %RETURN                     ;! LHS NAME NOT SET
         LOAD  ACC,  BR4,  10
         BNZ   ACC,  ,      BT+251
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     %IF K>=2 %THEN %START                     ;! LHS AN ARRAY TYPE
         LOAD  ACC,  BR4,  12
         SUB   ACC,  ,      CT+457
         BL    ACC,  ,      BT+252

;        DUMP(M'STR',M'ACC',BR(LEVEL),WS NEXT)  ;! PRESERVE ACCUMMULATOR
         LOAD  ACC,  ,      CT+458
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+459
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         BAL   WK,   ,      BT+127
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        K=AP                                   ;! PRESERVE AP
         LOAD  ACC,  BR1,  10
         STR   ACC,  BR4,  12

;        AP=J                                    ;! RESTORE INITIALANAL REC POINTER
         LOAD  ACC,  BR4,  11
         STR   ACC,  BR1,  10

;        ARRAD                                  ;! CALCULATE ARRAY ELEMENT ADDRESS
         BAL   WK,   ,      BT+133

;        WS=WS-1                                ;! RESTORE WORKSPACE POINTER
         LOAD  ACC,  BR2,  19
         SUB   ACC,  ,      CT+460
         STR   ACC,  BR2,  19

;        DUMP(M'LOAD',M'WK',BR(LEVEL),WS)       ;! RESTORE ACCUMMULATOR
         LOAD  ACC,  ,      CT+461
         STR   ACC,  STP,  10
         LDA   ACC,  ,     22347
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  19
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        DUMP(M'STR',M'WK',M'ACC',0)            ;! DUMP ASSIGNMENT
         LOAD  ACC,  ,      CT+462
         STR   ACC,  STP,  10
         LDA   ACC,  ,     22347
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+463
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        AP=K                                   ;! RESTORE AP TO AFTER <UI>
         LOAD  ACC,  BR4,  12
         STR   ACC,  BR1,  10

;        %RETURN ; %FINISH
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     %IF K=1 %THEN %START
         LOAD  ACC,  BR4,  12
         SUB   ACC,  ,      CT+464
         BNZ   ACC,  ,      BT+253

;        DUMP(M'LOAD',M'WK',BR(I>>16&15),I&65535);! INDIRECT ASSIGMENT
         LOAD  ACC,  ,      CT+465
         STR   ACC,  STP,  10
         LDA   ACC,  ,     22347
         STR   ACC,  STP,  11
         LOAD  ACC,  BR4,  10
         SHR   ACC,  ,      CT+466
         AND   ACC,  ,      CT+467
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR4,  10
         AND   ACC,  ,      CT+468
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        DUMP(M'STR',M'ACC',M'WK',0)
         LOAD  ACC,  ,      CT+469
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+470
         STR   ACC,  STP,  11
         LDA   ACC,  ,     22347
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        %FINISH %ELSE DUMP(M'STR',M'ACC',BR(I>>16&15),I&65535)
         B     ,     ,      BT+254
         LOAD  ACC,  ,      CT+471
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+472
         STR   ACC,  STP,  11
         LOAD  ACC,  BR4,  10
         SHR   ACC,  ,      CT+473
         AND   ACC,  ,      CT+474
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR4,  10
         AND   ACC,  ,      CT+475
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     %IF A(J+1)=1 %THEN %START
         LOAD  ACC,  BR4,  11
         ADD   ACC,  ,      CT+476
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+477
         BNZ   ACC,  ,      BT+255

;        PRINT NAME(A(J))
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;        FAULT(M'SCAL',M'AR H',M'AS P',M'ARAM')
         LOAD  ACC,  ,      CT+478
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+479
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+480
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+481
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        %FINISH

;     %RETURN
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! -> CONST

;20:  DUMP('B',0,M'BT',FIND LABEL)              ;! SCAN/INSERT JUMP LIST AND DUMP JUMP
         LDA   ACC,  ,     66
         STR   ACC,  STP,  10
         LDA   ACC,  ,     0
         STR   ACC,  STP,  11
         LDA   ACC,  ,     16980
         STR   ACC,  STP,  12
         BAL   WK,   ,      BT+121
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     %RETURN
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! %START

;30:  FAULT(M'%STA',M'RT ?',M'    ',M'    ')    ;! %START ALONE SHOULD NOT BE A SOURCE STATEMENT
         LOAD  ACC,  ,      CT+482
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+483
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+484
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+485
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;     %RETURN
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! %RETURN

;40:  %IF RTP(LEVEL)\=0 %THEN FAULT(M'%RET',M'URN ',M'CONT',M'EXT ')
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  47
         LOAD  ACC,  ACC,  0
         BZ    ACC,  ,      BT+256
         LOAD  ACC,  ,      CT+486
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+487
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+488
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+489
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;     RETURN                                    ;! DUMP %RETURN CODE  -  INCORRECT FOR FN
         BAL   WK,   ,      BT+135

;     %RETURN
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;! %RESULT=

;50:  I=RTP(LEVEL)                              ;! ROUTINE/FN TYPE
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  47
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  10

;     %IF I<=0 %THEN FAULT(M'%RES',M'ULT ',M'CONT',M'EXT ') ;! %BEGIN/%ROUTINE
         LOAD  ACC,  BR4,  10
         BG    ACC,  ,      BT+257
         LOAD  ACC,  ,      CT+490
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+491
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+492
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+493
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;     SEXPR                                     ;! COMPILE RESULT EXPRESSION
         BAL   WK,   ,      BT+120

;     RETURN                                    ;! LEAVE RESULT IN ACC & DUMP RETURN CODE
         BAL   WK,   ,      BT+135

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE SEXPR
         B     ,     ,      BT+259
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+494

;! COMPILE ARITHMETIC EXPRESSION

;%ROUTINESPEC TORP

;%ROUTINESPEC PSEVAL

;%ROUTINESPEC EVAL(%INTEGER P)

;%INTEGER RPP,APP

;%INTEGERARRAY RP,PT(1:32)                   ;! REVERSE POLISH, POINTER/TYPE ARRAYS
         LDA   ACC,  ,     1
         STR   ACC,  BR4,  2
         LDA   ACC,  ,     32
         LDA   ACC,  ACC,  1
         STR   ACC,  BR4,  3
         SUB   STP,  BR4,  2
         STR   STP,  BR4,  12
         ADD   STP,  BR4,  3
         SUB   STP,  BR4,  2
         STR   STP,  BR4,  14
         ADD   STP,  BR4,  3

;     RPP=1                                  ;! RP POINTER
         LDA   ACC,  ,     1
         STR   ACC,  BR4,  10

;     TORP                                   ;! EXPR TO REV POLISH
         BAL   WK,   ,      BT+260

;     %IF SCF=1 %THEN %START                 ;! PART OF A SIMPLE CONDITION
         LOAD  ACC,  BR1,  22
         SUB   ACC,  ,      CT+495
         BNZ   ACC,  ,      BT+263

;        SCF=0                               ;! RESET FLAG
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  22

;        COMP=A(AP)                          ;! COMPARATOR NUMBER
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR1,  21

;        %IF A(AP+3)=0 %AND A(AP+4)=2 %THEN AP=AP+5 %ELSE %START
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+496
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         BNZ   ACC,  ,      BT+264
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+497
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+498
         BNZ   ACC,  ,      BT+264
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+499
         STR   ACC,  BR1,  10
         B     ,     ,      BT+265

;           AP=AP+1                          ;! 2ND EXPR NON-ZERO
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+500
         STR   ACC,  BR1,  10

;           TORP                             ;! 2ND EXPRESSION TO REVERSE POLISH
         BAL   WK,   ,      BT+260

;           RP(RPP)=10                       ;! CODE FOR '-' I.E. (1ST-2ND)
         LDA   ACC,  ,     10
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR4,  12
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;           PT(RPP)=1                        ;! FLAG=OPERATOR
         LDA   ACC,  ,     1
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR4,  14
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;           RPP=RPP+1                        ;! INCREMENT RP POINTER
         LOAD  ACC,  BR4,  10
         ADD   ACC,  ,      CT+501
         STR   ACC,  BR4,  10

;           %FINISH

;        %FINISH

;     APP=AP                                 ;! SAVE FINAL ANAL REC POINTER
         LOAD  ACC,  BR1,  10
         STR   ACC,  BR4,  11

;     PSEVAL                                 ;! PSEUDO-EVALUATE EXPRESSION
         BAL   WK,   ,      BT+261

;     EVAL(RPP-1)                            ;! DUMP CODE FOR EXPR EVALUATION
         LOAD  ACC,  BR4,  10
         SUB   ACC,  ,      CT+502
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+262

;     AP=APP                                 ;! RESTORE FINAL ANAL REC POINTER
         LOAD  ACC,  BR4,  11
         STR   ACC,  BR1,  10

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%ROUTINE TORP
         B     ,     ,      BT+266
         STR   BR5,  STP,  0
         LDA   BR5,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+503

;! TRANSFORM EXPRESSION TO REVERSE POLISH

;%ROUTINESPEC STORE(%INTEGER I,J)

;%INTEGERARRAY OP(1:4)
         LDA   ACC,  ,     1
         STR   ACC,  BR5,  2
         LDA   ACC,  ,     4
         LDA   ACC,  ACC,  1
         STR   ACC,  BR5,  3
         SUB   STP,  BR5,  2
         STR   STP,  BR5,  10
         ADD   STP,  BR5,  3

;%INTEGER OPP,I

;     OPP=0                              ;! OPERATOR STACK POINTER
         LDA   ACC,  ,     0
         STR   ACC,  BR5,  12

;     I=A(AP)                            ;! <+-\>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR5,  13

;     AP=AP+1
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+504
         STR   ACC,  BR1,  10

;     %IF I=1 %OR I=4 %THEN ->1          ;! + OR NULL
         LOAD  ACC,  BR5,  13
         SUB   ACC,  ,      CT+505
         BZ    ACC,  ,      BT+268
         LOAD  ACC,  BR5,  13
         SUB   ACC,  ,      CT+506
         BZ    ACC,  ,      BT+268

;     I=I+9                              ;! CODES FOR - & \
         LOAD  ACC,  BR5,  13
         ADD   ACC,  ,      CT+507
         STR   ACC,  BR5,  13

;3:   OPP=OPP+1                          ;! STACK OPERATOR
         LOAD  ACC,  BR5,  12
         ADD   ACC,  ,      CT+508
         STR   ACC,  BR5,  12

;     OP(OPP)=I
         LOAD  ACC,  BR5,  13
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  12
         ADD   ACC,  BR5,  10
         LOAD  WK,   BR5,  2
         STR   WK,   ACC,  0

;1:   I=A(AP)                            ;! <OPD>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR5,  13

;     %IF I=3 %THEN %START               ;! SUB-EXPRESSION
         LOAD  ACC,  BR5,  13
         SUB   ACC,  ,      CT+509
         BNZ   ACC,  ,      BT+270

;        AP=AP+1                         ;! AP TO <+-\>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+510
         STR   ACC,  BR1,  10

;        TORP                            ;! TRANSFORM SUB-EXPR TO REV POL
         BAL   WK,   ,      BT+260

;        %FINISH %ELSE %START
         B     ,     ,      BT+271

;        STORE(AP,0)                     ;! STORE ANAL REC POSITION OF OPERAND
         LOAD  ACC,  BR1,  10
         STR   ACC,  STP,  10
         LDA   ACC,  ,     0
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+267

;        AP=AP+2                         ;! AP ON <APP> OR AFTER <CNST>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+511
         STR   ACC,  BR1,  10

;        %IF I=1 %THEN SKIP APP          ;! OPERAND A NAME
         LOAD  ACC,  BR5,  13
         SUB   ACC,  ,      CT+512
         BNZ   ACC,  ,      BT+272
         BAL   WK,   ,      BT+131

;        %FINISH

;     %IF A(AP)=2 %THEN %START           ;! END OF <EXPR>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+513
         BNZ   ACC,  ,      BT+273

;        AP=AP+1                         ;! AP AFTER EXPRESSION
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+514
         STR   ACC,  BR1,  10

;2:      %IF OPP=0 %THEN %RETURN         ;! OPERATOR STACK EMPTIED
         LOAD  ACC,  BR5,  12
         BNZ   ACC,  ,      BT+275
         LDA   STP,  BR5,  0
         LOAD  BR5,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;        STORE(OP(OPP),1)                ;! UNSTACK REMAINING OPERATORS
         LOAD  ACC,  BR5,  12
         ADD   ACC,  BR5,  10
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         LDA   ACC,  ,     1
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+267

;        OPP=OPP-1
         LOAD  ACC,  BR5,  12
         SUB   ACC,  ,      CT+515
         STR   ACC,  BR5,  12

;        ->2 ; %FINISH
         B     ,     ,      BT+274

;     I=A(AP+1)                          ;! <OP>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+516
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR5,  13

;     AP=AP+2                            ;! AP ON <EXPR>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+517
         STR   ACC,  BR1,  10

;4:   %IF OPP=0 %OR PREC(I)>PREC(OP(OPP)) %THEN ->3 ;! OP STACK EMPTY OR NEW OP HIGHER PREC
         LOAD  ACC,  BR5,  12
         BZ    ACC,  ,      BT+269
         LOAD  ACC,  BR5,  12
         ADD   ACC,  BR5,  10
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR1,  61
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR1,  61
         LOAD  ACC,  ACC,  0
         SUB   ACC,  BR5,  2
         BG    ACC,  ,      BT+269

;     STORE(OP(OPP),1)                   ;! UNSTACK TOP OPERATOR
         LOAD  ACC,  BR5,  12
         ADD   ACC,  BR5,  10
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         LDA   ACC,  ,     1
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+267

;     OPP=OPP-1
         LOAD  ACC,  BR5,  12
         SUB   ACC,  ,      CT+518
         STR   ACC,  BR5,  12

;     ->4
         B     ,     ,      BT+276

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%ROUTINE STORE(%INTEGER I,J)
I PAR NOT AS SPEC 
J PAR NOT AS SPEC 
         B     ,     ,      BT+277
         STR   BR6,  STP,  0
         LDA   BR6,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+519

;! STORE IN RP & PT ARRAYS, I=ANAL REC PTR , J= OP/OPD FLAG

;     %IF RPP>32 %THEN %START             ;! REV POL ARRAY FULL
         LOAD  ACC,  BR4,  10
         SUB   ACC,  ,      CT+520
         BNG   ACC,  ,      BT+278

;        FAULT(M'EXPR',M' TOO',M' LON',M'G   ')
         LOAD  ACC,  ,      CT+521
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+522
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+523
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+524
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        RPP=1                            ;! IN ORDER TO CONTINUE
         LDA   ACC,  ,     1
         STR   ACC,  BR4,  10

;        %FINISH

;     RP(RPP)=I                           ;! STORE OP/OPD
         LOAD  ACC,  BR6,  10
         STR   ACC,  BR6,  2
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR4,  12
         LOAD  WK,   BR6,  2
         STR   WK,   ACC,  0

;     PT(RPP)=J                           ;! STORE FLAG
         LOAD  ACC,  BR6,  11
         STR   ACC,  BR6,  2
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR4,  14
         LOAD  WK,   BR6,  2
         STR   WK,   ACC,  0

;     RPP=RPP+1                           ;! NEXT POSITION
         LOAD  ACC,  BR4,  10
         ADD   ACC,  ,      CT+525
         STR   ACC,  BR4,  10

;%END
         LDA   STP,  BR6,  0
         LOAD  BR6,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         LDA   STP,  BR5,  0
         LOAD  BR5,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%ROUTINE PSEVAL
         B     ,     ,      BT+279
         STR   BR5,  STP,  0
         LDA   BR5,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+526

;! PSEUDO-EVALUATION, CHECKING OPERANDS

;%INTEGERARRAY PST(1:32)                      ;! OPERAND POINTER STACK
         LDA   ACC,  ,     1
         STR   ACC,  BR5,  2
         LDA   ACC,  ,     32
         LDA   ACC,  ACC,  1
         STR   ACC,  BR5,  3
         SUB   STP,  BR5,  2
         STR   STP,  BR5,  10
         ADD   STP,  BR5,  3

;%INTEGER PSTP,I,J,K

;     PSTP=0                                  ;! PST POINTER
         LDA   ACC,  ,     0
         STR   ACC,  BR5,  12

;     I=1                                     ;! REV POL ARRAY POINTER
         LDA   ACC,  ,     1
         STR   ACC,  BR5,  13

;3:   AP=RP(I)                                ;! ANAL REC POSITION OF OPERAND
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR4,  12
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR1,  10

;     %IF A(AP)=1 %THEN %START                ;! OPERAND A NAME
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+527
         BNZ   ACC,  ,      BT+281

;        J=LINK(A(AP+1))                      ;! LINK TO TAG OF NAME
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+528
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR5,  14

;        %IF J=0 %THEN %START
         LOAD  ACC,  BR5,  14
         BNZ   ACC,  ,      BT+282

;           PRINT NAME(A(AP+1))
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+529
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;           FAULT(M'NAME',M' NOT',M' SET',0)
         LOAD  ACC,  ,      CT+530
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+531
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+532
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;           K=0                               ;! DUMMY TAG VALUE
         LDA   ACC,  ,     0
         STR   ACC,  BR5,  15

;           ->1 ; %FINISH
         B     ,     ,      BT+283

;        K=TAG(J)                             ;! TAG OF NAME
         LOAD  ACC,  BR5,  14
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR5,  15

;        J=K>>28                              ;! 'FORM' OF NAME
         LOAD  ACC,  BR5,  15
         SHR   ACC,  ,      CT+533
         STR   ACC,  BR5,  14

;        %IF J>1 %THEN %START                 ;! ARRAY OR ROUTINE/FN TYPE
         LOAD  ACC,  BR5,  14
         SUB   ACC,  ,      CT+534
         BNG   ACC,  ,      BT+284

;           RP(I)=AP+1                        ;! STORE ANAL REC POSITION OF <NAME>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+535
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR4,  12
         LOAD  WK,   BR5,  2
         STR   WK,   ACC,  0

;           %IF J=4 %THEN %START              ;! NAME IS ROUTINE/FN TYPE
         LOAD  ACC,  BR5,  14
         SUB   ACC,  ,      CT+536
         BNZ   ACC,  ,      BT+285

;              %IF K>>24&15=0 %THEN %START
         LOAD  ACC,  BR5,  15
         SHR   ACC,  ,      CT+537
         AND   ACC,  ,      CT+538
         BNZ   ACC,  ,      BT+286

;                 PRINT NAME(A(AP+1))
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+539
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;                 FAULT(M'RT N',M'AME ',M'IN E',M'XPR ')
         LOAD  ACC,  ,      CT+540
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+541
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+542
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+543
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;                 K=0                         ;! DUMMY TAG VALUE
         LDA   ACC,  ,     0
         STR   ACC,  BR5,  15

;                 ->1 ; %FINISH
         B     ,     ,      BT+283

;              PT(I)=-1                       ;! FLAG FOR FUNCTION
         LDA   ACC,  ,     1
         NEG   ACC,  ,     0
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR4,  14
         LOAD  WK,   BR5,  2
         STR   WK,   ACC,  0

;              %FINISH %ELSE PT(I)=-2         ;! FLAG FOR ARRAY
         B     ,     ,      BT+287
         LDA   ACC,  ,     2
         NEG   ACC,  ,     0
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR4,  14
         LOAD  WK,   BR5,  2
         STR   WK,   ACC,  0

;           ->2 ; %FINISH                     ;! GO TO STACK POINTER
         B     ,     ,      BT+288

;        %IF A(AP+2)=1 %THEN %START
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+544
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+545
         BNZ   ACC,  ,      BT+289

;           PRINT NAME(A(AP+1))
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+546
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;           FAULT(M'SCAL',M'AR H',M'AS P',M'ARAM')
         LOAD  ACC,  ,      CT+547
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+548
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+549
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+550
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;           %FINISH

;1:      RP(I)=K                              ;! STORE TAG OF NAME FOR SCALARS
         LOAD  ACC,  BR5,  15
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR4,  12
         LOAD  WK,   BR5,  2
         STR   WK,   ACC,  0

;        PT(I)=-3                             ;! FLAG FOR SCALARS
         LDA   ACC,  ,     3
         NEG   ACC,  ,     0
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR4,  14
         LOAD  WK,   BR5,  2
         STR   WK,   ACC,  0

;        %FINISH %ELSE %START                 ;! OPERAND IS A <CNST>
         B     ,     ,      BT+290

;        RP(I)=A(AP+1)                        ;! STORE VALUE OF CONSTANT
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+551
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR4,  12
         LOAD  WK,   BR5,  2
         STR   WK,   ACC,  0

;        PT(I)=-4                             ;! FLAG FOR CONSTANTS
         LDA   ACC,  ,     4
         NEG   ACC,  ,     0
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR4,  14
         LOAD  WK,   BR5,  2
         STR   WK,   ACC,  0

;        %FINISH

;2:   PSTP=PSTP+1                             ;! STACK OPERAND POINTER
         LOAD  ACC,  BR5,  12
         ADD   ACC,  ,      CT+552
         STR   ACC,  BR5,  12

;4:   PST(PSTP)=I
         LOAD  ACC,  BR5,  13
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  12
         ADD   ACC,  BR5,  10
         LOAD  WK,   BR5,  2
         STR   WK,   ACC,  0

;     I=I+1                                   ;! REV POL ARRAY POINTER
         LOAD  ACC,  BR5,  13
         ADD   ACC,  ,      CT+553
         STR   ACC,  BR5,  13

;     %IF I<RPP %THEN %START                  ;! NOT END OF REV POL YET
         LOAD  ACC,  BR5,  13
         SUB   ACC,  BR4,  10
         BNL   ACC,  ,      BT+292

;        %IF PT(I)=0 %THEN ->3                ;! AN OPERAND IS NEXT
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR4,  14
         LOAD  ACC,  ACC,  0
         BZ    ACC,  ,      BT+280

;        %IF RP(I)<=10 %THEN %START           ;! BINARY OPERATORS
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR4,  12
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+554
         BG    ACC,  ,      BT+293

;           PSTP=PSTP-1                       ;! PSEUDO-EVALUATE POINTERS
         LOAD  ACC,  BR5,  12
         SUB   ACC,  ,      CT+555
         STR   ACC,  BR5,  12

;           PT(I)=PST(PSTP)                   ;! STACK POINTER TO RESULT
         LOAD  ACC,  BR5,  12
         ADD   ACC,  BR5,  10
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR4,  14
         LOAD  WK,   BR5,  2
         STR   WK,   ACC,  0

;           %FINISH

;        ->4 ; %FINISH
         B     ,     ,      BT+291

;%END
         LDA   STP,  BR5,  0
         LOAD  BR5,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%ROUTINE EVAL(%INTEGER P)
P PAR NOT AS SPEC 
         B     ,     ,      BT+294
         STR   BR5,  STP,  0
         LDA   BR5,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+556

;! DUMP CODE FOR EVALUATION OF EXPRESSION

;%ROUTINESPEC OPN(%INTEGER OP,L)

;%INTEGER I,J,K

;     I=PT(P)                                       ;! POINTER/TYPE OF LAST REV POL ENTRY
         LOAD  ACC,  BR5,  10
         ADD   ACC,  BR4,  14
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR5,  11

;     %IF I<0 %THEN %START                          ;! OPERAND
         LOAD  ACC,  BR5,  11
         BNL   ACC,  ,      BT+296

;        OPN(0,P)                                   ;! LOAD OPERAND
         LDA   ACC,  ,     0
         STR   ACC,  STP,  10
         LOAD  ACC,  BR5,  10
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+295

;        %RETURN ; %FINISH
         LDA   STP,  BR5,  0
         LOAD  BR5,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     J=RP(P)                                       ;! OPERATOR
         LOAD  ACC,  BR5,  10
         ADD   ACC,  BR4,  12
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR5,  12

;     K=P-1                                         ;! START OF 2ND OPERAND
         LOAD  ACC,  BR5,  10
         SUB   ACC,  ,      CT+557
         STR   ACC,  BR5,  13

;     %IF UCN(J)=1 %THEN %START                     ;! UNARY OPERATOR
         LOAD  ACC,  BR5,  12
         ADD   ACC,  BR1,  63
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+558
         BNZ   ACC,  ,      BT+297

;        %IF PT(K)>=-2 %THEN EVAL(K) %ELSE OPN(0,K) ;! EVAL IF NODE OTHERWISE LOAD OPERAND
         LDA   ACC,  ,     2
         NEG   ACC,  ,     0
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR4,  14
         LOAD  ACC,  ACC,  0
         SUB   ACC,  BR5,  2
         BL    ACC,  ,      BT+298
         LOAD  ACC,  BR5,  13
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+262
         B     ,     ,      BT+299
         LDA   ACC,  ,     0
         STR   ACC,  STP,  10
         LOAD  ACC,  BR5,  13
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+295

;        DUMP(OPR(J),M'ACC',0,0)                    ;! DUMP UNARY OPERATION
         LOAD  ACC,  BR5,  12
         ADD   ACC,  BR1,  65
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+559
         STR   ACC,  STP,  11
         LDA   ACC,  ,     0
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        %RETURN ; %FINISH
         LDA   STP,  BR5,  0
         LOAD  BR5,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     %IF PT(I)>=-2 %THEN %START                    ;! FIRST OPERAND A NODE
         LDA   ACC,  ,     2
         NEG   ACC,  ,     0
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  11
         ADD   ACC,  BR4,  14
         LOAD  ACC,  ACC,  0
         SUB   ACC,  BR5,  2
         BL    ACC,  ,      BT+300

;        %IF PT(K)>=-2 %THEN %START                 ;! SECOND OPERAND A NODE
         LDA   ACC,  ,     2
         NEG   ACC,  ,     0
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR4,  14
         LOAD  ACC,  ACC,  0
         SUB   ACC,  BR5,  2
         BL    ACC,  ,      BT+301

;           EVAL(K)                                 ;! EVALUATE 2ND OPERAND
         LOAD  ACC,  BR5,  13
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+262

;           DUMP(M'STR',M'ACC',BR(LEVEL),WS NEXT)   ;!  & STORE IT IN WORKSPACE
         LOAD  ACC,  ,      CT+560
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+561
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         BAL   WK,   ,      BT+127
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           EVAL(I)                                 ;! EVALUATE 1ST OPERAND
         LOAD  ACC,  BR5,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+262

;           WS=WS-1                                 ;! RESTORE WORKSPACE POINTER
         LOAD  ACC,  BR2,  19
         SUB   ACC,  ,      CT+562
         STR   ACC,  BR2,  19

;           DUMP(OPR(J),M'ACC',BR(LEVEL),WS)        ;! DUMP OPERATION
         LOAD  ACC,  BR5,  12
         ADD   ACC,  BR1,  65
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+563
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  19
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           %FINISH %ELSE %START                    ;! 2ND OPERAND NOT A NODE
         B     ,     ,      BT+302

;           EVAL(I)                                 ;! EVALUATE 1ST OPERAND
         LOAD  ACC,  BR5,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+262

;           OPN(J,K)                                ;! OPERATION WITH 2ND OPERAND
         LOAD  ACC,  BR5,  12
         STR   ACC,  STP,  10
         LOAD  ACC,  BR5,  13
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+295

;           %FINISH

;        %FINISH %ELSE %START                       ;! 1ST OPERAND NOT A NODE
         B     ,     ,      BT+303

;        %IF PT(K)>=-2 %THEN %START                 ;! 2ND OPERAND A NODE
         LDA   ACC,  ,     2
         NEG   ACC,  ,     0
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR5,  13
         ADD   ACC,  BR4,  14
         LOAD  ACC,  ACC,  0
         SUB   ACC,  BR5,  2
         BL    ACC,  ,      BT+304

;           EVAL(K)                                 ;! EVALUATE 2ND OPERAND
         LOAD  ACC,  BR5,  13
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+262

;           %IF UCN(J)=2 %THEN %START               ;! OPERATOR IS COMMUTATIVE
         LOAD  ACC,  BR5,  12
         ADD   ACC,  BR1,  63
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+564
         BNZ   ACC,  ,      BT+305

;              OPN(J,I)                             ;! OPERATION WITH 1ST OPERAND
         LOAD  ACC,  BR5,  12
         STR   ACC,  STP,  10
         LOAD  ACC,  BR5,  11
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+295

;              %RETURN ; %FINISH
         LDA   STP,  BR5,  0
         LOAD  BR5,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;           DUMP(M'STR',M'ACC',BR(LEVEL),WS NEXT)   ;! STORE VALUE OF 2ND OPERAND IN WORKSPACE
         LOAD  ACC,  ,      CT+565
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+566
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         BAL   WK,   ,      BT+127
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           OPN(0,I)                                ;! LOAD 1ST OPERAND
         LDA   ACC,  ,     0
         STR   ACC,  STP,  10
         LOAD  ACC,  BR5,  11
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+295

;           WS=WS-1                                 ;! RESTORE WORKSPACE POINTER
         LOAD  ACC,  BR2,  19
         SUB   ACC,  ,      CT+567
         STR   ACC,  BR2,  19

;           DUMP(OPR(J),M'ACC',BR(LEVEL),WS)        ;! DUMP OPERATION WITH 2ND OPERAND
         LOAD  ACC,  BR5,  12
         ADD   ACC,  BR1,  65
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+568
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  19
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           %FINISH %ELSE %START                    ;! 2ND OPERAND NOT A NODE
         B     ,     ,      BT+306

;           OPN(0,I)                                ;! LOAD 1ST OPERAND
         LDA   ACC,  ,     0
         STR   ACC,  STP,  10
         LOAD  ACC,  BR5,  11
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+295

;           OPN(J,K)                                ;! OPERATION WITH 2ND OPERAND
         LOAD  ACC,  BR5,  12
         STR   ACC,  STP,  10
         LOAD  ACC,  BR5,  13
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+295

;           %FINISH

;        %FINISH

;     %RETURN
         LDA   STP,  BR5,  0
         LOAD  BR5,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%ROUTINE OPN(%INTEGER OP,L)
OP PAR NOT AS SPEC 
L PAR NOT AS SPEC 
         B     ,     ,      BT+307
         STR   BR6,  STP,  0
         LDA   BR6,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+569

;! DUMP SIMPLE OPERATION, OP=OPERATOR, L=RP POSITION OF OPERAND

;%INTEGER I,J

;     I=PT(L)                                         ;! KIND OF OPERAND
         LOAD  ACC,  BR6,  11
         ADD   ACC,  BR4,  14
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR6,  12

;     AP=RP(L)                                        ;! ANAL REC POINTER OR NAME TAGS
         LOAD  ACC,  BR6,  11
         ADD   ACC,  BR4,  12
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR1,  10

;     %IF I=-1 %THEN %START                           ;! ROUTINE/FN TYPE
         LDA   ACC,  ,     1
         NEG   ACC,  ,     0
         STR   ACC,  BR6,  2
         LOAD  ACC,  BR6,  12
         SUB   ACC,  BR6,  2
         BNZ   ACC,  ,      BT+308

;        RT                                           ;! DUMP CALL ON FUNCTION
         BAL   WK,   ,      BT+132

;        %RETURN ; %FINISH
         LDA   STP,  BR6,  0
         LOAD  BR6,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     %IF I=-2 %THEN %START                           ;! ARRAY ACCESS
         LDA   ACC,  ,     2
         NEG   ACC,  ,     0
         STR   ACC,  BR6,  2
         LOAD  ACC,  BR6,  12
         SUB   ACC,  BR6,  2
         BNZ   ACC,  ,      BT+309

;        ARRAD                                        ;! CALCULATE ARRAY ELEMENT ADDRESS
         BAL   WK,   ,      BT+133

;        DUMP(M'LOAD',M'ACC',M'ACC',0)                ;! LOAD VALUE
         LOAD  ACC,  ,      CT+570
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+571
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+572
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        %RETURN ; %FINISH
         LDA   STP,  BR6,  0
         LOAD  BR6,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     %IF I=-3 %THEN %START                           ;! SCALAR TYPE
         LDA   ACC,  ,     3
         NEG   ACC,  ,     0
         STR   ACC,  BR6,  2
         LOAD  ACC,  BR6,  12
         SUB   ACC,  BR6,  2
         BNZ   ACC,  ,      BT+310

;        %IF AP>>28=1 %THEN %START                    ;! %NAME TYPE
         LOAD  ACC,  BR1,  10
         SHR   ACC,  ,      CT+573
         SUB   ACC,  ,      CT+574
         BNZ   ACC,  ,      BT+311

;           DUMP(M'LOAD',M'WK',BR(AP>>16&15),AP&65535) ;! LOAD INDIRECT
         LOAD  ACC,  ,      CT+575
         STR   ACC,  STP,  10
         LDA   ACC,  ,     22347
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  10
         SHR   ACC,  ,      CT+576
         AND   ACC,  ,      CT+577
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR1,  10
         AND   ACC,  ,      CT+578
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(OPR(OP),M'ACC',M'WK',0)
         LOAD  ACC,  BR6,  10
         ADD   ACC,  BR1,  65
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+579
         STR   ACC,  STP,  11
         LDA   ACC,  ,     22347
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           %FINISH %ELSE DUMP(OPR(OP),M'ACC',BR(AP>>16&15),AP&65535)
         B     ,     ,      BT+312
         LOAD  ACC,  BR6,  10
         ADD   ACC,  BR1,  65
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+580
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  10
         SHR   ACC,  ,      CT+581
         AND   ACC,  ,      CT+582
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR1,  10
         AND   ACC,  ,      CT+583
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        %RETURN ; %FINISH
         LDA   STP,  BR6,  0
         LOAD  BR6,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     %IF OP\=0 %OR AP>65535 %THEN %START             ;! CONSTANT NOT 'LDA'-ABLE
         LOAD  ACC,  BR6,  10
         BNZ   ACC,  ,      BT+313
         LOAD  ACC,  BR1,  10
         SUB   ACC,  ,      CT+584
         BNG   ACC,  ,      BT+314

;        J=CT NEXT                                    ;! NEXT HOLE IN CONSTANT TABLE
         BAL   WK,   ,      BT+126
         STR   ACC,  BR6,  13

;        COT(J)=AP                                    ;! STORE VALUE
         LOAD  ACC,  BR1,  10
         STR   ACC,  BR6,  2
         LOAD  ACC,  BR6,  13
         ADD   ACC,  BR1,  35
         LOAD  WK,   BR6,  2
         STR   WK,   ACC,  0

;        DUMP(OPR(OP),M'ACC',M'CT',J)
         LOAD  ACC,  BR6,  10
         ADD   ACC,  BR1,  65
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+585
         STR   ACC,  STP,  11
         LDA   ACC,  ,     17236
         STR   ACC,  STP,  12
         LOAD  ACC,  BR6,  13
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        %FINISH %ELSE DUMP(M'LDA',M'ACC',0,AP)
         B     ,     ,      BT+315
         LOAD  ACC,  ,      CT+586
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+587
         STR   ACC,  STP,  11
         LDA   ACC,  ,     0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR1,  10
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;%END
         LDA   STP,  BR6,  0
         LOAD  BR6,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         LDA   STP,  BR5,  0
         LOAD  BR5,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE SKIP SEXPR
         B     ,     ,      BT+317
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+588

;! SKIP PAST <+-\><OPD><EXPR> IN ANALYSIS RECORD, AP INITIALLY ON <+-\>

;1:   AP=AP+2                                       ;! AP ON <OPD>+1
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+589
         STR   ACC,  BR1,  10

;     %IF A(AP-1)=3 %THEN SKIP SEXPR %ELSE %START   ;! SKIP SUB-EXPR ELSE <NAME> OR <CNST>
         LOAD  ACC,  BR1,  10
         SUB   ACC,  ,      CT+590
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+591
         BNZ   ACC,  ,      BT+319
         BAL   WK,   ,      BT+316
         B     ,     ,      BT+320

;        AP=AP+1                                    ;! AP ON <APP> OR AFTER <CNST>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+592
         STR   ACC,  BR1,  10

;        %IF A(AP-2)=1 %THEN SKIP APP               ;! OPERAND IS A NAME
         LOAD  ACC,  BR1,  10
         SUB   ACC,  ,      CT+593
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+594
         BNZ   ACC,  ,      BT+321
         BAL   WK,   ,      BT+131

;        %FINISH

;     AP=AP+1                                       ;! AP AFTER <EXPR>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+595
         STR   ACC,  BR1,  10

;     %IF A(AP-1)=1 %THEN ->1                       ;! MORE OPERANDS
         LOAD  ACC,  BR1,  10
         SUB   ACC,  ,      CT+596
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+597
         BZ    ACC,  ,      BT+318

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE SKIP APP
         B     ,     ,      BT+323
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+598

;! SKIP PAST <APP> IN ANALYSIS RECORD

;1:   AP=AP+1                                       ;! POINTER TO <APP>+1 OR <EXPS>+1
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+599
         STR   ACC,  BR1,  10

;     %IF A(AP-1)=1 %THEN %START                    ;! EXPRESSIONS TO SKIP
         LOAD  ACC,  BR1,  10
         SUB   ACC,  ,      CT+600
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+601
         BNZ   ACC,  ,      BT+325

;        SKIP SEXPR
         BAL   WK,   ,      BT+316

;        ->1 ; %FINISH
         B     ,     ,      BT+324

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE SCCOND(%INTEGERNAME LABEL)
         B     ,     ,      BT+327
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+602

;! COMPILE CONDITION I.E. <SC><COND>, LABEL SET FOR POSITION AFTER UI

;%ROUTINESPEC SC

;%ROUTINESPEC COND

;%ROUTINESPEC STORE(%INTEGER FT)

;%INTEGER I,J,K,L,APP

;%INTEGERARRAY CAP,LVL,TF,JMP,LBL(1:16)             ;! ANAL REC POINTERS, NESTING LEVEL,
         LDA   ACC,  ,     1
         STR   ACC,  BR4,  2
         LDA   ACC,  ,     16
         LDA   ACC,  ACC,  1
         STR   ACC,  BR4,  3
         SUB   STP,  BR4,  2
         STR   STP,  BR4,  16
         ADD   STP,  BR4,  3
         SUB   STP,  BR4,  2
         STR   STP,  BR4,  18
         ADD   STP,  BR4,  3
         SUB   STP,  BR4,  2
         STR   STP,  BR4,  20
         ADD   STP,  BR4,  3
         SUB   STP,  BR4,  2
         STR   STP,  BR4,  22
         ADD   STP,  BR4,  3
         SUB   STP,  BR4,  2
         STR   STP,  BR4,  24
         ADD   STP,  BR4,  3

;                                                   ;!  TRUE/FALSE, JUMP & LABEL ARRAYS

;     I=1                                           ;! INDEX TO ARRAYS
         LDA   ACC,  ,     1
         STR   ACC,  BR4,  11

;     L=0                                           ;! NESTING LEVEL
         LDA   ACC,  ,     0
         STR   ACC,  BR4,  14

;     SC                                            ;! PROCESS <SC>
         BAL   WK,   ,      BT+328

;     COND                                          ;! PROCESS <COND>
         BAL   WK,   ,      BT+329

;     APP=AP                                        ;! PRESERVE FINAL ANAL REC POINTER
         LOAD  ACC,  BR1,  10
         STR   ACC,  BR4,  15

;     L=-1
         LDA   ACC,  ,     1
         NEG   ACC,  ,     0
         STR   ACC,  BR4,  14

;     STORE(1)                                      ;! PSEUDO-FALSE AT LEVEL -1
         LDA   ACC,  ,     1
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+330

;     L=-2
         LDA   ACC,  ,     2
         NEG   ACC,  ,     0
         STR   ACC,  BR4,  14

;     STORE(2)                                      ;! PSEUDO-TRUE AT LEVEL -2
         LDA   ACC,  ,     2
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+330

;     K=I-1                                         ;! LAST POSITION FILLED IN IN ARRAYS
         LOAD  ACC,  BR4,  11
         SUB   ACC,  ,      CT+603
         STR   ACC,  BR4,  13

;     I=1
         LDA   ACC,  ,     1
         STR   ACC,  BR4,  11

;2:   J=I                                           ;! FIND POSITIONS TO JUMP TO
         LOAD  ACC,  BR4,  11
         STR   ACC,  BR4,  12

;1:   J=J+1                                         ;!    AFTER COMPARISONS
         LOAD  ACC,  BR4,  12
         ADD   ACC,  ,      CT+604
         STR   ACC,  BR4,  12

;     %IF LVL(J)>=LVL(I) %OR TF(J)=TF(I) %THEN ->1  ;! SKIP HIGHER LEVELS ETC
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  18
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  12
         ADD   ACC,  BR4,  18
         LOAD  ACC,  ACC,  0
         SUB   ACC,  BR4,  2
         BNL   ACC,  ,      BT+332
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  20
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  12
         ADD   ACC,  BR4,  20
         LOAD  ACC,  ACC,  0
         SUB   ACC,  BR4,  2
         BZ    ACC,  ,      BT+332

;     JMP(I)=J                                      ;! JUMP TO COMPARISON POSITION J
         LOAD  ACC,  BR4,  12
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  22
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     I=I+1
         LOAD  ACC,  BR4,  11
         ADD   ACC,  ,      CT+605
         STR   ACC,  BR4,  11

;     %IF I<K %THEN ->2                             ;! MORE JUMPS TO FILL IN YET
         LOAD  ACC,  BR4,  11
         SUB   ACC,  BR4,  13
         BL    ACC,  ,      BT+331

;     %IF A(AP)\=2 %THEN ->3                        ;! UI NOT A JUMP INSTRUCTION
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+606
         BNZ   ACC,  ,      BT+333

;     AP=AP+1                                       ;! TO <CONST>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+607
         STR   ACC,  BR1,  10

;     J=K-1                                         ;! LAST POSITION FILLED IN
         LOAD  ACC,  BR4,  13
         SUB   ACC,  ,      CT+608
         STR   ACC,  BR4,  12

;     TF(J)=2                                       ;! SET AS 'TRUE'
         LDA   ACC,  ,     2
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  12
         ADD   ACC,  BR4,  20
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     JMP(J)=J                                      ;! SET JUMP AS THE UI JUMP
         LOAD  ACC,  BR4,  12
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  12
         ADD   ACC,  BR4,  22
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     LBL(J)=FIND LABEL                             ;! FILL IN BRANCH TABLE POSITION
         BAL   WK,   ,      BT+121
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  12
         ADD   ACC,  BR4,  24
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;3:   I=1                                           ;! FILL IN PSEUDO-LABELS FOR INNER JUMPS
         LDA   ACC,  ,     1
         STR   ACC,  BR4,  11

;4:   %IF LBL(JMP(I))<0 %THEN LBL(JMP(I))=BT NEXT   ;! NEXT BAT POSITION
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  22
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR4,  24
         LOAD  ACC,  ACC,  0
         BNL   ACC,  ,      BT+335
         BAL   WK,   ,      BT+125
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  22
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR4,  24
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     I=I+1
         LOAD  ACC,  BR4,  11
         ADD   ACC,  ,      CT+609
         STR   ACC,  BR4,  11

;     %IF I<K %THEN ->4                             ;! MORE TO FILL IN
         LOAD  ACC,  BR4,  11
         SUB   ACC,  BR4,  13
         BL    ACC,  ,      BT+334

;     I=1
         LDA   ACC,  ,     1
         STR   ACC,  BR4,  11

;7:   AP=CAP(I)                                     ;! ANAL REC POINTER FOR 1ST EXPR OF COMP
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  16
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR1,  10

;     SCF=1                                         ;! SET FLAG FOR SEXPR
         LDA   ACC,  ,     1
         STR   ACC,  BR1,  22

;     SEXPR                                         ;! TO EVALUATE (1ST - 2ND)
         BAL   WK,   ,      BT+258

;     %IF TF(I)=1 %THEN L=FALSE(COMP) %ELSE L=TRUE(COMP)
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  20
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+610
         BNZ   ACC,  ,      BT+337
         LOAD  ACC,  BR1,  21
         ADD   ACC,  BR1,  59
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  14
         B     ,     ,      BT+338
         LOAD  ACC,  BR1,  21
         ADD   ACC,  BR1,  57
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  14

;     DUMP(L,M'ACC',M'BT',LBL(JMP(I)))              ;! BRANCH TO REQUIRED POSITION
         LOAD  ACC,  BR4,  14
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+611
         STR   ACC,  STP,  11
         LDA   ACC,  ,     16980
         STR   ACC,  STP,  12
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  22
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR4,  24
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     %IF LBL(I)>=0 %AND (I\=K-1 %OR TF(I)=1) %THEN BAT(LBL(I))=CA
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  24
         LOAD  ACC,  ACC,  0
         BL    ACC,  ,      BT+339
         LOAD  ACC,  BR4,  13
         SUB   ACC,  ,      CT+612
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  11
         SUB   ACC,  BR4,  2
         BNZ   ACC,  ,      BT+340
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  20
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+613
         BNZ   ACC,  ,      BT+339
         LOAD  ACC,  BR1,  20
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  24
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR1,  33
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     I=I+1                                         ;!         FILL IN LABEL ADDRESS
         LOAD  ACC,  BR4,  11
         ADD   ACC,  ,      CT+614
         STR   ACC,  BR4,  11

;     %IF I<K %THEN ->7                             ;! MORE COMPARISONS YET
         LOAD  ACC,  BR4,  11
         SUB   ACC,  BR4,  13
         BL    ACC,  ,      BT+336

;     LABEL=LBL(K)                                  ;! FINAL LABEL
         LOAD  ACC,  BR4,  13
         ADD   ACC,  BR4,  24
         LOAD  ACC,  ACC,  0
         LOAD  WK,   BR4,  10
         STR   ACC,  WK,   0

;     AP=APP                                        ;! FINAL ANALYSIS RECORD POINTER
         LOAD  ACC,  BR4,  15
         STR   ACC,  BR1,  10

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%ROUTINE STORE(%INTEGER FT)
FT PAR NOT AS SPEC 
         B     ,     ,      BT+341
         STR   BR5,  STP,  0
         LDA   BR5,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+615

;! STORE LEVEL & TRUE/FALSE FLAG

;     %IF I>16 %THEN %START                     ;! ARRAYS FULL
         LOAD  ACC,  BR4,  11
         SUB   ACC,  ,      CT+616
         BNG   ACC,  ,      BT+342

;        FAULT(M'COND',M'N TO',M'O LO',M'NG  ')
         LOAD  ACC,  ,      CT+617
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+618
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+619
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+620
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        I=1                                    ;! TO CONTINUE
         LDA   ACC,  ,     1
         STR   ACC,  BR4,  11

;        %FINISH

;     LVL(I)=L                                  ;! SAVE NESTING LEVEL
         LOAD  ACC,  BR4,  14
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  18
         LOAD  WK,   BR5,  2
         STR   WK,   ACC,  0

;     TF(I)=FT                                  ;! SAVE TRUE/FALSE FLAG
         LOAD  ACC,  BR5,  10
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  20
         LOAD  WK,   BR5,  2
         STR   WK,   ACC,  0

;     LBL(I)=-1                                 ;! SET 'LABEL NOT FILLED IN YET' FLAG
         LDA   ACC,  ,     1
         NEG   ACC,  ,     0
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  24
         LOAD  WK,   BR5,  2
         STR   WK,   ACC,  0

;     I=I+1                                     ;! NEXT ARRAY POSITION
         LOAD  ACC,  BR4,  11
         ADD   ACC,  ,      CT+621
         STR   ACC,  BR4,  11

;%END
         LDA   STP,  BR5,  0
         LOAD  BR5,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%ROUTINE SC
         B     ,     ,      BT+343
         STR   BR5,  STP,  0
         LDA   BR5,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+622

;     AP=AP+1
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+623
         STR   ACC,  BR1,  10

;     %IF A(AP-1)=2 %THEN %START
         LOAD  ACC,  BR1,  10
         SUB   ACC,  ,      CT+624
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+625
         BNZ   ACC,  ,      BT+344

;        L=L+1                               ;! NESTING LEVEL UP 1 FOR SUB-CONDITION
         LOAD  ACC,  BR4,  14
         ADD   ACC,  ,      CT+626
         STR   ACC,  BR4,  14

;        SC                                  ;! PROCESS SUB-<SC>
         BAL   WK,   ,      BT+328

;        COND                                ;! PROCESS SUB-<COND>
         BAL   WK,   ,      BT+329

;        L=L-1                               ;! NESTING LEVEL DOWN AFTER SUB-CONDITION
         LOAD  ACC,  BR4,  14
         SUB   ACC,  ,      CT+627
         STR   ACC,  BR4,  14

;        %FINISH %ELSE %START
         B     ,     ,      BT+345

;        CAP(I)=AP                           ;! ANAL REC POINTER FOR SIMPLE COMPARISON
         LOAD  ACC,  BR1,  10
         STR   ACC,  BR5,  2
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR4,  16
         LOAD  WK,   BR5,  2
         STR   WK,   ACC,  0

;        SKIP SEXPR                          ;! SKIP 1ST EXPR OF COMPARISON
         BAL   WK,   ,      BT+316

;        AP=AP+1                             ;! SKIP COMPARATOR
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+628
         STR   ACC,  BR1,  10

;        SKIP SEXPR                          ;! SKIP 2ND EXPR
         BAL   WK,   ,      BT+316

;        %FINISH

;%END
         LDA   STP,  BR5,  0
         LOAD  BR5,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%ROUTINE COND
         B     ,     ,      BT+346
         STR   BR5,  STP,  0
         LDA   BR5,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+629

;! PROCESS <COND> FOR SIMPLE COMPARISONS

;%INTEGER I

;     I=A(AP)                                ;! <COND>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR5,  10

;     AP=AP+1                                ;! AP ON <SC>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+630
         STR   ACC,  BR1,  10

;     %IF I\=3 %THEN %START                  ;! NOT NULL ALTERNATIVE OF <COND>
         LOAD  ACC,  BR5,  10
         SUB   ACC,  ,      CT+631
         BZ    ACC,  ,      BT+347

;1:      STORE(I)                            ;! SAVE %AND OR %OR TYPE OF CONDITION
         LOAD  ACC,  BR5,  10
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+330

;        SC                                  ;! PROCESS <SC>
         BAL   WK,   ,      BT+328

;        AP=AP+1                             ;! POINTER ON <ANDC>+1 OR <ORC>+1
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+632
         STR   ACC,  BR1,  10

;        %IF A(AP-1)=1 %THEN ->1             ;! MORE %ANDS OR %ORS
         LOAD  ACC,  BR1,  10
         SUB   ACC,  ,      CT+633
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+634
         BZ    ACC,  ,      BT+348

;        %FINISH

;%END
         LDA   STP,  BR5,  0
         LOAD  BR5,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE CHECK
         B     ,     ,      BT+350
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+635

;! CHECK LABELS ALL SET & STARTS MATCH FINISHES

;%INTEGER I,J

;     I=JUMP(LEVEL)                              ;! POINTER TO JUMP LIST FOR THIS LEVEL
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  39
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  10

;1:   %IF I\=0 %THEN %START                      ;! NO LABELS OR JUMPS USED AT THIS LEVEL
         LOAD  ACC,  BR4,  10
         BZ    ACC,  ,      BT+352

;        %IF BAT(TAG(I)&65535)<0 %THEN %START    ;! LABEL SET INCORRECTLY
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         AND   ACC,  ,      CT+636
         ADD   ACC,  BR1,  33
         LOAD  ACC,  ACC,  0
         BNL   ACC,  ,      BT+353

;           WRITE(TAG(I)>>16,1)                  ;! PRINT OUT LABEL NO OF LABEL NOT SET
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         SHR   ACC,  ,      CT+637
         STR   ACC,  STP,  10
         LDA   ACC,  ,     1
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+5

;           FAULT(M' LAB',M'EL N',M'OT S',M'ET  ')
         LOAD  ACC,  ,      CT+638
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+639
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+640
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+641
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;           %FINISH

;        I=RETURN CELL(I)                        ;! RETURN JUMP LIST CELL TO ASL
         LOAD  ACC,  BR4,  10
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+18
         STR   ACC,  BR4,  10

;        ->1 ; %FINISH
         B     ,     ,      BT+351

;     I=START(LEVEL)                             ;! LINK TO START LIST
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  53
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  10

;2:   %IF I\=0 %THEN %START                      ;! A CELL STILL IN LIST
         LOAD  ACC,  BR4,  10
         BZ    ACC,  ,      BT+355

;        FAULT(M'%FIN',M'ISH ',M'MISS',M'ING ')
         LOAD  ACC,  ,      CT+642
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+643
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+644
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+645
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        I=RETURN CELL(I)                        ;! POP UP CELL
         LOAD  ACC,  BR4,  10
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+18
         STR   ACC,  BR4,  10

;        ->2 ; %FINISH
         B     ,     ,      BT+354

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE UNSET
         B     ,     ,      BT+357
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+646

;! UNSET NAMES AND CHECK FOR MISSING ROUTINES

;%INTEGER I,J,K

;     I=NAME(LEVEL)                               ;! NAME LIST POINTER
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  45
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  10

;1:   %IF I\=0 %THEN %START                       ;! UNSET NAMES DECLARED AT THIS LEVEL
         LOAD  ACC,  BR4,  10
         BZ    ACC,  ,      BT+359

;        J=TAG(I)                                 ;! NAME IDENT NO
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  11

;        K=TAG(LINK(J))                           ;! TAG WORD AT TOP OF LIST
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  12

;        LINK(J)=RETURN CELL(LINK(J))             ;! POP UP CELL
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+18
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR1,  27
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;        %IF K>>28=4 %THEN %START                 ;! ROUTINE/FN TYPE
         LOAD  ACC,  BR4,  12
         SHR   ACC,  ,      CT+647
         SUB   ACC,  ,      CT+648
         BNZ   ACC,  ,      BT+360

;           %IF BAT(K&65535)<0 %THEN %START
         LOAD  ACC,  BR4,  12
         AND   ACC,  ,      CT+649
         ADD   ACC,  BR1,  33
         LOAD  ACC,  ACC,  0
         BNL   ACC,  ,      BT+361

;              PRINT NAME(J)
         LOAD  ACC,  BR4,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;              FAULT(M'ROUT',M'INE ',M'MISS',M'ING ')
         LOAD  ACC,  ,      CT+650
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+651
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+652
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+653
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;              %FINISH

;           K=K>>20&15                            ;! NO OF PARAMS
         LOAD  ACC,  BR4,  12
         SHR   ACC,  ,      CT+654
         AND   ACC,  ,      CT+655
         STR   ACC,  BR4,  12

;2:         %IF K\=0 %THEN %START                 ;! PARAMS PRESENT
         LOAD  ACC,  BR4,  12
         BZ    ACC,  ,      BT+363

;              LINK(J)=RETURN CELL(LINK(J))       ;! POP UP CELLS
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+18
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR1,  27
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;              K=K-1                              ;! PARAM COUNT
         LOAD  ACC,  BR4,  12
         SUB   ACC,  ,      CT+656
         STR   ACC,  BR4,  12

;              ->2 ; %FINISH
         B     ,     ,      BT+362

;           %FINISH

;        %IF LINK(J)=0 %THEN TAG(J)=0             ;! A PREVIOUS DECLARATION OF SAME NAME
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         BNZ   ACC,  ,      BT+364
         LDA   ACC,  ,     0
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  11
         ADD   ACC,  BR1,  25
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;        I=RETURN CELL(I)                         ;! RETURN NAME LIST CELL
         LOAD  ACC,  BR4,  10
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+18
         STR   ACC,  BR4,  10

;        ->1 ; %FINISH
         B     ,     ,      BT+358

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE PUSH START(%INTEGER FLAG,LABEL)
         B     ,     ,      BT+366
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+657

;! PUSHDOWN START/FINISH BLOCK INFORMATION

;%INTEGER I

;     I=NEWCELL
         BAL   WK,   ,      BT+17
         STR   ACC,  BR4,  12

;     TAG(I)=FLAG<<16!LABEL&65535                 ;! PACK FLAG & LABEL
         LOAD  ACC,  BR4,  11
         AND   ACC,  ,      CT+658
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  10
         SHL   ACC,  ,      CT+659
         OR    ACC,  BR4,  2
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  12
         ADD   ACC,  BR1,  25
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     LINK(I)=START(LEVEL)                        ;! PUSH CELL DOWN
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  53
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  12
         ADD   ACC,  BR1,  27
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     START(LEVEL)=I                              ;!  ONTO START LIST
         LOAD  ACC,  BR4,  12
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  53
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE ENTER(%INTEGER TYPE,ALLOC)
         B     ,     ,      BT+368
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+660

;! DUMP CODE FOR NEW LEVEL & INITIALISE LEVEL ARRAYS

;%INTEGER I

;     DUMP(M'STR',BR(LEVEL),M'STP',0)            ;! ENTRY SEQUENCE
         LOAD  ACC,  ,      CT+661
         STR   ACC,  STP,  10
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+662
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     DUMP(M'LDA',BR(LEVEL),M'STP',0)
         LOAD  ACC,  ,      CT+663
         STR   ACC,  STP,  10
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+664
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     DUMP(M'STR',M'WK',M'STP',1)
         LOAD  ACC,  ,      CT+665
         STR   ACC,  STP,  10
         LDA   ACC,  ,     22347
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+666
         STR   ACC,  STP,  12
         LDA   ACC,  ,     1
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     I=CT NEXT                                  ;! STATIC ALLOCATION HOLE IN CONST TABLE
         BAL   WK,   ,      BT+126
         STR   ACC,  BR4,  12

;     DUMP(M'ADD',M'STP',M'CT',I)
         LOAD  ACC,  ,      CT+667
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+668
         STR   ACC,  STP,  11
         LDA   ACC,  ,     17236
         STR   ACC,  STP,  12
         LOAD  ACC,  BR4,  12
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     STAR(LEVEL)=I                             ;! REMEMBER POSITION OF HOLE
         LOAD  ACC,  BR4,  12
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  41
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     JUMP(LEVEL)=0                              ;! NO JUMPS AT NEW LEVEL YET
         LDA   ACC,  ,     0
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  39
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     NAME(LEVEL)=0                              ;! NO NAMES AT NEW LEVEL YET
         LDA   ACC,  ,     0
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  45
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     RTP(LEVEL)=TYPE                            ;! BLOCK/ROUTINE/FN TYPE
         LOAD  ACC,  BR4,  10
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  47
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     CHPP(LEVEL)=CHP                            ;! SAVE CHARACTER ARRAY POINTER
         LOAD  ACC,  BR1,  17
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  51
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     START(LEVEL)=0                             ;! NO START/FINISH BLOCKS YET
         LDA   ACC,  ,     0
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  53
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     RAD(LEVEL)=ALLOC                           ;! NEXT RELATIVE ADDRESS TO BE ASSIGNED
         LOAD  ACC,  BR4,  11
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  55
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE RETURN
         B     ,     ,      BT+370
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+669

;! DUMP CODE FOR %RETURN

;     DUMP(M'LDA',M'STP',BR(LEVEL),0)             ;! RESTORE DIJKSTRA DISPLAY
         LOAD  ACC,  ,      CT+670
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+671
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     DUMP(M'LOAD',BR(LEVEL),M'STP',0)
         LOAD  ACC,  ,      CT+672
         STR   ACC,  STP,  10
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+673
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     DUMP(M'LOAD',M'WK',M'STP',1)
         LOAD  ACC,  ,      CT+674
         STR   ACC,  STP,  10
         LDA   ACC,  ,     22347
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+675
         STR   ACC,  STP,  12
         LDA   ACC,  ,     1
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     DUMP('B',0,M'WK',0)                         ;! BRANCH TO RETURN ADDRESS
         LDA   ACC,  ,     66
         STR   ACC,  STP,  10
         LDA   ACC,  ,     0
         STR   ACC,  STP,  11
         LDA   ACC,  ,     22347
         STR   ACC,  STP,  12
         LDA   ACC,  ,     0
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE RT
         B     ,     ,      BT+372
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+676

;! DUMP CODE FOR A ROUTINE OR FUNCTION CALL

;%INTEGER I,J,K,L,M,N,P

;     I=LINK(A(AP))                                      ;! LINK TO TAG FOR NAME
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  10

;     AP=AP+1                                            ;! AP ON <APP>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+677
         STR   ACC,  BR1,  10

;     J=TAG(I)                                           ;! TAG OF NAME
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  11

;     K=J>>20&15+1                                       ;! NO OF PARAMS +1
         LOAD  ACC,  BR4,  11
         SHR   ACC,  ,      CT+678
         AND   ACC,  ,      CT+679
         ADD   ACC,  ,      CT+680
         STR   ACC,  BR4,  12

;1:   K=K-1                                              ;! COUNT PARAMS
         LOAD  ACC,  BR4,  12
         SUB   ACC,  ,      CT+681
         STR   ACC,  BR4,  12

;     AP=AP+1                                            ;! AP ON <APP>+1
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+682
         STR   ACC,  BR1,  10

;     %IF A(AP-1)=2 %THEN %START                         ;! PARAMS ABSENT OR NO MORE TO PROCESS
         LOAD  ACC,  BR1,  10
         SUB   ACC,  ,      CT+683
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+684
         BNZ   ACC,  ,      BT+374

;        DUMP(M'BAL',M'WK',M'BT',J&65535)                ;! DUMP BRANCH TO ROUTINE/FN
         LOAD  ACC,  ,      CT+685
         STR   ACC,  STP,  10
         LDA   ACC,  ,     22347
         STR   ACC,  STP,  11
         LDA   ACC,  ,     16980
         STR   ACC,  STP,  12
         LOAD  ACC,  BR4,  11
         AND   ACC,  ,      CT+686
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        %IF K>0 %THEN FAULT(M'TOO ',M'FEW ',M'PARA',M'MS  ')
         LOAD  ACC,  BR4,  12
         BNG   ACC,  ,      BT+375
         LOAD  ACC,  ,      CT+687
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+688
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+689
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+690
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        %RETURN ; %FINISH
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     %IF K<=0 %THEN %START                              ;! MORE PARAMS THAN SPEC
         LOAD  ACC,  BR4,  12
         BG    ACC,  ,      BT+376

;        %IF K=0 %THEN FAULT(M'TOO ',M'MANY',M' PAR',M'AMS ') ;! ONLY MONITOR ONCE
         LOAD  ACC,  BR4,  12
         BNZ   ACC,  ,      BT+377
         LOAD  ACC,  ,      CT+691
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+692
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+693
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+694
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        ->2 ; %FINISH
         B     ,     ,      BT+378

;     I=LINK(I)                                          ;! LINK TO NEXT PARAM CELL
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  10

;     L=TAG(I)                                           ;! TAG OF PARAM
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  13

;     %IF L>>28=0 %THEN %START                           ;! SCALAR VALUE
         LOAD  ACC,  BR4,  13
         SHR   ACC,  ,      CT+695
         BNZ   ACC,  ,      BT+379

;        SEXPR                                           ;! COMPILE EXPRESSION
         BAL   WK,   ,      BT+258

;        ->3 ; %FINISH
         B     ,     ,      BT+380

;     %IF A(AP)=4 %AND A(AP+1)=1 %THEN ->4               ;! <+-\> IS NULL & <OPD> IS A NAME
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+696
         BNZ   ACC,  ,      BT+382
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+697
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+698
         BZ    ACC,  ,      BT+381

;5:   FAULT(M'NOT ',M'A NA',M'ME P',M'ARAM')
         LOAD  ACC,  ,      CT+699
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+700
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+701
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+702
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;2:   SKIP SEXPR                                         ;! SKIP INVALID PARAM TO CONTINUE
         BAL   WK,   ,      BT+316

;     ->1
         B     ,     ,      BT+373

;4:   M=LINK(A(AP+2))                                    ;! LINK TO TAG FOR PARAM NAME
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+703
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  14

;     %IF M=0 %THEN %START
         LOAD  ACC,  BR4,  14
         BNZ   ACC,  ,      BT+384

;        PRINT NAME(A(AP+2))
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+704
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;        FAULT(M'NAME',M' NOT',M' SET',M'    ')
         LOAD  ACC,  ,      CT+705
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+706
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+707
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+708
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        ->2 ; %FINISH
         B     ,     ,      BT+378

;     N=TAG(M)                                           ;! TAG OF PARAM NAME
         LOAD  ACC,  BR4,  14
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  15

;     %IF L>>28=1 %THEN %START                           ;! PARAM IS SCALAR NAME TYPE
         LOAD  ACC,  BR4,  13
         SHR   ACC,  ,      CT+709
         SUB   ACC,  ,      CT+710
         BNZ   ACC,  ,      BT+385

;        %IF N>>28=4 %THEN %START                        ;! ACTUAL NAME IS ROUTINE/FN TYPE
         LOAD  ACC,  BR4,  15
         SHR   ACC,  ,      CT+711
         SUB   ACC,  ,      CT+712
         BNZ   ACC,  ,      BT+386

;           PRINT NAME(A(AP+2))
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+713
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;           ->5 ; %FINISH
         B     ,     ,      BT+383

;        %IF N>>28>=2 %THEN %START                       ;! ACTUAL NAME IS AN ARRAY
         LOAD  ACC,  BR4,  15
         SHR   ACC,  ,      CT+714
         SUB   ACC,  ,      CT+715
         BL    ACC,  ,      BT+387

;           AP=AP+2                                      ;! AP ON <NAME>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+716
         STR   ACC,  BR1,  10

;           ARRAD                                        ;! CALCULATE ARRAY ELEMENT ADDRESS
         BAL   WK,   ,      BT+133

;           AP=AP+1                                      ;! AP ON <EXPR>+1 - SHOULD BE <EXPS>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+717
         STR   ACC,  BR1,  10

;           %IF A(AP-1)=1 %THEN ->5                      ;! FURTHER OPERAND - INVALID
         LOAD  ACC,  BR1,  10
         SUB   ACC,  ,      CT+718
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+719
         BZ    ACC,  ,      BT+383

;           ->3 ; %FINISH
         B     ,     ,      BT+380

;        %IF A(AP+3)=1 %THEN %START                      ;! <APP> NOT NULL
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+720
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+721
         BNZ   ACC,  ,      BT+388

;           PRINT NAME(A(AP+2))
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+722
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;           FAULT(M'SCAL',M'AR H',M'AS P',M'ARAM')
         LOAD  ACC,  ,      CT+723
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+724
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+725
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+726
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;           ->2 ; %FINISH
         B     ,     ,      BT+378

;        %IF A(AP+4)=1 %THEN ->5                         ;! FURTHER OPERANDS - INVALID
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+727
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+728
         BZ    ACC,  ,      BT+383

;        %IF N>>28=1 %THEN P=M'LOAD' %ELSE P=M'LDA'      ;! LOAD FOR NAME TYPE & LDA FOR VALUE TYPE
         LOAD  ACC,  BR4,  15
         SHR   ACC,  ,      CT+729
         SUB   ACC,  ,      CT+730
         BNZ   ACC,  ,      BT+389
         LOAD  ACC,  ,      CT+731
         STR   ACC,  BR4,  16
         B     ,     ,      BT+390
         LOAD  ACC,  ,      CT+732
         STR   ACC,  BR4,  16

;        DUMP(P,M'ACC',BR(N>>16&15),N&65535)
         LOAD  ACC,  BR4,  16
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+733
         STR   ACC,  STP,  11
         LOAD  ACC,  BR4,  15
         SHR   ACC,  ,      CT+734
         AND   ACC,  ,      CT+735
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR4,  15
         AND   ACC,  ,      CT+736
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        %FINISH %ELSE %START                            ;! PARAM IS ARRAY NAME
         B     ,     ,      BT+391

;        %IF A(AP+3)\=2 %OR A(AP+4)\=2 %THEN ->5         ;! <APP> NOT NULL OR MORE OPERANDS
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+737
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+738
         BNZ   ACC,  ,      BT+383
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+739
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+740
         BNZ   ACC,  ,      BT+383

;        %IF N>>28&2=0 %THEN %START                      ;! 'FORM' OF ACTUAL IS NOT ARRAY
         LOAD  ACC,  BR4,  15
         SHR   ACC,  ,      CT+741
         AND   ACC,  ,      CT+742
         BNZ   ACC,  ,      BT+392

;           PRINT NAME(A(AP+2))
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+743
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;           FAULT(M'NOT ',M'AN A',M'RRAY',M' NME')
         LOAD  ACC,  ,      CT+744
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+745
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+746
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+747
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;           ->2 ; %FINISH
         B     ,     ,      BT+378

;        %IF N>>28=3 %THEN %START                        ;! ACTUAL IS ARRAY NAME
         LOAD  ACC,  BR4,  15
         SHR   ACC,  ,      CT+748
         SUB   ACC,  ,      CT+749
         BNZ   ACC,  ,      BT+393

;           M=N&65535                                    ;! POINTER TO TAG CELL OF PARAM LIST
         LOAD  ACC,  BR4,  15
         AND   ACC,  ,      CT+750
         STR   ACC,  BR4,  14

;           N=TAG(M)                                     ;! CORRECT TAG FOR PARAM
         LOAD  ACC,  BR4,  14
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  15

;           %FINISH

;        %IF N>>20&15\=L>>20&15 %THEN %START             ;! DIMENSIONS DIFFERENT
         LOAD  ACC,  BR4,  13
         SHR   ACC,  ,      CT+751
         AND   ACC,  ,      CT+752
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  15
         SHR   ACC,  ,      CT+753
         AND   ACC,  ,      CT+754
         SUB   ACC,  BR4,  2
         BZ    ACC,  ,      BT+394

;           %IF L>>20&15=0 %THEN %START                  ;! FORMAL PARAM DIMENSION UNKNOWN
         LOAD  ACC,  BR4,  13
         SHR   ACC,  ,      CT+755
         AND   ACC,  ,      CT+756
         BNZ   ACC,  ,      BT+395

;              L=TAG(I)!N&15<<20                         ;! FILL FORMAL TAG WITH DIMENSION
         LDA   ACC,  ,     15
         SHL   ACC,  ,      CT+757
         AND   ACC,  BR4,  15
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         OR    ACC,  BR4,  2
         STR   ACC,  BR4,  13

;              TAG(I)=L                                  ;!  OF ACTUAL PARAM
         LOAD  ACC,  BR4,  13
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;              %FINISH %ELSE %START                      ;! DIMENSION OF FORMAL KNOWN
         B     ,     ,      BT+396

;              %IF N>>20&15=0 %THEN TAG(M)=TAG(M)!L&15<<20 %ELSE %START
         LOAD  ACC,  BR4,  15
         SHR   ACC,  ,      CT+758
         AND   ACC,  ,      CT+759
         BNZ   ACC,  ,      BT+397
         LDA   ACC,  ,     15
         SHL   ACC,  ,      CT+760
         AND   ACC,  BR4,  13
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  14
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         OR    ACC,  BR4,  2
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  14
         ADD   ACC,  BR1,  25
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0
         B     ,     ,      BT+398

;                                                        ;! FILL IN DIMENSION OF ACTUAL IF UNKNOWN

;                 PRINT NAME(A(AP+2))
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+761
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;                 FAULT(M'ARRA',M'Y DI',M'MENS',M'ION?')
         LOAD  ACC,  ,      CT+762
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+763
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+764
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+765
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;                 ->2 ; %FINISH
         B     ,     ,      BT+378

;              %FINISH

;           %FINISH

;        DUMP(M'LOAD',M'ACC',BR(N>>16&15),N&65535)
         LOAD  ACC,  ,      CT+766
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+767
         STR   ACC,  STP,  11
         LOAD  ACC,  BR4,  15
         SHR   ACC,  ,      CT+768
         AND   ACC,  ,      CT+769
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR4,  15
         AND   ACC,  ,      CT+770
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;        %IF L>>20&15\=1 %THEN %START                    ;! NOT 1-DIM ARRAY
         LOAD  ACC,  BR4,  13
         SHR   ACC,  ,      CT+771
         AND   ACC,  ,      CT+772
         SUB   ACC,  ,      CT+773
         BZ    ACC,  ,      BT+399

;           DUMP(M'STR',M'ACC',M'STP',L&65535)
         LOAD  ACC,  ,      CT+774
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+775
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+776
         STR   ACC,  STP,  12
         LOAD  ACC,  BR4,  13
         AND   ACC,  ,      CT+777
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(M'LOAD',M'ACC',BR(N>>16&15),N&65535+1)
         LOAD  ACC,  ,      CT+778
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+779
         STR   ACC,  STP,  11
         LOAD  ACC,  BR4,  15
         SHR   ACC,  ,      CT+780
         AND   ACC,  ,      CT+781
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR4,  15
         AND   ACC,  ,      CT+782
         ADD   ACC,  ,      CT+783
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           L=L+1
         LOAD  ACC,  BR4,  13
         ADD   ACC,  ,      CT+784
         STR   ACC,  BR4,  13

;           %FINISH

;        %FINISH

;     AP=AP+5                                            ;! AP ON <EXPS>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+785
         STR   ACC,  BR1,  10

;3:   DUMP(M'STR',M'ACC',M'STP',L&65535)
         LOAD  ACC,  ,      CT+786
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+787
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+788
         STR   ACC,  STP,  12
         LOAD  ACC,  BR4,  13
         AND   ACC,  ,      CT+789
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;     ->1
         B     ,     ,      BT+373

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE ARRAD
         B     ,     ,      BT+401
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+790

;! DUMP CODE TO CALCULATE ARRAY ELEMENT ADDRESS

;%INTEGER I,J,K,L

;     L=A(AP)
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  13

;     I=LINK(L)                                          ;! LINK TO TAG FOR NAME OF ARRAY
         LOAD  ACC,  BR4,  13
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  10

;     J=TAG(I)
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  11

;     %IF J>>28=3 %THEN %START                           ;! NAME IS AN ARRAY NAME
         LOAD  ACC,  BR4,  11
         SHR   ACC,  ,      CT+791
         SUB   ACC,  ,      CT+792
         BNZ   ACC,  ,      BT+402

;        I=J&65535                                       ;! SUBSTITUTE CORRECT TAG VALUE
         LOAD  ACC,  BR4,  11
         AND   ACC,  ,      CT+793
         STR   ACC,  BR4,  10

;        J=TAG(I)
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  11

;        %FINISH

;     AP=AP+2                                            ;! AP ON <APP>+1
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+794
         STR   ACC,  BR1,  10

;     %IF A(AP-1)=1 %THEN %START                         ;! INDEXES PRESENT
         LOAD  ACC,  BR1,  10
         SUB   ACC,  ,      CT+795
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+796
         BNZ   ACC,  ,      BT+403

;        SEXPR                                           ;! COMPILE EXPR FOR FIRST INDEX
         BAL   WK,   ,      BT+258

;        AP=AP+1                                         ;! AP ON <EXPS>+1
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+797
         STR   ACC,  BR1,  10

;        %IF A(AP-1)=1 %THEN %START                      ;! 2ND INDEX PRESENT
         LOAD  ACC,  BR1,  10
         SUB   ACC,  ,      CT+798
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+799
         BNZ   ACC,  ,      BT+404

;           DUMP(M'STR',M'ACC',BR(LEVEL),WS NEXT)        ;! STORE 1ST INDEX IN WORKSPACE
         LOAD  ACC,  ,      CT+800
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+801
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         BAL   WK,   ,      BT+127
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           SEXPR                                        ;! COMPILE EXPR FOR 2ND INDEX
         BAL   WK,   ,      BT+258

;           %IF A(AP)=1 %THEN %START                     ;! 3RD INDEX PRESENT
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         SUB   ACC,  ,      CT+802
         BNZ   ACC,  ,      BT+405

;              PRINT NAME(L)
         LOAD  ACC,  BR4,  13
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;              FAULT(M'TOO ',M'MANY',M' IND',M'EXES')
         LOAD  ACC,  ,      CT+803
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+804
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+805
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+806
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;              SKIP APP                                  ;! SKIP EXCESS INDEXES
         BAL   WK,   ,      BT+322

;              %FINISH %ELSE AP=AP+1                     ;! AP AFTER EXPRESSION
         B     ,     ,      BT+406
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+807
         STR   ACC,  BR1,  10

;           DUMP(M'MLT',M'ACC',BR(J>>16&15),J&65535)
         LOAD  ACC,  ,      CT+808
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+809
         STR   ACC,  STP,  11
         LOAD  ACC,  BR4,  11
         SHR   ACC,  ,      CT+810
         AND   ACC,  ,      CT+811
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR4,  11
         AND   ACC,  ,      CT+812
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           WS=WS-1                                      ;! RESTORE WORKSPACE POINTER
         LOAD  ACC,  BR2,  19
         SUB   ACC,  ,      CT+813
         STR   ACC,  BR2,  19

;           DUMP(M'ADD',M'ACC',BR(LEVEL),WS)
         LOAD  ACC,  ,      CT+814
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+815
         STR   ACC,  STP,  11
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR2,  19
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           DUMP(M'ADD',M'ACC',BR(J>>16&15),J&65535+1)
         LOAD  ACC,  ,      CT+816
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+817
         STR   ACC,  STP,  11
         LOAD  ACC,  BR4,  11
         SHR   ACC,  ,      CT+818
         AND   ACC,  ,      CT+819
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR4,  11
         AND   ACC,  ,      CT+820
         ADD   ACC,  ,      CT+821
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           K=2                                          ;! DIMENSION MARKER
         LDA   ACC,  ,     2
         STR   ACC,  BR4,  12

;           %FINISH %ELSE %START                         ;! ONLY ONE INDEX PRESENT
         B     ,     ,      BT+407

;           DUMP(M'ADD',M'ACC',BR(J>>16&15),J&65535)
         LOAD  ACC,  ,      CT+822
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+823
         STR   ACC,  STP,  11
         LOAD  ACC,  BR4,  11
         SHR   ACC,  ,      CT+824
         AND   ACC,  ,      CT+825
         ADD   ACC,  BR1,  49
         LOAD  ACC,  ACC,  0
         STR   ACC,  STP,  12
         LOAD  ACC,  BR4,  11
         AND   ACC,  ,      CT+826
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+129

;           K=1                                          ;! DIMENSION MARKER
         LDA   ACC,  ,     1
         STR   ACC,  BR4,  12

;           %FINISH

;        %IF K\=J>>20&15 %THEN %START                    ;! DIMS FOUND DO NOT AGREE WITH TAG
         LOAD  ACC,  BR4,  11
         SHR   ACC,  ,      CT+827
         AND   ACC,  ,      CT+828
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  12
         SUB   ACC,  BR4,  2
         BZ    ACC,  ,      BT+408

;           %IF J>>20&15=0 %THEN TAG(I)=TAG(I)!K<<20 %ELSE %C
;              PRINT NAME(L)
         LOAD  ACC,  BR4,  11
         SHR   ACC,  ,      CT+829
         AND   ACC,  ,      CT+830
         BNZ   ACC,  ,      BT+409
         LOAD  ACC,  BR4,  12
         SHL   ACC,  ,      CT+831
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         OR    ACC,  BR4,  2
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0
         B     ,     ,      BT+410
         LOAD  ACC,  BR4,  13
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;              FAULT(M'ARRA',M'Y DI',M'MENS',M'ION?')    ;! FILL IN DIMS IF UNKNOWN
         LOAD  ACC,  ,      CT+832
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+833
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+834
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+835
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;           %FINISH

;        %FINISH %ELSE %START
         B     ,     ,      BT+411

;        PRINT NAME(L)
         LOAD  ACC,  BR4,  13
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;        FAULT(M'NO A',M'RRAY',M' IND',M'EXES')
         LOAD  ACC,  ,      CT+836
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+837
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+838
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+839
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        %FINISH

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%INTEGERFN BT NEXT
         B     ,     ,      BT+413
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+840

;! ALLOCATE NEXT POSITION IN BRANCH TABLE

;     %IF BTN>1023 %THEN %START                 ;! FULL
         LOAD  ACC,  BR1,  15
         SUB   ACC,  ,      CT+841
         BNG   ACC,  ,      BT+414

;        FAULT(M'TOO ',M'MANY',M'LABE',M'LS  ')
         LOAD  ACC,  ,      CT+842
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+843
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+844
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+845
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        BTN=0                                  ;! TRY TO CONTINUE
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  15

;        %FINISH

;     BAT(BTN)=-1                               ;! MARKER FOR ADDRESS NOT FILLED IN YET
         LDA   ACC,  ,     1
         NEG   ACC,  ,     0
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR1,  15
         ADD   ACC,  BR1,  33
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     BTN=BTN+1                                 ;! NEXT POSITION
         LOAD  ACC,  BR1,  15
         ADD   ACC,  ,      CT+846
         STR   ACC,  BR1,  15

;     %RESULT=BTN-1                             ;! THIS POSITION
         LOAD  ACC,  BR1,  15
         SUB   ACC,  ,      CT+847
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         STOP  ,     ,     0
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%INTEGERFN CT NEXT
         B     ,     ,      BT+416
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+848

;! ALLOCATE NEXT POSITION IN CONSTANT TABLE

;     %IF CTN>1023 %THEN %START                 ;! FULL
         LOAD  ACC,  BR1,  16
         SUB   ACC,  ,      CT+849
         BNG   ACC,  ,      BT+417

;        FAULT(M'TOO ',M'MANY',M' CON',M'STS ')
         LOAD  ACC,  ,      CT+850
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+851
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+852
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+853
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        CTN=0                                  ;! TRY TO CONTINUE
         LDA   ACC,  ,     0
         STR   ACC,  BR1,  16

;        %FINISH

;     CTN=CTN+1                                 ;! NEXT POSITION
         LOAD  ACC,  BR1,  16
         ADD   ACC,  ,      CT+854
         STR   ACC,  BR1,  16

;     %RESULT=CTN-1                             ;! THIS POSITION
         LOAD  ACC,  BR1,  16
         SUB   ACC,  ,      CT+855
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         STOP  ,     ,     0
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%INTEGERFN WS NEXT
         B     ,     ,      BT+419
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+856

;! ALLOCATE NEXT WORK SPACE POSITION

;     WS=WS+1
         LOAD  ACC,  BR2,  19
         ADD   ACC,  ,      CT+857
         STR   ACC,  BR2,  19

;     %IF WS=11 %THEN FAULT(M'COMP',M'ILER',M' WKS',M'PACE')
         LOAD  ACC,  BR2,  19
         SUB   ACC,  ,      CT+858
         BNZ   ACC,  ,      BT+420
         LOAD  ACC,  ,      CT+859
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+860
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+861
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+862
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;     %RESULT=WS-1
         LOAD  ACC,  BR2,  19
         SUB   ACC,  ,      CT+863
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         STOP  ,     ,     0
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%INTEGERFN FIND LABEL
         B     ,     ,      BT+422
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+864

;! CHECK & LOCATE OR INSERT LABEL IN JUMP LIST FOR THIS LEVEL

;%INTEGER I,J

;     LABEL=A(AP)                               ;! VALUE OF CONST
         LOAD  ACC,  BR1,  10
         ADD   ACC,  BR1,  29
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR2,  20

;     AP=AP+1                                   ;! AFTER <CONST>
         LOAD  ACC,  BR1,  10
         ADD   ACC,  ,      CT+865
         STR   ACC,  BR1,  10

;     %IF LABEL>>16\=0 %THEN %START             ;! INVALID LABEL NUMBER
         LOAD  ACC,  BR2,  20
         SHR   ACC,  ,      CT+866
         BZ    ACC,  ,      BT+423

;        WRITE(LABEL,1)
         LOAD  ACC,  BR2,  20
         STR   ACC,  STP,  10
         LDA   ACC,  ,     1
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+5

;        SPACES(2)
         LDA   ACC,  ,     2
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+7

;        FAULT(M'INVA',M'LID ',M'LABE',M'L   ')
         LOAD  ACC,  ,      CT+867
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+868
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+869
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+870
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        %RESULT=-1                             ;! 'FAULTY' RESULT
         LDA   ACC,  ,     1
         NEG   ACC,  ,     0
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;        %FINISH

;     I=JUMP(LEVEL)                             ;! JUMP LIST POINTER
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  39
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  10

;1:   %IF I\=0 %THEN %START                     ;! SOMETHING IN LIST
         LOAD  ACC,  BR4,  10
         BZ    ACC,  ,      BT+425

;        %IF LABEL=TAG(I)>>16 %THEN %RESULT=TAG(I)&65535 ;! LABEL ALREADY IN
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         SHR   ACC,  ,      CT+871
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR2,  20
         SUB   ACC,  BR4,  2
         BNZ   ACC,  ,      BT+426
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         AND   ACC,  ,      CT+872
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;        I=LINK(I)                              ;! NEXT CELL IN LIST
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  10

;        ->1 ; %FINISH
         B     ,     ,      BT+424

;     I=NEWCELL                                 ;! LABEL NOT IN LIST SO GET NEW CELL
         BAL   WK,   ,      BT+17
         STR   ACC,  BR4,  10

;     J=BT NEXT                                 ;! GET NEXT BRANCH TABLE POSITION
         BAL   WK,   ,      BT+412
         STR   ACC,  BR4,  11

;     TAG(I)=LABEL<<16!J                        ;! FILL IN LIST ENTRY
         LOAD  ACC,  BR2,  20
         SHL   ACC,  ,      CT+873
         OR    ACC,  BR4,  11
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  25
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     LINK(I)=JUMP(LEVEL)                       ;! PUSHDOWN ONTO JUMP LIST
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  39
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  27
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     JUMP(LEVEL)=I                             ;! NEW JUMP LIST POINTER
         LOAD  ACC,  BR4,  10
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  39
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     %RESULT=J                                 ;! NEW BRANCH TABLE POSITION
         LOAD  ACC,  BR4,  11
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         STOP  ,     ,     0
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE STORE TAG(%INTEGER NAM,FORM,TYPE,DIM,LEV,AD)
         B     ,     ,      BT+428
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+874

;! STORE TAGS I.E. SET NAME & CHECK NOT SET ALREADY

;%INTEGER M,N

;     M=LINK(NAM)                               ;! POINTER TO EXISTING TAGS WORD FOR THIS
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  16

;     %IF M\=0 %AND LEV=TAG(M)>>16&15 %AND FORM\=4 %THEN %START
         LOAD  ACC,  BR4,  16
         BZ    ACC,  ,      BT+429
         LOAD  ACC,  BR4,  16
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         SHR   ACC,  ,      CT+875
         AND   ACC,  ,      CT+876
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  14
         SUB   ACC,  BR4,  2
         BNZ   ACC,  ,      BT+429
         LOAD  ACC,  BR4,  11
         SUB   ACC,  ,      CT+877
         BZ    ACC,  ,      BT+429

;        PRINT NAME(NAM)
         LOAD  ACC,  BR4,  10
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;        FAULT(M'NAME',M' SET',M' TWI',M'CE  ')
         LOAD  ACC,  ,      CT+878
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+879
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+880
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+881
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+15

;        %RETURN ; %FINISH
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     N=NEWCELL                                 ;! NEW CELL FOR TAGS
         BAL   WK,   ,      BT+17
         STR   ACC,  BR4,  17

;     TAG(N)=FORM<<28!TYPE<<24!DIM<<20!LEV<<16!AD ;! FILL IN TAGS
         LOAD  ACC,  BR4,  14
         SHL   ACC,  ,      CT+882
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  13
         SHL   ACC,  ,      CT+883
         STR   ACC,  BR4,  3
         LOAD  ACC,  BR4,  12
         SHL   ACC,  ,      CT+884
         STR   ACC,  BR4,  4
         LOAD  ACC,  BR4,  11
         SHL   ACC,  ,      CT+885
         OR    ACC,  BR4,  4
         OR    ACC,  BR4,  3
         OR    ACC,  BR4,  2
         OR    ACC,  BR4,  15
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  17
         ADD   ACC,  BR1,  25
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     LINK(N)=LINK(NAM)                         ;! PUSHDOWN ONTO TAGS LIST FOR THIS NAME
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  17
         ADD   ACC,  BR1,  27
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     LINK(NAM)=N
         LOAD  ACC,  BR4,  17
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  10
         ADD   ACC,  BR1,  27
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     N=NEWCELL
         BAL   WK,   ,      BT+17
         STR   ACC,  BR4,  17

;     TAG(N)=NAM                                ;! PUSHDOWN NEW CELL ONTO NAME LIST
         LOAD  ACC,  BR4,  10
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  17
         ADD   ACC,  BR1,  25
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     LINK(N)=NAME(LEVEL)                       ;!  FOR NAMES DECLARED AT THIS LEVEL
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  45
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR4,  17
         ADD   ACC,  BR1,  27
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;     NAME(LEVEL)=N
         LOAD  ACC,  BR4,  17
         STR   ACC,  BR4,  2
         LOAD  ACC,  BR1,  19
         ADD   ACC,  BR1,  45
         LOAD  WK,   BR4,  2
         STR   WK,   ACC,  0

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE DUMP(%INTEGER OP,REG,BASE,DISP)
         B     ,     ,      BT+431
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+886

;! PRINT OUT CURRENT ADDRESS, OPERATION MNEMONIC & OPERANDS

;%ROUTINESPEC PMN(%INTEGER I)

;%INTEGER COM

;     SPACES(10)
         LDA   ACC,  ,     10
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+7

;     COM=' '
         LDA   ACC,  ,     32
         STR   ACC,  BR4,  14

;     PMN(OP)                                   ;! OPERATOR MNEMONIC
         LOAD  ACC,  BR4,  10
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+432

;     COM=','
         LDA   ACC,  ,     44
         STR   ACC,  BR4,  14

;     PMN(REG)                                  ;! REGISTER MNEMONIC
         LOAD  ACC,  BR4,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+432

;     %IF DISP>=65536 %THEN %START
         LOAD  ACC,  BR4,  13
         SUB   ACC,  ,      CT+887
         BL    ACC,  ,      BT+433

;        PRINT SYMBOL(',')
         LDA   ACC,  ,     44
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;        SPACES(7)
         LDA   ACC,  ,     7
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+7

;        PRINT NAME(DISP-65536)
         LOAD  ACC,  BR4,  13
         SUB   ACC,  ,      CT+888
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+19

;        %FINISH %ELSE %START
         B     ,     ,      BT+434

;        %IF BASE=M'BT' %OR BASE=M'CT' %OR BASE=M'PRG' %THEN %START
         LOAD  ACC,  BR4,  12
         SUB   ACC,  ,      CT+889
         BZ    ACC,  ,      BT+435
         LOAD  ACC,  BR4,  12
         SUB   ACC,  ,      CT+890
         BZ    ACC,  ,      BT+435
         LOAD  ACC,  BR4,  12
         SUB   ACC,  ,      CT+891
         BNZ   ACC,  ,      BT+436

;           PRINT SYMBOL(',')
         LDA   ACC,  ,     44
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;           SPACES(7)
         LDA   ACC,  ,     7
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+7

;           %FINISH

;        PMN(BASE)                              ;! BASE MNEMONIC
         LOAD  ACC,  BR4,  12
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+432

;        WRITE(DISP,1)                          ;! DISPLACEMENT
         LOAD  ACC,  BR4,  13
         STR   ACC,  STP,  10
         LDA   ACC,  ,     1
         STR   ACC,  STP,  11
         BAL   WK,   ,      BT+5

;        %FINISH

;     NEWLINE
         BAL   WK,   ,      BT+8

;     CA=CA+1                                   ;! INCREMENT CURRENT ADDRESS COUNT
         LOAD  ACC,  BR1,  20
         ADD   ACC,  ,      CT+892
         STR   ACC,  BR1,  20

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%ROUTINE PMN(%INTEGER I)
I PAR NOT AS SPEC 
         B     ,     ,      BT+437
         STR   BR5,  STP,  0
         LDA   BR5,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+893

;! PRINT MNEMONIC - CHARS INTO ONE WORD

;%INTEGER J,K,L

;     J=2                                   ;! AT LEAST TWO SPACES
         LDA   ACC,  ,     2
         STR   ACC,  BR5,  11

;     K=24                                  ;! FIRST SHIFT VALUE
         LDA   ACC,  ,     24
         STR   ACC,  BR5,  12

;1:   L=I>>K&255                            ;! UNPACK NEXT CHARACTER
         LOAD  ACC,  BR5,  10
         SHR   ACC,  BR5,  12
         AND   ACC,  ,      CT+894
         STR   ACC,  BR5,  13

;     %IF L=0 %THEN J=J+1 %ELSE PRINT SYMBOL(L)
         LOAD  ACC,  BR5,  13
         BNZ   ACC,  ,      BT+439
         LOAD  ACC,  BR5,  11
         ADD   ACC,  ,      CT+895
         STR   ACC,  BR5,  11
         B     ,     ,      BT+440
         LOAD  ACC,  BR5,  13
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     K=K-8                                 ;! NEXT SHIFT VALUE
         LOAD  ACC,  BR5,  12
         SUB   ACC,  ,      CT+896
         STR   ACC,  BR5,  12

;     %IF K>=0 %THEN ->1                    ;! MORE CHARS POSSIBLY YET
         LOAD  ACC,  BR5,  12
         BNL   ACC,  ,      BT+438

;     %IF I=M'BT' %OR I=M'CT' %OR I=M'PRG' %THEN %C
;           PRINT SYMBOL('+') %ELSE %START
         LOAD  ACC,  BR5,  10
         SUB   ACC,  ,      CT+897
         BZ    ACC,  ,      BT+441
         LOAD  ACC,  BR5,  10
         SUB   ACC,  ,      CT+898
         BZ    ACC,  ,      BT+441
         LOAD  ACC,  BR5,  10
         SUB   ACC,  ,      CT+899
         BNZ   ACC,  ,      BT+442
         LDA   ACC,  ,     43
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3
         B     ,     ,      BT+443

;        PRINT SYMBOL(COM)
         LOAD  ACC,  BR4,  14
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;        SPACES(J)                          ;! TO ALLIGN FIELDS CORRECTLY
         LOAD  ACC,  BR5,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+7

;        %FINISH

;%END
         LDA   STP,  BR5,  0
         LOAD  BR5,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
50 LABEL NOT SET  
40 LABEL NOT SET  
30 LABEL NOT SET  
20 LABEL NOT SET  
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE FAULT(%INTEGER A,B,C,D)
         B     ,     ,      BT+445
         STR   BR3,  STP,  0
         LDA   BR3,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+900

;! MONITOR FAULT - A 'PRINT STRING' ROUTINE

;%ROUTINESPEC OUT(%INTEGER I)

;     OUT(A)
         LOAD  ACC,  BR3,  10
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+446

;     OUT(B)
         LOAD  ACC,  BR3,  11
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+446

;     OUT(C)
         LOAD  ACC,  BR3,  12
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+446

;     OUT(D)
         LOAD  ACC,  BR3,  13
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+446

;     NEWLINE
         BAL   WK,   ,      BT+8

;     FAULTS=FAULTS+1                     ;! INCREMENT FAULT COUNT
         LOAD  ACC,  BR1,  18
         ADD   ACC,  ,      CT+901
         STR   ACC,  BR1,  18

;! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

;%ROUTINE OUT(%INTEGER I)
I PAR NOT AS SPEC 
         B     ,     ,      BT+447
         STR   BR4,  STP,  0
         LDA   BR4,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+902

;! PRINT OUT PACKED CHARS

;     PRINT SYMBOL(I>>24)
         LOAD  ACC,  BR4,  10
         SHR   ACC,  ,      CT+903
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     PRINT SYMBOL(I>>16&255)
         LOAD  ACC,  BR4,  10
         SHR   ACC,  ,      CT+904
         AND   ACC,  ,      CT+905
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     PRINT SYMBOL(I>>8&255)
         LOAD  ACC,  BR4,  10
         SHR   ACC,  ,      CT+906
         AND   ACC,  ,      CT+907
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     PRINT SYMBOL(I&255)
         LOAD  ACC,  BR4,  10
         AND   ACC,  ,      CT+908
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;%END
         LDA   STP,  BR4,  0
         LOAD  BR4,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%INTEGERFN CH NEXT
         B     ,     ,      BT+449
         STR   BR3,  STP,  0
         LDA   BR3,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+909

;! ALLOCATE NEXT POSITION IN 'CH' ARRAY

;     %IF CHP>512 %THEN %START            ;! CHARACTER ARRAY FULL
         LOAD  ACC,  BR1,  17
         SUB   ACC,  ,      CT+910
         BNG   ACC,  ,      BT+450

;        FAULT(M'NAME',M'S TO',M'O LO',M'NG  ')
         LOAD  ACC,  ,      CT+911
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+912
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+913
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+914
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+444

;        %STOP ; %FINISH
         STOP  ,     ,     0

;     CHP=CHP+1
         LOAD  ACC,  BR1,  17
         ADD   ACC,  ,      CT+915
         STR   ACC,  BR1,  17

;     %RESULT=CHP-1
         LOAD  ACC,  BR1,  17
         SUB   ACC,  ,      CT+916
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         STOP  ,     ,     0
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%INTEGERFN NEWCELL
         B     ,     ,      BT+452
         STR   BR3,  STP,  0
         LDA   BR3,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+917

;! ALLOCATE NEW CELL FOR LIST PROCESSING

;%INTEGER I

;     %IF ASL=0 %THEN %START              ;! END OF AVAILABLE SPACE LIST
         LOAD  ACC,  BR1,  14
         BNZ   ACC,  ,      BT+453

;        FAULT(M'ASL ',M'EMPT',M'Y   ',M'   ')
         LOAD  ACC,  ,      CT+918
         STR   ACC,  STP,  10
         LOAD  ACC,  ,      CT+919
         STR   ACC,  STP,  11
         LOAD  ACC,  ,      CT+920
         STR   ACC,  STP,  12
         LOAD  ACC,  ,      CT+921
         STR   ACC,  STP,  13
         BAL   WK,   ,      BT+444

;        %STOP ; %FINISH
         STOP  ,     ,     0

;     I=ASL                               ;! POINTER TO TOP CELL OF ASL
         LOAD  ACC,  BR1,  14
         STR   ACC,  BR3,  10

;     ASL=LINK(ASL)                       ;! ASL POINTER TO NEXT CELL DOWN
         LOAD  ACC,  BR1,  14
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR1,  14

;     TAG(I)=0                            ;! CLEAR NEW CELL OUT
         LDA   ACC,  ,     0
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR3,  10
         ADD   ACC,  BR1,  25
         LOAD  WK,   BR3,  2
         STR   WK,   ACC,  0

;     LINK(I)=0
         LDA   ACC,  ,     0
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR3,  10
         ADD   ACC,  BR1,  27
         LOAD  WK,   BR3,  2
         STR   WK,   ACC,  0

;     %RESULT=I                           ;! INDEX TO NEW CELL
         LOAD  ACC,  BR3,  10
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         STOP  ,     ,     0
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%INTEGERFN RETURN CELL(%INTEGER I)
         B     ,     ,      BT+455
         STR   BR3,  STP,  0
         LDA   BR3,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+922

;! DEALLOCATE CELL AND RETURN IT TO ASL

;%INTEGER J

;     J=LINK(I)                           ;! PRESENT LINK VALUE OF CELL
         LOAD  ACC,  BR3,  10
         ADD   ACC,  BR1,  27
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  11

;     LINK(I)=ASL                         ;! LINK TO TOP OF ASL
         LOAD  ACC,  BR1,  14
         STR   ACC,  BR3,  2
         LOAD  ACC,  BR3,  10
         ADD   ACC,  BR1,  27
         LOAD  WK,   BR3,  2
         STR   WK,   ACC,  0

;     ASL=I                               ;! ASL POINTER TO RETURNED CELL
         LOAD  ACC,  BR3,  10
         STR   ACC,  BR1,  14

;     %RESULT=J                           ;! RETURN VALUE OF LINK
         LOAD  ACC,  BR3,  11
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;%END
         STOP  ,     ,     0
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ROUTINE PRINT NAME(%INTEGER I)
         B     ,     ,      BT+457
         STR   BR3,  STP,  0
         LDA   BR3,  STP,  0
         STR   WK,   STP,  1
         ADD   STP,  ,      CT+923

;! PRINT NAME FROM HASH POSITION

;%INTEGER J,K,L,M

;     J=TAG(I)                             ;! POINTER TO CH ARRAY
         LOAD  ACC,  BR3,  10
         ADD   ACC,  BR1,  25
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  11

;     K=CH(J)                              ;! LENGTH & FIRST 3 CHARS
         LOAD  ACC,  BR3,  11
         ADD   ACC,  BR1,  37
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  12

;     L=K>>24                              ;! NUMBER OF CHARS IN NAME
         LOAD  ACC,  BR3,  12
         SHR   ACC,  ,      CT+924
         STR   ACC,  BR3,  13

;     M=16                                 ;! FIRST SHIFT VALUE
         LDA   ACC,  ,     16
         STR   ACC,  BR3,  14

;1:   PRINT SYMBOL(K>>M&255)
         LOAD  ACC,  BR3,  12
         SHR   ACC,  BR3,  14
         AND   ACC,  ,      CT+925
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+3

;     L=L-1
         LOAD  ACC,  BR3,  13
         SUB   ACC,  ,      CT+926
         STR   ACC,  BR3,  13

;     %IF L=0 %THEN %START
         LOAD  ACC,  BR3,  13
         BNZ   ACC,  ,      BT+459

;        SPACES(2)
         LDA   ACC,  ,     2
         STR   ACC,  STP,  10
         BAL   WK,   ,      BT+7

;        %RETURN ; %FINISH
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;     M=M-8                                ;! NEXT SHIFT VALUE
         LOAD  ACC,  BR3,  14
         SUB   ACC,  ,      CT+927
         STR   ACC,  BR3,  14

;     %IF M<0 %THEN %START
         LOAD  ACC,  BR3,  14
         BNL   ACC,  ,      BT+460

;        J=J+1
         LOAD  ACC,  BR3,  11
         ADD   ACC,  ,      CT+928
         STR   ACC,  BR3,  11

;        K=CH(J)                           ;! NEXT WORD OF CHARS
         LOAD  ACC,  BR3,  11
         ADD   ACC,  BR1,  37
         LOAD  ACC,  ACC,  0
         STR   ACC,  BR3,  12

;        M=24
         LDA   ACC,  ,     24
         STR   ACC,  BR3,  14

;        %FINISH

;     ->1
         B     ,     ,      BT+458

;%END
         LDA   STP,  BR3,  0
         LOAD  BR3,  STP,  0
         LOAD  WK,   STP,  1
         B     ,     WK,   0

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

;%ENDOFPROGRAM
RETURN ROUTINE MISSING 
ENTER ROUTINE MISSING 
ARRAD ROUTINE MISSING 
RT ROUTINE MISSING 
SKIPAPP ROUTINE MISSING 
SKIPSEXPR ROUTINE MISSING 
DUMP ROUTINE MISSING 
STORETAG ROUTINE MISSING 
WSNEXT ROUTINE MISSING 
CTNEXT ROUTINE MISSING 
BTNEXT ROUTINE MISSING 
PUSHSTART ROUTINE MISSING 
UNSET ROUTINE MISSING 
CHECK ROUTINE MISSING 
FINDLABEL ROUTINE MISSING 
SEXPR ROUTINE MISSING 
SCCOND ROUTINE MISSING 
TOO FEW %ENDS   
         STOP  ,     ,     0
BT:
         B     ,     ,      READSYMBOL 
         B     ,     ,      NEXTSYMBOL 
         B     ,     ,      SKIPSYMBOL 
         B     ,     ,      PRINTSYMBOL 
         B     ,     ,      READ 
         B     ,     ,      WRITE 
         B     ,     ,      SPACE 
         B     ,     ,      SPACES 
         B     ,     ,      NEWLINE 
         B     ,     ,      NEWLINES 
         B     ,     ,      NEWPAGE 
         B     ,     ,      PRG+691
         B     ,     ,      PRG+970
         B     ,     ,      PRG+1115
         B     ,     ,      PRG+1543
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+139
         B     ,     ,      PRG+164
         B     ,     ,      PRG+637
         B     ,     ,      PRG+640
         B     ,     ,      PRG+686
         B     ,     ,      PRG+663
         B     ,     ,      PRG+672
         B     ,     ,      PRG+686
         B     ,     ,      PRG+969
         B     ,     ,      PRG+842
         B     ,     ,      PRG+894
         B     ,     ,      PRG+711
         B     ,     ,      PRG+741
         B     ,     ,      PRG+717
         B     ,     ,      PRG+725
         B     ,     ,      PRG+809
         B     ,     ,      PRG+744
         B     ,     ,      PRG+756
         B     ,     ,      PRG+758
         B     ,     ,      PRG+761
         B     ,     ,      PRG+769
         B     ,     ,      PRG+779
         B     ,     ,      PRG+789
         B     ,     ,      PRG+808
         B     ,     ,      PRG+840
         B     ,     ,      PRG+815
         B     ,     ,      PRG+830
         B     ,     ,      PRG+893
         B     ,     ,      PRG+848
         B     ,     ,      PRG+864
         B     ,     ,      PRG+861
         B     ,     ,      PRG+870
         B     ,     ,      PRG+888
         B     ,     ,      PRG+876
         B     ,     ,      PRG+878
         B     ,     ,      PRG+965
         B     ,     ,      PRG+902
         B     ,     ,      PRG+916
         B     ,     ,      PRG+939
         B     ,     ,      PRG+921
         B     ,     ,      PRG+933
         B     ,     ,      PRG+1114
         B     ,     ,      PRG+1078
         B     ,     ,      PRG+984
         B     ,     ,      PRG+993
         B     ,     ,      PRG+1033
         B     ,     ,      PRG+1001
         B     ,     ,      PRG+1016
         B     ,     ,      PRG+1039
         B     ,     ,      PRG+1076
         B     ,     ,      PRG+1045
         B     ,     ,      PRG+1047
         B     ,     ,      PRG+1076
         B     ,     ,      PRG+1076
         B     ,     ,      PRG+1072
         B     ,     ,      PRG+1076
         B     ,     ,      PRG+1110
         B     ,     ,      PRG+1096
         B     ,     ,      PRG+1542
         B     ,     ,      PRG+1219
         B     ,     ,      PRG+1413
         B     ,     ,      PRG+1129
         B     ,     ,      PRG+1136
         B     ,     ,      PRG+1144
         B     ,     ,      PRG+1168
         B     ,     ,      PRG+1193
         B     ,     ,      PRG+1175
         B     ,     ,      PRG+1182
         B     ,     ,      PRG+1193
         B     ,     ,      PRG+1202
         B     ,     ,      PRG+1412
         B     ,     ,      PRG+1245
         B     ,     ,      PRG+1250
         B     ,     ,      PRG+1261
         B     ,     ,      PRG+1274
         B     ,     ,      PRG+1280
         B     ,     ,      PRG+1306
         B     ,     ,      PRG+1305
         B     ,     ,      PRG+1314
         B     ,     ,      PRG+1337
         B     ,     ,      PRG+1387
         B     ,     ,      PRG+1347
         B     ,     ,      PRG+1369
         B     ,     ,      PRG+1365
         B     ,     ,      PRG+1393
         B     ,     ,      PRG+1386
         B     ,     ,      PRG+1537
         B     ,     ,      PRG+1440
         B     ,     ,      PRG+1487
         B     ,     ,      PRG+1450
         B     ,     ,      PRG+1471
         B     ,     ,      PRG+1486
         B     ,     ,      PRG+1518
         B     ,     ,      PRG+1493
         B     ,     ,      PRG+1498
         B     ,     ,      PRG+1500
         B     ,     ,      PRG+1518
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+2824
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+1587
         B     ,     ,      PRG+1592
         B     ,     ,      PRG+1697
         B     ,     ,      PRG+1733
         B     ,     ,      PRG+1840
         B     ,     ,      PRG+2173
         B     ,     ,      PRG+2613
         B     ,     ,      PRG+2671
         B     ,     ,      PRG+2718
         B     ,     ,      PRG+1607
         B     ,     ,      PRG+1639
         B     ,     ,      PRG+1636
         B     ,     ,      PRG+1627
         B     ,     ,      PRG+1685
         B     ,     ,      PRG+1657
         B     ,     ,      PRG+1665
         B     ,     ,      PRG+1682
         B     ,     ,      PRG+1693
         B     ,     ,      PRG+1728
         B     ,     ,      PRG+1722
         B     ,     ,      PRG+1752
         B     ,     ,      PRG+1827
         B     ,     ,      PRG+1787
         B     ,     ,      PRG+1807
         B     ,     ,      PRG+1824
         B     ,     ,      PRG+1836
         B     ,     ,      PRG+1995
         B     ,     ,      PRG+1847
         B     ,     ,      PRG+1974
         B     ,     ,      PRG+1990
         B     ,     ,      PRG+1999
         B     ,     ,      PRG+1999
         B     ,     ,      PRG+2029
         B     ,     ,      PRG+2161
         B     ,     ,      PRG+2069
         B     ,     ,      PRG+2152
         B     ,     ,      PRG+2195
         B     ,     ,      PRG+2284
         B     ,     ,      PRG+2211
         B     ,     ,      PRG+2218
         B     ,     ,      PRG+2230
         B     ,     ,      PRG+2246
         B     ,     ,      PRG+2284
         B     ,     ,      PRG+2269
         B     ,     ,      PRG+2272
         B     ,     ,      PRG+2297
         B     ,     ,      PRG+2365
         B     ,     ,      PRG+2341
         B     ,     ,      PRG+2303
         B     ,     ,      PRG+2364
         B     ,     ,      PRG+2504
         B     ,     ,      PRG+2492
         B     ,     ,      PRG+2393
         B     ,     ,      PRG+2412
         B     ,     ,      PRG+2435
         B     ,     ,      PRG+2435
         B     ,     ,      PRG+2491
         B     ,     ,      PRG+2443
         B     ,     ,      PRG+2475
         B     ,     ,      PRG+2504
         B     ,     ,      PRG+2504
         B     ,     ,      PRG+2609
         B     ,     ,      PRG+2548
         B     ,     ,      PRG+2551
         B     ,     ,      PRG+2609
         B     ,     ,      PRG+2560
         B     ,     ,      PRG+2586
         B     ,     ,      PRG+2603
         B     ,     ,      PRG+2642
         B     ,     ,      PRG+2659
         B     ,     ,      PRG+2742
         B     ,     ,      PRG+2686
         B     ,     ,      PRG+2693
         B     ,     ,      PRG+2706
         B     ,     ,      PRG+2742
         B     ,     ,      PRG+2763
         B     ,     ,      PRG+2778
         B     ,     ,      PRG+2790
         B     ,     ,      PRG+2805
         B     ,     ,      PRG+5977
         B     ,     ,      PRG+2863
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+-1
         B     ,     ,      PRG+2886
         B     ,     ,      PRG+2890
         B     ,     ,      PRG+2932
         B     ,     ,      PRG+2909
         B     ,     ,      PRG+2925
         B     ,     ,      PRG+2925
         B     ,     ,      PRG+2954
         B     ,     ,      PRG+2964
         B     ,     ,      PRG+3012
         B     ,     ,      PRG+3039
         B     ,     ,      PRG+3053
         B     ,     ,      PRG+3073
         B     ,     ,      PRG+3089
         B     ,     ,      PRG+3104
         B     ,     ,      PRG+3116
         B     ,     ,      PRG+3131
         B     ,     ,      PRG+3150
         B     ,     ,      PRG+3468
         B     ,     ,      PRG+3189
         B     ,     ,      PRG+3403
         B     ,     ,      PRG+3416
         B     ,     ,      PRG+3429
         B     ,     ,      PRG+3447
         B     ,     ,      PRG+3212
         B     ,     ,      PRG+3216
         B     ,     ,      PRG+3258
         B     ,     ,      PRG+3235
         B     ,     ,      PRG+3251
         B     ,     ,      PRG+3251
         B     ,     ,      PRG+3280
         B     ,     ,      PRG+3290
         B     ,     ,      PRG+3338
         B     ,     ,      PRG+3365
         B     ,     ,      PRG+3379
         B     ,     ,      PRG+3399
         B     ,     ,      PRG+3442
         B     ,     ,      PRG+3462
         B     ,     ,      PRG+3469
         B     ,     ,      PRG+4245
         B     ,     ,      PRG+3540
         B     ,     ,      PRG+3703
         B     ,     ,      PRG+3905
         B     ,     ,      PRG+3530
         B     ,     ,      PRG+3511
         B     ,     ,      PRG+3530
         B     ,     ,      PRG+3702
         B     ,     ,      PRG+3661
         B     ,     ,      PRG+3579
         B     ,     ,      PRG+3570
         B     ,     ,      PRG+3591
         B     ,     ,      PRG+3603
         B     ,     ,      PRG+3603
         B     ,     ,      PRG+3628
         B     ,     ,      PRG+3611
         B     ,     ,      PRG+3617
         B     ,     ,      PRG+3636
         B     ,     ,      PRG+3698
         B     ,     ,      PRG+3679
         B     ,     ,      PRG+3904
         B     ,     ,      PRG+3719
         B     ,     ,      PRG+3848
         B     ,     ,      PRG+3755
         B     ,     ,      PRG+3834
         B     ,     ,      PRG+3813
         B     ,     ,      PRG+3805
         B     ,     ,      PRG+3797
         B     ,     ,      PRG+3812
         B     ,     ,      PRG+3864
         B     ,     ,      PRG+3834
         B     ,     ,      PRG+3864
         B     ,     ,      PRG+3867
         B     ,     ,      PRG+3900
         B     ,     ,      PRG+3899
         B     ,     ,      PRG+4241
         B     ,     ,      PRG+4100
         B     ,     ,      PRG+3924
         B     ,     ,      PRG+3968
         B     ,     ,      PRG+3948
         B     ,     ,      PRG+3953
         B     ,     ,      PRG+4027
         B     ,     ,      PRG+4018
         B     ,     ,      PRG+4026
         B     ,     ,      PRG+4095
         B     ,     ,      PRG+4085
         B     ,     ,      PRG+4052
         B     ,     ,      PRG+4095
         B     ,     ,      PRG+4237
         B     ,     ,      PRG+4123
         B     ,     ,      PRG+4143
         B     ,     ,      PRG+4199
         B     ,     ,      PRG+4179
         B     ,     ,      PRG+4195
         B     ,     ,      PRG+4204
         B     ,     ,      PRG+4224
         B     ,     ,      PRG+4233
         B     ,     ,      PRG+4246
         B     ,     ,      PRG+4284
         B     ,     ,      PRG+4250
         B     ,     ,      PRG+4261
         B     ,     ,      PRG+4271
         B     ,     ,      PRG+4271
         B     ,     ,      PRG+4285
         B     ,     ,      PRG+4304
         B     ,     ,      PRG+4289
         B     ,     ,      PRG+4300
         B     ,     ,      PRG+4305
         B     ,     ,      PRG+4631
         B     ,     ,      PRG+4558
         B     ,     ,      PRG+4596
         B     ,     ,      PRG+4513
         B     ,     ,      PRG+4354
         B     ,     ,      PRG+4356
         B     ,     ,      PRG+4418
         B     ,     ,      PRG+4420
         B     ,     ,      PRG+4434
         B     ,     ,      PRG+4442
         B     ,     ,      PRG+4459
         B     ,     ,      PRG+4463
         B     ,     ,      PRG+4499
         B     ,     ,      PRG+4491
         B     ,     ,      PRG+4557
         B     ,     ,      PRG+4531
         B     ,     ,      PRG+4595
         B     ,     ,      PRG+4580
         B     ,     ,      PRG+4591
         B     ,     ,      PRG+4627
         B     ,     ,      PRG+4623
         B     ,     ,      PRG+4610
         B     ,     ,      PRG+4632
         B     ,     ,      PRG+4695
         B     ,     ,      PRG+4640
         B     ,     ,      PRG+4671
         B     ,     ,      PRG+4666
         B     ,     ,      PRG+4675
         B     ,     ,      PRG+4691
         B     ,     ,      PRG+4696
         B     ,     ,      PRG+4786
         B     ,     ,      PRG+4704
         B     ,     ,      PRG+4782
         B     ,     ,      PRG+4767
         B     ,     ,      PRG+4747
         B     ,     ,      PRG+4751
         B     ,     ,      PRG+4767
         B     ,     ,      PRG+4777
         B     ,     ,      PRG+4787
         B     ,     ,      PRG+4822
         B     ,     ,      PRG+4823
         B     ,     ,      PRG+4915
         B     ,     ,      PRG+4916
         B     ,     ,      PRG+4964
         B     ,     ,      PRG+4965
         B     ,     ,      PRG+5358
         B     ,     ,      PRG+4987
         B     ,     ,      PRG+5024
         B     ,     ,      PRG+5020
         B     ,     ,      PRG+5038
         B     ,     ,      PRG+5037
         B     ,     ,      PRG+5071
         B     ,     ,      PRG+5051
         B     ,     ,      PRG+5343
         B     ,     ,      PRG+5073
         B     ,     ,      PRG+5062
         B     ,     ,      PRG+5062
         B     ,     ,      PRG+5098
         B     ,     ,      PRG+5187
         B     ,     ,      PRG+5117
         B     ,     ,      PRG+5135
         B     ,     ,      PRG+5157
         B     ,     ,      PRG+5170
         B     ,     ,      PRG+5172
         B     ,     ,      PRG+5340
         B     ,     ,      PRG+5219
         B     ,     ,      PRG+5230
         B     ,     ,      PRG+5293
         B     ,     ,      PRG+5259
         B     ,     ,      PRG+5293
         B     ,     ,      PRG+5277
         B     ,     ,      PRG+5293
         B     ,     ,      PRG+5340
         B     ,     ,      PRG+5359
         B     ,     ,      PRG+5554
         B     ,     ,      PRG+5386
         B     ,     ,      PRG+5538
         B     ,     ,      PRG+5485
         B     ,     ,      PRG+5436
         B     ,     ,      PRG+5439
         B     ,     ,      PRG+5501
         B     ,     ,      PRG+5537
         B     ,     ,      PRG+5525
         B     ,     ,      PRG+5528
         B     ,     ,      PRG+5550
         B     ,     ,      PRG+5555
         B     ,     ,      PRG+5594
         B     ,     ,      PRG+5573
         B     ,     ,      PRG+5595
         B     ,     ,      PRG+5627
         B     ,     ,      PRG+5613
         B     ,     ,      PRG+5628
         B     ,     ,      PRG+5658
         B     ,     ,      PRG+5647
         B     ,     ,      PRG+5659
         B     ,     ,      PRG+5759
         B     ,     ,      PRG+5696
         B     ,     ,      PRG+5700
         B     ,     ,      PRG+5723
         B     ,     ,      PRG+5718
         B     ,     ,      PRG+5760
         B     ,     ,      PRG+5860
         B     ,     ,      PRG+5798
         B     ,     ,      PRG+5861
         B     ,     ,      PRG+5973
         B     ,     ,      PRG+5920
         B     ,     ,      PRG+5892
         B     ,     ,      PRG+5915
         B     ,     ,      PRG+5901
         B     ,     ,      PRG+5907
         B     ,     ,      PRG+5969
         B     ,     ,      PRG+5928
         B     ,     ,      PRG+5938
         B     ,     ,      PRG+5941
         B     ,     ,      PRG+5955
         B     ,     ,      PRG+5959
         B     ,     ,      PRG+5965
         B     ,     ,      PRG+5978
         B     ,     ,      PRG+6029
         B     ,     ,      PRG+5999
         B     ,     ,      PRG+6025
         B     ,     ,      PRG+6030
         B     ,     ,      PRG+6061
         B     ,     ,      PRG+6047
         B     ,     ,      PRG+6062
         B     ,     ,      PRG+6106
         B     ,     ,      PRG+6078
         B     ,     ,      PRG+6107
         B     ,     ,      PRG+6133
         B     ,     ,      PRG+6134
         B     ,     ,      PRG+6187
         B     ,     ,      PRG+6151
         B     ,     ,      PRG+6168
         B     ,     ,      PRG+6182
CT:
         0
       256
      1023
         1
         1
      1023
   4346416
   4346417
   4346418
   4346419
   4346420
   4346421
   4346422
   4346423
   4346424
   4346425
1112682800
1112682801
1112682802
1112682803
1112682804
1112682805
   4345434
   4345434
   4345415
   4345420
   4345420
   4345415
1280262468
   5457996
   5458002
   4279876
   5787474
   4544592
   4475222
   5065812
   4277316
   5461314
   5129543
   5132116
        33
         1
         1
        59
1398361684
1096294463
 538976288
 538976288
        10
        59
         1
         1
        20
        66
        60
        61
        80
        60
         1
        39
        60
        44
        59
         1
        69
       256
         1
        12
        39
        39
        37
        65
        90
         1
        13
        62
         8
       256
         1
     99999
         1
         1
        12
        10
         1
        39
        10
        39
        39
        37
        65
        90
        32
        10
       128
         2
         2
        11
       300
1398030676
1296978976
1414483744
1280265799
         1
        15
         1
         1
         1
         1
         1
         1
         2
         1
         1
         1
        16
        65
        90
        77
       128
         1
        16
         1
        57
        90
         1
         8
        24
         4
        15
        15
         4
         1
         1
         1
       255
1145652052
1229934145
1381572678
1431063584
         1
        13
        77
       128
         1
         1
       128
         1
        39
       127
         8
         1
         1
         4
1398035017
1313284180
1330585676
1330530080
        48
        57
        48
         1
        57
         1
        21
         1
         1
         2
         3
         4
         5
         6
         7
         8
         9
         2
         2
         3
         1
         1
 626218049
1381244965
1162629957
 541007904
         1
         1
         3
1279345221
1277186885
1411404887
1229145376
1397773650
1229935955
 539313737
1313428296
     65535
        16
         1
         1
1415008032
 625298515
1163075617
 538976288
     65535
         1
         3
     65535
         1
         2
         1
         1
   5461074
   4277059
   4998209
   4277059
   4277059
         1
   5461314
   4277059
         1
   5461074
   4277059
         1
   5065812
   4277059
         1
   5461074
   4277059
   4998209
   4277059
   4277059
   5065812
   4277059
         2
   5461074
   4277059
         4
   5461074
   4277059
         2
         1
         1
         1
   5461314
   5461072
   5461074
   5461072
   4277316
   5461072
         1
1280262468
   4277059
         1
   5461074
   4277059
   5461314
   5461072
         2
   4998209
   4277059
   5461072
   5461314
   4277059
   5461074
   4277059
         1
   4277316
   5461072
         3
         2
         2
         1
         1
         1
         2
         3
         1
         1
         1
         1
        16
        24
        28
         1
        15
1414483744
1296125529
 542130514
1095586592
         1
         3
         2
         1
         2
         1
         1
        16
        15
         1
     65536
         1
         2
        28
         4
        24
        15
1381245006
1330913345
1394627408
1162027040
     65535
1381244993
1347437889
1381179476
1464419141
        20
        15
1346458195
 542003028
 541152032
1397769539
        20
1346458144
1313821728
1095966803
1346716448
         1
1312902469
 542328148
 542398281
1128603680
         2
     65535
        15
1414483744
1296125529
 541869398
1162629920
         1
        28
         3
        28
     65535
         1
1398034256
         1
         1
1163412293
1397956645
1162757152
 538976288
 625100103
1229856837
1481921089
 538976288
        10
 625100103
1229856846
1330913350
1230132052
         1
1414483744
1178949408
 625299012
1394614304
1398034256
   5263943
         1
 541475157
1280594720
1229856848
1380927309
        14
         1
         1
         2
         3
         4
         5
1398034256
1312902469
 542003028
 542328148
         1
         2
        24
        64
1313821728
1380930900
1229866272
1312902469
         1
        28
         4
1312902469
 542003028
 541139012
1163088974
         1
         2
   5461074
   4277059
         1
1280262468
   5461074
   4277059
         1
1280262468
        16
        15
     65535
   5461074
   4277059
   5461074
   4277059
        16
        15
     65535
         1
         1
1396916556
1095901256
1095966800
1095909709
   5263943
         1
 541475157
1280594720
1229856848
1380927309
        14
         1
         1
         2
         3
         4
         5
1398034256
1312902469
 542003028
 542328148
         1
         2
        24
        64
1313821728
1380930900
1229866272
1312902469
         1
        28
         4
1312902469
 542003028
 541139012
1163088974
         1
         2
   5461074
   4277059
         1
1280262468
   5461074
   4277059
         1
1280262468
        16
        15
     65535
   5461074
   4277059
   5461074
   4277059
        16
        15
     65535
         1
         1
1396916556
1095901256
1095966800
1095909709
 626218049
1381244991
 538976288
 538976288
 626148692
1431457312
1129270868
1163416608
 626148691
1431065632
1129270868
1163416608
        16
         1
         3
         4
         2
         5
         1
         1
         1
        14
         1
         1
         4
         9
         1
         3
         1
         2
         1
         2
         1
         1
         1
         2
         1
        12
        32
1163415634
 542396239
 541871950
1193287712
         1
        16
         1
         1
         1
1312902469
 542003028
 542328148
        28
         1
         1
         4
        24
        15
         1
1381245006
1095583008
1229856837
1481658912
         2
         1
         1
1396916556
1095901256
1095966800
1095909709
         1
         1
         1
        10
         1
        14
         1
         1
   4277059
   5461074
   4277059
         1
   4277059
         2
   5461074
   4277059
         1
   4277059
        14
1280262468
   4277059
   4277059
        28
         1
1280262468
        16
        15
     65535
   4277059
   4277059
        16
        15
     65535
     65535
   4277059
   4998209
   4277059
        10
         2
         1
         3
         1
         2
         1
         1
         1
         1
        10
         1
         1
         1
        26
         1
         1
         1
         2
         1
         1
         1
         1
   4277059
         1
         1
         1
        11
        16
1129270852
1310741583
1327516751
1313284128
         1
        10
         1
         1
         2
         1
         1
         1
        11
         1
         3
         1
         1
         1
        12
     65535
        16
 541868354
1162616910
1330913363
1163141152
 625363278
1230194720
1296651091
1229866784
        13
        28
         4
     65535
1380930900
1229866272
1296651091
1229866784
        20
        15
         1
        13
     65535
        16
        13
   5461074
   5461072
   4998209
   5461072
   5461074
   5461072
   4277316
   5461072
        10
   4998209
   5461072
1280262468
   5461072
1280262468
   5461072
        17
         1
        20
        15
         1
         1
         1
         1
         2
   4342092
     65535
1414483744
1178949408
1346458177
1297293344
1414483744
1296125529
 542130514
1095586592
        28
         4
         1
         1
1313821728
1092636225
1296375888
1095909709
         2
         2
1312902469
 542003028
 542328148
 538976288
        28
         1
        28
         4
         2
        28
         2
         2
         1
         1
         1
         3
         1
         2
1396916556
1095901256
1095966800
1095909709
         4
         1
        28
         1
1280262468
   4998209
   4277059
        16
        15
     65535
         3
         2
         4
         2
        28
         2
         2
1313821728
1095639105
1381122393
 542002501
        28
         3
     65535
        20
        15
        20
        15
        20
        15
        20
        20
        15
        20
         2
1095914049
1495286857
1296387667
1229934143
1280262468
   4277059
        16
        15
     65535
        20
        15
         1
   5461074
   4277059
   5461072
     65535
1280262468
   4277059
        16
        15
     65535
         1
         1
         5
   5461074
   4277059
   5461072
     65535
        14
        28
         3
     65535
         2
         1
         1
         1
         1
         1
   5461074
   4277059
         1
1414483744
1296125529
 541675076
1163412819
         1
   5065812
   4277059
        16
        15
     65535
         1
   4277316
   4277059
   4277316
   4277059
        16
        15
     65535
         1
   4277316
   4277059
        16
        15
     65535
        20
        15
        20
        15
        20
1095914049
1495286857
1296387667
1229934143
1313808449
1381122393
 541675076
1163412819
        10
      1023
1414483744
1296125529
1279345221
1280516128
         1
         1
        10
      1023
1414483744
1296125529
 541282126
1398035232
         1
         1
        10
         1
        11
1129270608
1229735250
 542591827
1346454341
         1
        12
         1
        16
1229870657
1279869984
1279345221
1277173792
        16
     65535
        16
        18
        16
        15
         4
1312902469
 542328148
 542398281
1128603680
        16
        20
        24
        28
        15
     65536
     65536
     16980
     17236
   5263943
         1
        14
       255
         1
         8
     16980
     17236
   5263943
        14
         1
        11
        24
        16
       255
         8
       255
       255
        10
       512
1312902469
1394627663
1327516751
1313284128
         1
         1
        11
1095978016
1162694740
1495277600
   2105376
        12
        15
        24
       255
         1
         8
         1
;31 FAULTS IN PROGM
