|
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: 10752 (0x2a00) Types: TextFile Names: »ttestbuf«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦e3baaaa97⟧ »tslprog« └─⟦this⟧
(testbuf=set 2 testbuf=slang fpnames type.yes availbuf=assign testbuf availbuf=changeentry bs testbuf testbuf testbuf testbuf 2.6 testbuf global testbuf end) ; HCØ 8.08.73 ; Heinrich Bjerregaard. s. a6,b24,i24,c8,e12 ; begin slang segment w. k=h55 m.testbuf 0,0 ;standard for fp-programs jl. e0. ; entry sender buf jl. e2. ; entry b0: 0 ; last parameter b1: 0 ; fp-base b2: 0 ; sender/receiver address b3: 0 ; counter for available buf b4: 0 ; sender/receiver b5: 0 ; b6: 0,0 ; sender, receiver b7: 0 ; sender/receiver addr b8: <:<0><0>r:> b9: <:<0><0>s:> b10: <:<10>available buf: <0>:> b11: <: existing sender pending<10><0>:> b12: <: existing sender received<10><0>:> b13: <: removed sender pending<10><0>:> b14: <: removed sender received<10><0>:> b15: <: normal answer pending<10><0>:> b16: <: message rejected<10><0>:> b17: <: message unintelligible<10><0>:> b18: <: receiver malfunction<10><0>:> b19: <: receiver unknown<10><0>:> b20: <:param:> b21: <:<10>***testbuf <0>:> b22: <: name unknown<0>:> ; procedure Next_parameter ; registers at entry at return ; w0 not used unchanged ; w1 - separator ; w2 - address of name/constant ; w3 link length of item b. g5 ; begin w. g0: 0 ; c6: rs. w3 g0. ; save link rl. w2 b0. ; ba w2 x2+1 ; item pointer:=item pointer rs. w2 b0. ; + core(item pointer + 1); bl w1 x2 ; w1:=separator; bl w3 x2+1 ; w3:=length of item; al w2 x2+2 ; jl. (g0.) ; return; e. ; end Next_parameter; ; procedure endprogram(ok); ; The procedure returns to the file processor with ; the ok-bit set to succes or not succes. am 1 ; c8: al w0 0 ; al w2 10 ; jl. w3 h33.-2 ; outend(10); rl w2 0 ; jl. h7. ; goto fileprocessor; e0: rs. w3 b0. ; save param_pointer rs. w1 b1. ; save fp-base jl. w3 c6. ; Nextparameter; sh w1 2 ; if no parameter then jl. e2. ; goto Avail buf; i5: ; Continue: jl. w3 c0. ; i:=procaddr(name); se w3 0 ; if name unknown then jl. i0. ; begin al. w0 b21. ; jl. w3 h31.-2 ; al w0 2 ; wa. w0 b0. ; jl. w3 h31. ; write(out,<:<10>***testbuf :>, al. w0 b22. ; name,<: name unknown:>); jl. w3 h31. ; jl. c8.-2 ; endprogram(not succes); ; end; i0: rs. w3 b2. ; save sender addr ac w3 x3 ; rs. w3 b7. ; save neg sender/receiver jl. w3 c6. ; Nextparameter; sn w1 8 ; se w3 10 ; if not a text then jl. i2. ; goto Illegal param; al w3 0 ; rl w0 x2 ; ls w0 -16 ; se. w0 (b8.) ; if name=sender then jl. i1. ; goto S; al w3 2 ; jl. i3. ; i1: sn. w0 (b9.) ; S: jl. i3. ; i2: al. w0 b21. ; Illegal param: jl. w3 h31.-2 ; al. w0 b20. ; jl. w3 h31. ; jl. c8.-2 ; endprogram(not succes); i3: rs. w3 b4. ; rl w1 86 ; w1:=message pool start; jl. 6 ; i4: rl. w1 b5. ; wa w1 90 ; rs. w1 b5. ; am (88) ; sl w1 2 ; if last buffer then jl. i20. ; goto Stop; i6: dl w3 x1+6 ; se w3 0 ; if buffer not available then jl. i10. ; goto Used; rl. w2 b3. ; Avail: al w2 x2+1 ; buffer avail:= rs. w2 b3. ; buffer avail + 1; jl. i4. ; goto Loop; i10: rx w2 6 ; ds. w3 b6.+2 ; save sender, receiver am. (b4.) ; rl. w0 b6. ; sn. w0 (b7.) ; jl. 6 ; if receiver<>message.receiver se. w0 (b2.) ; and sender<>message.sender then jl. i4. ; goto Loop; al w0 x1 ; am. (b1.) ; jl w3 h32-2 ; write(out,<<dddddddd>,buffer addr); 32<12+8 ; al w0 2 ; jl. w3 c4. ; outspace(2); sl w2 0 ; if sender>0 then jl. i14. ; goto Pos sender; ac w2 x2 ; Neg sender: jl. w3 c2. ; outname(sender addr); rl. w1 b6.+2 ; al w2 x1 ; sh w2 0 ; if receiver<0 then ac w2 x2 ; receiver:=-receiver; jl. w3 c2. ; outname(receiver addr); al. w0 b13. ; sh w1 0 ; write(out, state); al. w0 b14. ; am. (b1.) ; jl w3 h31-2 ; jl. i4. ; goto Loop; i14: jl. w3 c2. ; Pos sender: rl. w0 b6.+2 ; outname(sender addr); rl w2 0 ; sh w0 5 ; if receiver<1 or sh w0 0 ; receiver>5 then jl. i16. ; goto Exist; am. (b1.) ; Answer: jl w3 h32-2 ; write(out,<<dddddddddddd>,result); 32<12+12 ; ls w2 1 ; jl. x2 ; am b15-b16 ; am b16-b17 ; am b17-b18 ; am b18-b19 ; al. w0 b19. ; write(out,case result of am. (b1.) ; (-b15-,-b16-,-b17-,-b18-,-b19-)); jl w3 h31-2 ; jl. i4. ; goto Loop; i16: sh w0 0 ; Exist: ac w2 x2 ; jl. w3 c2. ; outname(receiver addr); sh w0 0 ; am b12-b11 ; al. w0 b11. ; am. (b1.) ; jl w3 h31-2 ; write(out, state); jl. i4. ; goto Loop; i20: jl. w3 c6. ; Stop: Nextparameter; sl w1 3 ; if more parameters then jl. i5. ; goto Continue; jl. c8. ; goto FINIS; e2: ; Avail buf: rl w2 86 ; w2:=start message pool; al w1 0 ; avail buf:=0; i22: am (88) ; sl w2 2 ; if last buffer then jl. i24. ; return; dl w0 x2+6 ; wa w2 90 ; se w0 0 ; jl. i22. ; if sender=0 and receiver=0 then se w3 0 ; avail buf:=avail buf+1; jl. i22. ; al w1 x1+1 ; jl. i22. ; i24: al w2 x1 ; al. w0 b10. ; jl. w3 h31.-2 ; al w0 x2 ; jl. w3 h32.-2 ; 32<12+3 ; jl. c8. ; ; procedure procaddr(name); ; The procedure looks for a process with a name ; name. If it exsist it returns with the according process ; description address. ; registers at entry at return ; w0,w1 not used unchanged ; w2 name addr destroyed ; w3 link 0 or pda b. d12 ; begin w. d0:0,0 d1: 0 d2: 0 c0: ds. w1 d0.+2 ; save registers rs. w3 d1. ; save return rl w3 72 ; w3:=nametable start; rs. w3 d2. ; d6: rl. w3 d2. ; Loop: sn w3 (80) ; if name table end then jl. d8. ; goto Stop; al w3 x3+2 ; get next item in name table rx. w3 d2. ; rl w3 x3 ; get proc addr dl w1 x3+4 ; sn w0 (x2) ; se w1 (x2+2) ; if name <> proc name then jl. d6. ; goto Loop; dl w1 x3+8 ; sn w0 (x2+4) ; se w1 (x2+6) ; jl. d6. ; procaddr:=pda; jl. 4 ; goto END; d8: al w3 0 ; Stop: procaddr:=0; dl. w1 d0.+2 ; END: jl. (d1.) ; return e. ; end procaddr; ; procedure outname(addr); ; The procedure prints a name given by addr+2 and ; fill up with spaces so 12 characters are printed ; totally. ; registers at entry at return ; w0,w1 not used unchanged ; w2 addr - ; w3 link - b. d12 ; begin w. d0: 0,r.4 ; saved registers d1: 8.177 600 ; second character in a word c2: ds. w1 d0.+2 ; ds. w3 d0.+6 ; save registers al w2 x2+2 ; al w0 x2 ; am. (b1.) ; jl w3 h31-2 ; write(out, rl w1 0 ; false add 32, ws w0 4 ; 12-write(out, rl w3 0 ; string name)); ls w3 -1 ; wa w3 0 ; ac w0 x3-12 ; rl w2 x1-2 ; sn w2 0 ; ba. w0 1 ; sz. w2 (d1.) ; jl. 4 ; ba. w0 1 ; sz w2 8.177 ; jl. 4 ba. w0 1 ; jl. w3 c4. ; dl. w1 d0.+2 ; restore registers dl. w3 d0.+6 ; jl x3 ; return e. ; end outname; ; procedure outspace(no); ; The procedure outputs no spaces on current ; output. ; registers at entry at return ; w0 no of char destroyed ; w1 not used - ; w2 - unchanged ; w3 link destroyed b. d6 ; begin w. d0: 0,0 c4: ds. w3 d0.+2 ; save w2, return al. w3 2 ; rl. w2 d0. ; bs. w0 1 ; sh w0 -1 ; write(out,false add 32,no); jl. (d0.+2) ; al w2 32 ; am. (b1.) ; jl w0 h26-2 ; e. ; end outspace; e. ; end slang segment e. ▶EOF◀