1 /*------------------------------------------------------------\
2 | |
3 | Tool : RDS |
4 | |
5 | File : rdsalloc.c |
6 | |
7 | Authors : Jacomme Ludovic |
8 | |
9 | Date : 27.06.95 |
10 | |
11 \------------------------------------------------------------*/
12 /*------------------------------------------------------------\
13 | |
14 | Include Files |
15 | |
16 \------------------------------------------------------------*/
17
18 # include <stdio.h>
19 # include <stdlib.h>
20 # include <memory.h>
21 # include <string.h>
22
23 # include <mut.h>
24 # include "rds.h"
25
26 # include "rdsalloc.h"
27 # include "rdserror.h"
28
29 /*------------------------------------------------------------\
30 | |
31 | Constants |
32 | |
33 \------------------------------------------------------------*/
34 /*------------------------------------------------------------\
35 | |
36 | Types |
37 | |
38 \------------------------------------------------------------*/
39 /*------------------------------------------------------------\
40 | |
41 | Variables |
42 | |
43 \------------------------------------------------------------*/
44 /*------------------------------------------------------------\
45 | |
46 | Head List |
47 | |
48 \------------------------------------------------------------*/
49
50 rdsfig_list *HEAD_RDSFIG = (rdsfig_list *)NULL;
51
52 /*------------------------------------------------------------\
53 | |
54 | Name |
55 | |
56 \------------------------------------------------------------*/
57
58 char *RDS_ALL_LAYER_NAME[ RDS_ALL_LAYER ] =
59
60 {
61 "RDS_NWELL",
62 "RDS_PWELL",
63 "RDS_NIMP",
64 "RDS_PIMP",
65 "RDS_ACTIV",
66 "RDS_NDIF",
67 "RDS_PDIF",
68 "RDS_NTIE",
69 "RDS_PTIE",
70 "RDS_POLY",
71 "RDS_GATE",
72 "RDS_VPOLY",
73 "RDS_TPOLY",
74 "RDS_POLY2",
75 "RDS_CONT",
76 "RDS_TPOLY2",
77 "RDS_TCONT",
78 "RDS_CONT2",
79 "RDS_ALU1",
80 "RDS_VALU1",
81 "RDS_TALU1",
82 "RDS_VIA1",
83 "RDS_TVIA1",
84 "RDS_ALU2",
85 "RDS_VALU2",
86 "RDS_TALU2",
87 "RDS_VIA2",
88 "RDS_TVIA2",
89 "RDS_ALU3",
90 "RDS_VALU3",
91 "RDS_TALU3",
92 "RDS_VIA3",
93 "RDS_TVIA3",
94 "RDS_ALU4",
95 "RDS_VALU4",
96 "RDS_TALU4",
97 "RDS_VIA4",
98 "RDS_TVIA4",
99 "RDS_ALU5",
100 "RDS_VALU5",
101 "RDS_TALU5",
102 "RDS_VIA5",
103 "RDS_TVIA5",
104 "RDS_ALU6",
105 "RDS_VALU6",
106 "RDS_TALU6",
107 "RDS_VIA6",
108 "RDS_TVIA6",
109 "RDS_ALU7",
110 "RDS_VALU7",
111 "RDS_TALU7",
112 "RDS_VIA7",
113 "RDS_TVIA7",
114 "RDS_ALU8",
115 "RDS_VALU8",
116 "RDS_TALU8",
117 "RDS_VIA8",
118 "RDS_TVIA8",
119 "RDS_ALU9",
120 "RDS_CPAS",
121 "RDS_REF",
122 "RDS_USER0",
123 "RDS_USER1",
124 "RDS_USER2",
125 "RDS_USER3",
126 "RDS_USER4",
127 "RDS_USER5",
128 "RDS_USER6",
129 "RDS_USER7",
130 "RDS_USER8",
131 "RDS_USER9",
132 "RDS_ABOX"
133 };
134
135 char *RDS_TRANSF_NAME [ RDS_MAX_TRANSF ] =
136
137 {
138 "NOSYM",
139 "ROT_P",
140 "SYMXY",
141 "ROT_M",
142 "SYM_X",
143 "SY_RM",
144 "SYM_Y",
145 "SY_RP"
146 };
147
148 char **RDS_LAYER_NAME = RDS_ALL_LAYER_NAME;
149
150 /*------------------------------------------------------------\
151 | |
152 | Dynamic Layers |
153 | |
154 \------------------------------------------------------------*/
155
156 unsigned char RDS_DYNAMIC_LAYER[ RDS_ALL_LAYER ] =
157
158 {
159 RDS_LAYER_NWELL,
160 RDS_LAYER_PWELL,
161 RDS_LAYER_NIMP ,
162 RDS_LAYER_PIMP ,
163 RDS_LAYER_ACTIV,
164 RDS_LAYER_NDIF ,
165 RDS_LAYER_PDIF ,
166 RDS_LAYER_NTIE ,
167 RDS_LAYER_PTIE ,
168 RDS_LAYER_POLY ,
169 RDS_LAYER_GATE ,
170 RDS_LAYER_VPOLY,
171 RDS_LAYER_TPOLY,
172 RDS_LAYER_POLY2,
173 RDS_LAYER_CONT ,
174 RDS_LAYER_TPOLY2,
175 RDS_LAYER_TCONT,
176 RDS_LAYER_CONT2,
177 RDS_LAYER_ALU1 ,
178 RDS_LAYER_VALU1,
179 RDS_LAYER_TALU1,
180 RDS_LAYER_VIA1 ,
181 RDS_LAYER_TVIA1,
182 RDS_LAYER_ALU2 ,
183 RDS_LAYER_VALU2,
184 RDS_LAYER_TALU2,
185 RDS_LAYER_VIA2 ,
186 RDS_LAYER_TVIA2,
187 RDS_LAYER_ALU3 ,
188 RDS_LAYER_VALU3,
189 RDS_LAYER_TALU3,
190 RDS_LAYER_VIA3 ,
191 RDS_LAYER_TVIA3,
192 RDS_LAYER_ALU4 ,
193 RDS_LAYER_VALU4,
194 RDS_LAYER_TALU4,
195 RDS_LAYER_VIA4 ,
196 RDS_LAYER_TVIA4,
197 RDS_LAYER_ALU5 ,
198 RDS_LAYER_VALU5,
199 RDS_LAYER_TALU5,
200 RDS_LAYER_VIA5 ,
201 RDS_LAYER_TVIA5,
202 RDS_LAYER_ALU6 ,
203 RDS_LAYER_VALU6,
204 RDS_LAYER_TALU6,
205 RDS_LAYER_VIA6 ,
206 RDS_LAYER_TVIA6,
207 RDS_LAYER_ALU7 ,
208 RDS_LAYER_VALU7,
209 RDS_LAYER_TALU7,
210 RDS_LAYER_VIA7 ,
211 RDS_LAYER_TVIA7,
212 RDS_LAYER_ALU8 ,
213 RDS_LAYER_VALU8,
214 RDS_LAYER_TALU8,
215 RDS_LAYER_VIA8 ,
216 RDS_LAYER_TVIA8,
217 RDS_LAYER_ALU9 ,
218 RDS_LAYER_CPAS ,
219 RDS_LAYER_REF ,
220 RDS_LAYER_USER0,
221 RDS_LAYER_USER1,
222 RDS_LAYER_USER2,
223 RDS_LAYER_USER3,
224 RDS_LAYER_USER4,
225 RDS_LAYER_USER5,
226 RDS_LAYER_USER6,
227 RDS_LAYER_USER7,
228 RDS_LAYER_USER8,
229 RDS_LAYER_USER9,
230 RDS_LAYER_ABOX
231 };
232
233 unsigned char *RDS_STATIC_LAYER = RDS_DYNAMIC_LAYER;
234 unsigned char RDS_MAX_LAYER = RDS_ALL_LAYER;
235
236 /*------------------------------------------------------------\
237 | |
238 | Alloc Heap |
239 | |
240 \------------------------------------------------------------*/
241
242 char *RdsHeapHeadArray[ 256 ];
243 static char InitRdsHeapHeadArray = 1;
244
245 /*------------------------------------------------------------\
246 | |
247 | Functions |
248 | |
249 \------------------------------------------------------------*/
250 /*------------------------------------------------------------\
251 | |
252 | Alloc Functions |
253 | |
254 \------------------------------------------------------------*/
255 /*------------------------------------------------------------\
256 | |
257 | Rds Alloc |
258 | |
259 \------------------------------------------------------------*/
260
rdsalloc(Size,Heap)261 char *rdsalloc( Size, Heap )
262
263 unsigned long Size;
264 char Heap;
265 {
266 long Counter;
267 unsigned long Index;
268 char *Pointer;
269 char **Prev;
270 char *Scan;
271
272 if ( InitRdsHeapHeadArray == 1 )
273 {
274 InitRdsHeapHeadArray = 0;
275
276 for ( Counter = 0; Counter < 256 ; Counter++ )
277 {
278 RdsHeapHeadArray[ Counter ] = (char *)NULL;
279 }
280 }
281
282 Index = ( Size + 3 ) >> 2;
283
284 if ( ( Heap == RDS_ALLOC_BLOCK ) ||
285 ( Index > 255 ) )
286 {
287 if ( !( Pointer = malloc( Size ) ) )
288 {
289 rdserror( RDS_ALLOC_ERROR, (char *)NULL );
290 }
291
292 bzero( Pointer, Size );
293
294 return( Pointer );
295 }
296
297 Size = Index << 2;
298
299 if ( RdsHeapHeadArray[ Index ] == (char *)NULL )
300 {
301 if ( !( Pointer = malloc( Size << RDS_ALLOC_SHIFT ) ) )
302 {
303 rdserror( RDS_ALLOC_ERROR, (char *)NULL );
304 }
305
306 Scan = (char *)(Pointer + Size);
307
308 Prev = &RdsHeapHeadArray[ Index ];
309
310 for ( Counter = 1; Counter < RDS_ALLOC_SIZE; Counter++ )
311 {
312 *Prev = Scan; Prev = (char **)Scan; Scan = (char *)(Scan + Size);
313 }
314
315 *Prev = (char *)NULL;
316
317 RdsHeapHeadArray[ Index ] = (char *)(Pointer + Size);
318
319 bzero( Pointer, Size );
320
321 return( Pointer );
322 }
323
324 Pointer = RdsHeapHeadArray[ Index ];
325
326 RdsHeapHeadArray[ Index ] = *((char **)RdsHeapHeadArray[ Index ]);
327
328 bzero( Pointer, Size );
329
330 return( Pointer );
331 }
332
333 /*------------------------------------------------------------\
334 | |
335 | Rds Alloc Figure |
336 | |
337 \------------------------------------------------------------*/
338
allocrdsfig()339 rdsfig_list *allocrdsfig()
340 {
341 rdsfig_list *Figure;
342 void *Pointer;
343
344 Figure = (rdsfig_list *)rdsallocblock( sizeof( rdsfig_list) );
345 Pointer = (void *)rdsallocblock( sizeof(rdsrec_list *) * RDS_MAX_LAYER );
346 Figure->LAYERTAB = (rdsrec_list **)Pointer;
347 Pointer = (void *)rdsallocblock( sizeof(rdsrec_list *) * RDS_MAX_LAYER );
348 Figure->BBOXTAB = (rdsrec_list **)Pointer;
349 Pointer = (void *)rdsallocblock( sizeof( char ) * RDS_MAX_LAYER );
350 Figure->FLAGTAB = (char *)Pointer;
351
352 return( Figure );
353 }
354
355 /*------------------------------------------------------------\
356 | |
357 | Rds Alloc Instance |
358 | |
359 \------------------------------------------------------------*/
360
allocrdsins()361 rdsins_list *allocrdsins()
362 {
363 rdsins_list *Instance;
364 void *Pointer;
365
366 Instance = (rdsins_list *)rdsallocblock( sizeof( rdsins_list ) );
367 Pointer = (void *)rdsallocblock( sizeof(rdsrec_list *) * RDS_MAX_LAYER );
368 Instance->LAYERTAB = (rdsrec_list **)Pointer;
369 Pointer = (void *)rdsallocblock( sizeof(rdsrec_list *) * RDS_MAX_LAYER );
370 Instance->COURONNE = (rdsrec_list **)Pointer;
371
372 return( Instance );
373 }
374
375 /*------------------------------------------------------------\
376 | |
377 | Rds Alloc Rectangle |
378 | |
379 \------------------------------------------------------------*/
380
allocrdsrec(Size)381 rdsrec_list *allocrdsrec( Size )
382
383 unsigned long Size;
384 {
385 return( (rdsrec_list *)( rdsallocheap( sizeof( rdsrec_list ) + Size ) ) );
386 }
387