5 * Revision 1.2 1996/04/18 16:10:41 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"
15 C- Read next physical record in sequential mode
16 C- Service routine to FZIN, called only via FZIREC
18 C- Input : IFLAGI = 0 normal read
19 C- -1 recover to next steering block
22 C- N4SKII is used for rapid skip of fast blocks
24 C- Output : IFLAGI = 0 all is well
25 C- otherwise : ready for re-start
27 #include "zebra/zbcd.inc"
28 #include "zebra/zmach.inc"
29 #include "zebra/zunit.inc"
30 #include "zebra/mqsys.inc"
31 #include "zebra/eqlqf.inc"
32 #include "zebra/fzci.inc"
34 C-------------- End CDE --------------
36 * Declaratives, DIMENSION etc.
37 #include "fziphrd1.inc"
40 #include "fzstamp.inc"
41 #if (defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M))
43 DATA NAMESR / 4HFZIP, 4HHR /
45 #if (defined(CERNLIB_QTRHOLL))&&(defined(CERNLIB_A6M))
46 DATA NAMESR / 6HFZIPHR /
48 #if !defined(CERNLIB_QTRHOLL)
50 PARAMETER (NAMESR = 'FZIPHR ')
54 #include "fziphrd2.inc"
58 #include "zebra/qtrace.inc"
60 C---- DECIDE START ADR AND LENGTH FOR READ
62 NWMREC = IQ(KQSP+LBPARI+1)
63 NFASTI = IQ(KQSP+LBPARI-5)
64 N4SKIP = MIN (N4SKII,N4RESI)
66 IF (N4SKIP.GE.MAXREI) THEN
67 IF (NFASTI.NE.0) NRSKIP = MIN (NFASTI, N4SKIP / MAXREI)
73 IQ(KQSP+LBPARI-6) = NFASTI
76 #if !defined(CERNLIB_QREADFULL)
82 #if defined(CERNLIB_FQNEEDPK)
83 IF (IUPAKI.NE.0) GO TO 31
85 C-- Exchange Data Format needing to be unpacked
87 LIN = LIN + IQ(KQSP+LBPARI+3)
89 #if (!defined(CERNLIB_QREADFULL))&&(defined(CERNLIB_FQNEEDPK))
90 IF (NW4IN.EQ.MAXREI) GO TO 31
91 #include "fznwmach.inc"
95 C---- READ ONE PHYSICAL RECORD
97 31 IQ(KQSP+LQFI+33) = IQ(KQSP+LQFI+33) + 1
98 NBLK = IQ(KQSP+LQFI+22) + 1
99 #if defined(CERNLIB_QDEBPRI)
101 + WRITE (IQLOG,9031) NBLK,NW4IN,NWMIN,NFASTI,NRSKIP
102 9031 FORMAT (1X/' FZIPHR- Reading Block',I7,
103 F', NW32,NWmach,NRfast,NRskip=',4I6)
106 #if defined(CERNLIB_FZLIBC)
107 IF (IACMOI.EQ.2) THEN
109 CALL CFGET (IADOPI, MEDIUI, NWMREC, NWR, LQ(LIN), ISW)
110 IF (ISW.EQ.-1) GO TO 841
111 IF (ISW.NE.0) GO TO 843
112 IF (NWR.EQ.NWMREC) NW4IN = MAXREI
117 #if defined(CERNLIB_FZCHANNEL)
118 IF (IACMOI.EQ.3) THEN
125 IQUEST(5) = MEDIUI - 4
127 CALL JUMPX2 (LQ(LIN),ICODE)
129 IF (ISW.LT.0) GO TO 841
130 IF (ISW.NE.0) GO TO 843
132 IF (NWR.EQ.NWMREC) NW4IN = MAXREI
137 #if defined(CERNLIB_FZFORTRAN)
138 #include "fziphr32.inc"
140 CALL XINBF (LUNI,LQ(LIN),NWR)
141 IF (NWR.EQ.0) GO TO 841
143 IF (NWR.LT.0) GO TO 843
144 NWR = MIN (NWR,NWMIN)
146 39 IQ(KQSP+LQFI+22) = NBLK
147 NWRDAI = NWRDAI + MAXREI
150 C---- UNPACK / BYTE-SWOP
152 #if defined(CERNLIB_FQNEEDCV)
153 IF (IUPAKI.NE.0) GO TO 47
154 IF (NRSKIP.NE.0) NW4USE = 8
155 IF (IFLAGI.EQ.-1) NW4USE = 8
158 #if defined(CERNLIB_FQNEEDCV)
159 #include "fziphr42.inc"
162 C-- Short/full dump of record read
165 #if defined(CERNLIB_QDEBPRI)
166 IF (LOGLVI.GE.3) CALL FZIDUM (LQ(L4STAI),NW4USE)
169 C-----------------------------------------------------------
170 C---- FAST RECORD EXPECTED
171 C-----------------------------------------------------------
173 IF (NFASTI.EQ.0) GO TO 61
174 IF (LQ(L4STAI).EQ.MCCW1) GO TO 54
175 52 NFASTI = NFASTI - 1
176 IQ(KQSP+LBPARI-5) = NFASTI
177 IF (NRSKIP.EQ.0) GO TO 53
180 N4SKII = N4SKII - MAXREI
181 N4RESI = N4RESI - MAXREI
187 N4ENDI = MIN (N4RESI,MAXREI)
189 #include "zebra/qtrace99.inc"
192 C---- Unexpected steering record
194 54 CALL FZICHH (0, LQ(L4STAI),1)
195 IF (IQUEST(1).EQ.0) GO TO 52
196 #if defined(CERNLIB_FQNEEDCV)
197 C-- Unpack all words read
198 IF (NW4USE.LT.NW4IN) THEN
204 IQ(KQSP+LQFI+23) = IQ(KQSP+LQFI+23) + 1
206 IF (JMODI.EQ.4) GO TO 809
207 IF (NW4IN.EQ.MAXREI) GO TO 808
209 C-- recover start/end-of-run in partially read record
211 IF (JMODI.EQ.0) GO TO 806
212 IF (JMODI.GT.2) GO TO 806
213 IF (NTLRI+3.GT.NW4IN) GO TO 805
215 LRCUR = L4STAI + NTLRI + 1
218 IF (LRLG.LT.1) GO TO 806
219 IF (LRLG.GT.401) GO TO 806
220 IF (LRTP.NE.1) GO TO 806
221 IF (LQ(LRCUR+1).LT.0) GO TO 806
222 LRLG = MIN (LRLG, NW4IN-NTLRI-2)
223 NUSED = NTLRI + LRLG + 2
225 LRCUR = LRCUR + LRLG + 1
226 LQ(LRCUR) = MAXREI - NUSED - 1
231 C-----------------------------------------------------------
232 C---- STEERING RECORD EXPECTED
233 C-----------------------------------------------------------
235 61 CALL FZICHH (0, LQ(L4STAI),IFLAGI)
236 IF (IQUEST(1).NE.0) GO TO 71
239 IF (IFLAGI.LT.0) GO TO 73
241 JREX = IQ(KQSP+LBPARI-7)
244 IF (JRECI.NE.JREX) GO TO 804
249 IF (N4ENDI.EQ.0) N4ENDI= MAXREI
251 62 IQ(KQSP+LQFI+23) = IQ(KQSP+LQFI+23) + 1
252 IF (JRECI.NE.0) JRECI = JRECI + 1
253 IQ(KQSP+LBPARI-7) = JRECI
254 IQ(KQSP+LBPARI-5) = NFSTI
258 C---- Recover to next steering record
260 71 IF (IQUEST(1).EQ.3) GO TO 802
261 IF (IFLAGI.EQ.-1) GO TO 20
264 C-- Recovery to this steering record
266 73 IF (NTLRI.EQ.0) GO TO 20
267 #if defined(CERNLIB_FQNEEDCV)
268 IF (NW4USE.LT.NW4IN) THEN
276 C-----------------------------------------------------------
278 C-----------------------------------------------------------
281 C- JERROR = 201 Block header faulty
285 C- JERROR = 202 Block size does not match expectation
292 C- JERROR = 204 Break in block sequence number
300 C- JERROR = 205 Fast burst stopped by unusable start/end-of-run
303 C- JERROR = 206 Fast burst stopped by unusable steering block
304 806 JERROR = JERROR - 1
307 C- JERROR = 207 Fast burst stopped by usable start/end-of-run
308 C- in unusable steering block
309 807 JERROR = JERROR - 1
311 C- JERROR = 208 Fast burst stopped by usable steering block
312 808 JERROR = 208 + JERROR
314 IQUEST(15) = LQ(L4STAI+8)
315 IQUEST(16) = LQ(L4STAI+9)
320 C- JERROR = 209 Emergency stop block
325 811 IQ(KQSP+LBPARI-7) = 0
326 IQ(KQSP+LBPARI-6) = 0
327 IQ(KQSP+LBPARI-5) = NFSTI
328 IQ(KQSP+LBPARI-1) = N4ENDI
332 818 IQ(KQSP+LBPARI-1) = 0
333 819 IQ(KQSP+LBPARI-9)= -1
340 IQ(KQSP+LBPARI-7) = 0
341 IQ(KQSP+LBPARI-5) = 0
342 IQ(KQSP+LBPARI-1) = 0
353 * ==================================================
354 #include "zebra/qcardl.inc"