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

⟦93ec55d4e⟧ TextFile

    Length: 26880 (0x6900)
    Types: TextFile
    Names: »retprint3tx «

Derivation

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

TextFile

mode list.yes
print4tx=edit print3tx
; 
; new   : format hex

; 4.1.2 : print from relocated processes
; 4.1.3 : print from bs areas exceeding 32768 segments
;       : print from addresses beyound 4194304 up to 8388606
; 4.1.3 : print accesses each segment from 0 up until the first one to print
; 4.1.4 : print does not connect via bs entries
; 
l./1985.03.26/, r/85.03.26/88.11.21/
l./i24/, r/i24/i30/
l./jl.     e2./, d
l./f8:/, i/
f31:  0      ; block base
f32:  0      ; hwd   base
/
l./f8:/, r/1<22  /1<23-1/
l./f11:/, r/1<22  /1<23-1/
l./f12:/, i/
      0      ;
/, l1, r/total/total (double)/, p-1

l./print, page 2/, r/rc 8.7.1970  /fgs 1988.07.17/
l./rl. w0  f12./, r/rl/dl/
l./a5:/, d1, i/
a5:   al  w0  x3        ; ok:
      al  w3  0         ;
      aa. w0  f12.      ;   no := first + total;
/, p-2
l./rl. w0  f12./, r/f12./f1. /
l1, r/wa/aa/, r/f1. /f12./
l1, r/rs/ds/

l./page ...3/, r/rc 1977.09.14/fgs 1988.07.12/
l./a2:/, l./bz. w0  i4./, 
r/i4. /i14./, r/blocked/bs area/, i#
      rl. w0  f17.      ;   
      sn  w0  0         ;   if input descr.name (1) <> 0 then
      jl.     a54.      ;   begin
      am.    (f13.)     ;
      dl  w0 +4         ; 
      sn. w3 (f17.  )   ;     if name in area descr in parameter <>
      se. w0 (f17.+2)   ;
      jl.     a53.      ;
      am.    (f13.)     ;
      dl  w0 +8         ;
      sn. w3 (f17.+4)   ;        name in input descriptor then
      se. w0 (f17.+6)   ;
      jl.     a53.      ; 
      jl.     a54.      ;     begin
a53:
      jl. w3  c3.       ;       writecr;
      al  w2  40        ;
      jl. w3  c9.       ;       write (<:(:>);
      al. w0  f17.      ;
      jl. w3  c5.       ;       writetext (input descr name);
      al  w2  41        ;
      jl. w3  c9.       ;       write (<:):>);
a54:                    ;   end;
\f

                                                                                                                                           

; fgs 1988.07.12                   fp utility, print, page ...3a...
 
 
#
l./a3:/, l-1, d, i/
      32<12    +1       ;                                 
                                                          
      zl. w0  i1.       ;                                 
      se  w0  6         ;     if segmented then           
      jl.     a3.       ;     begin                       
      jl. w3  c3.       ;       writesp;                  
      al  w2  40        ;                                 
      jl. w3  c9.       ;       writechar (<:(:>);        
      rl. w0  f21.      ;                                 
      bs. w0  1         ;       w0 := segm count - 1;     
      jl. w3  c4.       ;       writeinteger (<<d>, w0);  
      32<12   +1        ;                                 
      al  w2  46        ;                                 
      jl. w3  c9.       ;       writechar (<:.:>);        
      zl. w0  i0.       ;       w0 := rel;                
      jl. w3  c4.       ;       writeinteger (<<d>, w0);  
      32<12   +1        ;       writechar (<:):>);        
      al  w2  41        ;     end;                        
      jl. w3  c9.       ;   end;                          
/, p2
l./a7:/, l./32<12   +6/, r/6/8/, r/dddddd/dddddddd/
l./i20=/, l-1, d./jl. w3  c9./, i#
      rl. w0  f6.       ;   w0 := address;

\f

                                                                                                                                           

; fgs 1988.07.12                   fp utility, print, page ...3b...
 
 
i20=k+1                 ;
;     jl.     2         ;   (if octal)
      jl.     i22.      ;   skip;
      jl. w3  c31.      ;   writeoctal (addr);
      al  w2  46        ;
      jl. w3  c9.       ;   writechar (point);
      rl. w0  f6.       ;   w0 := address;

