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

⟦c7eec6a9b⟧ TextFile

    Length: 52224 (0xcc00)
    Types: TextFile
    Names: »print3tx    «

Derivation

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

TextFile

; the program is translated like
;       (print=slang text entry.no
;        print)
;  
b. g1, m3 w.
d.
p.<:fpnames:>
l.


; fgs 1985.03.26                     fp utility, print, page ...1...




; b. h99  ; begin block: fpnames; this block head must
; w.      ; always be loaded from somewhere;

s. a70, b40, c40, d20, e20, f40, g15, i24 ; begin segment: print;
w.                 ;
k = h55            ;

d0:   d1           ; length of print (in bytes)
      0            ; saved out call
      jl.     e2.  ; entry print:  goto initialize print;

f0:   0      ; segment
f1:   0      ; block length
f2:   0      ; from word
f3:   0      ; to word
f4:   0      ; from block
f5:   0      ; to block
f6:   0      ; number
f7:   0      ; block
f8:   1<22   ; last byte
f9:   0      ; first number
f10:  0      ; current word
f11:  1<22   ; infinite
f12:  0      ; total
f13:  0      ; saved pointer (area description)
f14:  0      ; base bit group table
f15:  0      ; fp base
f16:  0      ; saved command pointer

f17:  0, r.5 ; name and name table address for area description
f18:  3<12   ; message: operation = input
f19:  0      ;   first core
f20:  0      ;   last core
f21:  -1     ;   segment count
f22:  0, r.8 ; answer
f23:  0      ; fp result
f24:  0      ; top command
f25:  0      ; bit group pointer
f26:  0      ; bytes

f27:  0      ; current core relative
f28:  0      ; secondary output zone;
f29:  0      ; final addr

; output procedures. if they are called from page 2-6, the
; output will appear on secondary out, otherwise on current out

c2:  am      -22       ; writecr:
c3:  al  w2  32        ; writesp:
c9:c6:am     h26-h31   ; writechar:
c5:  am      h31-h32   ; writetext:
c4:  al. w1  h32.      ; writeinteger:
     rs. w1  d0.+2     ;
     rl. w1  f28.      ;   zone := secondary out;
i18 = k + 1 ; called from page 2-6
     sl. w3  i15       ;   if called from page 2-6 then
     al. w1  h21.      ;   then zone := current out;
     jl.    (d0.+2)    ;   goto selected output proc;

\f

                                                                                                                                                       

; rc 8.7.1970                                fp utility, print, page 2




a0:   jl. w3  c0.       ; next word:
      rl. w3  f26.      ;   get word;
      al  w3  x3-2      ;
      rs. w3  f26.      ;   bytes := bytes - 2;
      sl  w3  0         ;   if bytes >= 0 then
      jl.     a7.       ;   goto print it;
e0:   rl. w3  f7.       ; change block:
      sh. w3 (f5.)      ;   if block > to block then
      jl.     a57.      ;   
      jl.     e1.       ;   goto next field;

a57:  rl. w0  f11.      ;   blocklength := infinite;
i4 = k + 1 ; blocked    ;
      sn  w3  x3        ;   if blocked then
      jl.     a1.       ;   begin
      rl. w0  f12.      ;    w0 := total;
      jl. w2  c25.      ;    set position;
      jl. w3  c0.       ;    get word;
      rl. w0  f10.      ;    blocklength := current word;
i1 = k + 1 ; content    ;
      am      0         ;
      se  w3  x3-6      ;    if content <> 6 then
      al  w0  512       ;    blocklength := 512;
a1:   rs. w0  f1.       ;   end;
      rl. w3  f2.       ;   first := from word;
      sh. w3 (f1.)      ;   if first > blocklength
      sh  w3  -1        ;   or first < 0 then
      rl. w3  f1.       ;   first := blocklength;
      rl. w1  f3.       ;
      al  w1  x1+2      ;
      ws. w1  f2.       ;
      rs. w1  f26.      ;   bytes := to word - from word + 2;
      wa  w1  6         ;   last := first + bytes;

      sh. w1 (f1.)      ;   if last <= blocklength then
      jl.     a5.       ;   goto ok;
      rx. w1  f26.      ;
      ws. w1  f26.      ;   bytes := bytes - last +
      wa. w1  f1.       ;   blocklength ;
      rs. w1  f26.      ;

a5:   rl. w0  f12.      ; ok:
      wa  w0  6         ;   no := total + first;
      jl. w2  c25.      ;   set position;
      rl. w0  f12.      ;
      wa. w0  f1.       ;
      rs. w0  f12.      ;   total := total + blocklength;

      am.    (f7.)      ;
      al  w2  1         ;
      sh. w2 (f4.)      ;   if block < from block then
      rl. w3  f1.       ;   first := block length;

\f



                                                                               

; rc 1977.09.14                    fp utility, print, page ...3...

      se. w3 (f1.)      ;   if first = blocklength then
      jl.     a2.       ;   begin
      al  w2  0         ;    blocklength := 0;
      rs. w2  f26.      ;    bytes := 0;    
      rs. w2  f1.       ;    goto end block change;
      jl.     a4.       ;   end;

a2:   jl. w3  c2.       ; print block head:
      jl. w3  c2.       ;   writecr;
      rl. w2  f13.      ;   writecr;
      al  w3  i19       ;
      hs. w3  i18.      ;   set select;
      jl. w3  c1.       ;   list parameter(area description);
      al  w3  i15       ;
      hs. w3  i18.      ;   restore select out;
      bz. w0  i4.       ;   if blocked then
      sn  w0  0         ;   begin
      jl.     a3.       ;    writesp;
      jl. w3  c3.       ;
      rl. w0  f7.       ;    w0 := block;
      jl. w3  c4.       ;    writeinteger(<<d>,w0)
      32<12   +1        ;   end;

a3:   al  w0  0         ;
      hs. w0  i2.       ;   printcount := words per line;

a4:   rl. w1  f7.       ; end block change:
      al  w1  x1+1      ;
      rs. w1  f7.       ;   block := block + 1;
      rl. w1  f2.       ;
i10 = k + 1 ; relative out
      sn  w3  x3        ;   if -,relative out then
      wa. w1  f9.       ;   number := from word + first number else
      rs. w1  f6.       ;   number := from word;
      jl.     a0.       ;   goto next word;

