DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦540d798c2⟧ TextFile

    Length: 96000 (0x17700)
    Types: TextFile
    Names: »algpass13tx «

Derivation

└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
    └─⟦75ff9bef3⟧ 
        └─⟦this⟧ »algpass13tx « 

TextFile


; rc  1975.01.15                                  algol 6, pass 1, page 1

;contents:
; page   1    :  description of logic and tables
; page   3    :  start pass 1.
; page   4    :  input table and class table;
; page   5    :  action table.
; page   6    :  central action.
; page   7    :  modifications of central action, variables and constants.
; page   8 ff :  actions
; page  21    :  table of reserved words.
; page  22    :  table of pointers to reserved words,
;                compound table and table of pointers to compounds.
; page  23    :  initialise pass 1.
;
;
;description of logic and tables:
;
; the central action inputs a character from the current input medium
; and defines by tablelookup in the input table and the class table re-
; spectively its value and its class.  for algolsymbols that are genera-
; ted by pass 1 or that has to be repeated the central action is ente-
; red with the value and class allready defined.
; the algolsymbols and input characters are divided into classes as follows:
;  class      contains
;    0        blinds and intext
;    1        illegals and graphics
;    2        letters in reserved i.e. small letters except j k q æ ø aa
;    3        letters not reserved i.e. capitals plus j k q æ ø aa
;    4        digits
;    5        simples i.e. & ; ! ' ( + . , // ** := -, >= <= == => <> :(
;    6        state altering simples i.e.  <:  <* << )
;    7        first of compounds i.e. : / * - < > =
;    8        nl ff
;    9        sp
;   10        em
;   11        state altering reserved i.e. algol comment message
;   12        simple reserved i.e. all reserved except the state altering
;             and begin external end
;   13        begin external
;   14        end
;
; the class together with the current state defines the action by table-
; lookup in the action table.
;
; the possible states together with auxillary states and modifications
; of actions are shown in a table on next page.
; the change of state, auxillary states and modifications takes place in
; the actions.
\f


                                                                                                         
;rc 1975.01.15                                  algol 6, pass 1, page 2

;  state          auxstate  further nl   no match res  mode of centr act
;  in copy           -         (5)             -           mode2
;  in comment        -          -              -      resp mode3 or 2
;  in string        (1)     pack nl            -           mode3
;  in layout        (2)    layout error        -           mode1
;  after )          (3)         -        forget saveds     mode3
;  in end comment   (3)    set auxstate  forget saveds     mode3
;  in prelude       (3)    set auxstate  forget saveds     mode2
;  in compound      (4)        (5)             -             -
;  in reserved       -         (5)             -             -
;  in neutral       (3)    set auxstate  output saveds     mode1
;
;  further nl is the nl action besides the counting of typographical lines;
;  no match res is the action taken on letters, that has been matched with
;  a reserved word, when total match is not achieved.
;
;  (1):  3 possibilities: normal, after <, after :.
;  (2):  see description page 13.
;  (3):  2 possibilities: expecting reserved, after letters.
;  (4):  2 possibilities: normal, fatcomp i.e. colon comp after ).
;  (5):  in these states nl has different special actions all of
;        which changes the state.  it is repeated in the new state.
;
;  reserved words are recognised by means of the tables table of res-
;  erved words and table of pointers to reserved words. the first is or-
;  ganised as a treestucture and the latter holds pointers to the main
;  branches corresponding to the possible first letters. each point in
;  the tree is represented by two words in table of reserved words, the
;  first holding the value of the letter required for going on along
;  the branch,the second holding either a pointer to next possibility
;  or a value telling that this was the last possibility. the end branch
;  point holds in first word an end branch value and in second the class
;  and value of the reserved word.
;
;  the logic of recognition of compounds is similar to the logic for re-
;  served words, but the compound table is constructed in a different way,
;  having three words pr compound. first holding required symbol, second
;  further possibilities or not and third the class and value of compound.
;
;  there are three possibilities for modifications of the central action:
;   get class : no modification.
;   test line : test typographical line and save inputcharacter.
;   listing   : as above plus listing of sourcetext with linenumbers.
;  the modes mode1,2 and 3 are assigned according to the translatormode
;  as followes:
;
;  translatormode     mode1       mode2       mode3
;     no spec.      get class   test line   test line
;     message       get class    listing    test line
;       list         listing     listing     listing
;
\f


                                                                                             
; jz.fgs.1981.03.02                      algol 8, pass 1, page ...3...

;start pass 1

k=e0
s. a104,b55,c66,d75,f66,g54,h19,i109,j7

i82=k

h0=114, h1=59, h2=70, h3=134, h4=139, h5=140, h6=141,
h7 =  8,h8 =  9,h9 = 10,h10= 11,h11= 12,h12=20
h17 = 39 , h18 = 25 , h19 = 32 ; iso values of ' , em and space

w.              i83    ; no. of bytes in pass 1;
h13=140   ; context
h14=141   ; exit(in context)
h15=142   ; continue(in context)
h16=143   ; repeat(in context)
 
 
 
h.       4   ,  1<1+0  ; relative entry and pass no. plus pass mode;
w.   jl.      a89.     ;   goto prepare init pass1;
\f



\f

                                                                                              
; jz 1979.01.23                              algol 8, pass 1, page 3a
 
; layout (1)
 
 

;layout: description of logic and table:
;
; the layout actions make use of two state variables: auxstate and sec-
; state,plus a set of variables,which can be added to the layout double
; word.
; the layout char action searches for the value of the input character
; in the layout table,which has two words per possible layout character.
; the first of these contains the value of the layout character and the
; table is ordered in descending order after this.the second word con-
; tains in the first bits the relative address of the action correspon-
; ding to the layout character.the rest of the bits are used to determi-
; ne which values of auxstate the layout character is allowed for.if the
; input character is not found or the character is not allowed,the error
; in layout action is called.this action is entered directly for input
; characters belonging to classes which do not contain layout characters.
; the normal actions are independent of the auxstate and consists of ad-
; ding variables to the layout double word,testing limits,changing vari-
; ables and setting auxstate and secstate.secstate is only used for set-
; ting auxstate.
 
; possible states:
 
; 1   start
; 2   after + or -
; 3   expecting blank or >
; 4   after b,z,f or d before .
; 5   after blank in state 4
; 6   after 0 before .
; 7   after blank in state 6
; 8   after .
; 9   after + or - followed by .
; 10  after . followed by b,z,f or d
; 11  after blank in state 10
; 12  after .0
; 13  after blank in state 12
; 14  after '
; 15  after ' followed by + or -
; 16  after z,f or d in state 15
; 17  after  + or -, expecting blank or >
 
 
\f



 
; jz 1979.01.23                             algol 8, pass 1, page 3b
 
; layout (2)
 
 
 
 
d28: rl. w3     f35.     ; layout start:
     rs. w3     j3.      ;   futher nl action:=error in layout;
     al  w3     h3+3     ;
     rs. w3     f24.     ;   directionbyte:=string first;
     rl. w3     b3.      ;
     al  w0     0        ;
     ds. w0     f22.     ;   init string;
     rl. w3     b4.      ;
     al  w0     64       ;
     ds. w0     f26.     ;   init blankadd and minusadd;
     al  w3     256      ;
     rl. w0     b5.      ;
     ds. w0     f28.     ;   init fadd and badd;
     rl. w3     b6.      ;
     rl. w0     b7.      ;
     ds. w0     f30.     ;   init hdadd and hdmask;
     al  w1  -1          ;
     hs. w1   b55.       ;   init maxcount in layout;
     al  w1     1        ;   auxstate:=1;
     al  w2     1        ;   secstate:=1;
     rs. w2     f31.     ;   limit exeded:=false;
     jl.        c0.      ;   goto next char;

b3:  1<23                ; initial layout variables
b4:  1<22                ;
b5:  1<18                ;
b6:  1<14                ;
b7:  15<14               ;

c9:  sn  w0     h5     ; blind in layout: if blind then
     jl.        c0.    ;   goto next char;

b55 = k + 1;  maxcount ;
c10: al  w3    -1      ; layoutchar:
     al  w3  x3+1      ;   maxcount :=
     hs. w3  b55.      ;    maxcount + 1;
     sl  w3  32        ;   if maxcount >= 32
     jl.     c11.      ;   then goto error in layout;
d66: al. w3  i85       ;    i := -1;
 
a33: al  w3  x3+4      ;   for i:=i+1 while
     sl  w0 (x3)       ;   layout table(i,1)>char do;
     jl.        4      ;
     jl.        a33.   ;
     se  w0 (x3)       ;   if char<>layout table(i,1) then
     jl.        c11.   ;   goto error in layout;
     rl  w3  x3+2      ;   get layout table(i,2);
     so  w3  x1        ;   if char not allowed then
     jl.        c11.   ;   goto error in layout;
     ls  w3     -16    ;   get layout action;
     al  w0     0      ;   layout incr:=0;
d7:  jl.     x3        ;   goto layoutaction;
\f

                                                                                          
;jz 1979.03.06                                algol 8, pass 1, page 3c

; layout (3)
 
 
d8:  sz. w1 (f49.)     ; blank in layout:   
     jl.     a87.      ;   if ending blank then    
     al  w1  1<2       ;     auxstate := 3;

a87: sn  w1  1<2       ;   if auxstate = 3 then
     jl.     c0.       ;    goto next char;
     rl. w0  f25.      ;
     se  w0  0         ;   if blankadd = 0
     sz  w0  2.111111  ;   or blankadd extract 6 <> 0 then
     rs. w0  f31.      ;   limit exceeded := true;
     lo. w0  f21.      ;   stringword1 :=
     rs. w0  f21.      ;    stringword1 or blankadd;
     se  w1  1<0       ;   if auxstate <> 1 then
     jl.     a35.      ;    goto blank in number;
 
     rl. w0  f25.      ; leading blank :
     ls  w0  -1        ;   blankadd :=
     rs. w0  f25.      ;    blankadd shift (-1);
     jl.     c0.       ;   goto next char;
 
a35: ls  w1  1         ; blank in number:
     jl.     c0.       ;   auxstate := auxstate + 1;
                       ;   goto next char;
 
d9:  wa. w0  f26.      ; plus in layout: layoutincr:=layoutincr+minusadd;
d10: wa. w0  f26.      ; minus in layout:layoutincr:=layoutincr+minusadd;
     sz. w1 (f52.)     ;   if front sign then 
     jl.     a88.      ;    goto leading sign;
 
     sz  w0  3         ;   if layoutincr extract 2 <> 0 then
     ls  w0  6         ;    layoutincr := layoutincr shift 6;
     rl. w1  f22.      ;   if sign of numberpart already set
     sz  w1  3<6       ;    then
     jl.     c11.      ;     goto error in layout;
     al  w1  1<5       ;
     lo. w1  f21.      ;   stringword1 :=
     rs. w1  f21.      ;    stringword1 or endsign;
     rl. w1  f51.      ;   auxstate := 17;
     jl.     a36.      ;   goto add layoutincr;
 
a88: ls  w1  1         ; leading sign:
     jl.     a36.      ;   auxstate := auxstate + 1;
                       ;   goto add layoutincr;
 
 
 

\f



; jz 1979.01.23                                algol 8, pass 1, page 3d

; layout (4)
 
 
d19: wa. w0     f27.   ; b in layout: layout incr:=layout incr+fadd;
d11: wa. w0     f27.   ; z in layout: layout incr:=layout incr+fadd;
d12: wa. w0     f27.   ; f in layout: layout incr:=layout incr+fadd;
d13: wa. w0     f28.   ; d in layout: layout incr:=layout incr+badd;
     am         -2     ;
d14: al  w3     5      ; zero in layout:
     al  w1  x2        ;
     ls  w1  x3        ;   auxstate:=secstate+(if zero then 5 else 3);
     rl. w3     f25.   ;
     ls  w3     -1     ;
     rs. w3     f25.   ;   blankadd:=blankadd shift -1;
     wa. w0     f29.   ;   layout incr:=layout incr+hdadd;
     rl. w3     f22.   ;
     so. w3    (f30.)  ;   if more digits allowed then
     jl.        a36.   ;   goto add layout incr;
     al  w3     0      ;
     rs. w3     f31.   ;   limit exeded:=true;
a36: wa. w0     f22.   ; add layout incr:
     rs. w0     f22.   ;   stringword2:=stringword2+layout incr;
     jl.        c0.    ;   goto next char;

d15: ls  w1     7      ; point in layout: auxstate:=auxstate+7;
     al  w2     64     ;   secstate:=7;
     dl. w0     f30.   ;
     ld  w0     -4     ;   hdadd shift -4;
     ds. w0     f30.   ;   hdmask:=hdmask shift -4;
     jl.        c0.    ;   goto next char;
                                                                                              
\f


;jz 1979.03.06                                algol 8, pass 1, page 3e

; layout (5)
 
 
b1:  1<13
b2:  1<12
d16: rl. w1     b1.    ; exponent in layout: auxstate:=14;
     rl. w2     b2.    ;   secstate:=13;
     rs. w0     f28.   ;   badd:=0;
     al  w0     1      ; 
     rs. w0     f26.   ;   set minusadd;
     al  w0     4      ;
     rs. w0     f27.   ;   set fadd;
     al  w3     16     ;
     al  w0     48     ;
     ds. w0     f30.   ;   set hdadd and hdmask;
     jl.        c0.    ;   goto next char;

d17: rl. w0     f31.   ; end layout:
     se  w0     1      ;   if limit exceeded then
     jl.        c11.   ;   goto error in layout;
     rl. w3     f21.   ;
     sz. w3    (f25.)  ;   if last blank add = 1 then
     lx. w3     f25.   ;   remove last blankadd;
     ba. w3     b55.   ;
     sz. w1   (f50.)   ;   if state = (3 or 5 or 7 or 11 or 13 ) then
     rs. w3     f21.   ;    stringword1 := stringword1 + maxcount;
     jl. w3     d6.    ;   outstring;
     jl.        a37.   ;   goto restore after layout;

