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

⟦123f9ccf1⟧ TextFile

    Length: 70656 (0x11400)
    Types: TextFile
    Names: »algpass03tx «

Derivation

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

TextFile



; jz.fgs.1987.09.10               algol 8, pass 0, page ...1...




; b. h99    ; fp names; this block head must always
; w.        ; be loaded from somewhere, before pass 0 text;

b. e107     ; begin block algol 6 translator;
w.          ;
d.
p.<:fpnames:>
l.

;**********************************************************
;*                                                        *
;* compiler version, release and date (e103, e104, e105)  *
;*                                                        *
;* should be updated each time the compiler is updated    *
;*                                                        *
;**********************************************************


e15 = 0     ; special testoutput;
e18 = h35   ; fp console message;
e22 = h20   ; fp current input zone descriptor (fp = file processor);
e25 = h19   ; fp current program zone descriptor;
e28 = h22   ; fp input block;
e31 = h27   ; fp connect input;
e32 = h7    ; fp end program;
e33 = h26   ; fp outchar;
e34 = h31   ; fp outtext;
e35 = h32   ; fp outinteger;
e37 = h65   ; end fp with break;
e39 = 512   ; segment length of object program;
e43 = h21   ; fp current output zone descriptor;
e44 = h29   ; fp stack zone;
e45 = h30   ; fp unstack zone;
e48 = h0    ; fp start buffer and share description;
e49 = h1    ; fp start process description;
e50 = h2    ; fp start status handling description;
e51 = h3    ; fp start record description of zone;
e52 = h5    ; fp length of zone descriptor;
e53 = h6    ; fp length of share descriptor;
e54 = h4    ; fp start of users parameters;  - pass 1 expects h4 to link h3   nb nb
e55 = h54   ; fp lookup area
e57 = h10   ; fp interrupt address;
e58 = h17   ; fp parent description;

\f



; fgs 1986.02.18               algol 8, pass 0, page ...1a...


c. h57<2 ; if system2 then begin
e60 = h52   ; fp first note;
e61 = h53   ; fp last note + 22;
z. ; end system2
c. h57<3 ; if system3 then
e61 = h53   ; fp size of available area in front of zone buffer
z.
e63 = h8    ; fp current command;
e65 = h15   ; fp console description address;
e66 = h16   ; fp own process description address;
e67 = h79   ; fp terminate zone;
e68 = h55   ; fp base program;
e70 = h51   ; fp mode bits
e77 = h57   ; monitor version (may be 2 or 3)
e78 = h28   ; fp connect output
e80 =-12<1+0; standard size and -document for workarea (see fp connect)
            ; (4 segm for cur.in, 4 for copy, 4 for listing)
e81 = -4<1+0;    -      -    -      -      -  sortarea   -   -    -
e84 = h33   ; fp outend
e86 = -1<1+0; room left for error messages after pass12
e95 = h95   ; fp close up text output
e101= 4     ; no of bytes for anonym. bytes in blocks

e103 =              2 ; version of algol compiler
e104 =    3<12 +    0 ; release of algol compiler
e105 = 1987<12 + 1001 ; date    of algol compiler

e106 =              1 ; smallest version number in external accepted by pass9
 
 
 
 
c. h57<2 ; if system2 then begin
e99 = h10+14 ; fp break routine
e100= 14     ; bytes i reg.dump area
z.  ; end else
c. h57<3 ; if system 3 then begin
e99 = h10+h76; fp break routine
e100= h76    ; bytes in reg.dump area
z. ; end system 3

m. algol 6, pass 0  redefine e-names
t.

\f



; fgs 1986.02.18               algol 8, pass 0, page ...1b...



s. c76, d38, f31, h5, j3 ; begin pass 0 segment;
w.                       ;
k = 10000+e68  ; k has this value to provoke slang test
               ; of relative byte addresses;
e38: h5        ; length of entire pass 0 (in bytes), translator length;
     0         ; dummy word  (slang)
     jl.  d22. ; entry pass 0: goto initialize translator;
     e103      ; version of this compiler

\f

                                                                                                                                             

; fgs 1985.10.25                                   algol 6, pass 0, page 2




b. a15, b21 ; begin block: next pass, print char, print text, print integer;
w.          ;
b5:f28:0    ; pass no;
b4:   1<21  ; interrupt mask (pass 0);

c7:   rl. w0  b4.       ; next pass:  w0 := interrupt mask(pass 0);
      al. w3  d29.      ;   w3 := interrupt address (pass 0);
      jd      1<11      ;   set interrupt;
      rl. w0  b5.       ;
      sn. w0 (d7.)      ;   if pass no = stop pass then
      jl.     d0.       ;   goto end translation;
      am.    (d24.)     ;
      bz  w0  e49+1     ;
      se  w0  4         ;   if kind of translator medium <> 4 then
      jl.     a2.       ;   goto next pass from tape;

      rl. w1  e38.      ; next pass from backing store:
      ld  w2  -9        ;   segment :=
      rs. w1 (d21.)     ;    translator length//512;
      ls  w2  -15       ;   from core := translator length mod 512;
      al. w1  c0.       ;   first core := first free core;
      rs. w1 (d27.)     ;
      al  w1  x1+510    ;   last core := first core + 510;
      rs. w1 (d23.)     ;
      rl. w1  d24.      ;   w1 := program zone descriptor address;
      jl. w3 (d13.)     ;   input block;  comment: fp entry;
      al. w1  c0.       ;   to core := first free core;
      rl. w0  e38.      ;
      wa. w0  x2+c0.    ;   translator length :=
      rs. w0  e38.      ;    translator length + pass length;
      rl. w3  x2+c0.    ;   remaining := pass length;

\f

                                                                                                                                                  

; rc 28.10.1975                                    algol 6, pass 0, page 3




a0:   sn  w3  0         ; move words:
      jl.     a3.       ;   if remaining = 0 then goto prepare pass;
      sn  w2  512       ;   if from core = 512 then
      jl.     a1.       ;   goto transfer segments;
      rl. w0  x2+c0.    ;   word(to core) :=
      rs  w0  x1        ;   word(first free core + from core);
      al  w1  x1+2      ;   to core := to core + 2;
      al  w2  x2+2      ;   from core := from core + 2;
      al  w3  x3-2      ;   remaining := remaining - 2;
      jl.     a0.       ;   goto move words;

a1:   al  w2  x3-1      ; transfer segments:
      ls  w2  -9        ;
      ls  w2  9         ;   first core := to core;
      al  w2  x2+510    ;   last core := first core + 510 +
      wa  w2  2         ;    (remaining - 1)//512*512;
      rs. w1 (d27.)     ;
      sl. w2 (f26.)     ;   if last core >= last work for pass then
      jl.     a12.      ;   alarm(<:pass trouble:>);
      rs. w2 (d23.)     ;
      rl. w1  d24.      ;   w1 := program zone descriptor address;
      jl. w3 (d13.)     ;   input block;  comment: fp entry;
      jl.     a3.       ;   goto prepare pass;

a12:  jl. w3  d8.       ; alarm pass trouble:
      al. w3  d14.      ;   print linehead;
      al  w2  1         ;   set return(break);  w2 := 1;
      jl. w1  c13.      ;   writetext(<:pass trouble:>);
      <:pass trouble<0>:>;

a2:   al. w0  c0.       ; next pass from tape:
      rs. w0 (d27.)     ;   first core := first free core;
      rl. w0  f26.      ;
      rs. w0 (d23.)     ;   last core := last work for pass ;
      rl. w1  d24.      ;   w1 := program zone descriptor address;
      jl. w3 (d13.)     ;   input block; comment: fp entry;
d28:  am.    (c0.)      ; test pass length; last of pass :=
      al. w3  d11.      ;    first free core + pass length - 1;
      se  w3 (x1+e51+2) ;   if last of pass <> last byte(record) then
      jl.     a12.      ;   goto alarm pass trouble;

a3:   bz. w0  d6.       ; prepare pass:
      ls  w0  -1        ;   pass no :=
      rs. w0  b5.       ;    bits(12,22,second word of pass);
      se  w0  11        ;   if pass no = 11 then
      jl.     a13.      ;    begin
      jl.     c7.       ;    end;
a13:  se  w0  12        ;   if pass no = 12 then
      jl.     a15.      ;     begin
      rl. w2  c71.      ;     if connection mask = 0 then
      sn  w2  0         ;     goto next pass;
      jl.     c7.       ;     end;
a15:  sh  w0  15        ;   if pass no > 15 or pass no < 1 then
      sh  w0  0         ;   goto alarm pass trouble;
      jl.     a12.      ;

\f

                                                                                                                                                  

; fgs 1985.11.04                                 algol 6, pass 0, page 4





      al. w2  c0.       ;   pass entry :=
      bz. w1  d10.      ;    first free core + bits(0,11,second word of pass);
      wa  w2  2         ;   comment: the address is calculated in
      rs. w2  b11.      ;   this funny way to give a 24-bits
                        ;   not negative number;

      sn  w0  1         ;   if passno = 1 then 
      jl.     a9.       ;     goto update;

      rl. w1  f1.       ;   unused outbuf :=    
      ws. w1  f0.       ;     last    outaddress - 
      rs. w1  b8.       ;     current outaddress ;  

c. (:e15 a. 1<0:) - 1   ;   if spec testoutput pass0 then
      jl. w1  d38.      ;   begin
      rl. w0  b8.       ;     write (out, curr-, last in and out);
      jl. w2  d19.      ;     write8 (out, unused outbuf);