a6:   am.    (f6.)      ; increase number:
      al  w1  2         ;   number := number + 2;
      rs. w1  f6.       ;   goto next word
      jl.     a0.       ;

a7:   am      -1        ; print it:
i2 = k + 1 ; print count;
      al  w0  0         ;   print count := print count - 1;
      hs. w0  i2.       ;
      sl  w0  1         ;   if print count <= 0 then
      jl.     a8.       ;   begin
      jl. w3  c2.       ;    writecr;
      rl. w0  f6.       ;    w0 := number;
      jl. w3  c4.       ;
      32<12   +6        ;    writeinteger(<<dddddd>,w0);
      al  w2  46        ;
      jl. w3  c9.       ;    writechar(point);
      rl. w0  f6.      ;
i20=k+1
;     jl.     2        ;   (if octal)
      jl.     8        ;   skip
      jl. w3  c31.     ;   writeoctal(addr);
      al  w2  46       ;
      jl. w3  c9.      ;   writechar(point);
i3 = k + 1 ; words per line;
      al  w0  0         ;    print count := words per line;
      hs. w0  i2.       ;   end
      jl.     a9.       ;   else

a8:   al  w2  44        ;
      jl. w3  c9.       ;   writechar(comma);

a9:   jl. w3  c3.       ;   writesp;
      al  w3  1         ;   
      hs. w3  i7.       ;   print := true;

\f

                                                                                                                                       

; rc 14.8.1969                               fp utility, print, page 4




i5 = k + 1 ; text       ; print text:
      sn  w3  x3        ;   if text then
      jl.     a10.      ;   begin
      rl. w1  f10.      ;    w1 := current word;
      jl. w2  c10.      ;    test graphic;
      jl. w2  c10.      ;    test graphic;
      jl. w2  c10.      ;    test graphic;
      al  w0  x3        ;    w0 := text word;
      jl. w3  c11.      ;    print textword;
                        ;   end;
a10:  rl. w2  f14.      ; print bit groups:  group no := 0;
a11:  bl  w1  x2        ; next bit group:
      sn  w1  -1        ;   if first bit(groupno) = -1 then
      jl.     a12.      ;   goto print code;
      rl. w0  f10.      ;   s := first bit(groupno);
      ls  w0  x1        ;   w0 := current word shift s;
      ac  w1  x1        ;  
      ba  w1  x2+1      ;   s := last bit(groupno) - s;
      rl  w3  x2+2      ;
      sl  w3  0         ;   if layout >= 0 then
      ls  w0  x1-23     ;   w0 := w0 shift s - 23;
      sh  w3  -1        ;   if layout < 0 then
      as  w0  x1-23     ;   w0 := w0 arithshift s - 23;
      rs. w3  b0.       ;   store layout;
      jl. w3  c4.       ;   writeinteger(layout,w0);
b0:   0  ; layout       ;
      al  w2  x2+4      ;   groupno := groupno+4;
      jl.     a11.      ;   goto next bit group;

i6 = k + 1 ; code       ; print code:
a12:  sn  w3  x3        ;   if -,code then
      jl.     a6.       ;   goto increase number;
      jl. w3  c3.       ;   writesp;
      bz. w1  f10.      ; print instruction:
      ld  w2  -6        ;   w2 := bits(6,11,current word) shift 18;
      hl. w2  f10.      ;   + bits(0,11,current word);
      am      x1        ;
      rl. w0  x1 + g0.  ;   no := bits(0,5,current word)*2;
      ld  w1  -16       ;   instruction := instruction table(no);
      hs. w0  b1.       ;   w0 := <:<instruction letters><0>:>;
      ld  w1  16        ;   mark := bits(0,7,w0);
      ls  w0  8         ;   comment: mark is <space> or <,>;
      jl. w3  c11.      ;   print text word;

      al. w0  g5.       ; print relative:
      sz  w2  1<3       ;   writetext(
      al. w0  g6.       ;   if bit(20,w2) = 0 then <:  :>
      jl. w3  c5.       ;   else <:. :>);

      al  w1  0         ; print w-register:  w1 := 0;
      ld  w2  2         ;   (w1,w2) := (w1,w2) shift 2;
b1 = k + 1 ; mark       ;   comment: w1 = register no;
      al  w3  x1        ;   test := mark + w1;
      wa. w1  g2.       ;
      ld  w1  32        ;   w0 := <:w<register no><0>:>;
      sn  w3  44        ;   if test = 44 then
      rl. w0  g5.       ;   w0 := <:  :>;
      jl. w3  c11.      ;   print text word;

\f

                                                                                                                  

; rc 1977.10.12                     fp utility, print, page ...5...




      al. w0  g5.       ; print left bracket:
      sz  w2  1<4       ;   writetext(
      al. w0  g3.       ;   if bit(19,w2) = 0 then <:  :>
      jl. w3  c5.       ;   else <: (:>);

      bz. w0  f10.      ; print index register:
      la. w0  g8.       ;   w0 := x-field of current word
      wa. w0  g7.       ;   + <:<0>x0:>;
      sn. w0 (g7.)      ;   if w0 = <:<0>x0:> then
      rl. w0  g1.       ;   w0 := <:  :>;
      ls  w0  8         ;   w0 := w0 shift 8;
      jl. w3  c11.      ;   print text word;

      bl. w1  f10.+1    ; print displacement:
      hs. w1  b2.       ;   displacement := bits(12,23,current word);
      se  w1  0         ;   if displacement <> 0 then
      jl.     a13.      ;   goto print space or sign;
      sz  w2  3<2       ;   if x-field of current word <> 0 then
      jl.     a14.      ;   goto print right bracket;

a13:  al  w0  32        ; print space or sign:  text := <:  :>;
      sz  w2  3<2       ;   if x-field of current word <> 0 then
      al  w0  43        ;   text := <:+:>;
      sh  w1  -1        ;   if displacement < 0 then
      al  w0  45        ;   text := <:-:>;
      ls  w0  16        ;   w0 := text;
      jl. w3  c11.      ;   print text word;
b2 = k + 1 ; displacement ;
      al  w0  0         ;   w0 := displacement;
      sh  w0  -1        ;   if displacement < 0 then
      ac  w0 (0)        ;   displacement := -displacement;
      jl. w3  c4.       ;   writeinteger(<<d>,w0);
      32<12   +1        ;   comment: layout;

a14:  al. w0  g5.       ; print right bracket:
      sz  w2  1<4       ;   writetext(
      al. w0  g4.       ;   if bit(19,w2) = 0 then <:  :>
      jl. w3  c5.       ;   else <:) :>);

      so  w2  1<5       ; print final address:
      jl.     a6.       ;   if bit(18,w2) = 0 then
      rl. w0  f6.       ;   goto increase number;
      ba. w0  b2.       ;   final address :=
      rs. w0 f29.      ;   displacement + number;
      jl. w3  c4.      ;   save final addr
      1<23+32<12+1      ;   writeinteger(<<-d>,final address);
      rl. w0  f29.     ;   final addr
