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

⟦5ff97d38c⟧ TextFile

    Length: 9216 (0x2400)
    Types: TextFile
    Names: »writepltext«

Derivation

└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
    └─⟦4334b4c0b⟧ 
        └─⟦this⟧ »writepltext« 
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦dd2c1b53f⟧ »tplot« 
            └─⟦this⟧ 

TextFile

(
scope temp writeplot plotz plotzd
clear temp writeplot plotz plotzd
writeplot=set 1
if 9.yes
(writeplot=slang fpnames  type.yes list.no insertproc entry.no
writeplot plotz plotzd)
if 9.no
(writeplot=slang fpnames type.yes insertproc entry.no
writeplot plotz plotzd)
if ok.no
(c=message slang not ok writeplot
o c
end)
c=message slang ok writeplot
)

; HCØ   30 10 1972.
; Heinrich Bjerregaard.


; b.                    ; fpnames dummy block

b. g1,e20               ;   block with names for tails
k=0                     ;   and insertproc.
                       m.writeplot

s. b6,c24,f6,g6,i24,j48 ;   start of slang segment for proc.
h.
g0=2                    ;   g0:=no of externals;
e20:
g1:     g3,g2           ;   headword: rel of last point,
                        ;             rel of last abs word.
j3:   g0+ 3, 0          ;   RS entry  3, reserve
j6:   g0+ 6, 0          ;   RS entry  6, end register expression
j13:  g0+13, 0          ;   RS entry 13, last used
j30:  g0+30, 0          ;   RS entry 30, saved stack ref,saved w3
j41:      0, 1          ;   RS entry to first word in perm core
j42:      0, c4         ;   RS entry to first zone element
j43:      0, 9          ;   RS entry to zone formal 2
j44:      0, 5          ;   RS entry to last word in return inf.

j45:      1,b0          ;   write,first ext.,chain for rel point
j46:      2,b1          ;   plottext,second external, chain

g2=k-2-g1               ;
j47:       2,0          ;   plottext,entry point

g3=k-2-g1

w.
e0:   g0                ;   start of externallist: no of externals
      c3                ;   number of bytes in own permanent
                        ;   core to be initialized.

; Saved variables during execution:

      0,r.3             ;   old return information
      6<12+23, 0        ;   zone formals
      0,0               ;   status, bytes transferred

; Buffer and share description:

i0:   0,r.(:h1-h0:)>1   ;

; Process description:

i2:   1<23+0            ;   kind=internal process
      <:plotintern:>    ;   process name
      0,r.(:-k+2+i2+h2-h1:)>1

; Status handling:

i4:   -1                ;   give up mask
      0,r.(:-k+2+i4+h3-h2:)>1

; Address of zone descriptor:

i6:                     ;   it is assumed that h3=0

; Record description:

i8:   0,r.(:h4-h3:)>1   ;
i9:   1<22,r.3          ;   scope parameters

; Fill up with zeros to the total length of the
; zone descriptor.

;     0,r.(:-k+2+i0+h5:)>1

; Share descriptor:

i10:  0,r.h6>1          ;

c1=48                   ;   record length in bytes
c2=i6-e0-4              ;   rel address of zone descriptor
c3=k-e0-4               ;   number of bytes to be initialized
c4=c3+1                 ;   rel addr of first zone element
c5=c1+c3                ;   bytes in own permanent core
c7=i10-i6               ;   distance from zone des to share des

; List of externals:

      <:write:>,0,0     ;   name
      3<18+40<12+8<6,0  ;   integer procedure(zone,general addr);
      <:plottext:>,0    ;   name
      1<18+3<12+3<6+8,0 ;   procedure(zone, integer, integer);

      28 12 72, 12 00 00;   date and time of this version

; Constants:

f0:   4<12+0            ;   appetite increment
f1:   12<12+0           ;   appetite increment
f2:   2<12+0            ;   appetite increment


e1:   rl. w2 (j13.)     ;   w2:=last used;
      ds. w3 (j30.)     ;   saved stack ref, saved w3
      rl. w3  j41.      ;  
      al  w3  x3+c2     ;  w3:=absolute zone descriptor addr;
      rs. w3 (j43.)     ;
      rs  w3  x3+h4+0   ;

      rl. w1  j42.      ; Init zone:
      al  w1  x1-2      ;
      rs  w1  x3+h0+0   ;   base buffer area
      rs  w1  x3+h3+0   ;   record base
      rs  w1  x3+c7+2   ;   first shared
      rs  w1  x3+c7+4   ;   last shared
      rs  w1  x3+c7+22  ;   top transferred
      al  w1  x1+c1-2   ;
      rs  w1  x3+h0+2   ;   last of buffer
      rs  w1  x3+h3+2   ;   last byte
      al  w1  x3+c7     ;
      rs  w1  x3+h0+4   ;   used share
      rs  w1  x3+h0+6   ;   first share
      rs  w1  x3+h0+8   ;   last share
      rl. w1  j47.      ;   set entry point(block proc);
      rs  w1  x3+h4+2   ;
      al  w1  1         ;
      rs  w1  x3+h2+4   ;   partial word:=empty;
      al  w1  0         ;
      rs  w1  x3+h2+6   ;  zone state:=after open;