z.                      ;   end;

      jl. w3  c8.       ;   output segment; <*send the last segment*>

      rl. w3  f20.      ;   saved outsegment :=
      rs. w3  b9.       ;     segment (output descr);
      rl. w3  c20.      ;
      jl. w2  c59.      ;   wait segment (output); <*check it*>

      rl. w3  f13.      ;   saved insegment :=
      es. w3  h0.       ;     segment (input descr) -
      rs. w3  b10.      ;     increment;

      rl. w1  d6.       ;   if change direction then
      ac. w0 (h0.)      ;     increment :=
      sz  w1  1         ;      - increment;
      hs. w0  h0.       ;   segment (input descr) :=
      rl. w0  b9.       ;     if change direction then
      so  w1  1         ;       (saved outsegment 
      rl. w0  f13.      ;     else
      es. w0  h0.       ;        segment (input descr)) -
      rs. w0  f13.      ;     increment             ;
      jl. w3  d9.       ;   input segment; <*check and send for the segment*>
      rl. w1  f4.       ;   used segments :=
      al  w1  x1+1      ;     used segments +
      rs. w1  f4.       ;     1             ;          

      rl. w1  d6.       ;
      sz  w1  1         ;   if change direction then
      jl.     a4.       ;     goto change direction;

      rl. w0  f3.       ;   current inaddress :=
      rs. w0  f2.       ;     last  inaddress; <*check it at next inbyte*>

      jl.     a8.       ;   goto print information;

a4:                     ; change direction:
      jl. w3  d9.       ;   input segment; <*check in and send for the next*>
      
      rl. w0  f2.       ;   current in address :=
      ws. w0  b8.       ;     current in address - 
      es. w0  h0.       ;     unused outbuf      -
      rs. w0  f2.       ;     increment          ;

      dl. w1  f1.       ;   w0                 := current outaddress;
      rs. w1  f0.       ;   current outaddress := last    outaddress;
      rs. w0  f1.       ;   last    outaddress := w0;

      rl. w0  b10.      ;   segment (output descr) :=
      rs. w0  f20.      ;     saved insegment;

      jl.     a8.       ;   goto print information;

b8:   0   ; unused outbuf   ;
b9:   0   ; saved outsegment;
b10:  0   ; saved insegment ;
b11:  0   ; pass entry  ;

\f

                                                                                                                                                

; jz.fgs 1986.02.18                       algol 6, pass 0, page ...5...




e69:                    ;
d15:  al  w2  1         ; backing store fault:
      ls  w2 (0)        ;
      sn  w0  1         ;   w2 := 1 shift result;
      wa  w2  x1        ;   if result = 1 then w2 := w2 + statusword;

d14:  rs. w2  f9.       ; break:  sorry := w2;
      rs. w3  b12.      ;   save(address of areaname);

d18:  al  w2  0         ; finis translation :
      rx. w2  f24.      ;   w2 := message buffer address(byte input);
      al. w1  d17.      ;   w1 := answer address;
      se  w2  0         ;   if w2 <> 0 then
      jd      1<11+18   ;   wait answer;
      al  w2  0         ;
      rx. w2  f25.      ;   w2 := message buffer address(byte output);
      se  w2  0         ;   if w2 <> 0 then
      jd      1<11+18   ;   wait answer;

      rl. w2  f9.       ; return fp:
      al. w1  b21.      ;   text := addr(<:algol end:>);
      rl. w0  c17.      ;   w0 := modebits;
      sn  w2  0         ;   if -,sorry then
      jl.     a14.      ;   goto ok;
      al. w3  f23.      ;   w3 := address(name of output area);
c. e77<3 ; if system 3 then begin
      al. w1  b2.       ;   w1 := tail address;
      jd      1<11+42   ;   lookup entry (work area);
      rl. w1    f4.     ;   tail(1) := used segments;
      rs. w1  b2.       ;
      al. w1  b2.       ;   w1 := tail address;
      jd      1<11+44   ;   change entry (work area);
z.         ; end system 3;

      al. w1  b13.      ;   text := addr(<:***algol sorry:>);

a14:  rl. w0  e29.      ; ok: w0 := modebits;
      sz  w0  1<7       ;   if work area created by pass 0
      jd      1<11+48   ;   then remove entry;
      rl. w0  e29.

      jl. w3  c13.      ;   writetext(string text);
c.e77<3  ; if system 3 then
      sz  w0  1<10      ;   if warning then
      al  w2  x2+2      ;   add warning bit;
z.
c.e77<2  ; if system 2 then
      al  w3  -1-1<6    ;   clear fpwarningbit;
      la. w3  e70-k+e38-e68;
      sz  w0  1<10      ;   if warning then
      al  w3  x3+1<6    ;     fpwarningbit := 1;
      rs. w3  e70-k+e38-e68;
z.

\f



; fgs 1985.12.18               algol 6,pass 0, page ...5a...


      al  w0  32        ;   writesp;
      jl. w3  c12.      ;
      rl. w0  f4.       ;   write(<<d>, used segments);
      jl. w3  c14.      ;
        32<12 + 1       ;
      al. w3  f23.      ;   w3 := addr(name of output area);
      jd      1<11+64   ;   remove process(name of byte input area);
      al  w0  10        ;
      jl. w3  c12.      ;   writechar(<new line>);
      rl. w1  b12.      ;   w1 := saved address of areaname;
      al  w3  x1        ;
      se  w3  0         ;   if addr(saved area name) <> 0 then
      jd      1<11+64   ;   remove process(saved area);
      am.    (c23.)     ;
b1 = k + 1; end program ;
      jl      e32       ;   goto fpbase + end program;
e82:
b12:  0  ; saved name address;
b21:  <:<10>algol end<0>:>;
b13:  <:<10>***algol sorry<0>:>;
b2:   0, r.10           ;   lookup area for change of work area

\f



; fgs 1987.09.11                   algol 8, pass 0, page ...5b...


d29:  <:algolix<0>:>    ; interrupt address:
      0, r.4            ;   initially name to lookup to
                        ;   decide ix default option;
c.e100-16
       jl. 2 , r.(:d29.+e100+2:)>1
z.
      al. w2  d29.      ; interrupt:  w2 := interrupt address;
c36:  al  w0  0         ; interupt service:
      rl. w3  c23.      ;   set interupt
      al  w3  x3+e57    ;   (0,fp-interupt service);
      jd      1<11+0    ;   w3:=fpbase+
      al  w1  x2+e100-1 ;       fp-interupt;
a6:   rl  w0  x2        ; move next:  w0 := word(w2);
      rs  w0  x3        ;   word(w1+fp interrupt address) := w0;
      al  w3  x3+2      ;   w1 := w1+2;
      al  w2  x2+2      ;   w2 := w2+2;
      sh  w2  x1        ;   if w1 <= interrupt address + (breaksize-1) then
      jl.     a6.       ;   goto move next;
c. e77<3 ; if system3 then begin
      rl. w3  c23.      ;   w3 := fp base;
      am     (x3+e57+10);   if break instruction = ks
      bl  w0  -2        ;    then enter fp break routine
h.    sn  w0, ks   w.   ;    comment if fp is not present
      jl      x3+e99    ;    a break will happen
z.
      al  w1  e99       ;
      hs. w1  b1.       ;   end program := fp break;
      jl. w3  d5.       ;   print line;
      al  w2  1         ;   w2 := 1;
      al  w3  0         ;   addr(area name) := 0;
      jl.     d14.      ;   goto break;

\f

                                                                                                                                                 

; fgs 1985.10.30                      algol 6, pass 0, page ...6...




d0:   al. w0  d18.      ; end translation:
      rs. w0  b11.      ;   pass entry := finis translation;

a8:   rl. w0  c17.      ; print information:
      am.    (b5.)      ;
      se  w3  x3        ;   if pass no = 0
      so  w0  1<2       ;   or -,survey then
      jl.     a9.       ;   goto update;
      jl. w3  d8.       ;   print linehead;
      rl. w0  f10.      ;
      jl. w2  d19.      ;   write(8,sum 0);
      rl. w0  f11.      ;
      jl. w2  d19.      ;   write(8,sum 1);
      rl. w0  f4.       ;
      jl. w2  d20.      ;   write(4,used segments);
      rl. w0  c9.       ;
      jl. w2  d20.      ;   write(4, inf 1);
      rl. w0  f16.      ;
      jl. w2  d20.      ;   write(4,inf 2);

a9:                     ; update:
c. (:e15 a. 1<0:) - 1   ;   if spec testoutput pass0 then
      jl. w1  d38.      ;     write (out, curr-, last in and out);
z.                      ;
      am.    (c23.)     ;
      jl  w3  e84-6     ;   outend;
      rl. w0  b14.      ;
      rl. w1  b5.       ;   outside pass interval := false;
      rs. w1  f31.      ;   pass := pass no;
      dl. w3  c18.      ;
      sl  w1  x2        ;   if pass no < lower pass no
      sl  w1  x3+1      ;    or pass no > upper pass no
      rl. w0  b15.      ;   then outside pass interval := true;
d3:   rs. w0  j1.       ;   comment: see carret;
      al  w0  1         ;   w0 := 1;
      bl. w3  h0.       ;
      rl. w2  d6.       ;   if backward pass then
      se  w3  -1        ;    begin
      jl.     a11.      ;     w0 := old linecounter;
      rl. w0  b16.      ;     if change direction then
      sz  w2  1         ;     w0 := linecounter
      rl. w0  f8.       ;    end;
