%M  %CODE 
%BEGIN 
%INTEGER  I,J,K,NLIB,LFLAG,DEVNO, LISTFLAG,M10,M13
 
%INTEGER  LINE,LENGTH,Q,N0,NUM,NEXT,V,FAULTY,N,NR
%INTEGER  R,QU,PLABEL,LEVEL,MC SWITCH, PERM,AFLAG,DFLAG,OVERFLAG
%INTEGER V0,PPSTART,PP CURR,ABC,FFLAG
%INTEGER  PT BLOCK,PCH SUM, PTDEV,PL START,PL CURR, PS START
%INTEGER  PS CURR,COMPILER,DIAGS
%INTEGER  TIME LIMIT, MARKER 1, MARKER 2, Q5, Q6, Q7
%INTEGER %ARRAY  ST(-3:2300),A(1:400),WORD,TAGS(-1:340),%C
SL(1:120),LETT(1:620)
%INTEGERARRAY CC(0:300)
%INTEGER %ARRAY  CYCLE,NAME,LABEL,JUMP,FLAG,RAL,SET,L,M %C
,ARRDIM(0:10)
%INTEGER %ARRAY  RA(-3:200),PP BUF, PL BUF, PS BUF(-3:99),T(1:7)
%REAL  A', A''
%ROUTINE %SPEC  COMPARE
%ROUTINE %SPEC  CSS
%ROUTINE %SPEC  SPLASH(%INTEGER  WARNING,%INTEGER %NAME  FROM)
%ROUTINE %SPEC  INITIALISE
%ROUTINE %SPEC DPCA
%INTEGER  %FN %SPEC  CA
T(1)=5
T(2)=6
T(3)=15
T(4)=8
T(5)=9
T(6)=15
T(7)=8
TIME LIMIT = 120
*ZERO; *NOT; *SHL-9; *SET 47; *FLOAT; **=A''
ABC=0
*JS98P
%CYCLE J=1,1,5; SKIP SYMBOL; %REPEAT
READ(K)
%INTEGERARRAY CLETT(1:K)
%CYCLE J=1,1,K; READ(CLETT(J)); %REPEAT
READ(K)
%INTEGERARRAY SYMBOL (1300:K)
%CYCLE J=1300,1,K; READ(SYMBOL(J)); %REPEAT
READ(K)
LFLAG=0; LISTFLAG=0; NLIB=90
*SET58P:; *=E160
DIAGS=0
OVERFLAG = 1
DFLAG = 0
FAULTY=0
N0=4
N = 2
NR = 0
MC SWITCH = 0
PERM = 1
COMPILER = 1
QU = 1
PLABEL = 50000
LEVEL = 0
%CYCLE  J = 2300,-1,801
ST(J) = J-1
%REPEAT 
ST(800) = 0
J = -1
%CYCLE  I = 0,1,10
ARRDIM(I)=0
CYCLE (I) = J
NAME (I) = J
LABEL (I) = J
JUMP (I) = J
%REPEAT 
%CYCLE  I = 0,1,330
TAGS (I) = J
%REPEAT 
%CYCLE  I = 1,1,120
SL(I) = 0 ; RA(I)=0
%REPEAT 

%COMMENT  INITIALISATION
320:    *  SET 2300
        *  DUP
        *  = I9
        * = C9
        ** `ST(0)
        *  = M9
        PP CURR = 300 * 32768 ; %COMMENT  0/150/0
        INITIALISE
        -> 342
%ROUTINE  INITIALISE
        *C0 TO Q1
        *C0 TO Q3
        *  C0 TO Q4
        *  SET 419
        *  = M13
        *  M0M13
        *  DUP
        ** = PT DEV
        *  = C15
        **COMPILER; *J1=Z
        *  SET 5
        *  = M15
        *  PMDQ15 ; %COMMENT  REWIND
        *  PMAQ15 ; %COMMENT  SKIP LABEL, CALL, AND POSSIBLY COMPILER
1:        V0 = 65535
        PT BLOCK = 0
        P CH SUM = 0
        PL CURR = 0
        PS CURR = 65536
        ** ` PP BUF (0)
        ** = PP START
        ** ` PL BUF (0)
        ** = PL START
        ** ` PS BUF (0)
        ** = PS START
        %CYCLE  I = -3,1,99
        PP BUF (I) = 0
        PL BUF (I) = 0
        PS BUF (I) = 0
        %REPEAT 
%END 

50P:    ** PP START
        *  = M14
        ** PP CURR
        *  = Q15
304:    *  C15
        *  NOT
        *  NEG
        *  DUP
        *  SET -8
        *  XD
        *  CONT
        *  = C15
        *  REV
        *  SET 255
        *  AND
        *  SHC C15
        *  M14 M15
        *  OR
        *  = M14 M15
        *  SET 6
        *  J301#
        *  ERASE
        *  C0 TO Q15
54P:    *  SET 1
        *  = + M15
        *  SET 100
        * M15
        *  J 302#
        *  M0 TO Q 15

        *  = + I 15
        *  Q14
        *  Q15
        SPLASH (0,PP BUF(0))
        *  = Q15
        *  = Q14
        -> 303
301:    *  = C15
        -> 303
302:    *  ERASE
303:    *  DC 14
        *  J304 C14 NZ
        *  Q15
        ** = PP CURR
        *  EXIT 1

52P:    ** PS START
        ** PS CURR
        -> 316
51P:    ** PL START
        ** PL CURR
316:    *  = Q15
        *  = M14
        *  SET 2
        *  = C14
314:    *  C15
        *  SET 1
        *  DUP
        *  = + C15
        *  -
        *  DUP
        *  J310 = Z
        *  J311 > Z
        *  SHL 32
        *  = M14M15
        -> 312
310:    *  ERASE
        ** V0
        *  AND
        *  SHL 16
        *  M14M15
        *  OR
        *  = M14M15
        -> 312


311:    ** V0
        *  AND
        *  M14M15
        *  OR
        *  = M14M15
        *  C0 TO Q15
        *  SET 1
        *  = + M15
        *  SET 100
        *  M15
        *  -
        *  J312 # Z
        *  M0 TO Q15
        *  Q14
        *  Q15
        *  I15
        *  J313 # Z
        SPLASH (1, PL BUF (0))
        -> 317
313:    SPLASH (2, PS BUF (0))
317:    *  = Q15
        *  = Q14
312:    *  DC14
        *  J314 C14 NZ
        *  Q15
        *  I15
        *  J315 # Z
        ** = PL CURR
        *  EXIT 1
315:    ** = PS CURR
        *  EXIT 1


%ROUTINE  SPLASH (%INTEGER  WARNING, %INTEGER %NAME  FROM)
%RETURN  %IF  FAULTY # 0
        ** ` FROM
        *  DUP
        *  = RM14
        *  SET 3
        *  -
        *  DUP
        *  = I 15
        *  SET 100
        *  = C14
        *  ZERO
        *  VR
2:      *  M0M14 Q
        *  +
        *  J1 NV
        *  NOT
        *  NEG
1:      *  J2 C14 NZ
        *  M-I14
        *  M14 TO Q15
        *  REV
        *  = M14
        **  PT BLOCK
        *  DUP
        *  = M0M14 Q
        *  NOT

        *  NEG
        ** = PT BLOCK
        ** WARNING
        *  = M0M14 Q
        *  DUP
        *  = M0M14 Q
        ** P CH SUM
        *  +
        *  J3 NV
        *  NOT
        *  NEG
3:      ** = P CH SUM
        ** PT DEV
        *  = C15
        *  POAQ 15; %COMMENT  MWQ 15
        *  SET 100
        *  = C14
5:      * ZERO
        *  = M0M14 Q
        *  J5 C14 NZ
        %END 

%ROUTINE DPCA
%INTEGER P
->1 %IF LFLAG=1
     **PP CURR
     *=Q14; *M+I14; *M14; *C14
     *SET 7; *AND; **=P
     WRITE(P,3)
     PRINT SYMBOL ('/')
     **=P
     WRITE(P,3)
1:%END

%INTEGER %FN  CA
        ** PP CURR
        *  DUP
        *  = Q14
        *  M+I 14
        *  SHL-19
        *  SET B 160000
        *  AND
        *  M14
        *  +
        %RETURN
%END 
%ROUTINE  DUMP
%INTEGER  I
%CAPTION   \\ PROGRAM _ (+ PERM) _ OCCUPIES
        ** CA
        *  SET B 17777
        *  AND
        ** = I
        WRITE(I+N0+NR,1)
        PRINT SYMBOL('(')
        WRITE(I,5)
        %CAPTION )_WORDS
        -> 8 %IF FAULTY = 0
        %CAPTION \PROGRAM _ FAULTY
%STOP
10:   %CAPTION \ PROGRAM _ TOO_ BIG\
      %STOP 
8:      ST(0) = N0
        ST(1) = NR
        ** PP CURR
        *  = Q15
        *M15; *I15; *+; *SET8191; *-; *J10>Z
        *  J1C15 NZ
        *  M15
        *  J 2 = Z
1:      SPLASH (0,PP BUF (0))
2:      ** PL CURR
        *  J3 = Z
        SPLASH (1, PL BUF (0))
3:      ** PS CURR
        *  = Q15
        *  J4 C15 NZ
        *  M15
        *  J5 = Z
4:      SPLASH (2, PS BUF (0))
5:      I=0
6:      SPLASH (3, ST(I))
        I = I + 100
        -> 6 %IF  I < N0
        I = 0
7:      SPLASH (4, RA(I))
        I = I + 100
        -> 7 %IF  I < NR
        ST(0) = P CH SUM
        SPLASH (7,ST(0))
        *E419;  *=RC15
        *ZERO; *NOT; **=WORD(-1)
        **@WORD(-1); *DUP; *=I15
        *SET341; *+; *=M15; *POAQ15
        **@LETT(1); *DUP; *=I15; *SET619
        *+; *=M15; *POAQ15;  *PMDQ15
        %CAPTION \PROGRAM _DUMPED \ COMPILING _ TIME ___
        * SET 9
        * OUT
        * SHL-24
        * SET 91P:
        * =M13
        * M0M13
        * -
        * JS 2P
        %CAPTION _/__
        * SET 3
        * OUT
        * SHL-24
        * SET 91P:
        * = M13
        * M0M13N
        * -
        * JS 2P
15:     *E384; *=Q15; *BUSYQ15; *J15TR
        NEWLINE
        ** TIME LIMIT
        ** PT DEV
        *SET4
        *  = M1
        *  Q0 TO Q11
        *  = C1     ; %COMMENT  DEVICE
        *  PMDQ1  ;  %COMMENT  REWIND
        * PMAQ1 ;   ! SKIP LABEL + 3 DUMMIES
        **COMPILER; *J14=Z; *MANUALQ1; *ZERO; *OUT
14:        *SET8; *=I15; *SET120; *=M15
           *C1TOQ15; *PIAQ15; *ZERO; *=LINK; *EXIT31;!TO LOADER
        %END 
342:    %COMMENT  SET UP $ AND ^2
        *  SET +2
        *  = M13
        *  SET B 401
        *  SHL +38
        *  = M13M9
        *  SET +3
        *  = M13
        *  SET B 40544
        *  = C14
        *  SET B 103755
        *  = I14
        *  SET B 50421
        *  = M14
        *  Q14
        *  = M13M9
        *ZERO
        **=NUM           ;! NUM = 0
        *ZERO
        *NOT
        *DUP
        **=LINE         ;! LINE = -1
        *NEG
        **=NEXT         ;! NEXT = 1

        **`A(0)
        *=M15
        *SET 48         ; ! '0'
        *=I15
        **`SYMBOL(0)
        *=C15
        *Q15
        **=Q5           ;! STORE   `SYMBOL(0)/'0'/`A(0)
        * I12           ; ! * SET 1
        *=RM15
 
        *Q15
        **=Q6           ;! STORE   `CWORD(0)/1/1
        **`CC(0)
        *=M15
        *SET 57         ; ! '9'
        *=I15
        **`CLETT(0)
        *=C15
        *Q15
        **=Q7           ;! STORE   `CLETT(0)/'9'/`CC(0)
        **`LETT(0)
        *=M15
        *SET 6
        *DUP
        *=I15
        *=C15
        *Q15
        **=V            ;! STORE   6/6/`LETT(0)