c11: al  w0     h3+1   ; error in layout:
     jl. w3     e3.    ;
     al  w0     h10    ;
     jl. w3     e3.    ;   layout error;
a37: rl. w0     f20.   ; restore after layout:
     rs. w0     j3.    ;   futher nl action:=normal nl action
     al  w1     0      ;   auxstate:=expecting reserved;
     al  w0     g50    ;   state:=neutral;
     jl.        d0.    ;   goto set state;

;layout table
;    value  rel act        allowed in auxstate if one
;                          17 16 15 14  13 12 11 10 9 8  7 6 5 4 3 2 1
g42: h3+5 ,(:d8 -d7:)<16+2. 1  1  0  0   1  1  1  1 0 0  1 1 1 1 1 0 1; blank
     h0+10,(:d17-d7:)<16+2. 1  1  0  0   1  1  1  1 0 0  1 1 1 1 1 0 0; >
     h2+2 ,(:d10-d7:)<16+2. 0  1  0  1   0  1  0  1 0 0  0 1 0 1 0 0 1; -
     h2+1 ,(:d9 -d7:)<16+2. 0  1  0  1   0  1  0  1 0 0  0 1 0 1 0 0 1; +
     h2   ,(:d15-d7:)<16+2. 0  0  0  0   0  0  0  0 0 0  0 1 0 1 0 1 1; .
     h1+10,(:d16-d7:)<16+2. 0  0  0  0   0  1  0  1 0 0  0 1 0 1 0 0 0; '
     h1   ,(:d14-d7:)<16+2. 0  0  0  0   1  1  1  1 0 0  1 1 1 1 0 0 0; zero
     26   ,(:d11-d7:)<16+2. 0  0  1  1   0  0  0  0 0 0  0 0 0 0 0 1 1; z
     6    ,(:d12-d7:)<16+2. 0  0  1  1   0  0  0  0 0 0  0 0 0 0 0 1 1; f
     4    ,(:d13-d7:)<16+2. 0  1  1  1   0  0  1  1 1 1  0 0 1 1 0 1 1; d
     2    ,(:d19-d7:)<16+2. 0  0  0  0   0  0  0  0 0 0  0 0 0 0 0 1 1; b
     -1                                                            ; other

i85=g42-d66-4 ; base of layout table
 
f49: 2.00110101110101111 ; mask
f50: 2.00001010001010100 ;
f52: 1<13 + 1<0          ; 
f51: 1<16                ; state=17
\f


 
; jz 1979.11.05           iso mnemonics          algol 8, pass 1, page 3.1
 
; constants, variables and tables
 
f53:  0          ; current mnemonic
f64: h. 32,102,97,108,115,101,32,97,100,100,32 ; <sp>false add<sp>
f54: h. 0,r.6 w. ; characters
f55: rl. w0 g54  ; normal contents of c0
f56: sh w3 -1    ; normal contents of j6
     0 ; f57-2   ; saved w1
f57: 0           ; saved w2
f58: jl.   g51   ; instruction to be stored in c0
f59: jl.   g52   ; instruction to be stored in j6
f61: 10          ; constant for divide
f65: 2047        ; mask for extract 11
f66: 0           ; internal char pointer;
 
; iso mnemonic table:
 
f60: <:nul:>,<:soh:>,<:stx:>,<:etx:>,<:eot:>,<:enq:>,<:ack:>,<:bel:>
     <:bs:> ,<:ht:>, <:nl:> ,<:vt:> ,<:ff:> ,<:cr:> ,<:so:> ,<:si:>
     <:dle:>,<:dc1:>,<:dc2:>,<:dc3:>,<:dc4:>,<:nak:>,<:syn:>,<:etb:>
     <:can:>,<:em:> ,<:sub:>,<:esc:>,<:fs:> ,<:gs:> ,<:rs:> ,<:us:>
     <:sp:> ,<:del:>
 
; action table for '<mnemonic>' :
; char: other   '
f62: h.  d70 , d70 ; state 0:  after '
         d70 , d71 ; state 2:  after ' <1 character>
         d70 , d72 ; state 4:  after ' <2 characters>
         d74 , d73 ; state 6:  after ' <3 characters>
 
; action table for "<mnemonic>" :
; char: other   "
         d70 , d70 ; state 8:  after "
         d70 , d71 ; state 10: after " <1 character>
         d70 , d72 ; state 12: after " <2 characters>
         d74 , d73 ; state 14: after " <3 characters>
w.                 ;
\f


 
; jz 1979.11.05             iso mnemonics        algol 8, pass 1, page 3.2
 
d68: rl. w3  f4.       ; init mnemonics:
     bl. w0  j1.       ;
     se  w0  i108      ;   if instring then
     jl.     a95.      ;    begin
     sn  w1  60        ;     if auxstate<>60 or char<>' then
     se  w3  h17       ;      goto first char 1;
     jl.     a96.      ;    end;
 
a95: hs. w3  f54.      ;   characters(0) := ' or ";
     ds. w2  f57.      ;   save(w1,w2);
     al. w1  f54.      ;   charpointer := 0;
     al  w2  0         ;   state := 0;
     rs. w2  f53.      ;   current mnemonic := 0;
     se  w3  h17       ;   if char <> ' then
     al  w2  8         ;    state := 8;
     rl. w0  f59.      ;
     rs. w0  j6.       ;   change j6 to a jump to "next mnemonic";
     jl.     c0.       ;   goto next char;
 
d69: se  w0  h5        ; next mnemonic:
     jl.     a104.     ;   if value(char) = blind
     sn  w3  0         ;   and class = 0 then
     jl.     c0.       ;    goto next char;

a104:rl. w0  f4.       ;   w0 := saved iso char;
     al  w1  x1+1      ;   charpointer := charpointer + 1;
     hs  w0  x1        ;   characters(charpointer) := saved iso char;
     sn  w3  8         ;   if char= 'nl' or char = 'ff' then
     jl.     a92.      ;    goto not found;
     sl  w3  0         ;   if char = ' or char = "
     sn  w0  h18       ;   or char = em then
     al  w2  x2+1      ;    state := state + 1;
     bz. w3  x2+f62.   ;
j7:  jl.     x3        ;   goto actiontable(state);
 
d70 = k - j7
     rl. w3  f53.      ; pack mnemonic:
     ls  w3  8         ;   current mnemonic :=
     lo  w3  0         ;
     rs. w3  f53.      ;    current mnemonic shift 8 add char;
     sz  w2  1         ;   state :=
     am     -1         ;    if state is odd then 
     al  w2  x2+2      ;     state + 1 else state + 2;
     jl.     c0.       ;   goto next char;
\f


 
; jz 1979.02.19         iso mnemonics           algol 8, pass 1, page 3.3
 
 
d71 = k - j7
     rl. w0  f53.      ; one char in mnemonic:
     jl.     a94.      ;   value:=current mnemonic; goto convert to digits;
 
d72 = k - j7
     rl. w0  f53.      ; two chars in mnemonic:
     ls  w0  8         ;   current mnemonic :=
     rs. w0  f53.      ;    current mnemonic shift 8;
 
d73 = k - j7
     rl. w0  f53.      ; three characters in mnemonic:
     al  w3  -2        ;   index := -2;
 
a90: al  w3  x3+2      ; search mnemonic table:
     sl  w3  68        ;   index := index + 2;
     jl.     a92.      ;   if index >= 68 then goto unknown;
     se. w0 (x3+f60.)  ;   if current mnemonic <> mnemonic table(index)
     jl.     a90.      ;   then goto search mnemonic table;
 
     ld  w0 -25        ; found:
     sn  w0  33        ;   index := index//2; value := index;
     al  w0  127       ;   if index=33 then value := 127; (del)
 
a94: al  w3  0         ; convert to digits:
     wd. w0  f61.      ;   digit1:= value//10; digit2:= value mod 10;
     sh  w0  9         ;   if digit1 <= 9 then
     jl.     a91.      ;    goto store last digits;
     al  w1  49        ; three digits:
     hs. w1  f54.      ;   characters(0) := iso(1);
     ws. w0  f61.      ;   digit1 := digit1 - 10;
     am      1         ;   charpointer := 2 else
a91: al. w1  f54.+1    ; store last digits: charpointer := 1;
     al  w3  x3+48     ;   characters(charpointer) :=
     hs  w3  x1        ;    digit2 + 48;
     rl  w3  0         ;   characters(charpointer-1) :=
     al  w3  x3+48     ;    digit1 + 48;
     hs  w3  x1-1      ;
\f


 
; jz 1979.11.05            iso mnemonics     algol 8, pass 1, page 3.4
  
  
     bl. w0  j1.       ;
     sn  w0  i108      ;   if instring then
     jl.     a92.      ;    goto finis;
     al  w1  x1+1      ;   charpointer :=
     al  w0  h19       ;    charpointer + 1;
     hs  w0  x1        ;   characters(charpointer) := space;
     sl  w2  8         ;   if state = after "... then
     am      f64-f54+1 ;    pointer := -> <sp> false <sp> add
     am     -1         ;   else pointer := -> <sp> <digits> else
 
 
d74 = k - j7           ; not found:
a92: al. w3  f54.      ; finis:
     rs. w3  f66.      ;   pointer := -> <digits>;
     al  w3  -1        ;
     hs  w3  x1+1      ;   characters(charpointer+1) :=  -1; (stop)
     rl. w0  f56.      ;
     rs. w0  j6.       ;   restore contents of instruction in j6;
     rl. w0  f58.      ;
     rs. w0  c0.       ;   change c0 to a jump to "internal char";
     dl. w2  f57.      ;   restore(w1,w2);
 
     bz. w3 (f66.)     ; first char:
     rs. w3  f4.       ;   saved char := char;
a96: bl. w0  x3+g0.    ; first char 1: get value(char);
     bl. w3  x3+g1.    ;   get class(char);
     la. w3  f65.      ;   class := class extract 11;
     jl.     d37.      ;   goto after in;
 
d67: rl. w3  f66.      ; internal char:
     al  w3  x3+1      ;   charpointer :=
     rx. w3  f66.      ;    charpointer + 1;
     se. w3  f64.+6    ;   if charpointer - 1 = <char no 6 in false.> then
     jl.     a97.      ;    begin
     al  w0  h3+1      ; decrease operand counter:
     jl. w3  e3.       ;     outbyte(error);
     al  w0  -1        ;     outbyte(-1);
     jl. w3  e3.       ;    end;
 
a97: bl. w3 (f66.)     ;   char := character(charpointer-1);
     se  w3  -1        ;   if char = -1 then
     jl.     a93.      ;    begin
     rl. w0  f55.      ;     restore contents of c0;
     rs. w0  c0.       ;     goto next char;
     jl.     c0.       ;    end;
 
a93: rs. w3  f4.       ; end mnemonic:  saved char := char;
     bl. w0  x3+g0.    ;   get value(char);
     bl. w3  x3+g1.    ;   get class(char);
     jl.     j6.       ;   goto after in1;
 
 
\f


                                                                                                
; jz 1979.02.19                                algol 8, pass 1, page 4

 
a89:  al. w2    c20.    ; prepare init pass1:
      am        1000    ;
      jl     x2+i84     ;   goto init pass1;
 
c63:  jl.       e12.    ; stepping stone;
c64:  jl.       e13.    ; stepping stone
c65:  jl.       e14.    ; stepping stone;
 
;input table
h.
g0: h5   ,h5   ,h5   ,h5   ; nul,soh,stx,ext
    h5   ,h5   ,h5   ,h5   ; eot,enq,ack,bel
    h5   ,h5   ,h3+2 ,h5   ; bs ,ht ,nl ,vt
    h3+2 ,h5   ,h5   ,h5   ; ff ,cr ,so ,si
    h5   ,h5   ,h5   ,h5   ; dle,dc1,dc2,dc3
    h5   ,h5   ,h5   ,h5   ; dc4,nak,syn,etb
    h5   ,h3+2 ,h5   ,h5   ; can,em ,sub,esc
    h5   ,h5   ,h5   ,h5   ; fs ,gs ,rs ,us
    h3+5 ,h0+13,h3+5 ,h3+5 ; sp ,!  ,   ,
    h3+5 ,h3+5 ,h0+12,h1+10;    ,   ,&  ,'
    h2+25,i71  ,h0+2 ,h2+1 ; (  ,)  ,*  ,+
    h2+30,h2+2 ,h2   ,h0+3 ; ,  ,-  ,.  ,/
    h1   ,h1+1 ,h1+2 ,h1+3 ; 0  ,1  ,2  ,3
    h1+4 ,h1+5 ,h1+6 ,h1+7 ; 4  ,5  ,6  ,7
    h1+8 ,h1+9 ,h2+3 ,h2+22; 8  ,9  ,:  ,;
    h0+6 ,h0+8 ,h0+10,h3+5 ; <  ,=  ,>  ,
    h3+5 ,30   ,31   ,32   ;    ,a  ,b  ,c
    33   ,34   ,35   ,36   ; d  ,e  ,f  ,g
    37   ,38   ,39   ,40   ; h  ,i  ,j  ,k
    41   ,42   ,43   ,44   ; l  ,m  ,n  ,o
    45   ,46   ,47   ,48   ; p  ,q  ,r  ,s
    49   ,50   ,51   ,52   ; t  ,u  ,v  ,w
    53   ,54   ,55   ,56   ; x  ,y  ,z  ,æ
    57   ,58   ,h3+5 ,h3+5 ; ø  ,aa ,   ,
    h3+5 ,1    ,2    ,3    ;    ,a  ,b  ,c
    4    ,5    ,6    ,7    ; d  ,e  ,f  ,g
    8    ,9    ,10   ,11   ; h  ,i  ,j  ,k
    12   ,13   ,14   ,15   ; l  ,m  ,n  ,o
    16   ,17   ,18   ,19   ; p  ,q  ,r  ,s
    20   ,21   ,22   ,23   ; t  ,u  ,v  ,w
    24   ,25   ,26   ,27   ; x  ,y  ,z  ,æ
    28   ,29   ,h3+5 ,h5   ; ø  ,aa ,   ,del

