mirror of
https://github.com/PDP-10/its.git
synced 2026-01-13 23:36:30 +00:00
Added ARCCPY.
This commit is contained in:
parent
e5b40a0717
commit
32713d364f
@ -102,6 +102,7 @@ There's a [DDT cheat sheet](doc/DDT.md) for Unix users.
|
||||
|
||||
- 11SIM, PDP-11 emulator.
|
||||
- @, cross reference generation tool.
|
||||
- ARCCPY, copies and old-format archive, converting to new format.
|
||||
- ARCDEV, transparent file system access to archive files.
|
||||
- ARCSAL, archive salvager.
|
||||
- ARGUS, alerts you when specified users login or logout.
|
||||
|
||||
@ -819,6 +819,10 @@ respond "*" ":midas sysbin;luser bin_syseng;luser\r"
|
||||
expect ":KILL"
|
||||
respond "*" ":link sys1;ts luser,sysbin;luser bin\r"
|
||||
|
||||
# ARCCPY
|
||||
respond "*" ":midas sys2;ts arccpy_sysen2;arccpy\r"
|
||||
expect ":KILL"
|
||||
|
||||
# ndskdmp tape
|
||||
respond "*" ":link kshack;good ram,.;ram ram\r"
|
||||
respond "*" ":link kshack;ddt bin,.;@ ddt\r"
|
||||
|
||||
167
src/sysen2/arccpy.13
Normal file
167
src/sysen2/arccpy.13
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
;-*-midas-*-
|
||||
|
||||
title arccpy
|
||||
|
||||
a=1
|
||||
b=2
|
||||
c=3
|
||||
d=4
|
||||
e=5
|
||||
g=6
|
||||
h=7
|
||||
i=10
|
||||
j=11
|
||||
k=12
|
||||
l=13
|
||||
m=14
|
||||
n=15
|
||||
o=16
|
||||
p=17
|
||||
|
||||
define syscal name,args
|
||||
.call [ setz ? sixbit /name/ ? args ((setz))]
|
||||
termin
|
||||
|
||||
define error line
|
||||
.value [asciz / :line
|
||||
|
||||
:kill /]
|
||||
termin
|
||||
|
||||
ch==,,-1
|
||||
choarc==1 ;Channel for referring to old archive.
|
||||
chnarc==2 ;Channel for referring to new archive.
|
||||
|
||||
;something about old archive directory formats:
|
||||
udnamp==1
|
||||
|
||||
unfn1==0
|
||||
unfn2==1
|
||||
unrndm==2
|
||||
undate==3
|
||||
unref==4
|
||||
lunblk==5
|
||||
|
||||
debug: -1
|
||||
|
||||
dev: 0 ;Filename block for reading the archive device name.
|
||||
fn1: 0
|
||||
fn2: 0
|
||||
snm: 0
|
||||
arcfn2: 0 ;Real FN2 of the old archive device file.
|
||||
|
||||
lpdl==40
|
||||
pdl: block lpdl
|
||||
|
||||
olddir: block 2000 ;The old archive's directory goes here.
|
||||
|
||||
cpybuf: block 2000
|
||||
|
||||
jclbuf: block 40
|
||||
jclbfe: -1
|
||||
|
||||
go: move p,[-lpdl,,pdl]
|
||||
.suset [.roptio,,a]
|
||||
tlnn a,%opcmd
|
||||
jrst nojcl
|
||||
tlo a,%opopc
|
||||
.suset [.soptio,,a]
|
||||
setzm jclbuf
|
||||
move a,[jclbuf,,jclbuf+1]
|
||||
blt a,jclbfe-1 ;Read in our JCL line.
|
||||
.break 12,[..rjcl,,jclbuf]
|
||||
.suset [.rsname,,snm]
|
||||
movei b,dev
|
||||
move d,[440700,,jclbuf] ;Process the JCL to learn the archive device name.
|
||||
pushj p,rfn"rfn
|
||||
skipn dev ;An argument of FOO;AR7: means the file is DSK:AR7 > FOO;.
|
||||
jrst nojcl
|
||||
syscal open,[[.bii,,choarc] ? dev ? ['.file.] ? [sixbit /(dir)/] ? snm]
|
||||
jrst noarc
|
||||
move a,[-2000,,olddir]
|
||||
.iot choarc,a ;Read the image directory of the old archive.
|
||||
.close choarc,
|
||||
syscal open,[[.uai,,choarc] ? ['dsk,,] ? dev ? [sixbit />/] ? snm]
|
||||
.lose %lsfil
|
||||
syscal rfname,[%climm,,choarc repeat 3,[ ? %clout,,arcfn2 ]]
|
||||
.lose %lsfil
|
||||
move a,olddir
|
||||
camn a,[sixbit /ARC1!!/]
|
||||
jrst noold ;Barf if the archive is a new one.
|
||||
syscal delete,[['dsk,,] ? ['_arccp] ? [sixbit />/] ? snm]
|
||||
caia ;get rid of anything left over if a previous :ARCCPY
|
||||
jrst .-2 ;was killed.
|
||||
move b,olddir+udnamp ;Get index of first name entry in old archive.
|
||||
file: cain b,2000
|
||||
jrst done
|
||||
syscal open,[[.bii,,choarc] ? dev ? unfn1+olddir(b)
|
||||
unfn2+olddir(b) ? snm ? %clerr,,a]
|
||||
pushj p,arcopf
|
||||
syscal open,[[.bio,,chnarc] ? ['_ARCCP] ? unfn1+olddir(b)
|
||||
unfn2+olddir(b) ? snm ? %clerr,,a]
|
||||
pushj p,arcopf
|
||||
;Copy the file from the old archive to the new.
|
||||
cpylup: move a,[-2000,,cpybuf]
|
||||
.iot choarc,a
|
||||
movni c,-cpybuf(a)
|
||||
hrlzs c
|
||||
hrri c,cpybuf
|
||||
skipge c
|
||||
.iot chnarc,c
|
||||
jumpge a,cpylup
|
||||
;Copy the last write and last read dates.
|
||||
syscal sfdate,[%climm,,chnarc ? undate+olddir(b)]
|
||||
.lose %lsfil
|
||||
syscal srdate,[%climm,,chnarc ? unref+olddir(b)]
|
||||
.lose %lsfil
|
||||
syscal finish,[%climm,,chnarc]
|
||||
.lose %lsfil
|
||||
.close choarc,
|
||||
.close chnarc,
|
||||
next: addi b,lunblk
|
||||
jrst file
|
||||
|
||||
;Here if an open on the old or new archive fails.
|
||||
arcopf: cain a,%efldv ;If it's device full (no jobdev slots),
|
||||
jrst wait ;just wait a little while for one to appear.
|
||||
pop p,a ;Otherwise, pretend the pushj p,arcopf was .lose %lsfil.
|
||||
syscal lose,[%climm,,%lsfil ? %climm,,-2(a)]
|
||||
|
||||
;Pause one second and retry the instruction preceding the pushj p,wait.
|
||||
wait: movei a,30.
|
||||
.sleep a,
|
||||
sos (p)
|
||||
sos (p)
|
||||
popj p,
|
||||
|
||||
;Now that the new archive is built, replace the old one with it.
|
||||
done: skipe debug
|
||||
.value
|
||||
syscal delete,[['dsk,,] ? dev ? arcfn2 ? snm]
|
||||
.lose %lsfil
|
||||
movei a,5*30.
|
||||
.sleep a,
|
||||
syscal rename,[['DSK,,] ? ['_ARCCP] ? [SIXBIT /1/] ? snm
|
||||
dev ? arcfn2]
|
||||
pushj p,wait
|
||||
.break 16,140000
|
||||
|
||||
|
||||
;Get the filename reader.
|
||||
|
||||
rfn"$$rfn==1
|
||||
rfn"rsixtp: popj p,
|
||||
.insrt syseng;rfn
|
||||
|
||||
nojcl: error [JCL in the form <dir>;<archive>: must be specified.]
|
||||
|
||||
noarc: error The specified archive device does not exist.
|
||||
|
||||
noold: error The specified archive device is already in the new format.
|
||||
|
||||
patch: pat:
|
||||
block 40
|
||||
patche: -1
|
||||
|
||||
end go
|
||||
Loading…
x
Reference in New Issue
Block a user