]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
5 | * Revision 1.2 1996/04/24 17:26:46 mclareni | |
6 | * Extend the include file cleanup to dzebra, rz and tq, and also add | |
7 | * dependencies in some cases. | |
8 | * | |
9 | * Revision 1.1.1.1 1996/03/06 10:47:23 mclareni | |
10 | * Zebra | |
11 | * | |
12 | * | |
13 | #include "zebra/pilot.h" | |
14 | SUBROUTINE RZDELT(CHDIR) | |
15 | * | |
16 | ************************************************************************ | |
17 | * | |
18 | * To delete the tree CHDIR in the CWD | |
19 | * Input: | |
20 | * CHDIR Character variable specifying the directory name of the | |
21 | * subtree of the CWD. | |
22 | * ' ' means delete the complete CWD tree | |
23 | * | |
24 | * Called by <USER> | |
25 | * | |
26 | * Author : R.Brun DD/US/PD | |
27 | * Written : 22.04.86 | |
28 | * LAST MOD: 09.01.91 | |
29 | * : 04.03.94 S.Banerjee (Change in cycle structure) | |
30 | * | |
31 | ************************************************************************ | |
32 | #include "zebra/zunit.inc" | |
33 | #include "zebra/rzcl.inc" | |
34 | #include "zebra/rzclun.inc" | |
35 | #include "zebra/rzk.inc" | |
36 | #include "zebra/rzdir.inc" | |
37 | #include "zebra/rzcycle.inc" | |
38 | CHARACTER*(*) CHDIR | |
39 | DIMENSION IHDIR(4),ISD(NLPATM),IRD(NLPATM),NSD(NLPATM) | |
40 | LOGICAL RZSAME | |
41 | * | |
42 | *----------------------------------------------------------------------- | |
43 | * | |
44 | #include "zebra/q_jbyt.inc" | |
45 | IQUEST(1)=0 | |
46 | IF(LQRS.EQ.0)GO TO 99 | |
47 | NCD=LEN(CHDIR) | |
48 | IF(NCD.GT.16)NCD=16 | |
49 | CALL VBLANK(IHDIR,4) | |
50 | CALL UCTOH(CHDIR,IHDIR,4,NCD) | |
51 | CALL ZHTOI(IHDIR,IHDIR,4) | |
52 | * | |
53 | LS = IQ(KQSP+LCDIR+KLS) | |
54 | LK = IQ(KQSP+LCDIR+KLK) | |
55 | LF = IQ(KQSP+LCDIR+KLF) | |
56 | * | |
57 | * Check permission | |
58 | * | |
59 | IFLAG=1 | |
60 | CALL RZMODS('RZDELT',IFLAG) | |
61 | IF(IFLAG.NE.0)GO TO 99 | |
62 | * | |
63 | * Check if subdirectory exists | |
64 | * | |
65 | NSDIR=IQ(KQSP+LCDIR+KNSD) | |
66 | IF(NSDIR.GT.0)THEN | |
67 | LRZ=LQ(KQSP+LCDIR-1) | |
68 | DO 20 I=1,NSDIR | |
69 | IF(RZSAME(IHDIR,IQ(KQSP+LCDIR+LS+7*(I-1)),4))THEN | |
70 | IOLD=LS+7*(I-1) | |
71 | IF (KVSCYC.EQ.0) THEN | |
72 | IR1 = JBYT(IQ(KQSP+LCDIR+IOLD+5),1,18) | |
73 | ELSE | |
74 | IR1 = IQ(KQSP+LCDIR+IOLD+5) | |
75 | ENDIF | |
76 | GO TO 25 | |
77 | ENDIF | |
78 | 20 CONTINUE | |
79 | ENDIF | |
80 | IF(JBYT(IQ(KQSP+LTOP),15,3)-3.GE.-2) WRITE(IQLOG,1000)CHDIR | |
81 | 1000 FORMAT(' RZDELT. Non existing directory, ',A) | |
82 | IQUEST(1)=1 | |
83 | GO TO 99 | |
84 | * | |
85 | * If directory to be deleted is in memory, then | |
86 | * delete the corresponding tree | |
87 | * | |
88 | 25 IF(LRZ.NE.0)THEN | |
89 | IF(.NOT.RZSAME(IHDIR,IQ(KQSP+LRZ+1),4))THEN | |
90 | LRZ=LQ(KQSP+LRZ) | |
91 | GO TO 25 | |
92 | ELSE | |
93 | CALL MZDROP(JQPDVS,LRZ,' ') | |
94 | ENDIF | |
95 | ENDIF | |
96 | * | |
97 | * Remove directory name from D | |
98 | * Move K | |
99 | * | |
100 | NWFREE=IQ(KQSP+LCDIR+KNFREE)+7 | |
101 | CALL UCOPY2(IQ(KQSP+LCDIR+IOLD+7),IQ(KQSP+LCDIR+IOLD),LF-IOLD-7) | |
102 | LK=LK-7 | |
103 | LF=LF-7 | |
104 | NSDIR=NSDIR-1 | |
105 | IQ(KQSP+LCDIR+KNFREE)=NWFREE | |
106 | IQ(KQSP+LCDIR+KNSD)=NSDIR | |
107 | IQ(KQSP+LCDIR+KLK)=LK | |
108 | IQ(KQSP+LCDIR+KLF)=LF | |
109 | * | |
110 | * LRIN will be used as delete buffer. | |
111 | * Make sure it exists. | |
112 | * | |
113 | IF(LRIN.EQ.0)THEN | |
114 | CALL MZBOOK(JQPDVS,LRIN,LTOP,-7,'RZIN',0,0,LREC+1,2,-1) | |
115 | ENDIF | |
116 | IQ(KQSP+LTOP+KIRIN)=0 | |
117 | * | |
118 | CALL VZERO(ISD(2),19) | |
119 | NLEVEL=1 | |
120 | ISD(1)=1 | |
121 | IRD(1)=IR1 | |
122 | NSD(1)=1 | |
123 | * | |
124 | * Read directory into buffer | |
125 | * | |
126 | 30 CALL RZIODO(LUN,LREC,IRD(NLEVEL),IQ(KQSP+LRIN+1),1) | |
127 | IF(IQUEST(1).NE.0)GO TO 90 | |
128 | NSD(NLEVEL+1)=IQ(KQSP+LRIN+23) | |
129 | LDC=IQ(KQSP+LRIN+KLD) | |
130 | LCC=IQ(KQSP+LRIN+KLC) | |
131 | LEC=IQ(KQSP+LRIN+KLE) | |
132 | NRD=IQ(KQSP+LRIN+LDC) | |
133 | NPUSH=NRD*LREC-IQ(KQSP+LRIN-1) | |
134 | IF(NPUSH.GT.0)CALL MZPUSH(JQPDVS,LRIN,0,NPUSH,'I') | |
135 | IF(NRD.GT.1)THEN | |
136 | DO 40 I=1,NRD | |
137 | L1=KQSP+LRIN+(I-1)*LREC+1 | |
138 | CALL RZIODO(LUN,LREC,IQ(KQSP+LRIN+LDC+I),IQ(L1),1) | |
139 | IF(IQUEST(1).NE.0)GO TO 90 | |
140 | 40 CONTINUE | |
141 | ENDIF | |
142 | * | |
143 | * Delete all KEYS for this directory | |
144 | * | |
145 | DO 50 LKC=LCC,LEC-KLCYCL+1,KLCYCL | |
146 | IF (KVSCYC.EQ.0) THEN | |
147 | IR1 = JBYT(IQ(KQSP+LRIN+LKC+KFRCYC),17,16) | |
148 | IP1 = JBYT(IQ(KQSP+LRIN+LKC+KORCYC), 1,16) | |
149 | NW = JBYT(IQ(KQSP+LRIN+LKC+KNWCYC), 1,20) | |
150 | IR2 = JBYT(IQ(KQSP+LRIN+LKC+KSRCYC),17,16) | |
151 | ELSE | |
152 | IR1 = IQ(KQSP+LRIN+LKC+KFRCYC) | |
153 | IP1 = JBYT(IQ(KQSP+LRIN+LKC+KORCYC), 1,20) | |
154 | NW = IQ(KQSP+LRIN+LKC+KNWCYC) | |
155 | IR2 = IQ(KQSP+LRIN+LKC+KSRCYC) | |
156 | ENDIF | |
157 | NLEFT=LREC-IP1+1 | |
158 | IF(NW.LE.NLEFT)THEN | |
159 | NR=0 | |
160 | ELSE | |
161 | NR=(NW-NLEFT-1)/LREC+1 | |
162 | ENDIF | |
163 | IF(IR2.EQ.IR1+1)THEN | |
164 | CALL RZPURF(NR+1,IR1) | |
165 | ELSE | |
166 | CALL RZPURF(1,IR1) | |
167 | IF(NR.NE.0)CALL RZPURF(NR,IR2) | |
168 | ENDIF | |
169 | 50 CONTINUE | |
170 | DO 60 I=1,NRD | |
171 | CALL RZPURF(1,IQ(KQSP+LRIN+LDC+I)) | |
172 | 60 CONTINUE | |
173 | * | |
174 | * Now look levels down | |
175 | * | |
176 | NLEVEL=NLEVEL+1 | |
177 | 70 ISD(NLEVEL)=ISD(NLEVEL)+1 | |
178 | IF(ISD(NLEVEL).LE.NSD(NLEVEL))THEN | |
179 | IS=ISD(NLEVEL) | |
180 | LSC=IQ(KQSP+LRIN+KLS) | |
181 | IF (KVSCYC.EQ.0) THEN | |
182 | IRD(NLEVEL) = JBYT(IQ(KQSP+LRIN+LSC+7*(IS-1)+5),1,18) | |
183 | ELSE | |
184 | IRD(NLEVEL) = IQ(KQSP+LRIN+LSC+7*(IS-1)+5) | |
185 | ENDIF | |
186 | GO TO 30 | |
187 | ELSE | |
188 | ISD(NLEVEL)=0 | |
189 | NLEVEL=NLEVEL-1 | |
190 | IF(NLEVEL.GT.1)THEN | |
191 | CALL RZIODO(LUN,LREC,IRD(NLEVEL-1),IQ(KQSP+LRIN+1),1) | |
192 | IF(IQUEST(1).NE.0)GO TO 90 | |
193 | GO TO 70 | |
194 | ENDIF | |
195 | ENDIF | |
196 | * | |
197 | 90 CALL MZDROP(JQPDVS,LRIN,' ') | |
198 | LRIN=0 | |
199 | #if defined(CERNLIB_QMVAX) | |
200 | IF(IRELAT.NE.0)UNLOCK(UNIT=LUN) | |
201 | #endif | |
202 | * | |
203 | 99 RETURN | |
204 | END |