;class table
g1: 0 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ; nul,soh,stx,ext,eot,enq,ack,bel
    1 ,1 ,8 ,1 ,8 ,0 ,1 ,1 ; bs ,ht ,nl ,vt ,ff ,cr ,so ,si
    1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ; dle,dc1,dc2,dc3,dc4,nak,syn,etb
    1 ,10,1 ,1 ,1 ,1 ,1 ,1 ; can,em ,sub,esc,fs ,gs ,rs ,us
    9 ,5 ,1<11+1 ,1 ,1 ,1 ,5 ,1<11+5; sp ,!  ,   ,   ,   ,   ,&  ,'
    5 ,6 ,7 ,5 ,5 ,7 ,5 ,7 ; (  ,)  ,*  ,+  ,,  ,-  ,.  ,/
    4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ; 0  ,1  ,2  ,3  ,4  ,5  ,6  ,7
    4 ,4 ,7 ,5 ,7 ,7 ,7 ,1 ; 8  ,9  ,:  ,;  ,<  ,=  ,>  ,
    1 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ;    ,a  ,b  ,c  ,d  ,e  ,f  ,g
    3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ; h  ,i  ,j  ,k  ,l  ,m  ,n  ,o
    3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ; p  ,q  ,r  ,s  ,t  ,u  ,v  ,w
    3 ,3 ,3 ,3 ,3 ,3 ,1 ,0 ; x  ,y  ,z  ,æ  ,ø  ,aa ,   ,_ 
    1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ;    ,a  ,b  ,c  ,d  ,e  ,f  ,g
    2 ,2 ,3 ,3 ,2 ,2 ,2 ,2 ; h  ,i  ,j  ,k  ,l  ,m  ,m  ,o
    2 ,3 ,2 ,2 ,2 ,2 ,2 ,2 ; p  ,q  ,r  ,s  ,t  ,u  ,v  ,w
    2 ,2 ,2 ,3 ,3 ,3 ,1 ,0 ; x  ,y  ,z  ,æ  ,ø  ,aa,   ,del
\f

                                                                                                            
; jz 1979.08.17                                 algol 8, pass 1, page 5

;action table
;
h. 
;class
;    0   1   2   3   4   5   6   7   8   9  10  11  12  13  14   state
g33:i0 ,i0 ,i0 ,i0 ,i0 ,i6 ,i0 ,i0 ,i5 ,i0 ,i45                ; in comment
g34:i3 ,i1 ,i4 ,i4 ,i7 ,i4 ,i4 ,i8 ,i5 ,i4 ,i45                ; in string
g35:i9 ,i2 ,i10,i11,i10,i10,i11,i10,i5 ,i10,i45                ; in layout
g36:i0 ,i2 ,i12,i13,i14,i14,i15,i17,i5 ,i0 ,i45,i16,i16,i16,i16; after )
g37:i0 ,i0 ,i22,i13,i0 ,i26,i37,i18,i5 ,i27,i45,i25,i24,i25,i43; in endcom
g38:i0 ,i2 ,i28,i13,i0 ,i27,i27,i27,i46,i27,i45,i25,i25,i40,i25; in prelud
g39:i0 ,i2 ,i21,i21,i21,i19,i21,i20,i21,i21,i45                ; in compou
g40:i0 ,i2 ,i29,i30,i30,i31,i31,i31,i31,i31,i45                ; in reserv
g41:i0 ,i2 ,i23,i32,i33,i35,i37,i18,i5 ,i34,i45,i38,i36,i41,i42; in neutral
g43:i0 ,i2 ,i48,i48,i47,i49,i37,i98,i50,i50,i45                ; in algol
g44:i0 ,i0 ,i56,i56,i56,i56,i56,i44,i5 ,i56,i45                ; in commentstring
g45:i0 ,i0 ,i99,i99,i99,i99,i99,i99,i99,i99,i45                ; comm in algol


; the i-names are intermediate action addresses.they are to be replaced
; by c-names with same numbers.the action addresses (c-names) are placed
; in the pass in nummerical order except for c23,that is placed between
; c31 and c32,and c46 that is placed between c5 and c6.
;
; the algolsymbols and input characters are divided into classes as follows:
;  class      contains
;    0        blinds and intext
;    1        illegals and graphics
;    2        letters in reserved i.e. small letters except j k q æ ø aa
;    3        letters not reserved i.e. capitals plus j k q æ ø aa
;    4        digits
;    5        simples i.e. & ; ! ' ( + . , // ** := -, >= <= == => <> :(
;    6        state altering simples i.e.  <: <* << )
;    7        first of compounds i.e. : / * - < > =
;    8        nl ff
;    9        sp
;   10        em
;   11        state altering reserved i.e. algol comment message
;   12        simple reserved i.e. all reserved except the state altering
;             and begin external end
;   13        begin external
;   14        end
\f

                                                                                                            
; jz 1979.02.16                                  algol 8, pass 1, page 6

;central action
w.

d0:   hs. w0     j1.    ; set state: state:=new state;
c0:   rl. w0     f1.    ; next char: ;this may be exchanged with a subroutine
;c0:  jl.        d67.   ;   in mnemonic: goto internal char;
g51 = d67 - c0
      al  w3     0      ;   if current word empty then 
      ld  w0     8      ;   goto new word;
      sn  w0     0      ;   
      jl.        a0.    ;
a1:   rs. w0     f1.    ; retword: inchar;
      rs. w3     f4.    ;   save char
      bl. w0  x3+g0.    ;   get value(char);
j0:   bl. w3  x3+g1.    ; mode1: get class (char);
;j0:  jl.        d2.    ; mode2: goto listing (message liston)
;j0:  jl.        d3.    ; mode3: goto test (string comment after end)
 
                        ; after in1:
j6:   sh  w3  -1        ;   if char = ' or char = " then
      jl.        d68.   ;    goto init mnemonic;
;j6:  jl.        d69.   ; in mnemonic: goto next mnemonic;
g52 = d69 - j6
 
d37:  rs. w3     f18.   ; after in: save class;
j1=k+1                  ; state
d1:   bl. w3  x3+0      ;
      jl.     x3        ;   goto action(class,state);
 
g50 = g41 - d1 ;
i108 = g34 - d1;

a0:   rl. w3     f2.    ; next word:
      sl. w3    (f3.)   ;   if current word addr>=last word addr then
      jl.        a2.    ;   goto next block;
      al  w3  x3+2      ;
      rs. w3     f2.    ;   current word addr:=current word addr+2;
      rl  w0  x3        ;
      sz. w0    (b21.)  ;   if word contains characters>127 then
      jl.        d56.   ;   goto giveup(not text);;

      al  w3     0      ;   current word:=buffer(current word addr);
      ld  w0     8      ;
      ba. w0     1      ;   set word end indication;
      jl.        a1.    ;   goto retword;

b21:  1<23+1<15+1<7     ;   character value mask;

a2:   rs. w1     f5.    ; next block:
      jl. w3    (f40.)  ;   input block;
      dl  w0  x1+e51+2  ;   current word addr:=record base;
      ds. w0     f3.    ;   last word addr:=last byte;
      rl. w1     f5.    ;
j4:   jl.        a0.    ;   goto next word;
;if the input medium is typewriter the return jump is overwritten by
;     rl  w0    (0)     ;
      lx. w0     b19.   ;   if buffer(last word addr) contains
      sz  w0     1<8-1  ;   cansel character then
      ls  w0     -8     ;   goto next block
      sz  w0     1<8-1  ;   else
      ls  w0     -8     ;   goto next word;
      sz  w0     1<8-1  ;
      jl.        a0.    ;
      jl.        a2.    ;

b19:  24<16+24<8+24

\f

                                                                                     
; jz 1979.11.05                            algol 8, pass 1, page ...7...

d2:  sn  w0     h5     ; listing: if char=blind or char=illegal then
     jl.        a26.   ;   goto no listing;
     ds. w0     f5.    ;   saved input:=char;work:=value(char);
     sn  w3     25     ;   if char=end medium then
     al  w3     10     ;   char:=new line;
     sh  w0     h3     ;   if value(char)<>value(sp)&value(char)
     rs. w0     f6.    ;    <>value(nl) then last output:=value(char);
     al  w0  x3        ; list:
     jl. w3     e12.   ;   writechar;
     dl. w0     f5.    ;   char:=saved input;value(char):=work;
a26: bl. w3  x3+g1.    ; no listing: w3:=class;
     jl.        j6.    ;   goto after in1;

d3:  sn  w0     h5     ; test line: if char=blind or char=illegal then
     jl.        a26.   ;   goto no listing;
     rs. w3     f4.    ;   saved input:=char;
     sh  w0     h3     ;   if value(char)<>value(sp)&value(char)
     rs. w0     f6.    ;    <>value(nl) then last output:=value(char);
     jl.        a26.   ;   goto no listing;

;variables and constants

f0 :            0                              ; abs addr of current descr
f1 :            0                              ; current word
g54 = f1 - c0
f2 :            0                              ; current word addr
f3 :            0                              ; last word addr
f4 :            0      ,f5 :             0     ; saved input , work
f6 :            0      ,f7 :  bl. w3  x3+g1-j0 ; last output , get class
f8 : jl.        d2-j0  ,f9 :  jl.        d3-j0 ; listing     , test line
f10:            0      ,f11:             0     ; mode1       , mode2
f12:            0                              ; mode3
f13:            0                              ; last byte
f14:            0                              ; old state
f15: rl. w0     f1-c0                          ; normal next char
f16:            0      ,f17:             0     ; return1     , return2
f18:            0      ,                 0     ; stored dig or double work
f19:            0      ,f20:  al  w1     0     ; nummerical  , set auxstate
f21:            0                              ; stringword1 or saved class
f22:            0                              ; stringword2 or saved value
f23:            0                              ; return3
f24:            0                              ; directionbyte
f25:            0      ,f26:             0     ; blankadd    , minusadd
f27:            0      ,f28:             0     ; fadd        , badd
f29:            0      ,f30:             0     ; hdadd       , hdmask
f31:            0      ,f32:             0     ; limit exeded, no match res
f33: jl.        i79                            ; further nl after rigth par
f34: jl.        i80                            ; further nl in string
f35: jl.        i81                            ; further nl in layout
f36:e85:        0                              ; begin count
f38: jl.        i87                            ; next source jump
f39: jl.        i88                            ; generate term jump
f40:            0                              ; input block entry
f41: jl.        a0-j4                          ; normal end next block
f42: rl  w0    (0)                             ; typewr end next block
f43:            0                              ; fp base
f44:            0                              ; sourcepointer
f45:            0                              ; missing end counter
f46:            0                              ; writetext entry
f47:            0                              ; saved giveup action
f48: jl.        i39                            ; unstack jump
;
; the variables f24-28 are also used for storing of matching letters
; in the reserved word actions.
\f

                                                                                                   
; jz 1979.10.04                         algol 8, pass 1, page ...8...

d75: jl.        d28.   ; stepping stone to layout start;
 
c1:  sn  w0     h3+5   ; illegal in string: if graphic then
     jl.        c4.    ;   goto stringchar;
c2:  al  w0     h3+1   ; other illegal:
     jl. w3     e3.    ;
     al  w0     h7     ;   character;
     jl. w3     e3.    ;
     jl.        c0.    ;   goto next char;

c3:  sn  w0     h5     ; blind in string: if blind then
     jl.        c0.    ;   goto next char;
     al  w0     32     ;
     rs. w0     f4.    ;   saved input:=space;

c4:  se  w1     0      ; stringchar: if auxstate<>normal then
     jl. w3     d4.    ;   change auxstate to normal;
     rl. w0     f4.    ;   get saved input;
     jl. w3     d5.    ;   pack char(saved input);
     jl.        c0.    ;   goto next char;

c5:  al  w3     h6     ; new line:
     sn. w3    (f6.)   ;   if last out =new line then
     jl.        c46.   ;   goto linetest;
     rs. w3     f6.    ;   last out:=new line;
     jl. w3     e3.    ;   outbyte(new line);
     jl. w3     e1.    ;   count line;
c46: rl. w3     f4.    ; linetest:
      se  w3     12    ;   if char=ff then
      jl.        a3.   ;   begin
      al  w3     0     ;
      rl. w0     e64.  ;   bossline:=
      wd. w0     b11.  ;   //1000*1000
      wm. w0     b11.  ;   +1000;
      wa. w0     b11.  ;
      rs. w0     f5.   ;   save bossline;
      jl.        d29.  ;
a3:   rl. w3     e64.  ;
      al  w3  x3+10    ;   bossline:=bossline+10;
      rs. w3     e64.  ;
d29:  rl. w3     j0.   ;
      se. w3    (f8.)  ;   if -, listing then
      jl.        d30.  ;   goto further nl action;
      rl. w0     c0.   ;   if after em then
      sn. w0     (f48.);   goto further nlaction;
      jl.        d30.  ;
      jl. w3     e27.  ;   print linecount;
      al  w0     32    ;
      jl. w3     e12.  ;   writechar(out,space);
 
d30:  rl. w3     f4.   ;
      se  w3     12    ;   if char=ff then
      jl.        j3.   ;
      rl. w0     f5.   ;   set bossline
      rs. w0     e64.  ;   after ff
j3:                    ; further nl action:
      al  w1     0     ; normal: further nlactions:=expec. reserved
;j3:  jl.        c0.   ; after right par: next char;
;j3:  jl.        c4.   ; instring: nl:=string char;
;j3:  jl.        c11.  ; layout: nl:=error;
     jl.        c0.    ;   goto next char;
b11: 1000              ;
\f


; rc 1975.01.15                            algol 6, pass 1, page 8a


c6:  se  w0     h2+22  ; simple in comment: if char<>semikolon then
     jl.        c0.    ;   goto next char;
     rs. w0     f13.   ;   last byte:=semicolon
