]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/zebra/rz/rzink.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / rz / rzink.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
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.
8*
9* Revision 1.1.1.1 1996/03/06 10:47:24 mclareni
10* Zebra
11*
12*
13#include "zebra/pilot.h"
14 SUBROUTINE RZINK(KEYU,ICYCLE,CHOPT)
15*
16************************************************************************
17*
18* To find and decode KEYU,ICYCLE
19* Input:
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.
25* data structure
26* default
27* Same as 'D' below
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
38* specified.
39* 'N' Read the neighbouring. keys (i.e. those preceding and
40* following KEY).
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)
48*
49* Called by RZIN,RZVIN
50*
51* Author : R.Brun DD/US/PD
52* Written : 09.05.86
53* Last mod: 11.09.89
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)
56*
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"
64 CHARACTER*(*) CHOPT
65 DIMENSION KEYU(*)
66 EQUIVALENCE (IOPTA,IQUEST(91)), (IOPTC,IQUEST(92))
67 +, (IOPTD,IQUEST(93)), (IOPTN,IQUEST(94)), (IOPTR,IQUEST(95))
68 +, (IOPTS,IQUEST(96))
69*
70*-----------------------------------------------------------------------
71*
72#include "zebra/q_jbyt.inc"
73*
74 IQUEST(1)=0
75 CALL UOPTC(CHOPT,'ACDNRS',IQUEST(91))
76*
77* Search KEY and CYCLE
78*
79 LK=IQ(KQSP+LCDIR+KLK)
80 NKEYS=IQ(KQSP+LCDIR+KNKEYS)
81 NWKEY=IQ(KQSP+LCDIR+KNWKEY)
82 IQUEST(7)=NKEYS
83 IQUEST(8)=NWKEY
84 IF(NKEYS.EQ.0)GO TO 90
85*
86 IF(IOPTS.NE.0)THEN
87 IK1=KEYU(1)
88 IK2=IK1
89 IF(IK1.GT.NKEYS.OR.IK1.LE.0)THEN
90 IQUEST(1)=1
91 IQUEST(2)=IK1
92 RETURN
93 ENDIF
94 ELSE
95 IK1=1
96 IK2=NKEYS
97 DO 5 I=1,NWKEY
98 IKDES=(I-1)/10
99 IKBIT1=3*I-30*IKDES-2
100 IF(JBYT(IQ(KQSP+LCDIR+KKDES+IKDES),IKBIT1,3).LT.3)THEN
101 KEY(I)=KEYU(I)
102 ELSE
103 CALL ZHTOI(KEYU(I),KEY(I),1)
104 ENDIF
105 5 CONTINUE
106 ENDIF
107 DO 30 I=IK1,IK2
108 LKC=LK+(NWKEY+1)*(I-1)
109 IF(IOPTS.EQ.0)THEN
110 DO 10 K=1,NWKEY
111 IF(IQ(KQSP+LCDIR+LKC+K).NE.KEY(K))GO TO 30
112 10 CONTINUE
113 ELSE
114 DO 15 K=1,NWKEY
115 IF(K.LT.10)THEN
116 IKDES=(K-1)/10
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)
120 ELSE
121 CALL ZITOH(IQ(KQSP+LCDIR+LKC+K),IQUEST(20+K),1)
122 ENDIF
123 ENDIF
124 15 CONTINUE
125 ENDIF
126 IQUEST(20)=I
127 LCYC=IQ(KQSP+LCDIR+LKC)
128 IF (KVSCYC.NE.0) THEN
129* IF (IQ(KQSP+LCDIR+LCYC+KKYCYC).NE.I) THEN
130*
131* Check should be on content of KEY(1)
132*
133 IF (IQ(KQSP+LCDIR+LCYC+KKYCYC).NE.IQ(KQSP+LCDIR+LKC+1)) THEN
134 IQUEST(1) = 11
135 GO TO 99
136 ENDIF
137 ENDIF
138 NC=0
139 20 NC=NC+1
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)
145 ELSE
146 LCOLD = IQ(KQSP+LCDIR+LCYC+KPPCYC)
147 ENDIF
148 IF(LCOLD.EQ.0.AND.LCOLD.NE.LCYC.AND.ICYCLE.EQ.0)GO TO 50
149 LCYC=LCOLD
150 IF(LCYC.NE.0)GO TO 20
151 GO TO 90
152 30 CONTINUE
153 GO TO 90
154*
155* Cycle has been found
156* Read record descriptor
157*
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)
163 ELSE
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)
168 ENDIF
169 N1 = NW
170 IQUEST(2)=1
171 IF(IR2.NE.0)IQUEST(2)=(NW-N1-1)/LREC+2
172 IQUEST(3)=IR1
173 IQUEST(4)=IP1
174 IQUEST(5)=IR2
175 IQUEST(6)=ICY
176 IQUEST(12)=NW
177 IQUEST(14)=IQ(KQSP+LCDIR+LCYC+1)
178 IQUEST(15)=LCYC
179C
180C C option given
181C
182 IF(IOPTC.NE.0)THEN
183 IQUEST(50)=0
184 LC1=LCYC
185 51 IQUEST(50)=IQUEST(50)+1
186 IF (KVSCYC.EQ.0) THEN
187 LCOLD = JBYT(IQ(KQSP+LCDIR+LC1+KPPCYC),1,16)
188 ELSE
189 LCOLD = IQ(KQSP+LCDIR+LC1+KPPCYC)
190 ENDIF
191 IF(IQUEST(50).LE.19)THEN
192 NC=IQUEST(50)
193 IQUEST(50+NC)=JBYT(IQ(KQSP+LCDIR+LC1+KCNCYC),21,12)
194 IQUEST(70+NC)=IQ(KQSP+LCDIR+LC1+KFLCYC)
195 ENDIF
196 IF(LCOLD.NE.0.AND.LCOLD.NE.LC1)THEN
197 LC1=LCOLD
198 GO TO 51
199 ENDIF
200 ENDIF
201C
202C N option given. return neighbours
203C
204 IF(IOPTN.NE.0)THEN
205 IF(I.EQ.1)THEN
206 IQUEST(30)=0
207 ELSE
208 IQUEST(30)=NWKEY
209 DO 52 J=1,NWKEY
210 IF(J.LT.10)THEN
211 LKCJ=LK+(NWKEY+1)*(I-2)
212 IQUEST(30+J)=IQ(KQSP+LCDIR+LKCJ+J)
213 IKDES=(J-1)/10
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)
217 ENDIF
218 ENDIF
219 52 CONTINUE
220 ENDIF
221 IF(I.EQ.NKEYS)THEN
222 IQUEST(40)=0
223 ELSE
224 IQUEST(40)=NWKEY
225 DO 53 J=1,NWKEY
226 IF(J.LT.10)THEN
227 LKCJ=LK+(NWKEY+1)*I
228 IQUEST(40+J)=IQ(KQSP+LCDIR+LKCJ+J)
229 IKDES=(J-1)/10
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)
233 ENDIF
234 ENDIF
235 53 CONTINUE
236 ENDIF
237 ENDIF
238 GO TO 99
239*
240* Error
241*
242 90 IQUEST(1)=1
243 IF(IOPTN.NE.0)THEN
244 IF(NKEYS.GT.0)THEN
245 IQUEST(30)=NWKEY
246 IQUEST(40)=NWKEY
247 DO 91 J=1,NWKEY
248 IF(J.GE.10)GO TO 91
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)
252 IKDES=(J-1)/10
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)
257 ENDIF
258 91 CONTINUE
259 ENDIF
260 ENDIF
261*
262 99 RETURN
263 END