Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / yagle / cgv / cgv_lib.h
1 /*------------------------------------------------------\
2 | |
3 | Title : Structures and fonctions for CGV |
4 | |
5 | File : cgv100.h |
6 | |
7 | |
8 | Authors : Picault Stephane |
9 | Miramond Benoit |
10 | Lester Anthony |
11 | |
12 \------------------------------------------------------*/
13
14 #ifndef CGV
15 #define CGV
16
17 #include SLB_H
18 #include CNS_H
19
20 #define CGV_FROM_CNS 0x0001
21 #define CGV_FROM_LOFIG 0x0010
22 #define CGV_FROM_CONE 0x0020
23 #define CGV_SEL_PREC_LOGIC 0x0002
24 #define CGV_SEL_SUCC_LOGIC 0x0004
25 #define CGV_SEL_REC_LOGIC 0x0008
26 #define CGV_FROM_CHAIN_CONE 0x1000
27 #define CGV_FROM_CHAIN_NAME 0x2000
28
29 #define CGV_NET_TYPE 0x90000020
30 #define CGV_BOX_TYPE 0x90000200
31 #define CGV_CON_TYPE 0x90002000
32 #define CGV_MARK_TYPE 0x90020000
33
34 #define CGV_BOX_TAGED 0x0001
35 #define CGV_BOX_RETAGED 0x0100
36 #define CGV_BOX_CLUSTERISED 0x0002
37 #define CGV_BOX_CLUSTER 0x0004
38 #define CGV_BOX_TRANSPARENCE 0x0008
39 #define CGV_BOX_PLACED 0x1000
40 #define CGV_BOX_HIT_FON_OUT_CON 0x2000
41
42 #define CGV_CON_IN 0x01
43 #define CGV_CON_OUT 0x02
44 #define CGV_CON_EXTERNAL 0x10
45 #define CGV_CON_INTERNAL 0x20
46
47 #define CGV_CON_TAGED 0x0100
48 #define CGV_CON_PLACED 0x0200
49 #define CGV_CON_FAKE 0x0400
50
51 #define CGV_NET_CANAL 0x0F
52
53 #define CGV_NET_MAXDIR 0x20
54 #define CGV_NET_MINDIR 0x10
55
56 #define CGV_ROOT_CON_BOX 0x0001
57 #define CGV_ROOT_CON_FIG 0x0002
58
59 #define CGV_SOURCE_LOSIG 0x01
60 #define CGV_SOURCE_LOINS 0x02
61 #define CGV_SOURCE_LOCON 0x03
62 #define CGV_SOURCE_LOFIG 0x04
63 #define CGV_SOURCE_CNSFIG 0x05
64 #define CGV_SOURCE_CNSCONE 0x06
65 #define CGV_SOURCE_CNSEDGE 0x07
66 #define CGV_SOURCE_CNSCELL 0x08
67 #define CGV_SOURCE_LOTRS 0x09
68 #define XYAG_DEFAULT_HEIGHT 0x0004
69 #define XYAG_DEFAULT_FACTOR 0x0003
70
71 #define CGV_CEL_BOX 0x0001
72 #define CGV_CEL_CON 0x0002
73
74 #define CGV_FILE_TYPE 0x22334455
75
76 /*------------------------------------------------------\
77 | Macros |
78 \------------------------------------------------------*/
79
80 #define IsCgvBoxClusterised(X) ((X)->FLAGS & CGV_BOX_CLUSTERISED)
81 #define IsCgvBoxTaged(X) ((X)->FLAGS & CGV_BOX_TAGED)
82 #define IsCgvBoxReTaged(X) ((X)->FLAGS & CGV_BOX_RETAGED)
83 #define IsCgvBoxCluster(X) ((X)->FLAGS & CGV_BOX_CLUSTER)
84 #define IsCgvBoxTransparence(X) ((X)->FLAGS & CGV_BOX_TRANSPARENCE)
85 #define IsCgvBoxPlaced(X) ((X)->FLAGS & CGV_BOX_PLACED)
86
87 #define IsCgvConIn(X) ((X)->TYPE & CGV_CON_IN)
88 #define IsCgvConOut(X) ((X)->TYPE & CGV_CON_OUT)
89 #define IsCgvConExternal(X) ((X)->TYPE & CGV_CON_EXTERNAL)
90 #define IsCgvConInternal(X) ((X)->TYPE & CGV_CON_INTERNAL)
91 #define IsCgvConTaged(X) ((X)->FLAGS & CGV_CON_TAGED)
92 #define IsCgvConPlaced(X) ((X)->FLAGS & CGV_CON_PLACED)
93 #define IsCgvConFake(X) ((X)->FLAGS & CGV_CON_FAKE)
94
95 #define IsCgvNetCanal(X) ((X)->FLAGS & CGV_NET_CANAL)
96
97 #define GetCgvNetDirType(X) ((X)->FLAGS & (CGV_NET_MAXDIR|CGV_NET_MINDIR))
98
99 #define SetCgvNetMaxOutput(X) ((X)->FLAGS |= CGV_NET_MAXDIR)
100 #define SetCgvNetMinOutput(X) ((X)->FLAGS |= CGV_NET_MINDIR)
101
102 #define SetCgvBoxClusterised(X) ((X)->FLAGS |= CGV_BOX_CLUSTERISED)
103 #define SetCgvBoxTaged(X) ((X)->FLAGS |= CGV_BOX_TAGED)
104 #define SetCgvBoxUnTaged(X) ((X)->FLAGS &= ~CGV_BOX_TAGED)
105 #define SetCgvBoxReTaged(X) ((X)->FLAGS |= CGV_BOX_RETAGED)
106 #define SetCgvBoxCluster(X) ((X)->FLAGS |= CGV_BOX_CLUSTER)
107 #define SetCgvBoxTransparence(X) ((X)->FLAGS |= CGV_BOX_TRANSPARENCE)
108 #define SetCgvBoxPlaced(X) ((X)->FLAGS |= CGV_BOX_PLACED)
109 #define SetCgvBoxHit(X) ((X)->FLAGS |= CGV_BOX_HIT_FON_OUT_CON)
110 #define IsCgvBoxHit(X) ((X)->FLAGS & CGV_BOX_HIT_FON_OUT_CON)
111
112 #define SetCgvConExternal(X) ((X)->TYPE |= CGV_CON_EXTERNAL)
113 #define SetCgvConInternal(X) ((X)->TYPE |= CGV_CON_INTERNAL)
114 #define SetCgvConTaged(X) ((X)->FLAGS |= CGV_CON_TAGED)
115 #define SetCgvConUnTaged(X) ((X)->FLAGS &= ~CGV_CON_TAGED)
116 #define SetCgvConPlaced(X) ((X)->FLAGS |= CGV_CON_PLACED)
117 #define SetCgvConFake(X) ((X)->FLAGS |= CGV_CON_FAKE)
118
119 #define SetCgvNetCanal(X) ((X)->FLAGS |= CGV_NET_CANAL)
120
121 #define ClearCgvNetCanal(X) ((X)->FLAGS &= ~CGV_NET_CANAL)
122 #define ClearCgvNetDir(X) ((X)->FLAGS &= ~(CGV_NET_MINDIR|CGV_NET_MAXDIR))
123
124 #define addcgvfigconin(F, N) (addcgvfigcon((F), (N), CGV_CON_IN))
125 #define addcgvfigconout(F, N) (addcgvfigcon((F), (N), CGV_CON_OUT))
126
127 #define addcgvboxconin(F, B, N) (addcgvboxcon((F), (B), (N), CGV_CON_IN))
128 #define addcgvboxconout(F, B, N) (addcgvboxcon((F), (B), (N), CGV_CON_OUT))
129
130 extern int CGV_SCALE;
131 #define MARGE (3*CGV_SCALE)
132 /*------------------------------------------------------\
133 | Structures |
134 \------------------------------------------------------*/
135
136 /*------------------------------------------------------\
137 | Wires |
138 \------------------------------------------------------*/
139
140 typedef struct cgvwir {
141 struct cgvwir *NEXT;
142 struct cgvnet *NET;
143 long X;
144 long Y;
145 long DX;
146 long DY;
147 long FLAGS;
148 void *USER;
149 } cgvwir_list;
150
151 /*------------------------------------------------------\
152 | Nets (Signals) |
153 \------------------------------------------------------*/
154
155 typedef struct cgvnet {
156 struct cgvnet *NEXT;
157 chain_list *CON_NET;
158 struct cgvwir *WIRE;
159 void *SOURCE;
160 unsigned char SOURCE_TYPE;
161 long FLAGS;
162 long NUMBER_IN;
163 long NUMBER_OUT;
164 long CANAL; /* pour routage ... */
165 long YMIN; /* pour routage ... */
166 long YMAX; /* pour routage ... */
167 void *USER;
168 char *NAME;
169 struct cgvnet *UNDER;
170 } cgvnet_list;
171
172 /*------------------------------------------------------\
173 | Connectors |
174 \------------------------------------------------------*/
175
176 typedef struct cgvcon {
177 struct cgvcon *NEXT;
178 unsigned char TYPE;
179 unsigned char DIR;
180 char *NAME;
181 char *SUB_NAME;
182 unsigned char ROOT_TYPE;
183 void *ROOT;
184 cgvnet_list *NET;
185 void *SOURCE;
186 unsigned char SOURCE_TYPE;
187 long X_REL;
188 long Y_REL;
189 long FLAGS;
190 void *USER;
191 } cgvcon_list;
192
193 /*------------------------------------------------------\
194 | Box (Instance) |
195 \------------------------------------------------------*/
196
197 typedef struct cgvbox {
198 struct cgvbox *NEXT;
199 char *NAME;
200 struct cgvcon *CON_IN;
201 long NUMBER_IN;
202 struct cgvcon *CON_OUT;
203 long NUMBER_OUT;
204 void *SOURCE;
205 unsigned char SOURCE_TYPE;
206 long X;
207 long Y;
208 long DX;
209 long DY;
210 long FLAGS;
211 symbol_list *SYMBOL;
212 void *USER;
213 union
214 {
215 struct cgvbox *UNDER;
216 int count;
217 } misc;
218 struct cgvbox *tmp;
219 } cgvbox_list;
220
221 /*------------------------------------------------------\
222 | Figure |
223 \------------------------------------------------------*/
224
225 typedef struct cgvfig {
226 struct cgvfig *NEXT;
227 char *NAME;
228 struct cgvcon *CON_IN;
229 long NUMBER_IN;
230 struct cgvcon *CON_OUT;
231 long NUMBER_OUT;
232 cgvbox_list *BOX;
233 cgvnet_list *NET;
234 void *SOURCE;
235 unsigned char SOURCE_TYPE;
236 long X;
237 long Y;
238 long FLAGS;
239 library *LIBRARY;
240 long SCALE;
241 void *USER;
242 void *data0, *data1, *data2;
243 void *data_ZOOM;
244 } cgvfig_list;
245
246 /*------------------------------------------------------\
247 | Colums |
248 \------------------------------------------------------*/
249
250 typedef struct cgvcol {
251 struct cgvcol *NEXT;
252 struct cgvcel *CELL;
253 struct cgvcel *LAST_CELL;
254 long NUMBER_CELL;
255 long MAX_DX_CELL;
256 long tab[100];
257 } cgvcol_list;
258
259 /*------------------------------------------------------\
260 | Cells |
261 \------------------------------------------------------*/
262
263 typedef struct cgvcel {
264 struct cgvcel *NEXT;
265 struct cgvcel *PREV;
266 struct cgvcol *COL;
267 void *ROOT;
268 long TYPE;
269 } cgvcel_list;
270
271 typedef struct cgv_actions
272 {
273 int type;
274 } cgv_actions;
275
276 typedef struct cgv_interaction
277 {
278 struct cgv_interaction *NEXT;
279 unsigned int object_type;
280 char *name;
281 } cgv_interaction;
282
283 typedef void (*markobject)(void *data);
284
285 /*------------------------------------------------------\
286 | Global Variables |
287 \------------------------------------------------------*/
288
289 extern cgvfig_list *HEAD_CGVFIG;
290 extern cgvcol_list *HEAD_CGVCOL;
291 extern int CGV_MAKE_CELLS;
292 extern int CGV_WAS_PRESENT;
293 extern library *CGV_LIB;
294
295 /*------------------------------------------------------\
296 | Functions |
297 \------------------------------------------------------*/
298
299 void cgv_hilite (cgvfig_list *Figure,
300 cgvbox_list *box,
301 int mode,
302 int depth,
303 markobject mark);
304 void cgv_hilite_net (cgvfig_list *Figure,
305 cgvcon_list *c,
306 int mode,
307 int depth,
308 markobject mark);
309
310 /*------------------------------------------------------\
311 | Free Functions |
312 \------------------------------------------------------*/
313
314 void freecgvfig (cgvfig_list *Figure);
315 void freecgvcon (cgvcon_list *Connector);
316 void freecgvbox (cgvbox_list *Box);
317 void freecgvwir (cgvwir_list *Wire);
318 void freecgvnet (cgvnet_list *Net);
319 void freecgvcol (cgvcol_list *Colum);
320 void freecgvcel (cgvcel_list *Cell);
321
322 /*------------------------------------------------------\
323 | Add Functions |
324 \------------------------------------------------------*/
325
326 cgvnet_list *addcgvnetcon (cgvnet_list *Net,
327 cgvcon_list *Con);
328 cgvfig_list *addcgvfig (char *Name,
329 long scale);
330 cgvcon_list *addcgvfigcon (cgvfig_list *Figure,
331 char *Name,
332 unsigned char Type);
333 cgvbox_list *addcgvbox (cgvfig_list *Figure,
334 char *Name);
335 cgvcon_list *addcgvboxcon (cgvfig_list *Figure,
336 cgvbox_list *Box,
337 char *Name,
338 unsigned char Type);
339 cgvwir_list *addcgvwir (cgvfig_list *Figure,
340 cgvnet_list *Net);
341 cgvnet_list *addcgvnet (cgvfig_list *Figure);
342
343 cgvcel_list *addcgvcel (cgvcol_list *Column);
344 cgvcol_list *addcgvcol (void);
345
346 cgvcel_list *addcgvboxtocgvcel (cgvbox_list *CgvBox,
347 cgvcel_list *CgvCel);
348 cgvcel_list *addcgvcontocgvcel (cgvcon_list *CgvCon,
349 cgvcel_list *CgvCel);
350
351 /*------------------------------------------------------\
352 | Del Functions |
353 \------------------------------------------------------*/
354
355 void cgvdeltransparence (cgvcel_list *Cell,
356 cgvfig_list *Figure);
357 int delcgvfig (char *Name);
358 cgvfig_list *rmvcgvfig (cgvfig_list *CgvFig);
359 void delcgvcol (void);
360
361 /*------------------------------------------------------\
362 | View Functions |
363 \------------------------------------------------------*/
364
365 void viewcgvwir (cgvwir_list *Wire);
366 void viewcgvnet (cgvnet_list *Net);
367 void viewcgvcon (cgvcon_list *Con,
368 char *Blank);
369 void viewcgvbox (cgvbox_list *Box);
370 void viewcgvfig (cgvfig_list *Figure);
371
372 void cgv_error (char Error,
373 char *Text,
374 char *File,
375 long Line);
376 void cgv_setscale (int scale);
377
378 chain_list *cgvlistcone (cnsfig_list *CnsFigure,
379 chain_list *NameList,
380 int Mode,
381 int Depth,
382 cgvfig_list *CgvFigure);
383 void buildcgvfig (cgvfig_list *Figure);
384
385 cgvfig_list *getcgvfig (char *FileName,
386 long Type,
387 char *filename);
388 cgvfig_list *getcgvfig_from_lofig (char *Name,
389 char *filename);
390 cgvfig_list *getcgvfig_from_cnsfig (char *FileName,
391 char *filename);
392 cgvfig_list *getcgvfig_from_cone (cone_list *cn);
393
394 void freecgvfigure (cgvfig_list *Figure);
395
396 cgvfig_list *getcgvfile (char *name,
397 int type,
398 int cut,
399 char *filename);
400 void removecgvfiles (char *name,
401 void (*did)(cgvfig_list *removed));
402 void removeallcgvfiles (void (*did)(cgvfig_list *removed));
403 void addcgvfile (char *name,
404 int type,
405 int cut,
406 char *filename,
407 cgvfig_list *cgvstruct,
408 void *lofig,
409 void *cnsf,
410 int inmem);
411 char *getcgvfileext (cgvfig_list *cgvstruct);
412
413 void cgv_HiLight (cgvfig_list *cgvf,
414 cgv_interaction *itr,
415 int complete,
416 markobject mark);
417 cgvfig_list *cgv_Extract (cgvfig_list *cgvf,
418 cgv_interaction *itr,
419 int complete);
420 void cgv_extract (cgvfig_list *Figure,
421 cgvbox_list *box,
422 int mode,
423 int depth);
424 void complete_extract_list (cgvfig_list *cgvf,
425 cgv_interaction *itr,
426 int complete,
427 markobject mark);
428 void cgv_extract_net (cgvfig_list *Figure,
429 cgvcon_list *c,
430 int mode,
431 int depth);
432 cgvfig_list *finish_extract (cgvfig_list *parent);
433
434
435 // CGV INTERACTION OBJECTS / FUNCTIONS
436 cgv_interaction *cgv_NetObject (cgv_interaction *head,
437 char *name);
438 cgv_interaction *cgv_GateObject (cgv_interaction *head,
439 char *name);
440 cgv_interaction *cgv_ConnectorObject (cgv_interaction *head,
441 char *name);
442 void cgv_FreeObjects (cgv_interaction *head);
443
444 void cgv_SetDefaultLibrary (library *l);
445 symbol_list *cgv_getlofigcellsymbol (library *ptlib,
446 char *symname);
447 symbol_list *cgv_getselfcellsymbol (library *ptlib,
448 char *symname);
449 void parsecorresp (char *name);
450 char *getcorrespgate (char *name);
451 char *getcorrespgatepin (char *name,
452 char *con);
453
454 #endif