8:      * I12
        *=RC14          ; ! M14 = LENGTH, C14 = LENGTH'
        **Q7            ;! SET  M7 = `CC(0)
        *=Q7
        **Q5; *=RM6
        *ZERO
        *J2NV
        PRINTSYMBOL(42)
        WRITE(LINE,4)
        %CAPTION__OVERFLOW_SET_ DURING_COMPILATION\
        FAULTY=1; ->8
2:      *C0 TO Q4
        *ERASE
1:      *Q14
        *JS49P        ;! READ CHAR
        *DUP; *=M0M6QN
        *REV; *C6; *SET399
        *+; *J39=Z
        *=Q14
        *SET 32         ; ! '_'
        *J2=
        *SET 37         ; ! ' '
        *J20 #
        *=C4
        *J1
20:     *J3 C4Z
        *DUP
        *SET 65         ; ! 'A'
        *-
        *J21 < Z
        *DUP
        *SET 90         ; ! 'Z'
        *-
        *J21 > Z
        *SET 128
        *OR
        *J3
21:     *C0 TO Q4
3:      *M+I14
        *DUP
        *=M7M14
        *SET 10         ; ! '\'
        *-
        *J1#Z
        *M14
        *C14
        *-
        *M-I14
        *J8=Z
        *M7M14
        *SET 195        ; ! '%C '
        *-
        *J4#Z
        *M14
        *=C14
        *M-I14
        *Q14
1011:   *JS49P; *SET10; *-
        *J1011=Z; *E227; *=Q14
        *M-I14; *Q14; *=E227; *=Q14; ! IGNORE NLS
        *M-I6; * M-I6
        *M0M6; *SET37
        *-; *J1#Z
        *M-I6; ->1
4:      *M+I14
        *M14
        *DUP
        *SET 300
        *-
        *J 39 > Z
        **=LENGTH
        **LINE
        *NOT
        *NEG
        **=LINE
        *I12
        *=RM8
        
5:  **LISTFLAG; *J5555=Z
    WRITE(LINE,5); SPACES(3*LEVEL)
    **Q5; *=RM6
    *SET36P:; *=M14
    *M0M14; *=Q15
5543:*M0M6QN; *DUP; *JS13P
    *SET10; *-; *J5543#Z
    *Q15; *=M0M14
5555:   **Q5
        *=Q5
        **Q6
        *=Q6
        **Q7
        *=Q7
        **K
        COMPARE
4565:   *J6 C8 Z
        *M6
        *SET 380
        *-
        *J11>Z
        CSS
4566:   **A(1)
        *SET 15
        *-
        *J7=Z
        *M8
        **LENGTH
        *-
        *J8=Z
        ->5555
11:        PRINT SYMBOL(42)
        WRITE (LINE,4)
        %CAPTION : _ LONG _ ANALYSIS _ RECORD \
        %STOP
 39:        PRINT SYMBOL (42)
        WRITE (LINE,4)
        %CAPTION :_>_300_CHARS\
        %STOP
6:         PRINT SYMBOL (42)
       WRITE (LINE,4)
        %CAPTION : _ INSTRUCTION _ NOT _ RECOGNISED\
        *I12
        %IF FAULTY=1 %THEN ->5556
        *E418; *=RC15; *E444;  *=M15;  *PMEQ15;  *ZERO;  *=E444
        *E435; *SET1; *=C15; *JS25P
        %STOP %UNLESS LFLAG=0
5556:   **=FAULTY
        **LENGTH
        *=M14
        *Q8 TO Q15
        **Q7
        *=Q7
13:     *M7M15
        *SET 59         ; ! ':,'
        *-
        *J12#Z
        *M7M15N
        *SET 10         ; ! '\'
        *-
        *J9#Z
12:     *M+I15
        *M15
        *M14
        *-
        *J13#Z
9:      %BEGIN
        %INTEGER PC
        PC=0
        *M8
        **=Q
        *M15
        **=I
        %CYCLE  J=Q,1,I
        %IF PC=0 %THEN ->1
        %IF CC(J) < 128 %THEN ->2
        CC(J)=CC(J)-128
        ->3
2:      PC=0
        ->3
1:      ->3 %IF CC(J)<128
        PRINT SYMBOL (37)
        PC=1
        CC(J)=CC(J)-128
3:      PRINT SYMBOL (CC(J))
        %REPEAT  
        NEWLINE
        %END
        **I
        **LENGTH
        *-
        *J8=Z
        **I
        *NOT
        *NEG
        *=M8
        -> 5555
7:      DUMP


%ROUTINE  COMPARE
%INTEGER  RA,RP,RQ,RR,RS,SAVE
%SWITCH  BIP(1000:1009)
! Q5 = `SYMBOL(0) / 48 / `A(0) '0' = 48
! Q6 = `CWORD(0)  / 1  / R
! Q7 = `CLETT(0)  / 57 / `CC(0) '9' = 57
! Q8 =  HIT       / 1  / Q
! ENTER WITH P IN NS
        *DUP
        *NOT
        *NEG
        **=RS           ;! RS=P+1
        *C5
        *+
        *=M13
        *M0M13
        **=RP           ;! RP=SYMBOL(P)
        *M0M13N
        **=RA           ;! RA =SYMBOL(P+1)
         *M8
        **=RQ           ;! RQ=Q
        *M6
        **=RR           ;! RR=R
        *I6
        *=M5M6
1:      *M+I6           ;! R=R+1
BIP(1000):2:**RS
        *NOT
        *NEG
        *DUP
        **=RS           ;! RS=RS+1
        **RA
        *J8=            ;! %IF  RS=RA %THEN  ->8
        *C5
        *+
        *=M13
        *M0M13
        *DUP
        *SET 1300
        *-
        *J4>=Z           ;! %IF  ITEM>=300 %THEN  ->4
        *DUP
        *SET 1000
        *-
        *J6>=Z           ;! %IF  ITEM>=200 %THEN ->6
        *DUP
        *=RM14
        *C7
        *=M13
        *M13M14
        *+              ;! CLETT(I)+I
        *DUP
        *=M15
        *M14
        *-
        *=C14
        *
5:      *M13M14QN
        *M7M8Q
        *-
        *J3#Z           ;! %IF  CLETT(I)# CC(Q) %THEN  ->3
        *J5C14NZS
                                   ;! %IF  I<J %THEN  ->5
        ->2
4:      COMPARE
        *J2C8NZ         ;! %IF  HIT#0 %THEN  ->2
3:      **RQ
        *=M8            ;! Q=RQ
        **RR
        *=M6            ;! R=RR
        **RA
       `j~vp
`````~Nw}            ;! %IF  RA=RP %THEN  ->7
        *DUP
        **=RS           ;! RS=RA
        *M5M6
        *NOT
        *NEG
        *=M5M6          ;! A(R)=A(R)+1
        *C5
        *+
        *=M13
        *M0M13
        **=RA           ;! RA=SYMBOL(RA)
        ->1
8:      *ERASE
        *DC8
        %RETURN 
7:      *ERASE
        *C0 TO Q8
        %RETURN 
6:      **=J
        ->BIP(J)

! PHRASE NAME
9:      *ERASE
        *J3
BIP(1001):*C0 TO Q8
        *M7M8
        *DUP
        *SET 65         ; ! 'A'
        *-
        *J9<Z           ;! %IF  CC(Q)<65 %THEN  ->9
        *DUP
        *SET 90         ; ! 'Z'
        *-
        *J1021<=Z; *DUP
        *SETB 141; *-; *J9<Z
        *DUP; *SETB172; *-; *J9>Z
1021:   **V
        *=Q14           ;! Q14 = 6/6/`LETT(0)
        **NEXT
        *DUP
        *=RM15          ;! Q15 = 0/1/NEXT+S
        *REV; *DC14; *DC14
        *ZERO; *NOT
        **=J            ;! J=1
        
        *M7M8QN

1101:   *DUP            ;! SEQUENCE FOR LETTERS
        *SET 65         ; ! 'A'
        *-
        *J10<Z          ;! %IF  I<65 %THEN  ->10
        *DUP
        *SET 90         ; ! 'Z'
        *-
        *J11 <= Z       ; ! %IF  I<= 90 %THEN  -> 11
        *DUP; *SETB141; *-; *J10<Z
        *DUP; *SETB172; *-; *J10>Z
11:     *DC14
        *REV
        *SHL+8
        *OR             ;! V=256*V+I
        *J12C14NZ
        *=M14M15Q      ;! LETT(NEXT+S)=V
        *I14
        *=C14
        *ZERO
12:     *M7M8QN
        **J; *DUP
        *J1103>Z; *J1101<Z
10:     *ZERO
        **=J            ;! J=2

1102:   *DUP            ;! SEQUENCE FOR DIGITS
        *I5
        *-
        *J13<Z          ;! %IF  I<'0' %THEN  ->13
        *DUP
       *I7
        *-
        *J11<=Z          ;! %IF  I<='9' %THEN  ->11
13:     *SET 1
        **=J            ;! J=3
        *ZERO
1103:   *ERASE
        *SET 39         ;! SEQUENCE FOR PRIMES 39 = '''
        *J11=
        *ERASE
        *DUP
        *J15=Z          ;! %IF  V=0 %THEN ->15
        *=M14M15Q      ;! LETT(NEXT+S)=V
        *ZERO
15:     *ERASE
        *=M13
        *C8
        *NEG
        *SHL40; *M14M13
        *OR
        *=M14M13        ;! LETT(NEXT)=256*(NO. OF CHARS. IN WORD)
                           !+(FIRST LETTER)

        *M15
        *SET 620
        *-
       *J 14 <= Z
        NEWLINES (2)
        PRINT SYMBOL (42)
        WRITE (LINE,4)
        %CAPTION :_NAMES _ TOO _ LONG\
        %STOP

14:     *M13            ;! DICTIONARY LOOK UP SEQUENCE
        *=I15
        **`WORD(0)
        *Q9;  **=SAVE
        *=M15
        **NUM
        *DUP
        *=C13
        *NEG; *NOT
        *NC15           ;! Q15 = S+1/NEXT/`WORD(0)
        
        *=RM9;  *C13TOQ9;*I9=-1;    ! U=-1
17:     *I15; *=RM13; *J18C9Z
        *M14M13Q;  *;! 1ST WORD OF NEW NAME
        *M15M9Q; *=RM10
        *M14M10Q; *J16=
        *J17C9NZS
        *ERASE; ->18
16:*ERASE; *C15TOQ10; *DC10
        *J133C10Z;*
        *M14M13Q; *M14M10Q; *-; 
        *J17#Z; *J16C10NZS
133:    *M9; *NOT; *NEG
        *=M5M6;          ! A(R)=U
        **SAVE;  *=Q9;  ->1
18:     **NUM; *DUP
        *=M13
        *I15
        *DUP
        *=M15M13        ;! WORD(NUM)=NEXT
        *C15
        *+
        **=NEXT         ;! NEXT=NEXT+S+1
        *DUP
        *=M5M6          ;! A(R)=NUM
        *NOT
        *NEG
        **=NUM          ;! NUM=NUM+1
       **SAVE;  *=Q9
       %IF NUM<330 %THEN    ->1
        NEWLINES (2)
        PRINT SYMBOL (42)
        WRITE (LINE,4)
        %CAPTION :_>_256_NAMES\
        %STOP
! PHRASE CONST
BIP(1002):*M7M8Q
        *SET 36         ;! '$'
        *J60#           ;! %IF  I#36 %THEN  ->60
        *ERASE          ;! $ SEQUENCE
        *SET 2
        *=M5M6          ;! A(R)=2
        *M+I6           ;! R=R+1
        *SET 3
        *=M5M6          ;! A(R)=3
        ->1
60:     *SET 39         ;! '''
        *J20#
        *J62 C3 NZ
        *M7M8N
        *REV
        *J101#            ;! %IF  I#39 %THEN  ->101
        *ERASE
        *M7M8Q
        *M+I8
        *SET 95         ;! _
        *J71=
        *SET 92         ;! \
        *J72=
        ->76
101:    *SET 76         ;! 'L'
        *J102=
        *SET 80         ;! 'P'
        *J103=
        ->9
102:    *ERASE; *M7M8Q
        *SET 78          ;! 'N'
        *J9#
        *M7M8N
        *SET 39
        *J9#
        *ERASE
        *M+I8
        *M+I8
        ->72
103:    *ERASE; *M7M8Q
        *SET 83
        *J9#
        *M7M8N
        *SET 39
        *J9#
        *ERASE
        *M+I8
        *M+I8
        ->71
71:     *ERASE
        *SET 32         ;! '_'
        ->76
72:     *ERASE
        *SET 10         ;! '\'
        ->76

62:     *ERASE
        *C0 TO Q13
        *ZERO
 66:     *M7M8Q
        *SET 39
        *J63=
        *SET 34         ;!"
        *J67=
        *SET 95         ;! _
        *J64#
        *ERASE
        *J65
64:     *SET B177
        *AND
68:     *SHLC13
        *OR
65:     *SET 8
        *=+C13
        ->66
63:     *ERASE
       ->61
67:      *ERASE
        *SET 39
        ->68
20:     *M-I8
        *SET 41P:
        *=M14
        *SET 1000
        *=C14
        *ZERO
        *REV
        *DUP
        *I5
        *-
        *J19<Z
        *DUP
        *I7
        *-
        *J23<=Z
19:     *SET 46         ;! '.'
        *J25#
        *ERASE
        *M7M8QN
        *DUP
        *I5
        *-
        *J 25 <Z
        *DUP
        *I7
        *-
        *J 25>Z
        * ZERO
        *NOT
        *=C14
        *J 23


22:     *M7M8QN
        *DUP
        *I5
        *-
        *J26<Z
        *DUP
        *I7
        *-
        *J26>Z
        *REV
        *M0M14
        *XF
         
        *REV
        *DC14
23:     *I5
        *-
        *I1
        *FLOAT
        *+F
        *J22


26:     *SET 46         ;! '.'
        *J27=
        *SET 96         ;!'`'
        *J28=
42:     *ERASE
        *C14
        *DUP
        *J44<Z
        *ERASE
        *J34
33:     *DUP
        *J30=Z
        *DUP
        *J29>Z
44:     *NEG
        *JS 14P
        *J34
29:     *JS 15P
        *J34
21:     *ERASE
        *ERASE
25:     *ERASE
        *ERASE
        *J3
27:     *ERASE
        *C14
        *DUP
        *J33<=Z
        *ERASE
        *C0 TO Q14
        *J22
28:     *ERASE
        *ZERO
        *ZERO
        *M7M8QN
        *DUP
        *I5
        *-
        *J31<Z
        *DUP
        *I7
        *-
        *J31>Z
32:     *REV
        *SET 10
        *XD
        *CONT
        *+
        *I5
        *-
35:     *M7M8QN
        *DUP
        *I5
        *-
        *J24<Z
        *DUP
        *I7
        *-
        *J32<=Z
24:     *ERASE
        *REV
        *J36=Z

        *NEG
36:     *C14
        *J33>Z
        *C14
        *+
        *J33
31:     *SET 43         ;!'+'
        *J37=
        *SET 45         ;!'-'
        *J21#
        *CAB
        *ERASE
        *I12
        *PERM
37:     *ERASE
        *J35