a11:  rs. w0  b16.      ;   old linecounter := w0;
      bs. w0  h0.       ;   w0 := w0 - increment;
      rs. w0  f8.       ;   linecounter := w0;
      al  w0  0         ;
      rs. w0  f14.      ;   linecounter 1 := 0;
      rs. w0  c9.       ;   inf 1 := 0;
      rs. w0  f16.      ;   inf 2 := 0;
      al  w0  -1-1<5    ;
      la. w0  c17.      ;
      rs. w0  c17.      ;   testoutput := false;
      jl. w3  c1.       ;   carret;  comment: to test lineinterval;
      rl. w0  f0.       ;
      bs. w0  h0.       ;   current outaddress :=
      rs. w0  f0.       ;    current outaddress - increment;
      jl.    (b11.)     ;   goto word(pass entry);

b14:  jl.     h1        ;   outside pass interval = false;
b15:  rx. w1  h2        ;   outside pass interval = true;
b16:  0  ; old linecounter;

\f

                                                                                                                                                  

; rc 25.3.1969                                   algol 6, pass 0, page 7




d19:  am      4         ; write(8,w0):
d20:  al  w1  4         ; write(4,w0):
      hs. w1  a10.      ;   set positions in layout;
      rx. w0  b17.      ;   swap(w0,space);
      jl. w3  c12.      ;   writechar;
      rx. w0  b17.      ;   swap(w0,space);
      jl. w3  c14.      ;   writeinteger;
a10 = k + 1 ; digits    ;
      32<12             ;
      jl      x2        ;   return;
b17:  32    ; space     ;

c12:  ds. w1  b18.      ; printchar:
      ds. w3  b19.      ;   save(w0,w1,w2,w3);
      rl  w2  0         ;   w2 := w0;
      am.    (c23.)     ;
      jl  w3  e33-2     ;   outchar;  comment: fp current output;
      dl. w1  b18.      ;
      dl. w3  b19.      ;   restore(w0,w1,w2,w3);
      jl      x3        ;   return;

c13:  ds. w1  b18.      ; print text:
      ds. w3  b19.      ;   save(w0,w1,w2,w3);
      al  w0  x1        ;   w0 := w1;
      am.    (c23.)     ;
      jl  w3  e34-2     ;   outtext;  comment fp current output;
      dl. w1  b18.      ;
      dl. w3  b19.      ;   restore(w0,w1,w2,w3);
      jl      x3        ;   return;

c14:  ds. w1  b18.      ; print integer:
      ds. w3  b19.      ;   save(w0,w1,w2,w3);
      rl  w2  x3        ;
      rs. w2  b20.      ;   layout := word(return);
      am.    (c23.)     ;
      jl  w3  e35-2     ;   outinteger;  comment fp current output;
b20:  0  ; layout       ;
      dl. w1  b18.      ;
      dl. w3  b19.      ;   restore(w0,w1,w2,w3);
      jl      x3+2      ;   return;

      0  ; saved w0     ;
b18:  0  ; saved w1     ;
      0  ; saved w2     ;
b19:  0  ; saved w3     ;

e.       ; end block: next pass, print char, print text, print integer;

\f

                                                                                                                                                 

; rc 8.4.1969                                   algol 6, pass 0, page 8




b. a1, b12              ; begin block: test line, byte sums,
w.                      ;  print linehead, print w0, print line;
d1:   ds. w3  b3.       ; test line:
      rx. w0  c17.      ;   save(w2,w3);
      lo. w0  b1.       ;   testoutput := true;
      dl. w3  c19.      ;   comment: carret sets w1 = linecounter;
      sl  w1  x2        ;   if linecounter < lower line no
      sl  w1  x3+1      ;   or linecounter > upper line no
      bs. w0  b0.       ;   then testoutput := false;
      rx. w0  c17.      ;   comment:  testoutput = modebit(18);
      rl. w2  b2.       ;   restore(w2);
      rx. w1  f8.       ;   swap(linecounter,w1);  comment see j1;
      jl.    (b3.)      ;   return;

d2:   ds. w0  b3.       ; byte sums:
      bz  w3  1         ;
      am.    (f10.)     ;   comment: the instruction al w3 x3
      al  w3  x3        ;   is used to avoid integer overflow;
      rs. w3  f10.      ;   sum 0 := sum 0 + right(w0);
      am.    (f11.)     ;   sum 1 := sum 0 + sum 1;
      al  w3  x3        ;
      rs. w3  f11.      ;
      rl. w0  b3.       ;   restore(w0);
      rl. w3  c17.      ;
b0 = k+1  ;  1<5        ;
      sz  w3  1<5       ;   if testoutput then
      jl. w3  c16.      ;   print w0;
      rl. w3  b2.       ;   restore(w3);
      rx. w2  f0.       ;   swap(current outaddress,w2);
      jl.     d16.      ;   goto test outaddress;
b1:   1<5 ;
b2:   0   ; saved w    
b3:   0   ; saved w

d8:   ds. w1  b4.       ; print linehead:
      rs. w3  b5.       ;   save(w0,w1,w3);
      al  w0  10        ;
      rs. w0  f15.      ;   printcount := 10;
      jl. w3  c12.      ;   writechar(<new line>);
      al. w1  b10.      ;   w1 := address(<:    :>);
      rl. w0  f31.      ;
      sh  w0  -1        ;   if pass no > -1 then
      jl.     a0.       ;    begin
      jl. w3  c14.      ;     writeinteger(<:dd:>,pass no);
      32<12 + 2         ;     w1 := address(<:. :>)
      al. w1  f12.      ;    end;
a0:   jl. w3  c13.      ;   writetext;
      al  w0  -1        ;   pass no := -1;
      rs. w0  f31.      ;
      dl. w1  b4.       ;   restore(w0,w1);
      jl.    (b5.)      ;   return;
      0  ; saved w0     ;
b4:   0  ; saved w1     ;
b5:   0  ; saved w3     ;
b10:  <:    :>          ;
f12:  <:. :>            ;
f10:  0  ; sum 0        ;
f11:  0  ; sum 1        ;
f31:  0  ; pass         ;

\f

                                                                                                                                               

; rc 24.3.1969                                   algol 6, pass 0, page 9




c16:  ds. w0  b7.       ; print w0:
      rl. w3  f8.       ;   save(w0,w3);
      se. w3 (f14.)     ;   if linecounter <> linecounter 1 then
      jl. w3  d5.       ;   print line;
      rl. w3  f15.      ;
      al  w3  x3+1      ;   printcount := printcount + 1;
      sh  w3  9         ;   if printcount > 9 then
      jl.     a1.       ;   begin
      jl. w3  d8.       ;    print linehead;
      al  w3  0         ;    printcount := 0;
a1:   rs. w3  f15.      ;   end;
      bz  w0  1         ;   byte := right(w0);
      jl. w3  c14.      ;   writeinteger(<:ddddd:>,w0);
      32<12+5           ;
      rl. w0  b7.       ;   restore(w0);
      jl.    (b6.)      ;   return;
b6:   0  ; saved w3     ;
b7:   0  ; saved w0     ;

d5:   rs. w3  b9.       ; print line:
      rs. w1  b8.       ;   save(w1,w3);
      jl. w3  d8.       ;   print linehead;
      al. w1  b11.      ;
      jl. w3  c13.      ;   writetext(<:line:>);
      jl. w3  c27.      ;   print linecount;
      al. w1  b12.      ;
      jl. w3  c13.      ;   writetext(<:<32><32>:>);
      rl. w3  f8.       ;
      rs. w3  f14.      ;   linecounter 1 := linecounter;
      rl. w1  b8.       ;   restore(w1);
      jl.    (b9.)      ;   return;
b8:   0  ; saved w1     ;
b9:   0  ; saved w3     ;

b12:  <:<32><32>:>      ;
f14:  0  ; linecounter 1;
b11:  <:line<0>:>       ;

e.    ; end block: test line, bytesums, print linehead, printw0, print line;

\f

                                                                                                                                                  

; fgs 1985.10.25                                  algol 6, pass 0, page 10




; procedure wait segment(i/o description);
;  if message buffer address = 0, the function is empty; otherwise
;  a wait answer is performed, defined by message buffer address,
;  segment is increased by increment and (first core,last core) and
;  (other first core, other last core) are exchanged;
; call:  w3 := description address;  jl. w2  d12. ;
; exit:  all registers unchanged;

b. a3, b0               ; begin block: wait segment;
w.                      ;
c59:                    ;
d12:  am     (x3+22)    ; wait segment:
      sn  w3  x3        ;   if message buffer address = 0 then
      jl      x2        ;   return;

      ds. w1  b0.       ;   save(w0,w1);
      rx  w2  x3+22     ;   swap(w2,message buffer address);
a1:   al. w1  d17.      ; repeat:  w1 := answer address;
      jd      1<11+18   ;   wait answer;
      al  w2  0         ;   w2 := 0;
      sn  w2 (x1)       ;   if status word <> 0
      se  w0  1         ;   or result <> 1 then
      jl.     a0.       ;   goto bad answer;

c. (:e15 a. 1<0:) - 1   ; if special test output pass0 then
b. a1                   ; begin
w.                      ;
      rs. w1  a1.       ;   save w1;
      jl. w1  d37.      ;   write pass0 testoutput (<:wait:>);
      jl.     a0.       ;   continue;
      <:<10> wait <0>:> ;
a0:   rl. w1  a1.       ;   restore w1;
      jl.     a3.       ;   continue;

a1:   0                 ;   saved w1

e.                      ; end block testoutput;
z.


