]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
5 | * Revision 1.2 1996/04/18 16:11:37 mclareni | |
6 | * Incorporate changes from J.Zoll for version 3.77 | |
7 | * | |
8 | * Revision 1.1.1.1 1996/03/06 10:47:18 mclareni | |
9 | * Zebra | |
10 | * | |
11 | * | |
12 | #include "zebra/pilot.h" | |
13 | SUBROUTINE MZLIFT (IXDIV,LP,LSUPP,JBIAS,NAME,NZERO) | |
14 | ||
15 | C- Lift a bank, user called | |
16 | ||
17 | #include "zebra/zmach.inc" | |
18 | #include "zebra/zstate.inc" | |
19 | #include "zebra/zunit.inc" | |
20 | #include "zebra/zvfaut.inc" | |
21 | #include "zebra/mqsys.inc" | |
22 | #include "zebra/eqlqmst.inc" | |
23 | #include "zebra/eqlqform.inc" | |
24 | #include "zebra/mzcl.inc" | |
25 | #include "zebra/mzcn.inc" | |
26 | #include "zebra/mzct.inc" | |
27 | C-------------- End CDE -------------- | |
28 | DIMENSION IXDIV(9), LP(9), LSUPP(9), NAME(9) | |
29 | #if (defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M)) | |
30 | DIMENSION NAMESR(2) | |
31 | DATA NAMESR / 4HMZLI, 4HFT / | |
32 | #endif | |
33 | #if (defined(CERNLIB_QTRHOLL))&&(defined(CERNLIB_A6M)) | |
34 | DATA NAMESR / 6HMZLIFT / | |
35 | #endif | |
36 | #if !defined(CERNLIB_QTRHOLL) | |
37 | CHARACTER NAMESR*8 | |
38 | PARAMETER (NAMESR = 'MZLIFT ') | |
39 | #endif | |
40 | ||
41 | #include "zebra/q_jbit.inc" | |
42 | #include "zebra/q_jbyt.inc" | |
43 | #include "zebra/q_sbyt.inc" | |
44 | #include "zebra/q_shiftl.inc" | |
45 | #include "zebra/q_locf.inc" | |
46 | ||
47 | ||
48 | #include "zebra/qtrace.inc" | |
49 | #if defined(CERNLIB_QDEBUG) | |
50 | IF (IQVSTA.NE.0) CALL ZVAUTX | |
51 | #endif | |
52 | ||
53 | C-- Copy parameters | |
54 | ||
55 | IF (JBIAS.NE.63) THEN | |
56 | NQBIA = JBIAS | |
57 | NIO = JBYT (NAME(5),12,4) | |
58 | CALL UCOPY (NAME,NQID,NIO+5) | |
59 | IF (NIO.NE.0) NQIOSV(1)=0 | |
60 | ENDIF | |
61 | ||
62 | JDV = IXDIV(1) | |
63 | LQSUP = LSUPP(1) | |
64 | IF (NQBIA.GE.2) LQSUP = 0 | |
65 | ICHORG = NQIOCH(1) | |
66 | NTOT = NQNL + NQND + 10 | |
67 | ||
68 | IF (JDV.EQ.-7) GO TO 24 | |
69 | IF (JBYT(JDV,27,6).NE.JQSTOR) GO TO 22 | |
70 | JQDIVI = JBYT (JDV,1,26) | |
71 | IF (JQDIVI.LT.21) GO TO 23 | |
72 | 22 CALL MZSDIV (JDV,0) | |
73 | 23 CALL MZCHNB (LP) | |
74 | 24 CONTINUE | |
75 | ||
76 | C-- Check bank parameters | |
77 | ||
78 | #if defined(CERNLIB_QDEBUG) | |
79 | J = JBYT (NQID,IQBITW-7,8) | |
80 | IF (J.EQ.0) GO TO 91 | |
81 | IF (J.EQ.255) GO TO 91 | |
82 | IF (NTOT.GE.LQSTA(KQT+21)) GO TO 91 | |
83 | IF (NQNS.GT.NQNL) GO TO 91 | |
84 | IF (NQNS.LT.0) GO TO 91 | |
85 | IF (NQNL.GT.64000) GO TO 91 | |
86 | IF (NQND.LT.0) GO TO 91 | |
87 | IF (NQBIA.GE.3) GO TO 91 | |
88 | ||
89 | IF (LQSUP.EQ.0) GO TO 25 | |
90 | CALL MZCHLS (-7,LQSUP) | |
91 | IF (IQFOUL.NE.0) GO TO 92 | |
92 | IF (NQBIA.EQ.1) GO TO 26 | |
93 | IF (JBIT(IQ(KQS+LQSUP),IQDROP).NE.0) GO TO 92 | |
94 | IF (IQNS+NQBIA.LT.0) GO TO 93 | |
95 | GO TO 26 | |
96 | ||
97 | 25 IF (NQBIA.LE.0) GO TO 92 | |
98 | 26 CONTINUE | |
99 | #endif | |
100 | ||
101 | C---- Find LNEXT, future 'next' bank | |
102 | C- LSAME, a bank in the same linear structure | |
103 | C- LS, division selecting bank | |
104 | C- IDN, numeric ID | |
105 | ||
106 | IDN = 1 | |
107 | LS = LQSUP | |
108 | LSAME = LQSUP | |
109 | LNEXT = LQSUP | |
110 | IF (NQBIA.GT.0) GO TO 38 | |
111 | LNEXT = LQ(KQS+LNEXT+NQBIA) | |
112 | IF (LNEXT.EQ.0) GO TO 36 | |
113 | LSAME = LNEXT | |
114 | LS = LNEXT | |
115 | #if defined(CERNLIB_QDEBUG) | |
116 | CALL MZCHLS (-7,LNEXT) | |
117 | IF (IQFOUL.NE.0) GO TO 94 | |
118 | #endif | |
119 | IDN = IQ(KQS+LNEXT-5) + 1 | |
120 | GO TO 39 | |
121 | ||
122 | 36 IF (NQBIA.EQ.0) GO TO 37 | |
123 | LSAME = 0 | |
124 | IDN = -NQBIA | |
125 | GO TO 39 | |
126 | ||
127 | 37 IDN = IQ(KQS+LSAME-5) + 1 | |
128 | GO TO 39 | |
129 | ||
130 | 38 IF (LNEXT.NE.0) IDN=IQ(KQS+LNEXT-5)+1 | |
131 | 39 CONTINUE | |
132 | ||
133 | C---- Ready I/O characteristic | |
134 | ||
135 | IF (ICHORG.LT.0) GO TO 47 | |
136 | ||
137 | C-- Immediate | |
138 | ||
139 | IF (ICHORG.LT.8) THEN | |
140 | NQNIO = 0 | |
141 | NQIOCH(1) = ISHFTL (ICHORG, 16) | |
142 | GO TO 49 | |
143 | ENDIF | |
144 | ||
145 | C-- Copy characteristic from sister bank | |
146 | ||
147 | IF (ICHORG-11) 45, 43, 47 | |
148 | 43 IF (LSAME.EQ.0) GO TO 45 | |
149 | #if !defined(CERNLIB_QDEBUG) | |
150 | NQNIO = JBYT (IQ(KQS+LSAME),19,4) | |
151 | IQLN = LSAME - (NQNIO+IQ(KQS+LSAME-3)+1) | |
152 | #endif | |
153 | #if defined(CERNLIB_QDEBUG) | |
154 | NQNIO = IQNIO | |
155 | #endif | |
156 | IF (NQNIO.EQ.0) THEN | |
157 | NQIOCH(1) = LQ(KQS+IQLN) | |
158 | GO TO 49 | |
159 | ELSE | |
160 | CALL UCOPY (LQ(KQS+IQLN),NQIOCH,NQNIO+1) | |
161 | NQIOSV(1) = 0 | |
162 | GO TO 49 | |
163 | ENDIF | |
164 | ||
165 | C-- Find index to characteristic according to IDH | |
166 | ||
167 | 45 LID = LQFORM | |
168 | IF (LID.EQ.0) GO TO 95 | |
169 | LIOD = LQ(KQSP+LID-2) | |
170 | IF (NQID.LT.0) LID=LQ(KQSP+LID) | |
171 | ||
172 | C-- Same as last | |
173 | ||
174 | IF (NQID.EQ.IQ(KQSP+LID+3)) THEN | |
175 | IXIO = IQ(KQSP+LID+2) | |
176 | ELSE | |
177 | ||
178 | C-- Search | |
179 | ||
180 | N = IQ(KQSP+LID+1) | |
181 | IF (N.EQ.0) GO TO 95 | |
182 | J = IUCOMP (NQID,IQ(KQSP+LID+4),N) | |
183 | IF (J.EQ.0) GO TO 95 | |
184 | ||
185 | LIX = LQ(KQSP+LID-1) | |
186 | IXIO = IQ(KQSP+LIX+J) | |
187 | IQ(KQSP+LID+2) = IXIO | |
188 | IQ(KQSP+LID+3) = NQID | |
189 | ENDIF | |
190 | ||
191 | NQNIO = JBYT (IQ(KQSP+LIOD+IXIO+1),7,5) - 1 | |
192 | GO TO 48 | |
193 | ||
194 | C-- Parameter is characteristic or index | |
195 | ||
196 | 47 J = JBYT (ICHORG,1,6) | |
197 | NQNIO = JBYT (ICHORG,7,5) - 1 | |
198 | IOTH = JBYT (ICHORG,12,5) | |
199 | IF (J.EQ.1) THEN | |
200 | IF (NQNIO.NE.IOTH) GO TO 96 | |
201 | GO TO 49 | |
202 | ENDIF | |
203 | ||
204 | C-- Index | |
205 | ||
206 | IF (J.NE.2) GO TO 96 | |
207 | IF (IOTH.NE.0) GO TO 96 | |
208 | IXIO = JBYT (ICHORG,17,16) | |
209 | IF (IXIO.EQ.0) GO TO 96 | |
210 | ||
211 | LIOD = LQ(KQSP+LQFORM-2) | |
212 | IF (IXIO.GE.IQ(KQSP+LIOD+1)) GO TO 96 | |
213 | ||
214 | C-- Same characteristic as previously lifted bank | |
215 | ||
216 | 48 IF (IXIO.EQ.NQIOSV(1)) THEN | |
217 | NQIOCH(1) = NQIOSV(2) | |
218 | GO TO 49 | |
219 | ENDIF | |
220 | ||
221 | C-- Copy characteristic | |
222 | ||
223 | NQIOSV(1) = 0 | |
224 | IF (NQNIO.GE.16) GO TO 96 | |
225 | CALL UCOPY (IQ(KQSP+LIOD+IXIO+1),NQIOCH,NQNIO+1) | |
226 | IOTH = JBYT (NQIOCH(1),12,5) | |
227 | IF (NQNIO.NE.IOTH) GO TO 96 | |
228 | NQIOSV(1) = IXIO | |
229 | NQIOSV(2) = NQIOCH(1) | |
230 | ||
231 | 49 NTOT = NTOT + NQNIO | |
232 | ||
233 | C------ Select division | |
234 | ||
235 | IF (JQDIVI.NE.0) GO TO 59 | |
236 | IF (LS.LT.LQSTA(KQT+1)) GO TO 58 | |
237 | IF (LS.GE.LQEND(KQT+20)) GO TO 58 | |
238 | IF (LS.GE.LQEND(KQT+JQDVLL)) GO TO 54 | |
239 | IF (LS.LT.LQEND(KQT+2)) GO TO 57 | |
240 | JQDIVI = 3 | |
241 | GO TO 55 | |
242 | ||
243 | 54 JQDIVI = JQDVSY | |
244 | 55 IF (LS.LT.LQEND(KQT+JQDIVI)) GO TO 61 | |
245 | JQDIVI = JQDIVI + 1 | |
246 | GO TO 55 | |
247 | ||
248 | 57 JQDIVI = 1 | |
249 | IF (LS.LT.LQSTA(KQT+2)) GO TO 61 | |
250 | 58 JQDIVI = 2 | |
251 | GO TO 61 | |
252 | ||
253 | 59 IF (LSAME.EQ.0) GO TO 61 | |
254 | IF (LSAME.LT.LQSTA(KQT+JQDIVI)) GO TO 97 | |
255 | IF (LSAME.GE.LQEND(KQT+JQDIVI)) GO TO 97 | |
256 | ||
257 | C------ Allocate space | |
258 | ||
259 | 61 CALL MZRESV | |
260 | NQRESV = NQRESV - NTOT | |
261 | IF (NQRESV.LT.0) GO TO 81 | |
262 | IF (JQMODE.NE.0) GO TO 63 | |
263 | ||
264 | C-- Division is mode forward | |
265 | ||
266 | NQLN = LQEND(KQT+JQDIVI) | |
267 | LE = NQLN + NTOT | |
268 | LQEND(KQT+JQDIVI) = LE | |
269 | GO TO 65 | |
270 | ||
271 | C-- Division is mode reverse | |
272 | ||
273 | 63 LE = LQSTA(KQT+JQDIVI) | |
274 | NQLN = LE - NTOT | |
275 | LQSTA(KQT+JQDIVI) = NQLN | |
276 | ||
277 | C---- Construct bank | |
278 | ||
279 | 65 NZ = MIN (NZERO,NQND) | |
280 | IF (NZ.EQ.0) NZ=NQND | |
281 | IF (NZ.LT.0) NZ=0 | |
282 | ||
283 | NST = NQNIO + NQNL | |
284 | NQLS = NQLN + NST + 1 | |
285 | CALL VZERO (LQ(KQS+NQLN+NQNIO+1),NQNL+NZ+9) | |
286 | ||
287 | NQIOCH(1) = MSBYT (NST+12,NQIOCH(1),1,16) | |
288 | DO 67 J=0,NQNIO | |
289 | 67 LQ(KQS+NQLN+J) = NQIOCH(J+1) | |
290 | ||
291 | IQ(KQS+NQLS-5) = IDN | |
292 | IQ(KQS+NQLS-4) = NQID | |
293 | IQ(KQS+NQLS-3) = NQNL | |
294 | IQ(KQS+NQLS-2) = NQNS | |
295 | IQ(KQS+NQLS-1) = NQND | |
296 | IQ(KQS+NQLS) = ISHFTL (NQNIO,18) | |
297 | ||
298 | C------ Set up how to link | |
299 | ||
300 | IF (NQBIA-1) 72, 73, 79 | |
301 | ||
302 | C-- JBIAS -ve, insert into tree | |
303 | ||
304 | 72 LUP = LQSUP | |
305 | KADR = LQSUP + NQBIA | |
306 | LNEXT = LQ(KQS+KADR) | |
307 | IF (NQBIA.NE.0) GO TO 77 | |
308 | LUP = LQ(KQS+LUP+1) | |
309 | GO TO 77 | |
310 | ||
311 | C-- JBIAS = +1, add to linear structure | |
312 | ||
313 | 73 LNEXT = LQSUP | |
314 | IF (LNEXT.NE.0) GO TO 74 | |
315 | LUP = 0 | |
316 | KADR = LOCF (LSUPP(1)) - LQSTOR | |
317 | #if defined(CERNLIB_APOLLO) | |
318 | KADR = RSHFT (IADDR(LSUPP(1)),2) - LQSTOR | |
319 | #endif | |
320 | IF (KADR.LT.LQSTA(KQT+1)) GO TO 78 | |
321 | IF (KADR.LT.LQSTA(KQT+21)) GO TO 98 | |
322 | GO TO 78 | |
323 | ||
324 | 74 LUP = LQ(KQS+LNEXT+1) | |
325 | KADR = LQ(KQS+LNEXT+2) | |
326 | ||
327 | C---- Link bank into structure | |
328 | ||
329 | 77 IF (LNEXT.EQ.0) GO TO 78 | |
330 | LQ(KQS+NQLS) = LNEXT | |
331 | LQ(KQS+LNEXT+2) = NQLS | |
332 | ||
333 | 78 LQ(KQS+NQLS+1) = LUP | |
334 | LQ(KQS+NQLS+2) = KADR | |
335 | ||
336 | LQ(KQS+KADR) = NQLS | |
337 | ||
338 | 79 LP(1) = NQLS | |
339 | #if defined(CERNLIB_QDEBPRI) | |
340 | IF (NQLOGL.GE.2) | |
341 | + WRITE (IQLOG,9079) JQSTOR,JQDIVI,NQLS,LQSUP,NQBIA, | |
342 | + NQID,NQNL,NQNS,NQND | |
343 | 9079 FORMAT (' MZLIFT- Store/Div',2I3,' L/LSUP/JBIAS=',2I9,I6, | |
344 | F' ID,NL,NS,ND= ',A4,2I6,I9) | |
345 | #endif | |
346 | #include "zebra/qtrace99.inc" | |
347 | RETURN | |
348 | ||
349 | C---- Garbage collection | |
350 | ||
351 | 81 LQMST(KQT+1) = LQSUP | |
352 | CALL MZGAR1 | |
353 | LQSUP = LQMST(KQT+1) | |
354 | IF (NQBIA.GE.1) GO TO 61 | |
355 | KADR = LOCF (LSUPP(1)) - LQSTOR | |
356 | #if defined(CERNLIB_APOLLO) | |
357 | KADR = RSHFT (IADDR(LSUPP(1)),2) - LQSTOR | |
358 | #endif | |
359 | IF (KADR.LT.LQSTA(KQT+1)) GO TO 83 | |
360 | IF (KADR.LT.LQSTA(KQT+21)) GO TO 61 | |
361 | 83 LSUPP(1) = LQSUP | |
362 | GO TO 61 | |
363 | ||
364 | C---- Error conditions | |
365 | ||
366 | 98 NQCASE = 8 | |
367 | NQFATA = 1 | |
368 | IQUEST(18) = KADR | |
369 | GO TO 90 | |
370 | ||
371 | 97 NQCASE = 7 | |
372 | NQFATA = 1 | |
373 | IQUEST(18) = LSAME | |
374 | GO TO 90 | |
375 | ||
376 | 94 NQCASE = 4 | |
377 | NQFATA = 1 | |
378 | IQUEST(18) = LNEXT | |
379 | GO TO 90 | |
380 | ||
381 | 96 NQCASE = 1 | |
382 | 95 NQCASE = NQCASE + 2 | |
383 | 93 NQCASE = NQCASE + 1 | |
384 | 92 NQCASE = NQCASE + 1 | |
385 | 91 NQCASE = NQCASE + 1 | |
386 | 90 NQFATA = NQFATA + 7 | |
387 | IQUEST(11) = LQSUP | |
388 | IQUEST(12) = NQBIA | |
389 | IQUEST(13) = NQID | |
390 | IQUEST(14) = NQNL | |
391 | IQUEST(15) = NQNS | |
392 | IQUEST(16) = NQND | |
393 | IQUEST(17) = ICHORG | |
394 | #include "zebra/qtofatal.inc" | |
395 | END | |
396 | * ================================================== | |
397 | #include "zebra/qcardl.inc" |