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    :                  GRM101.h                         |
33 |                                                             |
34 | Author  :                Jacomme Ludovic                    |
35 |                                                             |
36 | Date    :                  28.03.95                         |
37 |                                                             |
38 \------------------------------------------------------------*/
39 
40 /*------------------------------------------------------------\
41 |                                                             |
42 |                           Constants                         |
43 |                                                             |
44 \------------------------------------------------------------*/
45 
46 # ifndef GRAAL_GRM
47 # define GRAAL_GRM
48 
49 # define GRAAL_SIZE (sizeof( graalrec ))
50 
51 # define GRAAL_MAX_REC       8
52 # define GRAAL_ONE_WINDOW    (long)0x00010000
53 # define GRAAL_DELETED       (long)0x00020000
54 # define GRAAL_ACCEPTED      (long)0x00040000
55 # define GRAAL_TREATED       (long)0x00080000
56 # define GRAAL_FLATTEN       (long)0x00100000
57 # define GRAAL_PEEK          (long)0x00200000
58 # define GRAAL_DRUC          (long)0x00400000
59 # define GRAAL_INVISIBLE     (long)0x00800000
60 # define GRAAL_CUT           (long)0x01000000
61 # define GRAAL_SELECTED      (long)0x02000000
62 # define GRAAL_DRAW_TEXT     (long)0x04000000
63 # define GRAAL_SEARCH        (long)0x08000000
64 
65 /*------------------------------------------------------------\
66 |                                                             |
67 |                            Macros                           |
68 |                                                             |
69 \------------------------------------------------------------*/
70 
71 # define GRAAL_PREVIOUS( R )                                  \
72                                                               \
73     (((graalrec *)((char *)(R)+sizeof(rdsrec_list)))->PREVIOUS)
74 
75 # define GRAAL_MBK( R )                                       \
76                                                               \
77     (((graalrec *)((char *)(R)+sizeof(rdsrec_list)))->MBK     )
78 
79 # define GRAAL_WINDOW( R )                                    \
80                                                               \
81     (((graalrec *)((char *)(R)+sizeof(rdsrec_list)))->WINDOW  )
82 
83 # define GRAAL_EQUI( R )                                      \
84                                                               \
85     (((graalrec *)((char *)(R)+sizeof(rdsrec_list)))->EQUI    )
86 
87 /*------------------------------------------------------------\
88 |                                                             |
89 |                            Macros                           |
90 |                                                             |
91 \------------------------------------------------------------*/
92 /*------------------------------------------------------------\
93 |                                                             |
94 |                            Windows                          |
95 |                                                             |
96 \------------------------------------------------------------*/
97 
98 # define IsGraalOneWindow( Rectangle )         \
99                                                \
100    ( ( Rectangle )->FLAGS & GRAAL_ONE_WINDOW   )
101 
102 # define SetGraalOneWindow( Rectangle )        \
103                                                \
104    ( ( Rectangle )->FLAGS |= GRAAL_ONE_WINDOW  )
105 
106 # define ClearGraalOneWindow( Rectangle )      \
107                                                \
108    ( ( Rectangle )->FLAGS &= ~GRAAL_ONE_WINDOW )
109 
110 /*------------------------------------------------------------\
111 |                                                             |
112 |                             Search                          |
113 |                                                             |
114 \------------------------------------------------------------*/
115 
116 # define IsGraalSearch( Rectangle )        \
117                                             \
118    ( ( Rectangle )->FLAGS & GRAAL_SEARCH   )
119 
120 # define SetGraalSearch( Rectangle )       \
121                                             \
122    ( ( Rectangle )->FLAGS |= GRAAL_SEARCH  )
123 
124 # define ClearGraalSearch( Rectangle )     \
125                                             \
126    ( ( Rectangle )->FLAGS &= ~GRAAL_SEARCH )
127 
128 /*------------------------------------------------------------\
129 |                                                             |
130 |                            Deleted                          |
131 |                                                             |
132 \------------------------------------------------------------*/
133 
134 # define IsGraalDeleted( Rectangle )        \
135                                             \
136    ( ( Rectangle )->FLAGS & GRAAL_DELETED   )
137 
138 # define SetGraalDeleted( Rectangle )       \
139                                             \
140    ( ( Rectangle )->FLAGS |= GRAAL_DELETED  )
141 
142 # define ClearGraalDeleted( Rectangle )     \
143                                             \
144    ( ( Rectangle )->FLAGS &= ~GRAAL_DELETED )
145 
146 /*------------------------------------------------------------\
147 |                                                             |
148 |                            Accepted                         |
149 |                                                             |
150 \------------------------------------------------------------*/
151 
152 # define IsGraalAccepted( Rectangle )        \
153                                              \
154    ( ( Rectangle )->FLAGS & GRAAL_ACCEPTED  )
155 
156 # define SetGraalAccepted( Rectangle )       \
157                                              \
158    ( ( Rectangle )->FLAGS |= GRAAL_ACCEPTED )
159 
160 # define ClearGraalAccepted( Rectangle )     \
161                                              \
162    ( ( Rectangle )->FLAGS &= ~GRAAL_ACCEPTED)
163 
164 /*------------------------------------------------------------\
165 |                                                             |
166 |                            Selected                         |
167 |                                                             |
168 \------------------------------------------------------------*/
169 
170 # define IsGraalSelected( Rectangle )        \
171                                              \
172    ( ( Rectangle )->FLAGS & GRAAL_SELECTED  )
173 
174 # define SetGraalSelected( Rectangle )       \
175                                              \
176    ( ( Rectangle )->FLAGS |= GRAAL_SELECTED )
177 
178 # define ClearGraalSelected( Rectangle )     \
179                                              \
180    ( ( Rectangle )->FLAGS &= ~GRAAL_SELECTED)
181 
182 /*------------------------------------------------------------\
183 |                                                             |
184 |                            Treated                          |
185 |                                                             |
186 \------------------------------------------------------------*/
187 
188 # define IsGraalTreated( Rectangle )       \
189                                            \
190    ( ( Rectangle )->FLAGS & GRAAL_TREATED  )
191 
192 # define SetGraalTreated( Rectangle )      \
193                                            \
194    ( ( Rectangle )->FLAGS |= GRAAL_TREATED )
195 
196 # define ClearGraalTreated( Rectangle )     \
197                                             \
198    ( ( Rectangle )->FLAGS &= ~GRAAL_TREATED )
199 
200 /*------------------------------------------------------------\
201 |                                                             |
202 |                           DrawText                          |
203 |                                                             |
204 \------------------------------------------------------------*/
205 
206 # define IsGraalDrawText( Rectangle )         \
207                                               \
208    ( ( Rectangle )->FLAGS & GRAAL_DRAW_TEXT   )
209 
210 # define SetGraalDrawText( Rectangle )        \
211                                               \
212    ( ( Rectangle )->FLAGS |= GRAAL_DRAW_TEXT  )
213 
214 # define ClearGraalDrawText( Rectangle )      \
215                                               \
216    ( ( Rectangle )->FLAGS &= ~GRAAL_DRAW_TEXT )
217 
218 /*------------------------------------------------------------\
219 |                                                             |
220 |                            Flatten                          |
221 |                                                             |
222 \------------------------------------------------------------*/
223 
224 # define IsGraalFlatten( Rectangle )       \
225                                            \
226    ( ( Rectangle )->FLAGS & GRAAL_FLATTEN  )
227 
228 # define SetGraalFlatten( Rectangle )      \
229                                            \
230    ( ( Rectangle )->FLAGS |= GRAAL_FLATTEN )
231 
232 # define ClearGraalFlatten( Rectangle )     \
233                                             \
234    ( ( Rectangle )->FLAGS &= ~GRAAL_FLATTEN )
235 
236 /*------------------------------------------------------------\
237 |                                                             |
238 |                              Peek                           |
239 |                                                             |
240 \------------------------------------------------------------*/
241 
242 # define IsGraalPeek( Rectangle )        \
243                                          \
244    ( ( Rectangle )->FLAGS & GRAAL_PEEK   )
245 
246 # define SetGraalPeek( Rectangle )       \
247                                          \
248    ( ( Rectangle )->FLAGS |= GRAAL_PEEK  )
249 
250 # define ClearGraalPeek( Rectangle )     \
251                                          \
252    ( ( Rectangle )->FLAGS &= ~GRAAL_PEEK )
253 
254 /*------------------------------------------------------------\
255 |                                                             |
256 |                              Druc                           |
257 |                                                             |
258 \------------------------------------------------------------*/
259 
260 # define IsGraalDruc( Rectangle )        \
261                                          \
262    ( ( Rectangle )->FLAGS & GRAAL_DRUC   )
263 
264 # define SetGraalDruc( Rectangle )       \
265                                          \
266    ( ( Rectangle )->FLAGS |= GRAAL_DRUC  )
267 
268 # define ClearGraalDruc( Rectangle )     \
269                                          \
270    ( ( Rectangle )->FLAGS &= ~GRAAL_DRUC )
271 
272 /*------------------------------------------------------------\
273 |                                                             |
274 |                           Invisible                         |
275 |                                                             |
276 \------------------------------------------------------------*/
277 
278 # define IsGraalInvisible( Rectangle )        \
279                                               \
280    ( ( Rectangle )->FLAGS & GRAAL_INVISIBLE   )
281 
282 # define SetGraalInvisible( Rectangle )       \
283                                               \
284    ( ( Rectangle )->FLAGS |= GRAAL_INVISIBLE  )
285 
286 # define ClearGraalInvisible( Rectangle )     \
287                                               \
288    ( ( Rectangle )->FLAGS &= ~GRAAL_INVISIBLE )
289 
290 /*------------------------------------------------------------\
291 |                                                             |
292 |                               Cut                           |
293 |                                                             |
294 \------------------------------------------------------------*/
295 
296 # define IsGraalCut( Rectangle )              \
297                                               \
298    ( ( Rectangle )->FLAGS & GRAAL_CUT         )
299 
300 # define SetGraalCut( Rectangle )             \
301                                               \
302    ( ( Rectangle )->FLAGS |= GRAAL_CUT        )
303 
304 # define ClearGraalCut( Rectangle )           \
305                                               \
306    ( ( Rectangle )->FLAGS &= ~GRAAL_CUT       )
307 
308 /*------------------------------------------------------------\
309 |                                                             |
310 |                            Types                            |
311 |                                                             |
312 \------------------------------------------------------------*/
313 /*------------------------------------------------------------\
314 |                                                             |
315 |                       Graal Windows                         |
316 |                                                             |
317 \------------------------------------------------------------*/
318 
319   typedef struct graalwinrec
320 
321   {
322     struct graalwinrec *NEXT;
323     rdsrec_list        *RECTAB[ GRAAL_MAX_REC ];
324 
325   } graalwinrec;
326 
327   typedef struct graalwin
328 
329   {
330     struct graalwinrec **LAYERTAB;
331 
332   } graalwin;
333 
334   typedef struct graalrecwin
335 
336   {
337     struct graalrecwin *NEXT;
338     graalwin           *WINDOW;
339 
340   } graalrecwin;
341 
342 /*------------------------------------------------------------\
343 |                                                             |
344 |                         Graal Undo                          |
345 |                                                             |
346 \------------------------------------------------------------*/
347 
348   typedef struct graalundorec
349 
350   {
351     struct graalundorec *NEXT;
352     rdsrec_list         *RECTANGLE;
353 
354   } graalundorec;
355 
356   typedef struct graalundo
357 
358   {
359     struct graalundo *NEXT;
360     graalundorec     *UNDO;
361 
362   } graalundo;
363 
364 /*------------------------------------------------------------\
365 |                                                             |
366 |                         Graal Connector                     |
367 |                                                             |
368 \------------------------------------------------------------*/
369 
370   typedef struct graalconrec
371 
372   {
373     struct graalconrec *NEXT;
374     rdsrec_list        *RECTANGLE;
375 
376   } graalconrec;
377 
378 /*------------------------------------------------------------\
379 |                                                             |
380 |                         Graal Select                        |
381 |                                                             |
382 \------------------------------------------------------------*/
383 
384   typedef struct graalselect
385 
386   {
387     struct graalselect  *NEXT;
388     rdsrec_list         *RECTANGLE;
389 
390   } graalselect ;
391 
392 /*------------------------------------------------------------\
393 |                                                             |
394 |                         Graal Search                        |
395 |                                                             |
396 \------------------------------------------------------------*/
397 
398   typedef struct graalsearch
399 
400   {
401     struct graalsearch *NEXT;
402     rdsrec_list        *RECTANGLE;
403 
404   } graalsearch;
405 
406 /*------------------------------------------------------------\
407 |                                                             |
408 |                         Graal Peek                          |
409 |                                                             |
410 \------------------------------------------------------------*/
411 
412   typedef struct graalpeek
413 
414   {
415     struct graalpeek *NEXT;
416     rdsrec_list      *RECTANGLE;
417 
418   } graalpeek;
419 
420 /*------------------------------------------------------------\
421 |                                                             |
422 |                         X Rectangle                         |
423 |                                                             |
424 \------------------------------------------------------------*/
425 
426   typedef struct graalrec
427 
428   {
429     rdsrec_list **PREVIOUS;
430     void         *MBK;
431     graalrecwin  *WINDOW;
432     rdsrec_list  *EQUI;
433 
434   } graalrec;
435 
436 /*------------------------------------------------------------\
437 |                                                             |
438 |                          Variables                          |
439 |                                                             |
440 \------------------------------------------------------------*/
441 
442   extern long          GraalBoundXmin;
443   extern long          GraalBoundYmin;
444   extern long          GraalBoundXmax;
445   extern long          GraalBoundYmax;
446   extern char          GraalRecomputeBound;
447 
448   extern long          GraalWindowXmin;
449   extern long          GraalWindowYmin;
450   extern long          GraalWindowXmax;
451   extern long          GraalWindowYmax;
452   extern long          GraalWindowDx;
453   extern long          GraalWindowDy;
454   extern long          GraalWindowSide;
455   extern long          GraalWindowSize;
456   extern graalwin     *GraalWindowTable;
457 
458   extern rdsfig_list  *GraalFigureRds;
459   extern rdsfig_list  *GraalFigureDruc;
460   extern rdsrec_list  *GraalRectangleDruc;
461   extern rdsrec_list  *GraalCurrentDruc;
462   extern phfig_list   *GraalFigureMbk;
463 
464   extern graalundo    *GraalHeadRedo;
465   extern graalundo    *GraalHeadUndo;
466   extern rdsrec_list  *GraalHeadEqui;
467   extern graalselect  *GraalHeadSelect;
468   extern graalsearch  *GraalHeadSearch;
469   extern graalpeek    *GraalHeadPeek;
470   extern graalconrec  *GraalHeadConRec;
471 
472 /*------------------------------------------------------------\
473 |                                                             |
474 |                          Functions                          |
475 |                                                             |
476 \------------------------------------------------------------*/
477 /*------------------------------------------------------------\
478 |                                                             |
479 |                     Translator MBK => RDS                   |
480 |                                                             |
481 \------------------------------------------------------------*/
482 
483   extern rdsfig_list *Graaldrucrdsfig();
484   extern char         Graalsavephfig();
485   extern phfig_list  *Graalgetphfig();
486   extern phfig_list  *Graalrflattenphfig();
487   extern phfig_list  *Graalflattenphfig();
488   extern rdsfig_list *Graalgetrdsfig();
489   extern rdsfig_list *Graalrflattenrdsfig();
490   extern rdsfig_list *GraalAddFigure();
491   extern rdsins_list *GraalAddInstance();
492   extern rdsins_list *GraalFlatInstance();
493   extern rdsins_list *GraalUnflatInstance();
494   extern char         GraalRealFlatInstance();
495   extern rdsrec_list *GraalAddSegment();
496   extern rdsrec_list *GraalAddConnector();
497   extern rdsrec_list *GraalAddReference();
498   extern rdsrec_list *GraalAddVia();
499   extern rdsrec_list *GraalAddAbox();
500   extern void         GraalDelFigure();
501   extern void         GraalDelInstance();
502   extern void         GraalDelRectangle();
503   extern char         GraalSaveFigure();
504 
505 /*------------------------------------------------------------\
506 |                                                             |
507 |                      Undo Acces Functions                   |
508 |                                                             |
509 \------------------------------------------------------------*/
510 
511   extern void GraalAddUndo();
512   extern void GraalDelUndo();
513   extern void GraalAddUndoRec();
514   extern void GraalInitializeUndo();
515 
516 /*------------------------------------------------------------\
517 |                                                             |
518 |                   Flag Set & Clear Functions                |
519 |                                                             |
520 \------------------------------------------------------------*/
521 
522   extern void GraalDeleteRectangle();
523   extern void GraalUndeleteRectangle();
524   extern void GraalSelectRectangle();
525   extern void GraalUnselectRectangle();
526   extern void GraalAcceptRectangle();
527   extern void GraalRejectRectangle();
528 
529 /*------------------------------------------------------------\
530 |                                                             |
531 |                      Select Acces Functions                 |
532 |                                                             |
533 \------------------------------------------------------------*/
534 
535   extern void GraalAddSelect();
536   extern void GraalDelSelect();
537   extern void GraalPurgeSelect();
538 
539 /*------------------------------------------------------------\
540 |                                                             |
541 |                      Search Acces Functions                 |
542 |                                                             |
543 \------------------------------------------------------------*/
544 
545   extern void GraalAddSearch();
546   extern void GraalDelSearch();
547 
548 /*------------------------------------------------------------\
549 |                                                             |
550 |                      Peek Acces Functions                   |
551 |                                                             |
552 \------------------------------------------------------------*/
553 
554   extern void GraalPeekInstance();
555   extern void GraalAddPeek();
556   extern void GraalDelPeek();
557 
558 /*------------------------------------------------------------\
559 |                                                             |
560 |                      Equi Extract Functions                 |
561 |                                                             |
562 \------------------------------------------------------------*/
563 
564   extern void GraalExtractEqui();
565   extern void GraalDelEqui();
566 
567 /*------------------------------------------------------------\
568 |                                                             |
569 |                      Druc Acces Functions                   |
570 |                                                             |
571 \------------------------------------------------------------*/
572 
573   extern rdsrec_list *GraalAddDruc();
574   extern void         GraalDelDruc();
575   extern void         GraalDelDrucFigure();
576 
577 /*------------------------------------------------------------\
578 |                                                             |
579 |                          Bound Compute                      |
580 |                                                             |
581 \------------------------------------------------------------*/
582 
583   extern char GraalComputeBound();
584 
585 /*------------------------------------------------------------\
586 |                                                             |
587 |                    Window Acces Functions                   |
588 |                                                             |
589 \------------------------------------------------------------*/
590 
591   extern void GraalInitializeWindowTable();
592 
593 /*------------------------------------------------------------\
594 |                                                             |
595 |                    Error Message Functions                  |
596 |                                                             |
597 \------------------------------------------------------------*/
598 
599   extern char *GraalGetErrorMessage();
600   extern void  GraalExitErrorMessage();
601 
602 /*------------------------------------------------------------\
603 |                                                             |
604 |                    Informations Functions                   |
605 |                                                             |
606 \------------------------------------------------------------*/
607 
608   extern char *GraalGetInformations();
609 
610 # endif
611