|
|
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: »clean3tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
└─⟦75ff9bef3⟧
└─⟦this⟧ »clean3tx «
\f
;rc 25.05.73 fp utility, system 3, clean ...1...
; the program is translated like
; (clean=slang text entry.no
; clean)
b. g1, f6 w. ;for insertproc
d.
p.<:fpnames:>
l.
; the program removes all catalog entries with catalog base with-
; in the specified limits. it is called as follows
;
; clean <s> <lower limit> <s> <upper limit>
;
s. a100,b30,c10,d10 w.
k=h55
a11,0 ; program length,not used
jl. b1. ; goto start;
c1: <:***clean call<10><0>:>
c2: <:***clean param<10><0>:>
c3: <:***clean low>upp<10><0>:>
c4: <:***clean limits off stand base<10><0>:>
c5: <:***clean area procs missing<10><0>:>
c6: <:***clean process too small<10><0>:>
d6: am c6-c5 ; error6;
d5: am c5-c4 ; error5;
d4: am c4-c3 ; error4;
d3: am c3-c2 ; error3;
d2: am c2-c1 ; error2;
d1: al. w0 c1. ; error1;
jl. w3 h31.-2 ; outtext(error text);
al w2 1 ;
jl. h7. ; goto end program;
;procedure next entry
;
;forwards the entry address in w2 to the next entry in the
;buffer. if end buffer is met the return is to link + 2
;else to link.
;
;w0 unchanged
;w1 unchanged
;w2 entry address new entry address
;w3 link unchanged
b21: al w2 x2+34 ; entry.adr:=entry.adr+entry.length;
sh. w2 (a73.) ; if entry <= last.seg
jl x3 ; then return;
al w2 x2+511 ; step segment: skip last word;
rs. w2 a73. ; last on segment :=
al w2 x2-509 ; entry address + 509 ;
sl. w2 (a72.) ; if buf exhausted
jl x3+2 ; then goto link+2
jl x3 ; else goto link;
\f
;rc 25.05.73 fp utility, system 3,clean ...2...
;procedure input catalog segments
;
;inputs the next segments of the catalog to the buffer
;if any segments are left. if some segments are read
;the return is to link - if no segments are read the
;return is to link+2.
;
b. j3 w.
b20: rl. w2 a71. ; if segments left
sh w2 0 ; is <= 0
jl x3+2 ; then goto link+2;
rs. w3 j1. ; save link;
al. w3 a74. ; start transport:
j2: al. w1 a75. ;
jd 1<11+16 ; send message
al. w1 a79. ; check transport:
jd 1<11+18 ; wait answer;
sn w0 2 ; if reserved
jl. j2. ; then repeat;
bz w3 x1 ;
sn w0 1 ; if result <> norm.answ.
se w3 0 ; or any status bit <> 0
jl. j3. ; then goto catalog error;
rl. w2 a71. ;
rl w3 x1+2 ;
ls w3 -9 ; seg.trans := bytes // 512 ;
rl. w0 a78. ; segment no :=
wa w0 6 ; segment no
sl. w0 (a70.) ; + seg.transf
ws. w0 a70. ; modulo length of
rs. w0 a78. ; catalog;
ws w2 6 ; seg.left :=
rs. w2 a71. ; seg.left - seg.trans ;
sh w2 -1 ; if seg.left < 0
wa w3 4 ; seg.trans:=seg.trans+seg.left ;
ls w3 9 ; buf.length:=seg.trans*512 ;
rl. w2 a76. ; entry.adr:=first.buf;
al w0 x2+509 ; last.in.seg:=first.buf+509;
wa w3 4 ; last.in.buf:=first.in.buf
ds. w0 a73. ; + buf.length;
jl. (j1.) ; return;
j1: 0 ; link
;catalog error:
j3: al w2 1 ;
ls w2 (0) ;
lo w2 x1 ; w2:=log.status;
al. w1 a74. ; w1:=addr of <:catalog:> ;
jl. h7. ; goto end program;
e.
\f
;rc 25.05.73 fp utility, system 3, clean ...3...
;working locations:
a1: 4<12+4 ; fp item space,integer
a2: 0 ; limit low
a3: 0 ; limit upp
a4: 0 ; catalog base at entry
a5: 0 ; --
a7: 0 ; name of entry
a8: 0,0 ; --
a9: 0 ; --
a10: 0 ; zero;
;the next are used in catalog scan:
a70: 0 ; catalog length
a71: 0 ; segments left
a72: 0 ; last in buffer
a73: 0 ; last on segment
a74: <:catalog:>,0,0
a75: 3<12 ; message : op = input
a76: 0 ; first
a77: 0 ; last
a78: 0 ; segment
a79: 0,r.8 ; answer
\f
;fgs 1985.03.14 fp utility, system 3, clean ...4...
b1: bl w0 x3 ; start:
sn w0 6 ; if left hand side in call
jl. d1. ; then goto error1;
ba w3 x3+1 ; lower limit: step poinyet;
rl w0 x3 ;
se. w0 (a1.) ; if item <> sp,integer
jl. d2. ; then goto error2;
rl w0 x3+2 ; save lower limit;
rs. w0 a2. ;
ba w3 x3+1 ; upperlimit: step pointer;
rl w0 x3 ; if item <> sp,int
se. w0 (a1.) ; then
jl. d2. ; goto error2;
rl w0 x3+2 ; save upper limit;
rs. w0 a3. ; test limits:
sl. w0 (a2.) ; if upper < lower
jl. b2. ; then goto
jl. d3. ; error3;
b2: am. (h16.) ; save current catalog base;
dl w1 70 ;
ds. w1 a5. ;
am. (h16.) ;
dl w1 78 ;
al w1 x1+1 ;
sh. w0 (a2.) ; if limit.low < stand.low
sh. w1 (a3.) ; or limit.upp > stand.upp
jl. d4. ; then goto error4;
al. w0 a0. ; prepare catalog scan:
al w1 x2-2 ; set first,last of free core;
ds. w1 a77. ;
ws w1 0 ; if buffer < 512 bytes
sh w1 508 ; then goto
jl. d6. ; error6;
al. w3 a74. ; create area process on
jd 1<11+52 ; the catalog;
se w0 0 ; if not created
jl. d5. ; then goto error5;
jd 1<11+4 ; process description(catalog);
am (0) ; save length of catalog;
rl w2 18 ;
rs. w2 a70. ;
rs. w2 a71. ; segments left := length of
al w2 0 ; catalog;
rs. w2 a78. ; segment := 0;
\f
;rc 25.05.73 fp utility, system 3, clean ...5...
b3: jl. w3 b20. ; next segments: input segment;
jl. b4. ; more left: goto test entry;
dl. w1 a5. ; through:
al. w3 a10. ; reestablish cat base;
jd 1<11+72 ;
al w2 0 ;
jl. h7. ; return (ok);
b4: rl w1 x2 ; test entry: if unused place
sn w1 -1 ; in catalog
jl. b5. ; then goto step entry;
dl w1 x2+4 ;
al w1 x1-1 ;
sl. w0 (a2.) ; if low.entry < low.limit
sl. w1 (a3.) ; or up.entry > up.limit
jl. b5. ; then goto step entry;
dl w1 x2+8 ; remove entry:
ds. w1 a8. ; move name to own core;
dl w1 x2+12 ;
ds. w1 a9. ;
dl w1 x2+4 ;
al. w3 a10. ; set catalog base to
jd 1<11+72 ; base of entry;
al. w3 a7. ;
jd 1<11+48 ; remove entry;
b5: jl. w3 b21. ; step entry: next entry;
jl. b4. ; more entries: goto test entry;
jl. b3. ; buf empty: goto next segment;
a0=k ; start buffer for catalog scan
a11=a0-h55 ; length of program
m.rc 1985.03.14 fp utility, system 3, clean
f1=a11 ; length
f2=4 ; entry
g0:g1: (:f1+511:)>9 ; segm
0, r.4
s2 ; date
0,0 ; file, block
2<12+f2 ; contents entry
f1 ; length
d.
p.<:insertproc:>
l.
e.
\f
▶EOF◀