5 * Revision 1.2 1996/04/18 16:11:19 mclareni
6 * Incorporate changes from J.Zoll for version 3.77
8 * Revision 1.1.1.1 1996/03/06 10:47:19 mclareni
12 #include "zebra/pilot.h"
13 SUBROUTINE MZCOPY (IXDVFR,LENTP,IXDVTO,LSUPP,JBIASP,CHOPT)
15 C- Copy a data-structure, User called
17 #include "zebra/zbcd.inc"
18 #include "zebra/zstate.inc"
19 #include "zebra/zunit.inc"
20 #include "zebra/zvfaut.inc"
21 #include "zebra/mqsys.inc"
22 #include "zebra/mzct.inc"
23 #include "zebra/mzcn.inc"
24 #include "zebra/fzcx.inc"
25 C-------------- END CDE --------------
26 DIMENSION IXDVFR(9),LENTP(9),IXDVTO(9),LSUPP(9),JBIASP(9)
29 #if defined(CERNLIB_QMVDS)
32 #if (defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M))
34 DATA NAMESR / 4HMZCO, 4HPY /
36 #if (defined(CERNLIB_QTRHOLL))&&(defined(CERNLIB_A6M))
37 DATA NAMESR / 6HMZCOPY /
39 #if !defined(CERNLIB_QTRHOLL)
41 PARAMETER (NAMESR = 'MZCOPY ')
43 DATA LADESV / 6, 5*0 /
45 #include "zebra/q_locf.inc"
47 #include "zebra/qtrace.inc"
48 #if defined(CERNLIB_QDEBUG)
49 IF (IQVSTA.NE.0) CALL ZVAUTX
58 CALL UOPTC (CHOPT,'DISZMLNPFT',IOPTXD)
64 C---- TO option yes / no
67 LOCTO = LOCF(IXDVTO(1)) - 1 - NOFFTO
68 KSQTO = LOCTO - LQASTO
72 CALL MZSDIV (IXDIVI,7)
73 IF (JQDIVI.EQ.0) GO TO 97
77 JDMODE = IQMODE(KQT+JQDIVI)
78 NWBKMX = NQDMAX(KQT+JQDIVI)
79 LOGLEV = MAX (LOGLEV,NQLOGL)
83 C---- FROM option yes / no
86 LOCFR = LOCF(IXDVFR(1)) - 1 - NOFFFR
87 KSQFR = LOCFR - LQASTO
94 CALL MZSDIV (IXDIVX,0)
97 LOGLEV = MAX (LOGLEV,NQLOGL)
98 LQSYSR(KQT+1) = LENTRX
99 IF ((JSTOFR.EQ.JSTOTO).AND.(IOPTXZ.EQ.0)) IHANDL=-1
101 #if defined(CERNLIB_QDEBPRI)
103 + WRITE (IQLOG,9009) JSTOFR,JSTOTO,CHOPT
104 9009 FORMAT (' MZCOPY- Store From/To =',2I3,' Options = ',A)
107 C---------- Table building ----------------------
112 C---- TO option yes / no
115 IF (IOPTXT.NE.0) GO TO 21
119 IF (NWBKU.GE.0) GO TO 21
123 NQDVMV = 1 - 2*JDMODE
126 C---- FROM option yes / no
128 21 IF (IOPTXF.EQ.0) GO TO 24
138 LQ(LQTA) = NOFFFR + 1
139 LQ(LQTA+1) = LQ(LQTA) + NWBKX
144 24 IF (JQSTOR.NE.JSTOFR) CALL MZSDIV (IXDIVX,0)
147 IF (IQUEST(1).EQ.0) GO TO 31
148 IF (IQUEST(1).EQ.1) GO TO 11
149 IF (IQUEST(2).NE.13) GO TO 91
150 IF (JFLGAX.GE.3) GO TO 93
152 C-- Collect garbage in the TO space, if no room
155 IF (JSTOTO.EQ.JQSTOR) GO TO 93
156 IF (JSTOTO.LE.0) GO TO 93
158 IXGARB = MZIXCO (IXDIVI,21,22,23)
159 IXGARB = MZIXCO (IXGARB,24,0,0)
160 CALL MZGARB (IXGARB,0)
163 C---------- Reserve target space --------------------
166 #if defined(CERNLIB_QDEVZE)
167 IF (NQDEVZ.LT.7) GO TO 33
168 WRITE (IQLOG,9831) LQMTA,LQMTE
169 9831 FORMAT (1X/' DEVZE MZCOPY, Memory Occupation Table,'
170 F,' LQMTA,LQMTE= ',2I8/16X,
171 F' DIV ACT NWS LFBK LLBK+1 JFE JLE FREE')
173 WRITE (IQLOG,9832) (LQ(J),J=LQMTA,LQMTE-1)
174 9832 FORMAT (16X,2I4,6I8)
176 33 IF (NWBKX.GT.NWBKMX) GO TO 94
177 IF (NWBKX.EQ.0) GO TO 95
178 IF (IOPTXT.NE.0) GO TO 41
179 IF (JQSTOR.NE.JSTOTO) CALL MZSDIV (IXDIVI,0)
180 IF (NWBKU.GE.0) GO TO 37
184 NQRESV = NQRESV - NWBKX
185 IF (NQRESV.LT.0) THEN
188 IF (JSTOTO.EQ.JSTOFR) LENTRX=LQSYSR(KQT+1)
191 IF (JDMODE.EQ.0) THEN
192 LTO = LQEND(KQT+JDIVTO)
194 LQEND(KQT+JDIVTO) = LTOE
196 LTOE = LQSTA(KQT+JDIVTO)
198 LQSTA(KQT+JDIVTO) = LTO
200 IF (IQPART.EQ.0) GO TO 42
207 LQ(KQS+LTO+5) = IQLETT(1)
210 LQ(KQS+LTO+8) = NWBKX - 10
215 C---- Target space already reserved, get it
217 37 NDIF = NWBKX - NWBKU
218 IF (JDMODE.EQ.0) THEN
219 LTOE = LQEND(KQT+JDIVTO)
221 IF (NDIF.EQ.0) GO TO 42
223 LQEND(KQT+JDIVTO) = LTOE
225 LTO = LQSTA(KQT+JDIVTO)
227 IF (NDIF.EQ.0) GO TO 42
229 LQSTA(KQT+JDIVTO) = LTO
233 C---------- Move material to destination -------------
259 NREL = NREL - (LFR-LFRE)
266 CALL UCOPY (LQ(KSQFR+LFR), LQ(KSQTO+LTO), NW)
269 IF (LTB.LT.LQTE) GO TO 46
271 C---------- Relocation ---------------------------
277 IF (IOPTXN.NE.0) GO TO 61
279 LQ(LQTE) = LQ(LQTE-3)
280 LQ(LQTA-1) = LQ(LQTA)
282 IF (IHANDL.LT.0) THEN
283 C-- retain links pointing outside the d/s
286 C-- zero links pointing outside
289 #if defined(CERNLIB_QDEVZE)
290 IF (NQDEVZ.LT.7) GO TO 56
297 WRITE (IQLOG,9853) LQRTA,LQTA,LQTE,LQ(LQTA-1)
298 9853 FORMAT (1X/' DEVZE MZCOPY, Link Relocation Table,'
299 F,' LQRTA,LQTA,LQTE= ',3I8
300 F/16X,' LOC L LE NREL BG'
303 IF (LQTE.LE.LQTA) GO TO 55
307 WRITE (IQLOG,9854) (J,LQ(I+J),LQ(I+J+1),LQ(I+J+2),LQ(I+J+3),
309 9854 FORMAT (16X,I6,3I8,I4)
311 55 WRITE (IQLOG,9855) LQ(LQTE)
312 9855 FORMAT (20X,I10)
316 IF (IQFLIO.LT.0) GO TO 96
318 C-- Relocate the entry link
320 LADESV(2) = LOCF(LENTRX) - LQSTOR
321 LADESV(3) = LADESV(2) + 1
322 LADESV(5) = IQLETT(9)
323 LADESV(6) = IQLETT(15)
326 IF (IOPTXL.EQ.0) LQ(KQS+LENTRX)=0
334 IF (IQFOUL.NE.0) GO TO 96
339 64 IF (IOPTXT.NE.0) THEN
344 LSUPP(1) = LQSYSR(KQT+2)
345 CALL ZSHUNT (IXDIVI,LENTRX,LSUPP,JB,1)
350 #include "zebra/qtrace99.inc"
353 C---------- Error conditions -----------------------
355 C-- LENTRX invalid / Bank chaning clobbered in FZOTAB
357 91 IQUEST(2) = IQUEST(2) - 10
360 C-- Not enough table space
365 C-- D/s larger than the target space
377 C-- MZRELB or FZILIN find bank chaining clobbered
382 C-- Target division not specified
388 IF (JQSTOR.NE.JSTOTO) CALL MZSDIV (IXDIVI,0)
389 IF (JDMODE.EQ.0) THEN
390 LQEND(KQT+JDIVTO) = LQEND(KQT+JDIVTO) - NWBKU
392 LQSTA(KQT+JDIVTO) = LQSTA(KQT+JDIVTO) + NWBKU
396 IF (IOPTXP.EQ.0) CALL ZTELL (15,1)
397 IQUEST(1) = IQUEST(2)
400 * ==================================================
401 #include "zebra/qcardl.inc"