i21=k+1
;     jl.     2        ;   (if octal)
      jl.     a6.      ;   goto increase number;
      jl. w3  c31.     ;   writeoctal(final addr);
      jl.     a6.       ;   goto increase number;
\f


; rc 1977.10.13                     print, page ...5a...
 
 
 
 
c31:
 
; procedure writeoctal(addr);
b. i3
w.
      ds. w0  i3.      ;   save w3.w0
      jl. w3  c3.      ;   writesp;
      al  w1  9        ;   count:=9;
      rs. w1  i1.      ;
i0:   rl. w1  i1.      ; loop:
      al  w1  x1+3     ;   count:=count+3;
      sl  w1  22       ;   if count>22 then
      jl.     (i2.)    ;   return;
      rs. w1  i1.      ;
      rl. w0  i3.      ;   octal:=addr
      ls  w0  x1       ;   shift count
      ls  w0  -21      ;   shift (-21);
      jl. w3  c4.      ;   writeinteger(z,<<z>,octal);
      48<12+1          ;
      jl.     i0.      ;   goto loop;
i1:   0                ;   count
i2:   0                ;   saved return
i3:   0                ;   saved addr
e.

\f

                                                                                                                        

; fgs 1985.03.26                            fp utility, print, page ...6...




e1:                     ; next field:
i7 = k + 1 ; print      ;
      se  w3  x3        ;   if -,print then
      jl.     a18.      ;   begin
      al. w1  b4.       ;
      jl. w3  c12.      ;    message(<:numbering:>);
      rl. w2  g9.       ;    list parameter(field specification);
      jl. w3  c1.       ;   end;

a18:                    ;

      jl. w3  c2.       ;   writecr;

; each call of output procedures up to this point will cause
; output on secondary out, otherwise on current out

i15 = k - i18 + 3

i8 = k + 1 ; end param  ;
      se  w3  x3        ;   if end param then
      jl.     d3.       ;   goto exit fp;
      jl.     e3.       ;   goto scan parameter list;

g1:   <:<32><32><32>:>  ;
g2:   <:<0>w0:>         ;
g3:   <:<32>(:>         ;
g4:   <:)<32>:>         ;
g5:   <:<32><32>:>      ;
g6:   <:.<32>:>         ;
g7:   <:<0>x0:>         ;
g8:   1<1+1             ;
g9:   0                 ; saved pointer(field specification);
; comma in front of instr means: w0 irrelevant

i24 = k + 24; addr of substring <:,ri:>

g0:   <:,00 do el hl la lo lx wa ws,am wm al,ri,jl,jd,je:>
      <:,xl es ea zl rl,sp,re rs wd rx hs,xs gg di ap,ul:>
      <: ci ac ns nd as ad ls ld sh sl se sn so sz,sx gp:>
      <: fa fs fm,ks fd cf dl ds aa ss,dp mh,lk ix,62,63:>

i14 = k + 1 ; bs area
c0:   se  w3  x3        ; get word:
      jl.     c26.      ;   if bs area then goto inword;
      rl. w1  f27.      ; get word from core:
      sh. w1 (f8.)      ;
      jl.     4         ;   if current core relative > last byte
      jl.     e1.       ;   then goto next field;
      al  w1  x1+2      ;   current core relative :=
      rs. w1  f27.      ;    current core relative + 2;
      wa. w1  f9.       ;   current word :=
      rl  w0  x1-2      ;   word(current core relative + first number);
; this load instruction might cause interrupt (outside core)
c27:  rs. w0  f10.      ;
      jl      x3        ;   return;

e4:   rl. w1  f15.      ; interrupt in print:
      rl  w0  x1+h10+10 ;
      sn. w0  c27.      ;   if called from get word then
      jl.     e1.       ;   goto next field;
      al  w0  h10+h76   ;
      hs. w0  i16.      ;   exit := fp break;
      jl.     d3.       ;   goto exit fp;

\f

                                                                                                                                                       

; rc 7.7.1970                           fp utility, print, page 7




b. a3, b0 ; begin block: get word
w.        ;

c26:  rs. w3  b0.       ; inword:
      rl. w0  f0.       ;   save return;
      sn. w0 (f21.)     ;   if segment = segment count then
      jl.     a0.       ;   goto test relative;
      bs. w0  1         ;
      rs. w0  f21.      ;   segment count := segment - 1;
      jl.     a1.       ;   goto input segment;

i0 = k + 1 ; rel        ; test relative:
a0:   al  w2  0         ;
      sh  w2  511       ;   if rel < 512 then
      jl.     a2.       ;   goto store word;
      al  w2  0         ;
      hs. w2  i0.       ;   rel := 0;

a1:   al. w1  f18.      ; input segment:  w1 := message address;
      al. w3  f17.      ;   w3 := addr(area name);
      jd      1<11+16   ;   send message;
      al. w1  f22.      ;   w1 := answer address;
      jd      1<11+18   ;   wait answer;
      bz  w2  x1        ;
      sn  w0  1         ;   if result <> 1
      se  w2  0         ;   or status <> 0 then
      jl.     a3.       ;   goto may be alarm;
      am     (x1+2)     ;
      sn  w3  x3        ;   if bytes transferred = 0 then 
      jl.     a1.       ;   goto input segment;

      rl. w1  f21.      ;
      al  w1  x1+1      ;
      rs. w1  f21.      ;   segment count := segment count + 1;
      rs. w1  f0.       ;   segment := segment segment count;
      jl.     a0.       ;   goto test relative;