d38: rl. w0     f10.   ; return to neutral:
     rs. w0     j0.    ;   mode:=mode1;
     al  w1     0      ;   auxstate:=expecting reserved;
     al  w0     g41-d1 ;   state:=neutral;
     jl.        d0.    ;   goto set state;

c7:  sn  w1     60     ; digit in string: if auxstate<>in nummerical
     sl. w2     f25.+2 ;   or digits>=3 then
     jl.        c4.    ;   goto stringchar;
     al  w2  x2+1      ;   digits:=digits+1;
     al  w0     10     ; 
     wm. w0     f19.   ;   nummerical:=nummerical*10;
     rl. w3     f4.    ;
     hs  w3  x2        ;   stored dig(digits):=saved input;
     al  w3  x3-48     ;
     wa  w3     0      ;
     rs. w3     f19.   ;   nummerical:=mummerical+digit;
     jl.        c0.    ;   goto next char;
\f

                                                                                                          
;jz.fgs.1981.02.25                                  algol 6, pass 1, page 9

c8:  sn  w0     h2+3   ; first of comp in string:
     jl.        a27.   ;   if char=colon then goto testlesscolon;
     sn  w0     h0+6   ;   if char=less then
     jl.        a28.   ;   goto new auxstate;
     se  w1     0      ;   if auxstate=normal
     se  w0     h0+10  ;   or char<>greater than then
     jl.        c4.    ;   goto stringchar;
     sn  w1     58     ;   if auxstate=expecting end string then
     jl.        a29.   ;   goto endstring;
     sh. w2     f25.-1 ;   if digits<0 then
     jl.        c4.    ;   goto stringchar;
     al  w0     127    ;
     la. w0     f19.   ;   char:=nummerical mod 128;
     jl. w3     d5.    ;   pack character(char);
     al  w1     0      ;   auxstate:=normal;
     rl. w0     f19.   ;
     sl  w0     1      ;   if numerical<1 or
     sl  w0     128    ;      numerical>127 then
     sz  w0     0      ;
     jl.        c0.    ;
     al  w0     h3+1   ;
     jl. w3     e3.    ;     errorout(text);
     al  w0     h12    ;
     jl. w3     e3.    ;
     jl.        c0.    ;   goto next char;

a27: sn  w1     60     ; testlesscolon:
     sl. w2     f25.   ;   if -,(auxstate=less and digits<0) then
     jl.        a28.   ;   goto new auxstate;

     al  w0     h3+1   ; auxstate=less and digits<0:
     jl. w3     e3.    ;   errorout(text);
     al  w0     h12    ;
     jl. w3     e3.    ;
a28: se  w1     0      ; new auxstate: if auxstate<>normal then
     jl. w3     d4.    ;   change auxstate to normal;
     rs. w1     f19.   ;   nummerical:=0;
     al. w2     f25.-1 ;   digits:=-1;
     rl. w1     f4.    ;   set auxstate;
     jl.        c0.    ;   goto next char;

a29: dl. w0     f22.   ; end string:
     sl  w3     0      ;   if string full then
     jl.        a30.   ;   goto full;
     nd. w0     f22.   ;
     ld  w0     1      ;   fill string with zeroes;
     ds. w0     f22.   ; 
a30: jl. w3     d6.    ;   outstring;
     rl. w0     f20.   ;
     rs. w0     j3.    ;   futher nl action:=normal nl action;
     jl.        d38.   ;   goto return to neutral;

d4:  rs. w3     f16.   ; change auxstate to normal: save return1;
     al  w0  x1        ;   get saved special;
     jl. w3     d5.    ;   pack character(saved special);
     al. w1     f25.-1 ;   for i:=0 step 1 until digits do
a31: sl  w1  x2        ;
     jl.        a32.   ;
     al  w1  x1+1      ;
     bl  w0  x1        ;
     al. w3     a31.   ;
     jl.        d5.    ;   pack character(stored dig(i));
a32: al  w1     0      ;   auxstate:=normal;
     jl.       (f16.)  ;   goto return1;
\f

                                                                                        

;rc 3.12.1970                                  algol 6, pass 1, page 10

d5:  rs. w3     f17.   ; pack character: save return2;
     rl. w3     f21.   ;
     wa. w0     f22.   ;
     rs. w0     f22.   ;   string:=string+char;
     sl  w3     0      ;   if string full then
     jl. w3     d6.    ;   outstring;
     ld  w0     8      ;
     ds. w0     f22.   ;   string:=string shift 8;
     jl.       (f17.)  ;   goto return2;

d6:  rs. w3     f23.   ; outstring: save return3;
     rl. w0     f24.   ;
     jl. w3     e3.    ;   out direction byte;
     bz. w0     f21.   ;
     jl. w3     e3.    ;
     bz. w0     f21.+1 ;
     jl. w3     e3.    ;   out string bytes;
     bz. w0     f22.   ;
     jl. w3     e3.    ;
     bz. w0     f22.+1 ;
     jl. w3     e3.    ;
     al  w0     h3+4   ;
     rs. w0     f24.   ;   direction byte:=string next;
     al  w0     -1     ;   string:=empty string;
     al  w3     -1     ;
     jl.       (f23.)  ;   goto return3;
\f

                                                                                            

; jz 1979.08.22                               algol 6, pass 1, page 14

c12: se  w1     0      ; resletter after rigth par: if auxstate<>
     jl.        c0.    ;   expecting reserved then goto next char;
     al. w3     d18.   ;
     rs. w3     f32.   ;   no match res:=no match res after rigth par;
     jl.        d36.   ;   goto first of reserved ;

c13: al  w1     1      ; other letter after rigth par: auxstate:=aft let;
     jl.        c0.    ;   goto next char;

c14: jl. w2     d20.   ; simple or digit after rigth par: outpar;
     jl. w2     d21.   ;   restore after rigth par;
     jl.        c33.   ;   goto digit;

c15: jl. w2     d20.   ; rigth par after rigth par: outpar;
     jl.        c0.    ;   goto next char;

c16: rs. w0     f18.+2 ; reserved word after rigth par: save value,class;
     al  w0     h2+42  ;
     rs. w0     f13.   ;   last byte:=value(right par);
     jl. w3     e3.    ;   outbyte(rigthpar);
     al. w0     d26.   ;
     rs. w0     f32.   ;   no match res:=normal no match res;
     jl. w2     d21.   ;   restore after rigth par;
     dl. w0     f18.+2 ;   restore value,class;
     jl.        d37.   ;   goto after in;

d20: rs. w0     f18.+2 ; outpar: save value and class;
     sn  w1     0      ;   if auxstate<>aft let then
     jl.        a38.   ;   goto no error;
     al  w0     h3+1   ;
     jl. w3     e3.    ;
     al  w0     h11    ;
     jl. w3     e3.    ;   rigth par improper;
     al  w1     0      ;   auxstate:=expecting reserved;
a38: al  w0     h2+42  ; no error:
     jl. w3     e3.    ;   outbyte(rigth par);
     dl. w0     f18.+2 ;   restore value and class
     jl      x2        ;   return;

d21: al  w3     g41-d1 ; restore after right par:
     hs. w3     j1.    ;   state:=neutral;
d39: rl. w3     f10.   ;   comment entry from first of comp;
     rs. w3     j0.    ;   mode:=mode1;
     rl. w3     f20.   ; 
     rs. w3     j3.    ;   further nl:=normal nl;
     jl      x2        ;   return;

d18: al. w0     d26.   ; no match res after rigth par:
     rs. w0     f32.   ;   no match res:=normal no match res;
     jl.        d25.   ;   goto return from no match res;
\f

                                                                                                    
; jz 1979.08.22                       algol 8, pass 1, page ...15...

c17: jl. w2     d39.   ; first of comp after rigth par:
     al  w2     g41-d1 ;   oldstate :=
     rs. w2     f14.   ;    neutral;
     al. w2     a100.  ;   set return from outpar to first of comp after );
     se  w1     0      ;   if auxstate<>aft let
     se  w0     h2+3   ;   or char<>colon then
     jl.        d20.   ;   outpar;
     al  w3     9      ;
     rs. w3     f18.   ;   saved class:=9;
     al  w1     i86    ;   auxstate := fatcomp;
     jl.        a103.  ;   goto first of comp after);

c18: bl. w3  j1.       ; first of comp:
     rs. w3  f14.      ;   oldstate := state;
 
a100:al  w1     0      ; first of comp after ): auxstate:=expecting reserved;
a103:rl. w3     f18.   ;   get saved class;
     rs. w0     f22.   ;   saved value:=value;
     rl  w2     0      ;
     sh  w0     h0     ;
     am      x3+h0-h2-5;   comment char = colon;
     al. w2  x2+g48.   ;   comment x2+g48.=x2+g31.-1000
     bl  w2  x2+1000   ;
     al. w2  x2+g15.   ;   set comp tree point;
     al  w2  x2+g46    ;   this because of distance to g23
     al  w0     g39-d1 ;   state:=compound;
     jl.        d0.    ;   goto set state;

c19: se  w0     h2+30  ; simple in comp: if char=comma
     sn  w0     h2+25  ;   or char=left par then
     jl.        c20.   ;   goto test comp;
     jl.        c21.   ;   goto no match comp;

a39: al  w2  x2+6      ; next branch: comp tree point:=next branch;
c20: sn  w0 (x2)       ; test comp: if char=compchar(comp tree point) then
     jl.     x1+d23.   ;   goto if auxstate=fatcomp then fatcomp else compmatch;
     sl  w0 (x2+2)     ;   if -,last branch then
     jl.        a39.   ;   goto next branch;
c21: se  w1     0      ; no match comp: if auxstate=fatcomp then
     jl. w2     d20.   ;   outpar;
     rx. w0     f22.   ;   w:=saved value;saved value:=value;value:=w;
     rl. w3     f18.   ;   get saved class;
     rs. w3     f21.   ;   saved class:=class;
     rl. w3     f14.   ;
     hs. w3     j1.    ;   state := old state;
     sn  w3  g37-d1    ;   if old state <> end comm then
     jl.        a102.  ;    begin
     jl. w3     e3.    ;     outbyte(value);
     rs. w0     f6.    ;     last output:=value;
                       ;    end;
a102:rs. w0     f13.   ;   last byte:=value;
     dl. w0     f22.   ;   value:=saved value;class:=saved class;
     jl.        d37.   ;   goto after in;

d22: se  w0     h0+8   ; fatcomp:if char<>equal then
     jl.        d23.   ;   goto compmatch;
     rs. w2     f5.    ;   save comp tree point;
     jl. w2     d20.   ;   outpar;
     rl. w2     f5.    ;   restore comp tree point;
d23: rl. w0     f14.   ; compmatch:
     hs. w0     j1.    ;   state:=oldstate;
     bz  w3  x2+4      ;   class:=class(comp tree point);
     bl  w0  x2+5      ;   value:=value(comp tree point);
     jl.        d37.   ;   goto after in;

i86=d22-d23 ; modification of action addr for matching compound
\f

                                                                                         
; jz 1979.08.22                      algol 8, pass 1, page ...16...

c22: se  w1     0      ; resletter after end: if auxstate let then
     jl.        c0.    ;   goto next char;
 
d36: bl. w3     j1.    ; first of reserved:
     rs. w3     f14.   ;   old state := state;
 
     al. w1     f25.   ; 
     hs. w0     f25.   ;   letters := 0;
     rl  w2     0      ;   stored letters(0) := char;
     am       2000     ;
     bl. w2 x2+g53.    ;   get res tree point;
     al  w0     g40-d1 ;   state:=in res;
     jl.        d0.    ;   goto set state;
 
c24: se  w0     h2+24  ; simpel res after end:
     sn  w0     h2+28  ;   if char=else or char=until then
     jl.        d24.   ;   goto finish end comment;
 
c25: dl. w0     f22.   ; res after end: get saved wordterminator;
     jl.        d37.   ;   goto after in;

c26: sn  w0     h2+22  ; simple after end: if char=semicolon then
     jl.        d24.   ;   goto finish end comment;
c27: al  w1     0      ; word terminator: auxstate:=expecting reserved;
     jl.        c0.    ;   goto next char;

d24: rs. w0     f18.+2 ; finish end comment: save value class;
     rl. w0     f10.   ;
     rs. w0     j0.    ;   mode:=mode1;
     al. w0     d26.   ;
     rs. w0     f32.   ;   no match res:=normal no match res;
     al  w0     g41-d1 ;
     hs. w0     j1.    ;   state:=neutral
     dl. w0     f18.+2 ;   restore value,class;
     jl.        d37.   ;   goto after in;

c28: se  w1     0      ; resletter in prelude: if auxstate=aft let then
     jl.        c0.    ;   goto next char;
     jl.        d36.   ;   goto first of res;

a40: rl. w2  x2+i77.   ; next branch res: tree point:=next branch;
c29: sn. w0 (x2+g21.)  ; resletter: if char=letter(res tree point) then
     jl.        a41.   ;   goto resmatch;
     sl. w0 (x2+i77.)  ;   if -,last branch then
     jl.        a40.   ;   goto next branch res;
c30: rl. w3     f18.   ; no match res: get saved class;
     ds. w0     f22.   ;   save value,class;
     jl.       (f32.)  ;   no match res action;
d25: al  w1     1      ; return from no match res: auxstate:=aft let;
     rl. w0     f14.   ;
     hs. w0     j1.    ;   state:=old state;
     dl. w0     f22.   ;   restore value,class;
     jl.        d37.   ;   goto after in;

a41: al  w1  x1+1      ; resmatch: letters:=letters+1;
     hs  w0  x1        ;   stored let(letters):=char;
     al  w2  x2+4      ;   res tree point:=next letter;
     jl.        c0.    ;   goto next char;
\f

                                                                                              
; jz 1979.08.15                         algol 8, pass 1, pagre ...17...

