DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦de64d884b⟧ TextFile

    Length: 13824 (0x3600)
    Types: TextFile
    Names: »uti29«

Derivation

└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦f8e4b63af⟧ »trcfput« 
            └─⟦this⟧ 

TextFile

;     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◀