a2:   am.    (f19.)     ; store word:
      rl  w0  x2        ;   current word :=
      rs. w0  f10.      ;   word(first core + rel);
      al  w2  x2+2      ;
      hs. w2  i0.       ;   rel := rel + 2;
      jl.    (b0.)      ;   return;

b0:   0  ; saved return ;

a3:   se  w2  1<6       ; may be alarm:
      jl.     d4.       ;   if status word(5) <> 1 then
      al  w2  0         ;   goto area alarm;
      rs. w2  f1.       ;   blocklength := 0;
      jl.     e1.       ;   goto next field;

i.  ; id list
e.  ; end block: get word

\f

                                                                                                                 

; rc 31.1.1974                            fp utility, print, page 8




d2:   al  w0  0         ; area alarm 1:  result := 0;
d4:   al  w3  1         ; area alarm:
      ls  w3 (0)        ;   w3 := 1 shift result;
      sn  w0  1         ;   if result = 1 then
      wa  w3  4         ;   w3 := w3 + statusword;
      rs. w3  f23.      ;   fpresult := w3;
      al. w1  b3.       ;
      jl. w3  c13.      ;   mess name(area);
      jl.     d3.       ;   goto exit fp:

b3:   <: area<0>:>       ;
b4:   <:numbering<0>:>  ;
b5:   <:param <0>:>     ;
b6:   <: unknown<0>:>   ;
b7:   <:core size<0>:>  ;
b8:   <:***print <0>:>  ;

      0  ; saved text address
b9:   0  ; saved w2
b10:  0  ; saved return

c12:  al  w2  1         ;
      rs. w2  f23.      ;   fpresult:=1;
      am      1         ; message:  w2 := 1; skip next;
c13:  al  w2  0         ; mess name:  w2 := 0;
      ds. w2  b9.       ;   save(w1,w2);
      rs. w3  b10.      ;   save return;
      jl. w3  c2.       ;   writecr;
      al. w0  b8.       ;
      jl. w3  c5.       ;   writetext(<:***print :>);
      am.    (b9.)      ;
      se  w3  x3        ;   if w2 = 0 then
      jl.     a15.      ;   begin
      am.    (f13.)     ;    w0 := addr(name of area descript);
      al  w0  2         ;    writetext;
      jl. w3  c5.       ;   end;

a15:  rl. w0  b9.-2     ;
      jl. w3  c5.       ;   writetext(message);
      jl.    (b10.)     ;   return;

c25:  rs. w0  f27.      ; setposition:
      ld  w1  -9        ;   current core relative := w0;
      ba. w0  1         ;
      rs. w0  f0.       ;   segment := w0 shift -9 + 1;       
      al  w0  0         ;
      ld  w1  9         ;
      hs. w0  i0.       ;   rel := w0 mod 512;
      jl      x2        ;   return;
\f



                                                                

; rc 1976.03.11                    fp utility, print, page ...8a...




d3:   rl. w2  f15.       ; exit fp:
      dl. w1  f30.       ;
      ds  w1  x2+h10+h76+2;   restore fp break routine;

      al. w3  f17.       ;
      rl. w0  f17.       ;
      sn  w0  0          ;
      jl.     d9.        ;   if name=0 then goto close secondary out;
      bz. w0  i14.       ;
      se  w0  0          ;   if bs area then
      jd      1<11+64    ;   remove process(area);

d9:   rl. w1  f28.       ; close secondary out:
      sn  w1  x2+h21     ;   if secondary out <> current out then
      jl.     d8.        ;   begin
      bz  w3  x1+h1+1    ;   char := if file=bs
      se  w3  4          ;   or file=mag tape

      sn  w3  18         ;
      am      25         ;   then em
      al  w2  0          ;   else null;
      am.    (f15.)      ;   close up(secondary out, char);
      jl  w3  h34        ;
      am.    (f15.)      ;   terminate zone(secondary out);
      jl  w3  h79-4      ;

c. h57 < 3 ; if system 3 then
      al  w3  x1+h1+2    ;   if backing storage then 
      al. w1  d10.        ;    reduce area to ne used size;
      jd      1<11+42    ;
      rl  w0  x3+14      ;
      rs  w0  x1         ;
      bz  w0  x3-1       ;
      sn  w0  4          ;
      jd      1<11+44    ;
z.         ; end system 3;

      am.    (f15.)      ;   unstack(current in);
      jl  w3  h30-4      ;   end;

d8:   rl. w1  f28.       ;
      rl. w2  f23.       ;
      se  w2  0          ;   if fp result <> 0 then
      jl. w3  c2.        ;   writecr;
      al. w1  f17.       ;   w1 := addr(area name);
      rl. w2  f23.       ;   w2 := fp result;
      am.    (f15.)      ; enter fp:
i16 = k + 1 ; exit
      jl      h7         ;   goto fp end program or break;

      jl.    (2)         ;   the instructions replace temporary
f30:  0     ; e4         ;   h10+14 and h10+16 in fp break;


\f

                                                                                                                                            

; rc 1977.09.14                         fp utility, print, page ...9...




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

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

b16:  0,    0         ; saved return, zero

c1:   rs. w3  b16.      ; list parameter:
      bz  w1  x2        ;   save(return);
a16:  al. w0  x1+b15.   ; print next:
      jl. w3  c5.       ;   writetext(<delimiter>);
      al. w3  a17.      ;   set return(get next);
      bz  w1  x2+1      ;
      al  w0  x2+2      ;   w0 := addr(param);
      sn  w1  10        ;   if param = <text> then
      jl.     c5.       ;   goto writetext;
      rl  w0  x2+2      ;   w0 := param;
      jl. w3  c4.       ;   writeinteger;
      32<12   +1        ;   comment: layout;
a17:  al  w3  x2        ; get next:
      ba  w2  x2+1      ;   save w2;
      bz  w1  x2        ;   w2 := w2 + right(w2);
      sl  w1  5         ;   if delimiter > <space> then
      jl.     a16.      ;   goto print next;
      al  w2  x3        ;   restore w2;
      jl.    (b16.)     ;   return;
i19=k-i18-1 ; top of list parameter

c8:   rs. w3  b16.      ; next param:
      ba  w2  x2+1      ;   save return;
      al  w3  x2        ;   command pointer :=
      ba  w3  x2+1      ;   command pointer + bits(12,23,itemhead);
      rl  w3  x3        ;   w3 := next item head;
      bl  w0  6         ;
      sl  w0  4         ;   if next param = <end param> then
      jl.     a19.      ;   begin
      rl. w3  b13.      ;    w3 := (space,name);
      al  w0  1         ;    end param := true;
      hs. w0  i8.       ;   end;
