1 /*------------------------------------------------------------\
2 |                                                             |
3 | Tool    :                     RDS                           |
4 |                                                             |
5 | File    :                   rds210.h                        |
6 |                                                             |
7 | Authors :                Jacomme Ludovic                    |
8 |                                                             |
9 | Date    :                   27.06.95                        |
10 |                                                             |
11 \------------------------------------------------------------*/
12 
13 # ifndef RDS_210_H
14 # define RDS_210_H
15 
16 # include <libgen.h>
17 
18 #ifndef __P
19 # if defined(__STDC__) ||  defined(__GNUC__)
20 #  define __P(x) x
21 # else
22 #  define __P(x) ()
23 # endif
24 #endif
25 
26 /*------------------------------------------------------------\
27 |                                                             |
28 |                           Constants                         |
29 |                                                             |
30 \------------------------------------------------------------*/
31 /*------------------------------------------------------------\
32 |                                                             |
33 |                             Alloc                           |
34 |                                                             |
35 \------------------------------------------------------------*/
36 
37 # define RDS_ALLOC_BLOCK   0
38 # define RDS_ALLOC_HEAP    1
39 
40 /*------------------------------------------------------------\
41 |                                                             |
42 |                         Allocation Macros                   |
43 |                                                             |
44 \------------------------------------------------------------*/
45 
46 # define rdsallocblock( SizeOf )                      \
47                                                       \
48          ( rdsalloc( ( SizeOf ), RDS_ALLOC_BLOCK ) )
49 
50 # define rdsallocheap( SizeOf )                       \
51                                                       \
52          ( rdsalloc( ( SizeOf ), RDS_ALLOC_HEAP ) )
53 
54 # define rdsfreeblock( Pointer )                      \
55                                                       \
56          ( rdsfree( (char *)( Pointer ), (unsigned long)0 ) )
57 
58 # define rdsfreeheap( Pointer, SizeOf )               \
59                                                       \
60          ( rdsfree( (char *)( Pointer ), (unsigned long)( SizeOf ) ) )
61 
62 /*------------------------------------------------------------\
63 |                                                             |
64 |                         Instance Symmetry                   |
65 |                                                             |
66 \------------------------------------------------------------*/
67 
68 # define RDS_NOSYM  0
69 # define RDS_ROT_P  1
70 # define RDS_SYMXY  2
71 # define RDS_ROT_M  3
72 # define RDS_SYM_X  4
73 # define RDS_SY_RM  5
74 # define RDS_SYM_Y  6
75 # define RDS_SY_RP  7
76 
77 # define RDS_MAX_TRANSF ( RDS_SY_RP + 1 )
78 
79 /*------------------------------------------------------------\
80 |                                                             |
81 |                          Rds Layers                         |
82 |                                                             |
83 \------------------------------------------------------------*/
84 
85 # define RDS_LAYER_NWELL   0
86 # define RDS_LAYER_PWELL   1
87 # define RDS_LAYER_NIMP    2
88 # define RDS_LAYER_PIMP    3
89 # define RDS_LAYER_ACTIV   4
90 # define RDS_LAYER_NDIF    5
91 # define RDS_LAYER_PDIF    6
92 # define RDS_LAYER_NTIE    7
93 # define RDS_LAYER_PTIE    8
94 # define RDS_LAYER_POLY    9
95 # define RDS_LAYER_GATE    10
96 # define RDS_LAYER_VPOLY   11
97 # define RDS_LAYER_TPOLY   12
98 # define RDS_LAYER_POLY2   13
99 # define RDS_LAYER_CONT    14
100 # define RDS_LAYER_TPOLY2  15
101 # define RDS_LAYER_TCONT   16
102 # define RDS_LAYER_CONT2   17
103 # define RDS_LAYER_ALU1    18
104 # define RDS_LAYER_VALU1   19
105 # define RDS_LAYER_TALU1   20
106 # define RDS_LAYER_VIA1    21
107 # define RDS_LAYER_TVIA1   22
108 # define RDS_LAYER_ALU2    23
109 # define RDS_LAYER_VALU2   24
110 # define RDS_LAYER_TALU2   25
111 # define RDS_LAYER_VIA2    26
112 # define RDS_LAYER_TVIA2   27
113 # define RDS_LAYER_ALU3    28
114 # define RDS_LAYER_VALU3   29
115 # define RDS_LAYER_TALU3   30
116 # define RDS_LAYER_VIA3    31
117 # define RDS_LAYER_TVIA3   32
118 # define RDS_LAYER_ALU4    33
119 # define RDS_LAYER_VALU4   34
120 # define RDS_LAYER_TALU4   35
121 # define RDS_LAYER_VIA4    36
122 # define RDS_LAYER_TVIA4   37
123 # define RDS_LAYER_ALU5    38
124 # define RDS_LAYER_VALU5   39
125 # define RDS_LAYER_TALU5   40
126 # define RDS_LAYER_VIA5    41
127 # define RDS_LAYER_TVIA5   42
128 # define RDS_LAYER_ALU6    43
129 # define RDS_LAYER_VALU6   44
130 # define RDS_LAYER_TALU6   45
131 # define RDS_LAYER_VIA6    46
132 # define RDS_LAYER_TVIA6   47
133 # define RDS_LAYER_ALU7    48
134 # define RDS_LAYER_VALU7   49
135 # define RDS_LAYER_TALU7   50
136 # define RDS_LAYER_VIA7    51
137 # define RDS_LAYER_TVIA7   52
138 # define RDS_LAYER_ALU8    53
139 # define RDS_LAYER_VALU8   54
140 # define RDS_LAYER_TALU8   55
141 # define RDS_LAYER_VIA8    56
142 # define RDS_LAYER_TVIA8   57
143 # define RDS_LAYER_ALU9    58
144 # define RDS_LAYER_CPAS    59
145 # define RDS_LAYER_REF     60
146 # define RDS_LAYER_USER0   61
147 # define RDS_LAYER_USER1   62
148 # define RDS_LAYER_USER2   63
149 # define RDS_LAYER_USER3   64
150 # define RDS_LAYER_USER4   65
151 # define RDS_LAYER_USER5   66
152 # define RDS_LAYER_USER6   67
153 # define RDS_LAYER_USER7   68
154 # define RDS_LAYER_USER8   69
155 # define RDS_LAYER_USER9   70
156 # define RDS_LAYER_ABOX    71
157 
158 # define RDS_ALL_LAYER ( RDS_LAYER_ABOX + 1 )
159 
160 # define RDS_LAYER_UNUSED  (unsigned char)255
161 
162 /*------------------------------------------------------------\
163 |                                                             |
164 |                       Dynamic Layers                        |
165 |                                                             |
166 \------------------------------------------------------------*/
167 
168 # define RDS_NWELL  RDS_DYNAMIC_LAYER[ RDS_LAYER_NWELL  ]
169 # define RDS_PWELL  RDS_DYNAMIC_LAYER[ RDS_LAYER_PWELL  ]
170 # define RDS_NIMP   RDS_DYNAMIC_LAYER[ RDS_LAYER_NIMP   ]
171 # define RDS_PIMP   RDS_DYNAMIC_LAYER[ RDS_LAYER_PIMP   ]
172 # define RDS_ACTIV  RDS_DYNAMIC_LAYER[ RDS_LAYER_ACTIV  ]
173 # define RDS_NDIF   RDS_DYNAMIC_LAYER[ RDS_LAYER_NDIF   ]
174 # define RDS_PDIF   RDS_DYNAMIC_LAYER[ RDS_LAYER_PDIF   ]
175 # define RDS_NTIE   RDS_DYNAMIC_LAYER[ RDS_LAYER_NTIE   ]
176 # define RDS_PTIE   RDS_DYNAMIC_LAYER[ RDS_LAYER_PTIE   ]
177 # define RDS_POLY   RDS_DYNAMIC_LAYER[ RDS_LAYER_POLY   ]
178 # define RDS_GATE   RDS_DYNAMIC_LAYER[ RDS_LAYER_GATE   ]
179 # define RDS_VPOLY  RDS_DYNAMIC_LAYER[ RDS_LAYER_VPOLY  ]
180 # define RDS_TPOLY  RDS_DYNAMIC_LAYER[ RDS_LAYER_TPOLY  ]
181 # define RDS_POLY2  RDS_DYNAMIC_LAYER[ RDS_LAYER_POLY2  ]
182 # define RDS_TPOLY2 RDS_DYNAMIC_LAYER[ RDS_LAYER_TPOLY2 ]
183 # define RDS_CONT   RDS_DYNAMIC_LAYER[ RDS_LAYER_CONT   ]
184 # define RDS_TCONT  RDS_DYNAMIC_LAYER[ RDS_LAYER_TCONT  ]
185 # define RDS_CONT2  RDS_DYNAMIC_LAYER[ RDS_LAYER_CONT2  ]
186 
187 # define RDS_ALU1   RDS_DYNAMIC_LAYER[ RDS_LAYER_ALU1   ]
188 # define RDS_VALU1  RDS_DYNAMIC_LAYER[ RDS_LAYER_VALU1  ]
189 # define RDS_TALU1  RDS_DYNAMIC_LAYER[ RDS_LAYER_TALU1  ]
190 # define RDS_VIA1   RDS_DYNAMIC_LAYER[ RDS_LAYER_VIA1   ]
191 # define RDS_TVIA1  RDS_DYNAMIC_LAYER[ RDS_LAYER_TVIA1  ]
192 
193 # define RDS_ALU2   RDS_DYNAMIC_LAYER[ RDS_LAYER_ALU2   ]
194 # define RDS_VALU2  RDS_DYNAMIC_LAYER[ RDS_LAYER_VALU2  ]
195 # define RDS_TALU2  RDS_DYNAMIC_LAYER[ RDS_LAYER_TALU2  ]
196 # define RDS_VIA2   RDS_DYNAMIC_LAYER[ RDS_LAYER_VIA2   ]
197 # define RDS_TVIA2  RDS_DYNAMIC_LAYER[ RDS_LAYER_TVIA2  ]
198 
199 # define RDS_ALU3   RDS_DYNAMIC_LAYER[ RDS_LAYER_ALU3   ]
200 # define RDS_VALU3  RDS_DYNAMIC_LAYER[ RDS_LAYER_VALU3  ]
201 # define RDS_TALU3  RDS_DYNAMIC_LAYER[ RDS_LAYER_TALU3  ]
202 # define RDS_VIA3   RDS_DYNAMIC_LAYER[ RDS_LAYER_VIA3   ]
203 # define RDS_TVIA3  RDS_DYNAMIC_LAYER[ RDS_LAYER_TVIA3  ]
204 
205 # define RDS_ALU4   RDS_DYNAMIC_LAYER[ RDS_LAYER_ALU4   ]
206 # define RDS_VALU4  RDS_DYNAMIC_LAYER[ RDS_LAYER_VALU4  ]
207 # define RDS_TALU4  RDS_DYNAMIC_LAYER[ RDS_LAYER_TALU4  ]
208 # define RDS_VIA4   RDS_DYNAMIC_LAYER[ RDS_LAYER_VIA4   ]
209 # define RDS_TVIA4  RDS_DYNAMIC_LAYER[ RDS_LAYER_TVIA4  ]
210 
211 # define RDS_ALU5   RDS_DYNAMIC_LAYER[ RDS_LAYER_ALU5   ]
212 # define RDS_VALU5  RDS_DYNAMIC_LAYER[ RDS_LAYER_VALU5  ]
213 # define RDS_TALU5  RDS_DYNAMIC_LAYER[ RDS_LAYER_TALU5  ]
214 # define RDS_VIA5   RDS_DYNAMIC_LAYER[ RDS_LAYER_VIA5   ]
215 # define RDS_TVIA5  RDS_DYNAMIC_LAYER[ RDS_LAYER_TVIA5  ]
216 
217 # define RDS_ALU6   RDS_DYNAMIC_LAYER[ RDS_LAYER_ALU6   ]
218 # define RDS_VALU6  RDS_DYNAMIC_LAYER[ RDS_LAYER_VALU6  ]
219 # define RDS_TALU6  RDS_DYNAMIC_LAYER[ RDS_LAYER_TALU6  ]
220 # define RDS_VIA6   RDS_DYNAMIC_LAYER[ RDS_LAYER_VIA6   ]
221 # define RDS_TVIA6  RDS_DYNAMIC_LAYER[ RDS_LAYER_TVIA6  ]
222 
223 # define RDS_ALU7   RDS_DYNAMIC_LAYER[ RDS_LAYER_ALU7   ]
224 # define RDS_VALU7  RDS_DYNAMIC_LAYER[ RDS_LAYER_VALU7  ]
225 # define RDS_TALU7  RDS_DYNAMIC_LAYER[ RDS_LAYER_TALU7  ]
226 # define RDS_VIA7   RDS_DYNAMIC_LAYER[ RDS_LAYER_VIA7   ]
227 # define RDS_TVIA7  RDS_DYNAMIC_LAYER[ RDS_LAYER_TVIA7  ]
228 
229 # define RDS_ALU8   RDS_DYNAMIC_LAYER[ RDS_LAYER_ALU8   ]
230 # define RDS_VALU8  RDS_DYNAMIC_LAYER[ RDS_LAYER_VALU8  ]
231 # define RDS_TALU8  RDS_DYNAMIC_LAYER[ RDS_LAYER_TALU8  ]
232 # define RDS_VIA8   RDS_DYNAMIC_LAYER[ RDS_LAYER_VIA8   ]
233 # define RDS_TVIA8  RDS_DYNAMIC_LAYER[ RDS_LAYER_TVIA8  ]
234 
235 # define RDS_ALU9   RDS_DYNAMIC_LAYER[ RDS_LAYER_ALU9   ]
236 # define RDS_CPAS   RDS_DYNAMIC_LAYER[ RDS_LAYER_CPAS   ]
237 # define RDS_REF    RDS_DYNAMIC_LAYER[ RDS_LAYER_REF    ]
238 # define RDS_USER0  RDS_DYNAMIC_LAYER[ RDS_LAYER_USER0  ]
239 # define RDS_USER1  RDS_DYNAMIC_LAYER[ RDS_LAYER_USER1  ]
240 # define RDS_USER2  RDS_DYNAMIC_LAYER[ RDS_LAYER_USER2  ]
241 # define RDS_USER3  RDS_DYNAMIC_LAYER[ RDS_LAYER_USER3  ]
242 # define RDS_USER4  RDS_DYNAMIC_LAYER[ RDS_LAYER_USER4  ]
243 # define RDS_USER5  RDS_DYNAMIC_LAYER[ RDS_LAYER_USER5  ]
244 # define RDS_USER6  RDS_DYNAMIC_LAYER[ RDS_LAYER_USER6  ]
245 # define RDS_USER7  RDS_DYNAMIC_LAYER[ RDS_LAYER_USER7  ]
246 # define RDS_USER8  RDS_DYNAMIC_LAYER[ RDS_LAYER_USER8  ]
247 # define RDS_USER9  RDS_DYNAMIC_LAYER[ RDS_LAYER_USER9  ]
248 # define RDS_ABOX   RDS_DYNAMIC_LAYER[ RDS_LAYER_ABOX   ]
249 
250 /*------------------------------------------------------------\
251 |                                                             |
252 |                             Layer                           |
253 |                                                             |
254 \------------------------------------------------------------*/
255 
256 # define RDS_LAYER_MASK       (long)(0x000000FF)
257 
258 /*------------------------------------------------------------\
259 |                                                             |
260 |                         Layer Macros                        |
261 |                                                             |
262 \------------------------------------------------------------*/
263 
264 # define GetRdsLayer( R )                               \
265                                                         \
266   ((unsigned int)( ((R)->FLAGS) & RDS_LAYER_MASK )      )
267 
268 # define SetRdsLayer( R, L )                            \
269                                                         \
270   ((R)->FLAGS = ((R)->FLAGS & ~RDS_LAYER_MASK) | (L)    )
271 
272 /*------------------------------------------------------------\
273 |                                                             |
274 |                           Mbk Type                          |
275 |                                                             |
276 \------------------------------------------------------------*/
277 
278 # define MBK_CONNECTOR_MASK   (long)(0x00000100)
279 # define MBK_SEGMENT_MASK     (long)(0x00000200)
280 # define MBK_REFERENCE_MASK   (long)(0x00000300)
281 # define MBK_VIA_MASK         (long)(0x00000400)
282 # define MBK_INSTANCE_MASK    (long)(0x00000500)
283 # define MBK_FIGURE_MASK      (long)(0x00000600)
284 
285 # define RDS_MBK_TYPE_MASK    (long)(0x00000F00)
286 
287 /*------------------------------------------------------------\
288 |                                                             |
289 |                          Mbk Type Macro                     |
290 |                                                             |
291 \------------------------------------------------------------*/
292 
293 # define GetRdsMbkType( R )                              \
294                                                          \
295   ((R)->FLAGS & RDS_MBK_TYPE_MASK                        )
296 
297 # define SetRdsMbkType( R, T )                           \
298                                                          \
299   ((R)->FLAGS = ( (R)->FLAGS & ~RDS_MBK_TYPE_MASK) | (T) )
300 
301 /*------------------------------------------------------------\
302 |                                                             |
303 |                           Is Mbk Type                       |
304 |                                                             |
305 \------------------------------------------------------------*/
306 
307 # define IsRdsConnector( R )                              \
308                                                           \
309   (((R)->FLAGS & RDS_MBK_TYPE_MASK) == MBK_CONNECTOR_MASK )
310 
311 # define IsRdsSegment( R )                                \
312                                                           \
313   (((R)->FLAGS & RDS_MBK_TYPE_MASK) == MBK_SEGMENT_MASK   )
314 
315 # define IsRdsReference( R )                              \
316                                                           \
317   (((R)->FLAGS & RDS_MBK_TYPE_MASK) == MBK_REFERENCE_MASK )
318 
319 # define IsRdsVia( R )                                    \
320                                                           \
321   (((R)->FLAGS & RDS_MBK_TYPE_MASK) == MBK_VIA_MASK       )
322 
323 # define IsRdsInstance( R )                               \
324                                                           \
325   (((R)->FLAGS & RDS_MBK_TYPE_MASK) == MBK_INSTANCE_MASK  )
326 
327 # define IsRdsFigure( R )                                 \
328                                                           \
329   (((R)->FLAGS & RDS_MBK_TYPE_MASK) == MBK_FIGURE_MASK    )
330 
331 /*------------------------------------------------------------\
332 |                                                             |
333 |                          Set Mbk Type                       |
334 |                                                             |
335 \------------------------------------------------------------*/
336 
337 # define SetRdsConnector( R )                                 \
338                                                               \
339    ( (R)->FLAGS = ((R)->FLAGS                                 \
340                                                               \
341         & ~RDS_MBK_TYPE_MASK ) | MBK_CONNECTOR_MASK           )
342 
343 # define SetRdsSegment( R )                                   \
344                                                               \
345    ( (R)->FLAGS = ((R)->FLAGS                                 \
346                                                               \
347         & ~RDS_MBK_TYPE_MASK ) | MBK_SEGMENT_MASK             )
348 
349 # define SetRdsReference( R )                                 \
350                                                               \
351    ( (R)->FLAGS = ((R)->FLAGS                                 \
352                                                               \
353         & ~RDS_MBK_TYPE_MASK ) | MBK_REFERENCE_MASK           )
354 
355 # define SetRdsVia( R )                                       \
356                                                               \
357    ( (R)->FLAGS = ((R)->FLAGS                                 \
358                                                               \
359         & ~RDS_MBK_TYPE_MASK ) | MBK_VIA_MASK                 )
360 
361 # define SetRdsInstance( R )                                  \
362                                                               \
363    ( (R)->FLAGS = ((R)->FLAGS                                 \
364                                                               \
365         & ~RDS_MBK_TYPE_MASK ) | MBK_INSTANCE_MASK            )
366 
367 # define SetRdsFigure( R )                                    \
368                                                               \
369    ( (R)->FLAGS = ((R)->FLAGS                                 \
370                                                               \
371         & ~RDS_MBK_TYPE_MASK ) | MBK_FIGURE_MASK              )
372 
373 /*------------------------------------------------------------\
374 |                                                             |
375 |                           Extract Type                      |
376 |                                                             |
377 \------------------------------------------------------------*/
378 
379 # define RDS_FIG_REC_MASK         (long)(0x00008000)
380 
381 # define RDS_CON_EXTER_MASK       (long)(0x00001000)
382 # define RDS_CON_INTER_MASK       (long)(0x00002000)
383 # define RDS_REF_REF_MASK         (long)(0x00003000)
384 # define RDS_REF_CON_MASK         (long)(0x00004000)
385 # define RDS_TRANS_GATE_MASK      (long)(0x00005000)
386 
387 # define RDS_EXTRACT_TYPE_MASK    (long)(0x00007000)
388 
389 /*------------------------------------------------------------\
390 |                                                             |
391 |                      Extract Type Macros                    |
392 |                                                             |
393 \------------------------------------------------------------*/
394 
395 # define GetRdsExtractType( R )                               \
396                                                               \
397    ( (R)->FLAGS & RDS_EXTRACT_TYPE_MASK                       )
398 
399 # define SetRdsExtractType( R, E )                            \
400                                                               \
401    ( (R)->FLAGS = ((R)->FLAGS                                 \
402                                                               \
403         & ~RDS_EXTRACT_TYPE_MASK ) | (E)                      )
404 
405 /*------------------------------------------------------------\
406 |                                                             |
407 |                        Is Extract Type                      |
408 |                                                             |
409 \------------------------------------------------------------*/
410 
411 # define IsRdsTransGate( R )                                  \
412                                                               \
413   (((R)->FLAGS & RDS_EXTRACT_TYPE_MASK) == RDS_TRANS_GATE_MASK)
414 
415 # define IsRdsConExter( R )                                   \
416                                                               \
417   (((R)->FLAGS & RDS_EXTRACT_TYPE_MASK) == RDS_CON_EXTER_MASK )
418 
419 # define IsRdsConInter( R )                                   \
420                                                               \
421   (((R)->FLAGS & RDS_EXTRACT_TYPE_MASK) == RDS_CON_INTER_MASK )
422 
423 # define IsRdsRefRef( R )                                     \
424                                                               \
425   (((R)->FLAGS & RDS_EXTRACT_TYPE_MASK) == RDS_REF_REF_MASK   )
426 
427 # define IsRdsRefCon( R )                                     \
428                                                               \
429   (((R)->FLAGS & RDS_EXTRACT_TYPE_MASK) == RDS_REF_CON_MASK   )
430 
431 # define IsRdsFigRec( R )                                     \
432                                                               \
433   ((R)->FLAGS & RDS_FIG_REC_MASK                              )
434 
435 /*------------------------------------------------------------\
436 |                                                             |
437 |                        Set Extract Type                     |
438 |                                                             |
439 \------------------------------------------------------------*/
440 
441 # define SetRdsTransGate( R )                                 \
442                                                               \
443    ( (R)->FLAGS = ((R)->FLAGS                                 \
444                                                               \
445      & ~RDS_EXTRACT_TYPE_MASK ) | RDS_TRANS_GATE_MASK         )
446 
447 # define SetRdsConExter( R )                                  \
448                                                               \
449    ( (R)->FLAGS = ((R)->FLAGS                                 \
450                                                               \
451      & ~RDS_EXTRACT_TYPE_MASK ) | RDS_CON_EXTER_MASK          )
452 
453 # define SetRdsConInter( R )                                  \
454                                                               \
455    ( (R)->FLAGS = ((R)->FLAGS                                 \
456                                                               \
457      & ~RDS_EXTRACT_TYPE_MASK ) | RDS_CON_INTER_MASK          )
458 
459 # define SetRdsRefRef( R )                                    \
460                                                               \
461    ( (R)->FLAGS = ((R)->FLAGS                                 \
462                                                               \
463      & ~RDS_EXTRACT_TYPE_MASK ) | RDS_REF_REF_MASK            )
464 
465 # define SetRdsRefCon( R )                                    \
466                                                               \
467    ( (R)->FLAGS = ((R)->FLAGS                                 \
468                                                               \
469      & ~RDS_EXTRACT_TYPE_MASK ) | RDS_REF_CON_MASK            )
470 
471 # define SetRdsFigRec( R )                                    \
472                                                               \
473    ( (R)->FLAGS |= RDS_FIG_REC_MASK                           )
474 
475 # define ClearRdsFigRec( R )                                  \
476                                                               \
477    ( (R)->FLAGS &= ~RDS_FIG_REC_MASK                          )
478 
479 /*------------------------------------------------------------\
480 |                                                             |
481 |                          Debug Macros                       |
482 |                                                             |
483 \------------------------------------------------------------*/
484 
485 # define rdsbegin()                                           \
486                                                               \
487   do                                                          \
488   {                                                           \
489     if ( RDS_DEBUG_ON ) addrdsdebug(__LINE__, basename(__FILE__));       \
490   }                                                           \
491   while ( 0 )
492 
493 # define rdsend()                                             \
494                                                               \
495   do                                                          \
496   {                                                           \
497     if ( RDS_DEBUG_ON ) delrdsdebug();                        \
498   }                                                           \
499   while ( 0 )
500 
501 /*------------------------------------------------------------\
502 |                                                             |
503 |                            Types                            |
504 |                                                             |
505 \------------------------------------------------------------*/
506 /*------------------------------------------------------------\
507 |                                                             |
508 |                          Rds Rectangle                      |
509 |                                                             |
510 \------------------------------------------------------------*/
511 
512   typedef struct rdsrec_list
513 
514   {
515     struct rdsrec_list *NEXT;
516     long                X;
517     long                Y;
518     long                DX;
519     long                DY;
520     long                FLAGS;
521     char               *NAME;
522     void               *USER;
523 
524   } rdsrec_list;
525 
526 /*------------------------------------------------------------\
527 |                                                             |
528 |                          Rds Instance                       |
529 |                                                             |
530 \------------------------------------------------------------*/
531 
532   typedef struct rdsins_list
533 
534   {
535     struct rdsins_list  *NEXT;
536     char                *FIGNAME;
537     char                *INSNAME;
538     long                 X;
539     long                 Y;
540     char                 TRANSF;
541     unsigned short       SIZE;
542     char                 FLAGS;
543     struct rdsrec_list **LAYERTAB;
544     struct rdsrec_list **COURONNE;
545     void                *USER;
546 
547   } rdsins_list;
548 
549 /*------------------------------------------------------------\
550 |                                                             |
551 |                          Rds Figure                         |
552 |                                                             |
553 \------------------------------------------------------------*/
554 
555   typedef struct rdsfig_list
556 
557   {
558     struct rdsfig_list   *NEXT;
559     char                 *NAME;
560     struct rdsrec_list  **LAYERTAB;
561     struct rdsins_list   *INSTANCE;
562     char                  MODE;
563     unsigned short        SIZE;
564     char                  FLAGS;
565     char                 *FLAGTAB;
566     struct rdsrec_list  **BBOXTAB;
567     void                 *USER;
568 
569   } rdsfig_list;
570 
571 /*------------------------------------------------------------\
572 |                                                             |
573 |                          Rds Debug                          |
574 |                                                             |
575 \------------------------------------------------------------*/
576 
577   typedef struct rdsdebug_list
578   {
579     struct rdsdebug_list *NEXT;
580     int                   LINE;
581     char                 *NAME;
582 
583   } rdsdebug_list;
584 
585 /*------------------------------------------------------------\
586 |                                                             |
587 |                      Global Variables                       |
588 |                                                             |
589 \------------------------------------------------------------*/
590 /*------------------------------------------------------------\
591 |                                                             |
592 |                         Head List                           |
593 |                                                             |
594 \------------------------------------------------------------*/
595 
596   extern rdsfig_list   *HEAD_RDSFIG;
597   extern rdsdebug_list *HEAD_RDSDEBUG;
598 
599 /*------------------------------------------------------------\
600 |                                                             |
601 |                          Debug Mode                         |
602 |                                                             |
603 \------------------------------------------------------------*/
604 
605   extern char      RDS_DEBUG_ON;
606 
607 /*------------------------------------------------------------\
608 |                                                             |
609 |                             Name                            |
610 |                                                             |
611 \------------------------------------------------------------*/
612 
613   extern char    **RDS_LAYER_NAME;
614   extern char     *RDS_ALL_LAYER_NAME[ RDS_ALL_LAYER ];
615   extern char     *RDS_TRANSF_NAME [ RDS_MAX_TRANSF ];
616 
617 /*------------------------------------------------------------\
618 |                                                             |
619 |                       Dynamic Layers                        |
620 |                                                             |
621 \------------------------------------------------------------*/
622 
623   extern unsigned char  RDS_DYNAMIC_LAYER[ RDS_ALL_LAYER ];
624   extern unsigned char *RDS_STATIC_LAYER;
625   extern unsigned char  RDS_MAX_LAYER;
626 
627 /*------------------------------------------------------------\
628 |                                                             |
629 |                          Functions                          |
630 |                                                             |
631 \------------------------------------------------------------*/
632 /*------------------------------------------------------------\
633 |                                                             |
634 |                        Alloc Functions                      |
635 |                                                             |
636 \------------------------------------------------------------*/
637 
638   extern          char * rdsalloc __P((unsigned long Size, char Heap));
639   extern   rdsfig_list * allocrdsfig __P(());
640   extern   rdsins_list * allocrdsins __P(());
641   extern   rdsrec_list * allocrdsrec __P((unsigned long Size));
642   extern rdsdebug_list * allocrdsdebug __P(());
643 
644 /*------------------------------------------------------------\
645 |                                                             |
646 |                         Free Functions                      |
647 |                                                             |
648 \------------------------------------------------------------*/
649 
650   extern           void  rdsfree __P((char *Pointer, unsigned int Size));
651   extern           void  freerdsfig __P((rdsfig_list *Figure));
652   extern           void  freerdsins __P((rdsins_list *Instance));
653   extern           void  freerdsrec __P((rdsrec_list *Rectangle, unsigned int Size));
654   extern           void  freerdsdebug __P((rdsdebug_list *Debug));
655 
656 /*------------------------------------------------------------\
657 |                                                             |
658 |                          Add Functions                      |
659 |                                                             |
660 \------------------------------------------------------------*/
661 
662   extern   rdsrec_list * addrdsfigrec __P((rdsfig_list *Figure, char *Name, char Layer, long X, long Y, long Dx, long Dy));
663   extern   rdsrec_list * addrdsinsrec __P((rdsins_list *Instance, char *Name, char Layer, long X, long Y, long Dx, long Dy));
664   extern   rdsins_list * addrdsins __P((rdsfig_list *Figure, char *Model, char *Name, char Sym, long X, long Y));
665   extern   rdsfig_list * addrdsfig __P((char *Name, unsigned short Size));
666   extern           void  addrdsdebug __P((int Line, char *File));
667 
668 /*------------------------------------------------------------\
669 |                                                             |
670 |                           Del Functions                     |
671 |                                                             |
672 \------------------------------------------------------------*/
673 
674   extern            int  delrdsfigrec __P((rdsfig_list *Figure, rdsrec_list *Rectangle));
675   extern            int  delrdsinsrec __P((rdsins_list *Instance, rdsrec_list *Rectangle));
676   extern            int  delrdsins __P((rdsfig_list *Figure, char *Name));
677   extern            int  delrdsfig __P((char *Name));
678   extern           void  delrdsdebug __P(());
679 
680 /*------------------------------------------------------------\
681 |                                                             |
682 |                           View Functions                    |
683 |                                                             |
684 \------------------------------------------------------------*/
685 
686   extern           void  viewrdsrec __P((rdsrec_list *Rectangle));
687   extern           void  viewrdsins __P((rdsins_list *Instance));
688   extern           void  viewrdsfig __P((rdsfig_list *Figure));
689 
690 /*------------------------------------------------------------\
691 |                                                             |
692 |                           Debug Functions                   |
693 |                                                             |
694 \------------------------------------------------------------*/
695 
696   extern           void  rdsdebug __P(());
697 
698 # endif
699