]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/zebra/rz/rzdelt.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / rz / rzdelt.F
CommitLineData
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