a19:  rl  w0  x2+2      ;   w0 := param;
      jl.    (b16.)     ;   return;

c11:  rs. w0  b16.      ; print text word:   text word := w0;
      al. w0  b16.      ;   w0 := address(text word);
      jl.     c5.       ;   goto writetext;

c10:  al  w0  0         ; test graphic:
      ld  w1  8         ;   w0 := 0;
c.h57<3 ; if system 3 then
      se  w0  35        ;   if char=35 or
      sn  w0  36        ;   if char=36 or
      al  w0  32        ;
      se  w0  64        ;   if char=64 or
      sn  w0  94        ;   if char=94 or
      al  w0  32        ;
      sn  w0  96        ;   if char=96
      al  w0  32        ;   then char=<space>;
z.      ; end system 3 code
      sl  w0  32        ;   (w0,w1) := (w0,w1) shift 8;
      sl  w0  127       ;   if w0 < 32 or w0 > 126 then
      al  w0  32        ;   w0 := <space>;
      ls  w0  16        ;
      ld  w0  8         ;   w3 := w3 shift 8 + w0;
      jl      x2        ;

\f

                                                                                                                                 

; rc 7.7.1970                             fp utility, print, page 10




b17:  4<12    +10       ; pointer(end param);
      <:end param:>, 0  ;
      4<12    +10       ;

e3:   rl. w2  f16.      ; scan parameter list:  restore command point;
a20:  jl. w3  c8.       ; scan parameter list 1:
      bz  w1  x2        ;   next param;
      sl  w1  4         ;   if param = <end param> then
      jl.     a21.      ;   begin
      al. w1  b17.      ;    saved pointer(field spec) :=
      rs. w1  g9.       ;    pointer(end param);
      al  w0  0         ;    from word := 0;
      rl. w1  f11.      ;    to word := infinite;
      ds. w1  f5.       ;    from block := 0;
      ds. w1  f3.       ;    to block := infinite;
i17 = k + 1 ; 0 for process and dump area otherwise 1
      al  w0  1         ;   blocked := true for bs area, false for process
      hs. w0  i4.       ;    goto execute 1;
      jl.     a49.      ;   end;

a21:  rs. w2  f16.      ;   save parameter pointer;
      rl  w1  x2        ;
      sn. w1 (b13.)     ;   if parameter = (space,name) then
      jl.     a23.      ;   goto format list;
      sn. w1 (b12.)     ;   if parameter = (space,integer) then
      jl.     a26.      ;   goto field specification;

a22:  al. w1  b5.       ; param error:
a30:  jl. w3  c12.      ;   message(<:param:>);
      rl. w2  f16.      ; param error 1:  restore param pointer;
      jl. w3  c1.       ;   list parameter;
      jl.     a20.      ;   goto scan parameter list;

a23:  rs. w3  b18.      ; format list:  save(delim);
      al. w3  g10.      ;   index := 0;
a24:  dl  w1  x3+2      ; search:
      sn  w0 (x2+2)     ;   if first double word(format table(index))
      se  w1 (x2+4)     ;   <> first double word(parameter) then
      jl.     a25.      ;   goto try next;
      dl  w1  x3+6      ;
      sn  w0 (x2+6)     ;   if second double word(format table(index))
      se  w1 (x2+8)     ;   <> second double word(parameter) then
      jl.     a25.      ;   goto try next;
      rl  w1  x3+8      ; found:
      bl. w3  b18.      ;   w3 := next delimiter;
d7:   jl.     x1        ;   goto format table(index+8);

a25:  sn. w3  g11.      ; try next:
      jl.     a22.      ;   if index = top index then goto param error;
      al  w3  x3+10     ;   index := index + 10;
      jl.     a24.      ;   goto search;

b18:  0  ; saved delim  ;

\f

                                                                                                                                   

; rc 1970.07.15                      fp utility, print, page ...11...




b30:  <:r:>  ; test relative out
b31:  <:a:>  ; test absolute
b32:  <:i:>  ; test indirect
b33:  <:c:>  ; test center
b34:  0      ; center address

a26:  rs. w2  g9.       ; field specification:
      al  w1  0         ;   save pointer(field specification);
      rs. w1  f4.       ;   from block := w1 := 0;
      rs. w1  f5.       ;   to block := 0;
      hs. w1  i11.      ;   absolute in := false;
      hs. w1  i12.      ;   indirect := false;
      hs. w1  i13.      ;   center := false;

a27:  hs. w1  i4.       ; next pair:
      hs. w1  i10.      ;   blocked := relative out := w1=4;
      rs. w0  x1+f2.    ;   word(w1+addr(from)) := param;
      sn. w3 (b11.)     ;   if next item = ( point, integer) then
      jl. w3  c8.       ;   next param;
      rs. w0  x1+f2.+2  ;   word(w1+addr(from)+2) := param;

      sn  w1  4         ;   if w1 = 4 then
      jl.     a28.      ;   goto execute;
      sn. w3 (b14.)     ;   if next item = (point,name) then
      jl.     a59.      ;   goto test field modifier;
      se. w3 (b11.)     ;   if next item <> (point,integer) then
      jl.     a28.      ;   goto execute;

      jl. w3  c8.       ; block:   next param;
      al  w1  4         ;   w1 := 4;
      jl.     a27.      ;   goto next pair;

a59:  jl. w3  c8.       ; test field modifier:   next param;
      rl  w1  x2        ;
      se. w1 (b14.)     ;   if item <> (point,name) then
      jl.     a22.      ;   goto param error;

      al  w1  0         ;   modifier := 0;
      sn. w0 (b30.)     ;   if item = <:r:> then
      al. w1  i10.      ;   modifier := relative out;
      sn. w0 (b31.)     ;   if item = <:a:> then
      al. w1  i11.      ;   modifier := absolute in;
      sn. w0 (b32.)     ;   if item = <:i:> then
      al. w1  i12.      ;   modifier := indirect;
      se. w0 (b33.)     ;   if param <> <:c:> then
      jl.     a60.      ;   goto test syntax;
      al. w1  i13.      ;   modifier := center;
      jl. w3  c8.       ;   next param;
      rs. w0  b34.      ;   center address := param;
      rl  w0  x2        ;   if param <> (point,integer);
      sn. w0 (b11.)     ;   then goto syntax;
