5 * Revision 1.1.1.1 1996/03/06 10:47:11 mclareni
9 #include "zebra/pilot.h"
12 C- Logical record controls, exchange file format
13 C- service routine to FZIFFX of FZIN
15 C- This routine is called with
16 C- IFLAGI > 0 from FZIFFX to initiate the next d/s making sure
17 C- that the block containing its beginning is
18 C- in the buffer, skipping if nec. trailing records
19 C- of the previous d/s
20 C- = 0 from FZIFFX to copy the buffer control params.
21 C- between the control-bank and /FZCI/ (for speed)
22 C- < 0 from FZITR to read continuation blocks (phR)
25 #include "zebra/zunit.inc"
26 #include "zebra/mqsys.inc"
27 #include "zebra/eqlqf.inc"
28 #include "zebra/fzci.inc"
29 C-------------- End CDE --------------
30 #include "fzntolds.inc"
31 #if (defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M))
33 DATA NAMESR / 4HFZIR, 4HEC /
35 #if (defined(CERNLIB_QTRHOLL))&&(defined(CERNLIB_A6M))
36 DATA NAMESR / 6HFZIREC /
38 #if !defined(CERNLIB_QTRHOLL)
40 PARAMETER (NAMESR = 'FZIREC ')
44 #include "zebra/qtrace.inc"
47 C- buffer parameters :
49 C- -9 non-zero : last LR abended
50 C- -7 expected next Ph record number
51 C- -6 =0 if current block is steering
52 C- =1 if current block is last in burst
53 C- =2 if cur. block is last-but-one in burst, etc
54 C- -5 # of fast records still pending
56 C- -4 N4SKII, # of words to be skipped
57 C- before next transmission
58 C- -3 N4RESI, # of words in LR still to be done
59 C- -2 N4DONI, # of words already out of buffer
60 C- -1 N4ENDI, # of words in buffer before start of next LR
61 C- if =0 : buffer empty
62 C- if =MAXREI : LR continues in next block
63 C- LBPARI +0 maximum size of buffer, words
64 C- +1 expected size of PhR, local machine words
65 C- +2 INCBUF step to buffer
66 C- +3 off-set from start-of-buffer for reading
68 C- +4 (off-set for output)
69 C- -1 space for left double-precision word saved
70 C- L4STAI +0 first word of normal buffer
74 LBPARI = LQFI + INCBPI
77 C-----------------------------------------------------------
78 C------ IFLAGI > 0 : start new d/s
79 C-----------------------------------------------------------
82 IFLRST = IQ(KQSP+LBPARI-9)
83 INCBUF = IQ(KQSP+LBPARI+2)
84 L4STAI = KQSP+8 + LBPARI + INCBUF
87 JFAST = IQ(KQSP+LBPARI-6)
89 N4ENDI = IQ(KQSP+LBPARI-1)
90 #if defined(CERNLIB_QDEBPRI)
92 + WRITE (IQLOG,9022) IFLIN,IFLRST,JFAST,N4ENDI,MAXREI
93 9022 FORMAT (1X/' FZIREC- Going for next LR, Buffer Status :'
94 F/10X,'IFLAGI, Restart?, Fast?, NWtoLR, NWbuf =',6I6)
97 C-- Re-start LR after error
100 IQ(KQSP+LBPARI-9) = 0
101 IF (N4ENDI.GT.0) THEN
102 IF (N4ENDI.LT.MAXREI-1) GO TO 51
110 IF (N4ENDI.NE.0) GO TO 31
112 27 CALL VZERO (IQ(KQSP+LBPARI-8),8)
117 C---- Normal continuation on current buffer
119 31 N4RESI = IQ(KQSP+LBPARI-3)
120 N4DONI = IQ(KQSP+LBPARI-2)
121 #if defined(CERNLIB_QDEBPRI)
122 IF (LOGLVI.GE.3) WRITE (IQLOG,9031) N4RESI,N4DONI,N4ENDI
123 9031 FORMAT (10X,'Status of last LR : NWrest, NWdone, NWend ='
127 C-- Skip trailing words of last LR
129 IF (N4RESI.EQ.0) GO TO 41
130 34 NWNEW = MIN (N4ENDI-N4DONI, N4RESI)
131 N4DONI = N4DONI + NWNEW
132 N4RESI = N4RESI - NWNEW
133 IF (N4RESI.EQ.0) GO TO 41
134 IF (N4ENDI.NE.MAXREI) GO TO 821
136 NWFAST = IQ(KQSP+LBPARI-5) * MAXREI
137 IF (NWFAST.LE.N4SKII) GO TO 46
143 C-- New Ph record if buffer exhausted
145 41 IF (N4DONI.NE.N4ENDI) GO TO 822
147 IF (N4ENDI.LT.MAXREI-1) GO TO 51
148 IF (N4ENDI.GT.MAXREI-1) GO TO 46
149 MCARRL = LQ(L4STAI+MAXREI-1)
150 IF (MCARRL.EQ.0) GO TO 46
152 JRECNO = IQ(KQSP+LQFI+33)
154 JFAST = IQ(KQSP+LBPARI-6)
155 #if defined(CERNLIB_QDEBPRI)
156 IF (LOGLVI.GE.3) WRITE (IQLOG,9043) MCARRL
157 9043 FORMAT (' FZIREC- Saved LR length',I6,' across to next PhR')
160 46 IF (IFIFOI.LE.1) THEN
162 #if defined(CERNLIB_FZDACC)
163 ELSEIF (IFIFOI.EQ.2) THEN
166 #if defined(CERNLIB_FZMEMORY)
167 ELSEIF (IFIFOI.EQ.3) THEN
170 #if defined(CERNLIB_FZALFA)
171 ELSEIF (IFIFOI.EQ.4) THEN
177 IF (IFLAGI.NE.0) THEN
179 IF (JRETCD.EQ.1) JRETCD=-1
184 C-- LR length last word of previous block ?
185 IF (ICARRL.NE.0) THEN
187 LQ(L4STAI+N4ENDI) = MCARRL
190 C-- still discarding previous d/s ?
192 IF (N4RESI.GT.0) GO TO 34
195 C---- Start new logical record
199 IF (N4ENDI.EQ.MAXREI-1) GO TO 41
200 IF (ICARRL.EQ.0) THEN
201 JRECNO = IQ(KQSP+LQFI+33)
203 JFAST = IQ(KQSP+LBPARI-6)
206 L4CURI = L4STAI + N4DONI + 2
207 IDI(1) = LQ(L4CURI-2)
208 IDI(2) = LQ(L4CURI-1)
209 IF (IDI(1).EQ.0) IDI(2)=5
210 #if defined(CERNLIB_QDEBPRI)
211 IF (LOGLVI.GE.3) WRITE (IQLOG,9053) JFAST,N4DONI,IDI
212 9053 FORMAT (' FZIREC- Start LR : Fast?, NWdone, Length, Type='
216 IF (N4RESI.LT.0) GO TO 826
217 IF (N4RESI.GT.NTOLDS) GO TO 826
218 IF (IDI(2).GE.5) GO TO 57
219 IF (IDI(2).EQ.4) GO TO 53
223 IF (IDI(2).LE.0) GO TO 825
224 IF (IFLIN.LT.0) GO TO 824
225 IF (JFAST.NE.0) GO TO 827
226 IQ(KQSP+LQFI+31) = JRECNO
227 IQ(KQSP+LQFI+32) = JDSADR
229 53 N4DONI = N4DONI + 2
230 N4ENDI = MIN (MAXREI, N4DONI+N4RESI)
231 L4ENDI = L4STAI + N4ENDI
233 IF (IFLIN.GE.0) GO TO 77
237 C-- Skip padding records
239 57 IF (IDI(2).GE.7) GO TO 825
240 IF (N4RESI.GT.MAXREI) GO TO 828
242 IF (NLRPAD.GE.5) GO TO 829
244 N4ENDI = MIN (MAXREI, N4DONI+N4RESI)
246 NWNEW = MIN (N4ENDI-N4DONI, N4RESI)
247 N4DONI = N4DONI + NWNEW
248 N4RESI = N4RESI - NWNEW
251 C-----------------------------------------------------------
252 C------ IFLAGI = -1 : ready continuation Ph / L record
253 C-----------------------------------------------------------
256 N4DONI = L4CURI - L4STAI
257 NWNEW = N4DONI - IQ(KQSP+LBPARI-2)
258 N4RESI = N4RESI - NWNEW
260 IF (N4DONI.EQ.MAXREI+1) THEN
262 MCARRY = LQ(L4CURI-2)
266 #if defined(CERNLIB_QDEBPRI)
267 IF (LOGLVI.GE.3) WRITE (IQLOG,9061) N4RESI,N4DONI,MAXREI,ICARRY
268 9061 FORMAT (1X/' FZIREC- Need continuation PhR/LR, Buffer Status :'
269 F/10X,'Rest LR, NWdone, NWbuf, NWcarry =',3I7,I4)
272 C-- Start continuation LR
274 IF (N4RESI.EQ.0) THEN
281 C-- Get continuation PhR
283 IF (IFIFOI.LE.1) THEN
285 #if defined(CERNLIB_FZDACC)
286 ELSEIF (IFIFOI.EQ.2) THEN
289 #if defined(CERNLIB_FZMEMORY)
290 ELSEIF (IFIFOI.EQ.3) THEN
293 #if defined(CERNLIB_FZALFA)
294 ELSEIF (IFIFOI.EQ.4) THEN
298 IF (IFLAGI.NE.0) GO TO 999
300 L4CURI = L4STAI + N4DONI
301 L4ENDI = L4STAI + N4ENDI
303 IF (ICARRY.NE.0) THEN
311 C-----------------------------------------------------------
312 C------ IFLAGI = 0 : set buffer parameters
313 C-----------------------------------------------------------
315 71 IF (L4STAI.NE.0) GO TO 74
317 C-- Copy parameters from control bank to COMMON
319 N4SKII = IQ(KQSP+LBPARI-4)
320 N4RESI = IQ(KQSP+LBPARI-3)
321 N4DONI = IQ(KQSP+LBPARI-2)
322 N4ENDI = IQ(KQSP+LBPARI-1)
323 INCBUF = IQ(KQSP+LBPARI+2)
324 L4STAI = KQSP+8 + LBPARI + INCBUF
325 L4CURI = L4STAI + N4DONI
326 L4ENDI = L4STAI + N4ENDI
329 C-- Up-date parameters in control bank
331 74 N4DONI = L4CURI - L4STAI
332 NWNEW = N4DONI - IQ(KQSP+LBPARI-2)
333 N4RESI = N4RESI - NWNEW
335 77 IQ(KQSP+LBPARI-4) = N4SKII
336 IQ(KQSP+LBPARI-3) = N4RESI
337 IQ(KQSP+LBPARI-2) = N4DONI
338 IQ(KQSP+LBPARI-1) = N4ENDI
340 #include "zebra/qtrace99.inc"
343 C-----------------------------------------------------------
345 C-----------------------------------------------------------
347 C- JERROR = 221 LR overshoots physical record control
354 C- JERROR = 222 LR undershoots physical record control
361 C- JERROR = 223 LR expected to start at start of new PhR
363 C! IQUEST(14) = N4ENDI
367 C- JERROR = 224 LR type 1,2,3 seen when 4 expected
374 C- JERROR = 225 Faulty LR type
377 C- JERROR = 226 Faulty LR length
378 826 JERROR = JERROR - 1
380 C- JERROR = 227 LR of type 1,2,3 must start on steering block
381 827 JERROR = JERROR - 1
383 C- JERROR = 228 Padding record longer than one physical record
384 828 JERROR = JERROR - 1
386 C- JERROR = 229 More than 4 padding records in a row
387 829 JERROR = 229 + JERROR
395 871 IQ(KQSP+LBPARI-9) = -2
400 * ==================================================
401 #include "zebra/qcardl.inc"