i22=k+1                 ;
;     jl.     2         ;   (if hex)
      jl.     i3.       ;   skip;
      jl. w3  c33.      ;   writehex (addr);
      al  w2  46        ;
      jl. w3  c9.       ;   writechar (point);

#, p-14


l./page 4/, r/rc 14.8.1969 /fgs 1988.07.12/
l./jl.     a10./, r/a10./a52./
l./a10:/, i/

i26 = k + 1; hex        ; print octal:
a52:  sn  w3  x3        ;   if octal then
      jl.     a51.      ;   begin
      rl. w0  f10.      ;     w0 := current word;
      jl. w3  c31.      ;     write_octal (word);

i25 = k + 1; hex        ; print hexadecimal:
a51:  sn  w3  x3        ;   if hex then
      jl.     a10.      ;   begin
      rl. w0  f10.      ;     w0 := current word;
      jl. w3  c33.      ;     write_hex (word);

/, p-10

l./page ...5/, r/rc 1977.10.12 /fgs 1988.07.12/
l./se  w1  0/, d./jl.     a14./
l./sz  w2  3<2/, d, i/
      sz  w2  3<2       ;   if x-field      <> 0  and
      sn  w1  0         ;      displacement <> 0 then
      jl.     a55.      ;
/, p-3
l./sh  w1  -1/, r/      /a55:  /
l./b2 =/, l2, i/
      sz  w2  3<2       ;   if x-field     <> 0  and
      se  w0  0         ;      displacement = 0 then
      jl.     a56.      ;   begin
      al. w0  g14.      ;     writetext (<:____:>);
      jl. w3  c5.       ;     goto print right bracket;
      jl.     a14.      ;   end;
/
l./sh  w0  -1/, r/      /a56:  /
l./jl. w3  c4./, r/<<d>/<<dddd>/
l1, r/+1/+4/
l./rs. w0 f29./, r/f29./ f29./
l1, r/c4./c4. /
l./1<23+32<12+1/, r/+1/+9/, r/<<-d>/<<-dddddddd>/
l1, r/f29./f29. /
l2, r/2/2 /
l1, r/a6./i23./, r/increase number/hex/
l1, r/;/ ;/
l./jl.    a6./, d,
i/
i23=k+1                 ;
;     jl.     2         ;   (if hex)
      jl.     a6.       ;   goto increase number;
      jl. w3  c33.      ;   writehex (final addr);
      jl.     a6.       ;   goto increase number;
/, p-5

l./page ...5a/, r/rc 1977.10.13 /fgs 1988.07.12/
l./al  w1  9/, i/
      al. w0  g12.     ;
      jl. w3  c5.      ;   outtext (out, <:8.:>);
/, p-3
l./al  w1  9/, r/9 /-3/, r/9/-3/
l./i3:/, l2, i#


;procedure write_hex (value);
;
;        call :      return :   saved in:
;
; w0 :   value       unch       b0
; w1 :   -           unch       b1
; w2 :   -           unch       b2
; w3 :   link        unch       b3
;

b. a10, b10             ;
w.                      ;

c33:  ds. w1     b1.    ; entry:                        
      ds. w3     b3.    ;   save registers;             
      jl. w3     c3.    ;   outchar (out, sp);          
      al. w0     g13.   ;
      jl. w3     c5.    ;   outtext (<:16.:>);
      al  w0    -24     ;   shifts := -24;              
a0:   rl. w2     b0.    ;   for shifts := shifts + 4    
      wa. w0     b4.    ;     while shifts <= 0 do       
      sl  w0     1      ;   begin                       
      jl.        a1.    ;     char :=                   
      ls  w2    (0)     ;       value shift shifts      
      la. w2     b6.    ;       4;                      
      zl. w2  x2+b5.    ;     hex  :=                   
      jl. w3     c9.    ;       hextable (char);        
      jl.        a0.    ;   end;                        
a1:   dl. w1     b1.    ;   restore registers;          
      dl. w3     b3.    ;                               
      jl      x3        ; return;                       
                                                        
b0:   0                 ; saved w0                      
b1:   0                 ; -     w1                      
b2:   0                 ; -     w2                      
b3:   0                 ; -     w3                      
                                                        
b4:   4                 ; constant                      
b6:   2.1111            ; mask                          
                                                        
h.                      ; hextable (0:15):              
b5:   48, 49, 50, 51    ;   0, 1, 2, 3                  
      52, 53, 54, 55    ;   4, 5, 6, 7                  
      56, 57, 65, 66    ;   8, 9, A, B                  
      67, 68, 69, 70    ;   C, D, E, F                  