a60:  sn  w1  0         ; test syntax:   if modifier = 0 then
      jl.     a22.      ; syntax :   goto param alarm;

      al  w0  1         ;
      hs  w0  x1        ;   modifier := true;
      bl  w1  6         ;
      se  w1  4         ;   if next delim <> space then
      jl.     a59.      ;   goto test field modifier;
\f


                                                                               

; rc 7.7.1970                 fp utility, print, page 11a




a61:  rs.  w2  d0.      ; set field modifiers:
i11 = k + 1 ; absolute in
         sn  w3  x3     ; set absolute:
      jl.     a62.      ;   if absolute in then
      dl. w1  f3.       ;   begin
      ws. w0  f9.       ;    from word := from word - first number;
      ws. w1  f9.       ;    to word := to word - fist number;
      ds. w1  f3.       ;
      rl. w0  b34.      ;   center address := 
      ws. w0  f9.       ;     center address - first number;
      rs. w0  b34.      ;   end;

i12 = k + 1 ; indirect
a62:  sn  w3  x3        ; set indirect:
      jl.     a63.      ;   if indirect then
      rl. w0  f2.       ;   begin
      jl. w2  c25.      ;   w0 := from word;
      jl. w3  c0.       ;   setposition;   get word;
      rl. w0  f10.      ;
      ws. w0  f9.       ;    from word :=
      rs. w0  f2.       ;     current word - first number;
      rl. w0  f3.       ;    w0 := to word;
      jl. w2  c25.      ;    setposition;
      jl. w3  c0.       ;   get word;
      rl. w0  f10.      ;   to word :=
      ws. w0  f9.       ;    current word - first number;
      rs. w0  f3.       ;   end;

i13 = k + 1 ; center    ; set center interval:
a63:  sn  w3  x3        ;   if center then
      jl.     a64.      ;   begin
      rl. w0  b34.      ;    w0 := center address;
      jl. w2  c25.      ;    setposition;
      jl. w3  c0.       ;    get word;
      rl. w0  f10.      ;    w0 := current word - first number;
      ws. w0  f9.       ;
      rx. w0  f3.       ;    to word :=
      wa. w0  f3.       ;     to word + w0;
      rx. w0  f3.       ;    from word :=
      ws. w0  f2.       ;     w0 - from word;
      rs. w0  f2.       ;   end;

a64:  rl. w2  d0.       ;
\f

                                                                         

; rc 16.7.1970               fp utility, print ,page 11b




a28:  al  w3  x2        ; execute:
      ba  w3  x3+1      ;
      bl  w0  x3        ;
      sl  w0  5         ;   if next delim <> space then
      jl.     a22.      ;   goto param alarm;
a49:  al  w0  0         ; execute 1:
      al  w3  1         ;
      rs. w3  f0.       ;   segment := 1;
      rs. w0  f26.      ;   bytes := 0;
      rs. w0  f7.       ;   block := 0;
      rs. w0  f12.      ;   total := 0;
      hs. w0  i7.       ;   print := false;
      hs. w0  i0.       ;   rel := 0;
      hs. w0  i9.       ;   new format := false;
      rs. w2  f16.      ;   save parameter pointer;
      jl.     a0.       ;   goto next word;

c24:  bz. w0  i9.       ; clear format list 1:
      se  w0  0         ;   if new format then
      jl      x3        ;   return;
      jl.     a69.      ;   goto clear 1;

i9 = k + 1 ; new format ; clear format list:
c14:  se  w3  x3        ;   if new format then
      jl      x3        ;   return;
      al  w0  0         ;
      hs. w0  i5.       ;   text := false;
      hs. w0  i6.       ;   code := false;
      al  w0  1         ;
      hs. w0  i9.       ;   new format := true;

a69:  rl. w0  f14.      ; clear 1:
      rs. w0  f25.      ;   bit group pointer :=
      al  w0 -1         ;    base bit group pointer;
      rs. w0 (f25.)     ;   terminate bit group table;
      jl      x3        ;   return;

\f

                                                                                                                                        

; rc 1977.10.13                     fp utility, print, page ...12...




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

c15:  rx. w2  f25.      ; stack group:
      al  w2  x2+4      ;   bit group pointer := bit group pointer + 4;
      sl. w2 (f24.)     ;   if bit group pointer >= top command then
      jl.     a29.      ;   goto pattern error;
      ds  w1  x2-2      ;   double word(bit group pointer - 2) :=
      rx. w2  f25.      ;   (w0,w1);
      jl      x3        ;   return;
a29:  al. w1  b7.       ; pattern error:  w1 := addr(<:core size:>);
      jl. w3  c12.      ;   message;
      rl. w2  f16.      ;   w2 := saved command pointer;
      jl. w3  c1.       ;   list parameter;
      jl.     d3.       ;   goto exit fp;

c16:  se  w3  4         ; integer:
      jl.     a22.      ;   if next delim <> space then
      jl. w3  c14.      ;   goto param error;
      al  w0  23        ;   clear format list;
      rl. w1  b22.      ;   w0 := 0<12+23;  w1 := <<-dddddddd>;
      jl. w3  c15.      ;   stack group;

a31:  al  w0  -1        ; terminate group table:
      rs. w0 (f25.)     ;   word(bit group pointer) := -1;
      jl.     a20.      ;   goto scan parameter list 1;

c17:  se  w3  4         ; byte:
      jl.     a22.      ;   if next delim <> space then
      jl. w3  c14.      ;   goto param error;
      al  w0  11        ;   clear format list;
      rl. w1  b21.      ;   w0 := 0<12+11;  w1 := <<-ddddd>;
      jl. w3  c15.      ;   stack group;
      rl. w0  b21.-2    ;   w0 := 12<12+23;
      jl. w3  c15.      ;   stack group;
      jl.     a31.      ;   goto terminate group table;
c28:  se  w3  4      ; char: if next delim<>space
      jl.     a22.   ;   then param error else
      jl. w3 c14.    ;   clear format
      al  w0 7       ;   w0:=0<12+7
      rl. w1  b36.   ;   w1:=<<ddd>
      jl. w3  c15.   ;   stack group
      rl. w0  b37.   ;   w0:=8<12+15
      jl. w3  c15.   ;   stack group
      rl. w0  b38.   ;   w0:=16<8+23
      jl. w3  c15.   ;   stack group
      jl.     a31.   ;   goto terminate group table
