|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 9216 (0x2400) Types: TextFile Names: »writepltext«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ. └─⟦4334b4c0b⟧ └─⟦this⟧ »writepltext« └─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦dd2c1b53f⟧ »tplot« └─⟦this⟧
( 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◀