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

⟦b41331b5a⟧ TextFile

    Length: 134400 (0x20d00)
    Types: TextFile
    Names: »ftnpass63tx «

Derivation

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

TextFile


  ;  start pass 6                                        fortran pass 6 23.2.70
  ;                                                      jes linderoth
  ;  corrections 1985.10.02 by fgs
  k= e0
s.  c80,d42,f44,g19,h32,i25,j2

  ;   outbyte values, type independent part

        h0  =  1            ; begin base               1
        h1  = h0+3          ; list base                4
        h2  = h1+5          ; declare base             9
        h3  = h2+7          ; adj. array base         16
        h4  = h3+5          ; data base               21
        h5  = h4+4          ; operand base            25

        h7  = h5+12         ; end statem base         37
        h8  = h7+10         ; format base             44
        h9  = h8+2          ; paramzone base          46
        h10 = h9+3          ; zonecomma base         49
        h11 = h10+2         ; parcount                52
        h12 = h11+1         ; start range             53
        h13 = h12+1         ; entry base              54
        h14 = h13+3         ; jump base               57
        h15 = h14+5         ; rel and logpoint base   62
        h16 = h15+2         ; do base                 64
        h17 = h16+9         ; inout base              71
        h18 = h17+4         ; implied base            75
        h19 = h18+2         ; trouble                 80
        h20 = h19+2         ; convert base            81

        h29 = h20+21        ; exp base               102
        h30 = h29+7         ; area inf base          109
        h32 = h30+2

  ;   outbyte values, type dependent part
        h21 =(:(:h32-1:)>3+1:)<3 ; datainit
        h22 = h21+8         ; arith oprt base
        h23 = h22+40        ; mask oprt base
        h24 = h23+32        ; assign base
        h25 = h24+16        ; indic base
        h26 = h25+16        ; call
        h27 = h26+8         ; param base
        h28 = h27+32        ; if

        h6  = h28+8         ; const base
        h31 = h6 +8         ; formal array decl

  w.  j0:             j2              ; no. bytes in pass 6
  h.      j1      ,   6<1+1           ; rel entry, passno.+pass mode

  ; pass 6 init
  j1=k-j0
  w.      rl. w0      e9.+4          ; pass 6 init:
          rs. w0      f4.             ;   opnd stack point:=
          rs. w0      f14.            ;   opnd bottom:= last work for pass;
        rl. w2      f12.            ; set bottom
        rs. w2      (f4.)           ; operand undefined

          al. w2      j0.-2           ;   oprt stack point:=
          wa. w2      j0.             ;   start pass6-2+no.bytes in pass6;
          rs. w2      f3.             ;
          rs. w2      f19.            ;   global base:=oprt stack point;
          al. w2      f39.            ;   word(general spec param):=
          rs. w2      f38.            ;   address of general specs;
  
          jl.         c80.            ;   go to new inbyte;
\f


  ;   stacking actions    are specified with c-names,declared in the
  ;                       outmost block
  ;                       local labels(a-names) and local variables(b-names)
  ;                       are declared in local blocks,if needed.

  b.  a3                              ; global entries: comment a table with
                                      ;   name and paramspecifications for
                                      ;   each entrypoint in all programunits
                                      ;   with formats as in a catalog-entry
                                      ;   ,is read via call of inbyte;
                                      ;   beforehand,an entry corresponding
                                      ;   to an unknown procedure is
                                      ;   established.
 w.   c1: bl. w0      f2.             ;
          jl. w3      e3.             ;   outbyte(control word part4);
          jl. w3      e2.             ;   no.bytes:=inbyte;
          al  w0  x2                  ;
          jl. w3      e3.             ;   outbyte(no.bytes);
          wa. w2      f19.            ;
          rs. w2      f20.            ;   endglobal:=global base+no.bytes;
          sl. w2      (f4.)           ;   if endglobal>= opnd stack point
          jl.         d0.             ;   then goto stack owerflow;
          rl. w1      f19.            ;
          al  w2  x2  -10             ;   head address:=
          rs. w2      f17.            ;   end global-10;

      a0: jl. w3      e2.             ;   for w1:=global base step 1
          hs  w2  x1  +2              ;   byte(w1+2):=inbyte;
          al  w1  x1  +1              ;
          se. w1      (f20.)          ;
          jl.         a0.             ;
          al  w1  x1  +2              ;

      a1: al  w1  x1 -12              ; output global entry list:
          sh. w1      (f19.)          ;
          jl.         a3.             ;   for entry:=endglobals-10
          al  w2      0               ;   step -12 until global base
                                      ;   do
      a2: am      x1                  ;
          bl  w0  x2                  ;   for i:=0 step 1 until 11
          jl. w3      e3.             ;   do outbyte(byte(entry+i));
          al  w2  x2  +1              ;
          sh  w2      11              ;
          jl.         a2.             ;
          jl.         a1.             ;

      a3: rl. w1      f20.            ;   w1:=end globals


     d30: al  w1  x1  +6              ; adjust oprt point:
          rs. w1      f3.             ;     oprt stack point:=w1+6;
          al  w0      -11<7           ;     oprtstack(oprt stack point):=
          hs  w0  x1  -4              ;     bottom priority;
          jl.         c80.            ;     goto new inbyte;
  e.

  b.  a14, b5
  ; external list:
  ;
  ;   <record>      ::=<directing byte>
  ;                    <no.bytes>
  ;                                no.externals
  ;                    (<ext item>)
  ;                                no.externals
  ;                    <no.externals>
  ;
  ; input:<ext item>::=<extno><8 bytes external represent.>
  ;output:<ext item>::=       <8 bytes external represent.>
  ;                           <4 bytes kind and specs>
  ;
  ;
  ;
  ;     the external list is read, taking one item at a time.
  ;
  ;     at the same time,table glob.references is established,holding
  ;   for each external a word with a pointer to the kind and specs to
  ;   be used for that external during parameter-checking in the exe-
  ;   cutable part of the unit.
  ;
  ;     the kind and specs is searched for in table global entries
  ;   using <external represent.>,that is stored immediately after
  ;   global entries, as a key, and if not found a new entry in
  ;   global entries is created with ext.represent. already defined
  ;   and with kind and specs taken from
  ;         a)the catalog by means of  look up entry      or
  ;         b)unknown entry,    if not found in the catalog.
  ;
  ;   when all input items have been processed,the external list is
  ;   output, taking for each external,and inthe order of increasing
  ;   values of <extno>, the corressponding entry in table
  ;   global entries  ,i.e. 12 bytes for each external.


  ;  kind and specifications:
  ;             format as in  notes on code procedures in algol 5.
  ;             special: proctype=15  for unknown entry