c31: rl. w3     f18.   ; wordterminator in res: get saved class;
     ds. w0     f22.   ;   save value,class;
     al  w0     h5     ;
     se. w0 (x2+g21.)  ;   if reserved not finished then
     jl.       (f32.)  ;   no match res action;
     rl. w0     f14.   ;
     hs. w0     j1.    ;   state:=old state;
     al  w1     0      ;   auxstate:=expecting reserved;
     bz. w3  x2+i77.   ;   class:=class(res tree point);
     bl. w0  x2+i78.   ;   value:=value(res tree point);
     jl.        d37.   ;   goto after in;

d26: al. w2     f25.   ; normal no match res:
a42: bl  w0  x2        ;   for i:=0 step 1 until letters do
     am     -2047      ;
     jl. w3 e3.+2047   ;
     al  w2  x2+1      ;   outbyte(stored let(i));
     sh  w2  x1        ;
     jl.        a42.   ;
     rs. w0     f6.    ;   last output:=stored let(letters);
     rs. w0     f13.   ;   last byte:=stored let(letters);
     jl.        d25.   ;   goto return from no match res;

c23: se  w1     1      ; resletter: if auxstate=expecting reserved then
     jl.        d36.   ;   goto first of res;
c32: al  w1     1      ; other letter: auxstate:=aft let;
c33: am       -2047    ; 
     jl. w3 e3.+2047   ; digit: outbyte(char);
     rs. w0     f6.    ;   last output:=char;
     rs. w0     f13.   ;   last byte:=char;
     jl.        c0.    ;   goto next char;

c34: se  w1     1      ; space: if auxstate=expecting reserved then
     jl.        c0.    ;   goto next char;
c35: al  w1     0      ; simple: auxstate:=excepting reserved;
     jl.        c33.   ;   goto digit;

c36: am        -2047   ;
     jl. w3 e3.+2047   ; simple reserved: outbyte(value);
     rs. w0     f6.    ;   last output:=value;
     rs. w0     f13.   ;   last byte:=value;
     al. w3  e9.+6+2047;
     sn  w0  h13       ;   if byte=context then
     rs  w0  x3-2047   ;    contextmode:=true;
     dl. w0     f22.   ;   get saved wordterminator;
     jl.        d37.   ;   goto after in;
\f


; jz 1979.08.09               algol 8, pass 1, page ...18...
 
 
c37: rl. w3     f4.    ; state altering simple:
     se  w3     41     ;   if saved char = ) 
     jl.        a101.  ;    then    
     bl.  w3    j1.    ;     oldstate :=
     rs.  w3    f14.   ;      state;

a101:rl. w3     f14.   ; check end com:
     se  w3  g37-d1    ;   if oldstate <> endcom then
     jl.        a99.   ;    goto state altering;
     sn  w0  g44-d1    ;   if state = comment string then
     jl.     d0.       ;    goto set state;
     al  w0  x3        ;   state := old state;
     al  w1     0      ;   auxstate := 0;
     jl.        d0.    ;   goto set state;
 
a99: hs. w0     j1.    ; state altering: state:=state(value);
     rs. w0     f6.    ;   last output:=value;
     rl. w1     b12.   ;
     sn  w0     i73    ;   if value=layout start then
     jl.        d75.   ;   goto layout start;
     rl. w3     f12.   ;
     se  w1     i75    ;   if -, in algol then
     rs. w3     j0.    ;   mode:=mode3;
     al  w1     0      ;   auxstate:=normal;
     sn  w0     i72    ;   if value=string start then
     jl.        d27.   ;   goto string start;
     rl. w3     f33.   ; after right par,commstring:
     rs. w3     j3.    ;   futher nl action:=next char;
     rl. w3     b12.   ;   if state<>in algol
     se  w3     i75    ;   then goto nextchar;
     jl.        c0.    ;   
     al. w2     g47.    ;   g47.=c51-1000
     al  w2  x2+1000    ;
     bz  w1  x2+i93    ;   if saved auxstate
     sn  w1    0       ;   =neutral then goto
     jl.        c0.    ;   nextchar else if state
     sh  w1     2      ;   =intext or innumber then
     jl      x2+i101   ;   goto termination
     jl      x2+i94    ;   else goto paramalarm;

d27: rl. w3     f34.     ; string start:
     rs. w3     j3.      ;   futher nl action:=string char;
     al  w3     h3+3     ;   directionbyte:=string first;
     rs. w3     f24.     ;
     al  w0     -256     ;
     al  w3     -1       ;
     ds. w0     f22.     ;   string:=empty string;
     jl.        c0.      ;   goto next char;
\f


                                                                                                   
; jz 1979.02.15                                algol 8, pass 1, page 19

b8:  <:message :>
b9:  <:algol <0>:>
b12:   0                ; saved type

c38: rs. w0     f6.     ; state altering res: last output:=value;
     rs. w0     b12.    ;   save type
     rl. w2     f12.    ;   get mode3;
     se  w0     i74     ;   if value=comment
     sn. w2    (f11.)   ;   or mode3=mode2 then
     jl.        a46.    ;   goto after heading;
     al. w1     b8.     ;
     sn  w0     i75     ;   if value=algol
     al. w1     b9.     ;   then message(<:algol:>);
     am         -2000    ;
     jl. w3  e4.+2000   ;   message(<:message:>);
     rl. w2     f11.    ;   get mode2;
a46: rs. w2     j0.     ; after heading: set mode;
     rl. w0     f13.    ;   w:=last byte;
     se  w0     h2+5    ;   if w=begin
     sn  w0     h2+22   ;   or w=semicolon then
     jl.        a43.    ;   goto comment ok;
     al  w0     h3+1    ;
     am        -2000    ;
     jl. w3 e3.+2000    ;   comment error;
     al  w0     h9      ;
     am        -2000    ;
     jl. w3 e3.+2000    ;
a43: al  w0     g33-d1  ; comment ok:
     rl. w3     b12.    ;   if state=in algol then
     se  w3     i75     ;   begin
     jl.        a62.    ;
     al. w3     c51.    ;
     al  w3  x3+i95     ;
     al  w0     0       ;
     al  w1     0       ;   auxstate:=neutral;
     ds  w1  x3+2       ;   zeroset work variables;
     ds  w1  x3+6       ;
     rs  w1  x3+8       ;
     rs  w1  x3+i102    ;
     hs  w1  x3+i100    ;
     rl. w2     f0.     ;
     rl  w2  x2+e51+12  ;   move modebits from
     hs  w2  x3+i96     ;   zone descr to work;
     al  w0     g43-d1  ;   state:=algol;
                        ;   end else
a62: hs. w0     j1.     ;   state:=in comment;
     dl. w0     f22.    ;   get saved wordterminator;
     jl.        d37.    ;   goto after in;
\f


                                                                                                  
; jz 1979.08.09                               algol 8, pass 1, page 20

c40: rl. w3     f10.    ; first begin:
     rs. w3     j0.     ;   mode:=mode1;
     al  w3     g41-d1  ;
     hs. w3     j1.     ;   state:=neutral;
     al  w3     h4      ;
     rs. w3     j2.     ;   delete external from restable;
c41: al  w3     h2+5    ; begin:
     rs. w3     f6.     ;   last output:=begin;
     rs. w3     f13.    ;   last byte:=begin;
     am        -2000    ;
     jl. w3 e3.+2000    ;   outbyte(value);
     al  w3     1       ;
     wa. w3     f36.    ;
     rs. w3     f36.    ;   begin count:=begin count+1;
     al. w0     d26.    ;
     rs. w0     f32.    ;   no match res:=normal no match res;
     dl. w0     f22.    ;   get saved wordterminator;
     jl.        d37.    ;   goto after in;

c42: rl. w3     f12.    ; end:
     rs. w3     j0.     ;   mode:=mode3;
     al. w3     d25.    ;
     rs. w3     f32.    ;   no match res:=return from no match res;
     al  w3     g37-d1  ;
     hs. w3     j1.     ;   state:=in end comment;

c43: am        -2000    ;
     jl. w3 e3.+2000    ; end after end: outbyte(end);
     rs. w3     f6.     ;   last output:=end;
     al  w3     -1      ;
     wa. w3     f36.    ;
     rs. w3     f36.    ;   begin count:=begin count-1;
     sn  w3     0       ;   if begin count=0 then
     jl.        d32.    ;   goto end pass1;
     dl. w0     f22.    ;   get saved wordterminator;
     jl.        d37.    ;   goto after in;
 
c44: sn  w0     h0+2   ; first of comp in commentstring:
     jl.        a49.   ;   if char=star then goto testlessstar;
     sn  w0     h0+6   ;   if char=less then
     jl.        a50.   ;   goto newauxstate;
     sn  w0     h0+10  ;   if -, *>
     se  w1     42     ;   then
     jl.        c56.   ;   goto char in commentstring;
     rl. w0     f20.   ;   further nl action:=
     rs. w0     j3.    ;   normal nl action;
     al  w1     0      ;   auxstate := 0;
     rl. w0     f14.   ;
     rl. w3     b12.   ;   if inalgol then
     sn  w3     i75    ;    state := inalgol
     al  w0  g43-d1    ;   else state := old state;
     jl.        d0.    ;   goto set state;
a49: se  w1     60     ; testlessstar: if -, <*
     jl.        a50.   ;   then goto newauxstate;
     al  w0     h3+1   ; trouble:
     am         -2000  ;
     jl. w3 e3.+2000   ;   outerror(text);
     al  w0     h12    ;
     am        -2000   ;
     jl. w3 e3.+2000   ;
a50: rl. w1     f4.    ; newauxstate:
     jl.        c0.    ;   goto nextchar;
c56: al  w1     0      ; char in commentstring: auxstate:=normal;
     jl.        c0.    ;   goto nextchar;

                                                                    \f

                                        
; jz 1979.10.16                                algol 8, pass 1, page 21

b24: <: unknown:>      ;
b25: <: not textfile:> ;
b26: <: not mag.tape:> ;
b27: <: illegal kind:> ;
b28: <: connect error:>;
b29: <: not text<0>:>  ;
b30: <: hard error:>   
b31: <:error at source: :>;
b32: 0                 ;   status
b33: 0                 ;   cause, count
d61: am      b24-b25   ;   giveup(unknown)
d60: am      b25-b26   ;   giveup(not textfile)
d59: am      b26-b27   ;   giveup(not mag.tape);
d58: am      b27-b28   ;   giveup(illegal kind)
d57: am      b28-b29   ;   giveup(connect error);
d56: am      b29-b30   ;   giveup(not text);
d55: al. w0     b30.   ;   giveup(hard error);
     ds. w0     b33.   ;   save cause, status;
     al. w1     b31.   ;   
     am         -2000  ;
     jl. w3    e4.+2000;   message(<:error at source:>);
     al. w1     c51.   ;
     rl  w1  x1+i103   ;
     am         -2000  ;
     rs. w1   e82.+2000;   save name addr
     jl. w3     d31.   ;   printname;
     rl. w1     b33.   ;
     am       -2047    ;
     jl. w3 e13.+2047  ;   writetext(error cause);
     rl. w0     b32.   ;   if harderror then
     se. w1     b30.   ;   fpanswer:=statusbits;
a52: al  w0     1      ; terminate translation:
     am       -2000    ;
     rs. w0 e40.+2000  ;   unsuccesfull execution:=other reason;
     jl. w1     d54.   ;   reestablish cur.input;
     am       -2000    ;
     jl.    e26.+2000  ;   goto fp end program;
\f


; jz.fgs 1986.03.03                       algol 8, pass 1, page ...22...


d32: al  w0     h3     ; end pass:
     am          -2000 ;
     jl. w3  e3. +2000 ;   outbyte (end pass);
     rl. w0     f45.   ;
     sn  w0     0      ;   if missing end counter <>0 then
     jl.        a53.   ;   begin
     am          -2000 ;
     jl. w3  e14.+2000 ;
     32<12     +5      ;     writeinteger(<<ddddd>,missing end counter);
     al. w1     b17.   ;
     rl. w3     b18.   ;     writetext(if missing end counter=1 then
     sn  w0     1      ;     <: end missing:> else <: ends missing:>);
     rs  w3  x1+2      ;
     am         -1000  ;
     jl. w3 e13.+1000  ;   end
     jl.        a81.   ;   else
a53: rl. w3     j0.    ;   if mode<>listing then
     sn. w3     (f8.)  ;   begin
     jl.        a81.   ;
     al  w0     10     ;
     am          -1000 ;
     jl. w3  e12.+1000 ;     outnl;
     am          -1000 ;
     jl. w3  e27.+1000 ;     outlinenumber;
     al. w1     b20.   ;
     am          -1000 ;
     jl. w3  e13.+1000 ;     outtext (<:end:>);
     rl. w0     f4.    ;     
     am          -1000 ;
     jl. w3  e12.+1000 ;     outchar (terminator);
                       ;   end;

b35 = k + 1            ; one source listed:

a81: sn  w3  x3        ;   if one source listed then
     jl.        a82.   ;   begin
     al  w0     12     ;     outff;
     am          -1000 ;
     jl. w3  e12.+1000 ;   end;

a82: rl. w3     f44.   ; 
     am          -1000 ;
     se. w3 (e46.+1000);   if sourcepointer <> sourcelist start then
     jl.        a61.   ;     goto end pass;

     jl. w1     d54.   ;   reestablish current input;
     rl. w0     f47.   ;   restore give up;
     rs  w0  x3+e50+2  ;   restore give up;

a61: am          -1000 ; goto end pass:
     jl.     e7. +1000 ;   goto end pass;


b17: <: ends missing:>
b18: <:d<32> :>
b20: <: end:>
d54: rs. w1     b32.   ;  save return;
     rl. w3     f0.    ; reestablish current input:
     rl. w0     f1.    ;   partial word:=
     rs  w0  x3+e50+4  ;   current word;
     am         -1000  ;
     rl. w0   e64.+1000;   save bossline;
     rs  w0  x3+e50+6  ;
     rl. w1     f2.    ;   recordbase:=
     al  w1  x1-2      ;   cur word addr-2;
     rl. w2     f3.    ;   last byte:=last word addr;
     ds  w2  x3+e51+2  ;
     jl.        (b32.) ;   end pass;
                                          \f

                                        
