]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
5 | * Revision 1.2 1996/04/18 16:10:18 mclareni | |
6 | * Incorporate changes from J.Zoll for version 3.77 | |
7 | * | |
8 | * Revision 1.1.1.1 1996/03/06 10:47:10 mclareni | |
9 | * Zebra | |
10 | * | |
11 | * | |
12 | #include "zebra/pilot.h" | |
13 | SUBROUTINE FZCOPY (LUNIN,LUNOUT,IEVP,CHOPT,NIOP,NUHP,IUHEAD) | |
14 | ||
15 | C- Control routine to copy d/s without expansion, user called | |
16 | ||
17 | #include "zebra/zstate.inc" | |
18 | #include "zebra/zunit.inc" | |
19 | #include "zebra/mqsys.inc" | |
20 | #include "zebra/eqlqf.inc" | |
21 | #include "zebra/mzcwk.inc" | |
22 | #include "zebra/mzct.inc" | |
23 | #include "zebra/fzci.inc" | |
24 | #include "zebra/fzcx.inc" | |
25 | #include "zebra/fzcseg.inc" | |
26 | C-------------- End CDE -------------- | |
27 | DIMENSION LUNIN(9),LUNOUT(9),IEVP(9) | |
28 | DIMENSION NIOP(9),NUHP(9),IUHEAD(99) | |
29 | DIMENSION NEWOPT(3) | |
30 | CHARACTER CHOPT*(*) | |
31 | EQUIVALENCE (LRTYP,IDI(2)) | |
32 | #if (defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M)) | |
33 | DIMENSION NAMESR(2) | |
34 | DATA NAMESR / 4HFZCO, 4HPY / | |
35 | #endif | |
36 | #if (defined(CERNLIB_QTRHOLL))&&(defined(CERNLIB_A6M)) | |
37 | DATA NAMESR / 6HFZCOPY / | |
38 | #endif | |
39 | #if !defined(CERNLIB_QTRHOLL) | |
40 | CHARACTER NAMESR*8 | |
41 | PARAMETER (NAMESR = 'FZCOPY ') | |
42 | #endif | |
43 | ||
44 | #include "zebra/q_jbyt.inc" | |
45 | ||
46 | #include "zebra/qtrace.inc" | |
47 | ||
48 | LUNNI = LUNIN(1) | |
49 | LUNNX = LUNOUT(1) | |
50 | IEVFLX = IEVP(1) | |
51 | IOCHX(1)= NIOP(1) | |
52 | NWUHOR = MAX (NUHP(1),0) | |
53 | NWUHX = MIN (NWUHOR,400) | |
54 | NWFILX = 0 | |
55 | NWMEMT = 0 | |
56 | IFSENT = 0 | |
57 | ICOPYX = 7 | |
58 | CALL UOPTC (CHOPT,'ITP',NEWOPT) | |
59 | ||
60 | C---- Set current output unit | |
61 | ||
62 | IF (LUNNX.NE.LUNX) CALL FZLOC (LUNNX,2) | |
63 | #if defined(CERNLIB_QDEBPRI) | |
64 | IF (LOGLVX.GE.2) THEN | |
65 | IF (LOGLVX.GE.3) WRITE (IQLOG,9110) | |
66 | WRITE (IQLOG,9111) LUNNI,LUNNX,IEVFLX,IACTVX,CHOPT | |
67 | ENDIF | |
68 | 9110 FORMAT (1X) | |
69 | 9111 FORMAT (' FZCOPY- LUNin/out=',2I3,' IEVFL,IACTV,OPT=',2I3,1X,A) | |
70 | ||
71 | #endif | |
72 | #if defined(CERNLIB_QPRINT) | |
73 | IF (NWUHOR.GT.NWUHX) THEN | |
74 | IF (LOGLVX.GE.-2) WRITE (IQLOG,9112) LUNX,NWUHOR | |
75 | ENDIF | |
76 | 9112 FORMAT (1X/' FZOUT. LUN=',I4,' Of ',I4,' user header words', | |
77 | F' only 400 are taken !!!') | |
78 | #endif | |
79 | #if defined(CERNLIB_FZCHANNEL) | |
80 | IF (IACMOX.EQ.3) THEN | |
81 | IF (IADOPX.EQ.0) GO TO 907 | |
82 | ENDIF | |
83 | ||
84 | #endif | |
85 | #if defined(CERNLIB_FZMEMORY) | |
86 | IF (IFIFOX.EQ.3) THEN | |
87 | IADOPX = IQ(KQSP+LQFX+8) | |
88 | IF (IADOPX.EQ.0) GO TO 907 | |
89 | IQ(KQSP+LQFX+1) = IADOPX | |
90 | ENDIF | |
91 | ||
92 | #endif | |
93 | IF (IACTVX.GE.16) GO TO 901 | |
94 | ||
95 | C---- Set current input unit | |
96 | ||
97 | IF (LUNNI.NE.LUNI) CALL FZLOC (LUNNI,1) | |
98 | ||
99 | C-- Check compatibility | |
100 | ||
101 | IF (IDAFOX.NE.IDAFOI) GO TO 941 | |
102 | IF (IFIFOX.EQ.4) GO TO 944 | |
103 | IF (IFIFOI.EQ.4) GO TO 944 | |
104 | IF (IFIFOI.EQ.0) THEN | |
105 | IF (MAXREI.GE.NQWKTB) GO TO 942 | |
106 | ENDIF | |
107 | ||
108 | C-- Get the parameters of the pending d/s | |
109 | ||
110 | LFIIOC = LQFI + JAUIOC | |
111 | LFISEG = LQFI + JAUSEG | |
112 | ||
113 | NWRDAI = IQ(KQSP+LQFI+20) | |
114 | NRECAI = IQ(KQSP+LQFI+21) | |
115 | LRTYP = IQ(KQSP+LQFI+27) | |
116 | NWTABI = IQ(KQSP+LQFI+41) | |
117 | NWBKI = IQ(KQSP+LQFI+42) | |
118 | NWSEGI = IQ(KQSP+LFISEG) | |
119 | LENTRI = IQ(KQSP+LQFI+43) | |
120 | IF (LRTYP.GE.5) GO TO 949 | |
121 | IF (LRTYP.LE.1) GO TO 949 | |
122 | ||
123 | JRETCD = 0 | |
124 | JERROR = 0 | |
125 | NWERR = 0 | |
126 | #if defined(CERNLIB_FZCHANNEL) | |
127 | IF (IACMOI.EQ.3) THEN | |
128 | IF (IACMOX.EQ.3) GO TO 943 | |
129 | ENDIF | |
130 | #endif | |
131 | ||
132 | C------ Transmit the pilot | |
133 | ||
134 | NWSEGX = NWSEGI | |
135 | NWTABX = NWTABI | |
136 | NWBKX = NWBKI | |
137 | LENTRX = LENTRI | |
138 | ||
139 | NWTXX = 0 | |
140 | NWUHCX = 0 | |
141 | NWIOX = 0 | |
142 | ||
143 | C-- Ready I/O characteristic | |
144 | ||
145 | IF (NWUHX.EQ.0) GO TO 39 | |
146 | IF (NEWOPT(1).EQ.0) THEN | |
147 | NWIOX = IQ(KQSP+LFIIOC) | |
148 | CALL UCOPY (IQ(KQSP+LFIIOC+1),IOCHX,NWIOX) | |
149 | GO TO 38 | |
150 | ENDIF | |
151 | ||
152 | IF (IOCHX(1)) 34, 32, 33 | |
153 | 32 IOCHX(1) = 3 | |
154 | 33 NWIOX = 1 | |
155 | IF (IOCHX(1).LT.8) GO TO 38 | |
156 | 34 NWIOX = JBYT (IOCHX(1), 7,5) | |
157 | J = JBYT (IOCHX(1),12,5) | |
158 | IF (JBYT (IOCHX(1), 1,6).NE.1) GO TO 903 | |
159 | IF (NWIOX.GT.16) GO TO 903 | |
160 | IF (NWIOX.NE.J+1) GO TO 903 | |
161 | ||
162 | IF (NWIOX.GT.1) CALL UCOPY (NIOP,IOCHX,NWIOX) | |
163 | 38 NWUHCX = NWUHX + NWIOX | |
164 | 39 CONTINUE | |
165 | ||
166 | C-- Ready text vector | |
167 | ||
168 | IF (NEWOPT(2).EQ.0) THEN | |
169 | LTEXTX = LQ(KQSP+LQFI-2) | |
170 | ELSE | |
171 | LTEXTX = LQ(KQSP+LQFX-2) | |
172 | ENDIF | |
173 | IF (LTEXTX.NE.0) CALL FZOTXT | |
174 | ||
175 | C-- Ready segment table | |
176 | ||
177 | NQSEG = NWSEGX / 3 | |
178 | IF (NQSEG.NE.0) THEN | |
179 | N = 2*NQSEG | |
180 | CALL UCOPY (IQ(KQSP+LFISEG+1), IQSEGH,N) | |
181 | CALL UCOPY (IQ(KQSP+LFISEG+1+N), IQSEGD,NQSEG) | |
182 | ENDIF | |
183 | IQSGLU = LUNI | |
184 | ||
185 | C-- Ready early table | |
186 | ||
187 | C- ISTTAB : transmission status of table words | |
188 | C- -1 not yet read, 0 read into LQ(LQTA), +1 written | |
189 | ||
190 | LQTA = LQWKTB | |
191 | LQTE = LQTA + 2*NWTABI | |
192 | ||
193 | ISTTAB = 1 | |
194 | IF (NWTABX.EQ.0) GO TO 121 | |
195 | ISTTAB = -1 | |
196 | #if defined(CERNLIB_FZFFNAT) | |
197 | IF (NWTABX.GE.41) GO TO 121 | |
198 | ||
199 | IF (IFIFOI.EQ.0) THEN | |
200 | LFIEAR = LQFI + JAUEAR | |
201 | NTBE = IQ(KQSP+LFIEAR) | |
202 | IF (NTBE.NE.0) THEN | |
203 | CALL UCOPY (IQ(KQSP+LFIEAR+1),LQ(LQTA),NWTABI) | |
204 | ISTTAB = 0 | |
205 | GO TO 121 | |
206 | ENDIF | |
207 | ENDIF | |
208 | ||
209 | IF (IFIFOX.NE.0) GO TO 121 | |
210 | IF (IFIFOI.EQ.0) THEN | |
211 | CALL FZIFFN (2) | |
212 | ELSE | |
213 | CALL FZIFFX (2) | |
214 | ENDIF | |
215 | IF (JRETCD.NE.0) GO TO 971 | |
216 | LQTA = LQTA + NWTABI | |
217 | ISTTAB = 0 | |
218 | #endif | |
219 | ||
220 | C------ Output the pilot record | |
221 | ||
222 | 121 IDX(2) = 3 | |
223 | IF (IEVFLX.NE.0) IDX(2)=2 | |
224 | NWMEMT = 20 + NWUHCX + NWSEGX + NWTXX + NWTABX + NWBKX | |
225 | ||
226 | #if defined(CERNLIB_QDEBPRI) | |
227 | IF (LOGLVX.GE.2) WRITE (IQLOG,9121) LENTRX,NWTABX,NWBKX | |
228 | 9121 FORMAT (10X,' LENTRY=',I9,' NWTAB,NWBANK=',I5,I7) | |
229 | ||
230 | #endif | |
231 | #if defined(CERNLIB_FZFFNAT) | |
232 | IF (IFIFOX.EQ.0) THEN | |
233 | CALL FZOFFN (IUHEAD) | |
234 | IF (IQUEST(7).EQ.1) ISTTAB = 1 | |
235 | GO TO 124 | |
236 | ENDIF | |
237 | #endif | |
238 | #if defined(CERNLIB_FZMEMORY) | |
239 | IF (IFIFOX.EQ.3) THEN | |
240 | IF (NWMEMT.GT.IQ(KQSP+LQFX+9)) GO TO 909 | |
241 | ENDIF | |
242 | #endif | |
243 | CALL FZOFFX (IUHEAD) | |
244 | 124 IQ(KQSP+LQFX+15) = IQ(KQSP+LQFX+15) + 1 | |
245 | IFSENT = 7 | |
246 | ||
247 | IACTVX = 12 | |
248 | IF (NWBKX.EQ.0) GO TO 190 | |
249 | ||
250 | C------ Copy table and bank material | |
251 | ||
252 | IQ(KQSP+LQFI+16) = IQ(KQSP+LQFI+16) + 1 | |
253 | IQ(KQSP+LQFX+16) = IQ(KQSP+LQFX+16) + 1 | |
254 | ||
255 | IQUEST(7) = ISTTAB | |
256 | IDX(2) = 0 | |
257 | #if defined(CERNLIB_FZFFNAT) | |
258 | IF (IFIFOI.EQ.0) THEN | |
259 | CALL FZCFFN | |
260 | GO TO 189 | |
261 | ENDIF | |
262 | #endif | |
263 | CALL FZCFFX | |
264 | 189 IF (JRETCD.NE.0) GO TO 971 | |
265 | GO TO 191 | |
266 | ||
267 | C---- Test for pseudo end-of-tape | |
268 | ||
269 | 190 IQ(KQSP+LQFX+17) = IQ(KQSP+LQFX+17) + 1 | |
270 | LRTYP = 0 | |
271 | 191 NUM1 = IQ(KQSP+LQFX+19) | |
272 | NUM2 = IQ(KQSP+LQFX+20) | |
273 | 192 IF (NUM2.GE.1000000) THEN | |
274 | NUM1 = NUM1 + 1 | |
275 | NUM2 = NUM2 - 1000000 | |
276 | IQ(KQSP+LQFX+19) = NUM1 | |
277 | IQ(KQSP+LQFX+20) = NUM2 | |
278 | GO TO 192 | |
279 | ENDIF | |
280 | ||
281 | LIM1 = IQ(KQSP+LQFX+37) | |
282 | LIM2 = IQ(KQSP+LQFX+38) | |
283 | ||
284 | IF (LIM1+LIM2.EQ.0) GO TO 991 | |
285 | IF (NUM1-LIM1) 991, 196, 197 | |
286 | 196 IF (NUM2.LT.LIM2) GO TO 991 | |
287 | ||
288 | 197 IQUEST(1) = 1 | |
289 | GO TO 992 | |
290 | ||
291 | C------------------------------------------------- | |
292 | C- ERROR HANDLING | |
293 | C------------------------------------------------- | |
294 | ||
295 | 901 IF (IACTVX.EQ.17) CALL ZFATAM ('FZCOPY - Going beyond EoD.') | |
296 | IACTVX = 17 | |
297 | GO TO 929 | |
298 | ||
299 | 903 IQUEST(11) = IOCHX(1) | |
300 | CALL ZFATAM ('FZCOPY - IOCH invalid.') | |
301 | ||
302 | #if defined(CERNLIB_FZCHANNEL)||defined(CERNLIB_FZMEMORY) | |
303 | 907 IQUEST(11) = LUNX | |
304 | CALL ZFATAM ('FZCOPY - User routine / buffer not connected.') | |
305 | ||
306 | #endif | |
307 | #if defined(CERNLIB_FZMEMORY) | |
308 | 909 IQUEST(2) = 14 | |
309 | IQUEST(8) = IQ(KQSP+LQFX+9) | |
310 | IQUEST(9) = NWMEMT | |
311 | IQUEST(11) = LUNX | |
312 | IF (NEWOPT(3).EQ.0) CALL ZTELL (14,1) | |
313 | #endif | |
314 | 929 IQUEST(1) = 2 | |
315 | GO TO 998 | |
316 | ||
317 | C- JERROR = 409 input not positioned | |
318 | 949 JERROR = 4 | |
319 | ||
320 | C- JERROR = 404 Alfa mode not allowed | |
321 | 944 JERROR = JERROR + 1 | |
322 | ||
323 | C- JERROR = 403 input/output both channel mode | |
324 | 943 JERROR = JERROR + 1 | |
325 | ||
326 | C- JERROR = 402 native input record length too long | |
327 | 942 JERROR = JERROR + 1 | |
328 | ||
329 | C- JERROR = 401 input/output different data format | |
330 | 941 JERROR = 401 + JERROR | |
331 | IF (NEWOPT(3).EQ.0) NEWOPT(3)=-1 | |
332 | JRETCD = 4 | |
333 | ||
334 | C------- Input errors | |
335 | ||
336 | C-- write emergency stop signal | |
337 | ||
338 | 971 IF (IFSENT.EQ.0) GO TO 974 | |
339 | IDX(2) = 9 | |
340 | #if defined(CERNLIB_FZFFNAT) | |
341 | IF (IFIFOX.EQ.0) THEN | |
342 | CALL FZON1 (9,1) | |
343 | GO TO 972 | |
344 | ENDIF | |
345 | #endif | |
346 | CALL FZOREC | |
347 | 972 IACTVX = 12 | |
348 | ||
349 | 974 CALL FZIDIA | |
350 | IQ(KQSP+LQFI+26) = IQUEST(1) | |
351 | IF (NEWOPT(3).LT.0) CALL ZFATAL | |
352 | GO TO 997 | |
353 | ||
354 | C------------------------------------------------- | |
355 | C- COMMON EXIT | |
356 | C------------------------------------------------- | |
357 | ||
358 | 991 IQUEST(1) = 0 | |
359 | 992 IQUEST(2) = 0 | |
360 | IQUEST(5) = IQ(KQSP+LQFX+31) | |
361 | IQUEST(6) = IQ(KQSP+LQFX+32) | |
362 | #if defined(CERNLIB_FZMEMORY) | |
363 | IF (IFIFOX.EQ.3) | |
364 | +IQUEST(9) = IQ(KQSP+LQFX+1) - IQ(KQSP+LQFX+8) | |
365 | #endif | |
366 | IQUEST(10) = NWMEMT | |
367 | IQUEST(11) = NWBKX | |
368 | IQUEST(12) = NWTABX | |
369 | IQUEST(13) = IQ(KQSP+LQFX+15) | |
370 | IQUEST(14) = IQ(KQSP+LQFX+19) | |
371 | IQUEST(15) = IQ(KQSP+LQFX+20) | |
372 | IQUEST(16) = IQ(KQSP+LQFX+21) | |
373 | IQUEST(17) = IQ(KQSP+LQFX+22) | |
374 | ||
375 | C-- update the input control bank | |
376 | IQ(KQSP+LQFI+26) = 0 | |
377 | 997 IQ(KQSP+LQFI+2) = IACTVI | |
378 | IQ(KQSP+LQFI+20) = NWRDAI | |
379 | IQ(KQSP+LQFI+21) = NRECAI | |
380 | IQ(KQSP+LQFI+27) = LRTYP | |
381 | 998 IQ(KQSP+LQFX+2) = IACTVX | |
382 | #include "zebra/qtrace99.inc" | |
383 | RETURN | |
384 | END | |
385 | * ================================================== | |
386 | #include "zebra/qcardl.inc" |