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