5 * Revision 1.2 1996/04/18 16:13:03 mclareni
6 * Incorporate changes from J.Zoll for version 3.77
8 * Revision 1.1.1.1 1996/03/06 10:47:21 mclareni
12 #include "zebra/pilot.h"
13 SUBROUTINE MZIOCH (IODVEC,NWIOMP,CHFORM)
15 C- Analyse I/O descriptor, user called, also from MZFORM / MZIOBK
16 C- convert the descriptor CHFORM into the I/O characteristic
17 C- stored into IODVEC of length NWIOMX
19 #include "zebra/zkrakc.inc"
20 #include "zebra/zstate.inc"
21 #include "zebra/zunit.inc"
22 #include "zebra/quest.inc"
23 #include "zebra/mzca.inc"
24 #include "zebra/zbcd.inc"
25 C-------------- END CDE --------------
26 DIMENSION IODVEC(99), NWIOMP(9)
29 EQUIVALENCE (NGR,IQUEST(1)), (NGRU,IQUEST(2))
31 DIMENSION MU(99), MCE(99)
32 EQUIVALENCE (MU(1),IQHOLK(1)), (MCE(1),IQCETK(1))
34 DIMENSION NBITVA(4), NBITVB(4), NBITVC(7)
35 DIMENSION MXVALA(4), MXVALB(4), MXVALC(7)
37 DIMENSION ITAB(48), INV(10)
39 #if defined(CERNLIB_QMVDS)
40 SAVE NBITVA, NBITVB, NBITVC
41 SAVE MXVALA, MXVALB, MXVALC
44 #if (defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M))
46 DATA NAMESR / 4HMZIO, 4HCH /
48 #if (defined(CERNLIB_QTRHOLL))&&(defined(CERNLIB_A6M))
49 DATA NAMESR / 6HMZIOCH /
51 #if !defined(CERNLIB_QTRHOLL)
53 PARAMETER (NAMESR = 'MZIOCH ')
56 C- A B C D E F G H I J K L M
57 C- N O P Q R S T U V W X Y Z
58 C- 0 1 2 3 4 5 6 7 8 9 + - *
61 +, -1, 12, -1, 15, -1, 14, -1, 16, 13, -1, -1, -1, -1
62 +, -1, -1, -1, -1, -1, 18, -1, -1, -1, -1, -1, -1, -1
63 +, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, 11, 10
64 +, 19, -1, -1, -1, -1, -2, -2, -2 /
66 DATA INV / 39, 38, 2, 9, 6, 4, 8, 24, 19, 40 /
67 C- * - B I F D H X S /
69 DATA NBITVA / 32, 16, 10, 8 /
70 DATA NBITVB / 29, 14, 9, 7 /
71 DATA NBITVC / 26, 11, 6, 4, 2, 1, 1 /
72 DATA MXVALA / 0, 65536, 1024, 256 /
73 DATA MXVALB / 0, 16384, 512, 128 /
74 DATA MXVALC / 0, 2048, 64, 16, 4, 2, 2 /
76 #include "zebra/q_sbit1.inc"
77 #include "zebra/q_sbyt.inc"
79 #include "zebra/qtrace.inc"
83 IF (NCH.GE.121) GO TO 90
84 CALL UCTOH1 (CHFORM,IQHOLK,NCH)
86 CALL IZBCDT (NCH,ITAB)
88 IF (IQUEST(2).NE.0) GO TO 91
89 IF (IQUEST(1).EQ.0) GO TO 91
91 C-------- SCAN CHARACTER BY CHARACTER
93 C- NUMERIC 0 ... 9 10 11 12 13 14 15 16 17 18 19
94 C- FOR 0 ... 9 * - B I F D H S /
104 IF (NUM.GE.10) GO TO 24
109 IF (JCH.LT.NCH) GO TO 22
114 24 IF (NUM.GE.12) GO TO 26
115 IF (NVAL.NE.0) GO TO 92
119 IF (JPOSR.GE.0) GO TO 93
121 IF (JCH.EQ.NCH) GO TO 92
124 IF (NUM.LT.12) GO TO 92
125 IF (NUM.GE.19) GO TO 92
130 26 IF (NUM.EQ.19) GO TO 29
131 IF (NUM.EQ.18) GO TO 92
132 IF (NVAL.EQ.0) GO TO 92
134 IF (NVAL.NE.2*(NVAL/2)) GO TO 92
137 27 MU(JU+1) = NUM - 11
140 IF (JCH.EQ.NCH) GO TO 31
141 IF (JPOSIN.LT.0) GO TO 21
146 29 IF (NVAL.NE.0) GO TO 92
147 IF (JPOSR.GE.0) GO TO 95
148 IF (JCH.EQ.NCH) GO TO 92
152 C-------- NO TRAILING REGIONS
161 IF (JPOSR+2.NE.NU) GO TO 41
162 IF (MU(NU-1).NE.7) GO TO 41
163 C- continue if 'CT ... CT / *S'
165 IF (MU(NU).EQ.0) JFL12=2
168 C-- FORMATS TO BE HANDLED IN CLASSES 1 AND 2 (OR 0)
169 C- JFL12 = 2 : '... *T'
171 C- '... NT' AS '... -T'
172 C- '... / *S' AS '... -S'
177 C---- CLASS 0 : '-T' OR '*T'
179 IQUEST(12) = MU(NU-1)
181 IF (JFL12.EQ.1) GO TO 82
182 IQUEST(12) = MSBIT1 (IQUEST(12),4)
186 C---- CLASS 0 : 'CT -T' OR 'CT *T'
188 IF (NSECA.GE.2) GO TO 33
189 IF (MU(2).GE.64) GO TO 34
190 IF (JFL12.EQ.2) IQUEST(12)= MSBIT1(IQUEST(12),4)
191 IQUEST(12) = MSBYT (MU(1),IQUEST(12),5,3)
192 IQUEST(12) = MSBYT (MU(2),IQUEST(12),8,6)
195 C---- CLASS 1 : 'CT CT CT -T'
196 C- CLASS 2 : 'CT CT CT *T'
198 33 IF (IVAL+NSECA.EQ.2) GO TO 38
199 34 IQUEST(12) = MSBYT (JFL12,IQUEST(12),14,2)
200 IQUEST(12) = MSBYT (MU(1),IQUEST(12),5,3)
203 IF (NSECA.GE.4) GO TO 36
206 IF (NSECA.EQ.1) GO TO 82
209 CALL MZIOCF (0,MXVALA)
210 IF (NGR.NE.NGRU) GO TO 36
214 C---- CLASS 1 : 'CT ... CT -T'
215 C- CLASS 2 : 'CT ... CT *T'
217 36 IQUEST(12) = MSBIT1 (IQUEST(12),4)
219 CALL MZIOCF (0,MXVALB)
223 C---- CLASS 1 : '*T *T -T'
224 C- CLASS 2 : '*T *T *T'
226 38 IQUEST(12) = 16*IQUEST(12)
227 IQUEST(12) = MSBYT (MU(1),IQUEST(12), 8,3)
228 IQUEST(12) = MSBYT (MU(3),IQUEST(12),11,3)
229 IQUEST(12) = MSBYT (JFL12,IQUEST(12),14,2)
232 C-------- WITH TRAILING REGIONS
235 IF (NSECA.GE.3) GO TO 44
237 C---- CLASS 3 : '/ *T'
239 IQUEST(12) = MU(NU-1)
240 IQUEST(12) = MSBYT (3,IQUEST(12),14,2)
241 IF (NSECA.EQ.2) GO TO 42
242 IF (MU(2).EQ.0) GO TO 82
245 C---- CLASS 3 : 'CT / *T' OR '/ CT *T'
247 42 IF (MU(4).NE.0) GO TO 44
248 IF (MU(2).GE.64) GO TO 44
249 IQUEST(12) = MSBYT (MU(1),IQUEST(12),5,3)
250 IQUEST(12) = MSBYT (MU(2),IQUEST(12),8,6)
251 IF (NSECL.EQ.1) GO TO 82
252 IQUEST(12) = MSBIT1 (IQUEST(12),4)
255 C---- CLASS 4 : 'CT / CT CT CT' OR 'CT CT / CT CT'
257 44 IF (NSECL.EQ.0) GO TO 51
258 IF (NSECL.GE.3) GO TO 61
259 IF (NSECA.GE.5) GO TO 61
260 IF (IVAL+NSECA.EQ.3) GO TO 48
263 CALL MZIOCF (0,MXVALA)
264 IF (NGR.NE.NGRU) GO TO 61
268 IF (NSECL.EQ.2) IQUEST(12)=IQUEST(12)+8
269 IQUEST(12) = MSBIT1 (IQUEST(12),16)
277 C---- CLASS 4 : '*T / *T *T' OR '*T *T / *T'
279 48 IQUEST(12) = 8*(2*MU(1)+NSECL-1)
280 IQUEST(12) = MSBYT (MU(3),IQUEST(12), 8,3)
281 IQUEST(12) = MSBYT (MU(5),IQUEST(12),11,3)
282 IQUEST(12) = MSBIT1 (IQUEST(12),16)
285 C-------- NO LEADING REGIONS
287 C---- CLASS 5 : '/ CT CT CT CT'
289 51 IF (IVAL+NSECA.EQ.3) GO TO 58
292 IQUEST(12) = MSBYT (5,IQUEST(12),14,3)
294 IF (NSECA.GE.5) GO TO 55
297 CALL MZIOCF (0,MXVALA)
298 IF (NGR.NE.NGRU) GO TO 55
304 C---- CLASS 5 : '/ CT ... CT'
306 55 IQUEST(12) = MSBIT1 (IQUEST(12),4)
308 CALL MZIOCF (0,MXVALB)
312 C---- CLASS 5 : '/ *T *T *T'
314 58 IQUEST(12) = 16*MU(1)
315 IQUEST(12) = MSBYT (MU(3),IQUEST(12), 8,3)
316 IQUEST(12) = MSBYT (MU(5),IQUEST(12),11,3)
317 IQUEST(12) = MSBYT (5,IQUEST(12),14,3)
320 C-------- CLASS 6 : 'CT ... CT / CT ... CT'
322 61 IQUEST(12) = NSECL
324 IF (NSECL.GE.16) GO TO 96
325 IQUEST(12) = MSBYT (MU(1),IQUEST(12),5,3)
326 IQUEST(12) = MSBYT (6,IQUEST(12),14,3)
330 CALL MZIOCF (0,MXVALB)
335 C-- PACK FIRST I/O WORD
337 70 IF (NGRU.EQ.1) GO TO 73
341 IQUEST(12) = MSBYT (MU(JU+1),IQUEST(12),JBTF,3)
344 IQUEST(13) = MSBYT (MU(JU+2),IQUEST(13),JBTC,NBT)
347 IF (NGRU.EQ.NSECA) GO TO 82
351 C---- PACK NEXT I/O WORD
354 IQUEST(JWIO) = MU(JU+1)
357 NGR = MIN (7,NSECA-NSECD)
358 IF (NGR.EQ.1) GO TO 77
360 CALL MZIOCF (JU,MXVALC)
361 IF (NGRU.EQ.1) GO TO 77
365 IQUEST(JWIO) = MSBYT (MU(JU+1),IQUEST(JWIO),JBT,3)
369 77 IQUEST(JWIO-1) = MSBYT (NGRU,IQUEST(JWIO-1),30,3)
373 IQUEST(JWIO) = MSBYT (MU(JU+2),IQUEST(JWIO),JBT,NBT)
378 IF (NSECD.LT.NSECA) GO TO 74
381 IF (NWIO.GE.NWIOMX) GO TO 97
382 IF (NWIO.GE.16) GO TO 97
383 IOWD = 64*(32*NWIO+NWIO+1) + 1
385 82 IOWD = MSBYT (IQUEST(12),IOWD,17,16)
389 CALL UCOPY (IQUEST(12),IODVEC,NWIO+1)
391 #if defined(CERNLIB_QDEBPRI)
392 IF (NQLOGM.GE.1) WRITE (IQLOG,9088) NWIO,CHFORM
393 9088 FORMAT (' MZIOCH-',I5,' extra I/O words for Format ',A)
395 #include "zebra/qtrace99.inc"
398 C------ ERROR CONDITIONS
400 C-- CHARACTER STRING TOO LONG
408 IQUEST(12) = IQUEST(1)
409 IQUEST(13) = IQUEST(2)
410 IF (IQUEST(1).EQ.0) GO TO 99
413 C-- I/O DESCRIPTOR TOO LONG
416 IQUEST(13) = NWIO + 1
428 C-- -T NOT LAST SECTOR IN THE STRING
429 94 NQCASE = NQCASE + 1
431 C-- -T NOT ALLOWED IN REPEAT
432 93 NQCASE = NQCASE + 1
435 92 NQCASE = NQCASE + 2
442 MCE(JCH)=IQNUM(JCET+1)
445 MCE(JCH) = IQLETT(JCET)
448 CALL UTRANS (MCE,IQUEST(14),NCH,1,4)
449 NQFATA = (NCH-1)/4 + 4
451 99 IQUEST(11) = IQCETK(121)
452 #include "zebra/qtofatal.inc"
454 * ==================================================
455 #include "zebra/qcardl.inc"