|
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: 13824 (0x3600) Types: TextFile Names: »uti29«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦f8e4b63af⟧ »trcfput« └─⟦this⟧
; fp-utility rubout: ; ; this program rubouts one or more backing-storage-files with a ; specified scope by filling them with a mixture of em-characters ; and nul-characters. ; at start all available core-area (from end of program to top of ; fp command stack) is filled with dummy information. this buffer ; is then copied to the specified areas until they are filled. ; if the parameter clear.yes has been interpreted, the entries to ; the following files are removed from the catalog, otherwise ; they are changed (setting: size=0 and the time for the change). ; at scope own all areas of the specified name are rubout: temp, ; login, user or project. b. g10 w. d. p.<:fpnames:> l. k=h55 s. a30, b30, c30, e30, m30, n30, s30, t30 w. b0: 0 ; stackpointer b2: 0 ; number of zerosegments b3: 0 ; number of zerobytes b4: 0 ; clear.no c0=k+2, 0, 0 ; old cat base c1: 0 ; pointer to curr. cat base c2=k+2, 0, 0 ; std base c3=k+2, 0, 0 ; user base c4=k+2, 0, 0 ; max base n0: 0, r.5 ; name buffer m0: 5<12, 0, r.3 ; message buffer t0: 0, r.17 ; entry head and tail - used as answer buffer, too t1: <:temp:>,0,0 <:login:>,0,0 <:user:>,0,0 <:project:>,0 <:own:>,0,0,0 t2: <:***rubout :> t3: <: call<10><0>:> t4: <: illegal scope<10><0>:> t5: <: unknown<10><0>:> t6: <: catalog error<10><0>:> t7: <: entry in use<10><0>:> t13: <: not bs-area<10><0>:> t8: <:param :> t9: <:( <0>:> <:= <0>:> <:. <0>:> t10: <:clear:>,0,0 t11: <:yes:> t12: <:no:> t14: 0 ; saved size s0: 0 ; state of scope all ; 4=entry found ; else entry not found yet s1: 0 ; scope: 0 = temp ; 1 = login ; 2 = user ; 3 = project ; 4 = own m1: 7 ; mask m2: 4<12+10 ; separator shift 12 + length of item m3: 8<12+10 ; separator shift 12 + length of item m4: 25<16 + 25<8 + 25 ; three em'characters g2: rs. w3 b0. ; save commandpointer dl. w1 h58. ; ds. w1 c3. ; save user base rl. w3 h16. ; w2:=process descr. addr. dl w1 x3+70 ; ds. w1 c0. ; save old base dl w1 x3+78 ; ds. w1 c2. ; save std base dl w1 x3+74 ; ds. w1 c4. ; save max base al. w3 a5. ; w3:=start of zerobytes rs. w3 m0.+2 ; ld w1 -100 ; clear w0,w1 rl. w0 m4. ; w0:=em'characters a0: al w3 x3+4 ; step upwards ds w1 x3 ; clear double word sh w3 x2-6 ; if not upper bound then jl. a0. ; continue rs. w3 m0.+4 ; last of zerobytes ws. w3 m0.+2 ; ls w3 -9 ; w3:=number of zerosegments rs. w3 b2. ; ls w3 9 ; w3:=number of zerobytes rs. w3 b3. ; rl. w3 b0. ; w3:=commandpointer se w3 x2 ; if left hand side then jl. e1. ; error 1 ba w3 x3+1 ; rl w2 x3 ; w2:=next item in command stack rs. w3 b0. ; b0:=commandpointer se. w2 (m2.) ; if item<>space then jl. e8. ; error 8 al. w1 t1. ; w1:=first of scopes a6: rl w0 x1 ; w0:=first caracters of scope sn w0 (x3+2) ; if caracters equal then jl. a7. ; goto testscope sl. w1 t2. ; if last of scopes then jl. e2. ; error 2 al w1 x1+8 ; else jl. a6. ; continue a7: rl w0 x1+2 ; testscope: se w0 (x3+4) ; test caracters jl. e2. ; error 2 rl w0 x1+4 ; se w0 (x3+6) ; jl. e2. ; error 2 rl w0 x1+6 ; se w0 (x3+8) ; jl. e2. ; error 2 al. w2 t1. ; compute scope ws w1 4 ; ls w1 -3 ; rs. w1 s1. ; s1:=scope al w3 x1 ; w3:=scope dl. w1 c2. ; w01:=standardbase sn w3 2 ; if scope user then dl. w1 c3. ; get user base sn w3 3 ; if scope project then dl. w1 c4. ; get max base al. w3 a5. ; jd 1<11+72; set catalog base rl. w3 b0. ; w3:=commandpointer ba w3 x3+1 ; a1: rs. w3 b0. ; rl w2 x3 ; w2:=next item of command stack rs. w3 s0. ; state(own):=no file found yet se. w2 (m2.) ; if item <> space then jl. e8. ; error 8 dl w1 x3+4 ; move name ds. w1 n0.+2 ; dl w1 x3+8 ; ds. w1 n0.+6 ; al. w3 n0. ; w3:=file name al w2 -2 ; initialize w2 a20: al w2 x2+2 ; step upwards sl w2 8 ; if last of name then jl. a21. ; goto analyze clear (yes/no) rl. w0 x2+n0. ; sn. w0 (x2+t10.) ; if characters equal then jl. a20. ; continue a8: al. w1 t0. ; w1:=start of entry jd 1<11+76; lookup entry head and tail se w0 0 ; if entry not looked up then jl. e3. ; error 3 rl. w0 s1. ; w0:=scope sl w0 4 ; if scope<>own then jl. a11. ; begin rl w3 x1 ; w3:=catalog key la. w3 m1. ; sn w0 0 ; if scope=temp and sl w3 2 ; catalog key=0 or 1 jl. 4 ; then jl. a11. ; ok else sn w0 1 ; if scope=login and se w3 2 ; catalog key=2 jl. 4 ; then jl. a11. ; ok else se w3 3 ; if catalog key<>3 then jl. e3. ; error 3 dl w3 x1+4 ; w23:=catalog base rl. w1 h16. ; w1:=process description sn w2 (x1+68) ; if bases do not fit se w3 (x1+70) ; then jl. e3. ; error 3 a11: al. w3 n0. ; end rl. w0 t0.+14 ; w0:=area description sh w0 -1 ; if not area then jl. e9. ; error 9 rs. w0 t14. ; saved size jd 1<11+52; create area process se w0 0 ; if not created then jl. e4. ; error 4 jd 1<11+8 ; reserve process se w0 0 ; if not reserved then jl. e4. ; error 4 a2: al. w1 m0. ; w1:=first of mess.buf. rs. w0 m0.+6 ; set first segment jd 1<11+16; send message al. w1 t0. ; w1:=first of answer buffer jd 1<11+18; wait answer se w0 1 ; if answer not normal then jl. e4. ; error 4 rl w0 x1+2 ; if all bytes transferred then se. w0 (b3.) ; jl. a3. ; goto remove rl. w0 b2. ; compute new first segment wa. w0 m0.+6 ; jl. a2. ; continue a21: rl. w3 b0. ; w3:=stackpointer ba w3 x3+1 ; next item rl w2 x3 ; se. w2 (m3.) ; if separator,length<>8,10 jl. e8. ; then error 8 rl w0 x3+2 ; sn. w0 (t11.) ; if yes then jl. a22. ; set clear.yes se. w0 (t12.) ; if not no then jl. e8. ; error 8 am -1 ; a22: al w0 1 ; set clear rs. w0 b4. ; ba w3 x3+1 ; w3:= next item jl. a1. ; goto next item a3: rl. w0 b4. ; remove: w0:=clear switch se w0 0 ; if clear.no then jl. a24. ; rl. w1 t14. ; rs. w1 t0.+14 ; length:=oldsize rs. w0 t0.+30 ; contry:=0 rs. w0 t0.+32 ; load-length:=0 dl w1 110 ; ld w1 5 ; w0:=short clock rs. w0 t0.+24 ; word 6(entry tail):=clock al. w1 t0.+14 ; w1:=entry tail; jd 1<11+44; change entry se w0 0 ; if entry not changed then jl. e7. ; entry in use jl. a23. ; a24: jd 1<11+48; remove entry se w0 0 ; jl. e7. ; entry in use a23: rl. w0 s1. ; if scope <> own se w0 4 ; then jl. a9. ; goto new name rs. w0 s0. ; else state(all):=file found rl. w1 c1. ; sl w1 12 ; if scope project then jl. e3. ; stop al w1 x1+4 ; rs. w1 c1. ; act base:=next base dl. w1 x1+c1. ; al. w3 a5. ; jd 1<11+72; set cat base al. w3 n0. ; jl. a8. ; try new scope a9: rl. w3 b0. ; new name: w3:=commandpointer ba w3 x3+1 ; bl w2 x3 ; w2:=next item se w2 2 ; if w2<>new line then jl. a1. ; continue a25: al w2 0 ; a10: dl. w1 c0. ; else al. w3 a5. ; jd 1<11+72; restore catalog base am -2000 ; jl. h7.+2000; stop. a12: al. w0 t2. ; jl. w3 h31.-2 ; write(out,<:***rubout :>) jl x2 ; return 32<16 a13: rl. w1 s1. ; ls w1 3 ; al. w0 x1+t1. ; jl. w3 h31.-2 ; write(out,<:<scope>:>) al. w0 a13.-2 ; jl. w3 h31.-2 ; outchar(out,space) al. w0 n0. ; jl. w3 h31.-2 ; write(out,<:<name>:>) jl x2 ; return e1: jl. w2 a12. ; -> ***rubout al. w0 t3. ; jl. w3 h31.-2 ; -> call jl. e6. ; stop after error e2: jl. w2 a12. ; -> ***rubout rl. w3 b0. ; al w0 x3+2 ; jl. w3 h31.-2 ; -> <scope> al. w0 t4. ; jl. w3 h31.-2 ; -> scope illegal jl. e6. ; stop after error e3: rl. w2 s0. ; if scope=all and sh w2 4 ; at least one file has been destroyed jl. a9. ; then goto next name jl. w2 a12. ; -> ***rubout jl. w2 a13. ; -> <scope> <s> <name> al. w0 t5. ; jl. w3 h31.-2 ; -> unknown jl. a9. ; goto next name e4: jl. w2 a12. ; -> ***rubout jl. w2 a13. ; -> <scope> <s> <name> al. w0 t6. ; jl. w3 h31.-2 ; -> impossible jl. a9. ; goto next name e7: jl. w2 a12. ; -> ***rubout jl. w2 a13. ; -> <scope> <s> <name> al. w0 t7. ; jl. w3 h31.-2 ; -> entry in use jl. a9. ; goto next name 0 e8: rs. w2 e8.-2 ; save w2 ls w2 -12 ; sh w2 4 ; if item>4 sn w2 0 ; or item=0 then jl. 4 ; fejl(param) else jl. a25. ; stop. jl. w2 a12. ; -> ***rubout al. w0 t8. ; jl. w3 h31.-2 ; -> param bl. w2 e8.-2 ; ls w2 -1 ; al. w0 x2+t9. ; jl. w3 h31.-2 ; -> separator bl. w2 e8.-1 ; se w2 10 ; jl. a15. ; rl. w3 b0. ; w3:=stackpointer al w0 x3+2 ; jl. w3 h31.-2 ; -> <text> al w2 10 ; jl. w3 h26.-2 ; -> new line jl. e6. ; goto stop after error e9: jl. w2 a12. ; -> ***rubout jl. w2 a13. ; -> <scope> <s> <name> al. w0 t13. ; jl. w3 h31.-2 ; -> not bs-area jl. a9. ; goto new name a15: se w2 4 ; jl. e6. ; rl. w3 b0. ; rl w0 x3+2 ; jl. w3 h32.-2 ; -> <integer> 1<23+32<12+2 ; <<-d> al w2 10 ; jl. w3 h26.-2 ; -> new line jl. e6. ; goto stop after error e6: al w2 1 ; w2:=ok.no jl. a10. ; goto stop a5: 0 e. g6=k-h55 ; length of program g9=g2-h55 ; entry point g0:g1: (:g6+511:)>9 ; segments 0, r.4 ; room for doc. name s2 ; date 0 ; file 0 ; block 2<12+g9 ; entry point g6 ; load length m. rc 1976.06.10 rubout d. p.<:insertproc:> e. ▶EOF◀