5 * Revision 1.2 1996/04/18 16:10:38 mclareni
6 * Incorporate changes from J.Zoll for version 3.77
8 * Revision 1.1.1.1 1996/03/06 10:47:15 mclareni
12 #include "zebra/pilot.h"
13 #if defined(CERNLIB_FZDACC)
16 C- Read next physical record in direct-access mode
17 C- Service routine to FZIN, called only via FZIREC
19 C- Input : IFLAGI = 0 normal read
20 C- -1 recover to next steering block
23 C- N4SKII is used for rapid skip of fast blocks
25 C- Output : IFLAGI = 0 all is well
26 C- otherwise : ready for re-start
28 #include "zebra/zbcd.inc"
29 #include "zebra/zmach.inc"
30 #include "zebra/zunit.inc"
31 #include "zebra/mqsys.inc"
32 #include "zebra/eqlqf.inc"
33 #include "zebra/fzci.inc"
35 C-------------- End CDE --------------
37 * Declaratives, DIMENSION etc.
38 #include "fziphrd1.inc"
41 #include "fzstamp.inc"
42 #include "fzdaeof.inc"
43 #if (defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M))
45 DATA NAMESR / 4HFZIP, 4HHD /
47 #if (defined(CERNLIB_QTRHOLL))&&(defined(CERNLIB_A6M))
48 DATA NAMESR / 6HFZIPHD /
50 #if !defined(CERNLIB_QTRHOLL)
52 PARAMETER (NAMESR = 'FZIPHD ')
56 #include "fziphrd2.inc"
59 #include "zebra/qtrace.inc"
61 NWMREC = IQ(KQSP+LBPARI+1)
64 JRECGO = IQ(KQSP+LQFI+33)
66 IF (JRECGO.GE.0) GO TO 22
70 JRECNO = IQ(KQSP+LQFI+31)
76 22 NFASTI = IQ(KQSP+LBPARI-5)
78 N4SKIP = MIN (N4SKII,N4RESI)
79 IF (JRECGO.EQ.0) JRECLL = -7
81 IF (N4SKIP.GE.MAXREI) THEN
83 NRSKIP = MIN (NFASTI, N4SKIP / MAXREI)
84 JRECNO = JRECNO + NRSKIP
85 NFASTI = NFASTI - NRSKIP
89 IQ(KQSP+LBPARI-6) = NFASTI
92 #if defined(CERNLIB_FQNEEDPK)
93 IF (IUPAKI.NE.0) GO TO 31
95 C-- Exchange Data Format needing to be unpacked
97 LIN = LIN + IQ(KQSP+LBPARI+3)
100 C---- READ ONE PHYSICAL RECORD
102 31 NBLK = IQ(KQSP+LQFI+22) + 1
103 IQ(KQSP+LQFI+33) = JRECNO
104 #if defined(CERNLIB_QDEBPRI)
106 + WRITE (IQLOG,9031) JRECNO,MAXREI,NWMREC,NFASTI,NRSKIP
107 9031 FORMAT (1X/' FZIPHD- Reading Block #',I7,
108 F', NW32,NWmach,NRfast,NRskip=',4I6)
110 #if defined(CERNLIB_FZDACCL)
111 IF (IACMOI.EQ.2) THEN
112 IF (JRECNO.NE.JRECLL+1) THEN
113 CALL CFSEEK (IADOPI, MEDIUI, NWMREC, JRECNO-1, ISW)
114 IF (ISW.NE.0) GO TO 847
118 CALL CFGET (IADOPI, MEDIUI, NWMREC, NWR, LQ(LIN), ISW)
119 IF (ISW.NE.0) GO TO 842
125 #if defined(CERNLIB_FZDACCH)
126 IF (IACMOI.EQ.3) THEN
133 IQUEST(5) = MEDIUI - 4
135 CALL JUMPX2 (LQ(LIN),ICODE)
137 IF (ISW.LT.0) GO TO 841
138 IF (ISW.NE.0) GO TO 843
144 #if defined(CERNLIB_FZDACCF)
145 #include "fziphd37.inc"
147 39 IQ(KQSP+LQFI+22) = NBLK
148 NWRDAI = NWRDAI + MAXREI
151 C---- UNPACK / BYTE-SWOP
153 #if defined(CERNLIB_FQNEEDCV)
154 IF (IUPAKI.NE.0) GO TO 47
157 #if defined(CERNLIB_FQNEEDCV)
158 #include "fziphd42.inc"
161 C-- Short/full dump of record read
164 #if defined(CERNLIB_QDEBPRI)
165 IF (LOGLVI.GE.3) CALL FZIDUM (LQ(L4STAI),NW4USE)
168 C-----------------------------------------------------------
169 C---- FAST RECORD EXPECTED
170 C-----------------------------------------------------------
172 IF (NFASTI.LT.0) GO TO 84
173 IF (NFASTI.EQ.0) GO TO 61
174 IF (LQ(L4STAI).EQ.MCCW1) GO TO 57
175 52 NFASTI = NFASTI - 1
176 IQ(KQSP+LBPARI-5) = NFASTI
177 IF (NRSKIP.NE.0) THEN
179 N4SKII = N4SKII - MAXREI*NRSKIP
180 N4RESI = N4RESI - MAXREI*NRSKIP
185 N4ENDI = MIN (N4RESI,MAXREI)
188 #include "zebra/qtrace99.inc"
191 C---- Unexpected steering record
193 57 CALL FZICHH (0, LQ(L4STAI),1)
194 IF (IQUEST(1).EQ.0) GO TO 52
197 C-----------------------------------------------------------
198 C---- STEERING RECORD EXPECTED
199 C-----------------------------------------------------------
201 61 CALL FZICHH (0, LQ(L4STAI),IFLAGI)
202 IF (IQUEST(1).NE.0) GO TO 71
203 IQ(KQSP+LQFI+23) = IQ(KQSP+LQFI+23) + 1
207 IF (JRECGO.LT.0) THEN
208 N4ENDI = IQ(KQSP+LQFI+32)
209 IF (N4ENDI.EQ.0) N4ENDI = NTLRI
210 IF (JRECI.NE.0) JRECI = JRECI + 1
217 IF (N4ENDI.EQ.0) N4ENDI= MAXREI
219 IF (IFLAGI.EQ.-1) GO TO 73
222 IF (NRSKIP.NE.0) THEN
223 N4SKIP = N4SKIP - MAXREI*NRSKIP
224 N4RESI = N4RESI - MAXREI*NRSKIP
227 JREX = IQ(KQSP+LBPARI-7)
230 IF (JREX.NE.JRECI) GO TO 804
235 67 IQ(KQSP+LBPARI-7) = JRECI
236 IQ(KQSP+LBPARI-5) = NFSTI
240 C---- Recover to next steering record
242 71 IF (IQUEST(1).EQ.3) GO TO 802
243 IF (IQUEST(1).EQ.4) GO TO 841
244 IF (IFLAGI.NE.-1) GO TO 82
245 72 JRECNO = JRECNO + 1
248 C-- Recovery to this steering record
250 73 IF (NTLRI.EQ.0) GO TO 72
254 C-----------------------------------------------------------
255 C---- Check skipping passed over a steering record
256 C-----------------------------------------------------------
258 81 IF (NRSKIP.EQ.0) GO TO 87
261 82 IF (NRSKIP.EQ.0) GO TO 801
267 84 CALL FZICHH (0, LQ(L4STAI),-1)
268 IF (IQUEST(1).EQ.0) GO TO 87
269 IF (JRECNO.EQ.JRECE) GO TO 801
274 IF (JMODI.EQ.4) GO TO 809
275 IQ(KQSP+LQFI+23) = IQ(KQSP+LQFI+23) + 1
278 C-----------------------------------------------------------
279 C---- ERROR CONDITIONS
280 C-----------------------------------------------------------
282 C- JERROR = 501 Block header faulty
286 C- JERROR = 502 Block size does not match expectation
293 C- JERROR = 504 Break in block sequence number
301 C- JERROR = 508 Fast burst stopped by usable steering block
304 IQUEST(15) = LQ(L4STAI+8)
305 IQUEST(16) = LQ(L4STAI+9)
310 C- JERROR = 509 Emergency stop block
315 811 IQ(KQSP+LBPARI-7) = 0
316 IQ(KQSP+LBPARI-6) = 0
317 IQ(KQSP+LBPARI-5) = NFSTI
318 IQ(KQSP+LBPARI-1) = N4ENDI
322 818 IQ(KQSP+LBPARI-1) = 0
323 819 IQ(KQSP+LBPARI-9)= -1
329 840 IF (ISW.EQ.-1) GO TO 841
331 #include "fzdaeofx.inc"
333 IF (ISW.NE.IOSEOF) GO TO 843
335 IQ(KQSP+LBPARI-7) = 0
336 IQ(KQSP+LBPARI-5) = 0
337 IQ(KQSP+LBPARI-1) = 0
342 #if defined(CERNLIB_FZDACCL)
343 842 IF (ISW.EQ.-1) GO TO 841
346 C- JERROR = 515 Read error
354 #if defined(CERNLIB_FZDACCL)
356 C- JERROR = 514 Seek error
363 * ==================================================
364 #include "zebra/qcardl.inc"