i20:                    ; Continue:
      al  w1 -4         ;   reserve 4 bytes in stack
      jl. w3 (j3.)      ;   w1:=last used:=new stack top;
      rl  w0  x2        ;
      rs. w0 (j41.)     ;   save old return point
      dl  w0  x2+4      ;
      ds. w0 (j44.)     ;  
      al  w0  b2        ;   set return inf in new stack top
      rl  w3  x1+8      ;
      wa. w3  f0.       ;   adjust appetite accordingly
      hl  w3  1         ;   rel addr of return to this segment
      rs  w3  x1+4      ;
      rl. w3  g1.       ;   set segment table(writeplot);
      ds  w3  x1+2      ;
      dl. w3 (j43.)     ;
      ds  w3  x1+8      ;   absolute address of zone descriptor
      rl. w3 (j45.)     ;   w3:=segment table(write);
b0=k+1-g1
      jl      x3        ;   goto write and
b2=k-g1                 ; Return to here:
      rl. w2 (j13.)     ;   w2:=last used;
      ds. w3 (j30.)     ;   saved stack ref, saved w3
      rl  w1  x1        ;
      rs  w1  x2-2      ;

      al  w1 -20        ;   reserve 20 bytes in stack
      jl. w3 (j3.)      ;   w1:=last used:=new stack top;
      rs  w2  x1        ;
      rl. w2  j41.      ;   w2:=absolute addr of own perm core;
      al  w0  b3        ;
      wa. w0  f1.       ;   set appetite, the last two bytes must not be
      rl. w3  g1.       ;   released by the block-proc -- they
      ds  w0  x1+4      ;   contain the number of characters printed by this call.
      dl. w0 (j43.)     ;   build up parameter-formals to the
      ds  w0  x1+8      ;   block-proc call.
      al  w2  x2+10     ;   first formals: zone des
      rs  w2  x1+12     ;   second formal.2:=address of status;
      al  w2  x2+2      ;
      rs  w2  x1+16     ;   third formal.2:=address of bytes transferred;

      rl  w3  0         ;   w3:=absolute zone des address;
      al  w0  26        ;   kind:=26;(integer);
      rs  w0  x1+10     ;   second formal.1:=kind;
      rs  w0  x1+14     ;   third formal.1:=kind;

      rl  w0  x3+h3+0   ; Close zone:
      rl  w1  x3+h2+4   ;
      sn  w1  1         ;   if partial word<>empty then
      jl.     i22.      ;   begin
      ns  w1  0         ;    justify left the partial word
      ls  w1  2         ;
      al  w0  2         ;
      wa  w0  x3+h3+0   ;    z(record base + 2):=partial word;
      rs  w1 (0)        ;
      al  w1  1         ;    partial word:=empty;
      rs  w1  x3+h2+4   ;   end;
i22:  ws  w0  x3+h0+0   ;   bytes transferred:=
      rs  w0  x2        ;   record base - base buffer area;
      rl  w1  x3+c7+2   ;
      rs  w1  x3+h3+0   ;   record base:=first shared;
      al  w1  0         ;
      rs  w1  x3+h2+6   ;   zone state: after open
      am     (0)        ;
      rs  w1  x3+c7+h6  ;   z(bytes transferred shift (-2)+2):=0;
      al  w1  c1        ;
      rs  w1  x3+h3+4   ;   record length

      rl. w3 (j46.)     ;   w3:=segment table(block proc);
b1=k+1-g1
      jl      x3        ;   goto block proc and
b3=k-g1                 ; Return to here;
      rl. w2 (j13.)     ;   w2:=last used;
      ds. w3 (j30.)     ;   saved stack ref, saved w3
      
      al  w1 -6         ;   reserve 6 bytes in stack
      jl. w3 (j3.)      ;
      rl. w2  j41.      ;   build up a point
      rl  w0  x2        ;   only used by: end register expr.
      rs  w0  x1        ;
      dl  w0  x2+4      ;
      bz  w0  1         ;
      wa. w0  f2.       ;
      ds  w0  x1+4      ;
      rl  w1  x1+6      ;   writeplot:=number of char mod c1 printed;
      jl.    (j6.)      ;   end register expr.


e18=c2
e19=c5
h.    0,r.(:504-k:)     ;   fill up the segment
w.    <:writeplot  <0>:>;   alarm text
e.                      ; end slang segment

w.
; writeplot:
g0:
      1                 ;   first tail : area with 1 segment
      0,0,0,0           ;   fill
      1<23+e1-e20       ;   entry point: writeplot
      3<18+40<12,0      ;   integer procedure(general address);
      4<12+e0-e20       ;   code proc, start of externallist
      1<12+e19          ;   1 code segment, bytes in own perm core


;plotz:
      1<23+4            ;   modekind=bs
      0,0,0,0           ;   fill
      e18+1             ;   byte in own
      14<18,0           ;   zone plotz
      4<12+e0-e20       ;   code proc, start external
      1<12+e19          ;   1 code segment, bytes in own

;plotzd:
g1:   1<23+4            ;   modekind=bs
      0,0,0,0           ;   fill
      9                 ;   byte in own
      9<18,0            ;   integer plotzd
      4<12+e0-e20       ;   code proc, start external
      1<12+e19          ;   1 code segment, bytes in own
n.
▶EOF◀