w.                      ;                               
                                                        
i.                                                      
e.                      ; end block                     

#

l./page ...6/, r/85.03.26/88.07.12/
l./g9:/, l1, i/
g12:  <:8.:>            ;
g13:  <:16.<0>:>        ;
g14:<:<32><32><32><32>:>;


/, l1, p-3
l./c0:/, l./wa. w1  f9./, d1, i/
      rl  w0  x1-2      ;   current word := word (current core relative - 2);
/, p-1

l./page 8/, r/rc 31.1.1974 /fgs 1988.07.14/
l./b4:/, r/numbering/limit violation/
l./b7:/, r/core/memory/
l./c25:/, l1, d./hs. w0  i0./, i/
      ld  w1 -9         ;   current core relative := w0;
      ls  w1 -15        ;   rel :=
      hs. w1  i0.       ;     (w3, w0) extract 9;
      ld  w1  9         ; 
      ld  w0 -9         ;   segment :=
      ba. w0  1         ;     (w3, w0) shift (-9) +
      rs. w0  f0.       ;     1;
/, p-7

l./page ...8a/, r/rc 1976.03.11 /fgs 1988.07.22/
l./f30:/, r/14/h76/, r/16/h76+2/

l./page ...9/, r/rc 1977.09.14 /fgs 1988.07.12/
l./c.h57<3/, d./z./

l./page 10/, r/rc 7.7.1970  /fgs 1988.07.17/
l./al  w0  0/, d./ds. w1  f3./, i/
      al  w0  0         ;   from word  :=          0;
      rl. w1  f11.      ;   to   word  := infinite  ;
      ds. w1  f3.       ;
      rl. w0  f31.      ;   from block := block base;
      ds. w1  f5.       ;   to   block := infinite  ;
      rs. w0  f7.       ;        block := block base;
      al  w3  0         ;
      ld  w0  9         ;   total := double 
      wa. w0  f32.      ;                (block base < 9 +
      ds. w0  f12.      ;                 hwd   base    );
/, p-10

l./page ...11/, r/rc 1970.07.15 /fgs 1988.07.14/
l./al  w1  0/, d./rs. w1  f5./, i/
      rl. w1  f31.      ;   save pointer (field specification);
      rs. w1  f4.       ;   from block := block base;
      rs. w1  f5.       ;   to   block := block base;
      rs. w1  f7.       ;   block      := block base;
      rl  w2  0         ;   save w0;
      al  w0  0         ;
      ld  w1  9         ;   total      := double
      wa. w1  f32.      ;                (block base < 9 +
      ds. w1  f12.      ;                 hwd   base    );
      al  w0  x2        ;   restore w0;
      rl. w2  g9.       ;   restore w2;
      al  w1  0         ;
/, p-11
l./a27:/, l./sn  w1  4/, d1, i/

      se  w1  4         ;   if w1 = 4 then
      jl.     a68.      ;   begin
      rl. w0  x1+f2.    ;     from block :=
      wa. w0  f31.      ;       from block +
      rs. w0  x1+f2.    ;       block base;
      rs. w0  f7.       ;     block :=
      al  w3  0         ;       from block;
      ld  w0  9         ;     total := block < 
      ds. w0  f12.      ;       9;
      rl. w0  x1+f2.+2  ;     to   block :=
      wa. w0  f31.      ;       to   block +
      rs. w0  x1+f2.+2  ;       block base;
      jl.     a28.      ;     goto execute;
a68:                    ;   end;
/, p-7

l./page 11a/, r/rc 7.7.1970  /fgs 1988.07.17/
l./jl. w2  c25./, l-1, d1, i/
      dl. w0  f12.      ;   begin
      wa. w0  f2.       ;   (w3, w0) :=
      jl. w2  c25.      ;     total + from word;
/, p1
l1, l./jl. w2  c25./, l-1, d, i/
      dl. w0  f12.      ;   (w3, w0) :=
      wa. w0  f3.       ;     total + to  word;
/, p1
l1, l./jl. w2  c25./, l-1, d, i/
      dl. w0  f12.      ;   (w3, w0) :=
      wa. w0  b34.      ;     total + center address;
/, p1
l./a64:/, d

