]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
5 | * Revision 1.2 1996/04/24 17:26:45 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 RZDELK(KEYU,ICYCLE,CHOPT) | |
15 | * | |
16 | ************************************************************************ | |
17 | * | |
18 | * To delete one or all keys in the CWD | |
19 | * Input: | |
20 | * KEYU Key array of dimension NWKEY (see RZMDIR) | |
21 | * ICYCLE Cycle number of the key to be deleted | |
22 | * ICYCLE > highest cycle number means delete the highest cycle | |
23 | * ICYCLE = 0 means delete the lowest cycle | |
24 | * ICYCLE = -1, -2,... means delete the highest cycle -1, -2,... | |
25 | * CHOPT Character variable specifying the options selected. | |
26 | * default | |
27 | * Delete the explicitly specified cycle ICYCLE only. | |
28 | * If cycle ICYCLE does not exist, no action is taken. | |
29 | * 'C' Delete ALL cycles corresponding to key (ICYCLE not used) | |
30 | * 'S' Delete all cycles smaller then cycle ICYCLE. | |
31 | * 'K' Delete ALL cycles for all Keys (KEYU,ICYCLE not used ) | |
32 | * | |
33 | * Called by <USER> | |
34 | * | |
35 | * Author : R.Brun DD/US/PD | |
36 | * Written : 20.04.86 | |
37 | * Last mod: 16.04.93 JDS. Return codes, deletion of objects at beginning | |
38 | * of cycles structure | |
39 | * : 04.03.94 S.Banerjee (Change in cycle structure) | |
40 | * : 23.03.95 J.Shiers - key # in cycles block is KEY(1) | |
41 | * IQUEST(1) = 0: ok | |
42 | * IQUEST(1) = 1: specified object not found | |
43 | * IQUEST(1) = 2: directory is empty | |
44 | * IQUEST(1) = 3: no RZ control bank (LQRS=0) | |
45 | * IQUEST(1) = 4: no write permission | |
46 | * IQUEST(1) =11: key/cycle discrepency | |
47 | * | |
48 | ************************************************************************ | |
49 | #include "zebra/zunit.inc" | |
50 | #include "zebra/rzcl.inc" | |
51 | #include "zebra/rzclun.inc" | |
52 | #include "zebra/rzk.inc" | |
53 | #include "zebra/rzckey.inc" | |
54 | #include "zebra/rzcycle.inc" | |
55 | CHARACTER*(*) CHOPT | |
56 | DIMENSION KEYU(*) | |
57 | DIMENSION IOPTV(3) | |
58 | EQUIVALENCE (IOPTC,IOPTV(1)), (IOPTS,IOPTV(2)) | |
59 | EQUIVALENCE (IOPTK,IOPTV(3)) | |
60 | * | |
61 | *----------------------------------------------------------------------- | |
62 | * | |
63 | #include "zebra/q_jbyt.inc" | |
64 | * | |
65 | IQUEST(1) = 0 | |
66 | IQWARN = 0 | |
67 | CALL UOPTC(CHOPT,'CSK',IOPTV) | |
68 | * | |
69 | * Check if write permission | |
70 | * | |
71 | IF(LQRS.EQ.0) THEN | |
72 | IQUEST(1) = 3 | |
73 | GOTO 230 | |
74 | ENDIF | |
75 | ||
76 | IFLAG=1 | |
77 | CALL RZMODS('RZDELK',IFLAG) | |
78 | IF(IFLAG.NE.0) THEN | |
79 | IQUEST(1) = 4 | |
80 | GOTO 230 | |
81 | ENDIF | |
82 | * | |
83 | LD=IQ(KQSP+LCDIR+KLD) | |
84 | LK=IQ(KQSP+LCDIR+KLK) | |
85 | LF=IQ(KQSP+LCDIR+KLF) | |
86 | LC=IQ(KQSP+LCDIR+KLC) | |
87 | LE=IQ(KQSP+LCDIR+KLE) | |
88 | NKEYS =IQ(KQSP+LCDIR+KNKEYS) | |
89 | NWKEY =IQ(KQSP+LCDIR+KNWKEY) | |
90 | IF(NKEYS.EQ.0)GOTO 220 | |
91 | * | |
92 | * Look for cycles marked for deletion by a previous call | |
93 | * Set IQUEST(2) to warn application to rebuild bit map | |
94 | * | |
95 | DO 10 LKC=LC,LE-KLCYCL+1,KLCYCL | |
96 | IF(IQ(KQSP+LCDIR+LKC).EQ.-1)GOTO 20 | |
97 | 10 CONTINUE | |
98 | GOTO 30 | |
99 | 20 IQWARN = 1 | |
100 | 30 CONTINUE | |
101 | * | |
102 | NPUOLD=0 | |
103 | IF(LPURG.NE.0)THEN | |
104 | NPURG=IQ(KQSP+LPURG+1) | |
105 | DO 40 I=1,NPURG | |
106 | NPUOLD=NPUOLD+IQ(KQSP+LPURG+2*I+1)-IQ(KQSP+LPURG+2*I)+1 | |
107 | 40 CONTINUE | |
108 | ENDIF | |
109 | * | |
110 | * Option K. delete all keys | |
111 | * | |
112 | IF(IOPTK.NE.0)THEN | |
113 | DO 50 LKC=LC,LE-KLCYCL+1,KLCYCL | |
114 | IF (KVSCYC.EQ.0) THEN | |
115 | IR1 = JBYT(IQ(KQSP+LCDIR+LKC+KFRCYC),17,16) | |
116 | IP1 = JBYT(IQ(KQSP+LCDIR+LKC+KORCYC), 1,16) | |
117 | NW = JBYT(IQ(KQSP+LCDIR+LKC+KNWCYC), 1,20) | |
118 | IR2 = JBYT(IQ(KQSP+LCDIR+LKC+KSRCYC),17,16) | |
119 | ELSE | |
120 | IR1 = IQ(KQSP+LCDIR+LKC+KFRCYC) | |
121 | IP1 = JBYT(IQ(KQSP+LCDIR+LKC+KORCYC), 1,20) | |
122 | NW = IQ(KQSP+LCDIR+LKC+KNWCYC) | |
123 | IR2 = IQ(KQSP+LCDIR+LKC+KSRCYC) | |
124 | ENDIF | |
125 | NLEFT=LREC-IP1+1 | |
126 | IF(NW.LE.NLEFT)THEN | |
127 | NR=0 | |
128 | ELSE | |
129 | NR=(NW-NLEFT-1)/LREC+1 | |
130 | ENDIF | |
131 | IF(IR2.EQ.IR1+1)THEN | |
132 | CALL RZPURF(NR+1,IR1) | |
133 | ELSE | |
134 | CALL RZPURF(1,IR1) | |
135 | IF(NR.NE.0)CALL RZPURF(NR,IR2) | |
136 | ENDIF | |
137 | 50 CONTINUE | |
138 | LF=LK | |
139 | LC=LE+1 | |
140 | NRD=IQ(KQSP+LCDIR+LD) | |
141 | IQ(KQSP+LCDIR+KRUSED) =NRD | |
142 | IQ(KQSP+LCDIR+KWUSED) =NRD*LREC | |
143 | IQ(KQSP+LCDIR+KMEGA) =0 | |
144 | IQ(KQSP+LCDIR+KIP1) =1 | |
145 | IQ(KQSP+LCDIR+KNFREE) =LC-LF | |
146 | IQ(KQSP+LCDIR+KLF) =LF | |
147 | IQ(KQSP+LCDIR+KLC) =LC | |
148 | IQ(KQSP+LCDIR+KNKEYS) =0 | |
149 | GOTO 240 | |
150 | ENDIF | |
151 | * | |
152 | * Search KEY and CYCLE | |
153 | * | |
154 | DO 60 I=1,NWKEY | |
155 | IKDES=(I-1)/10 | |
156 | IKBIT1=3*I-30*IKDES-2 | |
157 | IF(JBYT(IQ(KQSP+LCDIR+KKDES+IKDES),IKBIT1,3).LT.3)THEN | |
158 | KEY(I)=KEYU(I) | |
159 | ELSE | |
160 | CALL ZHTOI(KEYU(I),KEY(I),1) | |
161 | ENDIF | |
162 | 60 CONTINUE | |
163 | DO 80 I=1,NKEYS | |
164 | DO 70 K=1,NWKEY | |
165 | LKC=LK+(NWKEY+1)*(I-1) | |
166 | IF(IQ(KQSP+LCDIR+LKC+K).NE.KEY(K))GOTO 80 | |
167 | 70 CONTINUE | |
168 | LCYC =IQ(KQSP+LCDIR+LKC) | |
169 | LCPRE =LCYC | |
170 | LKK =LKC | |
171 | IF (KVSCYC.NE.0) THEN | |
172 | * IF (IQ(KQSP+LCDIR+LCYC+KKYCYC).NE.I) GO TO 250 | |
173 | IF (IQ(KQSP+LCDIR+LCYC+KKYCYC).NE. | |
174 | + IQ(KQSP+LCDIR+LKC+1)) GO TO 250 | |
175 | ENDIF | |
176 | ICTOP =JBYT(IQ(KQSP+LCDIR+LCYC+KCNCYC),21,12) | |
177 | KCYCLE=ICYCLE | |
178 | IF(KCYCLE.GT.ICTOP)KCYCLE=ICTOP | |
179 | GOTO 90 | |
180 | 80 CONTINUE | |
181 | GOTO 210 | |
182 | * | |
183 | * Do we keep this cycle ? | |
184 | * | |
185 | 90 IF (KVSCYC.EQ.0) THEN | |
186 | LCOLD = JBYT(IQ(KQSP+LCDIR+LCYC+KPPCYC), 1,16) | |
187 | ELSE | |
188 | LCOLD = IQ(KQSP+LCDIR+LCYC+KPPCYC) | |
189 | ENDIF | |
190 | IDEL=0 | |
191 | ICY =JBYT(IQ(KQSP+LCDIR+LCYC+KCNCYC),21,12) | |
192 | IF(KCYCLE.EQ.ICY.AND.IOPTS.EQ.0)IDEL=1 | |
193 | IF(IOPTC.NE.0)IDEL=1 | |
194 | IF(IOPTK.NE.0)IDEL=1 | |
195 | IF(IOPTS.NE.0)THEN | |
196 | IF(ICY.LT.ICYCLE)IDEL=1 | |
197 | ENDIF | |
198 | IF(ICYCLE.EQ.0.AND.LCOLD.EQ.0)IDEL=1 | |
199 | IF(ICYCLE.LT.0)THEN | |
200 | IF(ICY.EQ.ICTOP-ICYCLE)IDEL=1 | |
201 | ENDIF | |
202 | * | |
203 | * Mark all records that can be purged in first pass | |
204 | * | |
205 | IF(IDEL.NE.0)THEN | |
206 | IF(ICY.EQ.ICTOP)THEN | |
207 | IQ(KQSP+LCDIR+LKK)=LCOLD | |
208 | ELSE | |
209 | IF(LCOLD.EQ.0.AND.IOPTC.NE.0)THEN | |
210 | IQ(KQSP+LCDIR+LKK)=0 | |
211 | IQ(KQSP+LCDIR+LCPRE)=-1 | |
212 | ELSE | |
213 | CALL SBYT(LCOLD,IQ(KQSP+LCDIR+LCPRE),1,16) | |
214 | ENDIF | |
215 | ENDIF | |
216 | IF (KVSCYC.EQ.0) THEN | |
217 | IR1 = JBYT(IQ(KQSP+LCDIR+LCYC+KFRCYC),17,16) | |
218 | IP1 = JBYT(IQ(KQSP+LCDIR+LCYC+KORCYC), 1,16) | |
219 | NW = JBYT(IQ(KQSP+LCDIR+LCYC+KNWCYC), 1,20) | |
220 | IR2 = JBYT(IQ(KQSP+LCDIR+LCYC+KSRCYC),17,16) | |
221 | ELSE | |
222 | IR1 = IQ(KQSP+LCDIR+LCYC+KFRCYC) | |
223 | IP1 = JBYT(IQ(KQSP+LCDIR+LCYC+KORCYC), 1,20) | |
224 | NW = IQ(KQSP+LCDIR+LCYC+KNWCYC) | |
225 | IR2 = IQ(KQSP+LCDIR+LCYC+KSRCYC) | |
226 | ENDIF | |
227 | IRL =0 | |
228 | NWL =0 | |
229 | NLEFT=LREC-IP1+1 | |
230 | NW1=NW | |
231 | IF(NW1.GE.NLEFT)NW1=NLEFT | |
232 | IF(IR2.NE.0)THEN | |
233 | NR=(NW-NW1-1)/LREC+1 | |
234 | IF(NR.GT.1) CALL RZPURF(NR-1,IR2) | |
235 | IRL=IR2+NR-1 | |
236 | NWL=NW-NW1-(NR-1)*LREC | |
237 | ENDIF | |
238 | IF(NW1.EQ.LREC)THEN | |
239 | CALL RZPURF(1,IR1) | |
240 | IR1=0 | |
241 | ENDIF | |
242 | IF(NWL.EQ.LREC)THEN | |
243 | CALL RZPURF(1,IRL) | |
244 | IRL=0 | |
245 | ENDIF | |
246 | IRLOUT=IQ(KQSP+LCDIR+KRLOUT) | |
247 | IF(IRL.EQ.IRLOUT.AND.NWL+1.EQ.IQ(KQSP+LCDIR+KIP1))THEN | |
248 | CALL RZPURF(1,IRL) | |
249 | IRL=0 | |
250 | ENDIF | |
251 | IQ(KQSP+LCDIR+LCYC)=-1 | |
252 | IQ(KQSP+LCDIR+LCYC+1)=IR1 | |
253 | IQ(KQSP+LCDIR+LCYC+2)=IRL | |
254 | IQ(KQSP+LCDIR+LCYC+3)=NWL | |
255 | IF(IR1.NE.0)CALL SBYT(NW1,IQ(KQSP+LCDIR+LCYC+3),21,12) | |
256 | ELSE | |
257 | LCPRE=LCYC | |
258 | ENDIF | |
259 | * | |
260 | IF(LCOLD.NE.0.AND.LCOLD.NE.LCYC)THEN | |
261 | IF(KCYCLE.LT.ICY.OR.IOPTS.NE.0.OR.IOPTK.NE.0.OR.IOPTC.NE.0)THEN | |
262 | LCYC=LCOLD | |
263 | GOTO 90 | |
264 | ENDIF | |
265 | ENDIF | |
266 | * | |
267 | * Now loop on all purged cycles to find complete records | |
268 | * purged | |
269 | * | |
270 | DO 130 LKC=LC,LE-KLCYCL+1,KLCYCL | |
271 | IF(IQ(KQSP+LCDIR+LKC).NE.-1)GOTO 130 | |
272 | IR1=IQ(KQSP+LCDIR+LKC+1) | |
273 | IRL=IQ(KQSP+LCDIR+LKC+2) | |
274 | IF(IR1.NE.0)THEN | |
275 | DO 100 LKC1=LC,LE-KLCYCL+1,KLCYCL | |
276 | IF(IQ(KQSP+LCDIR+LKC1).EQ.-1)GOTO 100 | |
277 | IF (KVSCYC.EQ.0) THEN | |
278 | KR1 = JBYT(IQ(KQSP+LCDIR+LKC1+KFRCYC),17,16) | |
279 | KP1 = JBYT(IQ(KQSP+LCDIR+LKC1+KORCYC), 1,16) | |
280 | NW = JBYT(IQ(KQSP+LCDIR+LKC1+KNWCYC), 1,20) | |
281 | KR2 = JBYT(IQ(KQSP+LCDIR+LKC1+KSRCYC),17,16) | |
282 | ELSE | |
283 | KR1 = IQ(KQSP+LCDIR+LKC1+KFRCYC) | |
284 | KP1 = JBYT(IQ(KQSP+LCDIR+LKC1+KORCYC), 1,20) | |
285 | NW = IQ(KQSP+LCDIR+LKC1+KNWCYC) | |
286 | KR2 = IQ(KQSP+LCDIR+LKC1+KSRCYC) | |
287 | ENDIF | |
288 | KRL =0 | |
289 | NLEFT=LREC-KP1+1 | |
290 | NW1=NW | |
291 | IF(NW1.GE.NLEFT)NW1=NLEFT | |
292 | IF(KR2.NE.0)THEN | |
293 | NR=(NW-NW1-1)/LREC+1 | |
294 | KRL=KR2+NR-1 | |
295 | ENDIF | |
296 | IF(KR1.EQ.IR1.OR.KRL.EQ.IR1)GOTO 110 | |
297 | 100 CONTINUE | |
298 | CALL RZPURF(1,IR1) | |
299 | ENDIF | |
300 | * | |
301 | 110 IF(IRL.NE.0)THEN | |
302 | DO 120 LKC1=LC,LE-KLCYCL+1,KLCYCL | |
303 | IF(IQ(KQSP+LCDIR+LKC1).EQ.-1)GOTO 120 | |
304 | IF (KVSCYC.EQ.0) THEN | |
305 | KR1 = JBYT(IQ(KQSP+LCDIR+LKC1+KFRCYC),17,16) | |
306 | KP1 = JBYT(IQ(KQSP+LCDIR+LKC1+KORCYC), 1,16) | |
307 | NW = JBYT(IQ(KQSP+LCDIR+LKC1+KNWCYC), 1,20) | |
308 | KR2 = JBYT(IQ(KQSP+LCDIR+LKC1+KSRCYC),17,16) | |
309 | ELSE | |
310 | KR1 = IQ(KQSP+LCDIR+LKC1+KFRCYC) | |
311 | KP1 = JBYT(IQ(KQSP+LCDIR+LKC1+KORCYC), 1,20) | |
312 | NW = IQ(KQSP+LCDIR+LKC1+KNWCYC) | |
313 | KR2 = IQ(KQSP+LCDIR+LKC1+KSRCYC) | |
314 | ENDIF | |
315 | KRL =0 | |
316 | NLEFT=LREC-KP1+1 | |
317 | NW1=NW | |
318 | IF(NW1.GE.NLEFT)NW1=NLEFT | |
319 | IF(KR2.NE.0)THEN | |
320 | NR=(NW-NW1-1)/LREC+1 | |
321 | KRL=KR2+NR-1 | |
322 | ENDIF | |
323 | IF(KR1.EQ.IRL.OR.KRL.EQ.IRL)GOTO 130 | |
324 | 120 CONTINUE | |
325 | CALL RZPURF(1,IRL) | |
326 | ENDIF | |
327 | 130 CONTINUE | |
328 | * | |
329 | * Garbage collection on cycles area + relocation | |
330 | * | |
331 | LKC3=LE-KLCYCL+1 | |
332 | 140 IF(LKC3.LT.LC)GOTO 190 | |
333 | * | |
334 | * Found a deleted object. Now look for previous undeleted object | |
335 | * | |
336 | IF(IQ(KQSP+LCDIR+LKC3).EQ.-1)THEN | |
337 | ||
338 | LKC3=LKC3+KLCYCL | |
339 | LKC2=LKC3-2*KLCYCL | |
340 | * | |
341 | * First object? | |
342 | * | |
343 | IF(LKC2.LT.LC) THEN | |
344 | LC = LKC3 | |
345 | GOTO 190 | |
346 | ENDIF | |
347 | ||
348 | 150 IF(IQ(KQSP+LCDIR+LKC2).NE.-1)THEN | |
349 | LKC2=LKC2+KLCYCL | |
350 | LKC1=LKC2-2*KLCYCL | |
351 | IF(LKC1.LT.LC)LKC1=LC | |
352 | 160 IF(IQ(KQSP+LCDIR+LKC1).EQ.-1)THEN | |
353 | IF(LKC1.GT.LC .OR. | |
354 | + (LKC1.EQ.LC.AND.LKC2.NE.LC))LKC1=LKC1+KLCYCL | |
355 | ELSE | |
356 | IF(LKC1.GT.LC)THEN | |
357 | LKC1=LKC1-KLCYCL | |
358 | GOTO 160 | |
359 | ENDIF | |
360 | ENDIF | |
361 | * | |
362 | NPUSH=LKC3-LKC2 | |
363 | * | |
364 | * Update pointers in cycles block | |
365 | * | |
366 | DO 170 LKC=LC,LKC2-KLCYCL,KLCYCL | |
367 | IF(IQ(KQSP+LCDIR+LKC).NE.-1)THEN | |
368 | IF (KVSCYC.EQ.0) THEN | |
369 | LCOLD = JBYT(IQ(KQSP+LCDIR+LKC+KPPCYC),1,16) | |
370 | ELSE | |
371 | LCOLD = IQ(KQSP+LCDIR+LKC+KPPCYC) | |
372 | ENDIF | |
373 | IF(LCOLD.GE.LKC1.AND.LCOLD.LT.LKC2)THEN | |
374 | LCOLD=LCOLD+NPUSH | |
375 | IF (KVSCYC.EQ.0) THEN | |
376 | CALL SBYT(LCOLD,IQ(KQSP+LCDIR+LKC+KPPCYC),1,16) | |
377 | ELSE | |
378 | IQ(KQSP+LCDIR+LKC+KPPCYC) = LCOLD | |
379 | ENDIF | |
380 | ENDIF | |
381 | ENDIF | |
382 | 170 CONTINUE | |
383 | * | |
384 | * Update pointers from KEYS block to CYCLES block | |
385 | * | |
386 | DO 180 IK=1,NKEYS | |
387 | LCYC=IQ(KQSP+LCDIR+LK+(NWKEY+1)*(IK-1)) | |
388 | IF(LCYC.GE.LKC1.AND.LCYC.LT.LKC2)THEN | |
389 | IQ(KQSP+LCDIR+LK+(NWKEY+1)*(IK-1))= | |
390 | + IQ(KQSP+LCDIR+LK+(NWKEY+1)*(IK-1))+NPUSH | |
391 | ENDIF | |
392 | 180 CONTINUE | |
393 | * | |
394 | * Squeeze out deleted cycles | |
395 | * | |
396 | CALL UCOPY2(IQ(KQSP+LCDIR+LKC1),IQ(KQSP+LCDIR+LKC1+NPUSH), | |
397 | + LKC2-LKC1) | |
398 | LKC3=LKC1+NPUSH | |
399 | LKC2=LKC1-KLCYCL | |
400 | * | |
401 | * Only deleted objects before this block? | |
402 | * | |
403 | IF(IQ(KQSP+LCDIR+LKC2).EQ.-1.AND.LKC2.EQ.LC) THEN | |
404 | LC = LKC3 | |
405 | GOTO 190 | |
406 | ENDIF | |
407 | ||
408 | IF(LKC1.NE.LC)GOTO 150 | |
409 | LC=LC+NPUSH | |
410 | GOTO 190 | |
411 | * | |
412 | ELSE | |
413 | LKC2=LKC2-KLCYCL | |
414 | * | |
415 | * Only deleted objects before this block? | |
416 | * | |
417 | IF(IQ(KQSP+LCDIR+LKC2).EQ.-1.AND.LKC2.EQ.LC) THEN | |
418 | LC = LKC3 | |
419 | GOTO 190 | |
420 | ENDIF | |
421 | ||
422 | IF(LKC2.GE.LC)GOTO 150 | |
423 | ||
424 | ENDIF | |
425 | ELSE | |
426 | LKC3=LKC3-KLCYCL | |
427 | GOTO 140 | |
428 | ENDIF | |
429 | * | |
430 | * Remove KEY from K area if only one cycle | |
431 | * | |
432 | 190 CONTINUE | |
433 | IF(IQ(KQSP+LCDIR+LKK).EQ.0)THEN | |
434 | IF(LKK+NWKEY+1.LT.LF)THEN | |
435 | CALL UCOPY2(IQ(KQSP+LCDIR+LKK+NWKEY+1), | |
436 | + IQ(KQSP+LCDIR+LKK),LF-LKK) | |
437 | ENDIF | |
438 | LF=LF-NWKEY-1 | |
439 | IQ(KQSP+LCDIR+KNFREE)=IQ(KQSP+LCDIR+KNFREE)+NWKEY+1 | |
440 | IQ(KQSP+LCDIR+KLF)=LF | |
441 | IQ(KQSP+LCDIR+KNKEYS)=IQ(KQSP+LCDIR+KNKEYS)-1 | |
442 | IF(IQ(KQSP+LCDIR+KNKEYS).EQ.0)LC=LE+1 | |
443 | ENDIF | |
444 | * | |
445 | * Reset internal pointers | |
446 | * | |
447 | NPUNEW=0 | |
448 | IF(LPURG.NE.0)THEN | |
449 | NPURG=IQ(KQSP+LPURG+1) | |
450 | DO 200 I=1,NPURG | |
451 | NPUNEW=NPUNEW+IQ(KQSP+LPURG+2*I+1)-IQ(KQSP+LPURG+2*I)+1 | |
452 | 200 CONTINUE | |
453 | ENDIF | |
454 | NPU=NPUNEW-NPUOLD | |
455 | IQUEST( 9)=IQ(KQSP+LCDIR+KQUOTA)-IQ(KQSP+LCDIR+KRUSED)+NPU | |
456 | IQUEST(11)=(LC-IQ(KQSP+LCDIR+KLC))/KLCYCL | |
457 | IQUEST(12)=NPU*LREC | |
458 | IQUEST(13)=NPU | |
459 | * | |
460 | IQ(KQSP+LCDIR+KRUSED)=IQ(KQSP+LCDIR+KRUSED)-NPU | |
461 | NWP=NPU*LREC | |
462 | NMEGA=NWP/1000000 | |
463 | IQ(KQSP+LCDIR+KMEGA)=IQ(KQSP+LCDIR+KMEGA)-NMEGA | |
464 | NWP=NWP-1000000*NMEGA | |
465 | IQ(KQSP+LCDIR+KWUSED)=IQ(KQSP+LCDIR+KWUSED)-NWP | |
466 | IQ(KQSP+LCDIR+KNFREE)=IQ(KQSP+LCDIR+KNFREE)+LC-IQ(KQSP+LCDIR+KLC) | |
467 | IQ(KQSP+LCDIR+KLC)=LC | |
468 | GOTO 240 | |
469 | * | |
470 | * KEY not found | |
471 | * | |
472 | 210 IF(JBYT(IQ(KQSP+LTOP),15,3)-3.GE.-2) WRITE(IQLOG,10000) | |
473 | 10000 FORMAT(' RZDELK. Key not found') | |
474 | IQUEST(1)=1 | |
475 | IQUEST(2)=IQWARN | |
476 | RETURN | |
477 | ||
478 | 220 IF(JBYT(IQ(KQSP+LTOP),15,3)-3.GE.-2) WRITE(IQLOG,10100) | |
479 | 10100 FORMAT(' RZDELK. directory is empty') | |
480 | IQUEST(1)=2 | |
481 | IQUEST(2)=IQWARN | |
482 | RETURN | |
483 | * | |
484 | 230 IQUEST(2)=IQWARN | |
485 | RETURN | |
486 | ||
487 | 240 IQUEST(2)=IQWARN | |
488 | RETURN | |
489 | ||
490 | 250 IF(JBYT(IQ(KQSP+LTOP),15,3)-3.GE.-2) WRITE(IQLOG,10100) | |
491 | 10200 FORMAT(' RZDELK. mismatch in key/cycle pointing') | |
492 | IQUEST(1)=11 | |
493 | IQUEST(2)=IQWARN | |
494 | RETURN | |
495 | END |