;jz.fgs.1981.03.02                                  algol 6, pass 1, page ...23...

c45: al  w3     10     ; em: saved input:=nl;
     rs. w3     f4.    ;
     rl. w1     f8.    ;   if mode3<>listing
     se. w1     (f12.) ;   and mode2=
     se. w1     (f11.) ;   message.yes
     jl.        a47.   ;   then
     al. w1     b10.   ;   write(out,<:end medium:>);
     am         -1000  ;
     jl. w3  e4.+1000  ;
a47:                   ;
     rl. w3     f38.   ;   next char action:=(goto next source);
     am.      g49.       ;  g49.=b44.-1000
     bz  w1     1000     ;
     se  w1     0      ;   then nextaction:=
     rl. w3     f48.   ;   goto unstack;
     rs. w3     c0.    ;   value:=value(nl);
     al  w3     8      ;   class:=class(nl);
     jl.        d37.   ;   goto after in;

b10: <:end medium:>
 
c39: jl.        c55.   ;   stepping stone to unstack;
c47: jl.        c51.   ;   stepping stone to digit
c48: jl.        c52.   ;   stepping stone to letter
c49: jl.        c53.   ;   stepping stone to simple
c50: jl.        c54.   ;   stepping stone to nl ff sp
c58: jl.        c60.   ;   stepping stone to comp
c59: jl.        c61.   ;   stepping stone to lessstar:
c66: am        -2047   ;   stepping stone to outbyte
     jl.    e3.+2047   ;

d43: rl. w3     f44.   ; next source:
     rl  w0  x3        ;
     sn  w0     0      ;   if sourcelist empty then
     jl.        d47.   ;   goto terminate program;
     ds. w2     f17.   ;   save registers;
     rl. w1     f0.    ;
     am.       (f43.)  ;
     jl  w3     e67    ;   terminate zone;

d44: rl. w3     f44.   ; connect source: 
     al  w2  x3+10     ;
     rs. w2     f44.   ;
a48: rs. w3     b40.   ;   save cur name addr;
     am.        (f43.) ;
     al  w1     e55    ;   w1:=fp lookup area
     jd         1<11+42;   lookup tail
     sn  w0     3      ;   if not found then
     jl.        d61.   ;   goto giveup(unknown);
     bl  w0  x1+16     ;
     se  w0     0      ;   if contents<>0 then
     jl.        d60.   ;   goto giveup(not textfile)
     rl  w2  x1        ;   modekind
     bz  w0  x3+8      ;
     sn  w0     0      ;   if fileno<>0 then
     jl.        a54.   ;   begin
     wa  w0  x1+12     ;   filecount:=filecount
     rs  w0  x1+12     ;   + fileno;
     bz  w0  x1+1      ;   w0:=kind;
     sh  w2     0      ;   if modekind>0 or
     se  w0    18      ;   kind<>18 then
     jl.        d59.   ;   giveup(not mag.tape);
a54: sl  w2     0      ;   end;
     al  w1  x3        ;   if bsarea then connect name
\f


; jz 1979.08.09                    algol 8, pass 1, page ...23a...

     al  w2  x1        ;   w2:=tail addr
     am.        (f43.) ;
     jl  w3     e31-2  ;   connect current input;
     sn  w0     4      ;   if result=4 then
     jl.        d58.   ;   giveup(kind);
     se  w0     0      ;   if result<>0 then
     jl.        d57.   ;   giveup(connect);
     rl. w3     b40.   ;
     al  w2  x1        ;
     dl  w1  x3+2      ;
     ds  w1  x2+e51+6  ;   move name
     dl  w1  x3+6      ;   to zonedescr.
     ds  w1  x2+e51+10 ;
     rl  w0  x3+8      ;
     rs  w0  x2+e51+12 ;   w0:=modebits;
     al  w1     10     ;   bossline:=0;
     am         1      ;
d42: al  w2     0      ; medium connected:
     hs. w2     j5.    ;
     am        -1000   ;
     rs. w1   e64.+1000;   set bossline;
     jl. w1     d45.   ;   set modes;
     al  w1  x3        ;

     dl  w0  x1+e51+2  ; 
     al  w3  x3+2      ;   current word addr:=record base+2;
     ds. w0     f3.    ;   last word addr:=last byte;
     rl  w0  x1+e50+4  ;
     rs. w0     f1.    ;   current word:=partial word;
     rl. w3     f11.   ;   if message.no then
     sn. w3     (f9.)  ;   then skip
     jl.        a11.   ;   nameprint;
     jl. w3     d46.   ;   outnl;
     jl. w3     d31.   ;   outname;
j5=k+1
     se  w1  x1+0      ;   if new source then
     jl. w3     d34.   ;   print date and clock
a11: rl. w3     f8.    ;   if mode=listing then
     se. w3     (j0.)  ;   print linecount;
     jl.        a34.   ;
     jl. w3     d46.   ;   outnl;
     am        -1000   ;
     jl. w3   e27.+1000;   writeinteger(line);
     jl. w3     d50.   ;   writechar(out,space);
a34: rl. w3     f15.   ;
     rs. w3     c0.    ;   next char action:=normal;
     rl. w3     f41.   ;   end next block action:=normal;
     rl. w1     b34.   ;   restore w1
     bl  w0  x1+e49+1  ;   if kind=typewriter then
     sn  w0     8      ;   end next block action:=
     rl. w3     f42.   ;    test line cancel;
     rs. w3     j4.    ;
     al. w3     d55.   ;
     rs  w3  x1+e50+2  ;   set giveup action;
     dl. w2     f17.   ;   restore registers;
     jl.        c0.    ;   goto next char;
\f


; jz.fgs 1982.08.18                 algol 6, pass 1, page ...23b...
 
 
 
d45: al. w2     c20.   ; set modes:
     sz  w0     1      ;   if listing mode then
     jl.        a44.   ;   goto all list;
     rl  w3  x2+f7 -c20;
     rs  w3  x2+f10-c20;   mode1:=get class;
     rl  w3  x2+f9 -c20;   w:=
     rs  w3  x2+f12-c20;   mode3:=test line;
     sz  w0     2      ;   if message mode then
     rl  w3  x2+f8 -c20;   w:=listing;
     rs  w3  x2+f11-c20;   mode2:=w;
     jl.        a45.   ;   goto further init;
a44: rl  w3  x2+f8 -c20; all list:
     rs  w3  x2+f10-c20;   mode1:=
     rs  w3  x2+f11-c20;   mode2:=
     rs  w3  x2+f12-c20;   mode3:=listing;
     al  w3     1      ;   one source listed :=
     hs. w3     b35.   ;     true;

a45: bl. w3     j1.    ; further init:
     sn  w3     g38-d1 ;   if state=prelude then
     jl.        a59.   ;   mode:=mode2 else
     se  w3     g34-d1 ;   if state=instring or state=
     sn  w3     g36-d1 ;   after rightpar then mode:=mode3 
     jl.        a60.   ;   else
     se  w3     g44-d1 ;   if state=in commentstring or
     sn  w3     g37-d1 ;   state=after end then mode:=
     jl.        a60.   ;   mode3 else
     sn  w3     g33-d1 ;   if state<>comment and state<>
     se  w3     g43-d1 ;   algol then mode:=mode1 else
     jl.        a58.   ;   if state=comment then
     rl. w3     b12.   ;   mode:=mode3 else
     se  w3     i74    ;   if state=message or
     jl.        a59.   ;   state=algol then
     jl.        a60.   ;   mode:=mode2;
