|
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: »tdiablo«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦1a9e12e70⟧ »ccompose« └─⟦this⟧ └─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦25442efea⟧ »ccompose« └─⟦this⟧
\f ; call: diablo <area> first.last ( diablo=set 2 diablo=slang entry.no list.no xref.no diablo if ok.yes scope user diablo lookup diablo end) b. g1,e3 w. p.<:fpnames:> k=h55 s. c9,g9 w. 0,0 c0: 0 ; fp-base c1: 0 ; program name addr. c2: 4<12-1 ; end command. c3: <:*** :> c4: <: param <0>:> c5: <: call<0>:> c7: 0 ; saved return addr. c8: 0 ; saved error text addr. c9: 0 ; saved error text addr. ; procedure init program ; ; at entry at return ; ; w0 destroyed ; w1 fp-base current command pt ; w2 link fp-base ; w3 cammand pt. destroyed ; ; save fp-base and program name addr. ; If left side in call return to <link> else to ; <link+2> ; In h8 the pointer to program name in command stack is saved. g9: rs. w1 c0. ; save fp-base rx w1 4 ; w2:=fp-base; w1:=return; al w0 x3+2 ; rs. w0 c1. ; save program name addr bl w0 x3 ; rx w3 2 ; w3:=return; w1:=program name addr. rx w1 x2+h8 ; h8:=addr for program name in stack; se w0 6 ; w1:=current command pt. am 2 ; if left side in call then goto <link> jl x3 ; elsegoto <link+2> ; end init program ; procedure next param ; ; at entry at return ; ; w0 del,kind ; w1 current command pt. ; w2 fp-base ; w3 link unchanged ; ; if end of command return to <link> else to <link+2> g2: rl. w2 c0. ; w2:=fp-base; rl w1 x2+h8 ; ba w1 x1+1 ; pt:=pt+command stack(pt+1); rl w0 x1 ; sh. w0 (c2.) ; if end of command then jl x3 ; return to <link> rs w1 x2+h8 ; else return to <link+2>; jl x3+2 ; ; end next param ; procedure param error ; ; at entry at return ; ; w0 destroyed ; w1 -- ; w2 -- ; w3 link -- ; ; search through the command stack for a parameter with ; (del,kind)=(space,nams), whit listing the parameters ; and delimiters, ifend of command is met, return to end ; program b. a10 ; begin block: param error. w. g3: rs. w3 c7. ; save return al w0 1 ; hs. w0 g5. ; ok.bit:=<:no:>; rl. w2 c0. ; w2:=fp-base; al. w0 c3. ; jl w3 x2+h31-2 ; write(cur out,<:***:>); rl. w0 c1. ; jl w3 x2+h31 ; write(cur out,program name); al. w0 c4. ; jl w3 x2+h31 ; write(cur out,<:param:>); rl w1 x2+h8 ; pt:=addr og current command; bl w0 x1 ; del:=del for current command a1: se w0 8 ; if del=point then am -14 ; outchar(cur out,point) al w2 46 ; else outchar(cur out,space); am. (c0.) ; jl w3 h26-2 ; rl. w2 c0. ; w2:=fp-base; al. w3 a2. ; w3:=return addr from write; rl w1 x2+h8 ; al w0 x1+2 ; kind:=kind for current command bz w1 x1+1 ; if kind=text then se w1 4 ; write(cou out,currrent command) jl x2+h31-2 ; else writeinteger(cor out,current command); rl w0 (0) ; jl w3 x2+h32-2 ; 1 ; a2: rl w1 x2+h8 ; current command:= ba w1 x1+1 ; next command in stack; bl w0 x1 ; if end of command in stack then sh w0 3 ; goto end prog; jl. g8. ; sh w0 4 ; if del<>sp then jl. a3. ; goto ret; rs w1 x2+h8 ; jl. a1. ; goto list next; a3: am. (c0.) ; jl w3 h33-4 ; outend(nl); jl. (c7.) ; return; e. ; end block: param error ; terminate program with error message ; ; write one or two error messages on current output, and ; return to fp with ok.bit:=<:no:>, ; entry at g7, w0:=addr of text 1, w1:=addr. of text 2 ; entry at g4, only one text, addr. in w0 g7: rs. w1 c9. ; save text addr 2; jl. g4. ; al. w0 c5. ; error text 1:=<:call:>; g4: rs. w0 c8. ; save text addr 1; rl. w2 c0. ; w2:=fp-base; al. w0 c3. ; jl w3 x2+h31-2 ; write(cur out,<:***:>); rl. w0 c1. ; jl w3 x2+h31 ; write(cur out,program name); al w2 32 ; am. (c0.) ; jl w3 h26 ; outchar(space); rl. w2 c0. ; rl. w0 c8. ; jl w3 x2+h31 ; write(cur out,error text 1); rl. w0 c9. ; if error text addr 2<>0 then se w0 0 ; write(cur out, error text 2); jl w3 x2+h31 ; g8: jl w3 x2+h33-4 ; al w2 1 ; ok.bit:=<:no:>; am. (c0.) ; jl h7 ; ; end terminate program ; end program g5=k+1 g6: al w2 0 ; set ok.bit am. (c0.) ; jl h7 ; return to fp; b. a30,i10 w. a0=1 a10: 4<12+10 ; sp,name a11: 4<12+4 ; sp,integer a12: 0,r.4 ; name a13: 8<12+4 ; dot integer a16: 0 ; first page a17: 1 000 000 ; last page a18: 0 ; page a20: a30. 0,r.18 a21: 0,r.7 ; zone descr a22: 0,r.11 ; share descr a23: <:end. connect source<0>:> a24: <:<27><10>:> a25: <:<27><30><9><13><10>diablo end.<13><10><0>:> a26: <:diablo begin.<13><10><0>:> e1: jl. w2 g9. ; init program; jl. g4.-2 ; if left side then call error jl. w3 g2. ; next param jl. g4.-2 ; if end of com then call error; se. w0 (a10.) ; if (del,kind)<>(sp,name) then jl. i5. ; goto param; dl w0 x1+4 ; ds. w0 a12.+2 ; move name dl w0 x1+8 ; ds. w0 a12.+6 ; am. (a20.) ; init input zone al. w3 a20. ; rs. w3 a22.+2 ; al w3 x3-1 ; rs. w3 a21.+h0 ; al w3 x3+513 ; rs. w3 a21.+h0+2 ; al. w3 a22. ; rs. w3 a21.+h0+6 ; al. w1 a21. ; al. w2 a12. ; jl. w3 h27. ; connect in se w0 0 ; if not ok then jl. i6. ; goto connect in error; jl. w3 g2. ; next param; jl. i0. ; if end of param then goto copy; se. w0 (a11.) ; if (del,kind)<>sp,integer) then jl. i4. ; goto param; rl w0 x1+2 ; first:=integer; rs. w0 a16. ; rs. w0 a17. ; last:=first; jl. w3 g2. ; next param; jl. i0. ; if end com then goto copy; se. w0 (a13.) ; if (del,kind)<>(dot,integer) then jl. i4. ; goto param; rl w0 x1+2 ; last:=integer; rs. w0 a17. ; i0: al. w0 a26. ; copy: jl. w3 h31.-2 ; outtext(<:diablo begin.:>); c. a0-1 rl. w1 h21.+h0+4 ; al w0 4 ; lo w0 x1+6 ; rs w0 x1+6 z. ; mode for current out := 4; ; copy i1: al. w1 a21. ; read: jl. w3 h25. ; readchar(w2); sl w2 140 ; if w2>=140 then jl. i3. ; goto fin; se w2 139 ; if w2=139 then jl. i2. ; page:=page+1; rl. w3 a18. ; al w3 x3+1 ; rs. w3 a18. ; i2: rl. w3 a18. ; am. (a17.) ; sl w3 1 ; if last page<page then jl. i3. ; goto fin; am. (a16.) ; sh w3 -1 ; if first page<page then jl. i1. ; goto read; al. w3 i1. ; sn w2 139 ; if w2=139 then jl. i8. ; wait em; c.a0-1 se w2 10 ; if w2=10 then jl. i10. ; outchar(13); al w2 13 ; jl. w3 h26.-2 ; al w2 10 z.; i10: c.-a0 se w2 10 ; sl w2 32 ; if w2<32 and <>10 then jl. 4 ; w2:=w2+128; al w2 x2+128 z. ; jl. w3 h26.-2 ; outchar(w2); jl. i1. ; goto read; i3: ; FIN: jl. w3 i8. ; wait em; i9: al. w0 a25. ; TER: jl. w3 h31.-2 ; outtext(<:diablo end:>); al w2 0 ; jl. w3 h34.-2 ; close up current out; al. w1 a21. ; jl. w3 h79. ; terminate in zone; c.a0-1 rl. w1 h21.+h0+4 ; al w0 -5 ; la w0 x1+6 ; rs w0 x1+6 ; mode for current out :- 4; z. jl. g6. ; return to fp; i4: al. w1 a21. ; param: jl. w3 h79. ; terminate in zone; c.a0-1 rl. w1 h21.+h0+4 ; al w0 -5 ; la w0 x1+6 ; rs w0 x1+6 ; mode for current out :- 4; z. i5: al. w3 g6. ; return:=end of program; jl. g3. ; param error; i6: al. a23. ; connect in error; jl. g4. ; terminate; ; procedure wait em b. a5 w. i8: rs. w3 a3. ; save return; al w2 0 ; jl. w3 h34.-2 ; close up(NULL); a1: jl. w3 h25.-2 ; rep: inchar(w2); sn w2 64 ; if w2=64 then goto TER; jl. i9. ; se w2 10 ; if w2=10 then goto rep; jl. a1. ; al. w0 a24. ; jl. w3 h31.-2 ; outtext(<:<27><30>:>); jl. (a3.) ; return; a3: 0 e. a30: e. e0=k-h55 0,h.r.512-(:k a. 8.777:) w. e. g0:g1: (:e0+511:)>9 0,r.7 2<12+e1-h55 e0 p.<:insertproc:> ▶EOF◀