a3:   am     (x1+2)     ;   if bytes transferred = 0 then
      se  w3  x3        ;   begin
      jl.     a2.       ;    w1 := message address;
      al  w1  x3+10     ;    send message;
      jd      1<11+16   ;    goto repeat;
      jl.     a1.       ;   end;

a2:   rx  w2  x3+22     ;   swap(w2,message buffer address);
      dl  w1  x3+20     ;
      rx  w0  x3+12     ;   swap(first core, other first core);
      rx  w1  x3+14     ;   swap(last core, other last core);
      ds  w1  x3+20     ;

      rl  w0  x3+16     ;
      ba. w0  h0.       ;   segment := segment + increment;
      sh  w0  -1        ;   if segment <= -1 then
      wa. w0  f5.       ;   segment := segment + available segments;
      sl. w0 (f5.)      ;   if segment >= available segments then
      ws. w0  f5.       ;   segment := segment - available segments;
      rs  w0  x3+16     ;
      dl. w1  b0.       ;   restore(w0,w1);
      jl      x2        ;   return;

a0:   rs  w2  x3+22     ; bad answer:  message buffer address := 0;
      jl.     d15.      ;   goto backing store fault;

d17:  0,0,0,0,0,0,0,0   ; answer;
      0  ; saved w0     ;
b0:   0  ; saved w1     ;

e.       ; end wait segment     ;

\f

                                                                                                                                                    

; fgs 1985.10.25                                 algol 6, pass 0, page 11




b. a2, b3               ; begin block: next segment;
w.                      ;
d4:   ds. w2  b2.       ; next segment:  save(w1,w2);
      rs  w3  x2+10     ;   last address := w3;
      rl  w3  x2+12     ;   w3 := address of i/o description;

      rl. w2  f4.       ;
      wa  w2  x3+24     ;   used segments :=
      rs. w2  f4.       ;    used segments + segment increment;
      sh. w2 (f5.)      ;   if used segments > available segments then
      jl.     a0.       ;   begin comment: work area exceeded;
      al. w1  b0.       ;    w1 := address of alarm text;
      jl.     c5.       ;    alarm(<:program too big:>)
                        ;   end;
a0:   jl. w2  d12.      ;   wait segment;
      al  w1  x3+10     ;   w1 := message address;
      jd      1<11+16   ;   send message;
      rs  w2  x3+22     ;   address of message buffer := w2;

c. (:e15 a. 1<0:) - 1   ; if special testoutput pass 0 then
b. a1                   ; begin
w.                      ;
      rs. w1  a1.       ;   save w1;
      jl. w1  d37.      ;   write test (<:send:>);
      jl.     a0.       ;   continue;
      <:<10> send <0>:> ;
a0:   rl. w1  a1.       ;   restore w1;
      jl.     a2.       ;   continue;

a1:   0                 ;   saved w1;
e.                      ; end;
z.                      ;

a2:   bl. w1  h0.       ;   w2 := other first core;
      dl  w3  x3+20     ;   w3 := other last core;
      lo. w3  b3.       ;   w3 := w3 or boolean 1 ; comment: odd address;
      sn  w1  -1        ;   if increment = -1 then
      rx  w2  6         ;   swap(w2,w3); comment: backward pass;

      am.    (b2.)      ;
      rx  w3  10        ;   swap(w3,last address);
      rl. w1  b1.       ;   restore(w1);
      am.    (b2.)      ;   return address := return address + 2;
      jl      2         ;   return;

b0:   <:program too big<0>:> ;
b1:   0  ; saved w1     ;
b2:   0  ; saved w2     ;
b3:   1  ; boolean 1    ;

e.       ; end block: next segment;

\f



; fgs 1985.10.30                   algol 8, pass 0, page ...11a...