l./page 11b/, r/rc 16.7.1970 /fgs 1988.07.14/
l./a28:/, d, i/


a64:  rl. w2  d0.       ; 
      al  w0  0         ; 
      rl. w1  f31.      ; 
      rs. w1  f7.       ;   block := block base;
      ld  w1  9         ;   total := double
      wa. w1  f32.      ;           (block base < 9 +
      ds. w1  f12.      ;            hwd   base    );

a28:  al  w3  x2        ; execute:
/, p-5
l./rs. w0  f7./, d1

l./page ...12/, r/rc 1977.10.13 /fgs 1988.07.21/
l./b19:/, d./b40:/, i#


b19:  32<12      + 1    ;
b20:  32<12      + 2    ;
      12<12      +23    ;
b21:   1<23+32<12+ 6    ;
b22:   1<23+32<12+ 9    ;
b23:               3    ;
b25:        32<12+ 5    ;
b36:        32<12+ 4    ;
b37:         8<12+15    ;
b38:        16<12+23    ;
b39:        48<12+ 1    ;
b40:         3<12+ 3    ;

#

l./page ...12a/, r/rc 1977.10.13 /fgs 1988.07.12/
l./c30:/, l./rl. w1  b39./, d15, r/a31./a20./, i/
      hs. w0  i26.      ;   octal := true; <*in write word*>
/
l./c18:/, i/

                        ; hex:
c32:  se  w3  4         ;   if next delim <> sp then
      jl.     a22.      ;     goto param error;
      jl. w3  c14.      ;   clear format list;
      al  w0  2         ;
      hs. w0  i22.      ;   hex := true; <*in write address*>
      hs. w0  i23.      ;   hex := true; <*in write final addr*>;
      hs. w0  i25.      ;   hex := true; <*in write word*>
      jl.     a20.      ;   goto scan parameterlist1;
/, p-10

l./page ...14/, r/rc 1977.09.26 /fgs 1988.07.12/
l./g10:/, d./g11:/, i#

g10:  <:integer:>  , 0 , c16-d7  ; format table:
      <:word:>, 0  , 0 , c16-d7  ;
      <:char:>, 0  , 0 , c28-d7  ;
      <:half:>, 0  , 0 , c17-d7  ;
      <:abshalf:>  , 0 , c29-d7  ;
      <:octal:>,0  , 0 , c30-d7  ;
      <:hex:>,0,0  , 0 , c32-d7  ;
      <:byte:>, 0  , 0 , c17-d7  ;
      <:code:>, 0  , 0 , c19-d7  ;
      <:text:>, 0  , 0 , c20-d7  ;
      <:bits:>, 0  , 0 , c21-d7  ;
      <:words:>,0  , 0 , c23-d7  ;
g11:  <:all:>,0,0  , 0 , c18-d7  ;

#, p-13

l./page ...15/, d b, i#
\f

                                                                                                                                           

; fgs 1988.07.12                   fp utility, print, page ...15...
 
 
b28:  <:s:>             ;
b29:  <:,xi:>           ; replaces <:,ri:> in instr table in mpu
b35:  <:connect out<0>:>;  

e2:   am          -2000 ; initialize print:
      rs. w1  f15.+2000 ;
      am          -2000 ;
      rs. w2  f24.+2000 ;   save top command;
      am          -2000 ;
      rs. w3  f16.+2000 ;   save fp base; save command pointer;
      rl. w0  b29.      ; 
      gg  w3  2*17      ;
      sl  w3  60        ;   if cpu ident >= 60 then
      rs. w0  i24.      ;     replace <:,ri:> with <:,xi:> in instr.table;
      al. w3  d5.       ;
      al  w0  x3+510    ;   first core := first free core;
      am          -2000 ;
      ds. w0  f20.+2000 ;   last core := first core + 510;
      al  w3  x3+512    ;   comment: bs segment buffer;
      am          -2000 ;
      rs. w3  f14.+2000 ;   base bit group table := last core + 2;
      am          -2000 ;
      rs. w3  f25.+2000 ;   bit group point := last core + 2;
      sh  w3  x2-4      ;   if last core + 2 >= top command then
      jl.     a36.      ;   begin
      al. w1  b7.       ;    message(<:core size:>);
      jl. w3  c12.      ;    goto exit fp
      jl.     d8.       ;   end;