w.    b0:             0               ; ext count
      b1:             0               ; twice extno
      b2:             12              ; twelve
      b3:             9               ; nine
      b4: <:*version:>, 0, e103, 0    ; pseudo external entry (version):
      b5:                             ; end pseudo:

      c2: bl. w0      f2.             ; external list:
          jl. w3      e3.             ;   outbyte(control word part4);
          jl. w3      e2.             ;   no.inbytes:=w2:=inbyte;
          al  w1      0               ;   extcount:=0;
          rs. w1      b0.             ;
          wd. w2      b3.             ;   no.externals:=
          rs. w2      f37.            ;   w2//9;
          al  w0  x2  +1              ;

          wm. w0      b2.             ;   no.outbytes:=
          ba. w0      1               ;   (no.inbytes//9+1)*12+1; <*12 for pseudo entry added*>
          jl. w3      e3.             ;   outbyte(no.outbytes);
          ls  w2      1               ;

          ac  w2  x2  +2              ;   glob.reference base:=
          wa. w2      f4.             ;   opnd stack point -
          rs. w2      f21.            ;   2*no.externals-2;
          al  w2  x2  -2              ;   opnd stack point:=
          rl. w3      f4.             ; save operand stack pointer
          rs. w2      f4.             ;   opnd bottom:=
          rs. w2      f14.            ;   glob.reference base-2;
          sh. w2      (f3.)           ;   if opnd bottom<=oprtstackpoint
          jl.         d0.             ;   then goto stack owerflow;

          rl. w1      f19.            ;   glob.references(0):=
          rs  w1  x2  +2              ;   global base;comment points at
                                      ;   unknown entry,and ext params
                                      ;   are treated as external 0;
          al  w0      0               ; put zeroes
          al  w2  x2  +4              ; in table for
     a11: sl  w2  x3                  ; global references
          jl.         a0.             ;
          rs  w0  x2                  ;
          al  w2  x2  +2              ;
          jl.         a11.            ;
      a0: rl. w1      b0.             ; next external:
          sn. w1      (f37.)          ;   if extcount=no.externals
          jl.         a7.             ;   then goto out external list;
          al  w1  x1  +1              ;   extcount:=
          rs. w1      b0.             ;   extcount+1;

          jl. w3      e2.             ;   w2:=inbyte;comment extno;
          ls  w2      1               ;   twice external:=w2 shift 1;
          rs. w2      b1.             ;
          al  w1      0               ;   w1:=0;

      a1: jl. w3      e2.             ;   for w1:=end globals+2 step 1
          am.         (f20.)          ;   until end globals+9 do
          hs  w2  x1  +2              ;   byte(w1):=inbyte;
          al  w1  x1  +1              ;   
          se  w1      8               ;
          jl.         a1.             ;
          sl. w1      (f4.)           ;   if w1>=opnd stack pointer
          jl.         d0.             ;   then goto stack owerflow;
          rl. w1      f19.            ;   w1:= global base;

      a2: al  w1  x1  +12             ; next global entry:w1:=w1+12;
          am.         (f20.)          ;   if w1>end global then
          sl  w1      2               ;
          jl.         a4.             ;   goto search in catalog;
          al  w2      0               ;   w2:=0;
                                      ;   comment start comparing;
      a3: am.         (f20.)          ;   for w2:=0 step 2 until 6 do
          rl  w0  x2  +2              ;   if word(end global+2+w2)
          am      x2                  ;
          se  w0  x1  (-10)           ;   <>word(w1-10+w2) then
          jl.         a2.             ;   goto next global entry;
          al  w2  x2  +2              ;
          se  w2      8               ;
          jl.         a3.             ;
          jl.         a6.             ;   goto store reference;
      a4: rs. w1      f20.            ; search in catalog:
          am.         (f4.)           ;   end globals:=w1;
          sl  w1      -18             ;   if w1+18>=opndstackpoint
          jl.         d0.             ;   then goto stack owerflow;
                                      ;   comment tail part fills 10
                                      ;   words at return from
                                      ;   look up entry;
          al  w3  x1  -10             ;
          jd          1<11+42         ;   look up entry(w1-10,w1,w0);
          se  w0      2               ;   if result=2 then
          jl.         a5.             ;   alarm(<:catalog:>);
          jl. w1      e5.             ;   comment input-output error;
          <:catalog:>

      a5: rl. w1      f20.            ;   kind and specs in last global
          dl  w3  x1  14              ;   entry:= if entry looked up
          bl  w1  x1  16              ;   and content=procedure
        se  w0      0               ; if result<>0
        jl.         8               ; then kind and specs. unknown
         sl  w1    32              ; if shared entry
         jl.       a13.            ;   goto a13
         se  w1    4               ; if content=procedure then
         dl. w3    (f19.)          ;  optional word 6 and 7 from tail ad
     a13:rl. w1    f20.            ;
         ds  w3  x1                ;
  ; fjernes efter test
  ;
          se  w0      6               ;   if result = 6
          jl.         a6.             ;   then
          jl. w1      e5.             ;   alarm;
          <:name form of look up entry<0>:>
      a6:                             ; store reference:

          rl. w2      b1.             ;   glob references(
          am.         (f21.)          ;   twice extno):=w1;
          rs  w1  x2                  ;
          jl.         a0.             ;   goto next external;

      a7: al  w2      0               ; out external list:extno:=0;
          jl.         a10.            ;   goto test for end list;

      a8: al  w2  x2  +1              ; next item out:
          rs. w2      b0.             ;   extno:=extno+1;
          ls  w2      1               ;
          am.         (f21.)          ;   w2:=glob references(extno);
          rl  w2  x2                  ;
          sn  w2      0               ; if no external
          jl.         a12.            ; test for end list
          al  w1  x2  -10             ;

      a9: bl  w0  x1                  ;   for w1:=w2-10 step 1 until
          jl. w3      e3.             ;   w2+1 do
          al  w1  x1  +1              ;    outbyte(byte(w1));
          se  w1  x2  +2              ;
          jl.         a9.             ;
     a12: rl. w2      b0.             ;

     a10: se. w2      (f37.)          ; test for end list:
          jl.         a8.             ;   if extno<>no.externals then goto next item out;

          al. w2      b4.             ; out pseudo external entry:
     a14: zl  w0  x2                  ;   the pseudo external entry
          jl. w3      e3.             ;   contains the compiler version
          al  w2  x2  +1              ;   number used only by pass9;
          se. w2      b5.             ;
          jl.         a14.            ;
          jl. w3      e2.             ;   inbyte;
          al  w0  x2  +1              ;   outbyte(inbyte+1);comment
          jl. w3      e3.             ;   no.externals+pseudo external entry;
        rl. w1      f12.             ; set bottom
        rs. w1      (f4.)            ; operand undefined
          rl. w1      f20.            ;   w1:= end globals;
          jl.         d30.            ;   goto adjust oprt point;

  e.

  b.  a1,b0                           ; error labels:comment a table holding
                                      ;   multiple- or not declared labels,
                                      ;   if any, is established;
  w.  b0:            0                ; addr of end labels

      c3: al. w3      f23.            ; error labels:w3:=
                                      ;  addr of enderr labels;
          rs. w3      b0.             ; label list:addr of endlabels
          rl  w1  x3                  ;  :=w3;w1:=end labels;
          se  w1       0              ;   if w1<>0 then
          jl.         a0.             ;   goto table size;
          am.         (f3.)           ;
          al  w1      -5              ;   w1:=label base:=
          rs  w1  x3  -2              ;   oprt stack point-5;

      a0: jl. w3      e2.             ; table size:
          wa  w2       2              ;   w2:=end labels:= w1+inbyte;
          rs. w2      (b0.)            ;
          sl. w2      (f4.)           ;   if w2>=opnd stack point then
          jl.         d0.             ;   goto stack owerflow;

      a1: al  w1  x1  +1              ;   for w1:=w1+1 step 1 until
          jl. w3      e2.             ;   end labels do
          hs  w2  x1                  ;     byte(w1):=inbyte;
          am.         (b0.)           ;
          se  w1      (0)             ;
          jl.         a1.             ;
          sz  w1       1              ;   w1:=end labels//2*2;
          al  w1  x1  -1              ;
          jl.         d30.            ;   goto adjust oprt point;

  e.

  b.  a4,b1                           ; decl array param

  ;       parameterranges has to be moved to the stack
  ;       during run time, and to do this, pass6 treats
  ;       each parameterrange as an assignment statement.
  ;         for adjustable arrays, code to calculate lower
  ;       and upper value, has to be generated,and this is
  ;       done by evaluating arrayindex in the usual way
  ;       for first and last array element.


 w. b0:              0                ; adjustable
    b1:              1                ; one
                                      ; decl array param:
    c4:   jl. w3      e2.             ;   inbyte;comment no.bytes,skipped;
          jl. w3      e2.             ;   control word part4:=
          ba. w2      f2.             ;   control word part4+inbyte;comment
          hs. w2      f2.             ;   type of array;
          jl. w3      d4.             ;   stack and output opnd;
          jl. w3      e2.             ;
          rs. w2      f6.             ;   no.dimensions:= inbyte;
          rl. w1      f3.             ;
          ls  w2       1              ;   w2:=oprtstack point+
          wa  w2       2              ;       2* no.dimensions;
          sl. w2      (f4.)           ;   if w2>= opnd stack point then
          jl.         d0.             ;   goto stack owerflow;
          rs. w2      f29.            ;   endranges in decl:=w2;
                                      ;   comment ranges are picked up and
                                      ;   stored in oprt stack;
      a0: sn. w1      (f29.)          ;   for w1:=oprtstackpoint+2 step 2
          jl.         a1.             ;   until endranges in decl do
          al  w1  x1  +2              ;   begin
          jl. w3      e2.             ;     byte(w1):=inbyte;
          hs  w2  x1                  ;
          jl. w3      e2.             ;     byte(w1+1):=inbyte;
          hs  w2  x1  +1              ;
          jl. w3      e2.             ;     inbyte;
          jl. w3      e2.             ;     w2:=inbyte;
          sn  w2       0              ;     if w2<>0 then
          jl.         a0.             ;     begin comment parameterrange;
                                      ;
          rs. w2      b0.             ;       adjustable:= true;
          al  w0      h5+0            ;
          jl. w3      e3.             ;       outbyte(simpel local);
          bz  w0  x1  +1              ;
          jl. w3      e3.             ;       outbyte(byte(w1+1));comment
          al  w0      h5+2            ;       stack relativ address to range;
          jl. w3      e3.             ;       outbyte(simpel param);
          al  w0  x2                  ;
          jl. w3      e3.             ;       outbyte(w2);comment stack
          al  w0      h24+2           ;       relativ with paramno;
          jl. w3      e3.             ;       outbyte(assign integer);
          jl.         a0.             ;     end
                                      ;   end;

                                      ;   comment calculate lower and upper
      a1: al  w2       0              ;   for adjustable arrays;
          sn. w2      (b0.)           ;   if -,adjustable then
          jl.         a4.             ;   goto end array decl;
          rs. w2      b0.             ;   adjustable:=false;
          rl. w2      f6.             ;
          al. w1      b1.             ;   rangeaddress:=one;
                                      ; comment  new lower;
      a2: jl. w3      d6.             ;   for w2:=no.dimensions step -1
          al  w2  x2  -1              ;   until 1 do
          se  w2       0              ;   out range value(rangeaddress);
          jl.         a2.             ;

          jl. w2      d7.             ;   adjust upplow;
          al  w0      h3+0            ;
          jl. w3      e3.             ;   outbyte(adj lower);

          rl. w1      f3.             ; comment  new upper;
      a3: al  w1  x1  +2              ;   for r address:=oprt stackpoint+2
          jl. w3      d6.             ;   step 2 until end ranges indecl do
          se. w1      (f29.)          ;   out range value(r address);
          jl.         a3.             ;
          jl. w2      d7.             ;   adjust upplow ;
          al  w0      h3+1            ;
          jl. w3      e3.             ;   outbyte(adj upper);

      a4: al  w0      h3+2            ; end array decl:
          jl. w3      e3.             ;   outbyte(init array);
          al  w0      h3+3            ;   if adjustable
          se  w2       0              ;   then outbyte(adj array)
          al  w0      h3+4            ;   else outbyte(fix array);
          jl. w3      e3.             ;
          jl.         d31.            ;   goto remove opnd;

  e.

      c5: jl. w3      e2.             ; local entry list:
          jl. w3      e11.            ;   w2:=inbyte;repeat inputbyte;
          rs. w2      f31.            ;   no.entries:=w2;
          jl. w3      d5.             ;   copy opnd descr;
          al  w0      0               ;  no.operands:=0;comment
          rs. w0      f8.             ;  executable part starts immediate-
                                      ;  ly after local entry list;
          jl.         c80.            ;   goto new inbyte;

      c6: jl. w3      d5.             ; declare and lists: copy opnd descr;
          jl.         c80.            ;   goto new inbyte;
 
      c7: al. w3      f36.            ; nulls:w3:=addr of endnulls;
          jl.         c3.+2           ;   goto label list;

      c8: jl. w3      d4.             ; copy fixed lenght:
                                      ;   stack and output opnd;

     d31: rl. w1      f4.             ; remove opnd:
          al  w1  x1  +2              ;   opnd stackpoint:=
          rs. w1      f4.             ;   opnd stackpoint+2;
          jl.         c80.            ;   goto new inbyte;


      c9: jl. w3      d4.             ; operand: stack and output opnd;
          jl.         c80.            ;   goto new inbyte;

  b.  a1                              ; array descr:

  ;   the fixed part is output at once while range-descriptions
  ;   are stored in operator-stack as shown(1 word pr range),with
  ;   an   end range   operator on the top of them,see label a1:
  ;
  ;         - - - - - - -
  ;         !  range  1   !        the ranges are later on to be
  ;         - - - - - - -        used in action c69,index uns,
  ;         !  range  2   !        to output a reverse polish
  ;         - - - - - - -        expression for calculating a
  ;         !             !        one-dimensional index,or
  ;         !             !        to be output if the array 
  ;         - - - - - - -        ident is a parameter.  
  ;         !  range n-1  !
  ;         - - - - - - - 
  ;         !  no. ranges !
  ;         - - - - - - - 
  ;         !  end range  !        part3 of end range operator holds a
  ;         !  operator   !        pointer to the ranges,and it is
  ;         !             !        initialised during stacking of
  ;         - - - - - - -        array(.



  w. c10: jl. w3      e2.             ;
          jl. w3      d4.             ;   stack and output opnd;
          jl. w3      e2.             ;
          rs. w2      f6.             ;   no.dimensions:=inbyte;
          al  w0  x2                  ;
          rl. w1      f3.             ;   w1:=oldpointer:=
          rs. w1      f10.            ;   oprt stack pointer;
          ls  w0       1              ;
          wa  w0       2              ;   limit:=w1+no.dimensions*2;
          sl. w0      (f4.)           ;   if limit>= opnd stack point then
          jl.         d0.             ;   goto stack owerflow;
          rs. w0      f3.             ;   oprtstack point:= limit;
          rs  w2      (0)             ;   oprtstack(oprtstack point):=
          al  w1  x1  +2              ;   no.dimensions;

      a0: sn  w0  x1                  ;   for w1:=oldpoint+2 step 1
          jl.         a1.             ;   until limit-1 do
          jl. w3      e2.             ;     byte(w1):=inbyte;
          hs  w2  x1                  ;
          al  w1  x1  +1              ;
          jl.         a0.             ;
      a1: al  w2      14<7+1<1        ; comment   end range   is put
          hs. w2      f0.             ;   in control word;
          al  w2      84              ;   control word(6 bytes):=
          ls  w2      12              ;   14<7+1<1,0,0,0,pointer to
          rs. w2      f2.             ;   end range in oprt table,0;
          jl.         d3.             ;   goto test control word;
  e.

  b.  b0                              ;
 w.   b0: 2.       10000000000000100  ;   zarray opnd
     c11: jl. w3      d4.             ; zone: stack and output opnd;comment
          rl. w1      b0.             ;   w0 contains no.zones;
          se  w0       0              ;   if no.zones<>0 then
          rs. w1      (f4.)           ;   opndstack(top):=zarray opnd;
          jl.         c80.            ;   goto new inbyte;
  e.

     c12: jl. w3      d4.             ; external: stack and output opnd;
          jl. w3      d16.            ;   comment w0 and w2 contain extno;
          rl. w0      (f4.)           ;   get params(extno,receive kind);
          jl. w3      d10.            ;   w0:=top operand; check opnd;
          se. w1      (f12.)          ;   if operand<>undefined then
          rs. w1      (f4.)           ;   opndstack(top):=operand;
          al  w2      i1              ;   w2:=end paramdescription;
          jl.         d1.             ;   goto fetch control entry;
                                      ;   comment an endparam-operator will
                                      ;   be stacked on top of the param-
                                      ;   descriptions;

     c13: jl. w3      d4.             ; ext param: stack and output opnd;
          al  w2       0              ;
          jl. w3      d16.            ;   get params(unknown,receive kind);
          al  w2      i1              ;   w2:=end paramdescription;
          jl.         d1.             ;   goto fetch control entry;
     c14: al  w0      177             ; label:controlword part4:=label no.;
          rx. w0      f18.            ;   type of last opnd:=177;comment see
          hs. w0      f2.             ;   comment for constant;

          jl. w3      d4.             ;   stack and output opnd;
          rs. w0      f18.            ;   last opnd:=labelno.;comment w0
                                      ;   contains label no. at return;
          rl. w3      f7.             ;   no.labels :=no.labels+1;
          al  w3  x3  +1              ;
          rs. w3      f7.             ;
          jl. w3      d15.            ;   label check;
          jl.         c80.            ;   goto new inbyte;

     c15: al  w0      177             ; constant:type of last operand:=7;
          rs. w0      f18.            ;   comment no change of operand-descr
          jl.         c9.             ;   during call of stack and output
                                      ;   opnd;   goto operand;

     c16: rl. w1      f8.             ; vanished opnd:
          al  w1  x1  +1              ;   no.operands:=
          rs. w1      f8.             ;   no.operands+1;
          jl.         c80.            ;   goto new inbyte;

     c17: jl. w1      d9.             ; dyadic input: check top operand;
          jl.         c80.            ;   goto new inbyte;

     c18: jl. w1      d9.             ; logic dyadic: check top operand;
          so  w1      1<5             ;   if resulttype<>logical then
          jl.         d32.            ;   goto not relation if;comment
                                      ;   logic express is given a special
                                      ;   treatment,cf. description;
          am          1               ;
          bl. w0      f0.             ;   outbyte(control word part2);
          jl. w3      e3.             ;   comment logicand  or  logicor;
          rl. w1      f3.             ;   priority of top oprt:=
          bl  w2  x1  -4              ;   priority of top oprt-2;comment to
          al  w2  x2  -2<7            ;   prevent that and unstacks and,f.ex.;
          hs  w2  x1  -4              ;
          al  w2      h15             ;   oprtstack(top part4):=logpoint-1;
          hs  w2  x1                  ;
                                      ;
     d32: al  w0       0              ; not relation if:
          rs. w0      f9.             ;   maybe relation if:= false;
          jl.         c80.            ;


  b.  a0                           ;

w.   c19: am.         (f4.)           ; mult assign:
          rl  w1       2              ;   w1:=nexttop operand 
          la. w1      f25.            ;   and all type mask +
          lo. w1      f1.             ;       variable kinds;
          jl.         a0.             ;   goto check assign;

     c20: rl. w1      f1.             ; assign input:w1:=control word part3;
      a0: rl. w0      (f4.)           ; check assign: w0:=top operand;
          jl. w3      d10.            ;   check opnd;
          rs. w1      (f4.)           ;   opndstack(top):=result operand;
          jl.         c80.            ;   goto new inbyte;

  e.
     c21: jl. w3      d4.             ; decl label: stack and output opnd;
          rs. w0      f18.            ;   last operand:=label no.;
          jl. w3      d15.            ;   label check;
          jl.         d31.            ;   goto remove opnd;

     c22: al  w0       0              ; comp goto:
          rs. w0      f7.             ;   no.labels:=0;
          jl.         c80.            ;   goto new inbyte;


     c23: al  w0      1<10            ; if input: maybe relif:=true;comment
          rs. w0      f9.             ;   1<10 added to a relation-bytevalue
          al  w0      0               ;   says ifrelart in stead of relart;
          rs. w0      f28.            ;   no ifoutput:=false;
          jl.         c80.            ;   goto new inbyte;

     c24: jl. w1      d9.             ; end if input: check top operand;
          rl. w1      f4.             ;
          al  w1  x1  +2              ;   opndstack point:=
          rs. w1      f4.             ;   opndstack point+2;
          jl.         d32.            ;   goto not relation if;

     c25: jl. w1      d9.             ; doinit: check top operand;
          am.         f0.             ;   
          bl  w0      1               ;   special do:=control word part2;
          rs. w0      f13.            ;   comment general or special do;
          bz. w0      f2.             ;   w0:=control word part4;
          jl. w3      e3.             ;   outbyte(w0);
          jl.         d31.            ;   goto remove opnd;

     c27: jl. w3      d14.            ; do oprt out:   integer conv;
          bz. w0      f2.             ;
          wa. w0      f13.            ;   outbyte(basevalue+specialdo);
          jl. w3      e3.             ;   comment doinitgen or doinitspec;
          jl.         c80.            ;   goto new inbyte;

     c28: jl. w3      d14.            ; imp until step:  integer conv;
          bz. w0      f2.             ;
          jl. w3      e3.             ;   outbyte(controlword part4);
          am.         f0.             ;
          bl  w0      1               ;   byte := control word part 2;
          se  w0      0               ;   if byte <> 0 then
          jl. w3      e3.             ;     outbyte(byte);
          jl.         c80.            ;   goto new inbyte;


  b.  b0                              ; action  stack entry:
                                      ;
 w.   b0:         2.11111             ;   proctype mask;
                                      ;
  ;   table  proctype kind  holds 1 byte with an operand-mask
  ;   for each possible proctype,found in paramdescriptions.
  ;   it is used to check an entry-name against the unit-name.
  ;                         mask          proctype
  h.  g0:               2. 101000000  ;  0:   program
                        2. 101000000  ;  1:   subroutine
                        2. 100100000  ;  2:   logical function
                        2. 100000001  ;  3:   integer function
                        2. 100000100  ;  4:   real    function
                        2. 100000010  ;  5:   long    function
                        2. 100001000  ;  6:   double  function
                        2. 100010000  ;  7:   complex function


  w. c29: am.         (f17.)          ; stack entry:
          bz  w1      +8              ;   w1:=word with proctype of this
          ls  w1      -6              ;   program unit;
          la. w1      b0.             ;   w1:=proctype;
          bz. w1  x1  g0.             ;   w1:=proctypekind(proctype);
          am.         (f3.)           ;   oprtstack(top part2):= w1;
          rs  w1      -2              ;   comment operand-mask;
          jl.         c80.            ;   goto new inbyte;
  e.

    ; table  list left input:

    ;   the inbyte  listleft  is given another name by means of the
    ;   top-operand kind and the table  listleft input that holds
    ;   a pointer to inputentries  for each possible kind.  this new
    ;   entry is used further on.

  h.  g1:      i6       ; simple        : pointer to begin proc list
               0        ; subscripted   : not used
               i6       ; label variable: pointer to begin proc list
               0        ; label         : not used
               0        ; zone indic    : not used

               i2       ; array         : pointer to begin array list
               i3       ; array eq zone :    -    -  begin arr eq zone list
               i4       ; zone          :    -    -  begin zone list
               i5       ; zone array    :    -    -  begin zarray list
               i6       ; subroutine    :    -    -  begin proc list
               i6       ; function      :            begin proc list
               i19      ; undefined     :    -    -  trouble left(


  w. c30: jl. w3      e2.             ; listleft input:
          rs. w2      f5.             ;   no.list elements:=inbyte;
          rl. w3      (f4.)           ;
          ns  w3       5              ;   w2:=15-bitno for leftmost bit
          bl  w2      5               ;
          al  w2  x2  +14             ;   in topoperand;
          bl. w2  x2  g1.             ;   inputbyte:=listleftinput(w2);
          jl.         d1.             ;   goto fetch control entry;


  b.  a2,b1                           ; block for begin array list,
                                      ;           begin zone list and
                                      ;           begin zarray list;
 w.   b0:        1<12                 ;  zoneindic kind

     c31: al  w3  x1  -12             ; begin array list: word(rangepointer)
          rs  w3  x1  -8              ;   :=address of rangestart in stack;
          al. w1      d20.            ;   erroraddress:=subscript error;
          rl. w0      f6.             ;

      a0:                             ; get kind:
          se. w0      (f5.)           ;   if no.dimensions<>no.list elements
          jl  w2  x1                  ;   then error(erroraddress);
          al  w2      1<9             ;   resultkind:=subscriptkind;

      a1: rl. w1      (f4.)           ; opnd result:
          la. w1      f25.            ;   opndstack(top):=opndstack(top)
          lo  w1       4              ;   and alltypemask +resultkind;
          rs. w1      (f4.)           ;
          jl.         c80.            ;   goto new inbyte;

     c32: al  w0       1              ; begin zone list: no.dimensions:=1;

      a2: al. w1      d21.            ; z subscript:erroraddress:=zoneerror;
          jl.         a0.             ;   goto get kind;

     c33: al  w0       2              ; begin zarray list: no.dimensions:=2;
          sh. w0      (f5.)           ;   if no.dimensions<=no.elements
          jl.         a2.             ;   then goto z subscripts;
          rl. w2      b0.             ;   resultkind:=zoneindic kind;

          al  w1      h10+0           ;   outvalue of top operator:=
          hs. w1      (f3.)           ;   zonecomma;
          jl.         a1.             ;   goto opnd result;

  e.

  b.  a1                              ;

 w.  c34: jl. w1      d9.             ; begin proc list: check top operand;
          rl. w3      f3.             ;   w3:=oprtstack point;
          se. w1      (f12.)          ;   if result operand<>undefined
          jl.         a1.             ;   then goto check no.elements;

          al  w1      4               ;   top operator becomes trouble(
          hs  w1  x3  -3              ;   with output of a  <call> byte
                                      ;   during unstacking;
          jl.         c80.            ;   goto new inbyte;

      a1:                             ; check no.elements:
          bl  w1  x3  -18             ;   no.formals:=byte(w3-18);
          sn. w1      (f5.)           ;   if no.formals= no.list elements
          jl.         c80.            ;   then goto new inbyte;

          bl  w0  x3  -17             ;   w0:=param n;comment last paramdesc;
          sl. w1      (f5.)           ;   if no.formals> no.list elements
          jl.         a0.             ;   then goto param error;
          al  w1      40              ;
          hs  w1  x3  -17             ;   param n:=general;
          sl  w0      39              ;   if w0<> general then
          sl  w0      41              ;
      a0: jl. w2      d22.            ; param error:  call error;
          jl.         c80.            ;   goto new inbyte;
  e.

     c35: dl. w0      f1.             ; begin io:comment read or write
          ds. w0      f41.            ;   is input;
                                      ;   iocall:=control word part2;
                                      ;   ioparammask:=control word part3;
          jl. w3      e2.             ;   comment readcall or writecall;
          se  w2       0              ;   no.elements:=inbyte;
          sl  w2       3              ;   if no.elements=0 or >2  then
          jl. w3      d22.            ;   call error;
          jl.         c80.            ;   goto new inbyte;



  ; table  commainput:

  ;   the inbyte  listcomma  is given another name during call of
  ;   define name(commatype) and table  commainput, that holds a
  ;   pointer to inputentries for each commaname.

  h. g2:    i7          ; pointer to  indexcomma
            i8          ;    -    -   zonecomma
            i9          ;    -    -   paramcomma
            i10         ;    -    -   rw comma
            i20         ;    -    -   troub comma

 w.  c36: jl. w3      d13.            ; list comma: define name(w2);
          bl. w2  x2  g2.             ;   inputbyte:=commatype(w2);
          jl.         d1.             ;   goto fetch control entry;

     c37: jl. w3      d14.            ; index comma:  integer conv;
          jl.         c80.            ;   goto new inbyte;

     c38: jl. w3      d14.            ; zone comma:   integer conv;
          al  w0      h10+0           ;
          jl. w3      e3.             ;   outbyte(zone comma);
          jl.         c80.            ;   goto new inbyte;

     c39: jl. w3      d11.            ; paramcomma:  actual vers formal;
          jl.         c80.            ;   goto new inbyte;

  b.  a0                              ;
 w.  c40: rl. w2      f4.             ; stack iocomma:
          se. w2      (f14.)          ;   if opndstack is empty then
          jl.         a0.             ;   begin
          rl. w2      f3.             ;     oprtstackpoint:=
          al  w2  x2  -6              ;     oprtstackpoint-6;
          rs. w2      f3.             ;     goto new inbyte;
          jl.         c80.            ;   end;
      a0: rl. w1      f15.            ; count io:
          al  w1  x1  +1              ;   iocount:= iocount+1;
          rs. w1      f15.            ;
          rl. w0      f41.            ;   controlword part3:=ioparammask;
          rs. w0      f1.             ;
  e.

     c41: rl. w0      f1.             ; rw comma: w0:=controlword part3;
          jl. w3      d12.            ;   check param;
          jl.         c80.            ;   goto new inbyte;

  ;  table  endlist input:

  ;   the inbyte  listright   is given another name during call
  ;   of define name(endlist type) and table  endlist input,  that
  ;   holds a pointer to inputentries for each endlist-name
  h. g3:    i11         ; end index list:   pointer to  end index
            i11         ; end zone  list:     -     -   end index
            i12         ; end proc  list:     -     -   end proc list
            i13         ; end rw    list:     -     -   end rw list
            i21         ; end troub list:     -     -   end troub list

  w. c42: jl. w3      e2.             ; end list input:
          rs. w2      f5.             ;   no.list elements:=inbyte;
          jl. w3      d13.            ;   define name(w2);
          bl. w2  x2  g3.             ;   inputbyte:=endlistinput(w2);
          jl.         d1.             ;   goto fetch control entry;

     c43: jl. w3      d11.            ; end proc list: actual vers formal;
     d33: am          1               ; parcount out:
          bl. w0      f0.             ;
          jl. w3      e3.             ;   outbyte(control word part2);
          rl. w0      f5.             ;
          sl. w0      (f11.)          ;   if no.list elements>= paramarea
          rs. w0      f11.            ;   then paramarea:=no.list elements;
          jl. w3      e3.             ;   outbyte(no.list elements);
          jl.         c80.            ;   goto new inbyte;

  b.  b0
  w.  b0: 2.  00001001001110000101    ;   rwcomma mask

     c44: al  w3      1               ; end rw list:
          rl. w0      f1.             ;   w0:= if no.listelements<>1
          sn. w3      (f5.)           ;   then control word part3
          rl. w0      b0.             ;   else rwcomma mask;
          jl. w3      d12.            ;   check param;
          jl.         d33.            ;   goto parcount out;
  e.

  b.  a0                              ;

 w.  c45: rl. w2      f4.             ; end iolist:
          sn. w2      (f14.)          ;   if opndstack is empty then
          jl.         a0.             ;   goto start implied;

          al  w0      i24             ;   control word part1:=
          hs. w0      f0.             ;   commaunstack priority; comment some
          al  w0      h11+0           ;   iocommas has to be unstacked;
          jl. w3      e3.             ;   outbyte(parcount);
          rl. w0      f15.            ;   if iocount>=paramarea then
          sl. w0      (f11.)          ;   paramarea:=iocount;
          rs. w0      f11.            ;
          jl. w3      e3.             ;   outbyte(iocount);
          jl.         d2.             ;   goto priority check;

      a0: rl. w0      f40.            ; start implied:
          al  w1       0              ;
          se. w1      (f15.)          ;   if iocount<>0 then
          jl. w3      e3.             ;   outbyte(iocall);comment readcall
          rs. w1      f15.            ;   or writecall;
          bl. w0      f2.             ;   iocount:=0; w0:=controlword part4;
          se  w0       0              ;   if w0<>0 then
          jl. w3      e3.             ;   outbyte(w0);comment implbegin
          se  w0      h11+0           ;   or parcount in which case
          jl.         c80.            ;   endio was input;
                                      ;   if w0=parcount then
          al  w0      0               ;   begin
          jl. w3      e3.             ;    outbyte(0);
          rl. w0      f40.            ;    outbyte(iocall);
          jl. w3      e3.             ;   end;
          jl.         c80.            ;   goto new inbyte;

  e.

     c46: jl. w3      d4.             ; declare ext zone:
          jl. w3      d16.            ;   stack and output opnd;
          al  w3  x3  -8              ;   get params(extno,receivekind);
          rs. w3      f3.             ;   outbyte(inbyte);
          jl. w3      e2.             ;   comment decl ext zone
          al  w0  x2                  ;   consists of 3 bytes.only
          jl. w3      e3.             ;   2 is output in
                                      ;   stack and output opnd;
                                      ;   oprtstackpoint:=oprtstackp
          rl. w0      (f4.)           ;   -8;comment pamdescriptions are
          se  w0  x1                  ;   removed from the stack;
          jl. w2      d27.            ;   if receivekind<>zone then
          jl.         d31.            ;   standard zone error;
                                      ;   goto remove opnd;

     c47: jl. w3      d4.             ; area arr zone param:
          rl. w0      f11.            ;   stack and output opnd;
          jl. w3      e3.             ;   outbyte(paramarea);
          rl. w1      f42.            ;
          bl  w0      2               ;
          jl. w3      e3.             ;   outbyte(no.labels in unit);
          bl  w0      3               ;
          jl. w3      e3.             ;   outbyte(no.globals in unit);
          rl. w0      f37.            ;
          jl. w3      e3.             ;   outbyte(no.externals);
          jl.         d31.            ;   goto remove opnd;

     c48: al  w0      1               ; data star:
          rs. w0      f30.            ;   mult data:=1;
          jl.         d31.            ;   goto remove opnd;

     c49: al  w0       3              ; array data:
          am.         (f4.)           ;
          dl  w2      2               ;
          jl. w3      d18.            ;   conv oprt2(top,nexttop,3);comment
          al  w0       0              ;   treated as unstacking of assign;
          rx. w0      f30.            ;   w0:=mult data; mult data:=0;
          ba. w0      f2.             ;   w0:=w0+ control word part4;
          jl. w3      e3.             ;   outbyte(w0);
          jl.         d31.            ;   goto remove opnd;

     c50: rl. w2      f14.            ; end statement:
          rs. w2      f4.             ;   opnd stackpoint:= opnd bottom;
          jl.         c80.            ;   goto new inbyte;

     c51: jl. w3      e1.             ; end line:  count line;
          al  w3       0              ;
          rs. w3      f8.             ;   no.operands in line:= 0;
          jl.         c80.            ;   goto new inbyte;

     c52: rl. w2      e9.+4           ; begin unit:
          rs. w2      f4.             ;    opndstackpoint:=opnd bottom:=
          rs. w2      f14.            ;    last work for pass;
        rl. w2      f12.             ; set bottom
        rs. w2      (f4.)            ; operand undefined
          al  w2      0               ;
          rs. w2      f43.            ;   zoneornot:=0;
          rs. w2      f8.             ;   no.operands in line:=0;
          rs. w2      f34.            ;   page:=0;
          rs. w2      f11.           ;   paramarea := 0;
          rs. w2      f23.            ;   end error labels:=
          rs. w2      f36.            ;   end nulls := 0;
          al  w3      -12             ;   head address:=
          wm. w3      f31.            ;   head address-12*no.entries;
          wa. w3      f17.            ;   comment no.entries in
          rs. w3      f17.            ;   previous unit;
          jl. w3      d42.            ;   get proctype;
          al  w3      2               ;   comment w1:=proctype;
          sn  w1      0               ;   if proctype=program then
          rs. w3      f44.            ;   proginf:=2;
          rl. w1      f20.            ;   w1:=end global;
          al  w2      1000            ;   line no.:=infinite;
          rs. w2      f32.            ;
          jl.         d30.            ;   goto adjust oprt point;
     c53: jl. w3      e2.             ; call: no.list elements:=
          rs. w2      f5.             ;   inbyte;
          al  w1      1<6             ;   top operand:=top operand
          lo. w1      (f4.)           ;   +notype;
          rs. w1      (f4.)           ;
          jl.         c34.            ;   goto begin proc list;

     c54: rl. w0      f44.            ; end pass:
          jl. w3      e3.             ;   outbyte(progin);
          jl.         e7.             ;   call next pass;


  b.  b0                              ; table  relationart holds for each
                                      ; relation a byte with art<3;

  h.b0:  1<3,3<3,2<3,6<3,4<3,5<3      ; lt,le,eq,ge,gt,ne

 w.  c55: ac  w1      i16             ; relation:
          wa. w1      f18.            ;   w1:=last operand-.lt.bytevalue;
          bl. w1  x1  b0.             ;   oprtstack(top part4):=
          hs. w1      (f3.)           ;   relationart(w1);
          jl.         c17.            ;   goto dyadic input;
  e.

     c56: al  w2      i17             ; data init:inputbyte:=data array;
          jl.         d1.             ;   goto fetch control entry;

     c57: jl. w2      d24.            ; errors:   error record;
          jl.         c80.            ;   goto new inbyte;

  b.    b0                            ; unknown record:

  w.  b0: <: unknown record to pass6<0>:>

     c58: al. w1      b0.             ;   message(<:unknown record to pass6);
          jl. w3      e4.             ;
          rl. w0      f18.            ;   writeinteger(last operand);
          jl. w3      e14.            ;
              32<12+5                 ;
         al  w1      -2000           ;
         al  w3      2               ; set
         rs. w3  x1  +e87.+2000      ; warning.yes
          jl.         c80.            ;   goto new inbyte;

  e.
     c59: jl.w3      e2.              ; globals and labels:
          hs  w2      2               ;   no.labels in unit:=inbyte;
          jl. w3      e2.             ;
          hs  w2      3               ;   no.globals in unit:=inbyte;
          rs. w1      f42.            ;
          jl.         c80.            ;   goto new inbyte;


  ; unstacking actions  specified with c-names starting with c60.
  ;     a-and b-names used as in stacking actions
  ;     algol names are marked  uns


     c60: la. w1      f25.            ; monadic oprt uns: operand:=w1 and
          lo. w1      f26.            ;   all typemask  +expresskind;
          jl.         d35.            ;   goto store operand;

     c61: am           1              ; assign uns: oprtclass:=3;
                                      ;   goto conv call;
     c62: am           1              ; arith oprt uns: oprtclass:=2;
                                      ;   goto conv call;
     c63: am           1              ; logical dyadic uns: oprtclass:=1;
                                      ;   goto conv call;
     c64: al  w0       0              ; exponent uns: oprtclass:=0;

          jl. w3      d17.            ; conv call: conv oprt1(top,nexttop,
          jl.         d35.            ;   oprtclass);
                                      ;   goto store operand;

     c65: rl. w1      (f4.)           ; shift uns: w1:=opndstack(opndstack
          jl.         c79.            ;   print);goto bit actions;comment
                                      ;   w1 is left operand of shift;


  ;   relation unstacking:
  ;     output consists of 2 bytes,
  ;       1) rel          , output in this action
  ;       2) ifrelart  or  relart   ,output in bit actions   with
  ;
  ;         ifrelart::= 1<10 +art<3 +type ;if statement with one relation
  ;         relart  ::= 0<10 +art<3 +type ;usual relation in expressions
  ;
  ;         art<3 is specified as outvalue in the oprtstack item
  ;     the choice between  relart  and   ifrelart   is made as:
  ;
  ;     maybe relif             :   y         y       n       n
  ;     endlogif in control word:   y         n       y       n
  ;     ----------------------------------------------------------
  ;     output                  : ifrelart  relart  relart  relart
  ;
  ;     the boolean mayberelif becomes true when logif is stacked and
  ;     false when a logical oprt or endlogif is stacked;


     c66: al  w0      2               ; relation uns:
          jl. w3      d17.            ;   conv oprt1(top,nexttop,2);
          al  w0      h15+0           ;
          jl. w3      e3.             ;   outbyte(rel);

          sn. w1      (f12.)          ;   if operand=undefined then
          jl.         d35.            ;   goto store operand;
          al  w3      1<7+1<5         ;   opndstack(top):=
          rs. w3      (f4.)           ;   logical expression;
          am           1              ;
          bl. w2      f0.             ;   w2:=control word part2; comment
          al  w0      1<10            ;   w2=-1 if endlogif in control word;
          sn. w0      (f9.)           ;   if -,(mayberelif and w2=-1)
          se  w2      -1              ;   then
          jl.         c79.            ;   goto bit actions;
                                      ;   comment  second byte is  ifrelart;
          rs. w0      f28.            ;   noifoutput:=true;comment when if
          ba. w0      (f3.)           ;   is unstacked no byte is output;
          hs. w0      (f3.)           ;   oprtstack(top part4):=
          jl.         c79.            ;   oprtstack(top part4)+1<10;
                                      ;   goto bit actions;

     c67: al  w0       0              ; if uns:
          sn. w0      (f28.)          ;   if -, noifoutput then
          jl.         c79.            ;   goto bit actions;comment usual act;
          am.         (f3.)           ;   oprtstack(top part1):=0;comment
          hs  w0      -4              ;   the purpose is to set output-and
          jl.         c79.            ;   modify bit to zero;
                                      ;   goto bit actions;

     c68: rl. w1      f4.             ; end arith if uns:
          al  w1  x1  +6              ;   opndstack point:=opndstackpoint+6;
          rs. w1      f4.             ;   comment removes 3 labelno.s;
          jl.         c79.            ;   goto bit actions;

     c69: rl. w1      (f27.)          ; index uns:
          al  w1  x1  -2              ;   w1:=word(rangepointer):=
          rs. w1      (f27.)          ;       word(rangepointer)-2;comment
          jl. w3      d6.             ;   w1 holds the address of next range;
          al  w0      h22+26          ;   out rangevalue(w1);
          jl. w3      e3.             ;   outbyte(multiply integer);
          jl.         c79.            ;   goto bit actions;

  ;   array left uns:
  ;   rangedescriptions ending with an endrange oprt is stacked just below
  ;   the array-left oprt, and they must be removed as we want no dopevector
  ;   output for subscripted variables

     c70: rl. w3      f3.             ; array left uns:w3:=oprtstackpoint;
          rl  w2  x3  -12             ;
          ls  w2       1              ;   w2:=oprtstackpoint- (no.ranges*2+6);
          ac  w2  x2  +6              ;   comment new oprtstackpoint-value;
          wa  w2       6              ;
          dl  w1  x3                  ;
          ds  w1  x2                  ;   oprtstack(w2):=
          rl  w1  x3  -4              ;   oprtstack(w3);
          rs  w1  x2  -4              ;
          rs. w2      f3.             ;   oprtstackpoint:=w2;
          rl. w1      (f4.)           ;   w1:=top operand;
          jl.         c79.            ;   goto bit actions;

  b.  a1                              ;
                                      ;
 w.  c71: al  w0      h12+0           ; range uns:comment output of dope-
          jl. w3      e3.             ;   vector;
          rl. w0      f6.             ;   outbyte(start range);
          jl. w3      e3.             ;   outbyte(no.dimensions);
          rl. w2      f10.            ;   w2:=oldpointer;comment value of
          al  w1  x2  +2              ;   oprtstackpoint before ranges was
                                      ;   stacked;
      a0: am.         (f3.)           ;   for w1:=w2+2 step 1 until
          sn  w1      -6              ;     oprtstackpoint-6  do
          jl.         a1.             ;
          bl  w0  x1                  ;     outbyte(byte(w1));
          jl. w3      e3.             ;
          al  w1  x1  +1              ;
          jl.         a0.             ;
      a1: rs. w2      f3.             ;   oprtstackpoint:=oldpointer;
          jl.         d2.             ;   goto priority check;
  e.

     c72: rl. w1      f18.            ; param descr uns:
          sn  w1      44              ;   if last opnd=call then
          jl.         d3.             ;   goto test control word;
          rl. w1      f3.             ;
          al  w1  x1  -14             ;   oprtstackpoint:=
          rs. w1      f3.             ;   oprtstackpoint-14;
          jl.         d2.             ;   goto priority check;

     c73: jl. w3      d26.            ; comp goto uns:  integer conv2;
          al  w0      h14+4           ;
          jl. w3      e3.             ;   outbyte(gotoc);
          rl. w0      f7.             ;
          jl. w3      e3.             ;   outbyte(no.labels);
          jl.         c79.            ;   goto bit actions;
  ;  stacking actions for troub comma  and  end troub list:

     c74: al. w1      f38.            ; troub comma: parampointer:=
          rs. w1      f27.            ;   general spec pointer;
          jl.         c39.            ;   goto param comma;

     c75: al. w1      f38.            ; end troub list:parampointer:=
          rs. w1      f27.            ;   general spec pointer;
          jl.         c43.            ;   goto end proc list;

     c76: jl. w3      e2.             ; do:
          rs. w2      f18.            ;   last operand:=do label;
          rl. w2      f8.             ;
          al  w2  x2  +1              ;   no.operands:=no.operands+1;
          rs. w2      f8.             ;
          jl. w3      d15.            ;   label check;
          jl.         c80.            ;   goto new inbyte;

  b.  b0                              ; return
  ;   table unitkind holds for each possible proctype-value of current
  ;   unit some returninformation used in pass 8;

                                      ; proctype
  h.  b0:             0               ;  0:  program
                      0               ;  1:  subroutine
                      1               ;  2:  logical function
                      1               ;  3:  integer function
                      1               ;  4:  real    function
                      1               ;  5:  long    function
                      2               ;  6:  double  function
                      2               ;  7:  complex function

  w. c77: jl. w3      d42.            ; return:get proctype;
                                      ;   comment w1=proctype;
          bl. w0  x1  b0.             ;   w0:=unitkind(proctype);
          wa. w0      f43.            ;   w0:=w0+zoneornot;
          jl. w3      e3.             ;   outbyte(w0);
          jl.         c80.            ;   goto new inbyte;
  e.

     c78: al  w0      1<2             ; local zone decl:
          rs. w0      f43.            ;   zoneornot:=1shift 2;
          jl.         c8.             ;   goto copy fixed lenght;


    ; bit actions:  part1 of top operator is decoded and actions according
    ;               to the bits are executed; finally the operator is
    ;               removed.

    ; table modify: holds for each type a number to be added to the outbyte-
    ;               value if modify-bit =1;

    h.g4: 2,  4,  3,  5  ; integer, long,real,double
          6,  1,  0,  7  ; complex, logical,notype,undefined

  b.  a2                              ;

 w.  d35: rs. w1      (f4.)           ; store operand:opndstack(top):=w1;

     c79: am.         (f3.)           ; bit actions:comment w1 holds operand;
          bz  w2      -4              ;   w2:=oprtstack(top part1);
          so  w2       1              ;   if modify output bit=0 then
          jl.         a0.             ;   goto ask for result;
          al  w0      1<6-1           ;
          la  w1      0               ;   w1:=type bit numb(operand and
          bl. w1  x1  g5.             ;   all type mask); comment type
                                      ;   represented as a number<8;
          bl. w0  x1  g4.             ;   w0:=modify(w1);
          ba. w0      (f3.)           ;
          jl. w3      e3.             ;   outbyte(w0+oprtstack(top part4));

      a0: so  w2      1<4             ; ask for result: if noresult bit=1
          jl.         a1.             ;     then
          rl. w1      f4.             ;     opndstackpoint:=
          al  w1  x1  +2              ;     opndstackpoint+2;
          rs. w1      f4.             ;

      a1: so  w2      1<3             ;   if output self bit=1 then
          jl.         a2.             ;
          bz. w0      (f3.)           ;   outbyte(oprtstack(top part4));
          jl. w3      e3.             ;

      a2: rl. w1      f3.             ;   oprtstackpoint:=
          al  w1  x1  -6              ;   oprtstackpoint-6;
          rs. w1      f3.             ;
          so  w2      1<2             ;   goto(if terminate unstack.bit=0
          jl.         d2.             ;   then priority check
          jl.         d3.             ;   else test control word);

  e.

; global variables

w.  f0:              0                ; control word  part1<12 +part2
    f1:              0                ; control word  part3
    f2:              0                ; control word  part4<12 +part5
    f3:              0                ; oprt stack pointer
    f4:              0                ; opnd stack pointer
    f5:              0                ; no. list elements
    f6:              0                ; no. dimensions
    f7:              0                ; no. labels
    f8:              0                ; no. operands
    f9:              0                ; maybe relation-if
   f10:              0                ; oldpointer
   f11:              0                ; paramarea
   f12:           1<20-1              ; undefined
   f13:              0                ; special do
   f14:              0                ; opnd bottom
   f15:              0                ; iocount
   f17:              0                ; head address
   f18:              0                ; last operand
   f19:              0                ; global base
   f20:              0                ; end global
   f21:              0                ; glob ref base
   f22:              0                ; err label base
   f23:              0                ; end err labels
   f24:              0                ; error mess;
   f25:            1<7-1              ; all type mask
   f26:            1<7                ; expresskind;
   f27:              0                ; rangepointer, parampointer
   f28:              0                ; no ifoutput
   f29:              0                ; end ranges in decl.
   f30:              0                ; mult data
   f31:              0                ; no.entries
   f32:                0              ; line no.
   f33:               50              ; lines pr page
   f34:                0              ; page
   f35:                0              ; null base
   f36:                0              ; end nulls
   f37:              0                ; no.externals
   f38:               0               ; general spec pointer
   f39:               40<12           ; general spec
   f40:               0               ; iocall
   f41:               0               ; ioparammask
   f42:               0               ; globals and labels
   f43:               0               ; zoneornot
   f44:               1               ; proginf

  ; table   type bit numb:
  ;       it is used to convert the usual typerepresentation for operands
  ;       ,i.e. one of the bits 17-23 equal to 1, to an integer
  ;       =23-bit no.for type.
  ;       an undefined gives the result 8.
  ;       only 6 bits are used,i.e. no.type is represented with 000000

  h.  g5:   6,  0,  1,  0,  2,  0,  0,  0; no.type,integer,long,0,real,0,0,0
            3,  0,r.7,  4,  0,r.15, 5,  0; double, 7*0,complex,16*0,logical
            r.30,7                       ; 30*0,undefined
 w.  d36: jl.         e2.             ; stepping stone for inbyte;
     d37: jl.         e3.             ; stepping stone for outbyte;
     d38: jl.         e4.             ; stepping stone for message;
     d39: jl.         e14.            ; stepping stone for writeinteger;
     d40: jl.         e13.            ; stepping stone for writetext;
     d41: jl.         e5.             ; stepping stone for alarm;


      d0: al. w1      e10.            ; stack owerflow:w1:=<:stack:> addr;
          jl. w3      e5.             ;   alarm;

  ; central logic
  ;     an inputbyte causes an entry from  inputtable to be stored in
  ;     control word.
  ;       the control word-priority is tested against the top-operand
  ;     and as a result the top operand can be unstacked,starting with
  ;     action unstacking  and continuing with the action name stored
  ;     in part4.
  ;       if control word priority is the highest one, actions according
  ;     to bits in part1 and action-name in part4 takes place.

  b.  a4                              ;

 w.  c80: jl. w3      e2.             ; new inbyte:
          rs. w2      f18.            ;   last operand:=w2:=inbyte;
          sh  w2      177             ;   if w2<=type independent value then
          jl.         d1.             ;   goto fetch control entry;
          al  w2  x2  -170            ;   comment w2 is an operand or label;
          ls  w2      -3              ;   w2:=kind of operand;comment 0<w2<16;
          sl  w2      42              ;   if w2>=42 then w2:=labelentry;
          al  w2      i15             ;   comment labelno.s start with
                                      ;   bytevalue 512;

      d1: bl. w2  x2  g17.            ; fetch control word:
          am.         g17.            ;   stepping stone
          dl  w1  x2  i23             ;   pointer:=inputentries(w2);
  ; i23=g19-g17
          ds. w1      f2.             ;
          am.         g17.            ;   control word:=inputtable(pointer);
          rl  w2  x2  i25             ;   comment control word consists of
          rs. w2      f0.             ;   3 words;

      d2: am.         (f3.)           ; priority check:
          rl  w0      -4              ;   w0:=part1 part2 of top operator;
          rl. w2      f0.             ;   w2:=part1 part2 of control word;
          sl  w0  x2                  ;   comment priority in part1;
          jl.         a2.             ;   if w0>=w2 then goto unstacking;

      d3: bz. w0      f0.             ; test control word:
          so  w0      1<1             ;   w0:=control word part1;
          jl.         a0.             ;   if stack bit=1 then
          rl. w1      f3.             ;   begin comment an operator is to
          al  w1  x1  +6              ;     be stacked in oprtstack;
          sl. w1      (f4.)           ;     oprtstackpoint:=oprtstackpoint+6;
          jl.         d0.             ;     if oprtstackpoint>=opndstackpoint
          rs. w1      f3.             ;     then goto stack owerflow;

          bz. w2      f2.             ;     w2:=control word part4;
          dl. w0  x2  g18.            ;
          ds  w0  x1                  ;

          am          -4              ;     oprtstack(top):=
          rl. w0  x2  g18.            ;     operatortable(w2);
          rs  w0  x1  -4              ;
          bz. w0      f0.             ;   end;

      a0: so  w0      1               ;   if output self bit=1 then
          jl.         a1.             ;
          bz. w0      f2.             ;   outbyte(control word part4);
          jl. w3      e3.             ;

      a1: bl. w2      f2.+1           ;   goto stacking action(
          jl.     x2  c80.            ;       control word part5);
                                      ;   comment w1 contains oprtstackpoint;

      a2: am.         (f3.)           ; unstacking:
          bz  w0      -4              ;   w0:=part1 of top operator;
          rl. w2      f4.             ;   if nexttop result bit=1 then
          so  w0      1<5             ;   begin
          jl.         a3.             ;     opndstackpoint:=opndstackpoint+2;
          al  w2  x2  +2              ;     w1:=opndstack(opndstackpoint-2);
          rs. w2      f4.             ;   end
          am          -2              ;   else
      a3: rl  w1  x2                  ;     w1:=opndstack(opndstackpoint);
          so  w0      1<6             ;   if typecheck bit=1 then
          jl.         a4.             ;   begin

          am.         (f3.)           ;     w0:=part3 of top operator;
          rl  w0      -2              ;     comment operand mask;
          jl. w3      d10.            ;     check opnd;
          sn. w1      (f12.)          ;     if result operand=undefined then
          jl.         d35.            ;     goto store operand;
                                      ;   end;
      a4: am.         (f3.)           ;
          bl  w2       1              ;   goto unstacking action(part5 of
          jl.     x2  c80.            ;   top operator);
                                      ;   comment w1 contains result operand;
  e.

  b.  a0,b1                           ;procedure stack and output opnd;
  ; the procedure has 2 entries, stack and output opnd
  ;                         and  copy opnd descr,   called as:
  ;       jl. w3      d4.   and
  ;       jl. w3      d5.

  ; in both cases the byte value in control word,part4  is output  ,
  ; followed by a number of bytes, copied from input.
  ;   the number of bytes is in the first case found in control word,
  ; part2  and for entry copy opnd descr as the next inputbyte.
  ;   when entry stack and output opnd is used,an operand-description,
  ; taken from control word,part3 and a type-dependent part from table
  ; opnd types is stacked in operand stack;

  ; registeruse:
  ;     entry                 exit
  ;     w3: returnaddress     all registers undefined

  ; globals used:
  ;     f0,f1,f2,f8,f18

  ; local variables

 w. b0:                0              ; return address
    b1:                7              ; opnd type mask

  ; table opnd types:
  ; it contains for each poss.type of operands a byte, holding a
  ; pattern that added to part3 of an inputtable-entry form the total
  ; operand-description to be stored in operand stack

  h. g6:      2.1000000               ; notype
              2.0100000               ; logical
              2.0000001               ; integer
              2.0000100               ; real
              2.0000010               ; long
              2.0001000               ; double
              2.0010000               ; complex
              2.0                     ; no change of inputtable-entry

  ;entry:

w.d4:     rs. w3      b0.             ;   save return address;
          rl. w1      f4.             ;   opnd stack point:=
          al  w1  x1  -2              ;   opnd stack point-2;
          sh. w1      (f3.)           ;   if opnd stack point <=oprt stack
          jl.         d0.             ;   point  then goto stack owerflow;
          rs. w1      f4.             ;
          rl. w2      f18.            ;
          al  w2  x2  -170            ;   opnd stack(opnd stack point):=
          la. w2      b1.             ;   control word part3 +
          bz. w2  x2  g6.             ;   opnd types(type part of inputbyte);
          lo. w2      f1.             ;
          rs  w2  x1                  ;

          rl. w1      f8.             ;   no.operands in line:=
          al  w1  x1  +1              ;   no.operands in line +1;
          rs. w1      f8.             ;
          bz. w0      f2.             ;
          jl. w3      d37.            ;   outbyte (control word part4);
          bz. w1      f0.+1           ;   w1:=control word part2;
          jl.         a0.             ;   goto next opnd byte;

  d5:     rs. w3      b0.             ; copy opnd descr: save returnaddress;
          bz. w0      f2.             ;
          jl. w3      d37.            ;   outbyte (control word part4);
          jl. w3      d36.            ;
          al  w1  x2                  ;   w1:=w0:=inbyte;
          al  w0  x2                  ;
          jl. w3      d37.            ;   outbyte (w0);

    a0:   sn  w1       0              ; next opnd byte:
          jl.         (b0.)           ;   if w1<>0 then
          jl. w3      d36.            ;   begin
          al  w0  x2                  ;     outbyte(inbyte);
          jl. w3      d37.            ;     w1:=w1 -1;
          al  w1  x1  -1              ;     go to next opnd byte
          jl.         a0.             ;   end;
                                      ;   return;
  e.

  b.                                  ; procedure get proctype;

  ;   the procedure is called as
  ;       jl. w3      d42.
  ;   it gets the value of proctype for this unit by means of
  ;   head address,that is supposed to point at the relevant entry
  ;   in global entry table.head address is set in <begin unit>.

  ;   registeruse: entry: w3=return address
  ;                exit : w1=proctype
  ;   globals: f17,f44

  w. d42: am.         (f17.)          ; get proctype;
          bz  w1      8               ;   proctype:=byte(head
          ls  w1      -6              ;   address+8)shift-6;
          al  w1  x1  -32             ;
          jl      x3                  ; return;

  e.

  b.  a0,b0                           ; procedure out range value(r address);
  ;   the procedure is called when a range description is
  ;   to be output as one operand,f.ex. in evaluating index-expressions
  ;   for subscripted variables, and the call is
  ;       jl. w3      d6.

  ;   at entry-time w1 holds r address, i.e. the abs. address of the word
  ;   holding the range-description.
  ;   depending on the content the range will be output as an integer
  ;   constant or a simple local of integer type

  ; registeruse:
  ;       entry                       exit
  ;       w1: r address         w1,w2 unchanged
  ;       w3: return address    w0,w3 undefined

  ; local variables
  w.  b0:            0                ;  return address

  ; entry

    d6:   rs. w3      b0.             ;   save returnadress;
          rl  w3  x1                  ;   range:= word(r address);
          al  w0      h5+0            ;   w0:=simple local;
          sh  w3      -1              ;   if range<0 then
          jl.         a0.             ;   go to range bytes;
          al  w0      h6+2            ;
          jl. w3      d37.            ;   outbyte(int constant);
          bl  w0  x1                  ;   w0:= range(0:11);

      a0: jl. w3      d37.            ;   outbyte(w0);
          bl  w0  x1  +1              ;
          jl. w3      d37.            ;   outbyte(range(12:23));
          jl.         (b0.)           ;   return;

  e.

  b.  a0                              ; procedure adjust upplow

  ;   it is called from action decl array param,when new upper and
  ;   lower is calculated for adjustable arrays, and it finishes
  ;   the reverse polish form for calculation by outputting
  ;   range(n-1) to  range(1)     with each range followed by * and +.

  ;   globals : f28

  ;   registeruse:
  ;       entry: w2=return address;  exit  w2 unchanged

 w. d7:   rl. w1      f29.            ;   for rangeaddress:=
                                      ;     end ranges in decl-2 step -2
      a0: al  w1  x1  -2              ;     until  oprt stack point+2 do
          sn. w1      (f3.)           ;     begin
          jl      x2                  ;       out range value(range address);
          jl. w3      d6.             ;
          al  w0      h22+26          ;       outbyte (multiply integer);
          jl. w3      d37.            ;
          al  w0      h22+18          ;       outbyte (dya plus integer);
          jl. w3      d37.            ;     end;
          jl.         a0.             ;     return

  e.

  b.  b0                              ; procedure check top operand

  ;   it checks the top operand description against the mask
  ;   in control word part3 by calling check opnd, and changes
  ;   the kind to  express-kind .   the call is:
  ;       jl. w1      d9.             ;

  ;   registeruse:
  ;     entry: w1=returnaddress ; exit: w1=result operand

  ;   globals used: f1,f4,f12,f25,f26

  ;   local variable:

 w.   b0:          0                  ; returnaddress

    d9:   rs. w1      b0.             ;   save return address;
          rl. w1      (f4.)           ;   w1:=opnd stack(opnd stack point);
          rl. w0      f1.             ;   w0:=control word part3;
          jl. w3      d10.            ;   check opnd; comment w1 contains
          se. w1      (f12.)          ;   masking result;
          la. w1      f25.            ;   if w1<>undefined then w1:=
          lo. w1      f26.            ;   w1 and alltypemask+expresskind;
          rs. w1      (f4.)           ;   opnd stack(opnd stack point):=w1;
          jl.         (b0.)           ;   return;

  e.

  b.  a1,b0                           ; procedure check opnd;

  ;     it performs a check of the operand in w1 against the
  ;     operand mask in w0, and calls type error if type or
  ;     kind error.
  ;     check opnd is called as:
  ;       jl.   w3      d10.

  ;     registeruse:
  ;         entry                 exit
  ;         w0  operand mask      undefined
  ;         w1                    w0 and w1(or global undefined  if error)
  ;         w2                    undefined
  ;         w3  return address    undefined

  ;     globals:  f12

  ;     local variable:

 w.   b0:            0                ; return address

    d10:  rs. w3      b0.             ;   save return address
          sn. w1      (f12.)          ;   if operand=undefined then
          jl.         (b0.)           ;   return;
          la  w1       0              ;   w1:= operand and operand mask;
          sz  w1      127             ;   if type correct then
          jl.         a1.             ;   goto kind check;

      a0: jl. w2      d19.            ; operand error:  type error;
          rl. w1      f12.            ;   w1:=undefined;
          jl.         (b0.)           ;   return;

      a1: sh  w1      127             ; kind check: if kind incorrect then
          jl.         a0.             ;   goto operand error;
          jl.         (b0.)           ;   return;

  e.

  ; table parammask contains for every formal param-specification,
  ;   with values as in  notes on code procedures in algol 5 ,
  ;   an operand mask to be used during param-checking
  ;   the first two bits hold the columnindex to table paramkind
  ;                 param-mask            paramspecification
    g7=k-4                            ;
  w.      2.100000000000001110100000  ; 2:  boolean name
          2.100000000000001110000001  ; 3:  integer name
          2.100000000000001110000100  ; 4:  real    name
          2.100000000000001110000010  ; 5:  long    name
          2.100000000000001110001000  ; 6:  double  name
          2.100000000000001110010000  ; 7:  complex name
          2.010000001001000000000100  ; 8:  zone
          2.              1110000010  ; 9:  string
          2.                       0  ; 10: label
          2.                       0  ; 11
          2.100000000000001110100000  ; 12: boolean value
          2.100000000000001110000101  ; 13: integer value
          2.100000000000001110000101  ; 14: real    value
          2.100000000000001110000010  ; 15: long    value
          2.100000000000001110001000  ; 16: double  value
          2.100000000000001110010000  ; 17: complex value
          2.100000000000001110100000  ; 18: boolean address
          2.100000000000001110000001  ; 19: integer address
          2.100000000000001110000100  ; 20: real    address
          2.100000000000001110000010  ; 21: long    address
          2.100000000000001110001000  ; 22: double  address
          2.100000000000001110010000  ; 23: complex address

  ;           param-mask                  paramspecification

          2.010000001111001000100000  ; 24: boolean array
          2.010000001111001000000001  ; 25: integer array
          2.010000001111001000000100  ; 26: real    array
          2.010000001111001000000010  ; 27: long    array
          2.010000001111001000001000  ; 28: double  array
          2.010000001111001000010000  ; 29: complex array
          2.100000010000000000000100  ; 30: zone array
          2.010000100000000001000000  ; 31: no type procedure
          2.010001000000000000100000  ; 32: boolean procedure
          2.010001000000000000000001  ; 33: integer procedure
          2.010001000000000000000100  ; 34: real    procedure
          2.010001000000000000000010  ; 35: long    procedure
          2.010001000000000000001000  ; 36: double  procedure
          2.010001000000000000010000  ; 37: complex procedure
          2.                       0  ; 38
          2.    11111111001111111111  ; 39: general
          2.    11111111001111111111  ; 40: general address
          2.    11111111001111111111  ; 41: undefined

  b.                                  ; procedure actual versus formal

  ;   the procedure is called as:
  ;       jl. w3      d11.

  ;   it picks up an operand-mask from table parammask according to the
  ;   formal paramdescription in byte(parampointer) and checks it against
  ;   the top operand,i.e. actual param, during a call of check param.

  ;   registeruse:
  ;     entry:  w3=return address   ; exit: all undefined

  ;   globals: f27





 w.  d11: rl. w1      (f27.)          ;   paramdescr:=byte(word(parampoint));
          bl  w2  x1                  ;
          sl  w2      39              ;   if paramdescr<>general then
          sl  w2      41              ;
          al  w1  x1  -1              ;   word(parampoint):=
          rs. w1      (f27.)          ;   word(parampoint)-1;
          ls  w2       1              ;
          rl. w0  x2  g7.             ;   w0:=parammask(paramdescr);
          jl.         d12.            ;   check param; return;
  e.

  b.  a1,b4                           ; procedure check param

  ;   the procedure is called as
  ;       jl. w3      d12.

  ;   it checks the top operand,i.e. an actual param, against a mask
  ;   found in w0 at entry time and stores in part4 of top operator
  ;   the resulting parameterkind, found by table lookup in table
  ;   paramkind with an indexvalue obtained from table actual paramkind
  ;   by means of the param-masking result,and the columnindex
  ;   contained in bit(0:1) in w0 at entry.

  ;   registeruse:
  ;     entry: w3=return address        exit: all undefined
  ;            w0=operand mask

  ;   globals used: f3,f4

  ;   local variables:

 w.   b0:            0                ; return address
      b1:            0                ; mask
      b2:            9                ; nine
     b3:  2.     1000000000100000000; function+simple
     b4:  2.111110011111111111111111; remove function+subroutine

  ; table  actual paramkind holds for each operandkind an index to
  ; first part of table paramkind
  ;
  h.g8:        0       ,     0        ;   expression ,  simple
               1       ,     0        ;   subscripted,  labelname
               7       ,     4        ;   label      ,  zoneindic
               2       ,     2        ;   array      ,  array eq zone
               3       ,     5        ;   zone       ,  zone array
               6       ,     6        ;   subroutine ,  function
               8                      ;   undefined

  ; table paramkind holds for each actual-formal combination the resul-
  ; ting paramkind-bytevalue
  ;
  ;                     actual             formal               bytename

  h.g9:  h27+0     ;  expressions  ,                 general , paramsim
         h27+0     ;  subscripted  ,  -    -     -      -    , paramsim
         h27+16    ;  array        ,  -    -     -      -    , paramarr
         h9+0-3    ;  zone         ,  -    -     -      -    , paramzone
         h9+0-3    ;  zoneindic    ,  -    -     -      -    , paramzone
         h9+0-3    ;  zonearray    ,  -    -     -      -    , paramzone
         h27+24    ;  procedure    ,  -    -     -      -    , paramproc
         h27+0     ;  label        ,  -    -     -      -    , paramsim
         h27+0     ;  undefined    ,  -    -     -      -    , paramsim

  ;                   actual            formal          bytename
           0       ;  expressions  , proc-zone-array ,     -
         h27+8     ;  subscripted  ,    -   -    -   , paramsub
         h27+16    ;  array        ,    -   -    -   , paramarr
         h9+0-3    ;  zone         ,    -   -    -   , paramzone
         h9+0-3    ;  zoneindic    ,    -   -    -   , paramzone
           0       ;  zonearray    ,    -   -    -   ,      -
         h27+24    ;  procedure    ,    -   -    -   , paramproc
           0       ;  label        ,    -   -     -  ,      -
         h27+0     ;  undefined    ,    -   -    -   , paramsim


  ;                   actual            formal            bytename
         h27+0     ; expressions   , simple-zonearray  ,  paramsim
         h27+0     ; subscripted   ,   -        -      ,  paramsim
           0       ; array         ,   -        -      ,     -
           0       ; zone          ,   -        -      ,     -
         h9+2-3    ; zoneindic     ,   -        -      ,  paramzinzar
         h9+1-3    ; zonearray     ,   -        -      ,  paramzarr
           0       ; procedure     ,   -        -      ,
           0       ; label         ,   -        -      ,
         h27+0     ; undefined     ,   -        -      ,  paramsim


  ; entry

  w.d12:  rs. w3      b0.             ;   save returnaddress;
          rs. w0      b1.             ;   mask:=w0;
          rl. w1      (f4.)           ;   w1:=top operand;
          jl. w3      d10.            ;   check opnd;
          se. w1      (f12.)          ;   if result=undefined then
          jl.         a0.             ;   begin
          rs. w1      b1.             ;    mask:=undefined;
          rl. w1      (f4.)           ;    result:=top operand;
                                      ;   end;

     a0: so  w1      1<6            ;   if not notype
         so. w1      (b3.)          ;   and function+simple then
         jl.         a1.            ;
         la. w1      b4.            ;     remove function+subroutine bits;
      a1: ns  w1      5               ;   kindentry:=actparam(bit no.
          bl  w2      5               ;   for leftmost opndresult-bit);
          al  w2  x2 +15              ;
          bl. w2  x2  g8.             ;
          rl. w1      b1.             ;
          al  w0      0               ;   kindentry:=kindentry+
          ld  w1      2               ;   9*columnindex;
          wm. w0      b2.             ;
          wa  w2      0               ;
          bl. w0  x2  g9.             ;   operator stack(top part4):=
          hs. w0      (f3.)           ;   paramkind(kindentry);
          jl.         (b0.)           ;   return
  e.

  b.  a0                              ; procedure define name

  ;   the procedure is called as:
  ;       jl. w3      d13.

  ;   it searchs through operator stack to find an operator with
  ;   namegiving bit=1 and holds at exit time namekind in w2,picked
  ;   up from part2 of this operator.
  ;     at the same time rangepointer (same as parampointer) is initi-
  ;   ated to point at part2 of the operator just below the searched one

  ;   registeruse:
  ;     entry: w3=returnaddress  ;exit:w2=namekind ,w3 is unchanged
  ;                                    w1=rangepointer

  ;   globals:  f3,f27


 w. d13:  rl. w1      f3.             ;   w1:=oprt stack point-2;comment
          al  w1  x1  -2              ;   points to part3 of top operator;
      a0: al  w1  x1  -6              ; next operator: w1:=w1-6;
          bl  w0  x1  +4              ;   w0:=part1 of operator;
          bl  w2  x1  +5              ;   w2:=part2 of operator;
          so  w0      1<1             ;   if namegiving bit=0 then
          jl.         a0.             ;   goto next operator;
          rs. w1      f27.            ;   rangepointer:=w1;
          jl      x3                  ;   return;
  e.


  b.  a0,b0                           ; integer conv

  ;   the call is:    jl. w3  d14.    or
  ;                   jl. w3  d26.

  ;   it checks the top operand against a mask, found in
  ;       1)control word part3  for entry d14   ,or
  ;       2)top operator part3  for entry d26

  ;   if operand-type <> integer, a conversion byte is output as if
  ;   the top operand were on the right side of an integer assignment
  ;   statement, and finally the top operand is removed.

  ;   registeruse:
  ;     entry:w3=return address . exit:w1=opnd stack point

  ;   globals: f1,f4,f12
  ;   local variables:
 w. b0:            0                  ;  return address

     d14: rl. w0      f1.             ; integer conv:w0:=control word
          jl.         a0.             ;   part3;goto get top operand;

     d26: am.         (f3.)           ; integer conv2:
          rl  w0      -2              ;   w0:=top operator part3;

      a0: rs. w3      b0.             ; get top operand:save returnaddress;
          rl. w1      (f4.)           ;   w1:= opnd stack(top);
          jl. w3      d10.            ;   check opnd;
          al  w2      1<0             ;   if result operand <>undefined
          al  w0       3              ;   then
          se. w1     (f12.)           ;
          jl. w3      d18.            ;   conv oprt2(w1,integer type,3);
          rl. w1      f4.             ;   comment top opnd is converted to
          al  w1  x1  +2              ;   integer type;
          rs. w1      f4.             ;   opnd stackpoint:=opndstackpoint+2;
          jl.         (b0.)           ;   return;
  e.

  b.  a0,b2                           ;  procedure label check;

  ;   the procedure is called as:
  ;       jl. w3      d15.

  ;   it searchs through an errorlable-table,if any, with last
  ;   operand,that contains a labelno, as key.
  ;   if found,an error message is output during call of label error;

  ;   registeruse:   entry:w3=return address; exit:all undefined

  ;   globals: f18, f22,f23

  ;  local variable:

 w.   b0:            0                ;  return address
      b1:              0              ; local return address
      b2:             0               ; error address

     d15: rs. w3      b0.             ;   save return address;
          dl. w2      f23.            ;   w1:=error label base;
          al. w0      d23.            ;   w2:=end error labels;
          jl. w3      a0.             ;   erroraddr:=label error;
                                      ;   search;
          dl. w2      f36.            ;   w1:=null base;w2:=endnull;
          al. w0      d25.            ;   erroraddr:=null label;
          jl. w3      a0.             ;   search;
          jl.         (b0.)           ;   return;

      a0: ds. w0      b2.             ; search:save erroraddr;
          sl  w1  x2                  ;    comment local proc;
          jl      x3                  ;   for w1:=w1+1 step 1 until
          al  w1  x1  +1              ;   w2 do if byte(w1)=last opnd
          bl  w0  x1                  ;   then goto found;
          se. w0      (f18.)          ;   return search;
          jl.         a0.+2           ;
          jl. w2      (b2.)           ; found: errormess(erroraddr);
          jl.         (b1.)           ;   return;
  e.

  b.  a0,b1                           ; procedure get params(ext no,rec kind)

  ;   the procedure is called as:
  ;       jl. w3      d16.

  ;   it unpacks the paramdescriptions from an entry in table
  ;   global entries  and stores them in the next 8 bytes in
  ;   operator stack with param(n-6) in the highest address.
  ;     in stead of proctype, no.paramdescriptions is placed in
  ;   the lowest address.
  ;     the entry is found via table  greferences, that holds a
  ;   pointer to  global entries for each ext no.
  ;     at exit time, oprt stack pointer  points at the top word
  ;   and w1 contains an operand description according to proctype.

  ;   if the entry corresponds to a standard variable,i.e. 7<proctype<14
  ;   , the top operand kind is changed from external to simple.


  ;   formats of paramdescription-words in  global entries are described
  ;   in  notes on code procedures in algol 5 ,page 6

  ;   registeruse:
  ;       entry:  w2=extno            exit: w1=rec kind
  ;               w3=return address         w3=oprt stack point

  ;   globals:  f3, f19,f21

  ;   local variables:
 w. b0:            0                  ;  return address
    b1:            0                  ;  second param word

  ;   table extkinds holds for each proctype an operand-description
  ;   specifying  type and kind in the usual way
  ;             description             proctype
    g10:  2.      100000000001000000  ;  0: program
          2.      100000000001000000  ;  1: subroutine
          2.     1000000000000100000  ;  2: boolean function
          2.     1000000000000000001  ;  3: integer function
          2.     1000000000000000100  ;  4: real    function
          2.     1000000000000000010  ;  5: long    function
          2.     1000000000000001000  ;  6: double  function
          2.     1000000000000010000  ;  7: complex function
          2.               100100000  ;  8: boolean  variable
          2.               100000001  ;  9: integer  variable
          2.               100000100  ; 10: real     variable
          2.               100000010  ; 11: long     variable
          2.               100001000  ; 12: double   variable
          2.               100010000  ; 13: complex  variable
          2.        1000000000000100  ; 14: zone     variable
          2.     1100000000001111111  ; 15: unknown

  ; entry:

   d16:   rs. w3      b0.             ;   save returnaddress;
          ls  w2      1               ;
          am.         (f21.)          ;
          rl  w2  x2                  ;   w2:=glob reftable(ext no);
          dl  w2  x2                  ;   paramdescr:=globalentries(w2);
          rs. w2      b1.             ;   secnd paramword:=paramdescr(24:47)
          al  w2      -1              ;   no.params:=1;
          al  w0       0              ;   w0:=0;
          al  w3       0              ;   w3:=0

      a0: ld  w1       6              ; next paramdescr:
          am.         (f3.)           ;   w0w1:= wow1 shift 6;
          hs  w0  x3   2              ;   byte(oprt stackpoint+w3+2):=w0;
          se  w0       0              ;   if w0<>0 then
          al  w2  x2  +1              ;   no.params:= no.params+1;
          al  w0       0              ;   w0:=0;
          al  w3  x3  +1              ;   w3:=w3+1;
          sn  w3       4              ;   if w3=4 then
          rl. w1      b1.             ;   w1:=second paramword;
          sh  w3       7              ;   if w3<=7 then
          jl.         a0.             ;   goto next param descr;

          wa. w3      f3.             ;   oprt stackpoint:=
          rs. w3      f3.             ;   oprt stackpoint+8;
          am      x2                  ;
          al  w0  x3  -6              ;   oprttable(endpamdesc part3)
          am          i0              ;   :=address of first param-
          rs. w0      g18.            ;   description;

          bl  w1  x3  -6              ;   proctype:=byte(oprtstackpoint-6)
          al  w0      1<5-1           ;   and language mask;
          la  w1      0               ;
          sn  w1      i22             ;   if proctype=unknown then
          al  w2      0               ;   no.params:=0;
          hs  w2  x3  -6              ;   byte(oprtstackpoint-6):=
          ls  w1      1               ;   no.params;
          rl. w1  x1  g10.            ;   reckind:=extkinds(proctype);
          so  w1      1<8             ;   if receivekind=simple variable
          jl.         (b0.)           ;   then
          rl. w2      (f4.)           ;    change kind of top operand
          la. w2      f25.            ;    to simple
          al  w2  x2  1<8             ;   else return;
          rs. w2      (f4.)           ;
          jl.         (b0.)           ;   return;
  e.

  b.  a4,b2,c3                        ; procedure conv oprt(top,nexttop,oprt);

  ;   the procedure is called as:
  ;       jl. w3      d17.  ; nexttop opnd is taken from the stack;
  ; or    jl. w3      d18.  ; nexttop opnd is in w2 at entry time;

  ;   top and nexttop are operand-descriptions and conv oprt outputs,
  ;   if necessary and depending on parameter oprt, a byte  specifying
  ;   conversion from the loosing type to the winning type of top and
  ;   nexttop.
  ;     the conversion-byte is found in table conv table(win,loose) and
  ;   at return time w1 holds an expresskind-operand with winning type.
  ;   conv table holds a zero when typecombinations are not allowed or
  ;   the types are equal.
  ;     if top is the winner,the byte   next   is output before the
  ;   conversion-byte.

  ;       oprt                  winner

  ;     0:exponent          ; if nexttop<top then top else  no conversion
  ;     1:logical oprt      ; lowest typevalue  ,  no output
  ;     2:arit or relation  ; highest typevalue
  ;     3:assign            ; nexttop
  ;
  ;     typevalue = 23- typebit no in operand-description

  ;   registeruse:
  ;     entry                         exit
  ;       w0: oprt                    undefined
  ;       w1: top                     resultoperand
  ;       w2: nexttop or undef        undefined
  ;       w3: return  address         undefined

  ;   globals:  f3,f4,f12,f25,f26 , g5

  ;   local variables:

 w.   b0:              0              ;   return address
      b1:              0              ;   oprt
      b2:              6              ;   no.rows in conv table

  ;   local tables:

  ;   table  expbytes holds for each possible top-type in exponentiations
  ;   the relevant bytevalue,that later on is to be modified according to
  ;   winner-type in the usual way

  h.  g11:        h29-2               ;   **integer
                     0                ;   **long
                  h29+1               ;   **real
                  h29+0               ;   **double

  ;   conv table:
  ;       a  2-dimensional table that for every combination of
  ;   winning type and loosing type holds a byte that specifies
  ;   conversion from looser to winner.

  ; winner: int   long    real    doubl   compl   logic   looser
  h.g12:     0 , h20+0 , h20+1 , h20+2 , h20+3 ,   0   ;  integer
         h20+4 ,   0   , h20+5 , h20+6 , h20+7 ,   0   ;  long
         h20+8 , h20+9 ,   0   , h20+10, h20+11,   0   ;  real
         h20+12, h20+13, h20+14,   0   , h20+15,   0   ;  double
         h20+16, h20+17, h20+18, h20+19,   0   ,   0   ;  complex
            0  ,   0   ,   0   ,   0   ,   0   ,   0   ;  logical


  ;   type numb to bit:
  ;   this table holds for each type represented as an integer
  ;   between 0 and 5 , the corresponding bit-type representation 

  h.g13:    2.000001                  ;  integer
            2.000010                  ;  long
            2.000100                  ;  real
            2.001000                  ;  double
            2.010000                  ;  complex
            2.100000                  ;   logical

  ; entry
  w.d17:  rl. w2      (f4.)           ; conv oprt1:w2:=opndstack(opnd point);
                                      ; comment nexttop in stack;
    d18:  rs. w3      b0.             ; conv oprt2: save return address;
          sn. w2      (f12.)          ;   if nexttop=undefined then
          jl.         a4.             ;   goto result undef;
          rs. w0      b1.             ;   save oprt;
          la. w1      f25.            ;   w1:=type part of top;
          la. w2      f25.            ;   w2:=type part of nexttop;
          bl. w1  x1  g5.             ;   w1:=type bit numb(w1);
          bl. w2  x2  g5.             ;   w2:=type bit numb(w2);
                                      ; comment types are now numbers between
                                      ; 0 and 5;
          sn  w0      0               ;   if oprtclass=exponent then
          jl.         c0.             ;   goto exp;
          sn  w1  x2                  ;   if w1=w2 then
          jl.         a2.             ;   goto result express;
          am          (0)             ;
          bl. w3      g14.            ;
          jl.     x3  d18.            ;   goto action(oprt);

      c0: bl. w0  x1  g11.            ; exp: oprt stack(top part4):=
          hs. w0      (f3.)           ;     expbytes(w1);
          sh  w1  x2                  ;   if top type<nexttop type then
          jl.         a2.             ;   goto result express else
          jl.         a0.             ;   goto  out next;

      c1: sl  w1  x2                  ; logical:
          jl.         c3.             ;   goto if toptype>nexttoptype then
          jl.         a1.             ;   winner in w2  else exchange;

      c2: sh  w1  x2                  ; arith: if toptype<nexttoptype then
          jl.         c3.             ;   goto winner in w2;

      a0: al  w0      h20+20          ; out next:   outbyte(next);
          jl. w3      d37.            ;

      a1: rx  w1       4              ; exchange: i:=w1; w1:=w2; w2:=i;

      c3: wm. w1      b2.             ; winner in w2:
          wa  w1       4              ;
          bl. w0  x1  g12.            ;   w0:=conv table(w1,w2);
          sn  w0       0              ;   if w0=0 then
          jl.         a3.             ;   goto conv error;
          rl. w3      b1.             ;
          se  w3       1              ;   if oprt<>logical oprt then
          jl. w3      d37.            ;   outbyte(w0);

      a2: bl. w1  x2  g13.            ; result express:
          lo. w1      f26.            ;   w1:=type numb to bit(w2)+
          jl.         (b0.)           ;       expresskind;  return;
      a3: jl. w2      d19.            ; conv error: type error;
      a4: rl. w1      f12.            ; result undef: w1:=undefined;
          jl.         (b0.)           ;   return;

  ;   action-table:
  ;     it holds for each value of  oprt  a byte with an action address

  h. g14:   c0-d18, c1-d18, c2-d18, c3-d18;

  e.

  b.  a5,b8                           ; procedure errormessage

  ;   one of the entries is called whenever an error message is to be
  ;   output, and there is an entry for each different error detected
  ;   in pass6, and one entry,error record, for errors detected in
  ;   previous passes, in which case the next 3 inputbytes holds:
  ;
  ;           a)errorclass,   used to index table errortextaddr  to get
  ;                           a pointer to the wanted message
  ;
  ;           b)2 bytes with aux.information to be output as integers if
  ;             different from 0.

  ;   the message is output on current output as:
  ;   line <line no>. <no.operands in line>  <error text>

  ;   if the message is not just a warning,see table errortextaddr, a
  ;   trouble byte is output.

  ;   the procedure is called as:
  ;       jl. w2      d19.            ; type error
  ;   or  jl. w2      d20.            ; subscript error
  ;   or  jl. w2      d21.            ; zone error
  ;   or  jl. w2      d22.            ; call error
  ;   or  jl. w2      d23.            ; label error
  ;   or  jl. w2      d24.            ; error record
  ;   or  jl. w2      d25.            ; label not referred

  ;   globals: f8

  ;   local variables:

  w.  b0:              0              ;  return address
      b1:   <:.:>                     ;  pointtext
      b2:   <: :>                     ;  spacetext
      b3:              0              ;  errorident
      b4:              0              ;  aux inf
      b5:  <: <12><10>                         programunit <0>:>
      b6:  <:             page <0>:>
      b7:  <:<10>  error messages<10><0>:>
      b8:  <:label not referred<0>:>

  ; entry:

    d19:  jl. w1      a0.             ; type error: w1:=type text;
          <:type:>                    ;     goto trouble;

    d20:  jl. w1      a0.             ; subscript error:w1:=subscript text;
          <:subscripts:>              ;     goto trouble;

    d21:  jl. w1      a0.             ; zone error: w1:= zone text;
           <:zone:>                   ;     goto trouble;

    d22:  jl. w1      a0.             ; call error: w1:= call text;
          <:call:>                    ;     goto trouble;

    d23:  jl. w1      a0.             ; label error: w1:= label text;
          <:label:>                   ;     goto trouble;
    d25:  al. w1      b8.+1           ; label not referred:w1:=b8 text;
          jl.         a0.             ;   goto trouble;

     d27: jl. w1      a0.             ; standard zone error:goto trouble;
          <:external zone not in catalog<0>:>

    d24:  rs. w2      b0.             ; error record:
          jl. w3      d36.            ;
          bl. w1  x2  g16.            ;   w1:=errortextaddr(inbyte);
          sl  w1      0               ;   if  w1>=0 then
          jl.         a4.             ;   goto get aux inf;
          al  w2      2047            ; 
          la  w1      4               ;   w1:=w1 and signmask;
          al. w1  x1  +g15.           ;
          jl.         d41.            ;   alarm(errorbase(w1));

      a4:                             ; get aux inf:
          al. w1  x1 +g15.            ;   w1:=errorbase(w1);
          jl. w3      d36.            ;
          hs. w2      b4.             ;   aux inf:=inbyte<12+inbyte;
          jl. w3      d36.            ;
          hs. w2      b4.+1           ;
          rl. w2      b0.             ;   w2:=return address;
      a0: rs. w2      b0.             ; trouble: save return addr;
          sz  w1      1               ;   if bit(23)of text addr=1
          jl.         a5.             ;   then goto out error mess;
          al  w0      h19             ;   comment just a warning;
          jl. w3      d37.            ;   outbyte(trouble);
          al  w0      2               ;
          am         -2000            ;   set warning.yes
          rs. w3      e87.+2000       ;


    a1:   rs. w1      b3.             ; out error mess: errorident:=w1;
          rl. w1      f32.            ;   line no.:=line no.+1;
          al  w1  x1  +1              ;
          sh. w1      (f33.)          ;   if lineno.>=lines pr page
          jl.         a2.             ;   then begin

          al. w1      b5.             ;   writetext(b5);
          jl. w3      d40.            ;
          rl. w1      f17.            ;   writetext(head address);
          jl. w3      d40.            ;   comment name of unit;
          al. w1      b6.             ;
          jl. w3      d40.            ;   writetext(b6);
          rl. w0      f34.            ;
          ba. w0      1               ;   page:=page+1;
          rs. w0      f34.            ;
          jl. w3      d39.            ;   writeinteger(<:ddd:>,page);
              32<12+3                 ;
          al. w1      b7.             ;
          jl. w3      d40.            ;   writetext(b7);
          al  w1      1               ;   line no.:=1;
                                      ;  end
      a2: rs. w1      f32.            ;
          al. w1      b1.             ;
          jl. w3      d38.            ;   message(<:.:>);
          rl. w0      f8.             ;
          jl. w3      d39.            ;   writeinteger(no.operands);
              32<12+3                 ;
          al. w1      b2.             ;
          jl. w3      d40.            ;   writetext(<:  :>);
          rl. w1      b3.             ;
          jl. w3      d40.            ;   writetext(errorident);
          rl. w1      b4.             ;

      a3: al  w0       0              ;   for i:=1,2do
          rs. w0      b4.             ;
          ld  w1      12              ;     if byte(i) of auxinf=0
          sn  w0      0               ;     then return
          jl.         (b0.)           ;     else writeinteger(byte(i));
          jl. w3      d39.            ;
              32<12+5                 ;     return;
          jl.         a3.             ;

      a5:                             ; test warning modebits:
          am         -2000            ;
          rl. w3      e29.+2000       ;
          sz  w3      1<1             ;   if warning.yes then
          jl.         a1.             ;     goto out error message;
          jl.        (b0.)            ;   return;
  e.

  b. b37                              ; block for errortexts



    ; errorbase gives the start of errormessages for errors detected
    ; in previous passes

  w.g15:
      b0: <:illegal<0>:>
      b1: <:graphic<0>:>
      b2: <:short text<0>:>
      b3: <:bitpattern<0>:>
      b4: <:too many significant digits<0>:>
      b5: <:exponent too big<0>:>
      b6: <:format error before comma no.<0>:>
      b7: <:label syntax<0>:>
      b8: <:continuation mark on a labeled line<0>:>
      b9: <:missing end<0>:>

     b10: <:constant outside allowed range<0>:>

     b11: <:statement sequence<0>:>
     b12: <:syntax error<0>:>
     b13: <:statement structure<0>:>
     b14: <:missing )<0>:>
     b15: <:do construction<0>:>
     b16: <:list structure<0>:>
     b17: <:labelling error<0>:>
     b18: <:do after if<0>:>
     b19: <:illegal number of main programs<0>:>

     b20: <:+declaration<0>:>
     b21: <:no. of subscripts illegal<0>:>
     b22: <:no. of zones illegal<0>:>
     b23: <:zone dimension<0>:>
     b24: <:adjustable dimension<0>:>
     b25: <:adjustable bound<0>:>
     b26: <:common error<0>:>
     b27: <:entry name<0>:>
     b28: <:formal in common<0>:>
     b29: <:equivalence impossible<0>:>
     b30: <:equivalence index trouble<0>:>
     b31: <:equivalence subscripts<0>:>
     b32: <:dimension equivalenced zone<0>:>
     b33: <:dimension equivalenced common variable<0>:>
     b37: <:zone specification<0>:>



     b34: <:erroneous terminated do range<0>:>
     b35: <:unassigned elements, rightmost group no.<0>:>
     b36: <:non-common element, rightmost group no.<0>:>



    ; errortextaddresses holds a pointer to the errortexts for each error-
    ; type detected in previous passes;   an odd pointer causes no trouble
    ; byte to be output.
    ; a negative pointer terminates the translation with a message
    ;  found in table errorbase by setting the signbit to 0.


  h.g16=k-1
      b0-g15    ;
      b1-g15    ;
      b2-g15    ;
      b3-g15    ;
      b4-g15    ;
      b5-g15    ;
      b6-g15    ;
      b7-g15    ;
      b8-g15    ;
      b9-g15    ;

     b10-g15    ;
     b10-g15    ;

     b11-g15    ;
     b12-g15    ;
     b13-g15    ;
     b14-g15    ;
     b15-g15    ;
     b16-g15    ;
     b17-g15    ;
     b18-g15    ;