30:     *ERASE
34:     *DUP
        **=A'
        ->431 %IF A'>=A''
        **FRACPT(A')
        *J43=Z

431:        *SET 2
        *=M5M6          ;! A(R)=2
        *M+I6           ;! R=R+1
        **N0
        *DUP
        *=M5M6          ;! A(R)=N0
        *=RM13
        *=M9M13Q        ;! ST(N0)=A
        *M13
        **=N0           ;! N0=N0+1
        ->1
43:     *ERASE
        **INT(A')
61:     *DUP
        *SET 32767
        *-
        *J45>Z          ;! %IF  U>32767 %THEN  ->45
76:     *I12
        *=M5M6          ;! A(R)=1
        *M+I6           ;! R=R+1
        *=M5M6          ;! A(R)=U
        ->1

45:     *SET 3
        *=M5M6          ;! A(R)=3
        *M+I6           ;! R=R+1
        **N0
        *DUP
        *=M5M6          ;! A(R)=N0
        *DUP
        *NOT
        *NEG
        **=N0           ;! N0=N0+1
        *=M13
        *=M9M13         ;! ST(N0)=U
        ->1
! PHRASE N
BIP(1003):*M7M8
        *DUP
        *I5
        *-
        *J9<Z           ;! %IF  I<'0' %THEN  ->9
        *DUP
        *I7
        *-
        *J9>Z           ;! %IF  I>'9' %THEN  ->9
        *ZERO
        *REV
38:     *REV
        *SET 10
        *XD
        *CONT
        *+
        *I5
        *-              ;! U=10*U+I-'0'
        *M7M8QN
        *DUP
        *I5
        *-
        *J81<Z          ;! %IF  I<'0' %THEN  ->81
        *DUP
        *I7
        *-
        *J38<=Z          ;! %IF  I<='9' %THEN  ->38
81:     *ERASE
        *=M5M6
        ->1

! PHRASE S
BIP(1004):*M7M8
        *SET 10         ;! '\'
        *J82=           ;! %IF  I=10 %THEN  ->82
        *SET 59         ;! ''
        *-
        *J3#Z           ;! %IF  I#59 %THEN  ->3
83:     *M+I8
        ->2
82:     *ERASE
        ->2
! PHRASE TEXT
BIP(1005):*M7M8
39:     *SET10          ;! '\'
        *J82=           ;! %IF  I=10 %THEN  ->82
        *SET 59         ;! ''
        *-
        *J83=Z          ;! %IF  I=59 %THEN  ->1
        *M7M8QN
        ->39


! PHRASE CAPTION TEXT
BIP(1006):**N0
        *DUP
        *=M5M6
        *DUP
        *=M15
        *=RM14
        * SET 32
        *=C14
        *ZERO
        *M-I8
93:     *M7M8QN
        *SET 10         ;! '\'
        *J47=
        *SET 59         ;! ''
        *J47=
        *SET 95         ;! _
        *J91=
        *SET 92         ;!\
        *J92=


49:     *SHLC14
        *OR
        *C14
        *SET 8
        *-
        *DUP
        *J50<Z
        *=C14
        -> 93
91:     *ERASE
        *SET 32         ;! '_'
        ->49
92:     *ERASE
        *SET 10         ;! '\'
        ->49
50:     *ERASE
        *=M9M14Q
        *SET 40
        *=C14
        *ZERO
        -> 93


47:     *ERASE
        *DUP
        *J51=Z
        *=M9M14
        *J98
51:     *ERASE
        *M-I14
98:     *M14
        *M15
        *-
        *NOT; *NEG; *SHL40
        *M9M15; *OR
        *=M9M15
        *M+I14
        *M14
        **=N0
        ->1
! PHRASE OCTAL
BIP(1007):*M7M8
        *DUP
        *I5
        *-
        *J9<Z
        *DUP
        *SET 55         ;! '7'
        *-
        *J9>Z
        *ZERO
        *REV
41:     *REV
        *SHL+3
        *+
        *I5
        *-
        *M7M8QN
        *DUP
        *I5
        *-
        *J99<Z
        *DUP
        *SET 55         ;! '7'
        *-
        *J41<=Z
99:     *ERASE
        *=M5M6
        ->1
! PHRASE SET MARKER 1
BIP(1008):*M6
        **=MARKER 1
        ->2
! PHRASE SET MARKER 2
BIP(1009):*M6
        **=MARKER 2
        ->2
%END 
* * * A
SWOP

%ROUTINE  CSS
%ROUTINE %SPEC  CCOND
%ROUTINE %SPEC  CUI
%ROUTINE %SPEC  CSEXP (%INTEGER  Z)
%ROUTINE %SPEC MOVEM(%INTEGER Q,N)
%ROUTINE %SPEC  CNAME (%INTEGER  Z)
%ROUTINE %SPEC  FIND LABEL
%ROUTINE %SPEC  PUSHDOWN 2 (%INTEGER %NAME  CELL,%INTEGER  S1,S2)
%ROUTINE %SPEC  STORE TAG (%INTEGER  KK)
%ROUTINE %SPEC  COPY TAG (%INTEGER  KK)
%ROUTINE %SPEC  FROM LIST 2 (%INTEGER %NAME  CELL,S1,S2)
%ROUTINE %SPEC  POPUP 2 (%INTEGER %NAME  CELL,S1,S2)
%ROUTINE %SPEC  NEWCELL (%INTEGER %NAME  STAD)
%ROUTINE %SPEC  INSERT AFTER 2 (%INTEGER %NAME  STAD, %INTEGER  S1,S2)
%ROUTINE %SPEC  REPLACE TAG (%INTEGER  KK)
%ROUTINE %SPEC  LINK (%INTEGER %NAME  STAD)
%ROUTINE %SPEC  RETURN CELL (%INTEGER %NAME  STAD)
%ROUTINE %SPEC  MORE SPACE
%ROUTINE %SPEC  STORE JUMP
%ROUTINE %SPEC  STORE NAME
%ROUTINE %SPEC  TESTNST
%ROUTINE %SPEC  FAULT (%INTEGER  N)
%ROUTINE %SPEC  CMOD (%INTEGER  N,Z)
%ROUTINE %SPEC  CUCI
%ROUTINE %SPEC  PPJ(%INTEGER I,J,K)
%ROUTINE %SPEC  PJ(%INTEGER  A,S,B)
%ROUTINE %SPEC  PSET(%INTEGER  N)
%ROUTINE %SPEC  PQ(%INTEGER  A,Q,QQ)
%ROUTINE %SPEC  PSH (%INTEGER  A,N)
%ROUTINE %SPEC  PN (%INTEGER  A)
%ROUTINE %SPEC  PMS(%INTEGER  A,M,Q)
%ROUTINE %SPEC  FILL LABEL (%INTEGER  AT, EQUALS)
%ROUTINE %SPEC  FILL SET (%INTEGER  AT, EQUALS)
%ROUTINE %SPEC  PRINT NAME (%INTEGER  I)
%ROUTINE %SPEC  SKIP EXP

%SWITCH  SW(1:34), RFPD (1:8), RT(6:10),END(0:10)
%INTEGER  I,J,K,P,TYPE,Q,KK,KKK,QQ,JJ,JJJ,TYPE',F NAME
%ROUTINE %SPEC  CRSPEC (%INTEGER  M)
-> SW(A(1))
SW(1):  %COMMENT  [UI] [S]
        *JS3
        %IF  A(MARKER 2) = 2 %THEN  -> 90
        P = 2
        CUI
        ->1
3:      %IF  OVERFLAG = 0 %OR LFLAG=1  %THEN  -> 6
                PSET(LINE)
                PQ(120,2,4)
6:      *EXIT 1
SW(2):  %COMMENT  [%CYCLE ]
        *JS3
        P = 2
        CNAME(3)
        %UNLESS  TYPE = 2 %THEN  FAULT (25)
        PMS(1,N,LEVEL)
        CSEXP(2); ->5145 %UNLESS  MC SWITCH =0
        PN(34)
5145:   CSEXP(2)
        PN(34)
        PMS(1,N+1,LEVEL);->5146 %UNLESS MC SWITCH =0
        PN(34)
5146:   CSEXP(2); ->5147 %UNLESS MC SWITCH =0
        PN(34)
        PN(54)
5147:   PN(46)
        PMS(1,N+2,LEVEL)
        ->5148 %UNLESS MC SWITCH=0
        PJ(8,SL(5),13)
5148:   PMS(0,N,LEVEL)
        PQ(120,13,2)
        PUSHDOWN 2(CYCLE(LEVEL),CA,N)
                PQ(65,13,0)
        N = N + 3; M10=0; M13=0
        -> 1
SW(3):  %COMMENT  [%REPEAT ] [S]
        POPUP 2 (CYCLE(LEVEL),J,K)
        %IF  J = -1 %THEN  FAULT(1)
                PMS(0,K,LEVEL)
                PQ(120,13,2)
                PQ(64,13,0)
                PMS(0,K+1,LEVEL)
                PN(46)
                PMS(0,K+2,LEVEL)
                PJ(8,J,1)
                PN(42); M13=0
        -> 1


SW(4):  %COMMENT  [N] [:]
        K = A(2); M10=0; M13=0
        FIND LABEL
        %IF  J = -1 %THEN  -> 2
        FAULT (2)
        -> 1
2:      PUSHDOWN 2(LABEL(LEVEL),CA,K)
        -> 1
SW(5):  %COMMENT  [%IU ] [SC][REST OF COND] [%THEN ] [UI] [S]
        *JS3
        Q = 2
        -> 4


SW(6):  %COMMENT [!][TEXT][S]
        -> 1
90: %COMMENT  [UI][SET MARKER 2][REST OF SS1][%IU ][SC][REST OF COND] [S]
        Q = MARKER 2 + 1
4:      P = Q+1
        CCOND
        %IF A(1)=1 %THEN P=2
        ->1234 %UNLESS A(P)=2
        K = A(P+1)
        STORE JUMP
                PJ(10-A(Q),0,6)
        ->1
1234:   PLABEL = PLABEL -1
        K = PLABEL
        STORE JUMP
                PJ(7+A(Q),0,6)
        Q = PLABEL
        CUI; M10=0; M13=0
        PUSHDOWN 2(LABEL(LEVEL),CA,Q)
        -> 1
SW(7):  %COMMENT  [TYPE] [NAME] [REST OF NAME LIST] [S]
        TYPE = 3-A(2)
        J = 0
        P = 2
        PN(33) %IF DIAGS=1
5:      K = A(P+1)
        TESTNST
        STORE TAG (K)
        STORE NAME
        PN(34)%IF DIAGS=1
        PMS(1,N,LE VEL) %IF DIAGS=1
        N = N+1
        P = P+2
        %IF  A(P) = 1 %THEN  -> 5
        PN(42) %IF DIAGS=1
        -> 1
SW(8):  %COMMENT  [%END ] [S]
        *JS3;M10=0; M13=0
        KKK = FLAG(LEVEL)
8401:   POPUP2(ARRDIM(LEVEL),JJ,KK)
        ->50 %IF JJ=-1
        COPYTAG(KK)
        FILL SET(JJ,J);   ! FILL IN ARRAY DIM
         ->8401
50:     %COMMENT  COMPLETE LABELS JUMPS
        *JS2701
        *ZERO; *NOT; **=A(2)
        **L(LEVEL); **=A(3)
        A(4)=M(LEVEL); A(5)=LEVEL; KK=5
56:     %COMMENT  CLEAR THE DECS
        POPUP 2(NAME(LEVEL),J,K)
        %IF  J = -1 %THEN  -> 857
        JJ = K; FNAME = JJ
        COPYTAG (K)
        POPUP 2(TAGS(JJ),I,I)
        %IF TYPE=2 %THEN ->811
        %IF TYPE =1 %THEN ->810
        %IF  J = 15 %AND LEVEL #1 %THEN  FAULT(28)
        -> 56 %UNLESS  6 <= TYPE <= 10
        JJ = K
58:     POPUP 2 (ST(JJ),J,K)
        %IF  J # -1 %THEN  -> 58
        RETURN CELL (JJ)
        -> 56
810:    *ZERO; *NOT; *SHL32; ->812
811:    *ZERO
812:    **JJ; *SHL16; **K; *OR; *OR
        KK=KK+1; **=A(KK); ->56
820:    KK=2; A(2)=-1
857:    ->838 %IF DIAGS=0 %OR FAULTY=1
        A(KK+1)=-1
        *E419; *=C15; **@A(2)
        *DUP; *=I15; *SET99; *+
        *=M15; *POAQ15
838:    %IF KK=2 %THEN ->1
        %COMMENT  CHECK %CYCLE  - %REPEAT 
        POPUP 2(CYCLE(LEVEL),J,K)
        %IF  J = -1 %THEN  -> 59
        FAULT(13)
        -> 857
59:     %COMMENT  PLANT ALLOCATION NEST UP INSTRUCTIONS
        %IF  KKK = 1 %THEN          PJ(8,SL(6),11)
        %IF  10 >= KKK>= 7 %THEN      PJ(8,SL(11),11)
        FILL SET (SET(LEVEL),N)
        %IF  0#KKK#6 %THEN  -> 60
                PQ(105,LEVEL,12)
                PQ(64,12,0)
                PQ(120,LEVEL,2)
                PPJ(8,67,13) %IF DIAGS=1
        %IF  KKK =6 %THEN           PJ(8,SL(4),11)
60:     %IF  KKK = 2 %THEN  ->820
        %IF LFLAG=1 %THEN ->4011
        %IF LISTFLAG = 1 %THEN ->401
         WRITE (LINE,5); SPACES (3*LEVEL-3)
        %CAPTION END _ OF _ ; ->END(KKK)
END(0): %CAPTION BLOCK; ->401
END(1): %CAPTION PROGRAM; ->401
END(6): %CAPTION ROUTINE; ->401
END(7): %CAPTION REAL_FN; ->401
END(8): %CAPTION INTEGER _ FN; ->401
END(9): %CAPTION REAL _ MAP; ->401
END(10):%CAPTION INTEGER _ MAP;
401:    %IF MC  SWITCH = 1 %THEN DPCA
        NEWLINE
4011:   %IF  LEVEL > 2 %OR  PERM = 1 %OR LFLAG = 1  %THEN  -> 61
      %IF  KKK = 1 %THEN  -> 62
        FAULT(14)
        A(1) = 15
        -> 1

61:     %IF  KKK # 1 %THEN  -> 63
        FAULT(15)
        -> 1
62:      %IF FAULTY # 0 %THEN ->64
        %BEGIN
        %INTEGER P,Q,R
        %CYCLE P=2,1,NLIB
        ->1 %IF RA(P)=1
        %REPEAT
        **COMPILER; *J9#Z
        *E418; *=RC15;   *E444;  *=M15;  *PMEQ15
        *ZERO;  *=E444
        %IF LFLAG= 0%THEN ->9
6:      **DEVNO; *E440; *=E420; *=E440
        LFLAG = 0; A(1) = 15; *E9; *=E439; *E10; *=E443
        *JS11
        *
     5: *M0M15Q
        *
        *=M0M14Q; *J5C14NZS ;!RESTORE BUFFERS
        %CAPTION \ ALL_LIBRARY_ITEMS_INSERTED
        RAL(LEVEL)=N;LEVEL =LEVEL + 1; ->9
2:      *SET 35P:
        *=M14; *M0M14; *=Q15; *=C15;*SETB242; *DUP; *JS13
        *SETB 302; *DUP; *=M0M14N; *SET 44P:
        *=M14; *M0M14; *=Q15; *PERM; *=M0M14N;  *=C15
13:     *=I15; *Q15; *=M0M14; *EXIT 1
12:    *M+I15; *M15; *SETB37; *AND; *J12#Z; *EXIT 1
11:    *SET 42P: ; *=RM14; *SET 68; *=C14; *SET 11; *=RM15; *EXIT 1
1:      %IF LFLAG=1 %THEN ->3
        LFLAG=1; A(1) =8; LISTFLAG = 0; LEVEL = LEVEL - 1
        N=RAL(LEVEL)
        *E439; *=E9; *ZERO; *=E439; *E443; *=E10
        *JS11
        *
    4:  *M0M14Q
        *
        *=M0M15Q; *J4C14NZS;!DUMP BUFFERS IN PTFC
        *ZERO; *NOT; *=E443
        *E420; *E440; **=DEVNO; *=E440
        *E418; *DUP; *DUP
        *=E420; *JS2
8:      *SET30P:
        *=Q14; *M0M14; *=Q15; *JS12; *JS7; ->110
7:      *M0M15; *=Q13; *ZERO; *=TR
        *PARQ13; *J105TR;  *PIAQ13
        *E444;  *NOT;  *NEG;  *=E444
        *M0M15N; *=M15; *EXIT1 
110:    *JS12;  *M-I15; *M-I15; *Q15; *=M0M14
3: 
101:    *E226; *=Q15
102:    *JS12; *JS7; *M0M15; *M+I15
        *J102>=Z; *Q15; *=E226; ->21
105:    *E437; *E436; *SET2
        *=C15; *JS25P; *ZERO; *OUT; ! PARITY
21:      *JS49P; **=Q; ->21 %IF Q=10 %OR Q=32
       R=Q-48;
23:     *JS49P; **=Q
      ->22 %UNLESS '0'<=Q<='9'
       R=10R+Q-'0'
      ->23
22:     ->101 %IF P>R
       ->9 %IF P=R
        *E418;*=RC15;*E444; *SET 5; *-;*DUP; *=M15; *J101<=Z
        *PMEQ15;  *SET5;  *=E444;  ->101
9:      %IF FAULTY#0 %AND LFLAG = 1 %THEN ->6
        %END
        %IF LFLAG#0 %THEN ->1
64:     KKK=2
63:     LEVEL = LEVEL -1
        %STOP  %IF  LEVEL <= 0
        N = RAL(LEVEL)
        %IF  KKK = 0 %THEN  -> 1
        %IF  KKK = 2 %THEN  -> 50
        FROM LIST 2(JUMP(LEVEL),J,K)
        PUSHDOWN 2(LABEL(LEVEL),CA,K)
        -> 1
SW(9):  %COMMENT  [RT] [%SPEC '] [NAME] [FPP] [S]
        %IF  A(3) = 2 %THEN  -> 41
        CRSPEC (0)
        -> 1
41:     KKK = A(2) + 5
        KK = A(4)
        COPY TAG(KK)
        -> 39 %UNLESS  I = LEVEL
        -> 40 %IF  J = 15 %AND  TYPE = KKK
        F NAME = KK
        FAULT(7) %UNLESS  TYPE = 0
39:     CRSPEC(0)
        -> 41
40:     J = 0;M10=0; M13=0
        REPLACE TAG(KK)
        JJ = K
        P LABEL = P LABEL -1
        K= P LABEL
        STORE JUMP
                PJ(8,0,11)
        RAL(LEVEL)=N
        %IF LISTFLAG = 1 %THEN ->4001
        WRITE(LINE,5) ; SPACES(3*LEVEL)
        -> RT(TYPE)
RT(6):  %CAPTION ROUTINE _; ->400
RT(7):  %CAPTION REAL _ FN _; ->400
RT(8):  %CAPTION INTEGER _ FN _; ->400
RT(9):  %CAPTION REAL _ MAP_; ->400
RT(10): %CAPTION INTEGER _MAP _
400:     SPACE ; PRINT NAME (KK)
4001:   %IF MC SWITCH = 1 %THEN DPCA
        NEWLINE
        %IF  LEVEL = 9 %THEN  FAULT(34)
        %IF  LEVEL < 10 %THEN  -> 411
        FAULT(35) ; %STOP 
411:    LEVEL = LEVEL +1
        R = CA
                PQ(121,LEVEL,2)
                PQ(65,12,0)
                PQ(105,12,LEVEL)

        L(LEVEL)=LINE; M(LEVEL)=KK
        N=3; ->407 %IF DIAGS =0
        *JS415
407:    FLAG(LEVEL) = TYPE
        SET(LEVEL)=CA
                PSET(0)
                PQ(122,12,2)
        PPJ(8,95,13) %UNLESS MCSWITCH=1
        FROM LIST 2 (ST(JJ),J,K)
        
        RA(J) = R
        %IF  A(5) = 2 %THEN  -> 42
        P = 4
43:     P = P+2
        -> RFPD(A(P))
        RFPD(1)  :  TYPE = A(P+1)+5; P = P+1; -> 44
        RFPD(2)  :  TYPE = 4; -> 44
        RFPD(3)  :  TYPE = 12; -> 44
        RFPD(4)  :  TYPE = 2; -> 44
        RFPD(5)  :  TYPE = 3; P = P+1; -> 44
        RFPD(6)  :  TYPE = 11; -> 44
        RFPD(7)  :  TYPE = 1; -> 44
        RFPD(8)  :  TYPE=14
44:     P = P + 1
        LINK(JJ)
        %IF  JJ # 0 %THEN  -> 45
        FAULT(8)
        -> 46
45:     FROM LIST 2 (ST(JJ),J,JJJ)
        %IF  J # TYPE %THEN  FAULT (9)

        ->46 %IF 3#TYPE#4
         PUSHDOWN2(ARRDIM(LEVEL),CA,A(P))
         PSET(0)
         PMS(0,N,LEVEL)
         PPJ(8,66,13)
46:     K = A(P)
        TESTNST
        %IF  6 <= TYPE <= 10 %THEN  -> 47
        J = 0
        TYPE'=TYPE
        %IF  TYPE=14 %THEN  TYPE=2
        STORE TAG(K)
        TYPE=TYPE'
        N = N+1
        STORE NAME
        -> 99
47:     NEWCELL(KK)
        J=0
        R = N
        N = KK
        STORE TAG(K)
        STORE NAME
        N = R
        PUSHDOWN 2(ST(KK),JJJ,1000)
99:     P = P+1
        %IF  A(P) = 1 %THEN  -> 44
        P = P +1
        %IF  A(P) = 1 %THEN  -> 43
42:     LINK(JJ)
        %IF  JJ # 0 %THEN  FAULT(10)
        ->1
SW(10):         %COMMENT  [%SPEC ] [NAME] [FPP] [S]
        CRSPEC(2)
        ->1
SW(11):         %COMMENT  [%COMMENT ] [TEXT] [S]
        ->1

SW(12):         %COMMENT  [TYPE'] [%ARRAY ] [ARRAY LIST] [S]
        *JS3
        TYPE' = 4
        %IF  A(2) # 1 %THEN  TYPE' = 3
        Q = 2
15:     P = Q +2
10:     %IF  A(P) = 2 %THEN  -> 9
        P = P+2
        -> 10
9:      KK = 0
1201:   PQ(121,12,2) ;     ! *M12
        PQ(96,12,0);       ! *M+I12
1202:   P=P+1; PQ(96,12,0); ! *M+I12
        CSEXP(2); PQ(67,12,0);! =M0M12Q
        CSEXP(2); PQ(67,12,0)
        KK=KK+1
        %IF A(P)=1 %THEN ->1202
        PSET(1); PQ(67,12,0)
        PN(34);        ! DUP
        PQ(120,13,2);  ! *=M13
        PSET(KK)
        PQ(65,13,0);   ! *=M0M13
   M13=0;M10=0; QQ=Q+1
1205:   K=A(QQ); PPJ(8,61,13)
    TESTNST;TYPE=TYPE'
        J=KK
        STORETAG(K); STORENAME
        PMS(1,N,LEVEL);        ! =E(N)M(LEVEL) STORE ARRAYWORD
        N=N+1
        %IF A(QQ+1)=2 %THEN ->1206
        QQ=QQ+2; ->1205
1206:   PN(42);         ! ERASE
        Q=P+1; %IF A(Q)=1 %THEN ->15; ->1
SW(14):         %COMMENT  [%BEGIN ] [S]
        %IF LISTFLAG = 1 %OR LFLAG=1 %THEN ->4111
         WRITE(LINE,5); SPACES(3*LEVEL)
        %CAPTION BEGIN
4111:    %IF MC SWITCH = 1 %THEN DPCA
        NEWLINE
        RAL(LEVEL)=N
        LEVEL = LEVEL +1
        %IF  LEVEL = 10 %THEN  FAULT(34)
        %IF  LEVEL < 11 %THEN  -> 412
        FAULT(35) ; %STOP 
412:            PQ(121,LEVEL,2)
                PQ(65,12,0)
                PQ(105,12,LEVEL)
        L(LEVEL)=LINE; M(LEVEL)=0
        N=2; ->413 %IF DIAGS=0
        *JS415
413:    FLAG(LEVEL) = 0
        SET(LEVEL) = CA
                PSET(0)
                PQ(122,12,2)
               PPJ(8,95,13) %UNLESS MCSWITCH=1
        ;M10=0; M13=0
        ->1
415:    PSET(LINE)
        PSET(LEVEL)
       PPJ(8,68,13)
        N=3; *EXIT1

SW(15): *JS3     ;! END OF PRGAM
        PERM = 0
        KKK = 1
        -> 50
SW(16): *SET 38P: ;!LIST
        *=Q14; *M0M14; *=Q15; *C15; *E421; *-
        *J1=Z; LISTFLAG = 1; ->1
SW(17): COPY TAG(A(2))  ;![NAME][+'] [CONST] [)] [:]
        %IF  TYPE = 5 %AND  I = LEVEL %THEN  -> 29
        FAULT(4)
        ->1
29:     KK = K;M10=0; M13=0
        KKK = A(5)
        %IF  A(3) = 2 %THEN  KKK = -KKK
        %IF  ST(KK) <=KKK <= ST(KK+1) %AND A(4)=1 %THEN  -> 30
        FAULT(5)
        ->1
30:     **CA; **@ST(KK+2)
        **KKK; **ST(KK); *-; *=M15
        *=M14; *SHL24; *M14M15H
        *J31=Z; FAULT(6); *ERASE; ->1
31:     *=M14M15H; ->1
SW(18): Q = 1;  ![%SWITCH] [SWITCH LIST] [S]
28:     P = Q +2
25:     %IF  A(P) = 2 %THEN  -> 24
        P = P +2
        -> 25
24:     P = P +1
        %IF A(P+1)#1 %OR A(P+4)#1 %THEN ->1811
        KKK=A(P+2)
        %IF A(P)=2 %THEN KKK=-KKK
        KK=A(P+5)
        %IF A(P+3)=2 %THEN KK=-KK
        ->1807 %IF KK<KKK
        **N0; **KK; **KKK; *-
        *SHL-1; *NOT; *NEG; *+; **=JJ
        *I9; **JJ; *-;*J1807<Z
        -> 35
1807:   FAULT(27)
        KK = KKK; JJ=N0+2
35:     QQ = Q +1
27:     K = A(QQ)
        TESTNST
        R=N
        TYPE = 5
        J = 0
        N = N0
        STORE TAG(K)
        STORE NAME
        N = R
        %CYCLE  I = N0 + 2,1,JJ+2
        ST(I) = 0
        %REPEAT 
        ST(N0) = KKK
        ST(N0+1) = KK
        R=JJ-N0; N0 =JJ+2; JJ=N0+R
        %IF  A(QQ+1) = 2 %THEN  -> 26
      QQ= QQ +2
        -> 27
26:     Q = P +6
        %IF  A(Q) = 2 %THEN  -> 1
        -> 28
1811:    FAULT (18)
        KK=0
        JJ=N0+2
        KKK=0
        -> 35

SW(19): QU = 1     ;![COMPILE QUERIES] [S]
        ->1
SW(20): QU = 0     ;! [IGNORE QUERIES] [S]
        ->1
SW(21): MC SWITCH =1    ;! [%MCODE]
        OVERFLAG =0
        PERM =1
        ->1
SW(28): MC SWITCH = 0   ;! [%END %OF %MCODE]
        OVERFLAG = 1
        PERM = 0
        -> 1
SW(22):         %COMMENT  [N][P][:]
        %IF  MC SWITCH = 0 %THEN  FAULT (32)
        %IF  SL(A(2)) # 0 %THEN  FAULT (33)
        SL(A(2)) = CA; M10=0; M13=0
       %IF LFLAG = 1 %THEN ->1
         WRITE (LINE,5); SPACES (3*LEVEL)
        WRITE (A(2),2)
        PRINT SYMBOL ('P')
        PRINT SYMBOL (':')
        DPCA; NEWLINE;    ->1
SW(23): P = 2     ;![*] [UCI] [S]
        %IF  MC SWITCH = 0 %THEN  FAULT (32)
        MC SWITCH = 1
        CUCI; M10=0; M13=0
        ->1
SW(24):         %COMMENT  "%FAULT" [FAULT LIST]
        %IF LEVEL=2 %THEN -> 2401
        FAULT(26)
        -> 1
2401:   P=2; Q=P+1
2402:   %IF A(Q)=2 %THEN ->2403
        Q=Q+2; ->2402
2403:   K=A(Q+1); PSET(A(P))
        PPJ(8,84,13)
        STORE JUMP
        PJ(8,0,11); M13=0
        P=P+2; ->2403 %IF A(P-1)=1
        ->1 %IF A(P+1)=2
        P=P+2; Q=P+1; ->2402
SW(25): LISTFLAG = 0   ;![%ENDOFLIST]
        ->1
SW(26): *DC3           ;![STRINGS]
        ->1
SW(27): NEWLINES(2)    ;![%ENDOFPERM]
         LINE =-1
       *JS2701; ->SW(28)
2701:   POPUP2(JUMP(LEVEL),J,K)
        %IF J=-1 %THEN->2702
        I=J; FIND LABEL
        %IF J#-1 %THEN ->2703
         FAULT(11); WRITE(K,1);NEWLINE; ->2701
2703:   FILL LABEL(I,J); ->2701
2702:   POPUP2(LABEL(LEVEL),J,K)
        %IF J#-1 %THEN ->2702; *EXIT1
    
SW(29): %COMMENT  [%DEFINE %COMPILER ][S]
        LINE=-1; COMPILER =0
        *ZERO; *=E445
     *SET5;  *=E444
        *  JS 70
        *  JS 46 P
        INITIALISE
        *E425; *=M0M0H
        ** PP CURR
        *  = Q13
        *  M13
        *  = +I 13
        *  M0 TO Q13
        *  Q13
        ** = PP CURR
         *E419;  *E441;  *-;  *J1=Z
        *SET1; *=C15; *E446; *JS25P
        *ZERO; *OUT
70:     *SET 94P: ; *= RM13; *E7 ; *=M0M13 ;! DATE
        *M0 TO Q13 ; *J71EN
72:     * = E102 M13 Q ; * J72 NEN
71:     *C13; *NEG; *=E101; *ZERO; *=RM13 
        *J73EJ
74:     *LINK ; * = E119 M13 Q ; *J74NEJ
73:     *C13; *NEG; *=E118; *SET 15; *=RC14
        *Q15 ; *Q14 ; *Q13 ; *Q12 ; *Q11
        *Q10 ; *Q9  ; *Q8 ;  *Q7  ; *Q6
        *Q5  ; *Q4  ; *Q3  ; *Q2  ; *Q1
75:     *=E135M14Q; *J75C14NZ; *ZERO; NEWLINE
        %CYCLE  I = 1, 1, 8 ; *SHL 6
79:     READ SYMBOL(J); ->79 %IF J=10 %OR J=32 
        PRINT SYMBOL (J)
        **J; *SET 32; *-; *SET 63; *AND; *OR
        %REPEAT ;        ! TAPE IDENTIFIER NOW IN NS
        
80:      *E384; *=Q15; *BUSYQ15; *J80TR
         NEWLINE
        *SET101; *DUP; *=M13
         *DUP ; *M12 ; *REV 
        * -
        * = RC14 ; *ZERO ; * ZERO
        *
76:     *M13M14Q ; *; *STR; *+D; *J76C14 NZS
        *=M13M14Q; *=M13M14; *M+I12; *=I12
        *SET 4; *DUP ; *=M15; *OUT;  ! PICK UP TAPE
        *DUP ; * = C15 ; * = C12
        *PMDQ15;*PMAQ15;*POAQ12;*I12=+1;! DUMP 101 TO WS + 1
        *PMEQ15 ; *PARQ15 ; *J77NTR
        %CAPTION \PARITY _ FAILURE ; ->78
77:     *C15;*SET 6;*OUT;! DEALLOCATE NEW COMPILER
        %CAPTION \ COMPILER _ DEFINED \
78:     WRITE (NUM,4)
        WRITE (NEXT,4)
        WRITE (N0,4)
        *I9
        **=I
        WRITE (I,4)
        *M12
        **=I
        WRITE (I,4)
        NEWPAGE
        *SET 38P:; *=M13; *M0M13
        *SHL-32; *SET 6; *OUT
        *ZERO; *OUT
SW(31):  ABC=1; ->1;   ! [COMPILE ARRAY BOUND CHECKS]
SW(32):  ABC=0; ->1;    ! IGNORE ARRAY BOUND CHECKS
SW(33):  ->1;   ! [S]
SW(30): ->62; ! END OF PACK
SW(13): M10=0; M13=0; ![*][*][*][A][S] 10/12/65 FOR ISO VERSION
        %BEGIN 
        %INTEGER I,J,K,N,N0',TAPE,ZEROTAPE, N',FLAG,PFLAG
        %REAL  TL,A'
        
        %SWITCH  S(0:10)
        %ROUTINE %SPEC  READ KEY WORD
        %ROUTINE %SPEC  READ SYM

        %ROUTINE %SPEC INITIAL OUTPUT
        ->77;*;
62P:    *165134/127722/16045;  !ZEROTAPE
        *2701/43532/22756;     !KEYWORDS IN
        *10014/101322/150262;  !FIVE BIT CODE
        *1573/60226/13101;     !A=1 B=2 ETC
        *5170/100000/0
        *12014/5000/0
        *7655/20532/0
        *10014/5440/0;   ! PAPER
        *11673/160000/0
        *10010/153122/0
        *1414/104000/0;   ! CARD
77:     *SET 62P:; *=M15; *M0M15; **=ZEROTAPE
        *E423; **=FLAG; PFLAG=0
        * SET +1; *SET 89P:; * =M10        
     
         * SET +18 ; * =RC13
        *
4:      * NEG ; * DUP ; * =M10M13Q    
        * ; * J4C13NZS
        * ERASE ; * ZERO ; * =M0M10

        ->2
1:      ->2 %IF  LINE<20 ; INITIAL OUTPUT
        %CAPTION \\ FAULTY _ JOB _ HEAD ; %STOP
2:      READ KEY WORD
        ->S(K)
S(9):   PFLAG = 1; ->3
S(0):   %COMMENT  KEY WORD UNKNOWN
3:      ->1 %IF  I=10 ; READ SYMBOL(I) ; ->3
S(1):   %COMMENT  EXECUTION
        READ(TL)
        READ SYM
        ->3 %UNLESS  I=77 %OR  I=83
        %IF  I=77 %THEN  TL=60*TL
        TIME LIMIT=INT(TL)
        ->3
S(2):   %COMMENT  PARAMETER
        READ SYM
        ->3 %UNLESS  I=42
        N=0 ; N'=0
        %CYCLE  J=1,1,4; ! UNSCRAMBLE PARAMETER
        READ SYM
        ->3 %UNLESS  48<=I<=55
        -> 21 %IF  J=4
        N=8N+I-48 ; N'=N'+I ; -> 22
21:     ** I; **N'; *-; *SHL+45; *J3#Z
22:     ** I; READ SYM; ** I; * NEV  
        ** J; *-; *J3#Z
        %REPEAT 
        ** N
        * SET 89P:
        * =M13
        * =M0M13
        ->3
S(7):   %COMMENT PAPER
        *E420; *J7001>Z; *ZERO; *OUT
7001:   *E438; *J7002<=Z
        *E438; *SET6; *OUT; *SET-2; *=E438
7002:   *ZERO; *=E439
7003:   *JS46P; INITIALISE; ->99
S(10):  *E438; *J10001>Z
        *SET4; *SET5; *OUT; *=E438
10001:  *SET1; *=E439; ->7003
S(8):   %COMMENT SWOP
        %BEGIN
        
        *E420; *SET7; *-; *J2>=Z
        *E420; *SET6; *OUT
        *SET2; *SET5; *OUT
        *DUP; *=E420
        *DUP; *SET 35P:
        *JS 1; *SET 44P:
        *JS 1
        ->2
1:      *=M14; *M0M14; *=Q15
        *=C15; *Q15; *=M0M14; *EXIT 1
2:      %END
        ->99
S(3):   ! COMPILER AA OR AB
        READSYM;->3001 %IF I=66
         ->3 %UNLESS  I=65 %OR  I=76
3002:   READSYM; ->3003 %UNLESS  I=10
        LINE=-1; INITIAL OUTPUT
        ->99   ; ! TO END OF JOB HEAD BLOCK
3001:   READSYM; ->3003 %UNLESS I=67
        ABC=1;DIAGS=1; ->3002
3003:   LINE=21; ->3
S(4):   %COMMENT  JOB
43:     READSYM; ->43 %UNLESS I=10 %AND NEXTSYMBOL# 10
        * SET 92P:  ;  *DUP  ;  *DUP
        %CYCLE  J = 1,1,10
        * NOT  ;  *NEG  ;  *DUP
        * ZERO
        %CYCLE  K=40,-8,0
        READ SYMBOL(I)
        ->41 %UNLESS  I=10   ; J=10  ;  ->42
41:     **I
        **K
        * =C13
        * SHLC13
        * OR
        %REPEAT 
42:     * REV  ;  * = M13  ;* = M0M13
        %REPEAT 
        *PERM  ;  * = M13  ;  * -  ;
        *DUP; *NOT; *NEG; *SHL40; *OR;   * = M0M13
        -> 3

S(5):   %COMMENT  TAPE
        TAPE=1
51:     READ KEY WORD
        ->S(K) %UNLESS  TAPE=1
        * ZERO
        %CYCLE  J=42,-6,0
        READSYM;I=I-32;!REDUCES TO KDF9 EQUIVALENT
        ->3 %UNLESS  16<=I<=58
        **I; **J; *=C13; *SHLC13  
        * OR
        %REPEAT 
        ** ZEROTAPE; * J54#;* ERASE 
        * ZERO
54:     READ SYM
        * SET 89P:; ** N; * DUP
        *+; *+; *=M13;   *=M0M13
        * SET +1
        -> 52 %UNLESS  I=42;!WRITE PERMIT
        *NEG
52:     *=M0M13N
53:     ->51 %IF  I=10 ; READ SYMBOL(I) ; ->53
S(6):   %COMMENT OUTPUT
61:     READ SYM; ->61 %IF I =10
        -> 3 %UNLESS 48<=I<=57 %OR I=79;    ! ZERO OR LETTER O
        READ SYM
        %IF I='7' %OR I='E' %OR I='8' %THEN I='S'
        J=I
        %IF FLAG =1 %THEN J='L'
        %IF FLAG =-1 %THEN J='S'
        FLAG =FLAG -1 %IF I='S'
63:     K=NEXT SYMBOL
        %IF '0'<=K<='9' %THEN ->62
        SKIP SYMBOL
        %IF K='\' %THEN ->1
        ->63
62:     READ (A'); N=INT(A')
        READ SYM
        %IF I='B' %AND J='S' %THEN N=N*4096
        %IF I='B' %AND J='L' %THEN N=N*200
        %IF I='L' %AND J='S' %THEN N=N*60
        %IF J='S' %AND N<4096 %THEN N=4096
        %IF J='L' %AND N<200  %THEN N=200
        **N
        *=E434
        ->3
        %ROUTINE  READ SYM
1:      READ SYMBOL(I) ; ->1 %IF  I=32
        %END 
%ROUTINE  READ KEY WORD
1:      READ SYM ; ->1 %IF  I=10
        LINE=LINE+1
        ->8 %IF  49<=I<=56
        TAPE=0
2:      * ZERO
        %CYCLE  J=40,-5,0
        **I
        * SET 64
        * -
        * DUP
        * SHL-5
        * J4#Z
        **J
        * =C13
        * SHLC13
        * OR
        *SET62P:; *= RM15
        %CYCLE  K=1,1,10
        *M0M15QN
        *J6=
        %REPEAT 
        READ SYM
        %REPEAT 
        * ZERO
4:      * ERASE
        K=0
6:      * ERASE
        ->10

8:      N=I-48
9:      K=0
10:     %END 
%ROUTINE INITIAL OUTPUT
        ->1 %IF FLAG<0
        *JS98P; ->2
1:      *E421; *J3>Z;
        *SET1; *SET5; *OUT
        *=E421
3:      *JS99P
2:      *SET 92P: ; *I11 ; *- ; *JS3P
        ->4 %IF DIAGS =1
        %CAPTION_____COMPILED_IN _OPTIMISING_MODE
        ->5
4:      %CAPTION_____COMPILED_IN_DIAGNOSTIC_MODE
5:      NEWLINES(2)
        %END
99:     **PFLAG; *NEG; *=E443;
        %END  ;!  END OF JOB HEAD BLOCK
        ->1
%ROUTINE  CRSPEC (%INTEGER  M)
        %INTEGER  KK,JJ,Q,JJJ,KKK
        %SWITCH  FPD(1:8)
        P = A(2) +5
        KK = A(4-M)
        COPY TAG(KK)
        %IF  M#2 %THEN  ->11
        %IF  I=LEVEL %AND  6<=TYPE<=10 %THEN  ->33
        FAULT(3)
        ->1
11:     -> 32 %IF  I # LEVEL
        -> 33 %IF  TYPE = P
34:     F NAME = KK
        FAULT(7) %UNLESS  TYPE = 0
        ->32
33:     FROM LIST 2(ST(K),JJ,Q)
        %IF  Q # 1000 %THEN  -> 34
        POPUP 2 (ST(K),JJ,Q)
        -> 35
32:     JJ = NR
        NR = NR +1
        NEWCELL(K)
        J = 15
        TYPE = P
        R = N
        N = K
        STORE TAG(KK)
        N = R
        R = K

        K = KK
        STORE NAME
        K = R
35:     JJJ = K
        Q = 0
        %IF  A(5-M) = 2 %THEN  -> 36
        P = 4-M
37:     P = P+2
        -> FPD(A(P))
        FPD(1)  :  TYPE = A(P+1)+5; P = P+1; -> 38
        FPD(2)  :  TYPE = 4; -> 38
        FPD(3)  :  TYPE = 12; -> 38
        FPD(4)  :  TYPE = 2; -> 38
        FPD(5)  :  TYPE = 3; P = P+1; -> 38
        FPD(6)  :  TYPE = 11; -> 38
        FPD(7)  :  TYPE = 1; -> 38
        FPD(8)  :  TYPE = 14
38:     P = P +2
        %IF  6 <= TYPE <= 10 %THEN  -> 101
        INSERT AFTER 2 (K,TYPE,0)
102:    Q = Q+1
        %IF  A(P) = 1 %THEN  -> 38
        P = P +1
        %IF  A(P) = 1 %THEN  -> 37
36:     PUSHDOWN 2 (ST(JJJ),JJ,Q)
        ->1
101:    INSERT AFTER 2 (K,TYPE,NR)
        NR = NR +1
        -> 102
        1:%END 

%ROUTINE  CUI
%INTEGER  KK,Q
        %SWITCH  SW(1:10)
        -> SW(A(P))



SW(1):  %COMMENT  [NAME] [APP] [SET MARKER 1] [REST OF UI]
        %IF  A(MARKER 1) = 1 %THEN  -> 3
        P = P +1
        CNAME(0)
        P = P +1
        -> 1
3:      Q = P +1
        COPY TAG (A(Q))
        P = MARKER 1 +1
       KK = PARITY (TYPE)
        ->20 %UNLESS  TYPE=0 %OR  KK=-1
        CSEXP(1)
        ->21
20:     CSEXP(2)
21:     %UNLESS  A(P) = 1 = QU %THEN  -> 2
        %IF  KK = 1 %THEN   PJ(8,SL(20),13)
        %IF  KK = -1 %THEN          PJ(8,SL(21),13)
        M13=0
2:      KK = P
        P = Q
        CNAME(1)
        P = KK +1
        -> 1
SW(2):  %COMMENT  [->] [N]
        K = A(P+1)
        STORE JUMP
                PJ(8,0,11)
        P = P +2
        -> 1
SW(3):  %COMMENT  [%CAPTION ] [CAPTION TEXT]
                PSET(A(P+1))
                PPJ(8,3,13)
        M13=0
        P = P +2
        -> 1

SW(4):  %COMMENT  [%RETURN ]
        %UNLESS  FLAG(LEVEL) = 6 %OR  PERM = 1 %THEN  FAULT(30)
        P = P +1
6:              PQ(105,LEVEL,12)
                PQ(64,12,0)
                PQ(120,LEVEL,2)
                PPJ(8,67,13) %IF DIAGS=1
                PJ(8,SL(4),11)
        ->1
SW(5):  %COMMENT  [%RESULT  = ] [+'] [OPERAND] [REST OF EXPR]
        %UNLESS  7<= FLAG(LEVEL)<=10 %THEN  FAULT(31)
        P = P +1
        %IF  FLAG(LEVEL) = 7 %THEN  -> 5
        CSEXP(2)
        ->6
5:      CSEXP(1)
        ->6
SW(6):  %COMMENT  [%STOP ]
                PJ(8,SL(6),11)
        P = P +1
        -> 1
SW(7):  %COMMENT  [->] [NAME] [(] [+'] [OPERAND] [REST OF EXPR] [)]
        COPY TAG(A(P+1))
        KK = K
        %UNLESS  TYPE = 5 %AND  I = LEVEL %THEN  FAULT(4)
        P = P +2
        CSEXP(2)
                PSET(KK)
                PPJ(8,7,11)
  
        ->1
SW(8):  %COMMENT "%MONITOR " [N]
                PSET(A(P+1))
                PJ(8,SL(90),13)
        P=P+2;M10=0; M13=0;->1
SW(9):  ->SW(6) %IF DIAGS=0;    ! MONITORSTOP
        PPJ(8,24,11); P=P+1
1:      %END
* * * A
SWOP

        %ROUTINE  CSEXP(%INTEGER  Z)
        %COMMENT  DATED 5/8/65 - FOR VER 4G WITH NEW PHRASE STUCTURE
        %COMMENT  Z=1 FOR REAL, Z=2 FOR INTEGER,%C
                  Z=3 FOR INTEGER IF POSSIBLE
        %INTEGER  C,D,J,M,Q',N0',LC,TSF,Z',USENEST,NESTED
        %INTEGER %ARRAY  OP(0:5)
        %SWITCH  S1(1:4)
        %ROUTINE %SPEC  PRINT ORDERS
        USENEST=0; NESTED=0
        ->53 %IF  A(P+1)=2 %AND  A(P+2)=1 %AND  A(P+4)=2 
            %COMMENT  SINGLE SHORT CONSTANT
                %COMMENT  IF DFLAG = 0 THEN AFLAG = 0, DFLAG + 1
        ** DFLAG ;  * DUP ;  * J199 # Z ;  AFLAG = 0
199:    *NOT; *NEG; **=DFLAG
        ->201 %IF DFLAG>2
        ->201 %IF A(P+1)=1 %AND A(P+3)=2 %AND A(P+4)=2
        FFLAG=0; C=P; SKIP EXP; P=C; USENEST=1 %IF FFLAG=0
201:10: N0'=N0 ; TSF=2
                %COMMENT  Q', D, M, LC, OP(0) ALL TO 0
        * ZERO ;  * DUP ;  * DUPD ;** = Q'
        ** = D ;  ** = M;  * DUP  ; ** = LC
        ** = OP(0)
        ->1 %UNLESS  A(P)=2
        OP(1)=13 ; Q'=1
1:      P=P+2 ; Q'=Q'+1 ; %COMMENT  P TO OPERAND + 1
        ->S1(A(P-1))

S1(1):  %COMMENT  P TO [NAME]
        ->2 %IF  A(P+1)=1
        COPY TAG(A(P))
        ->2 %UNLESS  TYPE=1 %OR  TYPE=2 %OR  TYPE=11 %OR  TYPE=12
        ST(N0)=TYPE ; ST(N0+1)=I ; ST(N0+2)=K
        N0=N0+3
        P=P+3 ; ->20 ;          %COMMENT  R OF E + 1
2:      CNAME(2) ; ->6
S1(2):  %COMMENT  P TO [CONST]
        TYPE=A(P)-1
        ST(N0)= TYPE ; ST(N0+2)=A(P+1)
        ->5 %IF  TYPE = 0
        ST(N0+1)=13  ; LC=1
5:      N0=N0+3 ; P=P+3 ; ->20 ; %COMMENT  P = R OF E + 1
S1(4):  M=1 ; %COMMENT  ! EXPR !
S1(3):  Z'=3 ; Z'=2 %IF  Z=2 %OR  OP(Q'-1) = 15
        CSEXP(Z')
        %IF  TYPE=0 %THEN  TYPE=2 ; %COMMENT  NUT MIGHT WRITE (0)
        ->6 %UNLESS  M=1
                PN(26-2*TYPE)
        M=0
6:      P=P+1
        ->35 %IF  A(P-1) = 2 %AND  Q' = 1 %AND  (Z#2 %OR  TYPE=2)
        ST(N0)=TYPE+2; ->301 %IF USENEST=0%OR NESTED>=3
        NESTED=NESTED+1; ST(N0+1)=NESTED
        PN(53) %IF NESTED=2;     ! REV
        PN(10) %IF NESTED=3;     ! PERM
        N0=N0+3; ->20
301:    ST(N0+1)=0; N0=N0+3
        PQ(67,12,0); D=D+1
20:     ->21 %UNLESS  TYPE = 1 %OR  TYPE =11
        TSF=1
        %IF  Z=2 %THEN  FAULT(24)
        %IF  OP(Q'-1)=15 %THEN  FAULT(39)
21:     ->30 %IF  A(P-1) = 2
        OP(Q')=T(A(P))
        %IF  (OP(Q')=9 %OR  OP(Q')=15) %AND  Z#2 %THEN  TSF=1
22:     %IF  OP(Q') >OP(Q'-1) +1  %THEN  ->1
        ST(N0)=OP(Q'-1) ; N0=N0+3
        OP(Q'-1)=OP(Q') ; Q'=Q'-1
        ->22
30:     MOVEM(12,-D)
        ** LC ;  * J32 = Z
        ->32 %IF M13=-1
        PQ(121,11,4)
        PQ(120,13,2)
        M13=-1
32:     %CYCLE  J=Q'-1,-1,0
        ST(N0)=OP(J)
        N0=N0+3
        %REPEAT 
            PRINTORDERS
        MOVEM(12,-D)
        TYPE=TSF
35:     ->50 %UNLESS  Z=1 %AND  TYPE=2 ;      PQ(121,1,4)
                PN(20)
        TYPE=1
50:     %IF  N0>N0'+6 %THEN  AFLAG=1
        %IF  AFLAG*DFLAG*OVERFLAG=1 %THEN           PJ(9,SL(8),8)
        DFLAG=DFLAG-1
        N0=N0'
        ->60 ; %COMMENT  END
53:             %COMMENT  SHORT CONSTANT
        ** A(P + 3) ; * DUP ; * J55 # Z
        ** = TYPE   ; P=P+5 ;   PN(33) ; -> 60
55:     -> 56 %UNLESS  A(P) = 2 ; * NEG
56:     TYPE=2;*DUP; **=C; P=P+5; *NEG; *NOT; *J111=Z; PSET(C)
112:    -> 60 %UNLESS  Z = 1;     PQ(121,1,4) ; PN(20)
        TYPE = 1  ;     -> 60 ; %COMMENT  END

111:    PQ(121,12,4); ->112
        %ROUTINE  PRINT ORDERS 
        %SWITCH  S(0:15), S'(0:2)
        %INTEGER  C,N',N,CELLS,M
        CELLS=0; 
        %CYCLE J=N0',3,N0-6
        N=ST(J)
        ->S(N)
S(0):   C = ST(J+2)  ;  N' = ST(J+3)  ;         !  SHORT CONSTANT
        -> S'(C) %IF  C < 3 %AND  (N' =5 %OR  N' = 6) %AND  TSF = 2
        CELLS=CELLS+1
        -> 1 %IF  C = 2 %AND  N' = 15
        -> 2 %IF  N' = 13
-> 3
S'(2):          PN(47 - 4N')  ;  PN(3+4N')
S'(1):          PN(47-4N')    ;  PN(3+4N')
S'(0):  ST(J+3) = 14  ; -> 12
1:      ST(J+3) = 8   ;         PN(34)        ;  -> 12
2:      ST(J+3) = 14  ; C = -C
3:      N = 2         ;         PSET(C)       ;  -> 9

S(1):S(2):CELLS=CELLS+1
  PMS(0,ST(J+2),ST(J+1)) ; ->9
S(11):S(12):CELLS=CELLS+1
        N=N-10 ;
        M=1000ST(J+1)+ST(J+2)
        ->1101 %IF M=M10
        ->1102 %IF M=M13
        PMS(0,ST(J+2),ST(J+1))
        PQ(120,10,2);
1101:   PQ(64,10,0) ;M10=M; ->9
1102:   PQ(64,13,0); ->9
S(3):S(4):      N=N-2 ;
        C=CELLS; CELLS=CELLS+1
        ->401 %IF ST(J+1)=0
        M=ST(J+3); ->9 %IF C=0
        ->402 %IF C=2
        ->403 %IF C=3
        %IF C>=4 %THEN %CAPTION_CSEXP_CLANG_
405:    ->407 %IF TSF =1 %AND N=2
        ->12 %IF M=5 %OR M=8
407:    PN(53); ->9;    ! REV
402:    PN(54);->9;      ! CAB
403:    PN(10); PN(41);->405;! PERM  REND
401:   PQ(66,12,0) ; ->9
S(5):   CELLS=CELLS-1;     PN(74-14*TSF) ; ->12
S(6):   CELLS=CELLS-1;     PN(92-31*TSF) ; ->12
S(8):   CELLS=CELLS-1;     PN(24*TSF-20)
                %IF  TSF=2 %THEN  PN(40) ; ->12
S(9):   CELLS=CELLS-1;     PN(64-14*TSF)
                %IF  TSF=2 %THEN  PJ(8,SL(9),6)
                ->12
S(13):          PN(27-2*TSF) ; ->12
S(15):  M10=0; M13=0
        CELLS=CELLS-1;    PJ(8,SL(80+TSF),13) ; ->12
9:      ->12 %UNLESS  TSF=1 %AND  N=2 %AND  ST(J+3)#15
                PQ(121,1,4) ; PN(20)
12:S(14):     %REPEAT; %END 
60:     %END  ; %COMMENT  END OF CSEXP
        %ROUTINE  CCOND
        %COMMENT  DATED 4/6/65  - FOR VER 4G WITH NEW PHRASE STRUCTURE
                %COMMENT  COVERS [SC] [REST OF COND]
        %INTEGER  C,T
        %ROUTINE %SPEC  CCC
        %ROUTINE %SPEC  CSC
        %ROUTINE %SPEC  CCOMP (%INTEGER  C)
        DFLAG=DFLAG+1
        %IF  DFLAG=1 %THEN  AFLAG=0
        T= 0
        CCC
        %IF  AFLAG*DFLAG*OVERFLAG=1 %THEN           PJ(9,SL(8),8)
        DFLAG=DFLAG-1
        ->99

        %ROUTINE  CCC;    %COMMENT  T =0 FOR COND, T = 1 FOR AND-C,%C
                                     T=2 FOR OR-C
        %INTEGER  LINE
        CSC
        C = A(P)
        P = P+1
        -> 1 %UNLESS  T=0
        T=C
        C=C-1
1:      -> 10 %IF  C=2
                PN(34)
        LINE=CA
                PJ(7+T,0,6) ; PN(42)
        CCC
                FILL LABEL(LINE,CA)
        M10=0; M13=0
10:     %END 


        %ROUTINE  CSC
        %INTEGER  LINE1,LINE2
        -> 1 %IF  A(P) = 1
        P = P+1
        CCOND
        -> 9
1:      P = P+1
        CSEXP(3)
        CCOMP(1);       %COMMENT  P TO R OF SC
        P = P+1
        -> 9 %IF  A(P-1) = 2
        LINE1=CA
                PJ(8,0,6)
        CCOMP(2)
        LINE2=CA
                PJ(8,0,11)
                FILL LABEL(LINE1,CA)
                PN(42) ; PQ(121,12,4)
                FILL LABEL(LINE2,CA)
        M10=0; M13=0
9:      %END 

        %ROUTINE  CCOMP (%INTEGER  C)
        %COMMENT  C=1 FIRST TIME, C=2 ON SECOND ENTRY
        %INTEGER  T1, COMP, CTYPE
        %SWITCH  S(1:7)
        T1=TYPE
        COMP=A(P) ; P=P+1 ; %IF  COMP > 4 %THEN  COMP = 11 - COMP
        CSEXP(3)
        ->1 %UNLESS  C= 1=A(P)
                PN(34) ; PN(10)
1:      CTYPE=31 ; %IF  T1=1 %OR  TYPE=1 %THEN  CTYPE=63
        ->3 %UNLESS  T1*TYPE=2
        ->2 %IF  T1=1
                PN(53)
        COMP=8-COMP
2:              PQ(121,1,4) ; PN(20)
3:              PN(CTYPE)
        ->S(COMP)
S(4):           PN(22)
S(3):           PN(23) ; PN(27) ; ->4
S(6):           PN(23)
S(2):           PSH(116,-1) ; ->4
S(5):           PN(27) ; PN(23)
S(1):S(7):4:    %END  ;   %COMMENT  P TO 1 AFTER SEXP
99:     %END  ; %COMMENT  END OF CCOND

        %ROUTINE  CNAME(%INTEGER  Z)
        %INTEGER  JJ,KK,TYPE',RR,QQ,JJJ,II,Q,QQQ,PP
        %SWITCH  SW(0:12), FPT(1:14)
        COPY TAG(A(P))
        %IF  I # -1 %THEN  -> 3
        F NAME = A(P)
        FAULT(16)
        I = LEVEL
        J = 0
        K = A(P)
        TYPE = 0
        STORE TAG(K)
        STORE NAME
        K = N
        N = N+1
3:      JJ=J
        %IF  JJ = 15 %THEN  JJ = 0
        %IF  Z # 0 %THEN  -> SW(TYPE)
        %IF  TYPE = 6 %THEN  ->SW(7)
        FAULT(17) %UNLESS  TYPE = 0
        ->SW(0)

SW(5):  %COMMENT  %SWITCH 
        FAULT(20)
SW(0):  %COMMENT  NAME NOT SET
        P = P+1
11:     TYPE = 2
        %IF  A(P) = 2 %THEN  -> 6
        -> 102


SW(3):  %COMMENT  %REAL  %ARRAY 
SW(4):  %COMMENT  %INTEGER %ARRAY 
        TYPE' = TYPE
        KK = K
        RR = I
        PP = P
        P = P+1
        %IF  A(P) = 1 %THEN  -> 16
        FAULT(19)
        P = P+1
        -> 10
16:     Q = 0
17:     P = P+1
        Q = Q+1
        %IF JJ=1 %AND ABC=0 %AND A(P+1)=2 %AND A(P)=3 %C
        %AND A(P+2)=1 %AND A(P+4)=2 %AND A(P+5)=2 %THEN ->311
        CSEXP(2)
        %IF  A(P) = 1 %THEN  -> 17
        %IF  JJ # 0 %THEN  ->2
        JJ = Q
        COPY TAG(A(PP))
        J = JJ
        REPLACE TAG(A(PP))
2:      P = P +1
        %IF  Q = JJ %THEN  -> 18
        FAULT(19)
        -> 10
311:    QQ=1000RR+KK
        ->313 %IF QQ=M13
        PMS(0,KK,RR)
        PQ(120,13,2);
313:    M13=QQ
        ->312 %IF Z=3
        PMS(2-Z,A(P+3),13);  ! ENM13
        P=P+6; ->10
312:    PSET(A(P+3))
        P=P+6; ->307
18:     QQ=1000RR+KK
        ->321 %IF QQ=M13
        M13=0
         PMS(0,KK,RR)
        %IF ABC=1 %THEN ->303
        %IF  Q=1 %THEN ->301
        %IF  Q=2 %THEN ->302
303:    PPJ(8,69,13)
        ->10 %IF Z=3
        PQ(120,13,2);   ! =M13
304:    PQ(66-Z,13,0);    ! ='M0M13
10:     TYPE=TYPE'-2; ->1
301:    PN(46);   !*+
        PQ(120,13,2);    ! =M13
305:    ->304 %IF Z#3
         PQ(121,13 ,2); ->10
302:    PQ(120,13,14)
        PQ(122,13,2)
        PQ(121,13,4)
        PN(28); PN(40);
307:        PQ(122,13,2);   !*=+M13
        M13=0; ->305
321:    M13=0; ->307

SW(6):  %COMMENT  %ROUTINE  IN EXPRESSION
        FAULT(23)
        ->SW(0)
SW(7):  %COMMENT  %REAL %FN  AND %ROUTINE 
SW(8):  %COMMENT  %INTEGER %FN 
SW(9):  %COMMENT  %REAL %MAP 
SW(10):         %COMMENT  %INTEGER %MAP 
        TYPE '= TYPE
20:     JJ = K
        FROM LIST 2 (ST(JJ),RR,K)
        P = P + 1
        %IF  I # 1 %OR  RR>= 2 %THEN  -> 400
        %IF  A(P) = 2 %THEN  -> 402
411:    Q = P
        %IF  A(P + 1) = 3 %AND  A(P + 2) = 1 %THEN  -> 412
413:    FAULT (22)
        P = Q
415:    P = P + 1
        SKIP EXP
        %IF  A(P) = 1 %THEN  -> 415
        -> 414
412:    P = P + 3
        CNAME (3)
        %IF  A(P) = 1 %THEN  -> 413
        P = P + 1
        %IF  RR = 1 %THEN  -> 401
                PSET(TYPE)
                PJ(8,SL(12),13)
        M10=0; M13=0
        %IF  A(P) = 1 %THEN  -> 411
414:    P = P + 1
        -> 1

401:    TYPE = 2
        %IF  A(P) =2 %THEN  -> 414
        FAULT (19)
        P = Q
        -> 415
400:    %IF 2 <= RR <= NLIB %AND RA(RR)=0 %C
         %THEN RA(RR)=1
        %IF  K # 1000 %THEN  -> 21
        FAULT(21)
        -> 11
21:     %IF  A(P) = 1 %THEN  -> 22
        %IF  K = 0 %THEN  -> 37
402:    FAULT(19)
        P = P + 1
        TYPE = 2
        ->1
22:     %IF  K # 0 %THEN  -> 24
        FAULT(19)
        -> 11
24:     Q = 0
        MOVEM(12,3) %UNLESS K=1
        KK = K
        QQ = 0


26:     LINK(JJ)
        FROM LIST 2 (ST(JJ), TYPE, JJJ)
        P = P + 1
        -> FPT(TYPE)
        FPT(1) :  %COMMENT  %REAL 
                  CSEXP(1)
                  -> 27
        FPT(2) :  %COMMENT  %INTEGER 
                  CSEXP(2)
                  -> 27
        FPT(6) :  %COMMENT  %ROUTINE 
        FPT(7) :  %COMMENT  %REAL %FN 
        FPT(8) :  %COMMENT  %INTEGER %FN 
        FPT(9) :  %COMMENT  %REAL %MAP 
        FPT(10):  %COMMENT  %INTEGER %MAP 
                  QQQ = P
                  %UNLESS A(P) # 3 %OR  A(P+1) # 1 %OR  A(P+3) # 2 %C
                   %OR  A(P+4) # 2 %THEN  -> 28
33:     P = QQQ
        SKIP EXP


29:     FAULT(22)
        -> 32
28:     II = TYPE
        F NAME = A(P + 2)
        COPY TAG(F NAME)
        %IF  I = -1 %THEN  FAULT(16)
        P = P + 5
        %IF  II = TYPE %THEN  -> 31
        FAULT(22)
        -> 32
31:     J = K
        FROM LIST 2 (ST(J),I,K)
        %IF 2<=I<=NLIB %AND RA(I)=0 %THEN RA(I)=1
                PMS(0,I,11)
                PMS(1,JJJ,11)
        -> 32

FPT(11):  %COMMENT  %REAL %NAME 
FPT(12):  %COMMENT  %INTEGER %NAME 
FPT(14):  %COMMENT  %ADDR 
        II = TYPE -10
        QQQ = P
        %IF  A(P) # 3 %OR  A(P+1) # 1 %THEN  -> 33
        P = P + 2
        CNAME(3)
        %IF  A(P) = 1 %THEN  -> 33
        P = P + 1
        %IF  II = TYPE %OR  II=4 %THEN  ->27
        -> 29
FPT(3):  %COMMENT  %REAL %ARRAY %NAME 
FPT(4):  %COMMENT  %INTEGER %ARRAY %NAME 
        II = TYPE
        QQQ = P
        %IF  A(P) # 3 %OR  A(P+1) # 1 %OR  A(P+3) # 2 %OR  A(P+4) # 2 %C
         %THEN  -> 33
        F NAME = A(P + 2)
        COPY TAG(F NAME)
        %IF  I = -1 %THEN  FAULT(16)
        %UNLESS  II = TYPE %THEN  FAULT (22)
                PMS(0,K,I)
        P = P + 5
27:     ->2701 %IF KK=1
        PQ(67,12,0)
        QQ = QQ +1
        ->32
2701:   PMS(1,3,12)
32:     Q = Q +1
        %IF  Q = KK %AND  A(P) = 2 %THEN  -> 35
        %IF  A(P) = 1 %THEN  ->36

        FAULT(19)
        -> 41
36:     %IF  Q<KK %THEN  -> 26
        FAULT(19)
40:     P = P + 1
        SKIP EXP
        %IF  A(P) = 1 %THEN  -> 40
        -> 41
35:     MOVEM(12,-QQ-3) %UNLESS KK=1
37:             PMS(0,RR,11)
                PJ(8,SL(1),13)
        M10=0; M13=0
41:     P = P+1
        %IF  TYPE' = 6 %THEN  ->1
        %IF  7 # TYPE' # 8 %THEN  ->201
        TYPE = TYPE' -6
        %IF  Z # 2 %THEN  FAULT (29)
        ->1
201:    TYPE = TYPE'-8
        %IF  Z = 3 %THEN  ->1
               PPJ(8,65,13)%IF ABC=1=Z %AND MCSWITCH=0
                PQ(120,13,2)
                PQ(66-Z,13,0)
        -> 1

SW(1):  %COMMENT  %REAL 
SW(2):  %COMMENT  %INTEGER 
        CMOD(1,Z)
        ->9
SW(11):         %COMMENT  %REAL  %NAME 
SW(12):         %COMMENT  %INTEGER  %NAME 
        TYPE = TYPE -10
        CMOD(0,Z)
9:      P = P+1
        %IF  A(P) = 2 %THEN  -> 6
        FAULT(19)
102:    P = P + 1
        SKIP EXP
        %IF  A(P) = 1 %THEN  -> 102
6:      P = P +1
1:      %END 


        %ROUTINE  CMOD (%INTEGER  N,Z)
        %INTEGER Q
        %SWITCH  SW(1:6)
        Q=1000I+K
        -> SW(3N+Z)
SW(1):  SW(2): ->7 %IF M13=Q
        ->8 %IF M10=Q
        PMS(0,K,I)
                PQ(120,13,2)
7:      PQ(66-Z,13,0)
        M13=Q;  -> 1
8:      PQ(66-Z,10,0); ->1
SW(3):  SW(5):  PMS(0,K,I)
        -> 1
SW(4):          PMS(1,K,I)
        -> 1
SW(6):          PSET(K)
                PQ(121,I,2)
                PN(46)
1:       %END 
%ROUTINE  FAULT (%INTEGER  N)
  PRINT SYMBOL (42);  WRITE (LINE,4)
SPACES (3*LEVEL)
%CAPTION FAULT _
WRITE (N,2)
%IF FAULTY = 1 %THEN ->2
*E418; *=RC15;  *E444;  *=M15;  *PMEQ15
*ZERO;  *=E444
*E435; *SET1; *=C15; *JS25P
%STOP %UNLESS LFLAG=0
2:FAULTY = 1;  ->3 %IF N=28
        -> 1 %IF  7 # N # 16
3: SPACE ; PRINT NAME(F NAME)
1: NEWLINE %UNLESS N=11
      %END 


%ROUTINE  PRINT NAME (%INTEGER  I)
%INTEGER  J,K,N
J = WORD(I);  ** LETT(J);  * ZERO ;  * SHLD+8
*SET4; *-; *DUP; **=N; *J4>Z; ->2
1: J = J+1 ;  ** LETT(J) ;  N = N-6 ; %IF  N<=0 %THEN  -> 2
4: * ZERO ;  * SHLD+8 ;  * DUP ;  * J3 # Z ;  * ERASE 
  * ERASE ;  * J1
3: ** =K ;  PRINT SYMBOL (K) ;  -> 4
2: * SET+1 ;  ** N ;  * - ;  * SHL+3 ; * =C13 ;  * SHLC13
5: * ZERO ;  * SHLD+8 ;  * DUP ;  * J6 # Z
* ERASE ;  * ERASE ;  %RETURN 
6: ** =K ;  PRINT SYMBOL (K) ; -> 5
%END 
%ROUTINE  TESTNST
        ** K
        *  DUP
        ** = F NAME
        ** I; 
        ** J
        ** TYPE
        COPY TAG (K)
        %IF I=LEVEL %AND TYPE#0 %THEN FAULT(7)
1:      ** = TYPE
        ** = J
        ** = I
        ** = K
        %END 
%ROUTINE  CUCI
%INTEGER  Q,I,J,RR,TT,AP
%SWITCH  EE(1:10) , E (97:103)
AP=A(P)
%IF AP <= 10 %THEN -> EE(AP)
%IF AP <= 18 %THEN ->101
%IF AP >= 97 %THEN ->E(AP)
%IF 90 <= AP <= 94 %THEN ->61
%IF 28 >= AP %THEN ->71
   ->51
EE(1):   %COMMENT  [*] [`] [NAME] [APP]
        P = P +1
        CNAME(3)
        -> 9
EE(2):   %COMMENT  [*] ['] [NAME] [APP]
        P = P + 2
        CNAME (A(P-1))
        -> 9
EE(3):   %COMMENT  [J] [N] [P'] [J-INSTR]
        %IF  A(P+2) = 1 %THEN  -> 10
        K = A(P+1)
        STORE JUMP
        K = 0
11: P=P+3; ->21
10: K=SL (A(P+1)); FAULT(33) %IF K=0;  ->11
21: %IF A(P) >=2 %THEN ->22
     POPUP 2(JUMP(LEVEL),J,K); %COMMENT JRCQNZS
     PQ(127, A(P+1),0); ->9
      *
53P: *0/5400/144;          ! JRCQNZ
      *0/5000/144;           ! JRCQZ
     *0/4400/6;             ! JR=Z
     *0/4400/1;             ! JR=
     *0/4000/6;             ! JR#Z
     *0/4000/1;             ! JR#
     *0/4400/4;             ! JR>Z
     *0/4000/2;             ! JR>=Z
     *0/4400/2;             ! JR<Z
     *0/4000/4;             ! JR<=Z
     *0/4400/10;            ! JRV
     *0/4000/10;            ! JRNV
     *0/4400/12;            ! JREN
     *0/4000/12;            ! JRNEN
     *0/4400/14;            ! JREJ
     *0/4000/14;            ! JRNEJ
     *0/4400/16;            ! JRTR
     *0/4000/16;            ! JRNTR
     *0/4000/13;            ! JR
22:*SET   53P:
    *=M15
    **A(P);  *SET 2; *-
    *=M14
    *M14 M15
    *ZERO; *SHLD+24; **=TT
    *SHL-24;  **=RR
    %IF RR=100  %THEN RR=A(P+1)
    PJ (TT,K,RR); ->9
EE(4):  ! [SET B] [OCTAL]
        PSET (A(P+1))
        ->9
EE(5):  ! [SET][N][P][:]
        PSET(SL(A(P+1)))
        ->9
EE(6):  %COMMENT [JS] [N] [P']
       %IF A(P+2) = 1 %THEN -> 12
       K = A(P+1)
       STORE JUMP
        PJ(8,0,13)
       ->9
12:     PPJ(8,A(P+1),13); ->9
EE(7): **A(P+1); *DUP; *NOT; *SET1
      *AND; *SHL14; *REV; 
      *SHL-1; *OR; **=RR; ! [EXIT] [N]
       PJ(8,RR,15);->9
EE(8):  %COMMENT  [='] [M] [N] [M] [N] [MS-INSTR]
       I = 0
       %IF A(P+1) = 1 %THEN I = 1
       Q = A(P+3)
       K = A(P+2)
       P = P+4
       ->31
      *
55P:  *0/47000/106;          ! MKMQQHN+MKMQQH
      *0/45000/102;          ! MKMQQN+MKMQQ
      *0/46000/104;         ! MKMQHN+MKMQH
      *0/44000/100;          ! MKMQN+MKMQ
31:      *SET 55P:
      *=M15
      **A(P);  *NEG;*NOT; *=M14
      *M15 M14H;  *SHL-24
      **I;  *+;  **=I
      PQ(I,Q,K)
      ->9
*
56P:  *0/70400/162;     ! SHA (N OR CQ) + SHAD (N OR CQ)
      *0/72000/166;     ! SHL (N OR CQ) + SHLD (N OR CQ)
      *0/73400/0;       ! SHC (N OR CQ)
EE(9):P=P+1
35:   *SET 56P:
      *=M15
      **A(P); *NEG;*NOT; * DUP; *SET 5; *-; *DUP
      *J 36>=Z
      *REV
36:   *=M14
      *M15 M14H; *SHL-24
      **=I
      *J 1001 >=Z
1000: K=A(P+2)
      %IF A(P+1) = 2 %THEN K=-K
      PSH (I,K); ->9
1001: PQ(I,A(P+1),0); ->9
      *
57P:  *0/74000/16;      ! =QQ
      *0/74000/10;      ! =CQ
      *0/74000/4;       ! =IQ
      *0/74000/2;       ! =MQ
      *0/74000/11;      ! =RCQ
      *0/74000/5;       ! =RIQ
      *0/74000/3;       ! =RMQ
      *0/75000/16;      ! =+QQ
      *0/75000/10;      ! =+CQ
      *0/75000/4;       ! =+IQ
      *0/75000/2;       ! =+MQ
      *0/52000/4;       ! TLOQQ
      *0/56000/2;       ! INTQQ
      *0/50400/0;       ! PARQQ
      *0/50000/2;       ! BUSYQQ
      *0/50000/1;       ! MANUALQQ
      *0/74400/16;      ! QQ
      *0/74400/10;      ! CQ
      *0/74400/4;       ! IQ
      *0/74400/2;       ! MQ
      *0/61000/0;       ! NCQ
      *0/61400/0;       ! DCQ
      *0/71400/0;       ! X+CQ
EE(10):P=P+1
41:   %IF A(P)#1 %THEN ->42
      PQ(124,0,0); ->9;    !=LINK
42:   *SET 57P:
      *=M15
      ** A(P); *SET 2; *-; *=M14
43:   *M15 M14; *ZERO; *SHLD+24; **=I
      *SHL-24; **=J
    2:   PQ(I,A(P+1),J); ->9
      *
63P:  *0/67400/154;        !QK OR CK TO QQ
      *0/65000/151;        !IK OR MK TO QQ
      *0/65400/155;        !IMK ORCMK TO QQ
      *0/67000/0;          !CIK TO QQ
101:  *SET 63P:; *=M15; **AP; *SET 11; *-
      *=M14; *M15M14H; *SHL-24; *DUP; *J102=Z
      **=I; J=A(P+2); ->2
102:  *ERASE
         %COMMENT  [I] [N] [=] [+'] [N]
        K = A(P+3) ; I = 0
        %IF  A(P+2)=2 %THEN  K=-K
        %IF  K = 1 %THEN  I = 4
        %IF  K = -1 %THEN  I = 5
        %IF  K = 2 %THEN  I = 6
        %IF  K = -2 %THEN  I = 7
        %IF  I = 0 %THEN  FAULT(33)
                PQ(96+I,A(P+1),0)
        ->9
*
60P:  *0/10400/20;     ! ROUNDHF + ROUNDF
      *0/6000 /16;     ! ROUNDH  + ROUND
      *0/12400/24;     ! FLOATD  + FLOAT
      *0/25000/51;     ! ERASE   + REVD
      *0/32400/41;     ! REV     + ZERO
      *0/21400/42;     ! DUPD    + DUP
      *0/34400/31;     ! NEGDF   + NEGF
      *0/4000 /27;     ! NEGD    + NEG
      *0/14000/26;     ! ABSF    + ABS
      *0/35000/32;     ! MAXF    + MAX
      *0/37400/37;     ! SIGNF   + SIGN
      *0/33000/67;     ! CAB     + FRB
      *0/34000/63;     ! STAND   + /DF
      *0/30400/62;     ! /D      + /F
      *0/32000/44;     ! /R      + /I
      *0/30000/23;     ! /   + +DF
      *0/27400/74;     ! +D      + +F
      *0/27000/22;     ! +       + -DF
      *0/25400/75;     ! -D      + -F
      *0/17000/5;      ! -       + XDF
      *0/16000/4;      ! XD      + XF
      *0/3400 /0;      !X+F      +X+
      *0/1000 /3;      !=TR      +BITS
      *0/7400 /12;     !DUMMY    +PERM
      *0/5400/11;      !TOB      +OR
      *0/400  /15;     ! VR      +NEV
      *0/15400/45;     ! NOT     + FIX
      *0/23400/50;     ! STR     + CONT
      *0/26000/0;      ! AND      (EXIT)
      *0/0/35;         ! (OUT)   + X
      *0/0/0;          ! (I/0 INSTR)
51:    *SET 60P:
      *=M15; **AP; *SET 29; *-
      *=M14; *M15M14H; *SHL-24; **=TT
      %IF TT=0 %THEN ->52
      PN (TT); ->9
52:   %IF AP= 72 %THEN ->53
      %IF AP=86 %THEN ->54
      %IF AP= 89 %THEN ->45
      PJ (8,0,9); ->9;          !(87)OUT
53:   PSH (115,0); ->9;          ! X+
54:   PJ (8,16384,15); ->9;          ! EXIT
61:    *SET 57P:
      *=M15; **AP; *SET 79; *-; *=M14
      ->43
71:   **AP; *SET 25; *J 75=
      *SET 26; *J 76=
      *SET 27; *J 77=
      *SET 28; *J 78=
      *SET 57P:
      *=M15; *SET 3; *-; *=M14; ->43
75:    *ERASE; PQ(123,0,0);->9
76:   *ERASE; P=P+1; I=95+A(P); J=0; ->2
77:    *ERASE; I=115;->1000
78:   *ERASE;  *SET 57P:
      *=M15; *SET 22; *=M14; ->43
      *
59P:  *0/52000/0;          ! PIAQQ
      *0/52400/0;          ! PIBQQ
      *0/52000/10;         ! PICQQ
      *0/52400/10;         ! PIDQQ
      *0/53000/0;          ! PIEQQ
      *0/53400/0;          ! PIFQQ
      *0/54000/0;          ! POAQQ
      *0/54400/0;          ! POBQQ
      *0/54000/10;         ! POCQQ
      *0/54400/10;         ! PODQQ
      *0/54000/14;         ! P0EQQ
      *0/54000/4;          ! POFQQ
      *0/56000/0;          ! PMAQQ
      *0/50000/10;         ! PMBQQ
      *0/50000/4;          ! PMCQQ
      *0/57000/10;         ! PMDQQ
      *0/57000/0;         ! PMEQQ
      *0/51000/0;         ! PMFQQ
45:      *SET 59P:
      *=M15
      TT=6A(P+1) + A(P+2)-7
      **TT;  *=M14
      *M15 M14
      *ZERO; *SHLD+24; **=I; *SHL-24; **=J;
 1:   PQ (I,A(P+3),J); ->9
E(97):  %COMMENT [SET] [+'] [N]
        K = A(P+2)
        %IF A(P+1)=2 %THEN K = -K
            PSET(K)
        ->9
E(98):  %COMMENT [ADVCA] [N]
        %CYCLE I=1,1,2A(P+1)
               PSET(0)
        %REPEAT
        ->9

E(99):  %COMMENT  [OCTAL][/][OCTAL][/][OCTAL]
        %CYCLE  I = P+1,1,P+3
        J = A(I)
        **J
        *  SHL-8
        ** = Q
        PN(Q) ; PN(J)
        %REPEAT 
        -> 9
E(100):        %COMMENT  [= '] [E] [N] [E-INSTR] [M] [N] [Q]
        I = 0
        J = A(P+3)
        %UNLESS  J = 3 %THEN  I = A(P +4)
        Q = 2-A(P+1)
        %IF  J = 1 %THEN  Q = Q+2
                PMS(Q,A(P+2),I)
        -> 9
E(101):         %COMMENT  [JS] [E] [N]
                PJ(8,A(P+1),13)
        -> 9
E(102):         %COMMENT  [J] [E] [N]
                PJ(8,A(P+1),11)
        -> 9
E(103):         %COMMENT  0
8:      ** PP CURR
        *  = Q13
        *  J9 C13 Z
        PN(15)
        -> 8
9:      %END 

%ROUTINE MOVEM(%INTEGER M,N)
        %SWITCH S (-2:2)
        ->S(N) %IF 2>=!N!
        PSET(N); PQ(122,M,2); ->1
S(-2):  PQ(97,M,0)
S(-1):  PQ(97,M,0); ->1
S(2):   PQ(96,M,0)
S(1):   PQ(96,M,0)
S(0):1: %END
%ROUTINE  FIND LABEL
        ** K
        ** LABEL(LEVEL)
        * = Q15
        * M15
        * J1<Z
3:      * I15
        ** V0
        * AND
        * J2=
        * M15
        * J1<=Z
        * M9M15
        * = Q15
        -> 3
2:      * C15
        ** V0
        * AND
        -> 4
1:      * SET -1
4:      ** = J
        * ERASE
%END 
%ROUTINE  COPY TAG (%INTEGER  KK)
        ** TAGS (KK)
         * = Q15
         * M15
         * J1<Z
        ** V0
         * I15
         * AND
         * C15
         * DUP
         * SET 15
         * AND
         * REV
         * SHL-4
         * DUP
         * SET 15
         * AND
         * REV
         * SHL-4
         * SET 255
         * AND
        -> 2
1:      * SET-1
        * DUP
        * DUPD
2:      ** = TYPE
        ** = I
        ** = J
        ** = K
%END 
%ROUTINE  REPLACE TAG (%INTEGER  KK)
        ** TAGS(KK)
        * = M15
        * M15
        * J1>=Z
        * M0 TO Q15
1:      ** K
        * = I15
        ** TYPE
        * SET 255
        * AND
        * SHL 8
        ** I
        * SET 15
        * AND
        * SHL 4
        ** J
        * SET 15
        * AND
        * OR
        * OR
        * = C15
        * Q15
        ** = TAGS(KK)
%END 

%ROUTINE  FROM LIST 2 (%INTEGER %NAME  CELL, S1,S2)
        ** CELL
        * = Q15
        * M15
        * J1<Z
        ** V0
        * DUP
        * C15
        * AND
        *  REV
        * I15
        * AND
        -> 2
1:      * SET -1
        * DUP
2:      ** = S2
        ** = S1
%END 

%ROUTINE  POPUP 2 (%INTEGER %NAME  CELL, S1,S2)
        ** CELL
        * = Q15
        * M15
        * DUP
        * J1<Z
        ** V0
        * DUP
        * C15
        * AND
        ** = S1
        * I15
        * AND
        ** = S2
        * J2=Z
        * M9M15
        ** = CELL
        * C9
        * = M9M15
        * M15
        * = C9
        -> 3
2:      * SET -1
        ** = CELL
        -> 3
1:      * DUP
        ** = S1
        ** = S2
3:%END 

%ROUTINE STORE TAG (%INTEGER  KK)
%INTEGER  Z
        **TYPE
         * SET 255
         * AND
         * SHL8
        ** LEVEL
         * SET 15
         * AND
         * SHL 4
        ** J
         * SET 15
         * AND
         * OR
         * OR
        ** = Z
        PUSHDOWN 2 (TAGS(KK),Z,N)
%END 
%ROUTINE  PUSHDOWN 2 (%INTEGER %NAME  CELL, %INTEGER  S1,S2)
        ** CELL
        * DUP
        * = C15
        * C15
        * J1<Z
        * J2 C9 NZ
        MORE SPACE
2:      * C9
        * DUP
        * I9
        * -
        * J3>=Z
        * DUP
        * = I9
3:      * = M15
        * M9M15
        * = C9
        * = M9M15
4:      ** S1
        * = C15
        ** S2
        * = I15
        * Q15
        ** = CELL
        -> 5
1:      * M0 TO Q15
        * ERASE
        -> 4
5:%END 
%ROUTINE  LINK (%INTEGER %NAME  STAD)
        ** STAD
         * DUP
         * J1<=Z
         * = M15
         * M9M15
         * = C15
         * C15
1:      ** = STAD
%END 
%ROUTINE  MORE SPACE
        %CAPTION ASL _ EMPTY
        %STOP 
%END 
%ROUTINE  NEW CELL (%INTEGER %NAME  STAD)
        *  J1 C9 NZ
        MORE SPACE
1:      *  C9
        * DUP
        ** = STAD
        * DUP
        * I9
        * -
        * J2>=Z
        * DUP
        * = I9
2:      * = M15
        * M9M15
        * = C9
        * SET-1
        * = M9M15
%END 
%ROUTINE  RETURN CELL (%INTEGER %NAME  STAD)
        ** STAD
         * DUP
         * = M15
         * C9
         * = M9M15
         * = C9
%END 
%ROUTINE  INSERT AFTER 2 (%INTEGER %NAME  STAD, %INTEGER  S1, S2)
%INTEGER  I
        I = STAD
        LINK (STAD)
        %IF  STAD = 0 %THEN  -> 1
        %IF  STAD = -1 %THEN  STAD = I
        -> 2
1:      NEWCELL (STAD)
        **I
* =M15
* M9M15
        ** STAD
        * OR
        * =M9M15
2:      PUSHDOWN 2(ST(STAD),S1,S2)
%END 
%ROUTINE  SKIP EXP
%SWITCH  SW(1:4)
3:      P=P+1
        -> SW(A(P))
SW(1):  P=P+2
        COPYTAG(A(P-1)); FFLAG=1 %IF 7<=TYPE<=10
5:      P=P+1
        -> 1 %IF  A(P-1)=2
        SKIP EXP
        -> 5
SW(2):  P=P+3
        -> 1
SW(3):SW(4): P=P+1; SKIP EXP
1:      P=P+1
        %IF  A(P-1) = 1 %THEN  -> 3
        %END 

        %ROUTINE  STORE JUMP
        PUSH DOWN2(JUMP(LEVEL),CA,K)
        %END 
        %ROUTINE  STORE NAME
        PUSHDOWN 2(NAME(LEVEL),0,K)
        %END 
%ROUTINE  PSET (%INTEGER  N)
        ** N
        *  DUP
        *  ABS
        *  NEG
        *  NOT
        *  J1 = Z
         *  DUP
        *  SHL-8
        *  SET 196
        *  SET 3
        *  = C14
        *  JS 50 P
        -> 2
1:              PN(33)
                PN(27)
        *  J2 < Z
                PN(23)
2:%END 


%ROUTINE  PSH (%INTEGER  A,N)
        ** N
        *  NOT
        *  SHL 1
        *  NOT
        ** A
        * SET 2
        *  = C14
        *  JS 50 P
%END
%ROUTINE PN (%INTEGER  A)
        ** A
        *  SET 1
        *  = C14
        *  JS 50 P
%END 
%ROUTINE  PQ (%INTEGER  A,Q,QQ)
        ** Q
        *  SHL 4
        ** QQ
        *  SET 15
        *  AND
        *  OR
        ** A
        *  SET 2
        *  = C14
        *  JS 50 P
%END 

%ROUTINE  FILL LABEL (%INTEGER  AT, EQUALS)
        ** EQUALS
        ** AT
        *  JS 51 P
%END 
%ROUTINE  FILL SET (%INTEGER  AT, EQUALS)
        ** EQUALS
        ** AT
        *  JS 52 P
%END 
%ROUTINE PPJ (%INTEGER I,J,K)
J=SL(J)
FAULT(33) %IF J=0
PJ(I,J,K)
%END

%ROUTINE  PJ (%INTEGER  A,S,B)
        ** S
        *  DUP
        *  SHL-8
        *  DUP
        *  SET 15
        *  AND
        ** B
        *  SHL 4
        *  OR
        *  REV
        *  DUP
        *  SET 16
        *  AND
        *  SHL-1
        *  REV
        *  SHL-5
        *  SET 7
        *  AND
        ** A
        *  SHL 4
        *  OR
        *  OR
        *  SET 3
        *  = C14
        *  JS 50P
%END 

%ROUTINE  PMS (%INTEGER  A,M,Q)
        ** M
        *  DUP
        *  DUP
        *  SHL-8
        *  SET 15
        *  AND
        ** Q
        *  SHL 4
        *  OR
        ** A
        *  SET 7
        *  AND
        *  SET 192
        *  OR
        *  CAB
        *  SHL-9
        *  SET 56
        *  AND
        *  OR
        *  SET 3
        *  = C14
        *  JS 50P
%END 
1:%END;      ! OF CSSS 
%END %OF %PROGRAM 