a36:  dl  w0  x1+h10+h76+2;
      rx. w3  f30.-2    ;   exchange two first words of
      rx. w0  f30.      ;   fp break  with entries at print;
      al. w0  e4.       ;
      ds  w0  x1+h10+h76+2;
      al  w0  x1+h21    ;
      am          -2000 ;
      rs. w0  f28.+2000 ;   secondary out := current out;
      am          -2000 ;
      rl. w2  f16.+2000 ;   w2 := command pointer(point);

\f



; fgs 1988.07.12                   fp utility, print, page ...16...


      bz  w1  x2        ;
      se  w1  6         ;   if delimiter = <=> then
      jl.     a37.      ;   begin
      am          -2000 ;
      am.    (f15.+2000);
      jl  w3  h29-4     ;   stack current input;
      am          -2000 ;
      rl. w2  f16.+2000 ;
      al  w2  x2-8      ;
      am          -2000 ;
      rl. w3  f15.+2000 ;
      al  w1  x3+h20    ;   zone := current in;
      al  w0  1<2+0     ;   comment: one segm. , temporary;
      jl  w3  x3+h28    ;   connect out(zone);   (=secondary output);
      sn  w0  0         ;   if result <> 0 then
      jl.     d10.      ;   begin
      al. w1  b35.      ;
      jl. w3  c12.      ;    message(<:connect out:>);
      jl.      d3.      ;   goto exit fp;
d10:  am          -2000 ;
      rs. w1  f28.+2000 ;   secondary out zone := current in;
      bl  w0  x1+h1+1   ;
      sn  w0  4         ;   if -,bs and
      jl.     6         ;   -,mt
      se  w0  18        ;   then
      jl.     a44.      ;   skip;
      am           -2000;
      rl. w2   f16.+2000; 
      al  w2  x2-8      ;   w2:=name addr
      am          -2000 ;
      am.    (f15.+2000);
      al  w1  h54       ;   w1:=lookup area
      jl. w3  a65.      ;   prepare output

\f



; fgs 1988.07.12                   fp utility, print, page ...17...


a44:  am          -2000 ;
      rl. w2  f16.+2000 ;
a37:  al  w0  0         ; again:
      am         -2000  ;
      hs. w0  i1.+2000  ;
      am         -2000  ;
      rs. w0  f9.+2000  ;
      jl. w3  c8.       ;   next param;
      bl  w1  x2        ;
      sl  w1  4         ;   if param = <end list> then
      jl.     a43.      ;   begin
      al. w1  b3.       ;    message(<:area:>);
      jl. w3  c12.      ;    goto exit fp
      jl.     d3.       ;   end;

a43:  am          -2000 ;
      rs. w2  f13.+2000 ;   save pointer(area description);
      bz  w1  x2+1      ;
      se  w1  4         ;   if param = integer then
      jl.     a66.      ;
      am          -2000 ;
      rs. w0  f27.+2000 ;     current core relative := param;
      am          -2000 ;
      rs. w0  f32.+2000 ;   hwd base := param;
a66:  sn. w3 (b11.)     ;   if next param = (point, integer) then
      jl.     a41.      ;   goto numbering;
      sn. w3 (b14.)     ;   if next param = (point,name) then
      jl.     a40.      ;   goto segmented;

a38:  bl  w1  6         ; test space:
      sn  w1  4         ;   if delimiter = space then
      jl.     a42.      ;   goto area or process name;

\f



; fgs 1988.07.12                fp utility, print, page ...18...



a39:  al. w1  b5.       ; syntax error:
      jl. w3  c12.      ;   message(<:param:>);
      am          -2000 ;
      rl. w2  f13.+2000 ;   w2 := addr(area description);
      jl. w3  c1.       ;   list parameter;
      jl.     a37.      ;   goto again;

a40:  jl. w3  c8.       ; segmented:  next param;
      se. w0 (b28.)     ;   if param <> <:s:> then
      jl.     a39.      ;   goto syntax error;
      al  w0  6         ;
      am         -2000  ;
      hs. w0  i1.+2000  ;   content := 6;
      se. w3 (b11.)     ;   if next param <> (point,integer) then
      jl.     a38.      ;   goto test space;

a41:  jl. w3  c8.       ; numbering:
      am         -2000  ;
      rs. w0  f9.+2000  ;   first number := next param;
      al  w1  1         ;
      hs. w1  i27.      ;   first number read in memory area :=
      hs. w1  i28.      ;   first number read in bs     area := true;
      jl.     a38.      ;   goto test space;

