5 * Revision 1.2 1996/04/24 17:26:55 mclareni
6 * Extend the include file cleanup to dzebra, rz and tq, and also add
7 * dependencies in some cases.
9 * Revision 1.1.1.1 1996/03/06 10:47:24 mclareni
13 #include "zebra/pilot.h"
14 SUBROUTINE RZINK(KEYU,ICYCLE,CHOPT)
16 ************************************************************************
18 * To find and decode KEYU,ICYCLE
20 * KEYU Keyword vector of the information to be read
21 * ICYCLE Cycle number of the key to be read
22 * ICYCLE > highest cycle number means read the highest cycle
23 * ICYCLE = 0 means read the lowest cycle
24 * CHOPT Character variable specifying the options selected.
28 * 'A' Read continuation of the previously read data structure
29 * with identifier KEYU,ICYCLE
30 * Given that option implies that the record was written with
31 * the same option by a call to RZOUT.
32 * 'C' Provide information about the cycle numbers
33 * associated with KEY.
34 * The total number of cycles and the cycle number
35 * identifiers of the 19 highest cycles are returned in
36 * IQUEST(50) and IQUEST(51..89) respectively
37 * 'D' Read the Data structure with the (key,cycle) pair
39 * 'N' Read the neighbouring. keys (i.e. those preceding and
41 * The key-vectors of the previous and next key are
42 * available respectively as IQUEST(31..35) and
43 * IQUEST(41..45), see below.
44 * 'R' Read data into existing bank at LSUP,JBIAS
45 * 'S' KEYU(1) contains the key serial number
46 * IQUEST(20)= serial number of the key in directory
47 * IQUEST(21..20+NWKEY)=KEY(1....NWKEY)
49 * Called by RZIN,RZVIN
51 * Author : R.Brun DD/US/PD
54 * : 04.03.94 S.Banerjee (Change in cycle structure)
55 * : 23.03.95 J.Shiers - check on K/C blocks is on KEY(1)
57 ************************************************************************
58 #include "zebra/rzcl.inc"
59 #include "zebra/rzclun.inc"
60 #include "zebra/rzcout.inc"
61 #include "zebra/rzk.inc"
62 #include "zebra/rzckey.inc"
63 #include "zebra/rzcycle.inc"
66 EQUIVALENCE (IOPTA,IQUEST(91)), (IOPTC,IQUEST(92))
67 +, (IOPTD,IQUEST(93)), (IOPTN,IQUEST(94)), (IOPTR,IQUEST(95))
70 *-----------------------------------------------------------------------
72 #include "zebra/q_jbyt.inc"
75 CALL UOPTC(CHOPT,'ACDNRS',IQUEST(91))
77 * Search KEY and CYCLE
80 NKEYS=IQ(KQSP+LCDIR+KNKEYS)
81 NWKEY=IQ(KQSP+LCDIR+KNWKEY)
84 IF(NKEYS.EQ.0)GO TO 90
89 IF(IK1.GT.NKEYS.OR.IK1.LE.0)THEN
100 IF(JBYT(IQ(KQSP+LCDIR+KKDES+IKDES),IKBIT1,3).LT.3)THEN
103 CALL ZHTOI(KEYU(I),KEY(I),1)
108 LKC=LK+(NWKEY+1)*(I-1)
111 IF(IQ(KQSP+LCDIR+LKC+K).NE.KEY(K))GO TO 30
117 IKBIT1=3*K-30*IKDES-2
118 IF(JBYT(IQ(KQSP+LCDIR+KKDES+IKDES),IKBIT1,3).LT.3)THEN
119 IQUEST(20+K)=IQ(KQSP+LCDIR+LKC+K)
121 CALL ZITOH(IQ(KQSP+LCDIR+LKC+K),IQUEST(20+K),1)
127 LCYC=IQ(KQSP+LCDIR+LKC)
128 IF (KVSCYC.NE.0) THEN
129 * IF (IQ(KQSP+LCDIR+LCYC+KKYCYC).NE.I) THEN
131 * Check should be on content of KEY(1)
133 IF (IQ(KQSP+LCDIR+LCYC+KKYCYC).NE.IQ(KQSP+LCDIR+LKC+1)) THEN
140 ICY = JBYT(IQ(KQSP+LCDIR+LCYC+KCNCYC),21,12)
141 IF(ICY.EQ.ICYCLE)GO TO 50
142 IF(NC.EQ.1.AND.ICYCLE.GT.ICY)GO TO 50
143 IF (KVSCYC.EQ.0) THEN
144 LCOLD = JBYT(IQ(KQSP+LCDIR+LCYC+KPPCYC),1,16)
146 LCOLD = IQ(KQSP+LCDIR+LCYC+KPPCYC)
148 IF(LCOLD.EQ.0.AND.LCOLD.NE.LCYC.AND.ICYCLE.EQ.0)GO TO 50
150 IF(LCYC.NE.0)GO TO 20
155 * Cycle has been found
156 * Read record descriptor
158 50 IF (KVSCYC.EQ.0) THEN
159 IR1 = JBYT(IQ(KQSP+LCDIR+LCYC+KFRCYC),17,16)
160 IR2 = JBYT(IQ(KQSP+LCDIR+LCYC+KSRCYC),17,16)
161 IP1 = JBYT(IQ(KQSP+LCDIR+LCYC+KORCYC), 1,16)
162 NW = JBYT(IQ(KQSP+LCDIR+LCYC+KNWCYC), 1,20)
164 IR1 = IQ(KQSP+LCDIR+LCYC+KFRCYC)
165 IR2 = IQ(KQSP+LCDIR+LCYC+KSRCYC)
166 IP1 = JBYT(IQ(KQSP+LCDIR+LCYC+KORCYC), 1,20)
167 NW = IQ(KQSP+LCDIR+LCYC+KNWCYC)
171 IF(IR2.NE.0)IQUEST(2)=(NW-N1-1)/LREC+2
177 IQUEST(14)=IQ(KQSP+LCDIR+LCYC+1)
185 51 IQUEST(50)=IQUEST(50)+1
186 IF (KVSCYC.EQ.0) THEN
187 LCOLD = JBYT(IQ(KQSP+LCDIR+LC1+KPPCYC),1,16)
189 LCOLD = IQ(KQSP+LCDIR+LC1+KPPCYC)
191 IF(IQUEST(50).LE.19)THEN
193 IQUEST(50+NC)=JBYT(IQ(KQSP+LCDIR+LC1+KCNCYC),21,12)
194 IQUEST(70+NC)=IQ(KQSP+LCDIR+LC1+KFLCYC)
196 IF(LCOLD.NE.0.AND.LCOLD.NE.LC1)THEN
202 C N option given. return neighbours
211 LKCJ=LK+(NWKEY+1)*(I-2)
212 IQUEST(30+J)=IQ(KQSP+LCDIR+LKCJ+J)
214 IKBIT1=3*J-30*IKDES-2
215 IF(JBYT(IQ(KQSP+LCDIR+KKDES+IKDES),IKBIT1,3).GE.3)THEN
216 CALL ZITOH(IQUEST(30+J),IQUEST(30+J),1)
228 IQUEST(40+J)=IQ(KQSP+LCDIR+LKCJ+J)
230 IKBIT1=3*J-30*IKDES-2
231 IF(JBYT(IQ(KQSP+LCDIR+KKDES+IKDES),IKBIT1,3).GE.3)THEN
232 CALL ZITOH(IQUEST(40+J),IQUEST(40+J),1)
249 LKCJ=LK+(NWKEY+1)*(NKEYS-1)
250 IQUEST(30+J)=IQ(KQSP+LCDIR+LK+J)
251 IQUEST(40+J)=IQ(KQSP+LCDIR+LKCJ+J)
253 IKBIT1=3*J-30*IKDES-2
254 IF(JBYT(IQ(KQSP+LCDIR+KKDES+IKDES),IKBIT1,3).GE.3)THEN
255 CALL ZITOH(IQUEST(30+J),IQUEST(30+J),1)
256 CALL ZITOH(IQUEST(40+J),IQUEST(40+J),1)