1<11+b19-g15    ;

     b20-g15    ;
     b21-g15    ;
     b22-g15    ;
     b23-g15    ;
     b24-g15    ;
     b25-g15    ;
     b26-g15    ;
     b37-g15    ;
     b27-g15    ;
     b28-g15    ;
     b29-g15    ;
     b30-g15    ;
     b31-g15    ;
     b32-g15    ;
     b33-g15    ;


    
     b34-g15    ;
     b35-g15    ;
     b36-g15    ;


  e.

 ; table inputentries holds for each inputbyte-and some local defined
 ;       bytes- a pointer to an entry in inputtable

 h.  g17=k-1
  528 , 534 , 540 , 564 ; 1  simple loc , simple com, simple pam, array
  576 , 582 , 588 , 558 ;  5 zone       , external  , ext param , entry name
    0 ,   0 , 546 , 552 ;  9 stm f.call , stm descr , sim eq arr, sim eq zon
  570 , 594 , 600 , 684 ; 13 arr eq zon , comm name , label name, troub opnd
    0 ,   0 , 606 , 690 ; 17 n.u.       , n.u.      , label no. , troub left
  108 , 114 , 120 , 126 ; 21 arr left   , a eq zleft, zoneleft  , zarr left
  132 , 162 , 168 , 174 ; 25 proc left ,  idx comma , zone comma, pam comma
  180 , 696 , 192 , 198 ; 29 rw comma   , troubcomma, end index , end procl
  204 , 264 , 720 , 270 ; 33 end rwlist , entry     , end trblst, return
  414 , 420 , 408 , 402 ; 37 end unit   , end pass  , begin un  , endline
  396 , 102 , 186 , 150 ; 41 end stm    , begin lst , end list  , call
  642 , 612 , 624 , 618 ; 45 log const  , int const , real con  , long con
  630 , 636 ,   0 ,   0 ; 49 doub const , comp const, n.u.      , n.u.
  258 , 660 , 666 ,   0 ; 53 lab decl   , end format, con format, n.u.
  654 , 708 , 726 ,  12 ; 57 trouble    , enddeclare, endformdec, dya plus
    0 ,   6 ,  -6 ,  18 ; 61 n.u.       , dya minus , mon minus , multiply
   24 ,  30 ,  60 , 156 ; 65 divide     , exponent  , shift     , list com
  324 ,  90 ,  96 , 372 ; 69 iocom      , end range , endpamdesc, data array
    0 ,   0 ,   0 ,   0 ; 73 n.u.       , n.u.      , n.u.      , n.u.
    0 ,   0 ,   0 ,   0 ; 77 n.u.       , n.u.      , n.u.      , n.u.
    0 ,   0 ,   0 ,   0 ; 81 n.u.       , n.u.      , n.u.      , n.u.
    0 ,   0 ,   0 , 378 ; 85 n.u.       , n.u.      , n.u.      , data star
    0 ,  72 ,   0 ,   0 ; 89 n.u.       , mult ass  , n.u.      , n.u.
   66 ,  36 ,  36 ,  36 ; 93 arit ass   , .lt.      , .le.      , .eq.
   36 ,  36 ,  36 ,  42 ; 97 .ge.       , .gt.      , .ne.      , .and.
   48 ,  54 , 672 , 678 ;101 .or.       , .not.     , beg cform , beg oform
    0 ,   0 , 216 , 282 ;105 n.u.       , n.u.      , if        , do
  234 , 276 , 138 , 144 ;109 assign lab , stop      , read      , write
  318 ,   0 ,  78 , 210 ;113 doterm     , n.u.      , arit left , end call
  390 ,  84 ,   0 , 360 ;117 spark      , arit rght , n.u.      , imp rght
   0  , 648 , 240 , 252 ;121 n.u.       , vanish opn, goto simp , comp goto
  246 , 228 , 222 ,   0 ;125 goto ass   , endaritif , endlogif  , n.u.
  312 , 342 ,   0 ,   0 ;129 doend      , end io    , n.u.      , n.u.
    0 ,   0 ,   0 ,   0 ;133 n.u.       , n.u.      , n.u.      , n.u.
  384 , 366 , 330 , 336 ;137 arr data   , datainit  , imp left  , imp do
  288 , 738 , 348 , 354 ;141 impinitsp  , impinitgen, imp until , imp step
  288 , 294 , 300 , 306 ;145 do initsp  , do initgen, do  until , do  step
   714 , 462 , 468 ,   0 ;149 data       , gencomlist, zo comlist, n.u.
  432 , 438 , 474 , 516 ;153 locentlist , ext list  , labvarlist, area simp
  522 , 504 , 498 , 510 ;157 area ar zo , loc arrdec, com arrdev, formarrdec
  492 , 486 , 480 , 444 ;161 loczodecl  , com zodecl, formzodecl, notdeclab
  450 , 456 , 426 , 702 ;165 multdeclab , nulls     , glob list , glob and lab
  732                   ;169 decextzone
  ; operator table

  ;   part1:    1 byte with   priority(5bits)<7+ typecheck(1bit)<6+
  ;                           nexttop(1bit)<5  + noresult(1bit)<4 +
  ;                           output (1bit)<3  + term.unstack(1bit)<2 +
  ;                       name giving(1bit)<1  + modify output(1bit)<0

  ;   part2:    1 byte with name inf if namegivingbit=1    or empty
  ;   part3:    2 bytes with  operand mask  or  empty
  ;   part4:    1 byte  with  output-value  or  empty
  ;   part5:    1 byte  with  action address base
 w.    0
 h.
  g18=k+4
  ;  0  mon minus:
          9<7+ 2.1000001,  0 ,         0 ,2.  1110011111, h22+0  , c60-c80
  ;  6  dya minus:
          9<7+ 2.1100001,  0 ,         0 ,2.  1110011111, h22+8  , c62-c80
  ; 12  dya plus:
          9<7+ 2.1100001,  0 ,         0 ,2.  1110011111, h22+16 , c62-c80
  ; 18  multiply:
         11<7+ 2.1100001,  0 ,         0 ,2.  1110011111, h22+24 , c62-c80
  ; 24  divide:
         11<7+ 2.1100001,  0 ,         0 ,2.  1110011111, h22+32 , c62-c80
  ; 30  exponent:
         13<7+ 2.1100001,  0 ,         0 ,2.  1110001101, h29-7  , c64-c80
  ; 36  relation
          7<7+ 2.1100001,  0 ,         0 ,2.  1110001111,    0   , c66-c80
  ; 42  not
          5<7+ 2.1000001,  0 ,         0 ,2.  1110100111, h23+0  , c60-c80
  ; 48  and
          3<7+ 2.1100001,  0 ,         0 ,2.  1110100111, h23+8  , c63-c80
  ; 54  or
          1<7+ 2.1100001,  0 ,         0 ,2.  1110100111, h23+16 , c63-c80
  ; 60  shift
         13<7+ 2.1100001,  0 ,         0 ,2.  1110000001, h23+24 , c65-c80
  ; 66  assign
         -3<7+ 2.1110001,  0 ,         0 ,2.  1110111111, h24+0  , c61-c80
  ; 72  mult assign
         -3<7+ 2.1100001,  0 ,         0 ,2.  1110111111, h24+8  , c61-c80
  ; 78  arit left
         -1<7+ 2.0000100,  0 ,         0 ,             0,      0 , c79-c80
  ; 84  end range
         13<7+ 2.      0,  0 ,         0 ,             0,      0 , c71-c80
  ; 90  end paramdescr
         13<7+ 2.      0,  0 ,         0 ,             0,      0 , c72-c80
  ; 96  array left
         -3<7+ 2.0000111,  0 ,         0 ,             0, h25+0  , c70-c80
  ;102  array eq zone left
         -3<7+ 2.0000111,  0 ,         0 ,             0, h25+8  , c70-c80
  ;108  zone left
         -3<7+ 2.0001110,  1 ,         0 ,           0  , h10+1  , c79-c80
  ;114  proc left
         -3<7+ 2.0000111,  2 ,         0 ,           0  , h26+0  , c79-c80
  ;120  indexcomma
         -3<7+ 2.0001000,  0 ,         0 ,           0  , h22+18 , c69-c80
  ;126  paramcomma
         -3<7+ 2.0010001,  0 ,         0 ,           0  ,      0 , c79-c80
  ;132  rw comma
         -3<7+ 2.0010001,  0 ,         0 ,           0  ,      0 , c79-c80
  ;138  if
         -5<7+ 2.1000001,  0 ,         0 ,2.  1110111111, h28+0  , c67-c80
  ;144  end logical if
         -9<7+ 2.0001000,  0 ,         0 ,             0, h7+3   , c79-c80
  ;150  end arith if
         -7<7+ 2.0001000,  0 ,         0 ,             0, h7+4   , c68-c80
  ;156  read init
         -3<7+ 2.0001110,  3 ,         0 ,             0, h17+0  , c79-c80
  ;162  write init
         -3<7+ 2.0001110,  3 ,         0 ,             0, h17+1  , c79-c80
  ;168  assign label
         -7<7+ 2.1111000,  0 ,         0 ,2. 10000000001, h14+0  , c79-c80
  ;174  goto simple
         -7<7+ 2.1011000,  0 ,         0 ,2.100001000000, h14+2  , c79-c80
  ;180  goto assign
         -7<7+ 2.1011000,  0 ,         0 ,2. 10000000001, h14+3  , c79-c80
  ;186  goto computed
         -7<7+ 2.1010000,  0 ,         0 ,2.  1110011111,    0   , c73-c80
  ;192  entry
         -7<7+ 2.1011000,  0 ,         0 ,             0, h13+0  , c79-c80
  ;198  stop
         -7<7+ 2.0011000,  0 ,         0 ,             0, h13+2  , c79-c80
  ;204  datainit
         -7<7+ 2.1000001,  0 ,2.     110 ,2.      111111, h21+0  , c79-c80
  ;210  data array
         -7<7+ 2.0011000,  0 ,         0 ,             0, h4+3   , c79-c80
   ;216  trouble left(:
          -3<7+ 2.0000110,  4 ,        0  ,            0 ,     0  , c79-c80

  ; input table ,operators:

  ; part1:    1 byte with  priority(5bits)<7 +stack(1bit)<1 + output(1bit)
  ; part2:    1 byte with special information or empty
  ; part3:    2 bytes with operand mask
  ; part4:    1 byte with pointer to oprt table  or output-value or empty
  ; part5:    1 byte with action address base

  h.  g19=k+10

  ; -6 mon minus:
           8<7+1<1+0,    0 ,2.       0 ,2.           0,      0 , c80-c80
  ;  0  unknown record:
          14<7+0    ,    0 ,       0   ,           0  ,    0   ,  c58-c80
  ;  6 dya minus:
           8<7+1<1+0,    0 ,2.       0 ,2.  1110011111,      6 , c17-c80
  ; 12 dya plus:
           8<7+1<1+0,    0 ,2.       0 ,2.  1110011111,     12 , c17-c80
  ; 18 multiply:
          10<7+1<1+0,    0 ,2.       0 ,2.  1110011111,     18 , c17-c80
  ; 24 divide:
          10<7+1<1+0,    0 ,2.       0 ,2.  1110011111,     24 , c17-c80
  ; 30 exponent:
          12<7+1<1+0,    0 ,2.       0 ,2.  1110001111,     30 , c17-c80
  ; 36 relations:
           6<7+1<1+0,    0 ,2.       0 ,2.  1110001111,     36 , c55-c80
  ; 42 and:  part2 contains bytevalue  logical and
           2<7+1<1+0,h23+9 ,2.       0 ,2.  1110100111,     48 , c18-c80
  ; 48 or :  part2 contains bytevalue  logical or
           0<7+1<1+0,h23+17,2.       0 ,2.  1110100111,     54 , c18-c80
  ; 54 not:
           4<7+1<1+0,    0 ,2.       0 ,2.           0,     42 , c80-c80
  ; 60 shift:
          12<7+1<1+0,    0 ,2.       0 ,2.  1110000111,     60 , c17-c80
  ; 66 assign:
          -2<7+1<1+0,    0 ,2.       0 ,2.  1100111111,     66 , c20-c80
  ; 72 mult assign:
          -2<7+1<1+0,    0 ,2.       0 ,2.  1100000000,     72 , c19-c80
  ; 78 arith left( :
          14<7+1<1+0,    0 ,2.       0 ,2.           0,     78 , c80-c80
  ; 84 arith right):
          -2<7+0    ,    0 ,2.       0 ,2.           0,      0 , c80-c80
  ; 90 end range:
          14<7+1<1+0,    0 ,2.       0 ,2.           0,     84 , c80-c80
  ; 96 end pamdescription:
          14<7+1<1+0,    0 ,2.       0 ,2.           0,     90 , c80-c80
  ;102 listleft  ( :
          14<7+0    ,    0 ,2.       0 ,2.           0,      0 , c30-c80
  ;108 array left (:
          14<7+1<1+0,    0 ,2.       0 ,2.           0,     96 , c31-c80
  ;114 arr eq zone left( :
          14<7+1<1+0,    0 ,2.       0 ,2.           0,    102 , c31-c80
  ;120 zone left( :
          14<7+1<1+0,    0 ,2.       0 ,2.           0,    108 , c32-c80
  ;126 z array left(:
          14<7+1<1+0,    0 ,2.       0 ,2.           0,    108 , c33-c80
  ;132 proc left ( :
          14<7+1<1+0,    0 ,2. 1000000 ,2.      111111,    114 , c34-c80
  ;138 read:
          14<7+1<1+0,h17+2 ,2.   11111 ,2.001100111111,    156 , c35-c80
  ;144 write:
          14<7+1<1+0,h17+3 ,2.   11111 ,2.001110111111,    162 , c35-c80
  ;150 call :
          12<7+1<1+0,    0 ,2. 1100000 ,2.     1000000,    114 , c53-c80
  ;156 list comma:
          -2<7+0    ,    0 ,2.       0 ,2.           0,      0 , c36-c80
  ;162 index comma:
          -2<7+1<1+0,    0 ,2.       0 ,2.  1110011111,    120 , c37-c80
  ;168 zone comma:
          -2<7+0    ,    0 ,2.       0 ,2.  1110011111,      0 , c38-c80
  ;174 param comma:
          -2<7+1<1+0,    0 ,2.       0 ,2.           0,    126 , c39-c80
  ;180 rw comma:
          -2<7+1<1+0,    0 ,2.    1001 ,2.  1110000101,    132 , c41-c80
  ;186 end list:
          -2<7+0    ,    0 ,2.       0 ,2.           0,      0 , c42-c80
  ;192 end index:
          -2<7+0    ,    0 ,2.       0 ,2.  1110011111,      0 , c37-c80
  ;198 end paramlist:
          -2<7+1<1+0,h11+0 ,2.       0 ,2.           0,    126 , c43-c80
  ;204 end rw list:
          -2<7+1<1+0,h11+0 ,2.     110 ,2.101001000010,    132 , c44-c80
  ;210 end call:  treated as a list with no.bytes=0;first byte=parcount
          14<7+0    ,    0 ,         0 ,           0  , h11+0  ,  c6-c80
  ;216 if:
          -4<7+1<1+0,    0 ,2.       0 ,2.           0,    138 , c23-c80
  ;222 end logif:
          -8<7+1<1+0,   -1 ,2.       0 ,2.  1110100000,    144 , c24-c80
  ;228 end arith if:
          -6<7+1<1+0,    0 ,2.       0 ,2.  1110001111,    150 , c24-c80
  ;234 assign label:
          -8<7+1<1+0,    0 ,2.       0 ,2.100001000000,    168 , c17-c80
  ;240 goto s :
          -8<7+1<1+0,    0 ,2.       0 ,2.           0,    174 , c80-c80
  ;246 goto ass:
          -8<7+1<1+0,    0 ,2.       0 ,2.           0,    180 , c80-c80
  ;252 goto comp:
          -8<7+1<1+0,    0 ,2.       0 ,2.           0,    186 , c22-c80
  ;258 decl label:   comment treated as an operand
          14<7+0    ,    1 ,2.       0 ,2.           0, h14+1  , c21-c80
  ;264 entry:
          -8<7+1<1+0,    0 ,2.       0 ,2.           0,    192 , c29-c80
  ;270 return:
          -8<7+0<1+1,    0 ,2.       0 ,2.           0, h13+1  , c77-c80
  ;276 stop:
          -8<7+1<1+0,    0 ,2.       0 ,2.           0,    198 , c80-c80

  ;282 do :
          14<7+0<1+1,    0 ,2.       0 ,2.           0, h16+0  , c76-c80
  ;288 do init spec:
          -8<7+0    ,  1-1 ,2.       0 ,2.   100000001, h16+2  , c25-c80
  ;294 do init gen:
          -8<7+0    ,    0 ,2.       0 ,2.   100000001, h16+2  , c25-c80
  ;300 do until:
          -8<7+0    ,    0 ,2.       0 ,2.  1110011111, h16+4  , c27-c80
  ;306 do step:
          -8<7+0    ,    0 ,2.       0 ,2.  1110011111, h16+6  , c28-c80
  ;312 do end:
          -8<7+0    ,    0 ,2.       0 ,2.  1110011111, h16+7  , c28-c80
  ;318 do term:
          -8<7+0<1+1,    0 ,2.       0 ,2.           0, h16+8  , c80-c80
  ;324 io comma:
          -2<7+1<1+0,    0 ,2.       0 ,2.           0,    126 , c40-c80
  ;330 imp left:
          -2<7+0    ,    0 ,2.       0 ,2.           0, h18+0  , c45-c80
  ;336 imp do :
          -2<7+0    ,    0 ,2.       0 ,2.           0, h18+1  , c45-c80
  ;342 end io :
          -2<7+0    ,    0 ,2.       0 ,2.           0, h11+0   , c45-c80
  ;348 imp until:
          -8<7+0    ,    0 ,2.       0 ,2.  1110011111, h16+4  , c27-c80
  ;354 imp step:
          -8<7+0    ,    0 ,2.       0 ,2.  1110011111, h16+6  , c28-c80
  ;360 imp right:
          -8<7+0    , h16+8 ,2.       0 ,2.  1110011111, h16+7  , c28-c80
  ;366 data init:
          -6<7+1<1+0,    0 ,2.       0 ,2.           0,    204 , c56-c80
  ;372 data array:   created by pass6 to unstack data init-type dependent;
          -8<7+1<1+0,    0 ,2.       0 ,2.           0,    210 , c80-c80
  ;378 data star :
          -4<7+0<1+1,    0 ,2.       0 ,2.           0, h4+0   , c48-c80
  ;384 array data:
          -4<7+0    ,    0 ,2.       0 ,2.           0, h4+1   , c49-c80
  ;390 spark:
         -10<7+0    ,    0 ,2.       0 ,2.           0,      0 , c80-c80

  ;396 end statement:
         -10<7+0<1+1,    0 ,2.       0 ,2.           0, h7+0   , c50-c80
  ;402 end line:
          14<7+0<1+1,    0 ,2.       0 ,2.           0, h7+1   , c51-c80
  ;408 begin unit:
          14<7+0<1+1,    0 ,2.       0 ,2.           0, h0+0   , c52-c80
  ;414 end unit:
         -10<7+0    ,    0 ,2.       0 ,2.           0, h0+1   , c8 -c80
  ;420 end pass:
          14<7+0<1+1,    0 ,2.       0 ,2.           0, h0+2   , c54-c80

  ;   inputtable ,operands

  ;   part1:    1 byte with priority(5bits)<7
  ;   part2:    1 byte with number of bytes in record -1    or empty
  ;   part3:    2 bytes with operand description
  ;   part4:    1 byte  with outbyte-value  or empty
  ;   part5:    1 byte  with action address base



  ;426 global entry list:
          14<7+0    ,    0 ,2.       0 ,2.         0  , h1+0   ,  c1-c80
  ;432 local entry list :
          14<7+0    ,    0 ,2.       0 ,2.         0  , h1+4   ,  c5-c80
  ;438 external list:
          14<7+0    ,    0 ,2.       0 ,2.         0  , h1+3   ,  c2-c80
  ;444 not decl labels:
          14<7+0    ,    0 ,2.       0 ,2.         0  ,    0   ,  c3-c80
  ;450 multiple decl labels:
          14<7+0    ,    0 ,2.       0 ,2.         0  ,    0   ,  c3-c80
  ;456 declared but not referred labels:
          14<7+0    ,    0 ,2.       0 ,2.         0  ,    0   ,  c7-c80
  ;462 general common list:
          14<7+0    ,    0 ,2.       0 ,2.         0  , h1+1   ,  c6-c80
  ;468 zone common list:
          14<7+0    ,    0 ,2.       0 ,2.         0  , h1+2   ,  c6-c80
  ;474 label variable list:
          14<7+0    ,    0 ,2.       0 ,2.         0  , h1+5   ,  c6-c80
  ;480 formal zone decl:
          14<7+0    ,    4 ,2.       0 ,2.         0  , h2+1   ,  c8-c80
  ;486 common zone decl:
          14<7+0    ,    3 ,2.       0 ,2.         0  , h2+5   ,  c8-c80
  ;492 local zone decl:
          14<7+0    ,    8 ,2.       0 ,2.         0  , h2+3   , c78-c80
  ;498 common array decl:
          14<7+0    ,    3 ,2.       0 ,2.         0  , h2+4   ,  c8-c80
  ;504 local array decl:
          14<7+0    ,    3 ,2.       0 ,2.         0  , h2+2   ,  c8-c80
  ;510 formal array decl:
          14<7+0    ,    6 ,2.       0 ,2.         0  , h31    ,  c4-c80

  ;516 area simple loc:
          14<7+0    ,    2 ,         0 ,           0  , h30+0  ,  c8-c80
  ;522 area array-zone-param:
          14<7+0    ,    2 ,         0 ,           0  , h30+1  , c47-c80
  ;528 simple local:
          14<7+0    ,    1 ,         0 ,2.   100000000, h5+0   ,  c9-c80
  ;534 simple common:
          14<7+0    ,    2 ,         0 ,2.   100000000, h5+1   ,  c9-c80
  ;540 simple param:
          14<7+0    ,    1 ,         0 ,2.   100000000, h5+2   ,  c9-c80
  ;546 simple eq array:
          14<7+0    ,    3 ,         0 ,2.   100000000, h5+3   ,  c9-c80
  ;552 simple eq zone:
          14<7+0    ,    4 ,         0 ,2.   100000000, h5+4   ,  c9-c80
  ;558 entry name:
          14<7+0    ,    1 ,2. 1100000 ,2.   100000000, h5+6   , c13-c80
;    notice: the action for <entry name> was earlier c9, but c13 is
;            a little bit better, but still not correct, because the
;            parameters for a call will not be checked
  ;564 array ident:
          14<7+0    ,    5 ,2.      10 ,2.           0, h5+7   , c10-c80
  ;570 array eq zone:
          14<7+0    ,    8 ,2.     100 ,2.           0, h5+8   , c10-c80
  ;576 zone ident:
          14<7+0    ,    2 ,2.    1000 ,2.         100, h5+9   , c11-c80
  ;582 external ident:
          14<7+0    ,    1 ,2. 1100000 ,2.     1000000, h5+10  , c12-c80
  ;588 external param:
          14<7+0    ,    1 ,2. 1100000 ,2.           0, h5+11  , c13-c80
  ;594 common name:
          14<7+0    ,    0 ,         0 ,             0, h19+0  ,  c9-c80
  ;600 label variab:
          14<7+0    ,    1 ,         0 ,2. 10000000000, h5+5   ,  c9-c80
  ;606 label no.:
          14<7+0    ,    0 ,         0 ,2.100001000000,    0   , c14-c80

  ;612 constant integer:
          14<7+0    ,    2 ,         0 ,2.    10000001, h6+2   , c15-c80
  ;618 constant long:
          14<7+0    ,    4 ,         0 ,2.    10000010, h6+4   , c15-c80
  ;624 constant real:
          14<7+0    ,    4 ,         0 ,2.    10000100, h6+3   , c15-c80
  ;630 constant double:
          14<7+0    ,    8 ,         0 ,2.    10001000, h6+5   , c15-c80
  ;636  constant complex:
          14<7+0    ,    8 ,         0 ,2.    10010000, h6+6   , c15-c80
  ;642  constant logical:
          14<7+0    ,    1 ,         0 ,2.    10100000, h6+1   , c15-c80
  ;648 vanished operand:
          14<7+0    ,    0 ,         0 ,             0,    0   , c16-c80
  ;654 trouble:
          14<7+0    ,    0 ,         0 ,             0,    0   , c57-c80
  ;660 end format:
          14<7+0    ,    2 ,         0 ,             0, h8+0   ,  c8-c80
  ;666 continue format:
          14<7+0    ,    2 ,         0 ,             0, h8+1   ,  c8-c80
  ;672 begin closed format:
          14<7+0    ,    2 ,         0 ,             0, h7+6   ,  c8-c80
  ;678 begin open format:
          14<7+0    ,    2 ,         0 ,             0 , h7+5   ,  c8-c80
  ;684 trouble operand:   treated as external param
          14<7+0    ,     0 ,2.11111111 ,2.111110000000,  h19+1 , c13-c80
   ;690  trouble left(:
            14<7+1<1+0,      0,         0 ,             0,  216   , c80-c80
  ;696 troub comma:
          -2<7+1<1+0,    0 ,2.       0 ,2.           0,    126 , c74-c80
   ;702  globals and labels in unit:
            14<7+0    ,     0 ,         0 ,            0 ,     0 ,c59-c80
   ;708  end declarations:
            14<7+0    ,     0 ,         0 ,            0 ,  h7+7  , c8-c80
   ;714  data
            14<7+0    ,     0 ,         0 ,            0 ,  h7+8  , c8-c80
  ;720 end trouble list:
          -2<7+1<1+0,h11+0 ,2.       0 ,2.           0,    126 , c75-c80
  ;726 end formal declaration:
          14<7+0    ,    0 ,2.       0 ,2.           0, h7+9   , c8-c80
  ;732  declare external zone:
          14<7+0    ,    1 ,2.    1000 ,2.         100, h2+6   , c46-c80
  ;738  imp init gen:
          -8<7+0    ,    0 ,2.       0 ,2.   100000001, h16+2  , c25-c80

 ; operator stack bottom
 w.  -11<19

 ; global base
     1<23+15<18+40<12+0    ; first paramword
     0                     ; second paramword

   j2=k-j0

 ; assignment of intermediates
      i0 =  88      ; address of endpamdescript,part3 in oprt table
      i1 =  71      ; end pamdescript  entry
      i2 =  21      ; begin array list  entry
      i3 =  22      ; begin array eq zone list  entry
      i4 =  23      ; begin zone list  entry
      i5 =  24      ; begin zarray list  entry
      i6 =  25      ; begin proc list  entry
      i7 =  26      ; index comma  entry
      i8 =  27      ; zone comma  entry
      i9 =  28      ; paramcomma  entry
     i10 =  29      ; rw comma  entry
     i11 =  31      ; end index list  entry
     i12 =  32      ; end proc list  entry
     i13 =  33      ; end rw list  entry
     i14 = -10<7    ; spark priority
     i15 =  19      ; label no.  entry
     i16 =  94      ; .lt. inputbyte value
     i17 =  72      ; data array  entry
     i18 =  70      ; end range  entry, not used
     i19 =  20      ; trouble left(  entry
     i20 =  30      ; troub comma  entry
     i21 =  35      ; end troub list
     i22 =  15      ; unknown proctype
     i23 = g19-g17  ;  stepping stone
     i24 = -5<7      ; commaunstack priority
     i25 = i23-4   ; stepping stone

e30 = e30 + j2      ; length := length + length pass 6;



     i.
e.
m. rc 85.10.02 fortran, pass 6
\f

▶EOF◀