1
0
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:
Eric Swenson 2016-12-10 09:59:48 -08:00 committed by Lars Brinkhoff
parent e5b40a0717
commit 32713d364f
3 changed files with 172 additions and 0 deletions

View File

@ -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.

View File

@ -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
View 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