mirror of
https://github.com/PDP-10/its.git
synced 2026-01-17 00:33:22 +00:00
SYSENG;FDDEFS (already in SYSTEM), SYSENG;NETWRK (already in SYSNET), and SYSTEM;DMPCPY (already in SYSENG).
154 lines
2.9 KiB
Plaintext
Executable File
154 lines
2.9 KiB
Plaintext
Executable File
; -*- MIDAS -*-
|
||
|
||
TITLE DMPCPY - COPY DUMPS FROM SWAP AREA TO FILE AREA
|
||
|
||
A=1
|
||
B=2
|
||
C=3
|
||
D=4
|
||
E=5
|
||
T=6
|
||
TT=7
|
||
P=17
|
||
|
||
CHDIRI=10
|
||
CHDSKI=11
|
||
CHDSKO=12
|
||
|
||
.INSRT SYSTEM;FSDEFS >
|
||
|
||
PDL: -20,,.
|
||
BLOCK 20
|
||
|
||
;DIRECTORIES WHERE STUFF MIGHT GET DUMPED OUT OF TIMESHARING
|
||
DIRLST: SIXBIT/./
|
||
SIXBIT/CRASH/
|
||
SIXBIT/CRASH2/
|
||
NDIRS==.-DIRLST
|
||
|
||
DIR: BLOCK 2000
|
||
BUF: BLOCK 2000
|
||
|
||
USRVAR: SIXBIT /OPTION/ ? TLO %OPINT\%OPOPC
|
||
SIXBIT /MASK/ ? MOVE [%PIIOC\%PIPDL]
|
||
LUSRVAR==:.-USRVAR
|
||
|
||
GO: .CLOSE 1, ;RUNS AS DAEMON
|
||
MOVE P,PDL
|
||
MOVE TT,[-LUSRVAR,,USRVAR]
|
||
.CALL [ SETZ ? SIXBIT /USRVAR/
|
||
MOVEI %JSELF
|
||
SETZ TT ]
|
||
.LOSE %LSSYS
|
||
CHKTIM: .CALL [ SETZ ? SIXBIT /RQDATE/ ; don't frob with files
|
||
SETZM A ] ; if system doesn't know the time
|
||
.LOSE %LSSYS
|
||
AOJN A,KNOTIM
|
||
MOVEI A,30.*15. ; 15 seconds
|
||
.SLEEP A,
|
||
JRST CHKTIM
|
||
|
||
KNOTIM: MOVSI E,-NDIRS
|
||
CHKDIR: .CALL [ SETZ ? SIXBIT/OPEN/
|
||
[.BII,,CHDIRI]
|
||
[SIXBIT/DSK/]
|
||
[SIXBIT/.FILE./]
|
||
[SIXBIT/(DIR)/]
|
||
SETZ DIRLST(E)]
|
||
JRST NXTDIR ; Hey, there might not -be- such a directory!
|
||
MOVE TT,[-2000,,DIR]
|
||
.IOT CHDIRI,TT
|
||
.CLOSE CHDIRI,
|
||
MOVE D,UDNAMP+DIR
|
||
CHKFIL: CAIL D,2000
|
||
JRST NXTDIR
|
||
MOVE TT,UNRNDM+DIR(D)
|
||
SKIPGE UNDATE+DIR(D)
|
||
TLNE TT,UNDUMP\UNIGFL\UNREAP\UNLINK ; Don't screw with files
|
||
JRST NXTFIL ; you don't understand.
|
||
;HERE WE HAVE FOUND A FILE WRITTEN OUT OF TIMESHARING
|
||
;COPY IT SO AS TO (1) SET THE FILE DATE AND (2) GET IT OUT
|
||
; OF THE SWAPPING AREA. NTS FILES ARE WRITTEN IN THE SWAPPING
|
||
; AREA TO DECREASE THE PROBABILITY OF CLOBBERING SOME OTHER FILE.
|
||
.CALL [ SETZ ? SIXBIT/OPEN/
|
||
MOVES TT
|
||
[.BII,,CHDSKI]
|
||
[SIXBIT/DSK/]
|
||
UNFN1+DIR(D)
|
||
UNFN2+DIR(D)
|
||
SETZ DIRLST(E) ]
|
||
JSP T,[ CAIE TT,%ENSFL ; perhaps a hacker deleted it
|
||
CAIN TT,%ENAPK ; perhaps that pack had to go offline
|
||
JRST NXTFIL
|
||
JRST LOSE ]
|
||
.CALL [ SETZ ? SIXBIT/OPEN/
|
||
MOVES TT
|
||
[.BIO,,CHDSKO]
|
||
[SIXBIT/DSK/]
|
||
[SIXBIT/_DMPCP/]
|
||
[SIXBIT/OUTPUT/]
|
||
SETZ DIRLST(E) ]
|
||
JSP T,[ CAIE TT,%EFLDR
|
||
JRST LOSE
|
||
MOVEI TT,30.*60.*5 ; 5 minutes
|
||
.SLEEP TT,
|
||
JRST .-1 ]
|
||
CPYFIL: MOVE TT,[-2000,,BUF]
|
||
.IOT CHDSKI,TT
|
||
MOVEI T,-BUF(TT)
|
||
JUMPE T,ENDFIL
|
||
MOVNS T
|
||
MOVSS T
|
||
HRRI T,BUF
|
||
.IOT CHDSKO,T
|
||
JRST CPYFIL
|
||
|
||
ENDFIL: .CLOSE CHDSKI,
|
||
.CALL [ SETZ ? 'RENMWO
|
||
MOVEI CHDSKO
|
||
UNFN1+DIR(D)
|
||
SETZ UNFN2+DIR(D) ]
|
||
.LOSE %LSSYS
|
||
.CLOSE CHDSKO,
|
||
NXTFIL: ADDI D,LUNBLK
|
||
JRST CHKFIL
|
||
|
||
NXTDIR: AOBJN E,CHKDIR
|
||
.LOGOUT 1,
|
||
.VALUE
|
||
|
||
; JSP T,LOSE is like .LOSE %LSFIL(TT)
|
||
LOSE: .CALL [ SETZ ? SIXBIT /LOSE/
|
||
MOVEI %LSFIL(TT)
|
||
SETZI -2(T) ]
|
||
.LOSE %LSSYS
|
||
|
||
TSINT:
|
||
LOC 42
|
||
-LTSINT,,TSINT
|
||
LOC TSINT
|
||
P
|
||
%PIIOC ? 0 ? %PIIOC ? 0 ? IOCINT
|
||
LTSINT==:.-TSINT
|
||
|
||
; If there is a disk or directory full problem, wait for someone to notice.
|
||
IOCINT: PUSH P,T
|
||
.SUSET [.RBCHN,,T]
|
||
CAIE T,CHDSKO
|
||
.LOSE
|
||
.STATUS CHDSKO,T
|
||
LDB T,[330500,,T]
|
||
CAIE T,11 ; DEVICE FULL
|
||
CAIN T,14 ; DIRECTORY FULL
|
||
JRST WAIT
|
||
.VALUE
|
||
|
||
WAIT: MOVEI T,30.*60.*5 ; 5 minutes
|
||
.SLEEP T,
|
||
POP P,T
|
||
.CALL [ SETZ ? SIXBIT /DISMIS/
|
||
SETZ P ]
|
||
.LOSE %LSSYS
|
||
|
||
END GO
|