Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / yagle / cgv / cgv_alloc.c
1 /*------------------------------------------------------------\
2 | |
3 | Tool : CGV |
4 | |
5 | File : cgv_alloc.c |
6 | |
7 | Authors : Picault Stephane |
8 | Miramond Benoit |
9 | Lester Anthony |
10 | |
11 \------------------------------------------------------------*/
12
13 #include <stdio.h>
14 #include <stdlib.h>
15
16 #include MUT_H
17 #include SLB_H
18 #include CGV_H
19
20 cgvfig_list *HEAD_CGVFIG = NULL;
21 cgvcol_list *HEAD_CGVCOL = NULL;
22
23 /*------------------------------------------------------------\
24 | Cgv Add Functions |
25 \------------------------------------------------------------*/
26
27 /*------------------------------------------------------------\
28 | Cgv Add Connector |
29 \------------------------------------------------------------*/
30
31 cgvnet_list *
32 addcgvnetcon(Net, Con)
33 cgvnet_list *Net;
34 cgvcon_list *Con;
35 {
36 Con->NET = Net;
37 Net->CON_NET = addchain(Net->CON_NET, Con);
38
39 if (IsCgvConIn(Con)) {
40 Net->NUMBER_IN++;
41 }
42 else {
43 Net->NUMBER_OUT++;
44 }
45 return (Net);
46 }
47
48
49 /*------------------------------------------------------------\
50 | Cgv Add Figure |
51 \------------------------------------------------------------*/
52
53 cgvfig_list *
54 addcgvfig(Name,scale)
55 char *Name;
56 long scale;
57
58 {
59 cgvfig_list *Figure;
60
61 Figure = (cgvfig_list *)mbkalloc(sizeof(cgvfig_list));
62 Figure->NEXT = HEAD_CGVFIG;
63 Figure->NAME = namealloc(Name);
64 Figure->CON_IN = NULL;
65 Figure->NUMBER_IN = 0;
66 Figure->CON_OUT = NULL;
67 Figure->NUMBER_OUT = 0;
68 Figure->BOX = NULL;
69 Figure->NET = NULL;
70 Figure->SOURCE = NULL;
71 Figure->SOURCE_TYPE = 0;
72 Figure->X = 0;
73 Figure->Y = 0;
74 Figure->FLAGS = 0;
75 Figure->LIBRARY = NULL;
76 Figure->SCALE = scale;
77 Figure->USER = NULL;
78
79 cgv_setscale(scale);
80 HEAD_CGVFIG = Figure;
81 return Figure;
82 }
83
84 /*------------------------------------------------------------\
85 | Cgv Add Box |
86 \------------------------------------------------------------*/
87
88 cgvbox_list *
89 addcgvbox(Figure, Name)
90 cgvfig_list *Figure;
91 char *Name;
92 {
93 cgvbox_list *Box;
94
95 Box = (cgvbox_list *)mbkalloc(sizeof(cgvbox_list));
96 Box->NEXT = Figure->BOX;
97 Box->NAME = namealloc(Name);
98 Box->CON_IN = NULL;
99 Box->NUMBER_IN = 0;
100 Box->CON_OUT = NULL;
101 Box->NUMBER_OUT = 0;
102 Box->SOURCE = NULL;
103 Box->SOURCE_TYPE = 0;
104 Box->X = 0;
105 Box->Y = 0;
106 Box->DX = 0;
107 Box->DY = 0;
108 Box->FLAGS = 0;
109 Box->SYMBOL = NULL;
110 Box->USER = NULL;
111 Box->misc.UNDER=NULL;
112 Figure->BOX = Box;
113 return Box;
114 }
115
116 /*------------------------------------------------------------\
117 | Cgv Add Box Connector |
118 \------------------------------------------------------------*/
119
120 cgvcon_list *
121 addcgvboxcon(Figure, Box, Name, Type)
122 cgvfig_list *Figure;
123 cgvbox_list *Box;
124 char *Name;
125 unsigned char Type;
126 {
127 cgvcon_list *Connector;
128
129 #ifndef __ALL__WARNING__
130 Figure = NULL;
131 #endif
132 Connector = (cgvcon_list *)mbkalloc(sizeof(cgvcon_list));
133 Connector->NAME = namealloc(Name);
134 Connector->DIR = 0;
135 Connector->NET = NULL;
136 Connector->SOURCE = NULL;
137 Connector->SOURCE_TYPE = 0;
138 Connector->X_REL = 0;
139 Connector->Y_REL = 0;
140 Connector->FLAGS = 0;
141 Connector->USER = NULL;
142 Connector->SUB_NAME=NULL;
143
144 if (Type == CGV_CON_IN) {
145 Connector->NEXT = Box->CON_IN;
146 Box->CON_IN = Connector;
147 Box->NUMBER_IN++;
148 }
149 else {
150 Connector->NEXT = Box->CON_OUT;
151 Box->CON_OUT = Connector;
152 Box->NUMBER_OUT++;
153 }
154
155 Connector->TYPE = Type;
156 SetCgvConInternal(Connector);
157 Connector->ROOT_TYPE = CGV_ROOT_CON_BOX;
158 Connector->ROOT = Box;
159
160 return (Connector);
161 }
162
163 /*------------------------------------------------------------\
164 | Cgv Add Figure Connector |
165 \------------------------------------------------------------*/
166
167 cgvcon_list *
168 addcgvfigcon(Figure, Name, Type)
169 cgvfig_list *Figure;
170 char *Name;
171 unsigned char Type;
172 {
173 cgvcon_list *Connector;
174
175 Connector = (cgvcon_list *)mbkalloc(sizeof(cgvcon_list));
176 Connector->NAME = namealloc(Name);
177 Connector->DIR = 0;
178 Connector->NET = NULL;
179 Connector->SOURCE = NULL;
180 Connector->SOURCE_TYPE = 0;
181 Connector->X_REL = 0;
182 Connector->Y_REL = 0;
183 Connector->FLAGS = 0;
184 Connector->USER = NULL;
185 Connector->SUB_NAME = NULL;
186
187 if (Type == CGV_CON_IN) {
188 Connector->NEXT = Figure->CON_IN;
189 Figure->CON_IN = Connector;
190 Figure->NUMBER_IN++;
191 }
192 else {
193 Connector->NEXT = Figure->CON_OUT;
194 Figure->CON_OUT = Connector;
195 Figure->NUMBER_OUT++;
196 }
197
198 Connector->TYPE = Type;
199 SetCgvConExternal(Connector);
200 Connector->ROOT_TYPE = CGV_ROOT_CON_FIG;
201 Connector->ROOT = Figure;
202
203 return Connector;
204 }
205
206 /*------------------------------------------------------------\
207 | Cgv Add Net |
208 \------------------------------------------------------------*/
209
210 cgvnet_list *
211 addcgvnet(Figure)
212 cgvfig_list *Figure;
213 {
214 cgvnet_list *Net;
215
216 Net = (cgvnet_list *)mbkalloc(sizeof(cgvnet_list));
217 Net->NEXT = Figure->NET;
218 Net->CON_NET = NULL;
219 Net->WIRE = NULL;
220 Net->SOURCE = NULL;
221 Net->SOURCE_TYPE = 0;
222 Net->FLAGS = 0;
223 Net->NUMBER_IN = 0;
224 Net->NUMBER_OUT = 0;
225 Net->CANAL = 0;
226 Net->YMIN = 0;
227 Net->YMAX = 0;
228 Net->USER = NULL;
229 Net->NAME=NULL;
230
231 Figure->NET = Net;
232 return Net;
233 }
234
235 /*------------------------------------------------------------\
236 | Cgv Add Wire |
237 \------------------------------------------------------------*/
238
239 cgvwir_list *
240 addcgvwir(Figure, Net)
241 cgvfig_list *Figure;
242 cgvnet_list *Net;
243 {
244 cgvwir_list *Wire;
245
246 #ifndef __ALL__WARNING__
247 Figure = NULL;
248 #endif
249 Wire = (cgvwir_list *)mbkalloc(sizeof(cgvwir_list));
250 Wire->NEXT = Net->WIRE;
251 Wire->NET = NULL;
252 Wire->X = 0;
253 Wire->Y = 0;
254 Wire->DX = 0;
255 Wire->DY = 0;
256 Wire->FLAGS = 0;
257 Wire->USER = NULL;
258
259 Net->WIRE = Wire;
260 return Wire;
261 }
262
263 /*------------------------------------------------------------\
264 | Cgv Add Cell |
265 \------------------------------------------------------------*/
266
267 cgvcel_list *
268 addcgvcel(Column)
269 cgvcol_list *Column;
270 {
271 cgvcel_list *Cell;
272
273 Cell = (cgvcel_list *)mbkalloc(sizeof(cgvcel_list));
274 Cell->COL = Column;
275 Cell->NEXT = Column->CELL;
276 Cell->PREV = NULL;
277 Cell->ROOT = NULL;
278 Cell->TYPE = 0;
279
280 if (Column->CELL != NULL) {
281 Column->CELL->PREV = Cell;
282 }
283 else {
284 Column->LAST_CELL = Cell;
285 }
286
287 Column->CELL = Cell;
288 Column->NUMBER_CELL++;
289
290 return Cell;
291 }
292
293 /*------------------------------------------------------------\
294 | Cgv Add Box to Cell |
295 \------------------------------------------------------------*/
296
297 cgvcel_list *
298 addcgvboxtocgvcel(CgvBox, CgvCel)
299 cgvbox_list *CgvBox;
300 cgvcel_list *CgvCel;
301 {
302 CgvCel->ROOT = CgvBox;
303 CgvCel->TYPE = CGV_CEL_BOX;
304 CgvBox->USER = CgvCel;
305 return CgvCel;
306 }
307
308 /*------------------------------------------------------------\
309 | Cgv Add Con to Cell |
310 \------------------------------------------------------------*/
311
312 cgvcel_list *
313 addcgvcontocgvcel(CgvCon, CgvCel)
314 cgvcon_list *CgvCon;
315 cgvcel_list *CgvCel;
316 {
317 CgvCel->ROOT = CgvCon;
318 CgvCel->TYPE = CGV_CEL_CON;
319 CgvCon->USER = CgvCel;
320 return CgvCel;
321 }
322
323 /*------------------------------------------------------------\
324 | Cgv Add Column |
325 \------------------------------------------------------------*/
326
327 cgvcol_list *
328 addcgvcol()
329 {
330 cgvcol_list *Column;
331
332 Column = (cgvcol_list *)mbkalloc(sizeof(cgvcol_list));
333 Column->NEXT = HEAD_CGVCOL;
334 Column->CELL = NULL;
335 Column->LAST_CELL = NULL;
336 Column->NUMBER_CELL = 0;
337 Column->MAX_DX_CELL = 0;
338
339 HEAD_CGVCOL = Column;
340 return Column;
341 }
342