]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/zebra/rz/rzfdir.F
Mostly minor style modifications to be ready for cloning with EMCAL
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / rz / rzfdir.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.3 1997/05/14 08:33:37 couet
6* - Bug fixed by S.O'Neale. atlas problems with cernlib 97a, with rfio/cio
7* the record was not correct in rziodo. Now rzfdir.F rest the correct one.
8*
9* Revision 1.2 1996/04/24 17:26:48 mclareni
10* Extend the include file cleanup to dzebra, rz and tq, and also add
11* dependencies in some cases.
12*
13* Revision 1.1.1.1 1996/03/06 10:47:22 mclareni
14* Zebra
15*
16*
17#include "zebra/pilot.h"
18 SUBROUTINE RZFDIR(CHROUT,LT,LDIR,CHOPT)
19*
20************************************************************************
21*
22* Check if Pathname stored in CHPAT is a valid directory
23* If YES then LT points to the TOP directory
24* LDIR points to the directory
25*
26* Called by RZCDIR,RZCOPY
27*
28* Author : R.Brun DD/US/PD
29* Written : 03.04.86
30* Last mod: 13.05.97 S.O'Neale Store IZRECL, bug fixes for messages
31* : 02.06.93 JDS. Bug fix in 'unknown directory' warning
32* : 04.03.94 S.Banerjee (Change in cycle structure)
33*
34************************************************************************
35#include "zebra/zunit.inc"
36#include "zebra/rzcl.inc"
37#include "zebra/rzdir.inc"
38#include "zebra/rzch.inc"
39#include "zebra/rzk.inc"
40#include "zebra/rzcycle.inc"
41#include "zebra/rzclun.inc"
42 CHARACTER*(*) CHROUT
43 CHARACTER*(*) CHOPT
44 DIMENSION IHDIR(4)
45 LOGICAL RZSAME
46 INTEGER FQUOTA
47*
48*-----------------------------------------------------------------------
49*
50#include "zebra/q_jbit.inc"
51#include "zebra/q_jbyt.inc"
52
53 IOPTQ = INDEX(CHOPT,'Q')
54 LT=0
55 LDIR=0
56 IF(LQRS.EQ.0) GOTO 110
57 IF(NLPAT.LE.0)THEN
58 CHL='??? '
59 GOTO 90
60 ENDIF
61*
62* Find LT
63*
64 CALL VBLANK(IHDIR,4)
65 CALL UCTOH(CHPAT(1),IHDIR,4,16)
66 CALL ZHTOI(IHDIR,IHDIR,4)
67 LRZ=LQRS
68 10 IF(.NOT.RZSAME(IHDIR,IQ(KQSP+LRZ+1),4))THEN
69 LRZ = LQ(KQSP+LRZ)
70 IF(LRZ.GT.0)GOTO 10
71 GOTO 80
72 ENDIF
73 LTEMP = LRZ
74 LT = LRZ
75 LDIR = LRZ
76 CALL RZVCYC(LT)
77 IF(NLPAT.LT.2)GOTO 110
78 LBT = IQ(KQSP+LRZ+KLB)
79 LREF = IQ(KQSP+LRZ+LBT+1)
80 LUNF = IQ(KQSP+LRZ-5)
81 FQUOTA = IQ(KQSP+LRZ+KQUOTA)
82 LOGLV = JBYT(IQ(KQSP+LT),15,3)-3
83 IZRECL = IQ(KQSP+LT+LBT+1) ! SWON: Needed by CFSEEK in RZIODO
84 IMODEX = JBIT(IQ(KQSP+LT+KPW1+2),12)
85 IMODEC = JBIT(IQ(KQSP+LT),5)
86 IMODEH = JBIT(IQ(KQSP+LT),6)
87*
88* Search levels down
89*
90 DO 60 IL=2,NLPAT
91 CALL VBLANK(IHDIR,4)
92 CALL UCTOH(CHPAT(IL),IHDIR,4,16)
93 CALL ZHTOI(IHDIR,IHDIR,4)
94 CALL SBIT0(IQ(KQSP+LRZ),IQDROP)
95 NSDIR=IQ(KQSP+LRZ+KNSD)
96 LS =IQ(KQSP+LRZ+KLS)
97 IF(NSDIR.LE.0)GOTO 80
98*
99* Check if element in list of subdirectories
100*
101 DO 50 I=1,NSDIR
102 IH=LS+7*(I-1)
103 IF(RZSAME(IHDIR,IQ(KQSP+LRZ+IH),4))THEN
104 IF (KVSCYC.EQ.0) THEN
105 IRS = JBYT(IQ(KQSP+LRZ+IH+5),1,18)
106 ELSE
107 IRS = IQ(KQSP+LRZ+IH+5)
108 ENDIF
109*
110* Record number of this subdirectory < 0 or > file quota
111*
112 IQUEST(20) = 0
113 IF(IRS.LE.0.OR.IRS.GT.FQUOTA) GOTO 100
114 LRN = LQ(KQSP+LRZ-1)
115 20 IF(LRN.EQ.0)THEN
116 CALL MZBOOK(JQPDVS,LDIR,LRZ,-1,'RZ ',6,6,LREF,2,-1)
117 LRZ=LDIR
118 CALL RZIODO(LUNF,LREF,IRS,IQ(KQSP+LRZ+1),1)
119 IF(IQUEST(1).NE.0) GOTO 70
120 LDS=IQ(KQSP+LRZ+KLD)
121 IF(LDS.GT.IQ(KQSP+LRZ-1)) GOTO 100
122 IF(LDS.LE.0) GOTO 100
123 NRDS=IQ(KQSP+LRZ+LDS)
124 IF(NRDS.GT.1)THEN
125 CALL MZPUSH(JQPDVS,LRZ,0,LREF*(NRDS-1),' ')
126 LDIR=LRZ
127*
128* Number of records, record numbers
129*
130 IQUEST(20) = NRDS
131 IQUEST(21) = IRS
132 DO 30 IR=2,NRDS
133 IRS=IQ(KQSP+LRZ+LDS+IR)
134 JR = 20 + IR
135 IF(JR.LE.100) IQUEST(JR) = IRS
136 IF(IRS.LE.0.OR.IRS.GT.FQUOTA) GOTO 100
137 CALL RZIODO(LUNF,LREF,IRS,
138 + IQ(KQSP+LRZ+(IR-1)*LREF+1),1)
139 IF(IQUEST(1).NE.0)GOTO 70
140 30 CONTINUE
141 ENDIF
142 ELSE
143 40 IF(RZSAME(IHDIR,IQ(KQSP+LRN+1),4))THEN
144 LRZ = LRN
145 LDIR= LRN
146 GOTO 60
147 ELSE
148 LRN=LQ(KQSP+LRN)
149 GOTO 20
150 ENDIF
151 ENDIF
152 GOTO 60
153 ENDIF
154 50 CONTINUE
155 GOTO 80
156 60 CONTINUE
157 CALL SBIT0(IQ(KQSP+LDIR),IQDROP)
158 LT=LTEMP
159#if defined(CERNLIB_QMVAX)
160 IF(IRELAT.NE.0)UNLOCK(UNIT=LUNF)
161#endif
162 GOTO 110
163*
164* Errors
165*
166 70 CONTINUE
167*
168* RZIODO error
169*
170 LDIR = 0
171 IQUEST(1) = 1
172#if defined(CERNLIB_QMVAX)
173 IF(IRELAT.NE.0)UNLOCK(UNIT=LUNF)
174#endif
175 GOTO 110
176 80 CALL RZPAFF(CHPAT,NLPAT,CHL)
177#if defined(CERNLIB_QMVAX)
178 IF(IRELAT.NE.0)UNLOCK(UNIT=LUNF)
179#endif
180 90 LDIR=0
181 IQUEST(1) = 2 ! SWON: Write a message if "Unknown directory"
182* IF(LOGLV.GE.-2.AND.
183* + IQUEST(1).EQ.0.AND.IOPTQ.EQ.0)THEN (retain original code )
184 IF(LOGLV.GE.-2.AND.IOPTQ.EQ.0)THEN
185 WRITE(IQLOG,10000)CHROUT,CHL(1:LENOCC(CHL))
18610000 FORMAT(1X,A,'. Unknown directory ',A)
187 ENDIF
188 GOTO 110
189*
190* Directory overwritten
191*
192 100 CALL RZPAFF(CHPAT,NLPAT,CHL)
193 IQUEST(1) = 3
194#if defined(CERNLIB_QMVAX)
195 IF(IRELAT.NE.0)UNLOCK(UNIT=LUNF)
196#endif
197 LDIR=0
198 IF(LOGLV.GE.-2)THEN ! SWON: Write a message if RZ is in trouble
199 WRITE(IQLOG,10100)CHROUT,CHL(1:LENOCC(CHL))
20010100 FORMAT(1X,A,'. Directory overwritten ',A)
201 ENDIF
202*
203 110 RETURN
204 END