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

⟦95d746c89⟧ TextFile

    Length: 143616 (0x23100)
    Types: TextFile
    Names: »ftnpass13tx «

Derivation

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

TextFile



 
; rc  3.10.69                           fortran, pass 1, page 1
;                                        jes linderoth

; content:                                     page

; general description                           xx
; mainclasses for fortran-symbols               xx
; use of slang-names                            xx
; test data                                     xx

; start pass1                                   xx
; sequence initpass 1                           xx
; procedure end pass 1                          xx
; procedure copytodel                           xx
; procedure read char                           xx
; procedure format                              xx
; procedure byte newline                        xx
; procedure outputc                             xx
; procedure out4bytes                           xx
; procedure next char                           xx

; global variables                              xx

; sequence main sequence                        xx
; procedure field descriptor                    xx
; procedure longtext                            xx
; procedure set pointer                         xx
; procedure skip to statement                   xx
; procedure constant                            xx
; procedure number syntax                       xx
; procedure bitpattern                          xx
; procedure text                                xx
; procedure compound                            xx

; general description:

;  a) structure:
;      the entire slang-program is structured almost like an algol-
;      program with a main-sequence and a number of procedures, each
;      arranged in a slang-block.

;  b)method:
;      characters are read from the source(s) in the low-level procedure
;      read char and transformed to an internal representation consisting
;      of mainclass and internal value through table-look-up in table
;      internal.
;      this representation is also used for two composite characters
;      called  nlstatchar  and  nlcontchar  ,which consists of a labelfield
;      that from the point of view of the char-processing procedures is
;      of type   end-statement   or   continuation.

;      the only procedure that calls read char is next char which is
;      called whenever a new internal character is wanted. next char
;      administers a buffer and characters can be stored in the buffer
;      in search mode, f.ex. during test for compound, and later on
;      the buffer can be  emptied in normal mode, f.ex. from the proce-
;      dure copytodel, that copies letters and digits up to the next
;      delimiter

;      on a high level, main sequence administers the processing of the
;      fortran-text-fields of different types and length.
;      the first character in a field consisting of more than one character
;      gives rise to a call of one of the procedures constant,compound or
;      text, which processes or tries to process the relevant field.
;      at return time from compound, format or copytodel  could be called
;      , or main sequence could continue the processing.

;      fields spread over more than one line will result in byte-values
;      as though the entire field was on the first line, followed by a 
;      number of  empty continuation lines.

;  c)error reaction:
;      a syntactical error in a field causes trouble-bytes to be output
;      in stead of the field-bytes, and as a rule the rest of the state-
;      ment will be skipped. an exception is a labelfield with one or 
;      more erroneous characters , where only the labelfield will be
;      skipped.
;      in the case of error in a format-statement, some correct bytes
;      could be output before the trouble-bytes.

; mainclasses for fortran-symbols:

;  class  containing
;     0    digits
;     1    a i l a i l
;     2    b b
;     3    h h
;     4    e d e d
;     5    f g f g
;     6    x x
;     7    p p
;     8    other letters
;     9    .
;    10    *
;    11    +
;    12    -
;    13    '
;    14    ,
;    15    /
;    16    (
;    17    )
;    18    ;          (stat term)
;    19    other delimiters
;    20    in text
;    21    graphic
;    22    nlstat  (composite char)
;    23    nlcont  ( - - - - - -  )

;    24    em
;    25    nl,ff
;    26    illegal
;    27    blind

; use of slang-names:

;     a    byte values and internal values
;     b    local variables
;     c    local labels, inclusive action labels
;     d    global labels, inclusive entry-points in procedures
;     e    pass 0 entries
;     f    global variables
;     g    table bases
;     h    not used, fp-names
;     i    local initialisations
;     j    global mainclass-values
; test data

