1 /*------------------------------------------------------------\
2 | |
3 | This file is part of the Alliance CAD System Copyright |
4 | (C) Laboratoire LIP6 - D�partement ASIM Universite P&M Curie|
5 | |
6 | Home page : http://www-asim.lip6.fr/alliance/ |
7 | E-mail : mailto:alliance-users@asim.lip6.fr |
8 | |
9 | This progam is free software; you can redistribute it |
10 | and/or modify it under the terms of the GNU General Public |
11 | License as published by the Free Software Foundation; |
12 | either version 2 of the License, or (at your option) any |
13 | later version. |
14 | |
15 | Alliance VLSI CAD System is distributed in the hope that |
16 | it will be useful, but WITHOUT ANY WARRANTY; |
17 | without even the implied warranty of MERCHANTABILITY or |
18 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General |
19 | Public License for more details. |
20 | |
21 | You should have received a copy of the GNU General Public |
22 | License along with the GNU C Library; see the file COPYING. |
23 | If not, write to the Free Software Foundation, Inc., |
24 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
25 | |
26 \------------------------------------------------------------*/
27
28 /*------------------------------------------------------------\
29 | |
30 | Tool : GRAAL |
31 | |
32 | File : Select.c |
33 | |
34 | Author : Jacomme Ludovic |
35 | |
36 | Date : 28.03.95 |
37 | |
38 \------------------------------------------------------------*/
39 /*------------------------------------------------------------\
40 | |
41 | Include Files |
42 | |
43 \------------------------------------------------------------*/
44
45 # include <stdio.h>
46 # include "mut.h"
47 # include "mph.h"
48 # include "rds.h"
49 # include "rpr.h"
50 # include "rfm.h"
51 # include "GRM.h"
52 # include "GSB.h"
53 # include "GRM_window.h"
54 # include "GRM_select.h"
55
56 /*------------------------------------------------------------\
57 | |
58 | Variables |
59 | |
60 \------------------------------------------------------------*/
61
62 graalselect *GraalHeadSelect = (graalselect *)NULL;
63
64 /*------------------------------------------------------------\
65 | |
66 | Functions |
67 | |
68 \------------------------------------------------------------*/
69 /*------------------------------------------------------------\
70 | |
71 | Alloc Functions |
72 | |
73 \------------------------------------------------------------*/
74 /*------------------------------------------------------------\
75 | |
76 | GraalAllocSelect |
77 | |
78 \------------------------------------------------------------*/
79
GraalAllocSelect()80 graalselect *GraalAllocSelect()
81 {
82 return((graalselect *)rdsalloc(sizeof(graalselect), 1));
83 }
84
85 /*------------------------------------------------------------\
86 | |
87 | Free Functions |
88 | |
89 \------------------------------------------------------------*/
90 /*------------------------------------------------------------\
91 | |
92 | GraalFreeSelect |
93 | |
94 \------------------------------------------------------------*/
95
GraalFreeSelect(FreeSelect)96 void GraalFreeSelect( FreeSelect )
97
98 graalselect *FreeSelect;
99 {
100 rdsfree((char *)FreeSelect, sizeof(graalselect));
101 }
102
103 /*------------------------------------------------------------\
104 | |
105 | GraalAcceptRectangle |
106 | |
107 \------------------------------------------------------------*/
108
GraalAcceptRectangle(Rectangle)109 void GraalAcceptRectangle( Rectangle )
110
111 rdsrec_list *Rectangle;
112 {
113 rdsrec_list *ScanRec;
114
115 rdsbegin();
116
117 ScanRec = Rectangle;
118
119 do
120 {
121 SetGraalAccepted( ScanRec );
122
123 ScanRec = (rdsrec_list *)ScanRec->USER;
124 }
125 while( Rectangle != ScanRec );
126
127 rdsend();
128 }
129
130 /*------------------------------------------------------------\
131 | |
132 | GraalRejectRectangle |
133 | |
134 \------------------------------------------------------------*/
135
GraalRejectRectangle(Rectangle)136 void GraalRejectRectangle( Rectangle )
137
138 rdsrec_list *Rectangle;
139 {
140 rdsrec_list *ScanRec;
141
142 rdsbegin();
143
144 ScanRec = Rectangle;
145
146 do
147 {
148 ClearGraalAccepted( ScanRec );
149
150 ScanRec = (rdsrec_list *)ScanRec->USER;
151 }
152 while( Rectangle != ScanRec );
153
154 rdsend();
155 }
156
157 /*------------------------------------------------------------\
158 | |
159 | GraalSelectRectangle |
160 | |
161 \------------------------------------------------------------*/
162
GraalSelectRectangle(Rectangle)163 void GraalSelectRectangle( Rectangle )
164
165 rdsrec_list *Rectangle;
166 {
167 rdsrec_list *ScanRec;
168
169 rdsbegin();
170
171 ScanRec = Rectangle;
172
173 do
174 {
175 SetGraalSelected( ScanRec );
176
177 ScanRec = (rdsrec_list *)ScanRec->USER;
178 }
179 while( Rectangle != ScanRec );
180
181 rdsend();
182 }
183
184 /*------------------------------------------------------------\
185 | |
186 | GraalUnselectRectangle |
187 | |
188 \------------------------------------------------------------*/
189
GraalUnselectRectangle(Rectangle)190 void GraalUnselectRectangle( Rectangle )
191
192 rdsrec_list *Rectangle;
193 {
194 rdsrec_list *ScanRec;
195
196 rdsbegin();
197
198 ScanRec = Rectangle;
199
200 do
201 {
202 ClearGraalSelected( ScanRec );
203
204 ScanRec = (rdsrec_list *)ScanRec->USER;
205 }
206 while( Rectangle != ScanRec );
207
208 rdsend();
209 }
210
211 /*------------------------------------------------------------\
212 | |
213 | GraalDeleteRectangle |
214 | |
215 \------------------------------------------------------------*/
216
GraalDeleteRectangle(Rectangle)217 void GraalDeleteRectangle( Rectangle )
218
219 rdsrec_list *Rectangle;
220 {
221 rdsrec_list *ScanRec;
222
223 rdsbegin();
224
225 ScanRec = Rectangle;
226
227 do
228 {
229 SetGraalDeleted( ScanRec );
230
231 ScanRec = (rdsrec_list *)ScanRec->USER;
232 }
233 while( Rectangle != ScanRec );
234
235 rdsend();
236 }
237
238 /*------------------------------------------------------------\
239 | |
240 | GraalUndeleteRectangle |
241 | |
242 \------------------------------------------------------------*/
243
GraalUndeleteRectangle(Rectangle)244 void GraalUndeleteRectangle( Rectangle )
245
246 rdsrec_list *Rectangle;
247 {
248 rdsrec_list *ScanRec;
249
250 rdsbegin();
251
252 ScanRec = Rectangle;
253
254 do
255 {
256 ClearGraalDeleted( ScanRec );
257
258 ScanRec = (rdsrec_list *)ScanRec->USER;
259 }
260 while( Rectangle != ScanRec );
261
262 rdsend();
263 }
264
265 /*------------------------------------------------------------\
266 | |
267 | GraalAddSelect |
268 | |
269 \------------------------------------------------------------*/
270
GraalAddSelect(Rectangle)271 void GraalAddSelect( Rectangle )
272
273 rdsrec_list *Rectangle;
274 {
275 graalselect *Select;
276
277 rdsbegin();
278
279 Select = GraalAllocSelect();
280
281 Select->RECTANGLE = Rectangle;
282 Select->NEXT = GraalHeadSelect;
283 GraalHeadSelect = Select;
284
285 GraalSelectRectangle( Rectangle );
286
287 rdsend();
288 }
289
290 /*------------------------------------------------------------\
291 | |
292 | GraalDelSelect |
293 | |
294 \------------------------------------------------------------*/
295
GraalDelSelect()296 void GraalDelSelect()
297 {
298 graalselect *DelSelect;
299 graalselect *Select;
300
301 rdsbegin();
302
303 Select = GraalHeadSelect;
304 GraalHeadSelect = (graalselect *)NULL;
305
306 while( Select != (graalselect *)NULL )
307 {
308 GraalRejectRectangle( Select->RECTANGLE );
309
310 DelSelect = Select;
311 Select = Select->NEXT;
312
313 GraalFreeSelect( DelSelect );
314 }
315
316 rdsend();
317 }
318
319 /*------------------------------------------------------------\
320 | |
321 | GraalPurgeSelect |
322 | |
323 \------------------------------------------------------------*/
324
GraalPurgeSelect()325 void GraalPurgeSelect()
326 {
327 graalselect *DelSelect;
328 graalselect *Select;
329 graalselect **Previous;
330
331 rdsbegin();
332
333 Previous = &GraalHeadSelect;
334 Select = GraalHeadSelect;
335
336 while( Select != (graalselect *)NULL )
337 {
338 if ( ! IsGraalAccepted( Select->RECTANGLE ) )
339 {
340 DelSelect = Select;
341 Select = Select->NEXT;
342 *Previous = Select;
343
344 GraalFreeSelect( DelSelect );
345 }
346 else
347 {
348 Previous = &Select->NEXT;
349 Select = Select->NEXT;
350 }
351 }
352
353 rdsend();
354 }
355