5 * Revision 1.2 1996/04/18 16:10:51 mclareni
6 * Incorporate changes from J.Zoll for version 3.77
8 * Revision 1.1.1.1 1996/03/06 10:47:13 mclareni
12 #include "zebra/pilot.h"
13 SUBROUTINE FZOUT (LUNP,IXDIVP,LENTP,IEVP,CHOPT,NIOP,NUHP,IUHEAD)
15 C- MAIN SEQUENTIAL OUTPUT ROUTINE, USER CALLED
17 #include "zebra/zstate.inc"
18 #include "zebra/zunit.inc"
19 #include "zebra/zvfaut.inc"
20 #include "zebra/mqsys.inc"
21 #include "zebra/eqlqf.inc"
22 #include "zebra/mzct.inc"
23 #include "zebra/fzcx.inc"
24 C-------------- End CDE --------------
25 DIMENSION LUNP(9),IXDIVP(9),LENTP(9),IEVP(9)
26 DIMENSION NIOP(9),NUHP(9),IUHEAD(99)
29 #if (defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M))
31 DATA NAMESR / 4HFZOU, 4HT /
33 #if (defined(CERNLIB_QTRHOLL))&&(defined(CERNLIB_A6M))
34 DATA NAMESR / 6HFZOUT /
36 #if !defined(CERNLIB_QTRHOLL)
38 PARAMETER (NAMESR = 'FZOUT ')
41 #include "zebra/q_jbit.inc"
42 #include "zebra/q_jbyt.inc"
44 #include "zebra/qtrace.inc"
51 NWUHOR = MAX (NUHP(1),0)
52 NWUHX = MIN (NWUHOR,400)
57 C-- Set current output unit
59 IF (LUNNX.NE.LUNX) CALL FZLOC (LUNNX,2)
60 #if defined(CERNLIB_QDEBPRI)
62 + WRITE (IQLOG,9111) LUNNX,LENTRX,IEVFLX,IACTVX,CHOPT
63 9111 FORMAT (1X/' FZOUT- Enter for LUN=',I3,
64 F' LENTRY,IEVFL,IACTV,OPT=',I8,2I3,1X,A)
67 #if defined(CERNLIB_QDEBUG)
68 IF (IQVSTA.NE.0) CALL ZVAUTX
70 #if defined(CERNLIB_QPRINT)
71 IF (NWUHOR.GT.NWUHX) THEN
72 IF (LOGLVX.GE.-2) WRITE (IQLOG,9112) LUNX,NWUHOR
74 9112 FORMAT (1X/' FZOUT. LUN=',I4,' Of ',I4,' user header words',
75 F' only 400 are taken !!!')
77 #if defined(CERNLIB_FZCHANNEL)
79 IF (IADOPX.EQ.0) GO TO 907
83 #if defined(CERNLIB_FZMEMORY)
85 IADOPX = IQ(KQSP+LQFX+8)
86 IF (IADOPX.EQ.0) GO TO 907
87 IQ(KQSP+LQFX+1) = IADOPX
92 IF (IEVFLX.LT.0) GO TO 401
94 IF (IEVFLX.GE.2) GO TO 411
95 IF (IACTVX.GE.16) GO TO 901
104 C-- Ready I/O characteristic
106 IF (NWUHX.EQ.0) GO TO 39
108 IF (IOCHX(1)) 34, 32, 33
111 IF (IOCHX(1).LT.8) GO TO 38
112 34 NWIOX = JBYT (IOCHX(1), 7,5)
113 J = JBYT (IOCHX(1),12,5)
114 IF (JBYT (IOCHX(1), 1,6).NE.1) GO TO 903
115 IF (NWIOX.GT.16) GO TO 903
116 IF (NWIOX.NE.J+1) GO TO 903
118 IF (NWIOX.GT.1) CALL UCOPY (NIOP,IOCHX,NWIOX)
119 38 NWUHCX = NWUHX + NWIOX
122 C---- Ready text vector
124 LTEXTX = LQ(KQSP+LQFX-2)
125 IF (LTEXTX.NE.0) CALL FZOTXT
127 C---- Construct table of material to be written
129 CALL UOPTC (CHOPT,'DISZMLNP',IOPTXD)
130 IOPTXN = IOPTXN + IOPTXS + IOPTXZ
132 IF (IOPTXZ.NE.0) GO TO 121
134 CALL MZSDIV (IXDIVX,0)
139 IF (IQUEST(1).NE.0) GO TO 999
140 IF (IOPTXN.NE.0) NWTABX=0
142 C------ Output of pilot records
145 IF (IEVFLX.NE.0) IDX(2)=2
146 NWMEMT = 20 + NWUHCX + NWSEGX + NWTXX + NWTABX + NWBKX
148 #if defined(CERNLIB_QDEBPRI)
150 +WRITE (IQLOG,9121) LUNX,JQSTOR,LENTRX,NWTABX,NWBKX,IEVFLX,CHOPT
151 9121 FORMAT (' FZOUT- LUN=',I4,' Store/LENTRY=',I3,I9,
152 F' NWTAB,NWBANK=',I5,I7,' Evfl/Opt=',I3,1X,A)
155 #if defined(CERNLIB_FZFFNAT)
156 IF (IFIFOX.EQ.0) THEN
161 #if defined(CERNLIB_FZMEMORY)
162 IF (IFIFOX.EQ.3) THEN
163 IF (NWMEMT.GT.IQ(KQSP+LQFX+9)) GO TO 909
167 124 IQ(KQSP+LQFX+15) = IQ(KQSP+LQFX+15) + 1
170 IF (NWBKX.EQ.0) GO TO 190
172 C------ Write out material according to table
174 #if defined(CERNLIB_QDEBPRI)
175 IF (LOGLVX.GE.3) WRITE (IQLOG,9140) NWTABX,NWBKX
176 9140 FORMAT (10X,'NWTAB/NWBK =',2I9)
178 IQ(KQSP+LQFX+16) = IQ(KQSP+LQFX+16) + 1
181 #if defined(CERNLIB_FZFFNAT)
182 IF (IFIFOX.EQ.0) THEN
190 C---- Test for pseudo end-of-tape
192 190 IQ(KQSP+LQFX+17) = IQ(KQSP+LQFX+17) + 1
193 191 NUM1 = IQ(KQSP+LQFX+19)
194 NUM2 = IQ(KQSP+LQFX+20)
195 192 IF (NUM2.GE.1000000) THEN
197 NUM2 = NUM2 - 1000000
198 IQ(KQSP+LQFX+19) = NUM1
199 IQ(KQSP+LQFX+20) = NUM2
203 LIM1 = IQ(KQSP+LQFX+37)
204 LIM2 = IQ(KQSP+LQFX+38)
206 IF (LIM1+LIM2.EQ.0) GO TO 991
207 IF (NUM1-LIM1) 991, 196, 197
208 196 IF (NUM2.LT.LIM2) GO TO 991
213 C-------------------------------------------------
214 C- Write start-of-run
215 C- Write end-of-run, end-of-file
216 C-------------------------------------------------
220 JRUNCR = IQ(KQSP+LQFX+29)
221 IF (JRUN.LT.0) GO TO 410
222 IF (IACTVX.LT.11) GO TO 406
223 IF (IACTVX.GE.14) GO TO 406
226 C- precede start-of-run by end-of-run
229 C-- Write start-of-run
234 IF (JRUN.EQ.0) JRUN=JRUNCR+1
235 IQ(KQSP+LQFX+29) = JRUN
236 IQ(KQSP+LQFX+14) = IQ(KQSP+LQFX+14) + 1
237 #if defined(CERNLIB_QPRINT)
238 IF (LOGLVX.GE.0) WRITE (IQLOG,9406) LUNX,JRUN
239 9406 FORMAT (1X/' FZOUT. LUN=',I4,' Write Start-of-Run ',I6)
245 C- IACTV : last action IEVFL : action requested
249 C- 13 buffer flushed 13 flush buffer
250 C- 14 EOR written 14 write EOR
251 C- 15 first EOF written 15 write EoF
252 C- 16 second EOF written 16 write EoD
253 C- 17 attempted write after eod
256 C- from FZENDO to 411
257 411 IF (IEVFLX.LT.13) GO TO 902
258 IF (IEVFLX.GE.17) GO TO 902
259 IF (IACTVX.LT.11) GO TO 991
260 IF (IEVFLX.LE.IACTVX) GO TO 991
262 IF (IEVFLX.GE.14) GO TO 421
267 C---- Write end-of-run
269 421 IF (IACTVX.GE.14) GO TO 461
270 JRUNCR = IQ(KQSP+LQFX+29)
274 422 IQ(KQSP+LQFX+13) = IQ(KQSP+LQFX+13) + 1
275 #if defined(CERNLIB_QPRINT)
276 IF (LOGLVX.GE.0) WRITE (IQLOG,9421) LUNX,JRUNCR
277 9421 FORMAT (' FZOUT. LUN=',I4,' Write End-of-Run ',I8)
279 C-- flush the buffer before EoR
280 IF (IACTVX.LT.13) THEN
281 IF (IFIFOX.NE.0) THEN
290 C-- Write StoR/EoR record
292 424 IDX(1) = 1 + NWUHU
295 #if defined(CERNLIB_FZFFNAT)
296 IF (IFIFOX.EQ.0) THEN
304 IF (JBIT(MSTATX,15).NE.0) GO TO 441
305 IF (JTRA.EQ.2) GO TO 991
307 C-- Flush the buffer after operation
309 441 IF (IFIFOX.NE.0) THEN
314 GO TO ( 406, 991, 991, 461, 471), JTRA
316 C---- Write end-of-file / end-of-data
318 461 IF (IEVFLX.LT.15) GO TO 991
319 IF (IACTVX.EQ.15) GO TO 471
322 IQ(KQSP+LQFX+12) = IQ(KQSP+LQFX+12) + 1
323 #if defined(CERNLIB_QPRINT)
324 IF (LOGLVX.GE.0) WRITE (IQLOG,9464) LUNX
325 9464 FORMAT (' FZOUT. LUN=',I4,' Write Zebra EoF')
331 IUHDAT(1) = IQ(KQSP+LQFX+34)
332 IUHDAT(2) = IQ(KQSP+LQFX+35)
333 IUHDAT(3) = IQ(KQSP+LQFX+33) + 1
335 #if defined(CERNLIB_FZFFNAT)
336 IF (IFIFOX.EQ.0) THEN
346 471 NEOF = JBYT (MSTATX,13,2)
347 IF (IEVFLX.EQ.15) THEN
350 NEOFU = MAX (0,NEOF-1)
352 IF (NEOFU.EQ.0) GO TO 474
357 #if defined(CERNLIB_FZFFNAT)
358 IF (IFIFOX.EQ.0) THEN
364 473 IQ(KQSP+LQFX+11) = IQ(KQSP+LQFX+11) + IQUEST(11)
367 #if defined(CERNLIB_QPRINT)
368 IF (LOGLVX.GE.0) THEN
369 IF (IEVFLX.NE.16) THEN
370 WRITE (IQLOG,9474) LUNX
372 WRITE (IQLOG,9475) LUNX
375 9474 FORMAT (' FZOUT. LUN=',I4,' End-of-File')
376 9475 FORMAT (' FZOUT. LUN=',I4,' End-of-Data')
380 C-------------------------------------------------
382 C-------------------------------------------------
384 901 IF (IACTVX.EQ.18) GO TO 21
385 IF (IACTVX.EQ.17) CALL ZFATAM ('FZOUT - Going beyond EoD.')
390 902 IQUEST(11) = IEVFLX
391 CALL ZFATAM ('FZOUT - Faulty parameter IEVENT.')
393 903 IQUEST(11) = IOCHX(1)
394 CALL ZFATAM ('FZOUT - IOCH invalid.')
396 #if defined(CERNLIB_FZCHANNEL)||defined(CERNLIB_FZMEMORY)
399 IF (IEVFLX.GE.2) GO TO 992
400 CALL ZFATAM ('FZOUT - User routine / buffer not connected.')
402 #if defined(CERNLIB_FZMEMORY)
405 IQUEST(8) = IQ(KQSP+LQFX+9)
407 IF (IOPTXP.EQ.0) CALL ZTELL (14,1)
410 C-------------------------------------------------
412 C-------------------------------------------------
416 IQUEST(5) = IQ(KQSP+LQFX+31)
417 IQUEST(6) = IQ(KQSP+LQFX+32)
418 IQ(KQSP+LQFX+2) = IACTVX
419 #if defined(CERNLIB_FZMEMORY)
421 +IQUEST(9) = IQ(KQSP+LQFX+1) - IQ(KQSP+LQFX+8)
426 IQUEST(13) = IQ(KQSP+LQFX+15)
427 IQUEST(14) = IQ(KQSP+LQFX+19)
428 IQUEST(15) = IQ(KQSP+LQFX+20)
429 IQUEST(16) = IQ(KQSP+LQFX+21)
430 IQUEST(17) = IQ(KQSP+LQFX+22)
431 #include "zebra/qtrace99.inc"
434 * ==================================================
435 #include "zebra/qcardl.inc"