;
;
;test of compounds
;      assign ;call ; continue -continue;common common/
;      complex -data data(-dimension doubleprecision 
;      double precision do entry equivalence equivalence(
;      external  function goto go to goto( go to(
;      if if( integer -logical long program read read(real return 
;      return;stop;stop subroutine to write write( zone 
;
;      .and.;.eq.5..eq.-.false..ge..gt..le..lt..ne.
;      .not..or..shift..string..true.**
;c not found
;      . eq. assign( con tinue
;      end end end
;      end;
;c end test
;c copy test
;      abcd
;     *efghijklmnopqrstu
;     *vwxyzæ  1
;     *234567890
;      end 
;
;c constant test           state-table-test
;      01 2
;     *3+4a..5 6
;     *7h+ 1.c+1.2+ 8e+a +8e 
;     *+1 
;     *2.+9. 0d1+1e-1e* 1e2h+2e3+2b12+
;c correct numbers
;      838 860 8* 838 860 7+00
;      140 737 488 355 327
;      1.e1000 + 0.0012345678912
;      0.00123456789120e20+
;     *0d0 +1d1-
;     *1234567890123456789.d1
;c errors
;
;      140 737 488 355 328
;      12345678901234567891d0+
;      0e1001
;c number syntax
;      . +1.+ 1.a +1.* 1e1 + 1e e + 1da+ 1d<
;      1e+ d + 1d++
;
;
;c bitpattern test      correct values
;      1b1 +1b000011110000111100001111
;      1b111000111000111000111000111000111000111000
;     *111000
;      2b0+2b3-2b012301230123
;      2b0123012301230
;      2b321032103210321032103210
;      3b0-3b1-3b01234567+3b012345670
;      3b0123456701234567
;      4b0+4bf+4b012345+4b6789abcdef01
;
;c errors
;      0b123; 5bcdefghi;
;      1b0000111100001111000011110000111100001111000011110
;      2b0000111100001111000011110
;      3b00001111000011110
;      4b0000111100001
;      3b+
;      1b2 ; 2b4 ; 3b8; 4bfg
;
;c text test
;c hollerith-constants and string-quotes
;c correct values
;      1h0;6h1a- &;;
;      '0';'1a- &;';5ha
;     *bc
;     *d
;     *e;
;c errors
;      0h12; '';  7h1234567; '1234567'
;      5h123
;      end  test of constants
;
;
;c format test -    state-table test
;c correct format
;      format  (12f12.6,5(( e255.255) ,x)/2i32/l2//x/ 
;     *(/,/)/-2p2 1d1.1, 8p g1.1,
;     *2x,b 5 . 4 ,2b4.1,((((((((((((((5a 1 00))))))))))))))
;     *,2
;     *i
;     *2) 
;     *;
;       format((a1);format(/;
;      format(
;      format(
;     *)

;c action errors
;      format(256a1,x)
;      format( 0a1,x)
;      format(-52a1,x)
;      format(a1,x,0p1f2.2)
;      format(0x,a1)
;      format(a1,((((((((((((((((((a1,2i2))))))))))))))),a2))))
;      format((a1;,
;     *12;
;      format(2i256,a1)
;      format(2i0,a1)
;      format(a1,f10.0,f0.0)
;      format(a1,f10.11)
;      format(x, 2b10.5)
;      format(x,2b10.0)
;
;c state-table errors
;      format ;iabcd
;      format( i2.2)
;      format(i2))
;
;c correct text
;      format(3ha/b,(4hbc a)/5h<> 
;     *1+,'a', '123abc<>hf
;     */'/)

;c error text
;      format(0habc,a1)
;      format(i2,'',a1)
;      format(i2, 7habc
;      end;
;
;
;c list test
;
;
;
;12
;list
;      end
;c this is listed
;      not listed
;list
;      end 
;c not listed
;list
;list
;      end
;list
;      abcd
;12
;      end 
;
;
;comment 1+
;a test no
;12    program test 12+
;
; a+ 
;
;  __
;     07
;  
;      -
;comment inside unit
;       
;1      8                                                                1a +
;1
;     *continue 
;1    *
;      end 
;
;
;c        test of test lines
;
;a12   a
;b     a
;c     a
;d     a
;e     a
;f    *a
;g     a
;h     b
;i     b
;j     b
;k     b
;      end 
;


;   start pass1

k=e0
s.  a16,d36,f42,j27,i2

i0=k

  ;internal values and bytevalues:
          a0=1      ; letterbase            abs value: 1
          a1= a0+29 ; digitbase                       30
          a2= a1+10 ; logical base                    40
          a3= a2+ 2 ; end base                        42
          a4= a3+ 5 ; real base                       47
          a5= a4+ 3 ; delimiter base                  50
          a6= a5+ 8 ; point base                      58
          a7= a6+ 1 ; start base                      59
          a8= a7+ 1 ; operator base                   60
          a9= a8+12 ; termbase                        72
         a10= a9+ 2 ; compound base                   74
         a11=a10+11 ; declare base                    85
         a12=a11+16 ; go on                          101
         a14=a12+ 5 ; error base                     106

         a15=e82    ; trouble type
         a16=a14+1  ; intext value                   107
    ;mainclasses
    j0=0, j1=1 , j2=2 , j3=3, j4=4, j5=5, j6=6, j7=7, j8=8, j9=9, j10=10
    j11=11,j12=12,j13=13,j14=14,j15=15,j16=16,j17=17,j18=18,j19=19
    j20=20,j21=21,j22=22,j23=23,j24=24,j25=25,j26=26,j27=27

w.                                i1  ; no.of words in pass1;
h.               i2    ,       1<1+0  ; relative entry, pass no. plus mode.

  b.   b0,c1                             ; sequence initpass1;
  ;   initpass 1 can be thought of as a sequence in main sequence, though it
  ;   is arranged in its own slang-block like other procedures.
  ;   initpass1 is entered from pass 0, it initialises some variables and
  ;   jumps to main sequence

  w.  b0:          1<11              ;  mask
  w.d0:   rl.   w0               e17. ; initpass1;
          rl.   w1               f23. ;
          sz    w0                 1  ;   if listing wanted then
          jl.                     c0. ;   go to set list mode;

          al    w1                 0  ;
          sz    w0              1<10  ;   if conditional listing then
          rs.   w1               f12. ;   dont touch listing:=false;
          al    w1                 1  ;
          sz    w0               1<1  ;   if bit for message is set  then
          rs.   w1               f36. ;    message mode:= true;
          jl.                     c1. ;   go to  not list mode;
      c0: rs.   w1               d22. ; set  list  mode:listmode:=true;

      c1: al    w1                72  ; not list mode: 
          la.   w0                b0. ;
          se    w0                 0  ;   if card mode then
          rs.   w1               f13. ;   endstatemfield:=72;
          al.   w1               e6.  ;
          rs.   w1               f35. ;   get linecount address;
          jl.                    d12. ;   go to main sequence;
  e.

  b.  b0, c0                           ; procedure end pass1;

  ;   end pass 1 can be thought of as a sequence in main sequence and it is
  ;   called from there as:
  ;       jl.                     d1.
  ;   end pass1 outputs an endpass byte and reestablishes the     current
  ;   input buffer situation.

  ;   local variables:
  w.  b0:                       1<16  ;   endmarkword

  ; entry point:

  w.d1:   al    w0              a3+1  ; end pass1:
          jl.   w3               e3.  ;   outbyte(end pass);
          rl.   w3               f5.  ;
          sn.   w3             (e46.) ;   if sourcepointer=sourcelist start
          jl.                    c0.  ;   then go to reestablish current
          rl.   w2               e23. ;   input;
          rl.   w1               f0.  ;
          jl    w3    x2         e67  ;   terminate zone;
          jl    w3    x2        e45-4 ;   unstack current input;
          jl.                     e7. ;   end pass;

      c0: rl.   w1                f2. ; reestablish current input:
          rl    w3    x1              ;
          rl.   w0               b0.  ;   if current word contains
          rl.   w2               f1.  ;   2 characters then
          so    w2                1   ;   begin
          ld    w0               -8   ;     partial word:=1<16;
          sn    w0    x2              ;   record base:= current word addr-4;
          ld    w0               -8   ;   end else
          sz    w2                1   ;   begin
          al    w1    x1         -2   ;     partial word:=preceding character
          al    w1    x1         -2   ;     shift 16 + current word shift(-8);
          rl.   w3               f0.  ;     record base:=current word addr-2;
          rs    w0    x3       e50+4  ;   end;
          rl.   w2               f3.  ;
          ds    w2    x3       e51+2  ;   last byte:=last word addr;
          rl.   w0               f4.  ;
          rs    w0    x3       e50+2  ;   restore give up action;
          jl.                    e7.  ;   end pass;

  e.

  b.  b0, g0 , c6 , i4                ; procedure copytodel

  ;   the procedure is called from main sequence after a call of compound
  ;   when it is found that the char-sequence was not a compound. the call
  ;   is: jl.   w3                 d2.

  ;   copytodel inputs chars from next char and the first char will be
  ;   <*>,<.> or <letter>. when * or . the relevant byte is output and
  ;   the procedure ends. when it is a letter, all letters and digits are
  ;   copyed and their byte values are output. the copying goes on until a
  ;   terminator for an identifier is read.

  ;   register use:
  ;             call              exit
  ;     w0                    undefined
  ;     w1                    unchanged
  ;     w2                    undefined
  ;     w3  return address    undefined

  ;  possible output bytes: (during call of outbyte);
  ;     <*>
  ;     <.>
  ;     <letter>
  ;     <digit>
  ;   globals used:
  ;   f25

  ;   local variables:

  w.  b0:          0                  ;   return address;

  ;   action table
  ;     mainclass
  ;         0   1   2   3   4   5   6   7   8   9  10  11  12  13  14
  h.  g0:  i1 , i2, i2, i2, i2, i2, i2, i2, i2, i4, i4, i4, i4, i4, i4,

  ; class: 15  16  17  18  19  20  21  22  23
           i4, i4, i4, i4, i4, i0, i4, i4, i3

  ;   the i-names are intermediate and are to be replaced by c-names as;
  ;   i0:c0     i1 :c2     i2:c3    i3:c4    i4:c5

  ; entry point
  w.d2:   rs.   w3                b0. ; begin
          rl.   w2               (f7.);   w2:=buffer(charpointer);
          bl    w0                 5  ;   internal value:=w2(12:23);
          jl.   w3                e3. ;   outbyte(internal value);
          se    w0                a6  ;   if internal value=pointvalue or
          sn    w0              a5+5  ;      internal value=starvalue then
          jl.                     c6. ;   go to copyout;

      c0: jl.   w3               d11. ; new char: w2:= next char;
          bl    w3                 4  ;   mainclass:= w2(0:11);
          bl.   w3    x3          g0. ;   c action:=actiontable(mainclass);
      c1: jl.         x3              ;   go to copyaction(c action);

      c2: al    w2    x2          a1  ; digit: internal value:=
                                      ;   internal value+digitbase;

      c3: bl    w0                 5  ; letter:
          jl.   w3                e3. ;   outbyte(internal value);
          jl.                     c0. ;   go to new char;

      c4: ba.   w2               f25. ; nl cont:
          hs.   w2               f25. ;   nlbyte:=nlbyte+1
          jl.                     c0. ;   go to new char;

      c5: jl.   w3               d33. ; finis copy: set pointer;

      c6: jl.                    (b0.); copyout:
                                      ; end copytodel;

  ; assignment of intermediates:
      i0=c0-c1, i1=c2-c1, i2=c3-c1, i3=c4-c1, i4=c5-c1
  e.




  b.  b16, c62, g8, i26                ;procedure  read char
  ;   the procedure read char is called from procedure next char  as
  ;       jl.    w3                  d3.    ,and it defines the next relevant
  ;   internal character by its mainclass and internal value.
  ;    in general read char defines the internal character by reading
  ;   a character from the relevant external medium followed by a table
  ;   lookup in table internal, i.e.   1 internal character pr external
  ;   character.
  ;     exceptions are:
  ;     a)  characters in a labelfield on a statement line, i.e. an initial
  ;         -or a continution line, where the field is considered as one
  ;         character defined as follows:
  ;           mainclass:  internal    labelfield and
  ;                       value:      continuation mark:
  ;
  ;           nlstat         1        correct label, no continuation mark
  ;           nlstat         2        wrong   label, no continuation mark
  ;           nlstat         3        label and continuation mark
  ;           nlstat         4        no label     ,no continuation mark
  ;           nlcont         1        no label     ,continuation  mark
  ;
  ;     b)  em-character, where the character itself is blind and gives a
  ;         switch to next source.  em from last source produces an inter-
  ;         nal character with:
  ;           mainclass:  internal value:
  ;           nlstat         5
  ;     c)  characters on a comment-or a list-line, which are skipped
  ;         up to next nl or ff-character and a nlcont -character
  ;         is defined,see a).
  ;         eventually the listing-facility is switched on.
  ;
  ;     d)  blind and illegals, which are skipped with no internal charac-
  ;         ter as result.  for each illegal in a program unit, an error-
  ;         byte is output.
  ;

  ;                 listing
  ;
  ;   if the listing facility is switched on,each external character
  ;   except blind,em and illegal's is listed on current output during
  ;   call of the pass0 entry writechar.furthermore the linecounter
  ;   is printed at the beginning of a line during call of print line-
  ;   counter.illegals are substituted by  in the list
  ;
  ;   to decide whether printing has to be done or not,several booleans
  ;   are introduced.printing is done when listmode is true,with
  ;   listmode defined in pseudo algol as:
  ;
  ;    listmode       :=(list.yes) or condlisting or message listing
  ;
  ;    condlisting    :=-,dont touch list and after listline
  ;                     and(before end or change list not allowed)
  ;
  ;    message listing:=(message.yes) and on message line
  ;
  ;    dont touch list:=(cond.no) or (list.yes)
  ;
  ;    change list not allowed:=after listline and before compoundsearch
  ;
  ;

  ;   alreadylist:  in some cases,f.ex. when you read nl on a statement
  ;                 line,a character is repeated in the central logic
  ;                 and to prevent this caharacter from being printed
  ;                 twice,the boolean  'alreadylist' is referred.
  ;
  ;   linecount is listed:
  ;                 in listmode,the linecounter is printed before
  ;                 the characters whenever charcount=1.
  ;                 illegals do not count on a line,and to prevent a
  ;                 double printing of linecounter when an illegal is
  ;                 first on a line, 'linecount is listed' is introduced.

  ;
  ;   register use:
  ;             call                exit
  ;     w0                      unchanged
  ;     w1                      unchanged
  ;     w2                      internal character
  ;     w3  return address      undefined
  ;
  ;   possible outputbytes:
  ;     <start program unit>
  ;     <illegal error>

  ;   local variables:
  w.  b0:          0                  ; return address
f41:  b1:          0                  ; charcount
      b2:          0                  ; savew0
  w.  b3: <: hard error <0>:>         ; hard error text
  w.  b4:   1<23+1<15+1<7             ; char value mask
      b5:   24<16+24<8+24             ; cansel mask
      b6:        0                    ;   saved char
      b7: jl.                  i23    ; normal block end
      b8: rl    w3    x3              ; test line cansel
       0,b9:     0                    ;   save registers
  w. b10: <: not text :>              ; alarm text
  w. b11:          8                  ; eight
     b12: <: : :>                     ; colontext
  w. b13:          0                  ; stop
     b14: j22<12+4                    ; nlstatchar
     b15: j23<12+1                    ; nlcontchar
     b16: <: error at source no :>    ; messagetext

  ;   tables:
  h.  g0:f42:                         ; internal(1: 128) ;comment contains
                                      ; mainclass,internal value.
      j27,0       ,  j26,0            ; nul, soh
      j26,0       ,  j26,0            ; stx,ext
      j26,0       ,  j26,0            ; eot,enq
      j26,0       ,  j26,0            ; ack,bel
      j26,0       ,  j24,0            ; bs ,ht
      j25,0       ,  j26,0            ; nl ,vt
      j25,0       ,  j27,0            ; ff ,cr



      j26,0      ,  j26,0             ; so ,si
      j26,0      ,  j26,0             ; dle,dc1
      j26,0      ,  j26,0             ; dc2,dc3
      j26,0      ,  j26,0             ; dc4,nak
      j26,0      ,  j26,0             ; syn,etb
      j26,0      ,  j24,0             ; can,em
      j26,0      ,  j26,0             ; sub,esc
      j26,0      ,  j26,0             ; fs ,gs
      j26,0      ,  j26,0             ; rs ,us
  ;
      j20,a16    ,  j21,0             ; sp ,! 
      j21,0      ,  j21,0             ;    , 
      j18,a9+0   ,  j21,0              ;    ,
      j21,0      ,  j13,0              ; &  ,'
      j16,a5+0   ,  j17,a5+1           ; ( ,)
      j10,a5+5   ,  j11,a5+2           ; * ,+
      j14,a5+4   ,  j12,a5+3           ; , ,-
      j9 ,a6     ,  j15,a5+6          ; .  ,/
      j0 ,0      ,  j0 ,1             ; 0  ,1
      j0 ,2      ,  j0 ,3             ; 2  ,3
      j0 ,4      ,  j0 ,5             ; 4  ,5
      j0 ,6      ,  j0 ,7             ; 6  ,7
      j0 ,8      ,  j0 ,9             ; 8  ,9
      j21,0      ,  j18,a9+0          ; :  ,;
      j21,0      ,  j19,a5+7          ; <  ,=
      j21,0      ,  j21,0             ; >  ,? 

      j21,0      ,  j1 ,a0+0          ;    ,a
      j2 ,a0+1   ,  j8 ,a0+2          ; b  ,c
      j4 ,a0+3   ,  j4 ,a0+4          ; d  ,e
      j5 ,a0+5   ,  j5 ,a0+6          ; f  ,g
      j3 ,a0+7   ,  j1 ,a0+8          ; h  ,i
      j8 ,a0+9   ,  j8 ,a0+10         ; j  ,k
      j1 ,a0+11  ,  j8 ,a0+12         ; l  ,m
      j8 ,a0+13  ,  j8 ,a0+14         ; n  ,o
      j7 ,a0+15  ,  j8 ,a0+16         ; p  ,q
      j8 ,a0+17  ,  j8 ,a0+18         ; r  ,s
      j8 ,a0+19  ,  j8 ,a0+20         ; t  ,u
      j8 ,a0+21  ,  j8 ,a0+22         ; v  ,w
      j6 ,a0+23  ,  j8 ,a0+24         ; x  ,y
      j8 ,a0+25  ,  j8 ,a0+26         ; z  ,æ
      j8 ,a0+27  ,  j8 ,a0+28         ; ø  ,
      j21,0      ,  j20,a16           ; &  ,-
  ;
      j21,0      ,  j1 ,a0+0          ; /  ,a
      j2 ,a0+1   ,  j8 ,a0+2          ; b  ,c
      j4 ,a0+3   ,  j4 ,a0+4          ; d  ,e
      j5 ,a0+5   ,  j5 ,a0+6          ; f  ,g
      j3 ,a0+7   ,  j1 ,a0+8          ; h  ,i
      j8 ,a0+9   ,  j8 ,a0+10         ; j  ,k
      j1 ,a0+11  ,  j8 ,a0+12         ; l  ,m
      j8 ,a0+13  ,  j8 ,a0+14         ; n  ,o
      j7 ,a0+15  ,  j8 ,a0+16         ; p  ,q
      j8 ,a0+17  ,  j8 ,a0+18         ; r  ,s
      j8 ,a0+19  ,  j8 ,a0+20         ; t  ,u
      j8 ,a0+21  ,  j8 ,a0+22         ; v  ,w
      j6 ,a0+23  ,  j8 ,a0+24         ; x  ,y
      j8 ,a0+25  ,  j8 ,a0+26         ; z  ,æ
      j8 ,a0+27  ,  j8 ,a0+28         ; ø  ,
      j21,0      ,  j27,0             ;    ,del

  ;   classtable
  ;   by table look up in rcclasstable, mainclass is used as index
  d31:g1:    1 , 0 , 0 , 0 , 0 , 0    ; rcclasstable (1:28) contains the
             0 , 0 , 0 , 7 , 7 , 7    ; local classvalues.
             7 , 7 , 7 , 7 , 7 , 7    ;
             7 , 7 , 6 , 7 , 7 , 7    ;
             3 , 2 , 5 , 4 ,          ;
    g8:    i1 ,i1 ,i24,i20,i1 ,i1 ,i1 ,i1 ,i1   ;  in / line

  ;   action table
  ;
  h.
  ;   local class
  ;           0    1   2   3   4   5   6   7   8    state
      g2:    i2, i3, i4, i19, i8, i5, i18, i12, i20   ;  first character
      g3:    i1, i1, i10,i19, i8, i6, i1 , i1 , i10   ;  comment line
      g4:    i12,i12,i4 ,i19, i8, i5, i18, i12, i20   ;  space line
      g5:    i15,i13,i11,i19, i8, i9, i14, i15, i11   ;  labelfield, not empty
      g6:    i16,i16,i17,i19, i8, i7, i16, i16, i21   ;  statement field
      g7:    i1 ,i1 ,i17,i19, i8, i7, i1 , i1 , i21   ;  comment field

  ;   the i-names are intermediate action addresses. they are to be
  ;   replaced by c-names in the manner shown below:

  ; i1  i2  i3  i4  i5  i6  i7  i8  i9  i10  i11
  ; c1  c23 c25 c26 c28 c29 c29 c31 c29 c33  c34
  ;
  ; i12 i13 i14 i15 i16 i17 i18 i19 i20 i21 i24
  ; c36 c37 c38 c41 c42 c43 c46 c47 c49 c50 c60
  ;
  ;  an explanation of the local classes is as follows:
  ; class     contains
  ;  0        letters
  ;  1        digits
  ;  2        nland ff
  ;  3        em
  ;  4        blind
  ;  5        illegal
  ;  6        in text
  ;  7        other mainclasses
  ;  8        stop character , i.e. em from last source

  ; entry point
  w.
    d3:   rs.   w3                b0. ; begin
          rs.   w0                b2. ;   save w0:=w0;
          rx.   w1                b1. ;   charcount:= oldcharcount;
     c52: jl.                    c15. ;   go to first time;comment
  ; after the first call the instruction is:
  ;       jl.                     c1. ;   if repeat char then
  ; or    jl.                    c48. ;   go to fetch saved char else
  ;                                       go to rc next char;

  ;
      c0: hs.   w3                i0  ; set rcstate: state:=new state;
      c1: rl.   w3                f1. ; rc next char:
          al    w2                 0  ;
          ld    w3                 8  ;
          sn    w3                 0  ;   if current word empty then
          jl.                    c11. ;   go to next word;
      c2: rs.   w3                f1. ; retword:
          hs.   w2               f30. ;   ,extchar:= in char;
          wa    w2                 4  ;
          al    w1    x1 +         1  ;   charcount:= charcount+1;
          rl.   w2    x2          g0. ; read char:= w2:= internal(extchar);
 
      c3: bl    w3                 4  ; after in: mainclass:= w2(0:11);
   d22:c4:bl.   w3    x3          g1. ; rcclass : lclass:=rcclasstable(mainclass);
  ;can be jl.                     c7. ;   if listmode then go to listing;
      c5: bl.   w3    x3              ; rcaction: 
      c6: jl.         x3              ;   go to action( lclass,state);
     c48: al    w3            c1-c52  ; fetch saved char:
          hs.   w3            c52.+1  ;   repeat char:=false;
          rl.   w2                b6. ;   w2:= saved char;
          jl.                 c2. +2  ;   go to ret word;


  d23:c7: rs.   w0                b9. ; listing: saveregisters:=w0;
          al    w0                 0  ;
          se    w3               j27  ;   if mainclass=blind or
          sn    w3               j24  ;   mainclass=em then
          jl.                    c10. ;   go to nolist;
      c8: sn    w0                    ;   if -, alreadylist then
          jl.                     c57.;   go to list linecount;
          hs.   w0             c8.+1  ;   alreadylist:= false;
          jl.                    c10. ;   go to no list;
     c57: sn    w1                 1  ; list linecount: if charcount<>1
     c58: sn    w1                    ;   or linecount is listed then
          jl.                     c9. ;   go to list;
          jl.   w3               e27. ;   list linecount;
          al    w0                32  ;
          jl.   w3               e12. ;   writechar(sp);
          bl    w3                 4  ;

      c9: bl.   w0               f30. ; list:   char:= extchar;
          sn    w3               j26  ;   if mainclass=illegalclass then
          al    w0                63  ;   char:= 63; comment ? ;
          jl.   w3               e12. ;   writechar;

     c10: rl.   w0                b9. ; nolist:   w0:= saveregisters;
          bl    w3                 4  ;   mainclass:= w2(0:11);
          bl.   w3    x3          g1. ;   lclass:= rcclasstable(mainclass);
          jl.                     c5. ;   go to rcaction;

     c11: rl.   w3                f2. ; next word:  if current word addr
          sl.   w3               (f3.);   >= last word addr then
          jl.                    c12. ;   go to next block;
          al    w3    x3           2  ;   current word addr:=
          rs.   w3                f2. ;   current word addr + 2;
          rl    w3    x3              ;
          sz.   w3               (b4.);   if word contains chars>127 then
          jl.                    c14. ;   go to text format error;

          al    w2                 0  ;   current word:=
          ld    w3                 8  ;   buffer(current word addr);
          al    w3    x3 +         1  ;   set word end indication;
          jl.                     c2. ;   go to retword;

      c12:rs.   w1                b9. ; next block:
          jl.   w3               (f9.);   input block;
          dl    w3    x1 +      e51+2 ;   current word addr:= record base;
          ds.   w3                f3. ;   last word addr   := last byte;
          rl.   w1                b9. ;   if endblock action= normal then
      c13:jl.                    c11. ;   go to next word;comment in test
  ; line cansel action the return jump is overwritten by
  ;       rl    w3    x3      
          lx.   w3               b5.  ;   if buffer(last word addr) contains
          sz    w3              1<8-1 ;   cansel character
          ls    w3               -8   ;   then go to next block
          sz    w3              1<8-1 ;   else go to next word;
          ls    w3                -8  ;
          sz    w3              1<8-1 ;
          jl.                     c11.;
          jl.                     c12.;

     c14: al    w2            b10.-2  ; text format error: prepare alarm;
          jl.                    c19. ;   go to error in connect;
     c15: am.                   (e23.); first time:
          al    w0              e28-2 ;   get addr input block current input;
          rs.   w0                f9. ;
          am.                   (e23.);
          al    w1               e22  ;   get abs addr current descriptor;
          rs.   w1                f0. ;
          rl    w0    x1        e50+2 ;
          rs.   w0                f4. ;   save give up action;
          rl.   w3               e46. ;
          rs.   w3                f5. ;   sourcepointer:=start source list;
          rl    w0    x3              ;
          al    w3            c1-c52  ;   repeat char:=false;
          hs.   w3            c52.+1  ;
          al    w3             g2-c5  ;   state:= first char;
          hs.   w3              c5.+1 ;
          sn    w0                 0  ;   if source list empty then
          jl.                    c17. ;   go to medium connected;
          am.                   (e23.);
          jl     w3              e44-4 ;   stack current input;

     c16: rl.   w2                f5. ; connect source:
          al    w3    x2           8  ;
          rs.   w3                f5. ;
          am.                   (e23.);
          jl    w3              e31-2 ;   connect current input to source;
          bl    w3    x2          16  ;   sourcepointer:=sourcepointer+1;
          sn    w3                 0  ;   if content<> normal text or
          se    w0                 0  ;   hard error then
          jl.                    c19. ;   go to error in connect;
     c17: dl    w0    x1        e51+2 ; medium connected:
          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;
          bl    w0    x1        e49+1 ;
          rl.   w3                b7. ;   end next block action:=
          sn    w0                  8 ;                 normal block end;
          rl.   w3                b8. ;   if kind= type writer then
          rs.   w3                c13.;   end next block action:=
          al.   w3                c18.;                 test line cansel;
          rs    w3    x1        e50+2 ;   set give up action;
          dl.   w1                b9. ;   restore registers;
          jl.                     c1. ;   go to rcnextchar;

     c18: al.   w2             b3.-2  ; give up action: prepare alarm;
     c19: al.   w1               b16. ; error in connect:
          jl.   w3                e4. ;   message(<:error at source no:>);
          rl.   w0                f5. ;
          ws.   w0               e46. ;
          al    w3                 0  ;
          wd.   w0               b11. ;
          jl.   w3               e14. ;   writeinteger(<<d>,source no>);
                                   1  ;
          al.   w1               b12. ;   writetxt(<: : :>);
          jl.   w3               e13. ;
          al    w1    x2           2  ;
          jl.   w3               e13. ;   writetext(<: source name:>);

 d24:c20: al    w0                 1  ; terminate: unsuccesfull execution
          rs.   w0               e40. ;           := other reason;
          jl.                    e26. ;   go to fp end program;

     c21: rl.   w2              (f5.) ; next source:
          sn    w2                 0  ;   if sourcelist empty then
          jl.                    c22. ;   go to finischar;
          ds.   w1                b9. ;   save registers;
          rl.   w1                f0. ;
          am.                   (e23.);
          jl    w3               e67  ;   terminate zone;
          jl.                    c16. ;   go to connect source;

     c22: rs.   w3               b13. ; finischar: stop:=lclass;
          bl.   w2               f30. ;   char:= extchar;comment em;
          jl.                     c5. ;   go to rcaction;

  ;
  ;   the read char-actions start here
  ;
     c23: bl    w3                 5  ; letter as first char:
          al    w3    x3         -a0  ;   letter value:= internal value-
          sh    w3                10  ;   letterbase;if lettervalue<=10 then
          jl.                    c24. ;   go to test line;
          sn    w3                11  ;    if lettervalue=11 then
          jl.                    c53.  ;  go to list line;

           se   w3                12  ;   if lettervalue<>12 then
          jl.                    c36. ;   go to graphical char on spaceline;
  c62:                              ;commentline:
          sn.   w1              (f36.);   if not message mode or
          sn.   w1              (f38.);   cond list then
          jl.                    c55. ;   go to comment line;
  
          rs.   w1               f37. ; message: message list:=true;
          jl.                    c54. ;   go  to print linestart;
 
     c53:                             ; list line:
          hs.   w1               f27. ;   change list not allowed:=true;
          se.   w1              (f12.);   if dont touch listing or
          sn.   w1              (f38.);   cond list then
          jl.                    c55. ;   go to comment line;
          rs.   w1               f38. ;   cond list:=true;

     c54: rl.   w2                f23. ; print linestart:
          rs.   w2                c4. ;   listmode:=true;
          jl.   w3               e27. ;   print linecount;
          al    w0                32  ;
          jl.   w3               e12. ;   writechar(sp);
          bl.   w0               f30. ;   writechar(extchar);
          jl.   w3               e12. ;

     c55: al    w0                 0  ; comment line:label:=0;
  i25=k+1                           ;  the state is modified in case of a / line
          al    w3             g3-c5  ;   state:= comment line;
          jl.                     c0. ;   go to set rcstate;

     c24: al    w2                 1  ; testline: w2:=1 shift lettervalue+13;
          ls    w2    x3          13  ;   if bit(w2) in translatormode bits
          la.   w2               e29. ;   then
          se    w2                 0  ;     goto intext on spaceline
          jl.                    c46. ;   else
          al    w3              g3-c5 ;     state := commentline;
          jl.                     c0. ;   go to set rcstate;
     c25: al    w3              g5-c5 ; digit as first char:
          bl    w0                  5 ;   state:= labelfield not empty;
          hs.   w1             b14.+1 ;   label:= internal value;
          jl.                     c0. ;   internal nlstatvalue:=1;
                                      ;   go to set rcstate;

     c26: al    w2                 0  ; nlon spaceline: 
     c27: sn    w2                    ;   if -, countmark then
          jl.                    c45. ;   go to prepare next line;
          hs.   w2             c27.+1 ;   countmark:=false;
          al    w3              g2-c5 ;   state:= first character;
          rl.   w2               b15. ;   read char:= nlcontchar;comment
                                      ;   continuation line;
          jl.                    c35. ;   go to prepare repetition;

     c28: hs.   w1             c27.+1 ; illegal on spaceline:
          hs.   w1             c58.+1 ;   countmark:=linecount is listed:=true;;

  c29:  ds.   w1                b9. ;illegal:
        al    w2                 0  ;
        sn.   w2              (f39.);  if out begin unit then
        jl.                    c30. ;  begin
        rs.   w2               f39. ;    out begin unit := false
        al    w0                a7  ;    outbyte(start unit byte)
        jl.   w3                e3. ;  end

  c30:  rl.   w3                e6. ;
          al    w0              a15+0 ;
          bl.   w1               f30. ;   out4byte ( trouble,
          hs    w0                 2  ;   illegal error, extchar,
          jl.   w2                d7. ;   linecount);
          dl.   w1                b9. ;   reestablish registers;

     c31: al    w1    x1          -1  ; blind: charcount:= charcount-1;
          jl.                     c1. ;   go to rc next char;

     c33: rl.   w2               b15. ; nl on comment line: read char:=
          jl.                    c35. ;   nlcontchar; go to prepare repetition;

     c34: rl.   w2               b14. ; nl in labelfield:
                                      ;   read char:= nlstatchar;
     c35: hs.   w1              c8.+1 ; prepare repetition:
          rs.   w0               f10. ;   alreadylist:=true; label:= w0;
          al    w3              g6-c5 ;   state:= statementfield;
          hs.   w3              c5.+1 ;   set state;
          bl.   w3               f30. ;
          rs.   w3                b6. ;   saved char:=extchar;
          al    w1    x1          -1  ;   charcount:=charcount-1;
          al    w3           c48-c52  ;   repeat char:=true;
          hs.   w3            c52.+1  ;
          jl.                    c51. ;   go to  rcout;

     c36: sn    w1                6   ; graphical charon spaceline:
          jl.                    c40. ;   if charcount=6 then goto continue;
          sl    w1                6   ;   if charcount > 6 then
          jl.                    c34. ;   go to nl in labelfield; comment
        se    w1                 1  ;
        jl.                    c59. ;
        bl    w3                 4  ;
        sn    w3               j10  ;  if class = * and char count = 1
        jl.                    c55. ;    then goto comment line
        se    w3               j15  ;  if class = / and char count = 1
        jl.                    c59. ;
        al    w3             g8-c5  ;
        hs.   w3               i25. ;  force state to: in / line
        jl.                    c62. ;  goto commentline
  c59:                              ;
  ;   the character is read again at the next call and this time an
  ;   nlstatchar is output
          hs.   w1              c8.+1 ;   alreadylist:= true;
          al    w3              g5-c5 ;   state:=labelfield not empty;
          hs.   w3              c5.+1 ;   set state;
          jl.                     c3. ;   go to after in;

  c60:  rl.   w3               c61. ;nl or ff on / line:
        rs.   w3                c3. ;
        jl.                     c1. ;  read the first char on the next line and
  c61:  jl.                    i26  ;    return to: stopcharacter on spaceline

     c37: sn    w1                 6  ; digit in label: if charcount=6 then
          jl.                    c40. ;   go to continue;
          wm.   w0               f20. ;   label:= label * 10
          ba    w0                 5  ;          + internal value;
          al    w3                 1  ;
          bl.   w2             b14.+1 ;   if internal nlstatvalue<>2 then
          se    w2                 2  ;      internal nlstatvalue:=1;
          hs.   w3             b14.+1 ;
          jl.                     c1. ;   go to rc next char;

     c38: se    w1                 6  ; intext inlabel:if charcount<>6 then
          jl.                     c1. ;   go to  rc next char;
          rs.   w0               f10. ;   label:=w0;
          al    w0                48  ;   w0:=cchar:=48;
          jl.                    c39. ;   goto set continue state;

     c40: rs.   w0               f10. ; continue: label:=w0;
          bl.   w0               f30. ;   w0:=cchar:=extchar;

     c39: al    w3             g6-c5  ; set continue state:
          hs.   w3             c5.+1  ;   state:=statementfield;set state;
          rl.   w2               b14. ;   read char:=nlstatchar;
          sn    w0                48  ;   if cchar=48 then
          jl.                    c51. ;   go to rcout;
          al    w3                 0  ;
          hs.   w3             b14.+1 ;
          se.   w3              (f11.);   if outside unit then
          jl.                    c56. ;   go to label and continue;
          bl    w3                 5  ;
          rl.   w2               b15. ;   read char:= nlcontchar;
          sn    w3                 4  ;   if internal nlstatvalue=4 then
          jl.                    c51. ;   go to rc out;
     c56:                             ; label and continue:
          al    w2                 3  ;   internal nlstatvalue:=3; comment
          lo.   w2               b14. ;   error in label field;
          bl.   w3               f30. ;
          hs.   w3               f31. ;   save error:= extchar;
          jl.                    c51. ;   go to rcout;

     c41: sn    w1                 6  ; wrong char in label: if charcount=6
          jl.                    c40. ;   then go to continue;
          bl.   w3            b14.+1  ;
          sn    w3                 2  ;   if internal nlstatvalue=2 then
          jl.                     c1. ;   go to rc next char;
          al    w2                 2  ;
          hs.   w2            b14.+1  ;   internal nlstatvalue:=2;
          bl.   w2               f30. ;
          hs.   w2               f31. ;   save error := extchar;
          jl.                     c1. ;   go to rc next char;

     c42: sh.   w1              (f13.); char in statement field:
          jl.                          c51. ;   if charcount<=endstatemfield
                                      ;   then go to rcout;
          al    w3              g7-c5 ;   state:= comment field;
          jl.                     c0. ;   go to set rcstate;

     c43: al    w0                 0  ; nl on statementline:
          jl.   w3                e1. ;   count line;
          sn.   w0              (f37.);   if  -, message list then
          jl.                    c45. ;    go to prepare next line;
          rs.   w0                f37.;    message list:= false;
          rl.   w3               f33. ;
          rs.    w3               c4. ;    list mode:= false;

     c45: al    w0                 0  ; prepare next line:
          hs.   w0             c8.+1  ;   alreadylist:=false;
          hs.   w0             c58.+1 ;   linecount is listed:=false;
          al    w1                 0  ;   label:= charcount:=0;
          al    w2                 4  ;   internal nlstatvalue:= 4; comment
          hs.   w2             b14.+1 ;   for empty labelfield;
          al    w3              g2-c5 ;   state:= first character;
          jl.                      c0.;   go to set rcstate;

     c46: al    w3              g4-c5 ;  intext on spaceline:
          bl.   w2                f30.;   state:= space line;
          se    w2                32  ;   if extchar<> sp then
          hs.   w1             c27.+1 ;   countmark:=true;
          jl.                      c0.;   go to set rcstate;

     c47: al    w3                 8  ; em: lclass:=8; comment stop class;
          al    w1    x1          -1  ;   charcount:=charcount-1;
          se.   w3              (b13.);   if stop<>lclass then
          jl.                    c21. ;   go to next source;
          jl.                     c5. ;   go to rcaction;

     c49: rl.   w1                e6. ;  stop character on spaceline:
          al    w1    x1          -1  ;   if -, outside then
          am.                   (f11.);   linecount :=
          sn    w1    x1           0  ;   linecount-1;
          rs.   w1                e6. ;

     c50: bl.   w1               b14. ; stop character on statementline:
          al    w2                  5 ;   read char:= nlstateclass*2**12+5;
          hs    w1                4   ;

     c51: rl.   w0                b2. ; rcout: reestablish w0;
          rx.   w1                b1. ;   oldcharcount:=charcount;
          jl.                   (b0.) ; end read char;


  ; assignment of intermediates:
    i0 = c5-c0+1
    i1 = c1-c6 ,  i2 = c23-c6,  i3 = c25-c6,  i4 = c26-c6,  i5= c28-c6
    i6 = c29-c6,  i7 = c29-c6,  i8 = c31-c6,  i9 = c29-c6, i10= c33-c6
    i11= c34-c6,  i12= c36-c6,  i13= c37-c6,  i14= c38-c6, i15= c41-c6
    i16= c42-c6,  i17= c43-c6,  i18= c46-c6,  i19= c47-c6, i20= c49-c6
    i21= c50-c6,  i22= b1- c52, i23= c11-c13, i24= c60-c6, i26=c49-c3
  e.

  b.  b9, c37, g8 , i45                ; procedure format;

  ;   the procedure is called from main sequence after a call of compound
  ;   when a <start format>-byte is output, and the call is:
  ;       jl.   w3                d4.

  ;   as a result  a format-statement is converted and packed, partly
  ;   by call of longtext and field descriptor, into elements of 2 bytes.
  ;   format-elements are output,separated by formatc-bytes and terminated
  ;   by an end-format record.

  ;   register use:
  ;             call              exit
  ;       w0                    undefined
  ;       w1                    undefined
  ;       w2                    undefined
  ;       w3  return address    undefined

  ;   possible outputbytes: (during call of out3bytes and out4bytes)
  ;     <formatc> <2 bytes with a format-element>
  ;     <end format><size of format><maxcount of parentheses>
  ;     <trouble><format error><comma no.><0>

  ;   globals used:
  ;     f7, f14, f15, f20, f25, f32
 
  ;   local variables:

  w.  b0:      0                      ;   return address
      b1:      0                      ;   minus
  h.  b2:      0                      ;   error
      b3:      0                      ;   comma
      b4:      0                      ;   parentheses
      b5:      0                      ;   repcount

  w.  b6:      0                      ;   max parenth
      b7:      0                      ;   size of format
  ;   b8:     i10<20+1<4+1            ;   empty format element: 1x)
                                      ;   defined just before entry;
      b9:      1<12                   ;   maxsize of format


  ;   tables

   h.  g0:                             ;   desctable(1:12);comment
          i13 ,  i14 ,   0  ,  i15    ;   a , b, c, d
          i16 ,  i17 , i18  ,    0    ;   e , f, g, h
          i19 ,    0 ,   0  ,  i20    ;   i , j, k, l;


  h.  g1:  0 , 1 , 1 , 3 , 1 , 1      ;   classtable(1:24); contains the
           2 , 5 , 14, 14, 14, 14     ;   local classes;
           6 , 4 , 7 , 8 , 9 , 10     ;
           13, 14, 11, 14, 13, 12     ;
  ;   the local classes are:
  ;     class     containing
  ;        0        digits
  ;        1        b f e d g i l a
  ;        2        x
  ;        3        h
  ;        4        apostrophe
  ;        5        p
  ;        6        -
  ;        7        ,
  ;        8        /
  ;        9        (
  ;       10        )
  ;       11        in text
  ;       12        nl cont
  ;       13        stat term and nl stat
  ;       14        others




  ;   action table:
  ;     local class:
  ;     0   1   2   3   4   5   6   7   8   9  10  11  12  13  14   state
  h.g2:i22,i22,i22,i22,i22,i22,i22,i22,i22,i23,i22,i21,i43,i22,i22 ;
                                                         ; skip to parenth;
    g3:i24,i30,i31,i22,i33,i22,i44,i22,i34,i26,i42,i21,i43,i22,i22 ;
                                                         ; after first par;
    g4:i24,i30,i31,i22,i33,i22,i44,i22,i34,i26,i22,i21,i43,i22,i22 ;
                                                         ; new group
    g5:i25,i28,i32,i33,i22,i29,i22,i22,i22,i27,i22,i21,i43,i22,i22 ;
                                                         ; repeat factor
    g6:i22,i22,i22,i22,i22,i22,i22,i37,i38,i22,i36,i21,i43,i22,i22 ;
                                                         ; repeat end count.
    g7:i38,i38,i38,i22,i38,i22,i38,i37,i38,i38,i35,i21,i43,i22,i22 ;
                                                         ; after slash
    g8:i40,i40,i40,i40,i40,i40,i40,i40,i40,i40,i40,i21,i43,i45,i40 ;
                                                         ; term  format


  ; the i-names are intermediate action adresses which are to be
  ; replaced by c-names as:
  ;   i21   i22   i23   i24   i25   i26   i27   i28   i29   i30   i31   i32
  ;   c1    c5    c6    c7    c8    c9    c10   c15   c16   c17   c19   c20
  ;
  ;   i33   i34   i35   i36   i37   i38         i40         i42   i43   i44
  ;   c21   c22   c23   c24   c25   c26         c31         c29   c34   c35
  ;   i45
  ;   c36

  ;   packing of format elements:

  ;   <format element>::=<byte1> <byte2>
  ;
  ;   <byte1>         ::=<type><8+ ( <d-spec>)
  ;                                ( <b-spec>)
  ;                                ( <s-spec>)
  ;                                (       0 )
  ;
  ;   <byte2>         ::=(<w-spec>)<4+ <repeat end count>
  ;                      (      0 )
  ;                   or  <r-spec>
  ;                   or  <signed scale-spec>

  ;                   format-types

        i14=1       ;  1:     bw.d
        i17=2       ;  2:     fw.d
        i16=3       ;  3:     ew.d
        i18=4       ;  4:     gw.s
        i15=5       ;  5:     dw.d
        i19=6       ;  6:     iw.d
        i20=7       ;  7:     lw
        i13=8       ;  8:     aw
        i10=9       ;  9:     rx  ,packed as xw
        i9 =10      ; 10:     rp
        i11=11      ; 11:     /
        i12=12      ; 12:     r(   explicit
        i8 =13      ; 13:     r(   implicit
                    ; 15:     end format,packed by another pass

  w.  b8:     i10<20+1<4+1            ; empty format element: 1x)


  ; entry point

  w.d4:   rs.   w3                b0. ; begin
          al    w0                 1  ;
          rs.   w0                b2. ;   comma:= 1
          al    w0                 0  ;   error:=
          rs.   w0                b4. ;   parentheses:=repcount:=
          rs.   w0                b1. ;   minus:=0;
          rs.   w0                b6. ;   max parenth:= 0;
          al    w0                2   ;
          rs.   w0                b7. ;   size:= 2;
          al    w0             a12+4  ;
          hs.   w0               f32. ;   last of out4bytes:=formatc;
          al    w3                i1  ;   state:= skip to parenth;

      c0: hs.   w3                i0  ; set format state:

      c1: jl.   w3               d11. ; new char: w2:= next char;

      c2: bl    w3                 4  ; after in: mainclass:= w2(0:11);
          bl.   w3    x3         g1.  ;   local class:=classtable(mainclass);

      c3: bl.   w3    x3              ; format action:
      c4: jl.         x3              ;   go to action(local class,state);

  ; comment action 0:                     go to new char;

      c5: al    w3                1   ; error action:
          hs.   w3                b2. ;   error:=true;
          jl.                    c28. ;   goto end format;


      c6: al    w3                 1  ; first left par:
          hs.   w3                b4. ;  parentheses:=1;
          rs.   w3                b6. ;   maxparenth:=1;
          al    w3                i2  ;  state:=after first par;
          jl.                     c0. ;   go to set format state;

      c7: bl    w1                 5  ; first digit in group:
          al    w3                i4  ;   repfactor:=internal value;
          jl.                     c0. ;   state:= repeat factor;
                                      ;   go to set format state;

      c8: wm.   w1               f20. ; digit in repeat factor:
          ba    w1                 5  ;   repeat factor:=repeat factor*10
          sl    w1               256  ;   + internal value;
          jl.                     c5. ;   if repeat factor >=256 then
                                      ;   go to error action;
          jl.                     c1. ;   go to new char;

      c9: al    w1                 1  ; implied factor of one:

     c10: bl.  w3                 b4. ; explecit repeat begin:
          al    w3    x3           1  ;   parentheses:=parentheses+1;
          hs.   w3                b4. ;
          sl.   w3               (b6.);   if parentheses>=maxparenth
          rs.   w3                b6. ;   then maxparenth:=parentheses;
          jl.   w3               d11. ;   w2:=next char;
          al    w0               i12<7 ;   elementtype:=explecit repeat begin;
          ls    w0                 1  ;

     c11: rl.   w2                b1. ; rep out:
          se    w1                 0  ;   if repfactor=0  or
          se    w2                 0  ;   minus then
          jl.                    c5.  ;   go to error action;
          hs    w0                 2  ;   w1(0:11):=elementtype;comment
                                          ;   w1(12:23)=repeat factor;
     c12: jl.   w2               c30. ; out element:
                                      ;   out3bytes(w1(0:1)w1(12:23),
                                      ;   last of out4bytes);

     c13: al    w3                i3  ; after out element:
                                      ;   state:=new group;

     c14: hs.   w3              c3.+1 ; set f state:  set state;
          rl.   w2               (f7.);   w2:= buffer(charpointer);
          jl.                     c2. ;   go to after in;

     c15: al    w0                 1  ; implied repeat begin:
          hs.   w0                b5. ;   repcount:=1;
          al    w0               i8<7 ;   elementtype:=implied repeat begin;
          ls    w0                 1  ;
          jl.                     c11.;   go to rep out;


     c16: al    w2                 0  ; scale factor:
          se.   w2               (b1.);   if minus then
          ac    w1    x1              ;   repfactor:= -repfactor;
          rs.   w2                b1. ;   minus:=false;

          al    w0              i9<7  ;   elementtype:=scale factor;
          ls    w0                 1  ;
          hs    w0                 2  ;   w1(0:11):=elementtype;
          jl.   w2                c30.;   out3bytes(w1(0:11),w1(12:23),
                                      ;   last of out4bytes);
          al    w2                 0  ;   fdstate:=1;
          jl.   w3               d13. ;   field descriptor(fdstate);
          se    w2                 0  ;   if error then
          jl.                     c5. ;   go to error action;
          se    w0                 1  ;   if no waitbytes then
          jl.                    c13. ;   go to after out element;
          jl.                    c15. ;   go to implied repeat

     c17: bl    w3                 5  ; letter descriptor:
          al    w2                 1  ;   fdstate:=2; waitbytes(0:11):=
          bz.   w3    x3      g0.-a0  ;   descript type  := desctable(
          ls    w3                 8  ;
          hs.   w3               f15. ;   internal value-letterbase);
          sl    w3               6<8  ;   if descript type>=6 then
          al    w2                 2  ;   fdstate:=3;
          jl.   w3               d13. ;   field descriptor(fdstate);
          se    w2                 0  ;   if error then
          jl.                     c5. ;   go to error action;

     c18: al    w3                i5  ; prepare field end:
          bl.   w1                b5. ;   state:=repeat end count;
          bl.   w0                b4. ;   w1:=repcount; w0:=parentheses;
          jl.                    c14. ;   go to set f state;

     c19: al    w1                 1  ; one space implied: repfactor:=1;

     c20: al    w0             i10<7  ; space descriptor: descripttype:=9;
          ls    w0                 1  ;
          sn    w1                 0  ;   comment x-type; if repfactor=0
          jl.                     c5. ;   then go to error action;
          ls    w1                 4  ;
          hs    w0                 2  ;   waitbytes:=(descripttype shift 20)
          rs.   w1               f15. ;   +(repfactor shift 4);
          jl.   w3               d11. ;   next char;
          jl.                    c18. ;   go to prepare field end;


     c21: rs.   w1               f14. ; start longtext: repfactor:= w1;
          al    w1                 0  ;   out3byte( 0, 0,last of
          jl.   w2                c30.;   out4bytes);
          rs.   w1               f15. ;   waitbytes:=0;
          rl.   w2              (f7.) ;   w2:=buffer(charpointer);
          jl.   w3              d14.  ;   longtext;
          se    w1                0   ;   if error then
          jl.                    c5.  ;   go to error action;
          jl.   w3               d11. ;   next char;
          jl.                    c18. ;   go to prepare field end;

     c22: al    w0             i11<7  ; slash field:
          ls    w0                13  ;   waitbytes:=slashtype shift 20;
          rs.   w0               f15. ;
          bl.   w0                b4. ;   w0:=parentheses;
          al    w1                 0  ;   repcount:=0;
          al    w3                i6  ;   state:= after slash;
          jl.                     c0. ;   go to set format state;

     c23: al    w3                i5  ; right par after slash:
          hs.   w3              c3.+1 ;   state:= repeat end count;

     c24: al    w1  x1            +1  ; repeat end counting:
          sl    w1                16  ;   repcount:=repcount+1;
          jl.                     c5. ;   if repcount>=16 then
          bs.   w0                 1  ;   goto error action;
          sn    w0                 0  ;   parentheses:=parentheses-1;
          jl.                    c28. ;   goto if parentheses=0 then
          jl.                     c1. ;   end format else new char;

     c25: bl.   w2                b3. ; comma group end:
          al    w2    x2           1  ;   comma:= comma+1;
          hs.   w2                b3. ;
          jl.   w3               d11. ;   w2:= next char;

     c26: hs.   w0                b4. ; group end: parentheses:=w0;
          al    w0                 0  ;
          hs.   w0                b5. ;   repcount:=0;
          lo.   w1               f15. ;   w1:=waitbytes add w1;comment w1
                                      ;   contains the old repcount value;
          jl.                    c12. ;   go to out element;

     c28: lo.   w1               f15. ; end format:comment w1 contains
          al    w3             a12+3  ;   repcount;last of out4bytes
          hs.   w3               f32. ;   := end format;
          jl.   w2               c30. ;   w1:=w1+waitbytes;
          rl.   w0                b7. ;   out3bytes(w1(0:11),w1(12:23),
          jl.   w3                e3. ;   last of out4bytes);

          rl.   w0                b6. ;   outbyte(size);
          ba.   w0                 1  ; 
          ls    w0                 1  ;
          jl.   w3                e3. ;   outbyte((maxparenth+1)*2);comment
                                      ;   one implicit ( can be stacked
          bl.   w2                b2. ;   in the io-procedures;
          se    w2                 0  ;   if error then
          jl.                    c31. ;   goto out errorbytes;
          al    w3                i7  ;   state:= terminate format;
          jl.                     c0. ;   goto set format state;

     c29: rl.   w1                b8. ; empty format:
                                      ;   w1:=end format element;
          jl.                 c28.+2  ;   goto end format;

 d35:c30: rl.   w3                b7. ; stepping stone for out3bytes:
          al    w3  x3            +2  ;   called as jl. w2  d8.;
          rs.   w3                b7. ;   size:=size+2;
          sl.   w3               (b9.);   if size >=maxsize of format
          jl.                     d5. ;   then goto error action;
          jl.                     d8. ;   out3bytes;


     c31: al    w3                 0  ; out errorbytes:
          bl.   w1                b3. ;
          al    w0             a15+6  ;   out4bytes(trouble,format error,
          hs    w0                 2  ;   comma,0);
          jl.   w2                d7. ;
          jl.   w3               d15. ;   set pointer;

     c32: jl.   w3               d11. ; skip chars:  w2:=next char;
          bl    w3                 4  ;   mainclass:= w2(0:11);
          sn    w3               j22  ;   if mainclass= nlstatclass then
          jl.                    c36. ;   go to format out;
          se    w3               j23  ;   if mainclass<>nlcontclass then
          jl.                    c32. ;   go to skip chars;
          ba.   w2               f25. ;   nlbyte:=nlbyte+1;
          hs.   w2               f25. ;
          jl.                    c32. ;   go to skip chars;

     c34: ba.   w2               f25. ; nlcont:
          hs.   w2               f25. ;   nlbyte:= nlbyte+1;
          jl.                     c1. ;   go to new char;

     c35: rs.   w2                b1. ; minus in new group: minus:=true;
          al    w3                i3  ;   state:=new group;
          jl.                     c0. ;   go to set format state;

     c36: jl.   w3               d15. ; format out: set pointer;
          jl.                    (b0.); end format;



  ; assignment of intermediates:
      i0 =c3-c0+1
      i1 =g2-c3,  i2 =g3-c3,  i3 =g4-c3,  i4 =g5-c3,  i5 =g6-c3
      i6 =g7-c3,  i7 =g8-c3
      i21=c1 -c4, i22=c5 -c4, i23=c6 -c4, i24=c7 -c4, i25=c8 -c4
      i26=c9 -c4, i27=c10-c4, i28=c15-c4, i29=c16-c4, i30=c17-c4
      i31=c19-c4, i32=c20-c4, i33=c21-c4, i34=c22-c4, i35=c23-c4
      i36=c24-c4, i37=c25-c4, i38=c26-c4,             i40=c31-c4
                  i42=c29-c4, i43=c34-c4, i44=c35-c4, i45=c36-c4
  e.



  b.  c1                              ; procedure byte newline
  ;   it is called from main sequence and constant when a field has
  ;   been processed and we want to output a number of <end line>-
  ;   bytes corresponding to the number of nlcont-chars picked up
  ;   during processing. the global   nlbyte   holds this number.
  ;   the call is:
  ;       jl.   w2                d5.

  ;   register use:
  ;             call            exit
  ;     w0                    <end line>
  ;     w1                        0
  ;     w2  return address    unchanged
  ;     w3                    undefined

  ;   globals used:  f25


  w.d5:   al    w0               a12  ; begin
          bl.   w1               f25. ;
          jl.                     c1. ;   for i :=1 step 1 until nlbyte do
      c0: jl.   w3                e3. ;
          al    w1    x1          -1  ;   outbyte(<end line>);

      c1: se    w1                 0  ;
          jl.                    c0.  ;   nlbyte :=0;
          hs.   w1               f25. ;
          jl          x2              ; end byte newline;
  e.
  b.  b0,c0                           ; procedure outputc(leading byte,
  ;                                     start address,last address);
  ;   outputc is called from constant,main sequence,text and bitpattern
  ;   and it outputs a number of bytes, i.e. leading byte  followed by
  ;   the bytes from byte(start address+1) to byte(last address).
  ;   the call is:
  ;       jl.   w3                d6.

  ;   register use:
  ;             call              exit
  ;     w0    leading byte      undefined
  ;     w1    start address     last address+1
  ;     w2    last address      unchanged
  ;     w3    return address    undefined

  ;   local variables:


  w.  b0:        0                    ;   return address
  
  w.d6:   rs.   w3               b0. ; begin w0:=leading byte;w1:=startaddr;
      c0: jl.   w3                e3. ; next out:  outbyte(w0);
          al    w1    x1           1  ;   w1:=w1+1;
          bl    w0    x1              ;   w0:=byte(w1);
          sh    w1    x2              ;   if w1<= last address then
          jl.                     c0. ;   go to next out;
          jl.                   (b0.) ; end outputc;
  e.
  b.                                  ; procedure out4bytes(b1,b2,b3,b4);
  ;
  ;   the procedure has 4 entries called out4bytes,out3bytes,out2bytes
  ;   and out1byte,  and from 4 to 1 bytes , specified in the parame-
  ;   ters, are output.
  ;   out4bytes is called when trouble-bytes are to be output and b1
  ;   always equals <trouble>.  b2 and b3 are specified in register w1
  ;   and b4 in w3 at the entry but it is stored in the global
  ;   last of out4bytes    .  when other entries are called this global
  ;   must be set before.  the call is
  ;       jl.   w2                d7. ;   out4bytes
  ;       jl.   w2                d8. ;   out3bytes
  ;       jl.   w2                d9. ;   out2bytes
  ;       jl.   w2               d10. ;   out1byte

  ;   register use:
  ;             call            exit
  ;     w0                    undefined
  ;     w1  b2,b3             unchanged
  ;     w2  return address    unchanged
  ;     w3    b4              undefined

  ;   globals used:   f32

  ;   entries:


  w.d7:   hs.   w3               f32. ; begin  last of out4bytes:=b4;
          al    w0               a14  ;
          jl.   w3                e3. ;   outbyte(trouble);

    d8:   bl    w0                 2  ; out3bytes:
          jl.   w3                e3. ;   outbyte(b2);
    d9:   bl    w0                 3  ; out2bytes:
          jl.   w3                e3. ;   outbyte(b3);

   d10:   bl.   w0               f32. ; out1byte:
          jl.   w3                e3. ;   outbyte(last of out4bytes);
          jl          x2              ; end out4bytes;
  e.
w.

  d29:    jl.                     e3. ; stepping stone for outbyte;

  d30:    jl.                    e13. ; stepping stone for writetext;
  d32:    jl.                     d1. ; stepping stone for endpass1;
  d33:    jl.                    d15. ; stepping stone for set pointer;
         d34:    jl.                    e12. ; stepping stone for writechar

  b.   b2, g0, c8, i0               ; procedure next char;
  ;   the procedure next char is called from different procedures
  ;   whenever a new character is wanted and it is called as:
  ;       jl.   w3               d11.
  ;   next char administers a buffer and uses the global variables
  ;   charpointer and bufpointer to point at last used character and
  ;   last buffercharacter.
  ;   the characters are input from read char and the last used character
  ;   is always stored in the buffer.  in  search mode more characters can
  ;   be stored, and it happens when charpointer = bufpointer.
  ;   the buffer is emptied in normal mode when charpointer < bufpointer.
  ;   a special thing is:
  ;     in search mode nlcontchars from read char are not stored in the
  ;   buffer but used to update the variable nlcontcount.

  ;   registeruse:
  ;             call              exit
  ;      w0                      unchanged
  ;      w1                      unchanged
  ;      w2                      internal character
  ;      w3    returnaddress     undefined

  ;   local variables:
  w.  b0:           0                ;   return address
  b2:   0                           ; saved char count
      b1: jl.                    i0  ;   empty mode
  ;   table                          ;
  w.
   d25:g0:    0 , r.20               ; buffer(1:20);

  ;   entry point
  w.d11:  rs.   w3               b0. ;  begin
          rx.   w1                f7.;   save register w1;

   d26:c0:al    w1    x1           2 ; empty or not: if emptybuffer then
                                     ;   go to new char;
                                     ;   charpointer:= charpointer+1;

          rl    w2    x1             ;   next char:= buffer(charpointer);
          sh.   w1              (f8.);   if charpointer<=bufpointer then
          jl.                     c6.;   go to ncout;

   d27:c1:al.   w1                g0.; normal: bufpointer:=charpointer:=
          rs.   w1                f8.;   bufbase;comment can be
          rl.   w2                b1.;   go to search mode;
          rs.   w2               c0. ;   emptybuffer:=true;
          jl.                    c4. ;   go to new char;

   d28:c2:rs.   w1               f8. ; search mode: bufpointer:=charpointer;
  c3:   rl.   w3               f41. ;get char:
        rs.   w3                b2. ;  save char count
        jl.   w3                d3. ;  nextchar:=readchar
  c8:   bl    w3                 4  ;examine char:
        se    w3               j20  ;
        jl.                     c7. ;  if char = intext
        sn    w2    x1         (-2) ;    and char = last char then
        jl.                     c3. ;    goto getchar

  c7:   se    w3               j23  ;  if main class <> nl cont class then
        jl.                     c5. ;    goto store char
        ba.   w2               f26. ;
        hs.   w2               f26. ;  nlcount:=nlcount+1
        rl.   w3                b2. ;
        sl.   w3              (f13.);  if saved char count >= endstatem field then
        jl.                     c3. ;    goto get char
        rl.   w2           f42.+64  ;  nextchar:=intext
        jl.                     c8. ;  goto examine char

      c4: jl.   w3               d3. ; new char: next char:= read char;

      c5: rs    w2    x1             ; store char:
                                     ;   buffer(charpointer):=next char;
      c6: rx.   w1               f7. ; ncout: reestablish w1;
          jl.                   (b0.); end next char;

  ; assignment of intermediate:
    i0= c4- c0

  e.

b. b2, c13                          ;procedure set search mode

w.

        0                           ;  saved w0
  b1:   0                           ;  saved w1
  b2:   0                           ;  return address

d36:                                ;entry point:
        rs.   w3                b2. ;  save return
        rl.   w3                f7. ;
        sn.   w3               d25. ;  if charpointer = buffer base then
        jl.                    c13. ;    goto after copying
        ds.   w1                b1. ;  save w0, w1
        al.   w1               d25. ;
        rs.   w1                f7. ;  char pointer := buffer base
        jl.                    c12. ;  goto copy

  c11:  al    w3    x3           2  ;copy next:
        al    w1    x1           2  ;  advance pointers
  c12:  rl    w0    x3              ;copy:
        rs    w0    x1              ;
        se.   w3               (f8.);  if -,finished then
        jl.                    c11. ;    goto copy next
        rs.   w1                f8. ;  adjust bufpointer
        dl.   w1                b1. ;  restore w0, w1

  c13:  rl.   w3               f22. ;after copying:
        rs.   w3               d26. ;  empty buffer:=false
        rl.   w3               f21. ;  mode in next char := search mode
        rs.   w3               d27. ;
        jl.                    (b2.);  exit
e.                                  ;

  ;   global variables:

  w.  f0:            0                ;   abs addr current desc
      f1:            0                ;   current word
      f2:            0                ;   current word addr
      f3:            0                ;   last word addr
      f4:            0                ;   saved give up
      f5:            0                ;   sourcepointer
      f6:            0                ;   testline pattern
      f7:            0                ;   charpointer
      f8:            0                ;   bufpointer
      f9:            0                ;   input block entry
     f10:            0                ;   label
     f11:            1                ;   outside unit
     f12:            1                ;   dont touch listing
     f13:           1000              ;   endstatem field
     f14:            0                ;   repfactor
     f15:            0                ;   waitbytes  :used to pick up
                                      ;              formatbytes.
     f16:            0                ;   numb1      : used
     f17:            0                ;   numb2      : to pick up
     f18:            0                ;   numb3      : constants
     f19:            0                ;   exponent   :
     f20:           10                ;   ten

     f21: jl.                d28-d27  ;   smode: instruction used in label
                                      ;        : searchmode in next char.
     f22: al   w1    x1           2   ;   notempty :used in empty or not
                                      ;            :in next char
     f23: jl.                d23-d22  ;   listmode :used in label rcclass
                                      ;            :in read char
     f24: al.  w1            d25-d27  ;   normalm  :used in label normal
                                      ;            :in next char
  h. f25:       0                     ;   nlbyte   :used for counting the
                                      ;            :number of continuation-
                                      ;            :lines in a field. initia-
                                      ;            :lised in bytenewline.
     f26:       0                     ;   nlcontcount: the number of conti-
                                      ;            :nuation lines pickedup
                                      ;            :in search mode
     f27:       0                     ;   change list not allowed
     f30:       0                     ;   extchar  : last iso-character
     f31:       0                     ;   save error : error char in label.
     f32:       0                     ;   last of out4bytes
  w. f33: bl.   w3    x3    d31-d22   ;   nolist   :used in label rcclass
                                      ;            :in read char
     f34:       0                     ;   some constant
     f35:       0                     ;   linecount address
     f36:       0                     ;    message mode
     f37:       0                     ;   message list
     f38:       0                     ;   cond list
     f39:             1               ;   out begin unit
     f40:       0                              ; 1 if do

  b.  b1, c27, g1, i11                 ;       main sequence

  ;   main sequence is entered once from init pass1 by
  ;       jl.                     d12.
  ;   in the central action it inputs characters during call of next char
  ;   and defines by table look up in an action-table the relevant action
  ;   to be done in this initial situation, where the character just read is
  ;   the start of a field of some kind.

  ;     main sequence administers the field-processing, for fields of more
  ;   than one character during call of the procedures constant, compound,
  ;   text,format and copytodel, for one-character-fields by jumps to actions
  ;   in main sequence itself. a number of endline bytes, corres ponding to
  ;   the number of continuation-lines counted during field-processing,is
  ;   output here(except for constant) during call of byte newline;

  ;     when conditional listing is used the turn off of the listing is done
  ;   here

  ;   possible outputbytes: (during call of outbyte,byte newline,out4bytes,
  ;                          out2bytes)
  ;       <start unit>
  ;       <1 byte with linecount>, appearing after <end unit>
  ;       <all delimiters>
  ;       <integer><2 bytes with label-value>
  ;       <endline>
  ;       <end statement>
  ;       <end label>

  ;       <trouble><graphic error><char value><0>
  ;       <trouble><missing end><0><0><end unit><linecount>
  ;       <trouble><error in label><trouble char><0>
  ;       <trouble><label and continue><last char><0>

  ;   globals used:
  ;         f10,f11,f23,f25,f27,f28,f31,f32,f33,f35

  ;   local variables:

  w.  b0: <:<10> no program<0> :>      ;   alarm text;
      b1:             1                ;   no program

  ;   action table:
  ;     mainclass
  ;         0   1   2   3   4   5   6   7   8   9   10  11  12  13  14
  h.  g0:  i1, i0, i0, i0, i0, i0, i0, i0, i0, i1, i0,  i4, i4, i2, i4

  ; class: 15  16  17  18  19  20  21  22  23
           i4, i4, i4, i4, i4, i7, i3, i5, i6

  ;   label action:
      g1:  i8, i9, i10, i11            ;   used,when processing nlstat-chars.

  ;   the i-names are intermediate action-adresses,which are to be replaced
  ;   by c-names in the following manner:
  ;   i0  i1  i2  i3  i4  i5  i6  i7    i8  i9  i10  i11
  ;   c5  c10 c11 c12 c13 c14 c23 c2    c19 c21 c22 c20

  ; entry point:

  w.d12:                              ; begin
                                      ;
      c2: jl.   w3               d11. ; central action: w2:= next char;
          bl    w1                 4  ;   mainclass:= w2(0:11);

      c3: bl.   w3    x1          g0. ; class: m action:= actiontable(
      c4: jl.         x3              ;   mainclass); go to action(m action);

      c5: jl.   w3               d21. ; first of compound:
          se    w1                 1  ;   if -, compound then
          jl.                    c24. ;   go to copy;
          sn    w0                a3  ;   if bytevalue= end unit then
          jl.                     c6. ;   go to end;
          sn    w0             a10+3 ;
          rs.  w1                f40. ; remember do
          jl.   w3                d29.;   outbyte(byte value);
          jl.                     c9. ;   go to maybe format;

     c24: jl.   w3                d2. ; copy: copytodel;
          jl.                    c25. ;   go to nl bytes;

      c6: rs.   w1               f11. ; end: outside unit:=true;
          rs.   w1               f39. ;   out begin unit:=true;
          jl.   w2                d5. ;   byte newline;comment w1=0;
          al    w0                a3  ;
          jl.   w3                d29.;   outbyte(end unit);
          al    w0               a12  ;
          jl.   w3               d29. ;   outbyte(end line);
          bl.   w2               f27. ;
          sn.   w1              (f12.);   if dont touch listing or
          se    w2                 0  ;   change list not allowed then
          jl.                     c7. ;   go to skip rest of line;
          rl.   w2               f33. ;   list mode:= false;
          rs.   w2               d22. ;
          al    w0                10  ;
          se.   w1              (f38.);   if cond list then
          jl.   w3               d34. ;   writechar(nl);
          rs.   w1               f38. ;   cond list:= false;


      c7: jl.   w3               d11. ; skip rest of line: w2:= next char;
          bl    w1                 4  ;   mainclass:=w2(0:11);
          se    w1               j23  ;   if mainclass=nlcont or
          sn    w1               j22  ;   mainclass=nlstat then
          jl.                     c3. ;   goto class else
          jl.                     c7. ;   goto skip rest of line;

      c9: se    w0             a12+1  ; maybe format: if bytevalue=
          sn    w0             a12+2  ;   <begin closed f> or
          jl.   w3                d4. ;   <begin open f> then format;
          jl.                    c25. ;   go to nl bytes;

     c10: jl.   w3               d17. ; digit or point:
          se    w1                 0  ;   if constant then
          jl.                     c2. ;   go to central action;
          jl.   w3               d11. ;   next char;
          jl.                     c5. ;   go to first of compound;

     c11: jl.   w3               d20. ; apostrophe: text;
          jl.                    c25. ;   go to nl bytes;

     c12: al    w0              a15+1 ; graphic:
          bl.   w1               f30. ;   out4bytes(trouble,graphic error,
          hs    w0                 2  ;            extchar,0);
          al    w3                 0  ;
          jl.   w2               d7.  ;
          jl.                    c2.  ;   go to central action;

     c13: bl    w0                 5  ; delimiters:
          jl.   w3               d29. ;   outbyte(internal value);
          jl.                     c2. ;   go to central action;

     c14: bl    w2                 5  ; char of class nlstat:
          al    w1                 0  ;
          sn    w2                 5  ;   if internal value=5 then
          jl.                    c26. ;   go to terminate program;comment
                                      ;   em from last source;
          sn.   w1              (f11.);   if -, outside unit then
          jl.                    c16. ;   go to inside unit;
        rs.   w1               f11. ;  outside unit:=false
        rs.   w1                b1. ; no program:=false
        sn.   w1              (f39.);  if -, out begin unit then
        jl.                    c17. ;    goto rest bytes
        rs.   w1               f39. ;  out begin unit := false
          al    w0                a7  ;
          jl.   w3               d29. ;   outbyte(start unit);
          jl.                    c17. ;   go to rest bytes;
     c16: al    w0                a9  ; inside unit:   
          jl.   w3               d29. ;   outbyte(end statement);
          al    w0                  0    ; reset do-flag
          rs.   w0                f40.   ;
          al    w0               a12  ;
          jl.   w3               d29. ;   outbyte(end line);

     c17: bl.   w2    x2        g1.-1 ; rest bytes:
          al    w3                 0  ;   laction:= label action(internal
          bl.   w1                f31.;   value);
     c18: jl.         x2              ;   go to label action(laction);

     c19: al    w0               a3+3 ; correct label:
        jl.   w3               d29. ;   outbyte(<integer>);
          bl.   w0               f10. ;
          jl.   w3               d29. ;   outbyte(label(0:11));
          bl.   w0             f10.+1 ;
          jl.   w3               d29. ;   outbyte(label((12:23));

     c20: al    w0               a9+1 ; end label out:
          jl.   w3               d29. ;   outbyte(end label);
          jl.                     c2. ;   go to central action;

     c21: al    w0             a15+7  ; wrong label:
          hs    w0                 2  ;   out4bytes(trouble,wrong label,
          jl.   w2                d7. ;   save error char,0);
          jl.                    c20. ;   go to end label out;

     c22: al    w0             a15+8  ; label and continue:
          hs    w0                 2  ;   out4bytes(trouble,label and cont,
          jl.   w2               d7.  ;   save error char,0);
          jl.   w3               d11. ;   w2:=next char;
          jl.   w3               d16. ;   skip to statement(w2);
          jl.   w3               d15. ;   set pointer;
          jl.                    c25. ;   go to nl bytes;

     c23: al    w0               a12  ; nl cont:
          jl.   w3               d29. ;   outbyte(end line);
          jl.                     c2. ;   go to central action;

     c25: jl.   w2                d5. ; nl bytes: byte newline;
          jl.                     c2. ;   go to central action;

     c26: sn.   w1              (b1.) ; terminate program: if-, no program
          jl.                    c27. ;   then go to some program;
          al.   w1               b0.  ;   writetext(<:no program:>);
          jl.   w3               d30. ;
          jl.                    d24. ;   go to terminate;comment label in
                                      ;   read char;
     c27: se.   w1              (f39.); some program: if out begin unit then
          jl.                     d32.;   go to endpass1;
          al    w0              a15+9 ;
          hs    w0                  2 ;   out4bytes(trouble,missing end,
          al    w3                  0 ;   0,0);
          jl.   w2               d7.  ;
          al    w0                a9  ;   outbyte(end statement);
          jl.   w3               d29. ;
          al    w2               a12  ;
          hs.   w2               f32. ;
          al    w1                a3  ;   out2bytes(end unit, end line);
          jl.   w2                d9. ;
          jl.                     d32.;   go to end pass 1;

  ; assignment of intermediates:

      i0 =c5 -c4 ,i1 =c10-c4 ,i2= c11-c4 ,i3 =c12-c4 ,i4 =c13-c4
      i5 =c14-c4 ,i6 =c23-c4 ,i7 =c2 -c4 ,
      i8 =c19-c18,i9 =c21-c18,i10=c22-c18,i11=c20-c18
  e.

  b.  b0, c18, g9, i20                ; procedure field descriptor(fdstate);

  ;   the procedure is called from procedure format,when a field descriptor
  ;   of type a,b,d,e,f,g,i,l,p is read, and the call is:
  ;       jl.   w3               d13.

  ;   the corresponding field is converted and one format-element is packed
  ;   in the global,waitbytes. counting of right parentheses eventually
  ;   terminating the field and thereby updating the format-element in
  ;   waitbytes is done in format after exit from field descriptor.

  ;   the conversion is directed by means of an action table that can be
  ;   devided into 3 independent parts,concerning  1) p-fields,
  ;   2) b-d-e-f-g- fields, 3) a-i-l fields.
  ;   the parameter fdstate decides which part is to be used.

  ;   register use
  ;              call:              exit
  ;     w0                      repfac after scale , 1 for true,0 for false
  ;     w1                      repeat factor if fdstate=1
  ;     w2      fdstate         error , 1 for true , 0 for false
  ;     w3  return address        undefined

  ;   globals used:
  ;     f15, f20, f25


  ;   local variables:
  w.  b0:        0                    ; return address

  ;   tables:
  h.  g0:   i2, i4, i7                ; fdinitstate;

  h.  g1:  0 , 5 , 5 , 5 , 1 , 1      ; classtable(1:24);
           5 , 5 , 5 , 2 , 5 , 5      ;
           5 , 5 , 5 , 5 , 5 , 5      ;
           5 , 5 , 3 , 5 , 5 , 4      ;


  ;   the local classes are:
  ;     class     containing
  ;        0        digits
  ;        1        d e f g
  ;        2        .
  ;        3        in text
  ;        4        nl cont
  ;        5        other characters



  ;   action table:
  ;     local calss
  ;         0     1     2     3     4     5     state
  h.  g2:  i9 ,  i12,  i14,  i8 ,  i13,  i14  ;   after p
      g3:  i10,  i11,  i14,  i8 ,  i13,  i14  ;   p digit

      g4:  i9 ,  i14,  i14,  i8 ,  i13,  i14  ;   after b d e f g
      g5:  i10,  i14,  i15,  i8 ,  i13,  i14  ;   field width
      g6:  i16,  i14,  i14,  i8 ,  i13,  i14  ;   after point
      g7:  i17,  i14,  i14,  i8 ,  i13,  i19  ;   significance;

      g8:  i9 ,  i14,  i14,  i8 ,  i13,  i14  ;   after i l a                      i14,  i8 ,  i13,  i18  ;   i l a width
      g9:  i10,  i14,  i20,  i8 ,  i13,  i18  ;   i l a width;

  ;   the i-names are intermediat action addresses. they are to be
  ;   replaced by c-names as:
  ;    i8   i9   i10  i11  i12  i13  i14  i15  i16  i17  i18  i19  i20
  ;    c1   c4   c5   c6   c7   c8   c9   c10  c11  c12  c13  c14  c18


  ;   entry point

  w.d13:  rs.   w3                b0. ; begin
          al    w1                 0  ;   w:=0
          bl.   w3    x2          g0. ;   state:=fdinitstate(fdstate);

      c0: hs.   w3                i0  ; set fdstate:

      c1: jl.   w3               d11. ; new char: w2:= next char;
          bl    w3                 4  ;   mainclass:= w2(0:11);
          bl.   w3    x3          g1. ;   local calss:=classtable(mainclass);

      c2: bl.   w3    x3              ; fdaction:
      c3: jl.         x3              ;   go to action(local class,state);

  ;       jl.                     c1. ; in text: go to new char

      c4: bl.   w3             c2.+1  ; first digit:
          al    w3    x3       g3-g2  ;   state:=state+1;
          hs.   w3             c2.+1  ;

      c5: wm.   w1                f20.; digits in field width:
          ba    w1                 5  ;   w:=w*10+internal value;
          sl    w1                256 ;   if w>= 256 then
          jl.                      c9.;   go to error;
          jl.                      c1.;   go to new char;

      c6: al    w0                 1  ; defg after p digit:
          jl.                    c16. ;   repfac after scale:=true;
                                      ;   go to fd ok out;

      c7: al    w0                  0 ; defg after p:
          jl.                    c16. ;   repfac after scale:=false;
                                      ;   go to fd ok out;

      c8: ba.   w2               f25. ; nlcont:
          hs.   w2               f25. ;   nlbyte:= nlbyte+1;
          jl.                     c1. ;   go to new char;

      c9: al    w2                 1  ; error: error:=true;
          jl.                    c17. ;   go to fdout;

     c10: sn    w1                 0  ; point after field width:
          jl.                    c9.  ;   if w=0 then go to error;
          al    w0                 0  ;   d:=0;
          al    w3                i5  ;   state:= after point;
          jl.                     c0. ;   go to set fdstate;

     c11: al    w3                i6  ; first digit in significance:
          hs.   w3             c2.+1  ;   state:=significance;
     c12: wm.   w0               f20. ; digits in significance:
          ba    w0                 5  ;   d:=d*10+internal value;
          sh    w0    x1           0  ;   if d<= w then
          jl.                     c1. ;   go to new char;
          jl.                     c9. ;   go to error;

     c13: sn    w1                 0  ; terminate ila field:
          jl.                     c9. ;   if w=0 then go to error;
          al    w0                 0  ;   d:=0;

     c14: bz.   w2               f15. ; terminate bdefg field:
          se    w2                i1  ;   if descriptortype <> b then
          jl.                    c15. ;   go to pack waitbytes;
          sh    w0                 4  ;   if  d>4 or
          sh    w0                 0  ;   d=0 then
          jl.                     c9. ;   go to error;

     c15: ls    w1                 4  ; pack waitbytes:
          rs.   w1               f15. ;   waitbytes:=(descriptortype shift 8
          wa    w2                 0  ;   +d)shift 12+(w shift 4);
          hs.   w2               f15. ;

     c16: al    w2                 0  ; fd ok out: error:=false;

     c17: jl.                   (b0.) ; fd out: end field descriptor;

     c18: bz.   w3               f15. ; point after ila:
          se    w3               6<8  ;   if descriptortype<> i
          jl.                     c9. ;   goto error  else
          jl.                    c10. ;   goto point after field width;


  ; assignment of intermediates:

      i0 = c2-c0+1, i1= 1<8
      i2 =g2 -c2, i3 =g3 -c2, i4 =g4 -c2, i5 =g6 -c2, i6 =g7 -c2
      i7 =g8 -c2, i8 =c1 -c3, i9 =c4 -c3, i10=c5 -c3, i11=c6 -c3
      i12=c7 -c3, i13=c8 -c3, i14=c9 -c3, i15=c10-c3, i16=c11-c3
      i17=c12-c3, i18=c13-c3, i19=c14-c3, i20=c18-c3
  e.

  b.  b2, c7                          ; procedure longtext;
   ;   the procedure is called from procedure format, when
  ;   <integer>h or an apostrophe is read, and the call is:
  ;       jl.   w3               d14.
 
  ;   before the call,format has output a text-start-element and
  ;   longtext packs the characters belonging to the defined text
  ;   and outputs them with 3 characters per format-element. the
  ;   elements are separated by formatc-bytes as usual for format-
  ;   elements.
  ;   the text-end-element with the value of repeat end count is
  ;   output from format after return

  ;   register use:
  ;             call                  exit
  ;       w0                        undefined
  ;       w1                      longtext, 0 for true, 1 for false
  ;       w2  <entry char>          undefined
  ;       w3  return address        undefined

  ;   possible outputbytes: (during call of out3bytes).
  ;       <formatc><2 bytes with a text-element>

  ;   globals used:
  ;     f14,f15,f30

  ;   local variables:

  w.  b0:        0                    ;   return address
      b1:        0                    ;   explicit end
      b2:        0                    ;   count

  ;   entry point

  w.d14:  rs.   w3                b0. ; begin
          al    w1                -1  ;
          rs.   w1                b1. ;   explicit end:= -1;
          al    w0                 1  ;   set endmark in word;
          al    w1                 0  ;   count:=0;

          bl    w3                 4  ;   w3:= mainclass;
          se    w3               j13  ;   if mainclass<> apostrophe class 
          jl.                     c0. ;   then go to new char;
          rs.   w3                b1. ;   explicit end:= apostrophe class;
          rs.   w2               f14. ;   repfactor:= infinite;

      c0: jl.   w3               d11. ; new char: w2:= next char;
          bl    w3                 4  ;
          se    w3               j23  ;   if mainclass<> nlcontclass then
          jl.                     c1. ;   go to maybe nlstat;
          ba.   w2               f25. ;
          hs.   w2               f25. ;   nlbyte:=nlbyte+1;
          jl.                     c0. ;   go to new char;

      c1: sn    w3               j22  ; maybe nlstat: if mainclass= nlstat
          jl.                     c7. ;   then go to error;
          sn.   w3               (b1.);   if mainclass=explecit end then
          jl.                     c4. ;   go to text terminate;

      c2: ld    w0                 8  ; pack:
          ba.   w0               f30. ;   word:=word shift 8 +extchar;
          so    w3                 1  ;   if word<2**16 then
          jl.                     c3. ;   go to count char;
          rx    w0                 2  ;   count:=w1;  w1:=word;
          rs.   w0                b2. ;   out3bytes(w1(0:11),w1(12:23),
          jl.   w2                d35.;   last of out4bytes);
          al    w0                 1  ;   set endmark in word;
          rl.   w1                b2. ;   w1:= count;

      c3: al    w1    x1           1  ; count char:
          rl.   w3               f14. ;   count:=count+1;
          sh    w1    x3          -1  ;   if count<repfactor then
          jl.                     c0. ;   go to new char;
          rl    w1                 6  ;   count:= repfactor;

      c4: sn    w1                 0  ; text terminate: if count=0 then
          jl.                     c7. ;   go to error;
          sn    w0                 1  ;   if word is empty then
          jl.                     c6. ;   go to ok longtext;

      c5: ld    w0                 8  ; move left: word:=word shift 8;
          so    w3                 1  ;   if word(0:7)=0 then
          jl.                     c5. ;   go to move left;
          rs    w0                 2  ;   w1:= word;
          jl.   w2                d35.;   out3bytes(w1(0:11),w1(12:23),
                                      ;   last of out4bytes);

      c6: al    w1                 0  ; ok longtext:
          jl.                    (b0.);   longtext:=true; go to out;

      c7: al    w1                 1  ; error:  longtext:=false;
          jl.                    (b0.); out:
                                      ; end longtext;
  e.
  b.                                  ; procedure set pointer;
  ;   set pointer adjusts the global charpointer so that the last read
  ;   char is read again at the next call of next char. the call is:
  ;       jl.   w3               d15.

  ;   register use:
  ;             call            exit
  ;     w2                    undefined
  ;     w3  return address    unchanged

  ;   globals:   f7,f22

  ;   entry point



  w.d15:  rl.   w2                f7. ; begin
          al    w2    x2          -2  ;   charpointer :=
          rs.   w2                f7. ;   charpointer - 1;
          rl.   w2               f22. ;
          rs.   w2               d26. ;   emptybuffer :=false;comment label
                                      ;     in next char;
          jl          x3              ; end set pointer;
  e.


  b.  b0,c2                           ; procedure skip to statement(entry);
  ;   the procedure is called when an error occurs and the actual statement
  ;   has to be skipped, and the call is:
  ;       jl.   w3               d16.

  ;   the characters up to a character which means end statement  are skipped
  ;   and the first character to be checked is in w2 at entry time.

  ;   the global nlbyte is adjusted in the usual way.

  ;   register use:
  ;             call          exit
  ;     w2    entry char    exit char
  ;     w3  return address  undefined

  ;   globals used: f25.

  ;   local variables:
 

  w.  b0:         0                   ;   return address

  w.d16:  rs.   w3                b0. ; begin
          jl.                     c1. ;   go to class;

      c0: jl.   w3               d11. ; new char: w2:= next char;
       c1:bl    w3                 4  ; class: mainclass:= w2(0:11);
          se    w3               j18  ;   if mainclass = statterm  or
          sn    w3               j22  ;      mainclass = nlstat then
          jl.                     c2. ;   go to out;
          se    w3               j23  ;   if mainclass<> nlcont then
          jl.                     c0. ;   go to new char;

          ba.   w2               f25. ;   nlbyte :=nlbyte+1;
          hs.   w2               f25. ; 
          jl.                     c0. ;   go to new char;
      c2: jl.                    (b0.); out:
                                      ; end skip to statement
  e.

  b.  b7, c32, g6, i19              ; procedure constant;

  ;   procedure constant is called from main sequence when<.> or <digit>
  ;   is read, and the call is
  ;       jl.   w3               d17.
  ;   as a result, integer-, long-, real- and double constants are converted
  ;   ,the last tw0 types in a preliminary manner where the decimalpoint is
  ;   moved to the right of the fixed point part during adjustment of the
  ;   exponent.

  ;   during conversion the globals numb1,numb2,numb3 are used for conver-
  ;   ting the fix-point part and exponent for the eventually exponent.

  ;   when <.> or the exponent letters e and d are read, the syntax of the
  ;   following char-sequence is checked by a call of number syntax, and
  ;   as a reaction, conversion is continued or stopped,

  ;   the initial digit can be start of a bitpattern or a hollerith-constant
  ;   in which case one of the procedures bitpattern and text is called.

  ;   at last the global nlbyte are updated and bytenewline is called
  ;   to output <nlbyte> end-line bytes

  ; register use:
  ;           call                exit
  ;   w0                        undefined
  ;   w1                       <constant> ,1 for true,0 for false
  ;   w2  <entry char>          undefined
  ;   w3  return address        undefined

  ; possible outputbytes: (during call of outputc and out4bytes)
  ;   <integer> <2>
  ;   <long   > <4>
  ;   <real   > <6>
  ;   <double > <8>
  ;   <trouble> <fix too long><2>
  ;   <trouble> <exp too big ><2>

  ; globals used:
  ;   f16,f17,f18,f19,f25,f26,f29

  ; local variables:
  w.  b0:          0                  ;   return address
      b1:          0                  ;   digcount
       0,b2:       0                  ;   rest
  w.  b3:          0                  ;   sign
  h.  b4:          0                  ;   fractiondigits
      b5:          0                  ;   constanttype:= 0 for integer, long
                                      ;               := 1 for double
                                      ;               := 2 for real
      b7:          0                  ;   auxtype
  w.  0,b6:        0                  ;   constantpart
  ; tables
  h.  g0:  0 , 7 , 6 , 6 , 5 , 7      ; classtable(1:24)
           7 , 7 , 7 , 1 , 7 , 4      ;
           4 , 7 , 7 , 7 , 7 , 7      ;
           7 , 7 , 2 , 7 , 7 , 3      ;

  ;   the local classes are:
  ;     class     containing
  ;       0        digits
  ;       1        .
  ;       2        in text
  ;       3        nl contclass   :continuation lines
  ;       4        + -
  ;       5        e d
  ;       6        h b
  ;       7        other characters

  ; action table:
  ;   local class
  ;         0     1     2     3     4     5     6     7     state
  h.  g1:  i8 ,  i10                                      ;   initial
      g2:  i9 ,  i10,  i19 ,  i15,  i17,  i11,  i16,  i17  ;   integer
      g3:  i12,  i17,  i7 ,  i15,  i17,  i11,  i17,  i17  ;   fraction
      g4:  i13,    0,  i7 ,  i15,  i14,    0,    0,    0  ;   eksponent
      g5:  i13,  i17,  i7 ,  i15,  i17,  i17,  i17,  i17  ;   dig in exponent
      g6:  i9,  i10,  i7 ,  i15,  i17,  i17,  i17,  i17  ; intext

  ;  the i-names are intermediate action adresses. they are to be
  ; replaced by c-names in the following manner:
  ;     i7    i8    i9    i10    i11   i12   i13   i14   i15   i16   i17
  ;     c2    c6    c7    c12    c13   c15   c16   c17   c19   c20   c22

  ; entry point

  w.d17:  rs.   w3                b0. ; begin
          al    w0                 0  ;
          rs.   w0                b1. ;   digcount:=
          rs.   w0                b4. ;   constanttype:=fractiondigit:=
          hs.   w0               f26. ;   nlcontcount:=
          rs.   w0                b3. ;   sign:=0;
          rs.   w0               f34. ;   some constant:= false;

          al    w1                 0  ;
          ds.   w1               f17. ;   numb1:= numb2:=
          ds.   w1               f19. ;   numb3:= exponent:=
          ds.   w1                b2. ;   rest:=0;
          al    w3                i0  ;   state:= initial;
      c0: hs.   w3                i5  ;   set state;
          jl.                     c3. ;   go to cclass;

      c1: hs.   w3                i6  ; set cstate:

      c2: jl.   w3               d11. ; new char: w2:=next char;
      c3: bl    w3                 4  ; cclass: mainclass:=w2(0:11);
          bl.   w3    x3          g0. ;   local class:= clastable(mainclass);

      c4: bl.   w3    x3              ; c action:
          al    w1                 1  ;
      c5: jl.         x3              ;   go to action(local class,state);

      c6: rs.   w1               f34. ; first digit:
          al    w3                i1  ;   some constant:=true;
          hs.   w3             c4.+1  ;   state:=integer; set state;

      c7: bl    w3                 5  ; digits in integer:
          se    w3                 0  ;   if internal value<> 0 then
          jl.                    c8.  ;   go to signif digit;
          sn.   w3              (b1.) ;   if digcount=0 then
          jl.                    c2.  ;   go to new char;

      c8: wa.   w1               b1.  ; signif digit:
          rs.   w1               b1.  ;   digcount:=digcount+1;
          sh    w1               19   ;   if digcount<=19 then
          jl.                   c10.  ;   go to pack;

      c9: al    w0              a15+4 ; fix too long:
          rl.   w1                b1. ;   errortype:=fix too long;
                                      ;  aux inf:= digcount;
          jl.                    c29. ;  go to error;

     c10: rs.   w3                b2. ; pack: rest:= internal value;comment
          al    w3                 6  ;   digitvalue; limit:=6;
          al    w2                 0  ;   i:=0;

                                      ; comment numb1, numb2,numb3 is thought
                                      ;   of as array numb3(-2:0);
     c11: rl.   w1    x2         f18. ; bigger:
          rs.   w1                b6. ;   constantpart:=numb3(i);
          al    w0                 0  ;
          ld    w1                 3  ;
          aa.   w1                b6. ;
          aa.   w1                b6. ;   w0w1:=constantpart*10
          aa.   w1               b2.  ;   + rest;
          rs.   w1    x2         f18. ;   numb3(i):=w0w1(24:47);
          rs.   w0               b2.  ;   rest    :=w0w1(0:23);
          sl.   w3              (b1.) ;   if digcount<=limit then
          jl.                    c2.  ;   go to new char;
          al    w3    x3          8   ;   limit:=limit+8;
          al    w2    x2         -2   ;   i:=i-1;
          jl.                   c11.  ;   go to bigger;

     c12: al    w3               i2   ; point: state:= fraction;
          al    w0                0   ;   nsstate:=1;
          al    w2                2   ;   auxtype:=2; comment real;
          jl.                   c14.  ;   go to jump to syntax;
     
     c13: al    w2    x2       -a0-2  ; exponent letters:
          al    w3                i3  ;   auxtype:=if e then 2 else 1;
          al    w0                 1  ;   state:=eksponent; nsstate:=2;

     c14: hs.   w3              c4.+1 ; jump to syntax:
          hs.   w2                b7. ;   set state;
          jl.   w3               d18. ;
          rl    w3                 2  ;
          al    w1                 1  ;
          se    w3                 1  ;   if -, number syntax(nsstate) then
          jl.                    c22. ;   go to constant termination;
          rs.   w1               f34. ;   some constant :=true;
          ba.   w2               f25. ;   nlbyte:= nlbyte +nlcontcount;
          hs.   w2               f25. ;
          bl.   w2                b7. ;
          hs.   w2                b5. ;   constanttype:=auxtype;
          al    w2                 0  ;
          hs.   w2               f26. ;   nlcontcount := 0;
          jl.                     c2. ;   go to new char;

     c15: bl.   w0                b4. ; fraction digit:
          ba.   w0                 1  ;   fractiondigits:=
          hs.   w0                b4. ;   fractiondigits+1;
          jl.                     c7. ;   go to digits in integer ;

     c16: rl.   w0               f19. ; digits in exponent:

          wm.   w0               f20. ;   exponent:=exponent*10
          ba    w0                 5  ;   + internal value;
          rs.   w0               f19. ;
          sh    w0               1000 ;   if exponent<= 1000 then
          jl.                    c18. ;   go to set state to 5:

     c31:                             ; exp error:
          al    w0              a15+5 ;   errortype:= exp too big;
          rl.   w1               f19. ;   aux inf:= exponent;
          jl.                    c29. ;   go to error;

     c17: al    w2    x2       -a5-2  ; exponent sign:
          hs.   w2             b3.+1  ;   sign:=if plus then 0 else 1;

     c18: al    w3                i4  ; set state to 5:
          jl.                     c1. ;   state:=dig in exponent;
                                      ;   go to set cstate;

     c19: ba.   w2               f25. ; nl continuation:
          hs.   w2               f25. ;   nlbyte:=nlbyte+1;
          jl.                     c2. ;   go to new char;

     c20: bl    w0                 5  ; hollerith or bitpattern:
          se    w0              a0+7  ;   if internal value<> h value then
          jl.                    c21. ;   go to bitp call;
          jl.   w3               d20. ;   text;
          jl.   w3               d11. ;   next char;
          jl.                    c30. ;   go to ctout;
     c21: jl.   w3               d19. ; bitpcall:   bitpattern;
          jl.                    c30. ;   go to ctout;

     c22: se.   w1              (f34.); constant termination:
          jl.                    c30. ;   if -, some constant then goto ctout;
          bl.   w3               b5.  ;
          se    w3                0   ;   if constanttype<> 0 then
          jl.                    c25. ;   go to real double;
          sh.   w3              (f17.);   if numb2<0 or
          se.   w3              (f16.);   numb1 <>0 then
          jl.                     c9. ;   go to fix too long;

     c23: al    w0              a3+3  ; integer: leading byte:= <integer>;
          al.   w1             f18.-1 ;   start address:=numb3;
          al.   w2             f18.+1 ;   last address:=numb3;
          sh.   w3              (f18.);   if numb3<0 or
          se.   w3              (f17.);   numb2<> 0 then
          jl.                    c24. ;   go to long;
          jl.                    c28. ;   go to sendbyte;

     c24: al    w0              a3+4  ; long: leading byte:= <long>;
          al.   w1             f17.-1 ;   start address:= numb2;
          jl.                    c28. ;   go to sendbyte;

     c25: rl.   w0               f19. ; realdouble:
          sn.   w1              (b3.) ;   if sign=minus then
          ac    w0                (0) ;   exponent:= -exponent;
          bs.   w0                b4. ;   exponent:= exponent-fractiondigit;
          sh    w0             -1000  ;   if exponent<=-1000 then
          jl.                    c31. ;   goto exp error;
          rs.   w0               f19. ;
          dl.   w1               f17. ;   the value picked up
          ld    w1                 2  ;   must be:
          ls    w1                -2  ;   numb1*2**46+numb2*2**23
          rs.   w0               f16. ;   +numb3;
          rl.   w2               f18. ;
          ld    w2                 1  ;
          ls    w2                -1  ;
          ds.   w2               f18.  ;
          al.   w2              f19.+1;   last address:= exponent;
          rl.   w0                b1. ;
          sh    w0                11  ;   if digcount >11 or
          sn    w3                 1  ;   constanttype=1 then
          jl.                    c27. ;   go to double;

     c26: al    w0              a4+0  ; real: leading byte:= <real>;
          al.   w1              f17.-1;   start address:= numb2;
          jl.                   c28.  ;   go to sendbyte;

     c27: al    w0              a4+1  ; double: leading byte:= <double>;
          al.   w1              f16.-1;   start address:= numb1;

     c28: jl.   w3               d6.  ;  sendbyte: outputc(leading byte,
          jl.                    c30. ;   start address,lastaddress);
     c32: al    w3                i18  ; intext in integer
          rl.   w2                f40. ; if do-stm.
          sn    w2                  1  ;  then
          hs.   w3              c4.+1  ;  change state
          jl.                      c2. ;
                                      ;   go to ctout;
     c29: hs    w0                 2  ;  error:
          al    w3                 0  ;   out4bytes( trouble, errortype,
          jl.   w2               d7.  ;   auxinf,0);
          rl.   w2               (f7.);   w2:=buffer(charpointer);
          jl.   w3               d16. ;   skip to statement(w2);

     c30: jl.   w2                d5. ; ctout:   bytnewline;
          bl.   w3               f26. ;
          hs.   w3               f25. ;   nlbyte:=nlcontcount;
          jl.   w3               d15. ;   set pointer;
          rl.   w1               f34. ;   constant:= some constant;
          jl.                   (b0.) ; end constant;


  ; assignment of intermediates:
      i0= g1-c4  ,  i1 =g2 -c4 ,  i2 =g3 -c4  , i3 =g4 -c4 , i4 =g5 -c4
      i18=g6-c4
      i5=c4-c0+1 ,  i6=c4-c1+1
      i7=c2-c5   ,  i8=c6-c5  ,   i9 =c7 -c5  , i10=c12-c5 ,  i11=c13-c5
      i12=c15-c5 ,  i13=c16-c5,   i14=c17-c5  , i15=c19-c5 ,  i16=c20-c5
      i17=c22-c5 , i19=c32-c5

  e.

  b.  b3, c11,g3 ,i9                  ; procedure number syntax(nsstate);

  ;   the procedure is called from constant when<.> or one of the exponent-
  ;   letters e and d is read, and the call is
  ;       jl.   w3               d18.

  ;   the purpose is to check the following character-sequence to see if it
  ;   is part of a constant, and the result is put in register w1.

  ;   the chars are read from next char in search mode and to be sure that
  ;   no overflow in the char-buffer occurs, the bufpointer is stepped back
  ;   one step when an intext-char, that logically is to be skipped, is read,
  ;   the first intext char still has to be placed in the char-buffer.

  ;   the parameter nsstate chooses the initial state to be 1 or 2;

  ;   register use:
  ;             call              exit
  ;     w0    nsstate           undefined
  ;     w1                     <number syntax> , 1 for true, 0 for false
  ;     w2                      nlcontcount
  ;     w3  return address      undefined

  ;   globals used:
  ;  f7,f8, f21,f22, f24, f26, f34

  ; local variables:

  w.  b0:          0                  ;   return address
  h.  b2:     i0   ,  i1              ;   initstate
  w.  b3:          0                  ;   intextskip

  ; tables:

  h.  g0:  0 , 4 , 4 , 4 , 1 , 4      ;   classtable(1:24)
           4 , 4 , 4 , 5 , 5 , 3      ;
           3 , 5 , 5 , 5 , 5 , 5      ;
           5 , 5 , 2 , 5 , 5 , 5      ;

  ; the local classes are:
  ;   class     containing:
  ;     0         digits
  ;     1         e d
  ;     2         in text
  ;     3         + -
  ;     4         letters except e and d
  ;     5         other characters
  ; action table
  ;   local class
  ;         0     1     2     3     4     5     state
  h.  g1:  i4 ,  i5 ,  i8 ,  i9 ,  i7 ,  i9   ;   after point
      g2:  i4 ,  i7 ,  i8 ,  i6 ,  i7 ,  i7   ;   after e or d
      g3:  i4 ,  i7 ,  i8 ,  i7 ,  i7 ,  i7   ;   after exponent sign

  ; the i-names are intermediate action adresses.  they are to be replaced
  ; by  c-names in the following manner:
  ;      i4    i5    i6    i7    i8    i9
  ;      c5    c6    c7    c11   c8    c10

  ; entry point

  w.d18:  rs.   w3                b0. ; begin
        jl.   w3               d36. ;  set search mode
          al    w1                 0  ;   number syntax:= false;
      c0: rs.   w1                b3. ;   intextskip:=false;

          am                      (0) ;
          bl.   w0                b2. ;   state:=initial(nsstate);

      c1: hs.   w0                i3  ; set nsstate: set state;

      c2: jl.   w3               d11. ; new char: w2:= next char;
          bl    w3                 4  ;   mainclass:=w2(0:11);
          bl.   w3    x3          g0. ;   local class:=classtable(mainclass);

      c3: bl.   w3    x3              ; caction:
      c4: jl.         x3              ;   go to action(local class,state);

      c5: al    w1                 1  ; digit: number syntax:= true;
          jl.                     c11.;   go to nsout;

      c6: rl.   w2               f34. ; e or d after point:
          se    w2                  1 ;   if -, some constant then
          jl.                    c10. ;   go to terminator after point;
          al    w0                i1  ;   state:=after e or d;
          jl.                     c1. ;   go to set nsstate;

      c7: al    w0                i2  ; exponent sign: state:=
          jl.                     c1. ;   after exponent sign;
                                      ;   go to set nsstate;

      c8: sn.   w1               (b3.); in text: if -, intextskip then
          jl.                     c9. ;   go to set skip true;
          rl.   w3                f7. ;
          al    w3    x3          -2  ;   charpointer:=
          rs.   w3                f7. ;   bufpointer:=
          rs.   w3                f8. ;   charpointer -1;

      c9: rs.   w2                b3. ; set skip true: intextskip:= true;
          jl.                     c2. ;   go to new char;

     c10: rl.   w1              f34.  ; terminator after point:
                                      ;   number syntax:=some constant;

     c11: al.   w3               d25. ; nsout:
          rs.   w3                f7. ;   charpointer:=oldcharpointer;
          rl.   w3               f24. ;
          rs.   w3               d27. ;   mode in next char:=normal;
          bl.   w2               f26. ;   w2:= nlcontcount
          jl.                   (b0.) ; end number syntax;

  ; assignment of intermediates:
      i0= g1-c3  , i1 = g2-c3  , i2 = g3-c3 , i3 =c3-c1+1
      i4= c5-c4  , i5 = c6-c4  , i6 = c7-c4 , i7 =c11-c4
      i8= c8-c4  , i9 = c10-c4
  e.
 

  b.  b1, c12, g1, i4                ; procedure bitpattern;

  ;   the procedure is called from constant, when <integer>b is read
  ;   and the call is:
  ;       jl.   w3               d19.

  ;   the global numb3 contains <integer> which is the defining number for
  ;   the b-constant.
  ;   bitpattern packs the b-constant consisting of the bitpatterndigits
  ;   corresponding to the defining number in one or two words right justi-
  ;   fied with zero-filling, using the globals numb1 and numb2.

  ;   method: during conversion, digits and letters are considered as possible
  ;           bitpatterndigits with letters starting at value 10, and before
  ;           packing, it is checked that the value corresponds to the
  ;           defining number.
  ;   key variables : valuelimit ,      free places,numb1,numb2,numb3.

  ;   if any error situation arise, errorbytes will be output and the rest of
  ;   the actual statement will be skipped during call of skip to statement;

  ;   register use:
  ;             call              exit
  ;     w0                      undefined
  ;     w1                      undefined
  ;     w2                      undefined
  ;     w3  return address      undefined

  ;   possible outputbytes: (during call of outputc and out4bytes);
  ;       <integer> <2 bytes with b-constant>
  ;       <long>    <4 bytes with b-constant>
  ;       <trouble> <bitperror><local type> <aux inf>
  ;                       with  local type  aux inf
  ;                                  1      <defining number>
  ;                                  2      <owerflow digit>
  ;                                  3      <error digit>

  ;   local variables:
  w.  b0:          0                  ;   return address:
      b1:          0                  ;   valuelimit
  ;                                       no of free places   (kept in w1);

  ;   tables:

  ;   action table
  ;     mainclass:
  ;         0   1   2   3   4   5   6   7   8   9  10  11  12  13  14
  h.  g0:  i0, i1, i1, i1, i1, i1, i1, i1, i1, i4, i4, i4, i4, i4, i4

  ;class:   15  16  17  18  19  20  21  22  23
            i4, i4, i4, i4, i4, i3, i4, i4, i2

  ;   the i-names are intermediate action-addresses which are to be replaced
  ;   with c-names as:
  ;   i0:c2    i1:c3   i2:c4   i3:c0    i4:c5

  h.  g1:   48 ,  24 ,  16 ,  12      ;   init free(1:4)

  ; entry point:

  w.d19:  rs.   w3                b0. ; begin
          al    w1                 1  ;   local type :=1;
          rl.   w3               f18. ;
          se    w3                 0  ;   if numb3 =0   or
          sl    w3                 5  ;   numb3 >=5 then
          jl.                    c11. ;   go to error type 1;
          ls    w1               (6)  ;   valuelimit:= 1shift numb3;
          rs.   w1                b1. ;
          bl.   w1    x3        g1.-1 ;   free places:= init free (numb3);

      c0: jl.   w3               d11. ; new char: w2:= next char;
          bl    w3                 4  ;   mainclass:= w2(0:11);
          bl.   w3    x3          g0. ;   bpaction :=actiontable(mainclass);
          bl    w2                 5  ;   internal value:=w2(12:23);
      c1: jl.         x3              ;   go to action(bpaction);

      c2: sn    w1                 0  ; digit:if free places =0  then
          jl.                     c8. ;   go to error type2;
          sl.   w2               (b1.);   if internal value >= valuelimit
          jl.                     c9. ;   then go to error type3;
          al    w1    x1          -1  ;   free places:= free places-1;

          dl.   w0               f17. ;   numb1 numb2:=
          ld.   w0              (f18.);   numb1 numb2 shift numb3
          lo    w0                 4  ;   add internal value;
          ds.   w0               f17. ;
          jl.                     c0. ;   go to new char;

      c3: al    w2    x2       -a0+10 ; letter: internal value:=
          jl.                     c2. ;   internal value-letterbase +10;
                                      ;   go to digit;

      c4: ba.   w2               f25. ; nl continue:  nlbyte:=
          hs.   w2               f25. ;   nlbyte+ internal value;
          jl.                     c0. ;   go to new char;

  ;                                     in text:  go to new char;

      c5: wm.   w1               f18. ; other : free bits:=free places*numb3;
          sn    w1                48  ;   if free bits=48 then
          jl.                     c8. ;   go to error type2;
          al.   w2             f17.+1 ;   last address:=numb2;
          sh    w1                23  ;   if free bits<=23 then
          jl.                     c6. ;   go to long pattern;

          al    w0              a3+3  ; short: leading byte:= <integer>;
          al.   w1             f17.-1 ;   start address:= numb2;
          jl.                     c7. ;   go to send byte;


      c6: al    w0              a3+4  ; long pattern: leading byte:= <long>;
          al.   w1             f16.-1 ;   start address:=numb1;

      c7: jl.   w3                d6. ; send byte: outputc(leading byte,
          jl.                    c12. ;   start address,last address);
                                      ;   go to out;

      c8: al    w1                 2  ; error type2: local type:=2;
          jl.                    c10. ;   go to error char;

      c9: al    w1                 3  ; error type3: local type:=3;

     c10: bl.   w3               f30. ; error char: aux inf:= extchar;

     c11: al    w0              a15+3 ; error type1: error:= bitperror;
          hs    w0                  2 ;   out4bytes(trouble,error,local type,
          jl.   w2                 d7.;   aux inf);
          rl.   w2               (f7.);   w2:=buffer(charpointer);
          jl.   w3                d16.;   skip to statement(w2);

     c12: jl.                    (b0.); out:
                                      ; end bitpattern;

  ; assignment of intermediates:
      i0= c2-c1 , i1= c3-c1 , i2= c4-c1 , i3= c0-c1 , i4= c5-c1

  e.

  b.  b5 ,c12                         ; procedure text;

  ;   procedure text is called in two cases,
  ;       a)from main sequence,when apostrophe is read ,  and
  ;       b)from constant ,when <integer>h is read,in which case the
  ;         global numb3 holds <integer>.
  ;   the call is:  jl.   w3.      d20.
  ;   in both cases a short text consisting of
  ;       a) the characters up to the next apostrophe
  ;   or  b) the next <integer> characters
  ;   is packed left justified with spacefilling in the double word
  ;   consisting of the globals numb1 and numb2. the character values
  ;   are get from the global extchar.

  ;   max. 6 characters can be packed and more characters will cause trouble-
  ;   bytes to be output,and the rest of the actual statement will be skipped.

  ;   correct output is of type  <long>.

  ;   register use:
  ;             call                exit
  ;     w0                        undefined
  ;     w1                        undefined
  ;     w2    <entry char>        undefined
  ;     w3  return address        undefined

  ;   possible outputbytes:  (during call of outputc and out4bytes)
  ;     <long><4bytes with short text>
  ;     <trouble><error in short text><erroneus number of chars ><0>

  ;   globals used:
  ;     f16, f17, f18, f19, f25, f30

  ;   local variables :
  w.  b0:          0                  ; return address
      b1:             0               ;   stopcount
      b2:             6               ;   six
      b3:             0               ;   count
      b4:             255<16          ;   mask

  w. d20: rs. w3      b0.             ; begin
          al  w1      -1              ;   explecitterminate:=-1;
          rs. w1      f19.            ;
          al  w1      32              ;   fill:=sp;
          hs. w1      b5.             ;
          ld  w1      -65             ;
          rs. w1      b1.             ;   stopcount:=
          ds. w1      f17.            ;   numb1:=numb2:=0;
          bl  w3      4               ;   if mainclass of entry char<>
          se  w3      j13             ;   apostropheclass then
          jl.         c0.             ;   goto next text const;
                                      ;   comment string quote;
          hs. w1      b5.             ;   fill:=null;
          al  w2      1000            ;   numb3:=infinite;
          ds. w3      f19.            ;   explecitterm:=apostrophe;

      c0: rl. w3      b1.             ; next text const:
          sl. w3      (f18.)          ;   if stopcount>=numb3 then
          jl.         c8.             ;   goto end text field;
          al  w3  x3  +6              ;   stopcount:=if stopcount+6
          sl. w3      (f18.)          ;   < numb3 then stopcount+6
          rl. w3      f18.            ;   else numb3;
          rs. w3      b1.             ;

      c1: jl. w3      d11.            ; new char: w2:=next char;
          bl  w3      4               ;   mainclass:=w2(0:11);
          se  w3      j23             ;   if mainclass<>nlcont then
          jl.         c2.             ;   goto maybe nlstat;
          ba. w2      f25.            ;
          hs. w2      f25.            ;   nlbyte:=nlbyte+1;
          jl.         c1.             ;   goto new char;

      c2: sn  w3      j22             ; maybe nlstat:if maincl=nlstat
          jl.         c11.            ;   then goto trouble out;
          sn. w3      (f19.)          ;   if mainclass=explecitt then
          jl.         c7.             ;   goto end string quote;

      c3: dl. w0      f17.            ; pack:
          ld  w0      8               ;   numb1numb2:=
          ba. w0      f30.            ;   numb1numb2*2**8+extchar;
          ds. w0      f17.            ;
          al  w1  x1  +1              ;   count:=count+1;
          se. w1      (b1.)           ;   if count<>stopcount then
          jl.         c1.             ;   goto new char;

      c4: al  w0      a5+4            ; out text const:
          sl  w1      7               ;   if count>=7 then
          jl. w3      d29.            ;   outbyte(comma);
          al  w0      a3+4            ;   leading byte:=long;
          dl. w3      f17.            ;   w2w3:=numb1numb2;

      c5: sz. w2      (b4.)           ;   for w2w3:=w2w3 while w2w3(0:7)
          jl.         c6.             ;   =0 do w2w3:=w2w3 shift 8
          ld  w3      8               ;   +fill;
  b5=k+1
          al  w3  x3  0               ;
          jl.         c5.             ;

      c6: rs. w1      b3.             ;   save count;
          ds. w3      f17.            ;   start address:=numb1;
          al. w1      f16.-1          ;   last address:=numb2;
          al. w2      f17.+1          ;   outputc(leading byte,start
          jl. w3      d6.             ;   address,last address);
          ld  w3      -65             ;   numb1=numb2=0;
          ds. w3      f17.            ;
          rl. w1      b3.             ;
          jl.         c0.             ;   goto next text const;

      c7: al  w0      0               ; end string quote:
          rs. w1      f18.            ;   numb3:=count;
          wd. w1      b2.             ;
          rl. w1      f18.            ;   if count mod 6<>0 then
          se  w0      0               ;
          jl.         c4.             ;   goto out text const;

      c8: se  w1      0               ; end text field:if count<>0
          jl.         c12.            ;   then goto return;

      c9: jl. w3      d11.            ; get terminator:w2:=next char;

     c10: jl. w3      d16.            ; skip:skip to statement(w2);

     c11: al  w3      0               ; trouble out:
          al  w0      a15+2           ;   out4bytes(trouble,
          hs  w0      2               ;   error in text,count,0);
          jl. w2      d7.             ;
          jl. w3      d15.            ;   set pointer;

     c12: jl.         (b0.)           ; return: end text;

e.
  b.  b6, c9, g53, i73                 ; procedure compound;

  ;   procedure compound is called from main sequence when <*> or <letter>
  ;   is read and when<.> is read and a call of constant has  told that it
  ;   was not start of a constant.  compound is called as:
  ;       jl.   w3              d21.
  ;
  ;   at return time w1 tells if a compound was found or not.

  ;     the compounds are gathered in table reschain(1:216) in a tree-
  ;   structure and table entrypoint(1:29) holds pointers to the main
  ;   branches corresponding to the possible first letters. all compounds
  ;   starting with<.> have the same entry-value.

  ;     the possible endsymbols are arranged in table endchain(-7:-1) in a
  ;   way like in reschain

  ;     each point in the tree in reschain is represented by 2 bytes:
  ;   the last byte keeps the internal value of the character required for
  ;   going on in the tree with one step or, at the end of a compound, minus
  ;   the relevant byte-value.
  ;   the first byte contains.
  ;       a) a pointer to next possibilyty              : value > 0
  ;       b) a pointer to table endchain with value<0 in
  ;          which case an endsymbol is expected and last byte
  ;          contains the negative bytevalue
  ;   each character is read by calling next char in search mode, which
  ;   means that the char-sequence can be read again if it is not a compound.
  ;   at the end of the procedure the global  nlbyte is adjusted with

  ;   nlcontcount that is used in search mode to count continuation-lines
  ;   and initialised in compound.

  ;   register use:
  ;             call              exit
  ;     w0                   <bytevalue> for w1=1
  ;     w1                   <compound> ,1for true 0 for false.
  ;     w2  <entry char>      undefined
  ;     w3  return address    undefined

  ;   globals used:
  ;     f7 , f21 , f22 , f25 , f26 , f27 , f24
  ; local variables:                  ;

  w.  b0:          0                  ;   return address
      b2:          0                  ;   in endchain
      b3:          0                  ;   tablebases
      b4:          0                  ;   bytevalue
  h.  b5:          0                  ;   charp change
  w.  b6:          0                  ;   charvalue

  ; tables :    reschain and endchain are placed after the code
                                      ; entrypoint(1:29)
  h.  g0:      2,    0,   i58,  i59   ;   a, b , c , d
             i60,  i61,  i62,    0    ;   e, f , g , h
             i63,    0,    0,  i64    ;   i, j , k , l
               0,    0,    0,  i65    ;   m, n , o , p
               0,  i66,  i67,  i68    ;   q, r , s , t
               0,    0,  i69,    0    ;   u, v , w , x
               0,  i70,    0,    0    ;   y, z , æ , ø
               0,                     ;   å

  ;   entry point                     ;

  w.d21:  rs.   w3                b0. ;  begin
        jl.   w3               d36. ;  set search mode

          al.   w3                g1. ;
          rs.   w3                b3. ;   tablebases:= reschainbase;
          al    w1                 0  ;   link:=0; comment link is kept in w1;
          rs.   w1                b2. ;   in endchain:=
          hs.   w1                b5. ;   charp change:=0;
          hs.   w1               f27. ;   change list not allowed:=false;
          hs.   w1               f26. ;   nlcontcount:=0;

      c0: bl    w3                 5  ; find entry:
          sn    w3                a6  ;   if enternal value=pointvalue then
          al    w1                i0  ;   link:=pointentry;
          sn    w3              a5+5  ;   if internal value=starvalue then
          al    w1                i1  ;   link:= starentry;
          se    w1                 0  ;   if link<> 0 then
          jl.                     c1. ;   go to next actual char;
          bl.   w1    x3       g0.-a0 ;   link:=entry point(internal value
                                      ;                    -letterbase);
          sn    w1                 0  ;   if link =0 then
          jl.                     c8. ;   go to not compound;
          al    w3                -2  ;
          hs.   w3                b5. ;   charp change:=-1;
          al    w0                 1  ;

      c1: jl.   w3               d11. ; next actual char:
          bl    w3                 4  ;   w2:=next char;
          sn    w3                j0  ;   if mainclass=digits then
          al    w2    x2          a1  ;   internal value:=internal value
          hs.   w2              b6.+1 ;   +digit base;charvalue:=w2;

      c3: am.                    (b3.); next table word:
          bl    w3    x1           1  ;   tablevalue:=table(link+
                                      ;   tablebases+1);comment table is
                                      ;   reschain or endchain;
          se.   w3               (b6.);   if tablevalue<>charvalue then
          jl.                     c5. ;   go to next branch;
          sn.   w0               (b2.);   if in endchain<>0 then
          jl.                     c6. ;   go to ok compound;
          al    w1    x1           2  ;   link:=link+1;
          jl.                     c1. ;  go to next actual char;

      c5: am.                    (b3.); next branch:
          bl    w1    x1           0  ;   link:=table(link+tablebases+0);
          sn    w1                 0  ;   if link=0 then
          jl.                     c8. ;   go to not compound;
          sh    w1                 0  ;   if link>0 or
          sn.   w0               (b2.);   in endchain<>0 then
          jl.                     c3. ;   go to next table word;
          rs.   w0                b2. ;   in endchain :=1;
          rs.   w3                b4. ;   bytevalue:=tablevalue;

          al.   w3                g2. ;   tablebases:=endchainbase;
          rs.   w3                b3. ;
          bl    w3                 4  ;
          se    w3               j22  ;   if mainclass<>nlstatclass then
          jl.                     c3. ;   go to next table word;
          al    w3              a9+0  ;
          rs.   w3                b6. ;   charvalue:=endstatement value;
          jl.                     c3. ;  go to next table word;

      c6: ac.   w0               (b4.); ok compound: w0:=- bytevalue;
        se    w0             a11+7  ;  if compound <> real then
        jl.                     c7. ;    goto end ok
        jl.   w3               d11. ;  next char
        bl    w3                 4  ;
        sn    w3               j16  ;  if class = ( then
        jl.                     c8. ;    goto not compound
        al    w3                -4  ;
        hs.   w3                b5. ;  charp change:=-2

      c7: bl.   w3                b5. ; end ok: charpointer:=
          wa.   w3                f7. ;   charpointer+charpchange;
          al    w1                 1  ;   compound:=true;
          jl.                     c9. ;   go to out;
      c8: al.   w3               d25. ; not compound:
          al    w1                 0  ;   charpointer:=oldcharpointer;
                                      ;   compound:=false;

      c9: rs.   w3                f7. ; out:
          rl.   w3               f24. ;   mode in next char:= normal mode;
          rs.   w3               d27. ;
          bl.   w3               f26. ;
          hs.   w3               f25. ;   nlbyte:=nlcontcount;
          jl.                   (b0.) ; end compound;

  ;   table reschain
  w.  g1: 0
  h.        0,i20,  0,i20,  0,i10,  0,i8 ,  0,i15, - 6,-a10- 4  ; assign

      g3: i28,i2 ,  0,i13,  0,i13,                 - 6,-a10- 5  ; call

      g4:   0,i16,i29,i15,  0,i21,  0,i10,  0,i15
                                    0,i22,  0,i6 , -12,-a10- 6  ; continue

      g5:   0,i14,i30,i14,  0,i16,  0,i15,         - 8,-a11-11  ; common

      g6:   0,i17,  0,i13,  0,i6 ,  0,i25,         - 6,-a11- 9  ; complex

      g7: i31,i2 ,  0,i21,  0,i2 ,                 -10,-a11-12  ; data

      g8: i32,i10,  0,i14,  0,i6 ,  0,i15,  0,i20
                            0,i10,  0,i16,  0,i15, - 6,-a11-10  ; dimension
      g9:   0,i16,i33,i22,  0,i3 ,  0,i13,  0,i6                ; double_
          i34,a16,  0,i17,  0,i19,  0,i6 ,  0,i4                ; precision
          0,i10,  0,i20,  0,i10,  0,i16,  0,i15, - 6,-a11- 8  ;

     g10:                                          - 6,-a10- 3  ; do

     g11: i35,i15,i36,i5 ,                         -12,-a3-  0  ; end

     g12:   0,i21,  0,i19,   0,i26,                - 6,-a11- 3  ; entry

     g13: i37,i18,  0,i22,  0,i10,  0,i23,  0,i2 
            0,i13,  0,i6 ,  0,i15,  0,i4 ,  0,i6 , -10,-a11-13  ; equivalence

     g14:   0,i25,  0,i21,  0,i6 ,  0,i19,  0,i15
                                    0,i2 ,  0,i13, - 6,-a11-14  ; external

     g15: i38,i16,  0,i19,  0,i14,  0,i2 ,  0,i21               ; 
                                          i71,i16, -10,-a12- 2  ; formato
     g51:                                          -10,-a12- 1  ; format

     g16:   0,i22,  0,i15,  0,i4 ,  0,i21,  0,i10               ;
                                    0,i16,  0,i15, - 6,-a11- 2  ; function

     g17:   0,i16,i39,a16,  0,i21,  0,i16,         -10,-a10- 1  ; go to

     g18: i40,i7 ,                                 -10,-a10- 2  ; if

     g19:   0,i15,  0,i21,  0,i6 ,  0,i8 ,  0,i6                ;
                                            0,i19, - 6,-a11- 5  ; integer

     g20:   0,i16,i41,i8 ,  0,i10,  0,i4 ,  0,i2                ;
                                            0,i13, - 6,-a11- 4  ; logical

     g21:   0,i15,  0,i8 ,                         - 6,-a11- 6  ; long

     g22:   0,i19,  0,i16,  0,i8 ,  0,i19,  0,i2  
                                            0,i14, - 6,-a11- 0  ; program

     g23:   0,i6 ,i42,i2 ,i43,i5 ,                 -10,-a10- 9  ; read

     g24:   0,i13,                                 - 6,-a11- 7  ; real

     g25:   0,i21,  0,i22,  0,i19,  0,i15,         -12,-a10- 7  ; return

     g26: i44,i21,  0,i16,  0,i17,                 -12,-a10- 8  ; stop

     g27:   0,i22,  0,i3 ,  0,i19,  0,i16,  0,i22               ; 
                    0,i21,  0,i10,  0,i15,  0,i6 , - 6,-a11- 1  ; subroutine

     g28:   0,i16,                                 - 6,-a10- 0  ; to

     g29:   0,i19,  0,i10,  0,i21,  0,i6 ,         -10,-a10-10  ; write

     g30:   0,i16,  0,i15,  0,i6 ,                 - 6,-a11-15  ; zone

     g31: i45,i2 ,  0,i15,  0,i5 ,                 - 2,-a8 -7   ; .and
     g32: i46,i6 ,  0,i18,                         - 2,-a8 -3   ; .eq
     g33: i47,i7 ,  0,i2 ,  0,i13,  0,i20,  0,i6 , - 2,-a2 -1   ; .false
     g34: i48,i8 ,i49,i6 ,                         - 2,-a8 -4   ; .ge
     g35:   0,i21,                                 - 2,-a8 -5   ; .gt
     g36: i50,i13,i51,i6 ,                         - 2,-a8 -2   ; .le
     g37:   0,i21,                                 - 2,-a8 -1   ; .lt
     g38: i52,i15,i53,i6 ,                         - 2,-a8 -6   ; .ne
     g39:   0,i16,  0,i21,                         - 2,-a8 -9   ; .not
     g40: i54,i16,  0,i19,                         - 2,-a8 -8   ; .or
     g41: i55,i20,i56,i9 ,  0,i10,  0,i7 ,  0,i21, - 2,-a8-10   ; .shift
     g42:   0,i21,  0,i19,  0,i10,  0,i15,  0,i8 , - 2,-a8-11   ; .string
     g43:   0,i21,  0,i19,  0,i22,  0,i6 ,         - 2,-a2 -0   ; .true
     g44:                                          - 4,-a8 -0   ; *

  
  ; table end chain contains the possible endsymbols in a chain

  h. g45: i57,a9+0                ;   ; nl
     g46: i57,a5+0                ;   (
     g47: i57,a5+6                ;   /
     g48:   0,a16                 ;   in text
     g49:   0,a5+5                ;   *
     g50:   0,a6                  ;   .

    w.  g2:    0                        ;   endchainbase;

  ; assignment of intermediates:

        i0 =g31-g1, i1 =g44-g1
        i2 =a0+0, i3=a0+1 ,i4 =a0+2 ,i5 =a0+3 ,i6 =a0+4 ,i7 =a0+5
        i8 =a0+6, i9=a0+7 ,i10=a0+8 ,i11=a0+9 ,i12 =a0+10,i13=a0+11
        i14=a0+12,i15=a0+13,i16=a0+14,i17=a0+15,i18=a0+16,i19=a0+17
        i20=a0+18,i21=a0+19,i22=a0+20,i23=a0+21,i24=a0+22,i25=a0+23
        i26=a0+24,i27=a0+25
  ; i2 to i27 specifies the internal values for the letters a to z.

        i28=g4 -g1, i29=g5 -g1, i30=g6 -g1, i31=g8 -g1, i32=g9 -g1
        i33=g10-g1, i34=g9 -g1+12
        i35=g13-g1, i36=g12-g1, i37=g14-g1, i38=g16-g1, i39=g17-g1+4
        i40=g19-g1, i41=g21-g1, i42=g25-g1, i43=g24-g1, i44=g27-g1
        i45=g32-g1, i46=g33-g1, i47=g34-g1, i48=g36-g1, i49=g35-g1
        i50=g38-g1, i51=g37-g1, i52=g40-g1, i53=g39-g1, i54=g41-g1
        i55=g43-g1, i56=g42-g1, i57=g48-g2
  ; i28 to i 57 are used as possible link-values.
        i58=g3 -g1, i59=g7 -g1, i60=g11-g1, i61=g15-g1, i62=g17-g1
        i63=g18-g1, i64=g20-g1, i65=g22-g1, i66=g23-g1,i67 =g26-g1
        i68=g28-g1, i69=g29-g1, i70=g30-g1, i71=g51-g1
  
  e.
    i2= d0-i0

  i1 = k - i0,i.

e30 = e30 + i1      ; length := length + length pass 1;

e.
m. rc 85.09.26 fortran, pass 1
▶EOF◀