5 * Revision 1.2 1996/04/18 16:10:24 mclareni
6 * Incorporate changes from J.Zoll for version 3.77
8 * Revision 1.1.1.1 1996/03/06 10:47:12 mclareni
12 #include "zebra/pilot.h"
13 #if defined(CERNLIB_FZALFA)
14 SUBROUTINE FZIASC (NRSKPP)
16 C- Read one physical record from cards in ALFA mode,
17 C- service routine to FZIN, called via FZIPHA
19 C- Do not expand fast blocks if NRSKIP not zero
21 C- The record is stored into words LQ(LBUFA) to LQ(LBUFE-1)
22 C- It is a 'fast' record if JFAST .NE. 0
24 #include "zebra/zbcd.inc"
25 #include "zebra/zkrakc.inc"
26 #include "zebra/zstate.inc"
27 #include "zebra/zunit.inc"
28 #include "zebra/mqsysh.inc"
29 #include "zebra/fzci.inc"
30 C-------------- End CDE --------------
32 DIMENSION INITV(6), NBV(6), ICHSUM(2,2)
34 EQUIVALENCE (LUN,IQUEST(90)), (JSKIP,IQUEST(91))
35 EQUIVALENCE (MRSTA,IQUEST(92)), (MREND,IQUEST(93))
36 EQUIVALENCE (JTKC,IQUEST(96)), (JTKL,IQUEST(97))
39 #if defined(CERNLIB_QMVDS)
42 #if (defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M))
44 DATA NAMESR / 4HFZIA, 4HSC /
46 #if (defined(CERNLIB_QTRHOLL))&&(defined(CERNLIB_A6M))
47 DATA NAMESR / 6HFZIASC /
49 #if !defined(CERNLIB_QTRHOLL)
51 PARAMETER (NAMESR = 'FZIASC ')
53 DATA INITV / 0, 1, 2, 3, 0, 134217727 /
56 #include "zebra/q_or.inc"
57 #include "zebra/q_shiftl.inc"
58 #include "zebra/q_jbyt.inc"
60 #include "zebra/qtraceq.inc"
64 LBUFE = L4STAI + MAXREI
74 C---- Read first line of next physical record
84 IF (IQUEST(1).NE.0) GO TO 101
90 IF (NRSKIP.NE.0) GO TO 999
91 IF (NFASTI.EQ.0) GO TO 999
100 31 IF (JTKC.GE.JTKL) THEN
101 IF (MREND.NE.0) GO TO 911
103 IF (IQUEST(1).NE.0) GO TO 101
106 C-- Handle running type, check termination
108 IF (ITYPE.LE.0) GO TO 34
109 IF (IQKRAK(JTKC).LT.33) GO TO 41
112 C-- Find type of next word
114 34 JTYPC = IQKRAK(JTKC)
116 #if defined(CERNLIB_QDEVZE)
117 IF (LOGLVI.GE.6) WRITE (IQLOG,9834) JTYPC,IQLETT(JTYPC)
118 9834 FORMAT (' FZIASC- Next control code/char.=',I4,1X,A1)
120 IF (JTYPC.GE.42) GO TO 71
121 IF (JTYPC-26) 36, 912, 35
122 35 IWORD = JTYPC - 27
123 IF (IWORD.LT.10) GO TO 61
127 JTYPS = JTYPC - 5*JTYPE
131 IF (JTYPE.GE.5) NBUSE=NBUSE-1
133 INIT = ISHFTL (INITV(JTYPE), 5)
135 C---- Compose next word
137 C-- copy bytes and check validity
140 NBV(J) = IQKRAK(JTKC) - 1
141 IF (NBV(J).GE.32) GO TO 913
144 IWORD = IOR (NBV(1),INIT)
146 IF (JTYPE.LT.5) GO TO 51
148 C-- Compose NBUSE 5-bit bytes for JTYPE=5,6
150 GO TO ( 60, 44, 45, 46, 47, 48), NBUSE
152 44 IWORD = IOR (NBV(2), ISHFTL(IWORD,5))
155 45 IWORD = IOR (NBV(2), ISHFTL(IWORD,5))
156 IWORD = IOR (NBV(3), ISHFTL(IWORD,5))
159 46 IWORD = IOR (NBV(2), ISHFTL(IWORD,5))
160 IWORD = IOR (NBV(3), ISHFTL(IWORD,5))
161 IWORD = IOR (NBV(4), ISHFTL(IWORD,5))
164 47 IWORD = IOR (NBV(2), ISHFTL(IWORD,5))
165 IWORD = IOR (NBV(3), ISHFTL(IWORD,5))
166 IWORD = IOR (NBV(4), ISHFTL(IWORD,5))
167 IWORD = IOR (NBV(5), ISHFTL(IWORD,5))
170 48 IWORD = IOR (NBV(2), ISHFTL(IWORD,5))
171 IWORD = IOR (NBV(3), ISHFTL(IWORD,5))
172 IWORD = IOR (NBV(4), ISHFTL(IWORD,5))
173 IWORD = IOR (NBV(5), ISHFTL(IWORD,5))
174 IWORD = IOR (NBV(6), ISHFTL(IWORD,5))
177 C-- Compose NBUSE 5-bit bytes for JTYPE=1,2,3,4
179 51 GO TO ( 60, 54, 55, 56, 57, 58), NBUSE
181 54 IWORD = IOR (NBV(2), ISHFTL(IWORD,5))
182 IWORD = ISHFTL (IWORD,20)
185 55 IWORD = IOR (NBV(2), ISHFTL(IWORD,5))
186 IWORD = IOR (NBV(3), ISHFTL(IWORD,5))
187 IWORD = ISHFTL (IWORD,15)
190 56 IWORD = IOR (NBV(2), ISHFTL(IWORD,5))
191 IWORD = IOR (NBV(3), ISHFTL(IWORD,5))
192 IWORD = IOR (NBV(4), ISHFTL(IWORD,5))
193 IWORD = ISHFTL (IWORD,10)
196 57 IWORD = IOR (NBV(2), ISHFTL(IWORD,5))
197 IWORD = IOR (NBV(3), ISHFTL(IWORD,5))
198 IWORD = IOR (NBV(4), ISHFTL(IWORD,5))
199 IWORD = IOR (NBV(5), ISHFTL(IWORD,5))
200 IWORD = ISHFTL (IWORD,5)
203 58 IWORD = IOR (NBV(2), ISHFTL(IWORD,5))
204 IWORD = IOR (NBV(3), ISHFTL(IWORD,5))
205 IWORD = IOR (NBV(4), ISHFTL(IWORD,5))
206 IWORD = IOR (NBV(5), ISHFTL(IWORD,5))
207 IWORD = IOR (NBV(6), ISHFTL(IWORD,5))
209 C-- Store composed word
211 #if defined(CERNLIB_QDEVZE)
212 60 IF (LOGLVI.GE.6) WRITE (IQLOG,9860) IWORD,(NBV(J),J=1,NBUSE)
213 9860 FORMAT (' FZIASC- Composed word= ',Z8,6I3)
215 61 IF (LOGLVI.GE.6) WRITE (IQLOG,9861) IWORD
216 9861 FORMAT (' FZIASC- Integer word= ',I8)
219 #if !defined(CERNLIB_QDEVZE)
223 IF (JCHSUM.NE.0) GO TO 82
225 ICHSUM(1,1) = ICHSUM(1,1) + JBYT (IWORD,17,16)
226 ICHSUM(2,1) = ICHSUM(2,1) + JBYT (IWORD, 1,16)
228 IF (IFLREP.NE.0) GO TO 63
229 IF (LBUFC.GE.LBUFE) GO TO 914
232 IF (ITYPE.GE.0) GO TO 31
236 C---- Repetition executed
240 IF (LBUFN.GT.LBUFE) GO TO 915
241 IF (N.LE.0) GO TO 916
243 DO 64 L=LBUFC,LBUFN-1
250 C---- Control symbols
252 C-- = : repetition signalled
254 70 JTYPC = IQKRAK(JTKC)
256 71 IF (JTYPC-44) 912, 72, 74
257 72 IF (JCHSUM.EQ.1) GO TO 920
263 C-- close sq bracket : stop running type
265 74 IF (JTYPC-54) 912, 75, 77
269 C-- open sq bracket : start running type
271 77 IF (JTYPC-58) 912, 78, 81
272 78 IF (ITYPE.LT.0) GO TO 917
276 C-- < : end of physical record
278 81 IF (JTYPC.NE.60) GO TO 912
279 IF (LBUFC.NE.LBUFE) GO TO 918
280 IF (JCHSUM.NE.0) GO TO 999
281 IF (IFLREP.NE.0) GO TO 920
286 C-- Check-sum reading
288 82 IF (IFLREP.NE.0) IWORD = IWDREP
289 ICHSUM(JCHSUM,2) = IWORD
292 IF (JCHSUM.EQ.2) GO TO 31
294 IF (ICHSUM(1,1).NE.ICHSUM(1,2)) GO TO 919
295 IF (ICHSUM(2,1).NE.ICHSUM(2,2)) GO TO 919
297 #include "zebra/qtrace99.inc"
303 101 IF (IQUEST(1).LT.0) GO TO 999
304 IF (IQUEST(1).EQ.7799) GO TO 910
311 IQUEST(14) = IQUEST(1)
314 C---- Record context errors
316 C- JERROR = 310 Invalid character in column 1
319 C- JERROR = 311 Record shorter than expected
320 911 JERROR = JERROR - 1
322 C- JERROR = 312 Faulty type code
323 912 JERROR = JERROR - 1
325 C- JERROR = 313 Faulty numeric value, > 31
326 913 JERROR = JERROR - 1
328 C- JERROR = 314 Record longer than expected
329 914 JERROR = JERROR - 1
331 C- JERROR = 315 Repetition count overshoots record end
332 915 JERROR = JERROR - 1
334 C- JERROR = 316 Repetition count negative
335 916 JERROR = JERROR - 1
337 C- JERROR = 317 Double open square bracket
338 917 JERROR = JERROR - 1
340 C- JERROR = 318 Record shorter than expected
341 918 JERROR = JERROR - 1
343 C- JERROR = 319 Check-sum error
344 919 JERROR = JERROR - 1
346 C- JERROR = 320 Illegal combination =< or <=
347 920 JERROR = JERROR + 320
353 * ==================================================
354 #include "zebra/qcardl.inc"