\f


; rc 1977.10.13                         print, page ...12a...
 
 
 
 
c29:  se  w3  4        ; abshalf:
      jl.     a22.     ;   if next delim<>space then
      jl. w3  c14.     ;   goto param error;
      al  w0  11       ;   clear format list;
      rl. w1  b25.     ;   w0:=0<12+11; w1:=<<ddddd>;
      jl. w3  c15.     ;   stack group;
      rl. w0  b21.-2   ;   w0:=12<12+23;
      jl. w3  c15.     ;   stack group;
      jl.     a31.     ;   goto terminate group table;
 
c30:  se  w3  4        ; octal:
      jl.     a22.     ;   if nextdelim<>space then
      jl. w3  c14.     ;   goto param error;
      al  w0  2        ;   w0:=0<12+2;
      hs. w0  i20.     ;   save octal for addr
      hs. w0  i21.     ;   save octal for code
      rl. w1  b39.     ;   w1:=<<z>;
      jl. w3  c15.     ;   stack group;
      wa. w0  b40.     ;   w0:=w0+3<12+3;
      jl. w3  c15.     ;   stack group;
      wa. w0  b40.     ;   w0:=w0+3<12+3;
      jl. w3  c15.     ;   stack group;
      wa. w0  b40.     ;   w0:=w0+3<12+12;
      jl. w3  c15.     ;   stack group;
      wa. w0  b40.     ;   w0:=w0+3<12+3;
      jl. w3  c15.     ;   stack group;
      wa. w0  b40.     ;   w0:=w0+3<12+3;
      jl. w3  c15.     ;   stack group;
      wa. w0  b40.     ;   w0:=w0+3<12+3;
      jl. w3  c15.     ;   stack group;
      wa. w0  b40.     ;   w0:=w0+3<12+3;
      jl. w3  c15.     ;   stack group;
      jl.     a31.     ;   goto terminate grouptable;

c18:  se  w3  4         ; all:
      jl.     a22.      ;   if next delim <> space then
      jl. w3  c14.      ;   goto param error;
a48:  al  w0  23        ;   clear format list;
      hs. w0  i6.       ; all 1:   code := true;  w0 := 0<12+23;
      rl. w1  b22.      ;   w1 := <<-dddddddd>;
      jl. w3  c15.      ;   stack group;
      al  w0  11        ;   w0 := 0<12+11;
      rl. w1  b25.      ;   w1 := <<ddddd>;
      jl. w3  c15.      ;   stack group;
      jl.     a31.      ;   terminate group table;

\f

                                                                                                                                           

; rc 16.04.1972                           fp utility, print, page ...13...




b26:  0  ; from bit, to bit

c19:  se  w3  4         ; code:
      jl.     a22.      ;   if next delim <> <space> then
      jl. w3  c14.      ;   goto param error;
      al  w0  1         ;   clear format list;
      hs. w0  i6.       ;   code := true;
      jl.     a20.      ;   goto scan parameter list 1;

c20:  se  w3  4         ; text:
      jl.     a22.      ;   if next delim <> space then
      jl. w3  c14.      ;   goto param error;
      al  w0  1         ;   clear format list;
      hs. w0  i5.       ;   text := true;
      jl.     a20.      ;   goto scan parameter list 1;

c21:  sn  w3  4         ; bits:
      jl.     a33.      ;   if next delim = space then
      jl. w3  c24.      ;   goto bit pattern 1:
      rl. w3  b18.      ;   clear format list 1;
                        ; next group:
a32:  jl. w1  c22.      ;   next bit;
      hs. w1  b26.      ;   from bit := param;
      jl. w1  c22.      ;   next bit;
      hs. w1  b26.+1    ;   to bit := param;
      bs. w1  b26.      ;   w1 := to bit - from bit;
      sh  w1  -1        ;   if w1 < 0 then
      jl.     a34.      ;   goto pattern error;
      al  w0  0         ;   w0 := 0;
      wd. w1  b23.      ;
      wa. w1  b20.      ;   w1 := w1//3 add <<dd>;
      rl. w0  b26.      ;   w0 := (from bit,to bit);
      jl. w3  c15.      ;   stack group;
      rl. w3  b18.      ;
      sn. w3 (b11.)     ;   if next param = (point, integer) then
      jl.     a32.      ;   goto next group;

      bz  w3  6         ; finis pattern:
      se  w3  4         ;   if next delim <> space then
      jl.     a34.      ;   goto pattern error;
      rl. w1  f25.      ;   save(bit group point);
      rs. w2  f16.      ;   save(parameter pointer);
      rl. w2 (f14.)     ;   save(first of bit group table);
      jl. w3  c14.      ;   clear format list;
      rs. w1  f25.      ;   restore(bit group pointer);
      rs. w2 (f14.)     ;   restore(first of bit group table);
      rl. w2  f16.      ;   restore parameter pointer;
      jl.     a31.      ;

\f

                                                                                                                               

; rc 1977.09.26                  fp utility, print, page ...14...




a33:  rs. w2  f16.      ; bit pattern:  save param pointer;
      jl. w3  c14.      ;   clear format list;
      al  w2  0         ;   bit := 0;
      rl. w1  b20.      ;   w1 := <<d>;
a35:  hs  w2  0         ; next pair:
      hs  w2  1         ;   w0 := bit shift 12 + bit;
      jl. w3  c15.      ;   stack group;
      rl. w1  b19.      ;   w1 := <<d>;
      al  w2  x2+1      ;   bit := bit + 1;
      sh  w2  23        ;   if bit <=23 then
      jl.     a35.      ;   goto next pair;
      rl. w2  f16.      ;   restore command pointer;
      jl.     a31.      ;   goto terminate group table;

c22:  rs. w1  b24.      ; next bit: save return;
      se. w3 (b11.)     ;   if next param <> (point,integer) then
      jl.     a34.      ;   goto pattern error;
      jl. w3  c8.       ;   next param;
      rs. w3  b18.      ;   save next item head;
      sl  w0  24        ;   if param > 23 then
      jl.     a34.      ;   goto pattern error;
      rl  w1  0         ;   w1 := param;
      jl.    (b24.)     ;   return;

