]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/zebra/mqg/mzgar1.F
Mostly minor style modifications to be ready for cloning with EMCAL
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / mqg / mzgar1.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.2 1996/04/18 16:12:32 mclareni
6* Incorporate changes from J.Zoll for version 3.77
7*
8* Revision 1.1.1.1 1996/03/06 10:47:20 mclareni
9* Zebra
10*
11*
12#include "zebra/pilot.h"
13 SUBROUTINE MZGAR1
14
15C- Garbage collect division JQDIVI for not enough space
16C- System called
17
18#include "zebra/zstate.inc"
19#include "zebra/zunit.inc"
20#include "zebra/zvfaut.inc"
21#include "zebra/mqsys.inc"
22#include "zebra/mzcn.inc"
23#include "zebra/mzct.inc"
24C-------------- End CDE --------------
25#if (defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M))
26 DIMENSION NAMESR(2)
27 DATA NAMESR / 4HMZGA, 4HR1 /
28#endif
29#if (defined(CERNLIB_QTRHOLL))&&(defined(CERNLIB_A6M))
30 DATA NAMESR / 6HMZGAR1 /
31#endif
32#if !defined(CERNLIB_QTRHOLL)
33 CHARACTER NAMESR*8
34 PARAMETER (NAMESR = 'MZGAR1 ')
35#endif
36
37#include "zebra/q_sbit1.inc"
38
39
40#include "zebra/qtrace.inc"
41#if defined(CERNLIB_QDEBUG)
42 IQVREM(1,1) = IQVID(1)
43 IQVREM(2,1) = IQVID(2)
44#endif
45
46C---- Construct Memory Occupation table
47
48 MQDVGA = 0
49 MQDVWI = 0
50
51 IF (JQDIVI.LT.3) GO TO 24
52 MQDVGA = MSBIT1 (0,JQDIVI)
53 JQDVM2 = JQDIVI - JQMODE
54 IF (JQDVM2.EQ.JQDVSY-1) JQDVM2=JQDVLL
55 JQDVM1 = 2
56 JQSTMV = JQSTOR
57 IQTNMV = 0
58 IF (JQSHAR.EQ.0) GO TO 29
59 MQDVGA = MSBIT1 (MQDVGA,JQSHAR)
60 GO TO 29
61
62 24 MQDVGA = 3
63 JQSTMV = -1
64 29 NQDVMV = 0
65 NRESAV = NQRESV
66#if (defined(CERNLIB_QDEBPRI))&&(!defined(CERNLIB_QTRHOLL)||defined(CERNLIB_A6M))
67 IF (NQLOGL.GE.1) WRITE (IQLOG,9028) MQTRAC(NQTRAC-1),
68 + JQSTOR,JQDIVI,NQRESV
69 9028 FORMAT (' MZGAR1- Auto Garbage Collection called from ',A6,
70 F' for Store/Div',2I3,' Free',I7)
71#endif
72#if (defined(CERNLIB_QDEBPRI))&&(defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M))
73 IF (NQLOGL.GE.1) WRITE (IQLOG,9028) MQTRAC(NQTRAC-3),
74 + MQTRAC(NQTRAC-2),JQSTOR,JQDIVI,NQRESV
75 9028 FORMAT (' MZGAR1- Auto Garbage Collection called from ',2A4,
76 F' for Store/Div',2I3,' Free',I7)
77#endif
78#if defined(CERNLIB_QDEVZE)
79 IF (NQDEVZ.GE.7)
80 +WRITE (IQLOG,9829) JQDIVI,JQSHAR,NQRESV
81 9829 FORMAT (1X/' DEVZE MZGAR1 entered, JQDIVI,JQSHAR,NQRESV= ',3I8)
82#endif
83 CALL MZTABM
84
85C-- Construct Link Relocation table
86
87 CALL MZTABR
88 NQRESV = NQRESV + NQFREE
89 IF (NQRESV.GE.0) GO TO 51
90 IF (IQPART.NE.0) GO TO 51
91 IF (JQDIVI.LT.3) GO TO 72
92
93C---- Shift division if not enough space
94
95 NRESV1 = LQSTA(KQT+2) - LQEND(KQT+1) - NQMINR
96 NRESV1 = MIN (NRESV1,LQEND(KQT+2)-LQ2END)
97
98C-- Forward division
99
100 IF (JQMODE.NE.0) GO TO 34
101 IF (JQSHAR.NE.0) THEN
102 NPOSSH = NQDMAX(KQT+JQDIVI) + NQDMAX(KQT+JQDIVN)
103 + -(LQEND(KQT+JQDIVN) - LQSTA(KQT+JQDIVI))
104 GO TO 36
105 ELSE
106 NPOSSH = LQSTA(KQT+JQDIVI) + NQDMAX(KQT+JQDIVI)
107 + - LQSTA(KQT+JQDIVN)
108 GO TO 36
109 ENDIF
110
111C-- Reverse division
112
113 34 IF (JQSHAR.NE.0) THEN
114 NPOSSH = NQDMAX(KQT+JQDIVI) + NQDMAX(KQT+JQDIVN)
115 + -(LQEND(KQT+JQDIVI) - LQSTA(KQT+JQDIVN))
116 ELSE
117 NPOSSH = LQEND(KQT+JQDIVN)
118 + - (LQEND(KQT+JQDIVI) - NQDMAX(KQT+JQDIVI))
119 ENDIF
120
121 36 NSH = (LQEND(KQT+JQDIVI)-LQSTA(KQT+JQDIVI)) / 8
122 NSH = MAX (NSH,24) - NQRESV
123 NSH = MIN (NSH, NPOSSH, NRESV1)
124
125 IF (NSH+NQRESV.LT.0) GO TO 72
126
127#if defined(CERNLIB_QDEVZE)
128 IF (NQDEVZ.GE.7)
129 +WRITE (IQLOG,9836) JQDIVI,JQSHAR,NQRESV
130 +, NRESV1,NPOSSH,NSH
131 +, JQGAPM,JQGAPR
132 9836 FORMAT (' DEVZE MZGAR1, JQDIVI,JQSHAR,NQRESV= ',3I8/
133 F16X,'NRESV1,NPOSSH,NSH=',3I8/
134 F16X,'JQGAPM,JQGAPR= ',2I8)
135#endif
136 NQRESV = NQRESV + NSH
137 NQDVMV = - NSH
138 CALL MZTABS
139
140C---- Relocate + memory move
141
142 51 NWIN = NQRESV - NRESAV
143#if defined(CERNLIB_QDEBPRI)
144 IF (NQLOGL.GE.1) WRITE (IQLOG,9051) NWIN,NQDVMV
145 9051 FORMAT (10X,'Wins',I7,' words, Shift by',I7)
146#endif
147 CALL MZTABX
148 CALL MZTABF
149 IF (NQNOOP) 68, 53, 67
150 53 CALL MZGSTA (NQDGAF(KQT+1))
151 CALL MZRELX
152 67 CALL MZMOVE
153 68 IF (NQRESV.LT.0) GO TO 71
154#include "zebra/qtrace99.inc"
155 RETURN
156
157C-------- Not enough space
158
159 71 IF (IQPART.NE.0) GO TO 29
160 72 IQUEST(11) = NQRESV
161 IQUEST(12) = JQSTOR
162 IQUEST(13) = JQDIVI
163#if defined(CERNLIB_QDEBPRI)
164 IF (NQLOGL.GE.1) WRITE (IQLOG,9072) NQRESV
165 9072 FORMAT (10X,'Not enough space, Free',I7)
166#endif
167 IF (NQPERM.NE.0) GO TO 999
168 IF (JQKIND.NE.1) GO TO 91
169 CALL ZTELL (99,1)
170
171C------ Error conditions
172
173 91 NQCASE = 1
174 NQFATA = 1
175#include "zebra/qtofatal.inc"
176 END
177* ==================================================
178#include "zebra/qcardl.inc"