]>
Commit | Line | Data |
---|---|---|
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)) | |
186 | 10000 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)) | |
200 | 10100 FORMAT(1X,A,'. Directory overwritten ',A) | |
201 | ENDIF | |
202 | * | |
203 | 110 RETURN | |
204 | END |