b24:  0  ; saved return ;

a34:  rl. w1  f14.      ; pattern error:
      rs. w1  f25.      ;   bit group point :=
      al  w0  -1        ;   base bit group table;
      rs  w0  x1        ;   word(bit group point) := -1;
      jl.     a22.      ;   goto param error;

c23:  rl. w3  b18.      ; words:
      se. w3 (b11.)     ;   if next param <> (point,integer) then
      jl.     a22.      ;   goto parameter error;
      jl. w3  c8.       ;   next param;
      bz  w3  6         ;
      se  w3  4         ;   if next delim <> space then
      jl.     a22.      ;   goto param error;
      hs. w0  i3.       ;   words per line := param;
      jl.     a20.      ;   goto scan parameter list 1;

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
      <: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  ;

\f

                                                                                                                                           

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

e2:   rs. w1  f15.      ; initialize print:
      rs. w2  f24.      ;   save top command;
      rs. w3  f16.      ;   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 instruction table;
      al. w3  d5.       ;
      al  w0  x3+510    ;   first core := first free core;
      ds. w0  f20.      ;   last core := first core + 510;
      al  w3  x3+512    ;   comment: bs segment buffer;
      rs. w3  f14.      ;   base bit group table := last core + 2;
      rs. w3  f25.      ;   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    ;
      rs. w0  f28.      ;   secondary out := current out;

      rl. w2  f16.      ;   w2 := command pointer(point);
      bz  w1  x2        ;
      se  w1  6         ;   if delimiter = <=> then
      jl.     a37.      ;   begin
      am.    (f15.)     ;
      jl  w3  h29-4     ;   stack current input;
      rl. w2  f16.      ;   restore w2;
      al  w2  x2-8      ;
      rl. w3  f15.      ;
      al  w1  x3+h20    ;   zone := current in;
      al  w0  1<1+1      ;   comment: one segm. on disc;
      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:  rs. w1  f28.      ;   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;
      rl. w2   f16.      ; 
      al  w2  x2-8       ;   w2:=name addr
      am.      (f15.)    ;
      al  w1  h54        ;   w1:=lookup area
      jl. w3  a65.       ;   prepare output
a44:
      rl. w2  f16.      ;
a37:  al  w0  0         ; again:
      hs. w0  i1.       ;   content := 0;
       am     -2000
      rs. w0  f9.+2000  ;   first number := 0;
      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;
\f

                                                                

; rc 1977.10.13        fp utility, print, page ...15a...
a43:  am     -2000




      rs. w2  f13.+2000 ;   save pointer(area description);
      bz  w1  x2+1      ;
      se  w1  10        ;   if param <> name then
      am      -2000
      rs. w0  f9.+2000  ;   first number := param;
      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

                                                                                                                             

; rc 1977.10.13                 fp utility, print, page ...16...




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         ;
      hs. w0  i1.       ;   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;
      jl.     a38.      ;   goto test space;
a42:  am     -2000

      rs. w2  f16.+2000 ; area or process name:
      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;
      rl  w2  0         ;   w2 := process descr. addr.;
      rl  w0  x2+22     ;
      am     -2000
      rx. w0  f9.+2000  ;
      sn  w0  0         ;   if first number = 0 then
      jl.    6
      am     -2000
      rx. w0  f9.+2000  ;   first number := first core(process description);
      rl  w1  x2+24     ;
      ws  w1  x2+22     ;
      al  w1  x1-2      ;   last byte := last core - first core;
      am     -2000
      rs. w1  f8.+2000  ;
a50:  al  w0  0         ; ready:
      hs. w0  i17.      ;   blocked := false;
       am     -2000
      rl. w2  f16.+2000 ;   restore command pointer;
      jl.     a48.      ;   restore command pointer; goto all1;

d11:  rl  w0  x3        ; area:  name := first word(area name);
      am     -2000
      rl. w3  f15.+2000 ;   tail := abs addr(descr part first note);
c.h57<2 ; if system 2 then
      al  w1  x3+h52+2  ; may be next note:
a44:  sn  w0 (x1-2)     ;   if name = namepart(note) then
      jl.     a46.      ;   goto descriptor found;
      al  w1  x1+22     ;   tail := tail + 22;
      sh  w1  x3+h53    ;   if tail <= first after last note then
      jl.     a44.      ;   goto may be next note;
z.      ; end system 2 code
      al. w1  d5.       ; name is not note:
      am     -2000
      am.    (f13.+2000);   w1 := tail := first free core;
      al  w3  2         ;   w3 := addr(area name);
      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

                                                                                                                                 

; rc 1977.09.14                      fp utility, print, page...17...




a46:  bz  w0  x1+16     ; descriptor found:
      am     -2000
      bz. w2  i1.+2000  ;
      se  w2  6         ;   if content <> 6 then
      am     -2000
      hs. w0  i1.+2000  ;   content := tail(16);

      rl  w0  x1        ;
      sl  w0  0         ;   if tail(0) >= 0 then
      jl.     a47.      ;   goto prepare area process;
      al  w3  x1+2      ;   w3 := addr(document name);
      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;

a47:  jd      1<11+52   ; prepare area process:
      se  w0  0         ;   create area process;
      jl.     d4.       ;   if result <> 0 then
      dl  w1  x3+2      ;   goto area alarm;
      am      -2000
      ds. w1  f17.+2+2000;
      dl  w1  x3+6      ;   move name to name part
      am      -2000
      ds. w1  f17.+6+2000;   of input description;
      am     -2000

      bz. w0  i1.+2000  ;
     am      -2000
      rl. w1  f9.+2000   ;
      sn  w1  0         ;
      se  w0  7         ;   if first number <> 0 or content <> 7 then
      jl.     d12.      ;   goto start print;

      al  w0  0         ;   w0 := 0;
      hs. w0  i17.      ;   blocked := false;
      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, rl. w2  f16.+2000 ; start print: restore command pointer;
      al  w0  1         ;
      hs. w0  i14.      ;   bs area := true;
      jl.     a48.      ;   goto all1;
a65:

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

b. a2 w.
     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.

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

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

m.rc 1985.03.26  fp utility, print
 
m0=k-h55
m1=4; entry
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:>

▶EOF◀