c. (:e15 a. 1<0:) - 1   ; if special testoutput pass0 then
b. a7                   ; begin block testoutput
w.                      ;
d37:  ds. w1  a1.       ; procedure write (out, segment, first, last);
      ds. w3  a3.       ; begin
      al  w1  x1+2      ;   w0 := addr text from call;
      jl. w3  c13.      ;   outtext (out, text);
      am.    (a3.)      ;
      zl  w0 +10        ;
      al. w1  a4.       ;
      se  w0  3         ;   if input then 
      al. w1  a5.       ;     outtext (out, <:in:>
      jl. w3  c13.      ;   else
      am.    (a3.)      ;     outtext (out, <:out:>);
      rl  w0 +16        ;
      jl. w3  c14.      ;   outinteger (out, segment);
      32<12+5           ;
      am.    (a3.)      ;
      rl  w0 +12        ;
      jl. w3  c14.      ;   outinteger (out, first);
      32<12+10          ;
      am.    (a3.)      ;
      rl  w0 +14        ;   
      jl. w3  c14.      ;   outinteger (out, last);
      32<12+10          ;
      dl. w1  a1.       ;
      dl. w3  a3.       ;

      jl      x1        ; end procedure write (out, segment, first, last);

d38:  ds. w1  a1.       ; procedure write (out, curr-, last- in and out);
      ds. w3  a3.       ;   save registers;
      al. w1  a6.       ; 
      jl. w3  c13.      ;   write (out, text1);
      rl. w0  f2.       ;
      jl. w2  d19.      ;   write8 (out, current in);
      rl. w0  f3.       ;
      jl. w2  d19.      ;   write8 (out, last    in);
      al. w1  a7.       ;   
      jl. w3  c13.      ;   write (out, text2);
      rl. w0  f0.       ;
      jl. w2  d19.      ;   write8 (out, curr out);
      rl. w0  f1.       ;   
      jl. w2  d19.      ;   write8 (out, last out);
      dl. w1  a1.       ;
      dl. w3  a3.       ;
      jl      x1        ; end procedure write (out, curr-, last in and out);

a0:   0 ; saved w0      ;
a1:   0 ; saved w1      ;
a2:   0 ; saved w2      ;
a3:   0 ; saved w3      ;
a4:   <:  in <0>:>      ;
a5:   <: out <0>:>      ;
a6:   <:<10>curr-, last  in <0>:>
a7:   <:<10>curr-, last out <0>:>

e.                      ; end block testoutput
z.                      ;


\f

                                                                                                                                                           

; fgs 1985.10.25                                 algol 6, pass 0, page 12




; byte input description:

f22:  0,0,0,0,0  ; 0   name and name table address;
      3<12       ; 10  operation = input;
f6:   0          ; 12  first core;
f7:   0          ; 14  last core;
f13:  1          ; 16  segment;
      0          ; 18  other first core;
f17:  0          ; 20  other last core;
f24:  0          ; 22  message buffer address;
      -1         ; 24  segment increment;

; byte output description:

f23:  0,0,0,0,0  ; 0   name and name table address;
      5<12       ; 10  operation = output;
f18:  0          ; 12  first core;
f19:  0          ; 14  last core;
f20:  0          ; 16  segment;
      0          ; 18  other first core;
f21:  0          ; 20  other last core;
f25:  0          ; 22  message buffer address;
      1          ; 24  segment increment;

e79 = f23 ; addr of pass 0 work area name


; pass 0 key variables:

d7 :   9     ; stop pass;
d21:   0     ; abs address of segment    (program process descriptor (16));
d27:   0     ; abs address of first core (program share   descriptor ( 2));
d23:   0     ; abs address of last core  (program share   descriptor (10));
d24:   0     ; abs address of             program zone    descriptor      ;

\f

                                                                                                                                                    

;  fgs 1986.02.18                              algol 6, pass 0, page ...13...




; the official pass 0 - entries (i.e. references using e-names)
; are found in the following (resident) part of pass 0;
e71:c71: 0            ; pass12-parameters : connection mask;
e72:c72: 0            ;                     first line;
e73:c73: 0            ;                     last line;
e74:c74: 0            ;                     first name line;
e75:c75: 0            ;                     last name line;
e76:c76: 0 , r.5      ;                     sortareaname and address;

e107: <:algftnrts<0>:>; name of runtime system
         0            ; name table addr



b. b2                   ; begin block: carret, alarm, message, repeat
w.                      ;  input byte, outbyte, inbyte, print linecount;

; procedure carret;
;  the routine increases the linecounter by increment; if then
;  the linecounter belongs to lineinterval and pass no belongs to
;  passinterval, the boolean testoutput is set to true, otherwise
;  it is set to false;
; call:  jl. w3  e1. ;
; exit:  w0,w1,w2 unchanged;

c1:                     ;
e1:   rx. w1  f8.       ; carret:
      ba. w1  h0.       ;   linecounter :=
j1:   rx. w1  f8.       ;    linecounter + increment;
      jl      x3        ;   if outside passinterval then return
                        ;   else goto test line;
h1 = d1 - j1            ;   comment : see d3, where j1: rx. w1 f8. is modif;

; procedure message;
;  the routine prints the string: <linehead>line<linecounter><text>;
; call:  w1 := address of <text>;  jl. w3 e4. ;
; exit:  w0,w1,w2 unchanged ;

; procedure alarm;
;  the routine works as message, but terminates the translation;
; call:  w1 := address of <text>;  jl.  e5.  ;

c5:                     ;
e5:   al  w3  1         ; alarm:
      rs. w3  f9.       ;   sorry := 1;
      al. w3  d0.       ;   set return(end translation);
c4:                     ;
e4:   rs. w3  b0.       ; message:  save(return);
      jl. w3  d5.       ;   print line;
      jl. w3  c13.      ;   writetext;
      jl.    (b0.)      ;   return;
b0:   0  ; saved return ;

; procedure repeat input byte;
;  the routine decreases current inaddress by increment;
; call:  jl. w3  e11.  ;
; exit:  w0,w1,w2 unchanged;

c11:                    ;
e11:  rx. w3  f2.       ; repeat input byte:
      bs. w3  h0.       ;   current inaddress :=
      rx. w3  f2.       ;    current inaddress - increment;
      jl      x3        ;   return;

\f

                                                                                                                                                          

; fgs.jz 1986.02.18                        algol 8, pass 0, page ...14...

; procedure outbyte;
;  the routine outputs the rightmost byte of w0 to work; if pass infor-
;  mation (survey) is wanted, then sum and double sum of all bytes
;  are calculated; if pass no belongs to pass interval and linecounter
;  belongs to lineinterval, then the byte is printed also;
; call:  w0 := byte to be output;  jl. w3  e3. ;
; exit:  w0,w1,w2 unchanged;
e3: c3:                 ;
j0:   rx. w2  f0.       ; outbyte:  if passinf then goto byte sums
;     jl.     d2.       ;   else swap(w2,current outaddress);
d16:  sn. w2 (f1.)      ; test outaddress:
e8:c8:jl. w2  d4.       ;   if current outaddress = last outaddress then
h0 = k+1  ; increment   ; output segment: next segment; comment see below;
      al  w2  x2+1      ;   w2 := w2 + increment;
      hs  w0  x2        ; return from next segment: byte(w2) := right(w0);
      rx. w2  f0.       ;   swap(w2,current outaddress);
      jl      x3        ;   return;
f0:   0  ; e20-4        ; current outaddress;
f1:   0  ; e20-2        ; last outaddress; warning: next segment uses x2+10;
e20:c20:0;              ; output description; warning: -   -      -   x2+12;
h3 = d2 - j0            ;

; procedure inbyte;
;  the routine supplies the next byte from work;
; call:  jl. w3  e2.  ;
; exit:  w2 = inputbyte;  left(w2) = 0;  w0,w1 unchanged;
c2:                     ;
e2:   rl. w2  f2.       ; inbyte:
      sn. w2 (f3.)      ;   if current inaddress = last inaddress then
e90:
d9:   jl. w2  d4.       ; input segment: next segment; comment: see below;
      ba. w2  h0.       ;   current inaddress := current inaddress + increment;
      rs. w2  f2.       ; return from next segment:
      bz  w2  x2        ;   w2 := byte zeroes(current inaddress);
      jl      x3        ;   return;
f2:   0  ; e21-4        ; current inaddress;
f3:   0  ; e21-2        ; last inaddress; warning: next segment uses x2+10;
e21:c21:0;              ; input description; warning:  -   -     -   x2+12;

; procedure print linecount;
;  the routine prints the integer linecount;
; call:  jl. w3  e27.  ;
; exit:  w0,w1,w2 unchanged;
e64:     10             ;   bossline
c27:                    ;
e27:  ds. w0  b2.       ; print linecount:
      rl. w0  f28.      ;
      se  w0  1         ;   if pass=1 then
      jl.     c6.       ;   begin
j2=k+1
      al  w0  0         ;   bossline.no
;     al  w0  1         ;   bossline.yes
      sn  w0  0         ;
      jl.     c10.      ;   if bossline.yes then
      rl. w0  e64.      ;   then write(out,bossline);
      jl. w3  c14.      ;
      32<12+6           ;
c10:
j3=k+1
      al  w0  0         ;   blocks.no
;     al  w0  1         ;   blocks.yes
      sn  w0  0         ;
      jl.      c6.      ;   if blocks.yes then
      rl. w0  e85.      ;   write(out,begincount);
      jl. w3  c14.      ;
      32<12+3           ;   end;
c6:   rl. w0  f8.       ;   save(w0,w3);
      jl. w3  c14.      ;   w0 := linecounter;
      32<12+6           ;   writeinteger(<:ddddd:>,w0);
      rl. w0  b2.       ;   restore(w0);
      jl.    (b1.)      ;   return;
b1:   0  ; saved w3     ;
b2:   0  ; saved w0     ;

e.       ; end block: carret, alarm, message, repeat input byte,
         ;  outbyte, inbyte, print linecount;

\f

                                                                                                                                                       

; fgs 1986.02.18             algol 6, pass 0, page ...15...




h2 = k - j1         ;
e6: f8:  0          ; linecount;
e7:      jl.  c7.   ; end pass: goto next pass;
f4:      0          ; e9-4  used segments;
f5:      0          ; e9-2  available segments;
e9: c9:  0          ; e9    inf 1 (pass information);
f16:     0          ; e9+2  inf 2 (pass information);
f26:     0          ; e9+4  last work for pass;
         0          ; e9+6 contextmode(0 or 1, used by pass 1 and 2)
e10:     <:stack:>  ; alarm text;
e12:     jl.  c12.  ; writechar: goto printchar;
e13:     jl.  c13.  ; writetext: goto printtext;
e14:     jl.  c14.  ; writeinteger: goto printinteger;
e16:     jl.  c16.  ; print byte: goto print w0;

e17:c17: 1<13+1<12+1<8+1<3+1<1 ; modebits1 : fp-, connect-, index-, message.yes
e29:          0<10+0<5         ; modebits2 : warning-, fortran.no

         0          ; e19-6  lower pass no in passinterval;
c18:     0          ; e19-4  upper pass no in passinterval;
         1          ; e19-2  lower line no in lineinterval;
e19:c19: 1<22       ; e19    upper line no in lineinterval;
         jl.  d8.   ; e19+2  goto print linehead;
e23:c23: 0          ; fileprocessor base;
e24:     0          ; fileprocessor result note;
e26:     jl.  d0.   ; terminate translation: goto end translation;
e36:     jl.  c36.  ; interrupt from passes: goto interrupt service;
e40:f9:  0          ; sorry (answer to fileprocessor);
e41:     1<21       ; interrupt mask (pass 7, object code);
e42:f15: 0          ; printcount;
e46:     0          ; start source name list (pass 1);
e47:     0          ; start insert list;
e56: 0<7+0<6+0<3+0<2+0<1+1<0; modechange allowed (1<7 for xref)
e59:     jl.  c59.  ; wait segment: goto wait  segment;
e62:d13: 0          ; abs address of entry inblock (fileprocessor entry);
e83:     0          ; max no of copy params (for pass 1)

e102=f11            ; double(sum1,sum2)

e0 = k, c0 = k      ; the current pass will be loaded here:
d11 = c0 - 1        ;
d10 = c0 + 2        ;
d6  = c0 + 3        ;

; first free core:


m. algol 6, pass 0  resident

\f

                                                                                                                                                

; fgs 1987.09.11                          algol 8, pass 0, page ...16...




b. a60, b40  ; begin block: initialize translator;
w.           ;

b0:   -2     ; after use reused for result of lookup algolix (fixed ix default)
b1:   0      ; top command (address of the command algol);

d22:  rs. w1  c23.      ; initialize translator:
      la. w3  b0.       ;   fpbase := w1;
      rs. w3  b1.       ;   top command := w3 and -2;  comment: even address;
      rl. w0  e41.      ;   w0 := interrupt mask (1 shift 21);
      al. w3  d29.      ;   w3 := interrupt address (pass 0);
      jd      1<11      ;   set interrupt;
      am.    (c23.)     ;   w1 :=
      al  w1  e55       ;     addr fp lookup area;
      al. w3  d29.      ;   w3 := addr name (interrupt address really);
      jd      1<11+42   ;   lookup tail;
      rs. w0  b0.       ;   fixed default := result;
      rl. w3  b1.       ;   restore w3;
      bz  w0  x3        ;
      al. w2  f22.      ;   w2 := address of dummy name;
      se  w0  6         ;   if command algol not preceded by <=> then
      jl.     a1.       ;   goto no result area;
      am.     (c23.)
      al  w1  e55       ;   w1:=lookup area
      al  w3  x3-8      ;
      jd     1<11+42    ;   lookup outfil
b.j2,w.
      se  w0  0         ;
      jl.     j1.       ;   if found
      rl  w2  x1        ;   and
      sl  w2  0         ;   not bs
      jl.     j2.       ;
      bz  w2  x1+1      ;
      se  w2  4         ;
      jl.     a4.       ;   then alarm;
j2:  rs  w0  x1+12     ; clear tail(12:18);
      rs  w0  x1+14
      rs  w0  x1+16     ;
      rs  w0  x1+18     ;
      jd      1<11+44   ;   change entry;
 
j1:
e.

      al  w2  x3        ;   w2 := address of result area name or note;
c. e77<2 ; if system 2 then begin
      rl  w0  x2        ;   w0 := first word of name;
      al  w3  x1+e60+4  ;   w3 := address of document name(first fp note);
a0:   sn  w0 (x3-4)     ; may be next note:
      jl.     a2.       ;   if w0 = name of current note then
                        ;    goto get work area;
      al  w3  x3+22     ;   current note := current note + 1;  w3 := w3 + 22;
      sh  w3  x1+e61    ;   if current note <= last fp note then
      jl.     a0.       ;   goto may be next note;
z.         ; end system 2;

a1:   al  w0  -1-1<8    ; no result area:
      la. w0  c17.      ;
      rs. w0  c17.      ;   note supplied by fp := false;
      al  w3  x2        ;   w3 := w2;

a2:   al  w0  x3-4      ; get work area:
      rs. w0  e24.      ;   save address(result note);
      al  w2  x3        ;   w2 := addr of name;
      rl  w0  x2        ;   w0 :=  first part of name;
      se  w0    0       ;   if w0 = 0 then
      jl.       a3.     ;     begin
      al  w0    1<7     ;     work area created by pass 0 := true;
      lo. w0    c17.    ;
      rs. w0    c17.    ;

c. e77<2 ; if system 2 then begin
      al. w1    d25.    ;     w1 := tail address;
      jd        1<11+40 ;     create entry (work name);
      se  w0    0       ;     if result <> 0 then goto error;
      jl.       a4.     ;     end;
z.         ; end system 2;

\f


;rc  76.06.28                 algol 6, pass 0, page ...16a...




a3:   al  w1    0       ;   comment: no zone;
      al  w0    e80     ;   comment: take standard actions for workarea;
      am.      (c23.)   ;
      jl  w3    +e78    ;   connect output;
      se  w0     0      ;   if connect trouble then goto error;
      jl.       a4.     ;

      dl  w1  x2+4      ;   move name of workarea to
      ds. w1    f22.+2  ;     name parts of
      ds. w1    f23.+2  ;     byte i-o descriptions;
      dl  w1  x2+8      ;
      ds. w1    f22.+6  ;
      ds. w1    f23.+6  ;

      al  w3  x2+2      ;   process description(work area);
      jd        1<11+8  ;   reserve process(workarea); 
      jd        1<11+4  ;
      se  w0    0       ;   if process does not exist then
      jl.       a5.     ;     begin

a4:   al  w2    1       ; error: w2 := error, other reason;
      al. w3    d14.    ;     set return (break);
      jl. w1    c13.    ;     outtext (<:***algol object area:>);
      <:***algol object area<10><0>:> ;
                        ;     end;

a5:   am       (0)      ;   comment: find number of segments
      rl  w1    +18     ;     in area process;
      rs. w1    f5.     ;   available segments := number of segments;

\f


; fgs 1987.09.10               algol 6, pass 0, page 17





      am.    (b1.)      ;   w2 := other last core(output) :=
      al  w2  -8        ;   top command - 8;
      al  w1  x2-510    ;   w1 := other first core(output) := w2-510;
      ds. w2  f21.      ;
      al  w1  x1-512    ;   w1 := w1-512;
      al  w2  x1+510    ;   w2 := w1+510;
      ds. w2  f19.      ;   first core(output) := w1;
      al  w2  x2+1      ;   last core(output) := w2;
      ds. w2  f1.       ;   current outaddress := w1;
      al  w1  x1-512    ;   last outaddress := w2 + 1;
      al  w2  x1+510    ;   w1 := w1-512;  w2 := w1+510;
      ds. w2  f17.      ;   other first core(input) := w1;
      al  w1  x1-512    ;   other last core(input) := w2;
      al  w2  x1+510    ;   w1 := w1-512;  w2 := w1+510;
      ds. w2  f7.       ;   first core(input) := w1;
      al  w2  x2+1      ;   last core(input) := w2;
      ds. w2  f3.       ;   current inaddress := w1;
      al  w1  x1-2      ;   last inaddress := w2+1;
      rs. w1  c9.+4     ;   last work for pass := w1-2;
      sl. w1  c0.+512   ;   if last work for pass < first free core + 512 then
      jl.     a31.      ;    begin
      al. w3  d14.      ;     set return(break);
      al  w2  1         ;     w2 := 1;
      jl. w1  c13.      ;     writetext(<:***pass trouble:>);
      <:<10>***pass trouble<0>:>  ;
                        ;    end;
a31:  al. w0  f23.      ;
      rs. w0  c20.      ;   set address of byte output description;
      al. w0  f22.      ;
      rs. w0  c21.      ;   set address of byte input description;
      rl. w2  b1.       ;   command point := top command;
      al  w2  x2-4      ;   top source list :=
      rs. w2  b6.       ;    start source name list :=
      rs. w2  e46.      ;    top command -4;
      al  w2  x2-2      ;   top command :=
      rx. w2  b1.       ;    top command - 6;
      al. w0  b36.      ;   top copy list:=
      rs. w0  b7.       ;   work area;
      rl. w0  b0.       ; 
      se  w0  0         ;   if not fixed ix default then
      jl.     a50.      ;   begin <*produce default from cpu*>
      al  w0  1         ;     w0 :=
      ls  w0  15        ;       1<15 <*mode.ix*> or
      lo. w0  c17.      ;       modeword1;
      gg  w1  34        ; 
      sl  w1  60        ;     if cpu identification >= 60 then
      rs. w0  c17.      ;       modeword1 := w0;
                        ;   end;
 
a50:  jl. w3  a21.      ; scan: nextparam;
      bl  w1  x2        ;
      sh  w1  3         ;   if endparam then
      jl.     a55.      ;   goto finisscan;
      rl  w1  x2        ;   if param<>spacename
      se. w1  (b12.)    ;   then goto scan;
      jl.    a50.       ;
      se. w3  (b26.)    ;   if nextparam<>pointname
      jl.     a50.      ;   then goto scan;
      al. w1  b39.      ; search option in group2 and 3:
a51:  sl. w1  b15.      ; nextoption: if not found then
      jl.     a50.      ;   goto scan;
      al  w1  x1+12     ;   w1:=option addr;
      dl  w0  x1+2      ;   w3w0:=optionname;
      sn  w0  (x2+4)    ;   if param1<>
      se  w3  (x2+2)    ;   option1 then
      jl.      a51.     ;   goto nextoption;
\f


; rc 1975.01.15                                algol 6, pass 0, page 17a

      dl  w0  x1+6      ;   if param2<>
      sn  w0  (x2+8)    ;   option2 then
      se  w3  (x2+6)    ;   goto nextoption;
      jl.     a51.      ;
      jl. w3  a21.      ;   next param;
      rl  w3  x2+4      ;
      se  w3  0         ;   if param2<>0 then
      jl.     a50.      ;   goto scan;
      rl  w3  x2+2      ;
      se. w3  (b4.)     ;   if -,(param=yes
      sn. w3  (b5.)     ;   or param=no) then
      se  w3  x3        ;
      jl.     a50.      ;   goto scan;
      ac  w0  (x1+10)   ;   if yesor no then
      bs. w0  1         ;   modechange not allowed;
      la. w0  e56.      ;
      rs. w0  e56.      ;
      rl  w0  x2+2      ;
      se. w0  (b4.)     ;   if param=no then
      jl.     a52.      ;   goto no;
      rl. w0  c17.      ;   modebit:=
      lo  w0  x1+10     ;   modebit
      rs. w0  c17.      ;   or optionbit;
      jl.     a50.      ;   goto scan;
a52:  ac  w0  (x1+10)   ; no:
      bs. w0  1         ;   modebit:=
      la. w0  c17.      ;   modebit
      rs. w0  c17.      ;   and -,optionbit;
      jl.     a50.      ;   goto scan;
b32:  <:on:>            ;
b33:  <:off:>           ;
b34:  1<0               ;   listbit
a55:  rl. w1  e56.      ; finisscan:
      so  w1  1<0       ;   
      jl.     a56.      ;   if listchange allowed then
      rl. w0  c17.      ;
      am      e70-e68   ;   begin
      rl. w1  e38.      ;   if fp mode.listing then
      lo. w0  b34.      ;
      sz  w1  1<8       ;   modebits:=modebits or 1;;
      rs. w0  c17.      ;   end;
a56:  rl. w2  b1.       ;   restore w2
      al  w2  x2+6      ;

a6:   am.    (c23.)     ; scan parameter list:
      rs  w2  e63       ;   fp current command := command point;
      jl. w3  a21.      ;   next param;
      bl  w1  x2        ;
      sh  w1  3         ;   if preceding delimiter < 4 then
      jl.     a22.      ;   goto end parameters;
      rl  w1  x2        ;
      sn. w1 (b12.)     ;   if parameter = (space, name) then
      jl.     a26.      ;   goto test name;
\f

                                                                                                                                                   

; rc 1975.01.15                                     algol 6, pass 0, page 18




b2 = k+1  ; alarm state ; alarm next:
a27:  se  w3  x3        ;   if alarm state then
      jl.     a25.      ;   goto list parameter;
      al. w1  b8.       ;
      hs. w1  b2.       ;   alarm state := true;
      jl. w3  c13.      ;   writetext(<:algol param:>);

a25:  bz  w1  x2        ; list parameter:
      al. w1  x1+b13.   ;
      jl. w3  c13.      ;   writetext(delimiter table(delimiter));
      al. w3  a6.       ;   set return(scan parameter list);
      bz  w0  x2+1      ;
      al  w1  x2+2      ;   w1 := address(param);
      se  w0  4         ;   if param is name then
      jl.     c13.      ;   goto writetext;
      rl  w0  x2+2      ;   w0 := param;
      jl. w3  c14.      ;   writeinteger(<space>,1);
      32<12+1           ;
      jl.     a6.       ;   goto scan parameter list;

a26:  al  w1  0         ; test name:
      hs. w1  b2.       ;   alarm state := false;
      bz  w1  6         ;
      al  w0     0      ;   file:=0;
      sn  w1  4         ;   if following delimiter = <space> then
      jl.     a19.      ;   goto source list;
      se  w1  8         ;   if following delimiter <> point then
      jl.     a27.      ;   goto alarm next;

a7:   al. w1  b14.      ; search option table:  entry := base option table;
a8:   sl. w1  b15.      ; next option:
      jl.     a20.      ;   if entry >= last of options then
      al  w1  x1+12     ;   goto maybe source;
      dl  w0  x1+2      ;   entry := entry + 12;
      sn  w0 (x2+4)     ;   comment: an entry in the option
      se  w3 (x2+2)     ;   table consists of:
      jl.     a8.       ;   0 - 7 : name of option.
      dl  w0  x1+6      ;   8 - 9 : action on integer, action on name
      sn  w0 (x2+8)     ;  10 - 11: modebits to set;
      se  w3 (x2+6)     ;   if param <> option name(entry) then
      jl.     a8.       ;   goto next option;

      jl. w3  a21.      ;   next param;
      bz  w0  x2+1      ;
      se  w0  4         ;   if parameter = <name> then
      jl.     a10.      ;   goto yes or no;
      bl  w0  x1+8      ; integer:
      hs. w0  b3.       ;   action := action on integer(entry);

a9:   rl. w0  c17.      ; set modebits:
      lo  w0  x1+10     ;   w0 := modebits or bits(entry);
      jl.     a11.      ;   goto call action;

\f

                                                                                                                                                    

;  fgs 1986.03.07                                 algol 6, pass 0, page 19




a10:  bl  w0  x1+9      ; yes or no:
      hs. w0  b3.       ;   action := action on name(entry);
      sn. w1  b28.      ;   if option name = <:xref:> then
      jl.     a33.      ;     goto xref;
      sn. w1  b38.      ;   if optionname=copy
      jl.     a28.      ;   then goto copy;
      sn. w1  b35.      ;   if optionname = rts then
      jl.     a45.      ;     goto move name to rts name;
      rl  w0  x2+4      ;
      se  w0  0         ;   if name word 2(param) <> 0 then
      jl.     a27.      ;   goto alarm next;
      sh. w1  b39.      ;   if paramgroup>1 and
      se  w1  x1        ;   param=yes
      rl  w0  x2+2      ;   or param=no
      se. w0  (b4.)     ;   then goto scan;
      sn. w0  (b5.)     ;
      jl.     a6.       ;
      rl  w0  x2+2      ;   if param=on or
      se. w0  (b32.)    ;   param=off
      sn. w0  (b33.)    ;   then goto onoff;
      jl.     a57.      ;
      sn. w0 (b4.)      ;   if name word 1(param) = <:yes:> then
      jl.     a9.       ;   goto set modebits;
      se. w0 (b5.)      ; may be no:
      jl.     a27.      ;   if name word 1(entry) <> <:no:> then
a18:  ac  w0 (x1+10)    ;   goto alarm next;
      bs. w0  1         ;
      la. w0  c17.      ;   w0 := -,bits(entry) and modebits;

a11:  rs. w0  c17.      ; call action:
      rl  w0  x2+2      ;   modebits := w0;
b3 = k+1; action        ;   w0 := parameter;
a12:   jl.    0         ;   goto modifier(action);
a57: sh. w1  b40.       ; onoff: if -,group3 then
      jl.     a27.      ;   goto alarm next;
      rl. w3  e56.      ;   if -,modechange allowed
      so  w3  (x1+10)   ;   then
      jl.     a6.       ;   goto scan param list;
      sn. w0  (b32.)    ;   if param=on then
      jl.     a9.       ;   goto yes
      jl.     a18.      ;   else goto no;

b4:   <:yes:>           ;
b5:   <:no:>            ;
b8:   <:<10>***algol param<32><0>:>;
\f


;  fgs 1986.03.07                       algol 6, pass0, page 19a
 

a30:  se. w0 (b4.)      ; details name:
      jl.     a6.       ;   if parameter = <:yes:> then
      al  w0  1         ;    begin
      al  w1  11        ;     lower pass no := 1;
      ds. w1  c18.      ;     upper pass no := 11;
      jl.     a6.       ;    end;  goto scan parameter list;

a45:  dl  w0  x2+4      ; move name to rts name:
      ds. w0  e107.+2   ;   move
      dl  w0  x2+8      ;     parameter name
      ds. w0  e107.+6   ;   to
      jl.     a6.       ;     rts name;


a13:  al  w1  -6        ; details:  bound := -6;
a14:  rs. w0  x1+e19.   ; next interval:
      sn. w3 (b10.)     ;   interval bound(bound) := parameter;
      jl. w3  a21.      ;   if next item head = (point,integer) then
                        ;   next param;
      rs. w0  x1+e19.+2 ;   interval bound(bound+2) := parameter;
      al  w1  x1+4      ;   bound := bound + 4;
      sh  w1  0         ;   if bound > 0
      se. w3 (b10.)     ;   or next item <> (point,integer) then
      jl.     a6.       ;   goto scan parameter list;
      jl. w3  a21.      ;   next param;
      jl.     a14.      ;   goto next interval;

a15:  rs. w0  d7.       ; stop integer:  stop pass := parameter;
a16:  al  w0  1         ; stop name:
      rs. w0  f9.       ;   sorry := 1;
      jl.     a6.       ;   goto scan parameter list;

a28:  rl. w1  b7.       ; copy:
      sl. w1  b37.      ;   if number of copyparam>max
      jl.     a27.      ;   then goto alarm next;
      dl w0  x2+4       ;
      ds  w0  x1+2      ;
      dl  w0  x2+8      ;   move name
      ds  w0  x1+6      ;
      rl. w0  c17.      ;
      hs  w0  x1+9      ;   save modebit
      al  w1  x1+10     ;   copypointer.=
      rs. w1  b7.       ;   copypointer+10;
      rl. w3  e83.      ;   no.of copyparam:=
      al  w3  x3+1      ;   no.of copyparam+1;
      rs. w3  e83.      ;
      rl  w3  x2+10     ;
      ls  w3  -12       ;   if nextsep<>point
      se  w3  8         ;   then goto
      jl.     a6.       ;   scan param list;
      jl. w3  a21.      ;   next param;
      rl  w1  x2        ; 
      sn. w1  (b26.)    ;   if delim=pointname
      jl.     a28.      ;   then goto copy;
      am.       (b7.)   ;
      hs  w0    -10+8   ;   save fileno;
      sn  w0  0         ;   if fileno = 0 then
      jl.     a27.      ;   goto alarm next;
      sn. w3  (b10.)    ;   if nextdelim=pointinteger then
      jl.     a27.      ;   goto alarm next;
      se. w3  (b26.)    ;   if nextdelim<>pointname
      jl.     a6.       ;   then goto scan param list;
      jl. w3  a21.      ;   nextparam;
      jl.     a28.      ;   goto copy;
b7:   0                 ;   top copy list;
 
\f


; rc 1975.10.28                        algol 6, pass 0, page 20
 
a20:  rl  w3  x2+10     ; maybe source: 
      se. w3    (b10.)  ;   if following delim<>pointinteger
      jl.        a27.   ;   then goto alarm next;
      jl. w3     a21.   ;   next param;
      sn  w0  0         ;   if fileno=0 then
      jl.     a27.      ;   goto alarm next;
      am      -10       ;
a19:  al  w3  x2        ;

      rl. w1  b6.       ; source list:  w1 := top source list;
      rs. w2     b6.    ;   save w2
      al  w2  x3        ;
      hs  w0  x1+8      ;   save fileno
      rl. w0  c17.      ;   save modebits
      hs  w0  x1+9      ;
      dl  w0  x2+4      ;
      ds  w0  x1+2      ;   move parameter to
      dl  w0  x2+8      ;   top source list and on;
      ds  w0  x1+6      ;
      al  w1  x1+10     ;   top source list := top source list + 10;
      rl. w2     b6.    ;   restore w2
      rs. w1  b6.       ;
      jl.     a6.       ;   goto scan parameter list;
b6:   0  ; top source list;
 
; nextparam
;     entry               exit
; w0    -                 fpparameter
; w1    -                 unchanged
; w2  addr of previous    addr of leading
;     leading separator   separator
; w3  return addr         following separator
  

a21:  rs. w3  b9.       ; next param:
      ba  w2  x2+1      ;   save return;
      al  w3  x2        ;   command point :=
      ba  w3  x2+1      ;    command point + bits(12,23,item head);
      rl  w3  x3        ;   w3 := next item head;
      bl  w0  6         ;
      sh  w0  3         ;   if next delimiter < 4 then
      rl. w3  b12.      ;   w3 := (space,name);
      rl  w0  x2+2      ;   w0 := parameter;
      jl.    (b9.)      ;   return;
b9:   0  ; saved return;

a22:  rl. w2  b6.       ; end parameters:
      al  w2  x2+2      ;   start copy list := w2 :=
      rs. w2  e47.      ;    top source list + 2;
      al. w1  b36.      ;   w1 := top command;

\f

                                                                                                                                                

; fgs 1985.10.29                     algol 6, pass 0, page ...21...

a23:  dl  w0  x1+2      ; move copyparam:
      sn  w3  0         ;   if name empty then
      jl.     a24.      ;   goto set ends;
      ds  w0  x2+2      ;
      dl  w0  x1+6      ;   move name;
      ds  w0  x2+6      ;
      rl  w0  x1+8      ;
      rs  w0  x2+8      ;   move file, modebit
      al  w1  x1+10     ;   pointers:=pointers+10;
      al  w2  x2+10     ;
      jl.     a23.      ;   goto move copyparam;
a24:  al  w0  0         ; set ends:
      rs  w0  x2        ;   end branch interval list := 0;
      rs. w0 (b6.)      ;   end source list := 0;
      rl. w0  c17.      ;   w0 := modebits;
      al  w1  1         ;
      sz  w0  1<9       ;   if bossline.yes then
      hs. w1  j2.       ;   modify;
      sz. w0  (b30.)    ;   if blocks.yes then
      hs. w1  j3.       ;   modify;
      rl. w1  b17.      ;

      so  w0  1<2       ;   if pass information wanted then
      jl.     a32.      ;   begin
      rs. w1  j0.       ;    modify procedure outbyte;

c. (:e15 a. 1:) - 1     ;   if special testoutput pass 0 then
      jl. w3  d8.       ;   begin  print linehead;
      al. w1  f22.      ;    writetext(string name of object area);
      jl. w3  c13.      ;
      rl. w0  c23.      ;    write4(fp base);
      jl. w2  d20.      ;
      al. w0  c0.       ;    write4(first of pass);
      jl. w2  d20.      ;
      rl. w0  f26.      ;    write4(last work for pass);
      jl. w2  d20.      ;
      rl. w0  c17.      ;   end;
z.                      ;   end;
a32:  rl. w1  e41.      ;
      sz  w0  1<6       ;   if integer overflow wanted then
      wa. w1  b18.      ;   set bit 1 in interrupt mask;
      rs. w1  e41.      ;
      rl. w1  c23.      ;
      al  w3  x1+e25    ;   set abs address of
      rs. w3  d24.      ;    current program zone descriptor;
      rl  w2  x3+e48+6  ;   w2 := address(program share descriptor);
      al  w0  x2+10     ;   set abs address of
      rs. w0  d23.      ;    last core(program share descriptor(10));
      al  w0  x3+e49+16 ;   set abs address of
      rs. w0  d21.      ;    segment(program process description(16));
      al  w0  x2+2      ;   set abs address of
      am      -1000
      rs. w0  d27.+1000 ;    first core(program share descriptor(2));
      bz  w0  x3+e49+1  ;
      se  w0  18        ;   if process kind(program) = 18 then
      jl.     a29.      ;    begin comment: translator on magnetic tape;
      rl. w0  b19.      ;     set bit 4 in give up mask;
      lo  w0  x3+e50    ;     comment: inblock will always return by the
      rs  w0  x3+e50    ;     give up action, because last core = last work;
      am          -1000 ;
      al. w0  d28.+1000 ;     set give up action to point to the first
      rs  w0  x3+e50+2  ;     instruction after the call of inblock;
                        ;    end;
a29:  al  w1  x1+e28    ;   set abs address of
      rs. w1  e62.      ;   inblock (fp entry);
      am       -1000    ;
      jl.     c7.+1000  ;   goto next pass;
        
\f

                                                                                                                       
; rc 18.1.1971                                 algol 6, pass 0, page 21a


a33: rs.  w3    b27.       ; xref: save (next item pointer);
     dl.  w1    b21.       ;
     ds.  w1    c73.       ;   first line := first name line := 0;
     ds.  w1    c75.       ;   last line := last name line := maximum;
     rs.  w0    c71.       ;   connection mask := 0;
     rs.  w0    c76.       ;   sortareaname := undefined;

     am         b23        ; scan xref option list:

a34: al.  w3    b24.       ;   entry := option table base;
a35: al   w3  x3+8         ;   entry := entry + 8;
     sl.  w3    b25.       ;   if entry >= last of options then
     jl.        a27.       ;     goto alarm next;

     rl   w0  x2+2         ;   if param <> option name(entry) then
     se   w0 (x3)          ;     goto next option;
     jl.        a35.       ;
     dl   w1  x2+6         ;
     sn   w0 (x3+2)        ;
     se   w1 (x3+4)        ;
     jl.        a35.       ;

     am      (x3+6)        ;
a36: jl.                   ;   goto action (xref option);

a37: al   w0    7          ; xref yes:
     rs.  w0    c71.       ;   connection mask := 7;
     jl.        a6.        ;   goto scan parameter list;

a38: am         3          ; xref all:     mask := 7;
a39: am         2          ; xref use:     mask := 4;
a40: am         1          ; xref assign:  mask := 2;
a41: al   w0    1          ; xref declare: mask := 1;
     lo.  w0    c71.       ;   connection mask :=
     rs.  w0    c71.       ;   connection mask or mask;

     rl.  w3    b27.       ;   w3 := next item head;
     se.  w3   (b26.)      ;   if w3 = (point,name) then
     jl.        a43.       ;     begin
     jl.  w3    a21.       ;     next param;
     rs.  w3    b27.       ;     save (next item head);
     jl.        a34.       ;     goto scan xref option list; end;

a43: al.  w1    c72.       ;   for w1 := adr(first line),adr(first name line) do
a42: se.  w3   (b10.)      ;     begin if w3 <> (point,integer) then
     jl.        a44.       ;       goto sortarea;

     jl.  w3    a21.       ;     next param;
     rs   w0  x1           ;     first line(x1) := parameter;
     sn.  w3   (b10.)      ;     if next item head = (point,integer) then
     jl.  w3    a21.       ;       next param;
     ba.  w0    1          ;     last line(x1) := parameter + 1;
     rs   w0  x1+2         ;
     al   w1  x1+4         ;
     sh.  w1    c74.       ;
     jl.        a42.       ;     end;
\f

                                                                                                                                 
;  fgs 1986.03.07                                algol 6, pass , page 21b





a44:                        ; sortarea:
     se.  w3   (b26.)       ;   if next item head <> (point,name) then
     jl.        a6.         ;     scan parameter list;
     jl.  w3    a21.        ;   next param;

     rs.  w0    c76.        ;   move parameter to sortareaname;
     dl   w1  x2+6          ;
     ds.  w1    c76.+4      ;
     rl   w0  x2+8          ;
     rs.  w0    c76.+6      ;
     jl.        a6.         ;   goto scan parameter list;
\f

                                                                                                                                                           

; fgs 1987.05.13                     algol 6, pass 0, page ...22...
b17:  jl.     h3        ;   modifier to procedure outbyte;
b18:  1<22              ;   modifier to interrupt mask;
b19:  1<19              ;   bit 4 to give up mask (block length error;
b20:  0                 ;   standard values for: first xref-line
b21:  1<22 - 1 + 1<22   ;                        last  xref-line

b10:  8<12 + 4          ;  (point,integer);
b11:  4<12 + 4          ;  (space,integer);
b12:  4<12 + 10         ;  (space,name);
b26:  8<12 + 10         ;  (point,name);

b27:  0                 ;   next item head;

b13 = k - 4    ; delimiter table:
       <: :>   ;   space;
       <:=:>   ;   equal;
       <:.:>   ;   point;

b14 = k - 12  ; option table:


; option name           action on     action on  modebits
;                       integer       name       to change

; group 1, not treated in first param scan
     <:survey:>  ,0,0,   h. a27-a12,   a6 -a12,   w. 1<2
     <:stop:>    ,0,0,   h. a15-a12,   a16-a12,   w. 1<4
     <:details:> ,0,     h. a13-a12,   a30-a12,   w. 1<2
     <:blocks:>  ,0,0,   h. a27-a12,   a6 -a12,b30:w.1<11
     <:connect:> ,0,     h. a27-a12,   a6 -a12,   w. 1<12
     <:fp:>      ,0,0,0, h. a27-a12,   a6 -a12,   w. 1<13
b38: <:copy:>    ,0,0,   h. a27-a12,   a28-a12,   w. 0
     <:bossline:>,0,     h. a27-a12,   a6 -a12,   w. 1<9
b28: <:xref:>    ,0,0,   h. a27-a12,   a6 -a12,   w. 0
b35: <:rts<0>:>  ,0,0,   h. a27-a12,   a45-a12,   w. 0

; group 2, yes or no finished in first param scan
b39=k-12
     <:message:> ,0,     h. a27-a12,   a6 -a12,   w. 1<1
     <:index:>   ,0,0,   h. a27-a12,   a6 -a12,   w. 1<3
     <:spill:>   ,0,0,   h. a27-a12,   a6 -a12,   w. 1<6
     <:zonecheck:> ,  0, h. a27-a12,   a6 -a12,   w. 1<14
     <:ix:>,     ,0,0,0, h. a27-a12,   a6 -a12,   w. 1<15
     <:code:>      ,0,0  h. a27-a12,   a6 -a12,   w. 1<16

; group 3, on off allowed, else as group 2
b40=k-2
b29: <:list:>    ,0,0,   h. a27-a12,   a6 -a12,   w. 1<0


b15 = k - 12   ; last of options;

; xref option table:
b22 = k                         ; first of xref options;

; option name       action

 <:yes:>  , 0 , 0 , a37-a36     ;
 <:no:>   , 0 , 0 , a6 -a36     ;

b23 = b22-k                     ; option table base (incl. yes,no )
b24 = k - 8                     ; option table base (excl. yes,no )

 <:all:>  , 0 , 0 , a38-a36     ;
 <:use:>  , 0 , 0 , a39-a36     ;
 <:assign:>   , 0 , a40-a36     ;
 <:declare:>      , a41-a36     ;

b25 = k                         ; last of xref options;

\f



;  fgs 1986.02.18                   algol 6, pass 0, page ...23...


d25: 100       ; tail for look up entry and create entry;
d26:  0,r.9     ; segments = 100, dummy entry
b36: 0,r.151   ; max 30 copy-sources
b37=k-2
h5 = k - e38   ; length of entire pass 0;

e89= h5        ; load        length           for insertproc
e30= h5        ; accumulated length of passes for insertproc
i.             ; id list;

e.  ; end block: initialize translator;
i.             ; id list;
;e.  ; end block: pass 0 segment;

m. jz.fgs 1987.09.11 algol 8, pass 0



\f

▶EOF◀