a42:  am          -2000 ; area or process name:
      rs. w2  f16.+2000 ;
      am          -2000 ;
      rl. w3  f13.+2000 ;
      al  w3  x3 +2     ;
      jd      1<11+4    ;   process description;
      sn  w0  0         ;   if process does not exist then
      jl.     d11.      ;   goto area;
      rl  w2 (0)        ;
      se  w2  0         ;   if process kind <> internal then
      jl.     d11.      ;   goto area;


\f



; fgs 1988.07.12                   fp utility, print, page ...19...


      rl  w2  0         ;   proc := process descr addr;
      rl  w0  x2+22     ;   first addr := 
      wa  w0  x2+98     ;     proc.first logical + proc.base;
      am          -2000 ;
      rs. w0  f27.+2000 ;   current core relative := first address;
      am          -2000 ;
      rs. w0  f32.+2000 ;   hwd base := first address;
      rl  w1  x2+24     ;   last addr :=
      wa  w1  x2+98     ;     proc.top logical addr +
      al  w1  x1-2      ;     proc.base - 2;
      am         -2000  ;
      rs. w1  f8.+2000  ;
      am      1         ;   internal process := true;

a50:  al  w1  0         ; ready:
      am          -2000 ;
      rl. w0  f32.+2000 ;   w0 := current core relative; <* = first address*>
      am          -2000 ;
      rx. w0  f9. +2000 ;
i27 = k + 1; first number read:
      sn  w3  x3        ;   if first number read then
      jl.     a70.      ;     first number := if internal process then
      se  w1  0         ;       first number + proc.first logical addr else
      wa  w0  x2+22     ;       first number                              ;
      am         -2000  ;   else
      rx. w0  f9.+2000  ;     first number :=
a70:  rl  w1  x2+24     ;       current core relative;
      al  w0  0         ;
      hs. w0  i17.      ;   blocked := false;
      am          -2000 ;
      rl. w2  f16.+2000 ;   restore command pointer;
      jl.     a48.      ;   restore command pointer; goto all1;

\f



; fgs 1988.07.12                   fp utility, print, page ...20...


d11:  am          -2000 ; area:
      am.    (f13.+2000);   w1 := tail := first free core;
      al  w3  2         ;   w3 := addr(area name);
      dl  w1  x3+2      ;
      am           -2000;
      ds. w1 f17.+2+2000;   move name from
      dl  w1  x3+6      ;     parameter stack
      am           -2000;   to
      ds. w1 f17.+6+2000;     input description;
      al. w1  d5.       ;
      jd      1<11+42   ;   lookup entry;
      sn  w0  0         ;   if result <> 0 then
      jl.     a46.      ;   begin
      sn  w0  6         ;   if name format illegal then
      jl.     a50.      ; abs core addr:  goto ready;
a45:  al. w1  b6.       ; unknown: mess name(<:unknown);
      al  w2  1         ;
      am          -2000 ;
      rs. w2  f23.+2000 ;   fpresult:=1;
      jl. w3  c13.      ;    goto exit fp
      jl.     d3.       ;   end;

\f

                                                                                                                                 

; fgs 1988.07.12                     fp utility, print, page ...21...


a46:  am         -2000  ; descriptor found:
      zl. w0  i1.+2000  ; 
      sn  w0  6         ;   if content <> 6 <*segmented*> then
      jl.     a58.      ;
      zl  w0  x1+16     ;     content :=
      am         -2000  ;
      hs. w0  i1.+2000  ;       entry tail (16);
a58:  rl  w2  x1+14     ;   blockno := entry tail (14);
      zl  w0  x1+16     ;
      sh  w0  31        ;   if content >= 32 then
      jl.     a67.      ;   begin
      rl  w2  0         ;     blockno := 
      al  w2  x2-32     ;       content - 32;
a67:  rl  w0  x1        ;   end;
      sl  w0  0         ;   if tail(0) >= 0 then
      jl.     a47.      ;   goto prepare area process;
      al  w3  x1+2      ;   w3 := addr(document name);
      dl  w1  x3+2      ;
      am           -2000;
      ds. w1 f17.+2+2000;   move name from
      dl  w1  x3+6      ;     entry tail
      am           -2000;   to
      ds. w1 f17.+6+2000;     input description;
      al. w1  d13.      ;   w1 := first free core + 10;
      jd      1<11+42   ;   lookup entry;
      se  w0  0         ;   if result <> 0 then
      jl.     a45.      ;   goto unknown;
      am          -2000 ;
      rs. w2  f31.+2000 ;   blockbase := blockno;
      rl  w0  x1        ;
      sh  w0 -1         ;   if entry tail.size < 0 then
      jl.     a46.      ;     goto descriptor found;