a58: am         f10-f11;
a59: am         f11-f12;
a60: rl. w3     f12.   ;
     rs. w3     j0.    ;
     am     (x2+e23-c20;
     al  w3     e22
     rs. w3     b34.   ;   save cur in descr.
     hs  w0  x3+e51+13 ;   save modebits
     jl      x1        ;   return
                                                  \f

                                                
;rc 1977.11.02                                algol 6, pass 1, page ...24...

d47: rl. w0     f39.   ; terminate program:
     rs. w0     c0.    ;   next char action:=(goto generate terminator);
     al  w0  x1        ;
     al. w1     b13.   ;
     am.        c20.   ;
     jl  w3     e4-c20 ;   message(<:source exhausted:>);
     rl  w1     0      ;

d48: bl. w0     j1.    ; generate terminator:
     se  w0     g43-d1 ;   if state=in algol or
     sn  w0     g33-d1 ;   if state=in comment then
     jl.        d51.   ;   goto terminate comment;
     sn  w0     g34-d1 ;   if state=instring then
     jl.        d52.   ;   goto terminate string;
     sn  w0     g44-d1 ;   if state=commentstring then
     jl.        d62.   ;   goto terminate commentstring;
     se  w0     g38-d1 ;   if state <> in prelude then
     jl.        d53.   ;   goto generate end;
     al. w1     b14.   ;   
     jl. w3    (f46.)  ;   writetext(<:no program:>);
     jl.        a52.   ;   goto terminate translation;
 
b13: <:source exhausted:>
b14: <: no program:>

d51: al  w0  x1        ; terminate comment:
     al. w1     b15.   ;
     jl. w3    (f46.)  ;   writetext(<: in comment:>);
     rl  w1     0      ;
     al  w3     5      ;   class:=class(semicolon);
     al  w0     h2+22  ;   value:=value(semicolon);
     jl.        d37.   ;   goto after in;

b15: <: in comment:>

d52: al  w3     7      ; terminate string:
     al  w0     h0+10  ;   if auxstate=expecting end string then
     sn  w1     58     ;   begin class:=class(>);value:=value(>);goto after in
     jl.        d37.   ;   end;
     al. w1     b16.   ;
     jl. w3    (f46.)  ;   writetext(<: in string:>);
     al  w1     58     ;
     rs. w1     f4.    ;   saved input:=colon;
     al  w1     0      ;   auxstate:=normal;
     al  w3     7      ;   class:=class(colon);
     al  w0     h2+3   ;   value:=value(colon);
     jl.        a51.   ;   goto after in;

b16: <: in string:>

d53: al  w0     1      ; generate end:
     wa. w0     f45.   ;
     rs. w0     f45.   ;   missing end counter:=missing end counter+1;
     al  w0     h3+5   ;
     al  w3     9      ;
     ds. w0     f22.   ;   saved wordterminator:=space;
     al  w0     h2+23  ;   value:=value(end);
     al  w3     14     ;   class:=class(end);
a51: am      -1000       ;
     jl.      d37.+1000  ;   goto after in;
\f


; rc 1974.11.18                                algol 6, pass 1, page 24a

d62: al  w3     7      ; terminate commentstring:
     al  w0     h0+10  ;   if auxstate=expecting end string then
     sn  w1     42     ;   begin class:=class(>); value:=value(>)
     jl.        a51.   ;   (d37.) goto after in  end;
     al. w1     b23.   ;
     jl. w3     (f46.) ;   writetext(<: in commentstring:>);
     al  w1     42     ;
     rs. w1     f4.    ;   saved input:=star;
     al  w1     0      ;   auxstate:=normal;
     al  w3     7      ;   class:=class(star);
     al  w0     h0+2   ;   value:=star;
     jl.        a51.   ;   (d37.) goto after in;

b23: <: in commentstring:>
 
\f

                                                                                                  
; jz.fgs 1982.11.08                          algol 8, pass 1, page ...25...

;table of reserved words
 
w.
g2 :2 ,i51,19,h4 ,h5,12<12+h2+35                            ; abs
a6 :4 ,i92,4 ,h4 ,h5,12<12+h0+19                            ; add
a5 :12,i52,7 ,h4 ,15,h4 ,12,h4 ,h5,11<12+3                  ; algol
a7 :18,i53,18,h4 ,1 ,h4 ,25,h4 ,h5,12<12+h2+17              ; array
a8 :14,h4 ,4 ,h4 ,h5,12<12+h0+12                            ; and
g3 :5 ,i54,7 ,h4 ,9 ,h4 ,14,h4 ,h5,13<12+h2+5               ; begin
a9 :15,h4 ,15,h4 ,12,h4 ,5 ,h4 ,1 ,h4 ,14,h4 ,h5,12<12+h2+13; boolean
g4 :1 ,i55,19,h4 ,5 ,h4 ,h5,12<12+h2+36                     ; case
a10:15,h4 ,13,i104,13,h4 ,5 ,h4 ,14,h4 ,20,h4 ,h5,11<12+1   ; comment
a86: 14,h4,20,h4,5,i106,24,h4,20,h4,h5,12<12+h13            ; context
a84: 9,h4,14,h4,21,h4,5,h4,h5,12<12+h15                     ; continue
g5 :15,i109 ,h5,12<12+h2+34                                 ; do
a98: 9,  h4 ,19,h4,1,h4,2,h4,12,h4,5,h4,h5,12<12+h2+43      ; disable 
g6 :12,i57,19,h4 ,5 ,h4 ,h5,12<12+h2+24                     ; else
a12:14,i58,4 ,i59,h5,14<12+h2+23                            ; end
a13:20,h4 ,9 ,h4 ,5 ,h4 ,18,h4 ,h5,12<12+h2+39              ; entier
a14:24,h4 ,20,i105,18,i89,1 ,h4,3 ,h4,20,h4,h5,12<12+h0+18  ; extract
a83: 9,h4,20,h4,h5,12<12+h14                                ; exit
a55:5 ,h4 ,14,j2:i60,4  ,h4,h5 ,12<12+h2+40                 ; extend
 
;in prelude the chain goes on,else it ends here
a15:18,h4 ,14,h4 ,1 ,h4 ,12,h4 ,h5,13<12+h2+6               ; external
g7 :1 ,i90,12 ,h4 ,19,h4 ,5 ,h4 ,h5,12<12+h0+1              ; false
a56:9 ,i61,5 ,h4 ,12,h4 ,4 ,h4 ,h5,12<12+h2+15              ; field
a16:15,h4 ,18,h4 ,h5,12<12+h2+7                             ; for
g8 :15,h4 ,20,h4 ,15,h4 ,h5,12<12+h2+4                      ; goto
g9 :29,h4                                                   ; haa,paa,xaa,yaa
g10:6 ,i62,h5,12<12+h2+8                                    ; if
a17:14,h4 ,20,h4 ,5 ,h4 ,7 ,h4 ,5 ,h4 ,18,h4 ,h5,12<12+h2+10; integer
g11:1 ,i91,2 ,h4 ,5 ,h4 ,12,h4 ,h5,12<12+h2+20              ; label
a57:15,h4 ,14,h4,7 ,h4 ,h5 ,12<12+h2+11                     ; long
g12:5 ,i63,19,h4 ,19,h4 ,1 ,h4 ,7 ,h4 ,5 ,h4 ,h5,11<12+2    ; message
a18:15,h4 ,4 ,h4 ,h5,12<12+h0+16                            ; mod
g32:15,h4,20,h4,h5,12<12+h2+26                              ; not
g13:6 ,i64,h5,12<12+h2+37                                   ; of
a19:23,i65,14,h4 ,h5,12<12+h2+9                             ; own
a20:18,h4 ,h5,12<12+h0+13                                   ; or
g14:18,h4 ,15,h4 ,3 ,h4 ,5 ,h4 ,4 ,h4 ,21,h4 ,18,h4 ,5 ,h4 ,h5,12<12+h2+16
                                                            ; procedure
g15:5 ,i66,1 ,i107,12,h4 ,h5,12<12+h2+12                    ; real
a85: 16,h4,5,h4,1,h4,20,h4,h5,12<12+h16                     ; repeat
a21:15,h4 ,21,h4 ,14,h4 ,4 ,h4 ,h5,12<12+h2+38              ; round
g16:8 ,i67,9 ,h4 ,6 ,h4 ,20,h4 ,h5,12<12+h0+17              ; shift
a22:20,i68,5 ,i69,16,h4 ,h5,12<12+h2+27                     ; step
a23:18,h4 ,9 ,h4 ,14,h4 ,7 ,h4 ,h5,12<12+h2+19              ; string
a24:23,h4 ,9 ,h4 ,20,h4 ,3 ,h4 ,8 ,h4 ,h5,12<12+h2+18       ; switch
g17:8 ,i70,5 ,h4 ,14,h4 ,h5,12<12+h2+32                     ; then
a25:18,h4 ,21,h4 ,5 ,h4 ,h5,12<12+h0                        ; true
g18:14,h4 ,20,h4 ,9 ,h4 ,12,h4 ,h5,12<12+h2+28              ; until
g19:1 ,h4 ,12,h4 ,21,h4 ,5 ,h4 ,h5,12<12+h2+21              ; value
g20:8 ,h4 ,9 ,h4 ,12,h4 ,5 ,h4 ,h5,12<12+h2+29              ; while
g21:15,h4 ,14,h4 ,5 ,h4 ,h5,12<12+h2+14                     ; zone
 
; relative addresses:
 
i51=a6 -g21,i52=a7 -g21,i53=a8 -g21,i54=a9 -g21,i55=a10-g21 ; rel addr
i57=a12-g21,i58=a14-g21,i59=a13-g21,i60=a15-g21             ;
i61=a16-g21,i62=a17-g21,i63=a18-g21,i64=a19-g21,i65=a20-g21 ;
i66=a21-g21,i67=a22-g21,i68=a24-g21,i69=a23-g21,i70=a25-g21 ;
i89=a55-g21,i90=a56-g21,i91=a57-g21,i92=a5 -g21             ;
i104=a86-g21,i105=a83-g21,i106=a84-g21,i107=a85-g21         ;
i109=a98-g21                                                ;
\f

                                                                                                       
                                                                                                            
; jz.fgs 1982.11.05                algol 6, pass 1, page ...26...

;table of pointers to reserved words
h.                                                 ; letters
 
g22=k-1,  g53 = g22 - 2000 ; (g53 used page 16)
  
    g2 -g21,g3 -g21,g4 -g21,g5 -g21,g6 -g21,g7 -g21; a,b,c,d,e,f
    g8 -g21,g9 -g21,g10-g21,0      ,0      ,g11-g21; g,h,i,j,k,l
    g12-g21,g32-g21,g13-g21,g14-g21,0      ,g15-g21; m,n,o,p,q,r
    g16-g21,g17-g21,g18-g21,g19-g21,g20-g21,g9 -g21; s,t,u,v,w,x
    g9 -g21,g21-g21                                ; y,z

;compound table
w.                                          ; first   compounds
g23:h0+2 ,h4,5<12+h0+4                      ;   *      **
g46=g23-g15
g24:h0+3 ,h4,5<12+h0+5                      ;   /      //
g25:h2+30,h4,5<12+h2+26                     ;   -      -,
g26:h2+25,-1,5<12+h2+41                     ; :infat   :(
g27:h0+8 ,h4,5<12+h2+31                     ;   :      :=
g28:h2+3 ,-1,h.6,g34-d1,w.h0+6,-1,h.6,g35-d1;   <      <: ,<<
w.  h0+2 ,-1,h.6,g44-d1                     ;          <*
w.  h0+10,-1,5<12+h0+11,h0+8 ,h4,5<12+h0+7  ;          <> ,<=
g29:h0+8 ,-1,5<12+h0+14,h0+10,h4,5<12+h0+15 ;   =      == ,=>
g30:h0+8 ,h4,5<12+h0+9                      ;   >      >=

;table of pointers to compounds
h.
g31=k-h0-2                                  ; firsts
    g23-g23,g24-g23,g25-g23,g27-g23,g28-g23 ; * , / , - , : ,<
    g26-g23,g29-g23,0      ,g30-g23         ; (:, = , no, >
     g48=g31-1000
\f

                                                                                                
;fgs 1986.03.10                     algol 6, pass 1, page ...27...

w.
d33: al  w0  x2+d25-c20; init pass1:
     rs  w0  x2+f32-c20;   no match res:=return from no match res;
     al  w0     g38-d1 ;
     hs  w0  x2+j1 -c20;   state:=in prelude;
     am     (x2+e23-c20;
     al  w0     e28-2  ;   get abs addr input block current input;
     rs  w0  x2+f40-c20;
     rl  w0  x2+e23-c20;   get abs addr fp base;
     rs  w0  x2+f43-c20;
     al  w0  x2+e13-c20;
     rs  w0  x2+f46-c20;   get abs addr writetext;
     am     (x2+e23-c20;
     al  w1     e22    ;
     rs  w1  x2+f0 -c20;   get abs addr current input descr;
     dl  w0  x1+e49+4  ;   save name from
     ds  w0  x1+e51+6  ;     curr in process descr
     dl  w0  x1+e49+8  ;   in
     ds  w0  x1+e51+10 ;     curr in record  descr;
     rl  w0  x1+e50+2  ;
     rs  w0  x2+f47-c20;   save giveup action;
     rl  w3  x2+e46-c20;
     rs  w3  x2+f44-c20;   sourcepointer:=start source list;
     rl  w3  x3        ;
     al  w0  x1+e51+4  ;   save addr of
     rs. w0     b40.   ;     name;
     bz  w0  x2+e17-c20+1; fileno, modebits :=
     rs  w0  x1+e51+12 ;     0, modebits (12.23);
     al  w1     10     ;   bossline
     sn  w3     0      ;   if source list empty then
     jl      x2+d42-c20;   goto medium connected;
     am     (x2+e23-c20;
     jl  w3     e44-4  ;   stack current input;
     jl.        d44.   ;   goto connect source;

;assignment of intermediate action addresses:
i0 =c0 -d1-2, i1 =c1 -d1-2, i2 =c2 -d1-2, i3 =c3 -d1-2, i4 =c4 -d1-2
i5 =c5 -d1-2, i6 =c6 -d1-2, i7 =c7 -d1-2, i8 =c8 -d1-2, i9 =c9 -d1-2
i10=c10-d1-2, i11=c11-d1-2, i12=c12-d1-2, i13=c13-d1-2, i14=c14-d1-2
i15=c15-d1-2, i16=c16-d1-2, i17=c17-d1-2, i18=c18-d1-2, i19=c19-d1-2
i20=c20-d1-2, i21=c21-d1-2, i22=c22-d1-2, i23=c23-d1-2, i24=c24-d1-2
i25=c25-d1-2, i26=c26-d1-2, i27=c27-d1-2, i28=c28-d1-2, i29=c29-d1-2
i30=c30-d1-2, i31=c31-d1-2, i32=c32-d1-2, i33=c33-d1-2, i34=c34-d1-2
i35=c35-d1-2, i36=c36-d1-2, i37=c37-d1-2, i38=c38-d1-2
i40=c40-d1-2, i41=c41-d1-2, i42=c42-d1-2, i43=c43-d1-2, i44=c44-d1-2
i45=c45-d1-2, i46=c46-d1-2, i47=c47-d1-2, i48=c48-d1-2, i49=c49-d1-2,
i50=c50-d1-2, i56=c56-d1-2, i98=c58-d1-2, i99=c59-d1-2

;assignment of other intermediates:
i71=g36-d1, i72=g34-d1, i73=g35-d1; values of state altering simples
i74=1     , i75=3,      i76=2     ; values of state altering reserveds
i77=g21+2 , i78=g21+3             ; bases for class and value of reserveds
i79=c0 -j3, i80=c4 -j3, i81=c11-j3; rel addr of futher nl actions
i84=d33-c20-1000,i87=d43-c0,i88=d48-c0,i39=c39-c0    ; rel addr of initialise pass 1
\f


; jz 1979.08.09                 algol 8, pass 1, page ...28...
 
d31: rs. w3     b22.   ;   printname:
     rl. w1     b40.   ;
     jl. w3     d41.   ;   
     rl. w1     b40.   ;
     bz  w1  x1+8      ;   w1:=fileno
     sn  w1     0      ;   if fileno<>0 then
     jl.        (b22.) ;
     jl. w3     d49.   ;   writechar(point);
     al  w0  x1        ;
     jl. w3     d40.   ;   writeinteger(fileno)
     1                 ;
     jl.        (b22.) ;
b22: 0                 ;
b34: 0
 
d40: am        -2047   ; outinteger
     jl.      c65.+2047;
 
d41: am        -2047   ; outtext
     jl.      c64.+2047;
d65:  am        58-10  ; outcolon;
 
d46: am         10-46  ; outnl
d49: am         46-32  ; outpoint
d50: al  w0     32     ; outsp
     am         -2047  ;
     jl.      c63.+2047;
 
d34: am         -2047  ;
     am.     (f43.+2047;
     al  w1     e55    ;   print date and clock
     rs. w3     b22.   ;
     rl. w3     b40.   ;
     jd       1<11+42  ;   lookup tail
     jl. w3     d50.   ;   outsp;
     rl  w0  x1+10     ;   w0:=shortclock;
     sn  w0     0      ;
     jl.       (b22.)  ;   if 0 then return;
     jl. w3     d64.   ;   convclock;
     jl. w2     d63.   ;   print convclock;
     jl.        (b22.) ;   return;
\f


; rc  1977.10.02                 algol6, pass 1, page ...29...

; parameters after the delimeter algol
; auxstate:
; 0=neutral, 1=inerror, 2=afterpoint, 3=intext, 4=innumber
 
c51:                    ; digit:
g47=c51-1000
     sn  w1     0       ;   if auxstate=neutral then
     jl.        c57.    ;   goto paramerror;
     sn  w1     1       ;   if auxstate=inerror then
     jl.        a70.    ;   goto nextchar;
     sn  w1     3       ;   if auxstate=intext then
     jl.        a63.    ;   goto packtext;
     rl. w2     b45.    ;
     sn  w1     2       ;   if auxstate=afterpoint
     sl. w2     b47.    ;   and option<copy then
     se  w1  x1         ;   goto
     jl.        c57.    ;   paramerror;
     al  w1     4       ;   auxstate:=innumber;
     bz. w3     b43.    ;
     wm. w3     b39.    ;   integer:=integer*10
     wa  w3     0       ;   + value;
     al  w3  x3-h1      ;
     hs. w3     b43.    ;
     jl.        a70.    ;   goto next char;

c52:                    ; letter:
     sn  w1     4       ;   if auxstate=innumber
     jl.        c57.    ;   then goto paramerror;
     sn  w1     1       ;   if auxstate=inerror
     jl.        a70.    ;   then goto nextchar;
     rl. w2     b45.    ;
     sn  w1     2       ;   if auxstate=afterpoint then
     al  w1     0       ;   auxstate:=neutral;
     sn  w1     0       ;   if auxstate=neutral
     sh. w2     b47.    ;   and option>copy then
     se  w1  x1         ;   goto paramerror;
     jl.        c57.    ;
     al. w3     b41.    ;   if auxstate<>intext then
     se  w1     3       ;   init text addr;
     rs. w3     b40.    ;
     al  w1     3       ;   auxstate:=intext;
a63:                    ; packtext:
     rl. w3     (b40.)  ;   string:= string
     ls  w3     8       ;   shift 8
     am        -2000    ;
     wa. w3     f4.+2000;   add char;
     rs. w3     (b40.)  ;
     sh. w3     b48.    ;   if not full then
     jl.        a70.    ;   goto next char;
     rl. w3     b40.    ;
     al  w3  x3+2       ;   increase textaddr.
     rs. w3     b40.    ;
     se. w3     b43.    ;   if not toolong then
     jl.        a70.    ;   goto next char
     jl.        c57.    ;   else goto paramerror;

\f


; jz.fgs 1982.08.18           algol 8, pass 1, page ...30...
 
c53:                    ; simple:
     se  w0     h2+22   ;   if -,semicolon then
     jl.        a68.    ;   goto maybe point;
     sl  w1     3       ;   if auxstate=intext or
     jl.        a71.    ;   innumber then goto termination;
     se  w1     0       ;   if auxstate<>neutral then
     jl.        a76.    ;   goto paramalarm;
a64:                    ; finis:
     al  w0     h2+22   ;   w0:=value char;
     al  w1     -2000   ;
     rs. w0 x1+f13.+2000;   lastbyte:=semicolon;
     rl. w0 x1+f10.+2000;
     rs. w0  x1+j0.+2000;   mode:=mode1;
     al  w0     0       ;
      am     -2000
     rs. w0     b12.+2000;   inalgol:=false;
     al  w0     g41-d1  ;   state:=neutral;
     hs. w0  x1+j1.+2000;
     rl. w1     b41.    ;   if no name then
     sn  w1     0       ;   goto
     jl.        a66.    ;   maybe number;
     al. w3     b41.    ;   copynameaddr
a65: rs. w3     b40.    ; copysource: save name addr.
     jl. w1     d54.    ;   reestablish current input;
     am      -2000
     al. w2     c40.+2000;   
     am     -2000       ;
     am     (x2+e23-c40+2000);
     jl  w3     e44-4   ;   stack cur in;
     bz. w1     b44.    ;
     al  w1  x1+1       ;   stackniveau:=
     hs. w1     b44.    ;   stackniveau+1;
     rl. w3     b40.    ;   restore name addr;
     jl.        a48.    ;   goto connect;
a66: bz. w3     b43.    ; maybe number:
     sn  w3     0       ;   if not number then
     jl.        a67.    ;   goto mode;
     al  w3  x3-1       ;
     am         -2000   ;
     al. w1  c0.+2000   ;   if number>maxparam then
     am        -2000
     rl  w1  x1+e83-c0+2000  ;
     sl  w3  x1         ;   goto sourcealarm;
     jl.        a78.    ;
     wm. w3     b39.    ;   w3:=addr of name
     am        -2000    ;   in call;
     al. w2  c0.+2000  ;
     am     -2047      ;
     wa  w3 x2+e47-c0+2047;
     jl.        a65.    ;   goto copysource;
a67: bz. w0     b42.    ; mode: w0:=mode;
     jl. w1     d45.    ;   set modes;
     al  w1     0       ;   auxstate:=0;
     jl.        a70.    ;   goto next char;

\f


;rc 1975.01.15                     algol 6, pass 1, page 31
 
a68: sn  w0     h2      ; maybe point: if not point
     sh  w1     2       ;   or auxstate<>intext or innumber
     jl.        c57.    ;   then goto paramerror;
     rl. w2     b45.    ;
     se  w2     0       ;
     sn. w2     b47.    ;   if option=mode then
     se  w2  x2         ;   goto paramerror;
     jl.        c57.    ;
     sn  w1     3       ;   if not number then
     jl. w3     a75.    ;   shift string+
     sn. w2     b47.    ;   if option=copy then
     al  w2  x2+1       ;   option:=option+1;
     rs. w2     b45.    ;
     se  w2     0       ;   if option<>0 then
     jl.        a80.    ;   goto next char;
     al. w2     b41.    ;   w2:=addr input text
     al. w1     b46.    ;   w1:=addr option
a69: sl. w1     b47.    ;   if not found then
     jl.        c57.    ;   goto paramerror;
     al  w1  x1+10      ;   count
     dl  w0  x1+2       ;   w3w0:=option
     se  w3  (x2)       ;   if not
     jl.        a69.    ;   found
     se  w0  (x2+2)     ;   then
     jl.        a69.    ;   goto
     dl  w0  x1+6       ;   next option;
     se  w3  (x2+4)     ;
     jl.        a69.    ;
     se  w0  (x2+6)     ;
     jl.        a69.    ;
     rs. w1     b45.    ;   save option;
     al  w0     0       ;
     al  w1     0       ;
     ds  w1  x2+2       ;   clear text
     ds  w1  x2+6       ;
a80: al  w1     2       ;   auxstate:=after point;
a70: hs. w1     b51.    ; next char:
     am         -2000   ;   save auxstate;
     jl.     c0.+2000   ;   goto next char;

c54: se  w1     0       ; nl ff sp: if auxstate=0 then
     jl.        a71.    ;   begin
     sn  w0     h3+5    ;   if char=sp then goto
     jl.        a70.    ;   next char else
     am         -2000   ;
     jl.        c5.+2000;   goto next nlaction;

\f


; jz 1979.09.04                  algol 8, pass 1, page 32
 
a71:                    ; termination:
     sn  w1     3       ;   if auxstate=instring then
     jl. w3     a75.    ;   shift string;
     al  w3     -2000   ;
     bz. w3  x3+j1.+2000;   w3:=state;
     rl. w2     b45.    ;   
     sn  w2     0       ;   if option=0 and
     sn  w3     g44-d1  ;   state<>incommentstring
     se  w2  x2         ;   then
     jl.        a76.    ;   paramalarm;
     sh. w2     b54.    ;   if option>=copy then
     jl.        a72.    ;   begin
     bz. w3     b43.    ;
     sn  w1     4       ;   if auxstate=innumber
     se  w3     0       ;   and number=0 then
     se  w1  x1         ;   goto paramalarm;
     jl.        a76.    ;
     al  w2  x2+1       ;   option:=option+1;
     rs. w2     b45.    ;   goto testreturn;
     jl.        a79.    ;   end;
a72: al. w2     b41.    ;
     rl  w3  x2+2       ;   if secondword<>0
     se  w3     0       ;   goto paramalarm;
     jl.        a76.    ;
     rl  w3  x2         ;
     se. w3     (b49.)  ;   if param<>on
     sn. w3     (b50.)  ;   and param<>off
     se  w3  x3         ;   then
     jl.        a76.    ;   goto paramalarm;
     am         -2047   ;
     al. w1  c40.+2047  ;
     am      -2047      ;
     rl  w0 x1+e56-c40+2047;
     al  w1     0       ;   text := 0;
     rs. w1  b41.       ;   w1 := option;
     rx. w1  b45.       ;   option := 0;
     so  w0  (x1+8)     ;   if modechange not allowed
     jl.        a79.    ;   then goto testreturn;
     sn. w3     (b49.)  ;   if param=on
     jl.        a74.    ;   then goto on;
     ac  w0  (x1+8)     ;   modebits:=modebits
     bs. w0     1       ;   and -,optionbit;
     la. w0     b42.    ;
a73: hs. w0     b42.    ;
a79: al  w1     0       ;   auxstate:=neutral;
a77: am         -2000   ; testreturn:
     rl. w0   f4.+2000  ;   w0:=char;
     se  w0     59      ;   if char=semicolon then
     jl.        a70.    ;   goto finis else
     jl.        a64.    ;   goto next char;
a74: bz. w0     b42.    ; on:
     lo  w0  x1+8       ;   modebits:=modebits or
     jl.        a73.    ;   optionbit;

a75:                    ; shift string:
     rl. w1     (b40.)  ;
     ls  w1     8       ;
     sh. w1     (b48.)  ;
     ls  w1     8       ;
     rs. w1     (b40.)  ;
     jl      x3         ;   return;

\f


; rc jz.fgs.1981.03.02              algol 6, pass 1, page ...33...

c55: al  w1     -2000   ;   unstack:
     rl. w2 x1+f43.+2000;
     rl. w1  x1+f0.+2000;
     jl  w3  x2+e67     ;   terminate zone;
     jl  w3  x2+e45-4   ;   unstack cur in;
     bz. w3     b44.    ;
     al  w3  x3-1       ;   stackniveau:=
     hs. w3     b44.    ;   stackniveau-1;
     bz  w0  x1+e51+13  ;   w0:=modebits;
     al  w3  x1+e51+4   ;   name addr
     rs. w3     b40.    ;
     rl  w1  x1+e50+6   ;   w1:=bossline;
     jl.        d42.    ;   goto medium connected;

a78:                    ; source alarm:
a76: al  w0     h3+1    ;   
     jl. w3     c66.    ;   outbyte (error);
     al  w0     25      ;
     jl. w3     c66.    ;   outbyte (25); <*directive syntax*>
     am         -1      ;   auxstate:=0;
c57: al  w1     1       ;   auxstate:=1;
     al. w2     b41.    ; paramerror:
     al  w0     0       ;
     al  w3     0       ;
     ds  w0  x2+2       ;   clear text;
     ds  w0  x2+6       ;
     hs. w0     b43.    ;   clear integer;
     rs. w0     b45.    ;   clear option;
     jl.        a77.    ;   goto testreturn;
 
 
c60: se  w0     h0+6    ; first of comp:
     jl.        c57.    ;   if not less then paramerror;
     al  w0     g45-d1  ;   state:=comm inalgol
     am         -2000   ;
     jl.        d0.+2000;   goto set state;
 
c61: se  w0     h0+2    ; lessstar:
     jl.        c62.    ;   if not star then commerror;
     al  w0     g44-d1  ;   state:=in commentstring
     am         -2000   ;
     jl.       c37.+2000;   goto state altering res.
 
c62: al  w0     g43-d1  ; commerror:
     am         -2000   ;
     hs. w0     j1.+2000;   state:=inalgol;
     jl.        c57.    ;   goto paramerror;
 
\f


; rc  1977.11.02            algol 6, pass 1, page ...34...
 
b39: 10                 ;
b40: 0                  ;   current source addr (cur.text addr)
b41: 0, r.4             ;   copy name (cur.text) 
b42=k+1
b43: 0                  ;   copy integer, modebit
b51=k+1
b44: 0                  ;   stack niveau, auxstate
g49=b44-1000
b45: 0                  ;   option
b46=k-10
;    <:message:>  ,0,   1<1
;    <:index:>    ,0,0, 1<3
;    <:spill:>    ,0,0, 1<6
;    <:details:>  ,0,   1<2
     <:list:>     ,0,0, 1<0
b47: <:copy:>     ,0,0, 0
b48: 1<16
b49: <:on:>             ;
b50: <:off:>            ;
b52: <:***param<10><0>:>;
b53: <:***greater than in call<10><0>:>
b54=b47-1



i93=b51-c51, i94=a71-c51, i95=b41-c51, i96=b42-b41
i97=b53-b52, i101=a76-c51, i102=b45-b41, i100=b51-b41
i103=b40-c51
 
d63:
; print convclock
b. a3, w.
    rs. w2  a0.     ;   save return
    rs. w0  a1.     ;   save date
    rs. w3  a2.     ;   save clock
    al  w0  100     ;
    jl. w3  d50.+2  ;   outchar d
    jl. w3  d49.    ;   outchar .
    rl. w0  a1.     ;
    jl. w3  d40.    ;   outinteger(date)
    48<12+6         ;
    jl. w3  d49.    ;   outchar .
    rl. w0  a2.     ;
    jl. w3  d40.    ;   outinteger(clock)
    48<12+4         ;
    jl.     (a0.)   ;   return
a0: 0               ;   saved return
a1: 0               ;   saved date
a2: 0               ;   saved clock
e.
\f


 
; rc 1978.08.21         algol 7, pass 1, page ...35...
 

d64:

; procedure convert clock  (short clock)
;
; this procedure is an inversion of the following algorithm
; for computing day-number from a date  (year,month,date)
; extended with a conversion of the time of the day:
;
;    if month<3 then
;    begin
;      month:=month+12;
;      year:=year-1;
;    end;
;    dayno:=(1461*year)//4 + (153*month+3)//5 + day;
;
;      call:               return:
;
; w0   short clock         year*10000+month*100+date
; w1   irrelevant          destroyed
; w2   irrelevant          destroyed
; w3   return              hour*100+minute
;
;
b.  a13, b0  w.

     ld  w2    -100    ;    clear w1,w2
     rs. w3     a8.    ;    save return address
     al  w3     0      ;    clear w3
     ld  w0     10     ;    w3,w0:=short clock<10 (=truncated clock>9)
     wd. w0     a2.    ;    w0:=dayno
     al  w3  x3+a13    ;    add minute rounding
     wd. w3     a1.    ;    w3:=hour
     wd. w2     a0.    ;    w2:=minute
     ds. w3     a10.   ;    save minute,hour
     al  w3     0      ;    clear w3
     ld  w2    -100    ;    clear w1,w2
     ls  w0     2      ;    w0:=dayno*4
     wa. w0     a5.    ;    add offset
     wd. w0     a4.    ;    w0:=year
     ls  w3    -2      ;    w3 is converted 
     wm. w3     a6.    ;    to fifthdays
     al  w3  x3+a11    ;    w3:=w3+three months offset
     wd. w3     a3.    ;    w3:=month
     sh  w3     12     ;    if month>12 then
     jl.        b0.    ;    begin
     ba. w0     1      ;      increase year
     al  w3  x3-12     ;      decrease month
b0:  al  w2  x2+a12    ;    end
     wd. w2     a6.    ;    w2:=date
     rs  w3     2      ;    save month (in w1)
     wm. w0     a7.    ;    w0:=year*100
     wa  w0     2      ;      + month
     wm. w0     a7.    ;      * 100
     wa  w0     4      ;      + date
     rl. w3     a10.   ;    w3:=hour
     wm. w3     a7.    ;      * 100
     wa. w3     a9.    ;      + minute
     jl.       (a8.)   ;    return
\f



; rc 1978.08.21         algol 7, pass 1, page ...36...



a0:  1172              ;    units per minute
a1:  70313             ;    units per hour
a2:  1687500           ;    units per day
a3:  153               ;    days in the five months (march-july)
a4:  1461              ;    days in four years
a5:  99111             ;    offset for computing year 
a6:  5                 ;
a7:  100               ;    constant for packing date and time
a8:  0                 ;    saved return address
a9:  0                 ;    saved minute
a10: 0                 ;    saved hour

a11=461                ;    three months offset
a12=5                  ;    one days offset
a13=586                ;    half a minute
e.
 

 
i83=k-i82               ; size of pass 1
e30=e30+i83
i. ; idlist

e.
m. jz 1986.03.14 algol 8, pass 1
\f

e.; pass0
▶EOF◀