Upgrade to GPLv3
[its.git] / system / dmpcpy.11
1 ; -*- MIDAS -*-
2 ;;; Copyright (c) 1999 Massachusetts Institute of Technology
3 ;;;
4 ;;; This program is free software; you can redistribute it and/or
5 ;;; modify it under the terms of the GNU General Public License as
6 ;;; published by the Free Software Foundation; either version 3 of the
7 ;;; License, or (at your option) any later version.
8 ;;;
9 ;;; This program is distributed in the hope that it will be useful,
10 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 ;;; General Public License for more details.
13 ;;;
14 ;;; You should have received a copy of the GNU General Public License
15 ;;; along with this program; if not, write to the Free Software
16 ;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18
19         TITLE DMPCPY - COPY DUMPS FROM SWAP AREA TO FILE AREA
20
21 A=1
22 B=2
23 C=3
24 D=4
25 E=5
26 T=6
27 TT=7
28 P=17
29
30 CHDIRI=10
31 CHDSKI=11
32 CHDSKO=12
33
34 .INSRT SYSENG;FSDEFS >
35
36 PDL:    -20,,.
37         BLOCK 20
38
39 ;DIRECTORIES WHERE STUFF MIGHT GET DUMPED OUT OF TIMESHARING
40 DIRLST: SIXBIT/./
41         SIXBIT/CRASH/
42         SIXBIT/CRASH2/
43 NDIRS==.-DIRLST
44
45 DIR:    BLOCK 2000
46 BUF:    BLOCK 2000
47 \f
48 USRVAR: SIXBIT /OPTION/ ? TLO %OPINT\%OPOPC
49         SIXBIT /MASK/   ? MOVE [%PIIOC\%PIPDL]
50 LUSRVAR==:.-USRVAR
51
52 GO:     .CLOSE 1,               ;RUNS AS DAEMON
53         MOVE P,PDL
54         MOVE TT,[-LUSRVAR,,USRVAR]
55         .CALL [ SETZ ? SIXBIT /USRVAR/
56                 MOVEI %JSELF
57                 SETZ TT ]
58          .LOSE %LSSYS
59 CHKTIM: .CALL [ SETZ ? SIXBIT /RQDATE/  ; don't frob with files
60                 SETZM A ]       ; if system doesn't know the time
61          .LOSE %LSSYS
62         AOJN A,KNOTIM
63         MOVEI A,30.*15.         ; 15 seconds
64         .SLEEP A,
65         JRST CHKTIM
66
67 KNOTIM: MOVSI E,-NDIRS
68 CHKDIR: .CALL [ SETZ ? SIXBIT/OPEN/
69                 [.BII,,CHDIRI]
70                 [SIXBIT/DSK/]
71                 [SIXBIT/.FILE./]
72                 [SIXBIT/(DIR)/]
73                 SETZ DIRLST(E)]
74          JRST NXTDIR            ; Hey, there might not -be- such a directory!
75         MOVE TT,[-2000,,DIR]
76         .IOT CHDIRI,TT
77         .CLOSE CHDIRI,
78         MOVE D,UDNAMP+DIR
79 CHKFIL: CAIL D,2000
80          JRST NXTDIR
81         MOVE TT,UNRNDM+DIR(D)
82         SKIPGE UNDATE+DIR(D)
83          TLNE TT,UNDUMP\UNIGFL\UNREAP\UNLINK    ; Don't screw with files
84           JRST NXTFIL                           ; you don't understand.
85         ;HERE WE HAVE FOUND A FILE WRITTEN OUT OF TIMESHARING
86         ;COPY IT SO AS TO (1) SET THE FILE DATE AND (2) GET IT OUT
87         ; OF THE SWAPPING AREA.  NTS FILES ARE WRITTEN IN THE SWAPPING
88         ; AREA TO DECREASE THE PROBABILITY OF CLOBBERING SOME OTHER FILE.
89         .CALL [ SETZ ? SIXBIT/OPEN/
90                 MOVES TT
91                 [.BII,,CHDSKI]
92                 [SIXBIT/DSK/]
93                 UNFN1+DIR(D)
94                 UNFN2+DIR(D)
95                 SETZ DIRLST(E) ]
96          JSP T,[ CAIE TT,%ENSFL         ; perhaps a hacker deleted it
97                   CAIN TT,%ENAPK        ; perhaps that pack had to go offline
98                    JRST NXTFIL
99                  JRST LOSE ]
100         .CALL [ SETZ ? SIXBIT/OPEN/
101                 MOVES TT
102                 [.BIO,,CHDSKO]
103                 [SIXBIT/DSK/]
104                 [SIXBIT/_DMPCP/]
105                 [SIXBIT/OUTPUT/]
106                 SETZ DIRLST(E) ]
107          JSP T,[ CAIE TT,%EFLDR
108                   JRST LOSE
109                  MOVEI TT,30.*60.*5     ; 5 minutes
110                  .SLEEP TT,
111                  JRST .-1 ]
112 CPYFIL: MOVE TT,[-2000,,BUF]
113         .IOT CHDSKI,TT
114         MOVEI T,-BUF(TT)
115         JUMPE T,ENDFIL
116         MOVNS T
117         MOVSS T
118         HRRI T,BUF
119         .IOT CHDSKO,T
120         JRST CPYFIL
121
122 ENDFIL: .CLOSE CHDSKI,
123         .CALL [ SETZ ? 'RENMWO
124                 MOVEI CHDSKO
125                 UNFN1+DIR(D)
126                 SETZ UNFN2+DIR(D) ]
127          .LOSE %LSSYS
128         .CLOSE CHDSKO,
129 NXTFIL: ADDI D,LUNBLK
130         JRST CHKFIL
131
132 NXTDIR: AOBJN E,CHKDIR
133         .LOGOUT 1,
134         .VALUE
135
136 ; JSP T,LOSE is like .LOSE %LSFIL(TT)
137 LOSE:   .CALL [ SETZ ? SIXBIT /LOSE/
138                 MOVEI %LSFIL(TT)
139                 SETZI -2(T) ]
140          .LOSE %LSSYS
141
142 TSINT:
143 LOC 42
144         -LTSINT,,TSINT
145 LOC TSINT
146         P
147         %PIIOC ? 0 ? %PIIOC ? 0 ? IOCINT
148 LTSINT==:.-TSINT
149
150 ; If there is a disk or directory full problem, wait for someone to notice.
151 IOCINT: PUSH P,T
152         .SUSET [.RBCHN,,T]
153         CAIE T,CHDSKO
154          .LOSE
155         .STATUS CHDSKO,T
156         LDB T,[330500,,T]
157         CAIE T,11               ; DEVICE FULL
158          CAIN T,14              ; DIRECTORY FULL
159           JRST WAIT
160         .VALUE
161
162 WAIT:   MOVEI T,30.*60.*5       ; 5 minutes
163         .SLEEP T,
164         POP P,T
165         .CALL [ SETZ ? SIXBIT /DISMIS/
166                 SETZ P ]
167          .LOSE %LSSYS
168
169 END GO