]>
Commit | Line | Data |
---|---|---|
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 | ||
15 | C- Garbage collect division JQDIVI for not enough space | |
16 | C- 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" | |
24 | C-------------- 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 | ||
46 | C---- 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 | ||
85 | C-- 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 | ||
93 | C---- 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 | ||
98 | C-- 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 | ||
111 | C-- 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 | ||
140 | C---- 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 | ||
157 | C-------- 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 | ||
171 | C------ Error conditions | |
172 | ||
173 | 91 NQCASE = 1 | |
174 | NQFATA = 1 | |
175 | #include "zebra/qtofatal.inc" | |
176 | END | |
177 | * ================================================== | |
178 | #include "zebra/qcardl.inc" |