\f



; fgs 1988.07.12                   fp utility, print, page ...22...


a47:  am          -2000 ; prepare area process:
      al. w3  f17.+2000 ; prepare area process:
      jd      1<11+52   ;   create area process;
      se  w0  0         ;   if result <> 0 then;
      jl.     d4.       ;     goto area alarm;
      am          -2000 ;
      rl. w1  f11.+2000 ;   
      am          -2000 ;
      rs. w1  f5. +2000 ;   to   block := infinite ;
      am          -2000 ;
      rl. w1  f31.+2000 ;
      am          -2000 ;
      rs. w1  f4. +2000 ;   from block := block base;
      am          -2000 ;
      rs. w1  f7. +2000 ;        block := blockbase;
      ld  w1  9         ;   total      := double
      am          -2000 ;
      wa. w1  f32.+2000 ;                 (block base < 9 +
      am          -2000 ;
      ds. w1  f12.+2000 ;                  hwd   base    );
      am          -2000 ;
      bz. w0  i1. +2000 ;
 i28 = k + 1; first number read:
      sn  w3  x3        ;   if first number read
      se  w0  7         ;   or content   <>    7 then
      jl.     d12.      ;     goto start print;

      al  w0  0         ;
      hs. w0  i17.      ;   blocked := false;
      am          -2000 ;
      dl. w0  f12.+2000 ;  (w3, w0) := total;
      jl. w2  c25.      ;   setposition;
      jl. w3  c26.      ;
      am          -2000 ;
      rl. w0  f10.+2000 ;   get word;
      am          -2000 ;
      rs. w0  f9. +2000 ;   first number := current word;

d12:  am          -2000 ; start print:
      rl. w2  f16.+2000 ;   restore command pointer;
      al  w0  1         ;
      hs. w0  i14.      ;   bs area := true;
      jl.     a48.      ;   goto all1;


\f



; fgs 1988.07.12                   fp utility, print, page ...23...



; procedure prepare entry for textoutput
;  w0  not used
;  w1  lookup area
;  w2  name addr, entry must be present
;  w3  return addr

b. a2 w.
a65: ds. w1  a1.        ;    save w0.w1         
     ds. w3  a2.        ;    save w2.w3         
     al  w3  x2         ;    w3:=name addr      
     jd      1<11+42    ;    lookup             
     bz  w2  x1+16      ;                       
     sh  w2  32         ;    if contents=4 or   
     sn  w2  4          ;    contents>=32       
     jl.     4          ;    then               
     jl.     a0.        ;    file:=block:=0;    
     rs  w0  x1+12      ;                       
     rs  w0  x1+14      ;                       
a0:  rs  w0  x1+16      ;    contents.entry:=0; 
     rs  w0  x1+18      ;    loadlength:=0;     
     dl  w1  110        ;                       
     ld  w1  5          ;    shortclock;        
     rl. w1  a1.        ;                       
     rs  w0  x1+10      ;                       
     jd      1<11+44    ;    changeentry;       
     dl. w1  a1.        ;    restore w0,w1      
     dl. w3  a2.        ;    restore w2,w3      
     jl      x3         ;   return              
                                                
     0                  ;   saved w0            
a1:  0                  ;   saved w1            
     0                  ;   saved w2            
a2:  0                  ;   saved w3            
e.

\f



; fgs 1988.07.12                   fp utility, print, page ...24...


d1 = k - d0 , d5 = k, d6 = k + 512, d13 = k + 10
      0     ; zero, to terminate program segment

m0 = k  - h55           ; load length
m1 = e2 - h55           ; entry point


i.          ; id list
e.          ; end segment: print

m.rc 1988.11.21  fp utility, print


\f



; fgs 1988.07.12                   fp utility, print, page ...25...



g0:g1: (:m0+511:)>9 ; segm
       0,r.4
       s2           ; date
       0,0          ; file, block
       2<12+m1      ; contents, entry
       m0           ; length
d.
p.<:insertproc:>
#

f

end
▶EOF◀