2 * This file is part of the Alliance CAD System
3 * Copyright (C) Laboratoire LIP6 - D\8epartement ASIM
4 * Universite Pierre et Marie Curie
6 * Home page : http://www-asim.lip6.fr/alliance/
7 * E-mail support : mailto:alliance-support@asim.lip6.fr
9 * This library is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU Library General Public License as published
11 * by the Free Software Foundation; either version 2 of the License, or (at
12 * your option) any later version.
14 * Alliance VLSI CAD System is distributed in the hope that it will be
15 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
17 * Public License for more details.
19 * You should have received a copy of the GNU General Public License along
20 * with the GNU C Library; see the file COPYING. If not, write to the Free
21 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 /* 10/26/95 Cone Netlist Structure functions: branch.c */
28 static void *addbranchpage();
29 static branch_list
*getfreebranch();
31 /* define number of branches per page */
32 #define BRANCHESPERPAGE 200
34 static chain_list
*BRANCHPAGES
; /* chain list of branch pages */
35 static int PAGEBRANCHINDEX
= 0; /* branch index in current page */
36 static branch_list
*FREEBRANCHLIST
; /* list of free branches in current page */
37 static branch_list
*FREEDBRANCHLIST
; /* list of freed branches */
39 /*============================================================================*
40 | function initbranchmem(); |
41 | initialize branch memory structure |
42 *============================================================================*/
46 branch_list
*ptbranch
;
48 if (CNS_TRACE_MODE
>= CNS_TRACE
)
49 (void) printf("TRA_cns initbranchmem\n");
51 ptbranch
= (branch_list
*) mbkalloc(BRANCHESPERPAGE
* (sizeof(branch_list
)));
52 BRANCHPAGES
= addchain((chain_list
*) NULL
, (void *) ptbranch
);
53 FREEDBRANCHLIST
= NULL
;
55 FREEBRANCHLIST
= ptbranch
;
60 /*============================================================================*
61 | function addbranchpage(); |
62 | add a new branch page |
63 *============================================================================*/
67 branch_list
*ptbranch
;
69 if (CNS_TRACE_MODE
>= CNS_TRACE
)
70 (void) printf("TRA_cns addbranchpage\n");
72 ptbranch
= (branch_list
*) mbkalloc(BRANCHESPERPAGE
* (sizeof(branch_list
)));
73 BRANCHPAGES
= addchain(BRANCHPAGES
, (void *) ptbranch
);
75 FREEBRANCHLIST
= ptbranch
;
80 /*============================================================================*
81 | function getfreebranch(); |
83 *============================================================================*/
87 branch_list
*ptbranch
;
89 if (CNS_TRACE_MODE
>= CNS_TRACE
)
90 (void) printf("TRA_cns getfreebranch in\n");
92 if (FREEDBRANCHLIST
!= NULL
) {
93 ptbranch
= FREEDBRANCHLIST
;
94 FREEDBRANCHLIST
= FREEDBRANCHLIST
->NEXT
;
95 ptbranch
->NEXT
= NULL
;
96 if (CNS_TRACE_MODE
>= CNS_TRACE
)
97 (void) printf("TRA_cns getfreebranch out\n");
100 else if (PAGEBRANCHINDEX
< BRANCHESPERPAGE
) {
103 FREEBRANCHLIST
->NEXT
= NULL
;
104 if (CNS_TRACE_MODE
>= CNS_TRACE
)
105 (void) printf("TRA_cns getfreebranch out\n");
106 return (FREEBRANCHLIST
);
110 FREEBRANCHLIST
->NEXT
= NULL
;
111 if (CNS_TRACE_MODE
>= CNS_TRACE
)
112 (void) printf("TRA_cns getfreebranch out\n");
113 return (FREEBRANCHLIST
);
117 /*============================================================================*
118 | function freebranch(); |
120 *============================================================================*/
123 branch_list
*ptbranch
;
128 if (CNS_TRACE_MODE
>= CNS_TRACE
)
129 (void) printf("TRA_cns freebranch in\n");
131 if (ptbranch
== NULL
) {
132 (void) fflush(stdout
);
133 (void) fprintf(stderr
, "*** cns error ***");
134 (void) fprintf(stderr
, " freebranch() impossible: NULL pointer !\n");
135 if (CNS_TRACE_MODE
>= CNS_TRACE
)
136 (void) printf("TRA_cns freebranch out\n");
140 if ((ptlklist
= ptbranch
->LINK
) != NULL
)
141 freelklist(ptlklist
);
142 ptbranch
->NEXT
= FREEDBRANCHLIST
;
143 FREEDBRANCHLIST
= ptbranch
;
145 if (CNS_TRACE_MODE
>= CNS_TRACE
)
146 (void) printf("TRA_cns freebranch out\n");
151 /*============================================================================*
152 | function freebrlist(); |
153 | free a branch list |
154 *============================================================================*/
157 branch_list
*ptbrlist
;
160 branch_list
*ptbranch
;
163 if (CNS_TRACE_MODE
>= CNS_TRACE
)
164 (void) printf("TRA_cns freebrlist in\n");
166 if (ptbrlist
== NULL
) {
167 (void) fflush(stdout
);
168 (void) fprintf(stderr
, "*** cns error ***");
169 (void) fprintf(stderr
, " freebrlist() impossible: NULL pointer !\n");
170 if (CNS_TRACE_MODE
>= CNS_TRACE
)
171 (void) printf("TRA_cns freebrlist out\n");
175 for (ptbranch
= ptbrlist
; ptbranch
->NEXT
!= NULL
; ptbranch
= ptbranch
->NEXT
) {
176 if ((ptlklist
= ptbranch
->LINK
) != NULL
)
177 freelklist(ptlklist
);
179 if ((ptlklist
= ptbranch
->LINK
) != NULL
)
180 freelklist(ptlklist
);
181 ptbranch
->NEXT
= FREEDBRANCHLIST
;
182 FREEDBRANCHLIST
= ptbrlist
;
184 if (CNS_TRACE_MODE
>= CNS_TRACE
)
185 (void) printf("TRA_cns freebrlist out\n");
190 /*============================================================================*
191 | function addbranch(); |
192 | add an element to a branch list |
193 *============================================================================*/
195 addbranch(ptbranchhead
, type
, ptlink
)
196 branch_list
*ptbranchhead
;
201 branch_list
*ptbranch
;
203 if (CNS_TRACE_MODE
>= CNS_TRACE
)
204 (void) printf("TRA_cns addbranch in\n");
206 ptbranch
= getfreebranch();
207 ptbranch
->NEXT
= ptbranchhead
;
208 ptbranch
->TYPE
= type
;
209 ptbranch
->LINK
= ptlink
;
210 ptbranch
->USER
= NULL
;
212 if (CNS_TRACE_MODE
>= CNS_TRACE
)
213 (void) printf("TRA_cns addbranch out\n");
217 /*============================================================================*
218 | function addconebranch(); |
219 | add a branch to a cone and update its INCONE field and the OUTCONE fields |
220 | of the respective driving cones. WARNING: the cone's information on |
221 | parallel branches is not updated. |
222 *============================================================================*/
224 addconebranch(ptcone
, ptconebr
, type
, ptlink
)
226 branch_list
*ptconebr
;
231 branch_list
*ptbranch
;
233 lotrs_list
*ptlotrs1
;
234 ptype_list
*ptptype1
;
237 if (CNS_TRACE_MODE
>= CNS_TRACE
)
238 (void) printf("TRA_cns addconebranch in\n");
240 ptbranch
= getfreebranch();
241 ptbranch
->NEXT
= ptconebr
;
242 ptbranch
->TYPE
= type
;
243 ptbranch
->LINK
= ptlink
;
244 ptbranch
->USER
= NULL
;
247 for (ptlink1
= ptlink
; ptlink1
!= NULL
; ptlink1
= ptlink1
->NEXT
) {
248 if ((ptlink1
->TYPE
& CNS_ACTIVE
) == CNS_ACTIVE
) {
249 ptlotrs1
= ptlink1
->ULINK
.LOTRS
;
250 if ((ptptype1
= getptype(ptlotrs1
->USER
, (long) CNS_DRIVINGCONE
)) != NULL
) {
251 ptcone1
= (cone_list
*) ptptype1
->DATA
;
252 addincone(ptcone
, (long) CNS_CONE
, (void *) ptcone1
);
253 addoutcone(ptcone1
, (long) CNS_CONE
, (void *) ptcone
);
256 (void) fflush(stdout
);
257 (void) fprintf(stderr
, "*** cns error ***");
258 (void) fprintf(stderr
, " addconebranch() impossible: no cone drives transistor !\n");
259 if (CNS_TRACE_MODE
>= CNS_TRACE
)
260 (void) printf("TRA_cns addconebranch out\n");
264 else if ((ptlink1
->TYPE
& CNS_EXT
) == CNS_EXT
) {
265 addincone(ptcone
, (long) CNS_EXT
, (void *) ptlink1
->ULINK
.LOCON
);
267 else if ((ptlink1
->TYPE
& CNS_PASSIVE
) != CNS_PASSIVE
) {
268 (void) fflush(stdout
);
269 (void) fprintf(stderr
, "*** cns error ***");
270 (void) fprintf(stderr
, " addconebranch() impossible: unknown link type !\n");
271 if (CNS_TRACE_MODE
>= CNS_TRACE
)
272 (void) printf("TRA_cns addconebranch out\n");
277 if (CNS_TRACE_MODE
>= CNS_TRACE
)
278 (void) printf("TRA_cns addconebranch out\n");
281 /*============================================================================*
282 | function delbranch(); |
283 | delete an element from a branch list and free that element from memory |
284 *============================================================================*/
286 delbranch(ptbranchhead
, ptbranch2del
)
287 branch_list
*ptbranchhead
;
288 branch_list
*ptbranch2del
;
292 branch_list
*ptbranch
;
294 branch_list
*ptbranch2sav
;
296 if (CNS_TRACE_MODE
>= CNS_TRACE
)
297 (void) printf("TRA_cns delbranch in\n");
299 if ((ptbranchhead
== NULL
) || (ptbranch2del
== NULL
)) {
300 (void) fflush(stdout
);
301 (void) fprintf(stderr
, "*** cns error ***");
302 (void) fprintf(stderr
, " delbranch() impossible: NULL pointer !\n");
303 if (CNS_TRACE_MODE
>= CNS_TRACE
)
304 (void) printf("TRA_cns delbranch out\n");
308 if ((ptbranch2del
->TYPE
& CNS_PARALLEL
) == CNS_PARALLEL
) {
309 if ((ptbranch2del
->TYPE
& CNS_PARALLEL_INS
) != CNS_PARALLEL_INS
)
313 if (ptbranch2del
== ptbranchhead
) {
314 ptbranch
= ptbranchhead
->NEXT
;
315 ptbranchhead
->NEXT
= NULL
;
316 freebranch(ptbranchhead
);
318 ptchain
= parabrs(ptbranch
);
319 if (CNS_TRACE_MODE
>= CNS_TRACE
)
320 (void) printf("TRA_cns delbranch out\n");
324 for (ptbranch
= ptbranchhead
; ptbranch
; ptbranch
= ptbranch
->NEXT
) {
325 if (ptbranch
== ptbranch2del
) {
328 ptbranch2sav
= ptbranch
;
330 if (ptbranch
!= NULL
) {
331 ptbranch2sav
->NEXT
= ptbranch
->NEXT
;
332 ptbranch2del
->NEXT
= NULL
;
333 freebranch(ptbranch2del
);
336 ptchain
= parabrs(ptbranchhead
);
337 if (CNS_TRACE_MODE
>= CNS_TRACE
)
338 (void) printf("TRA_cns delbranch out\n");
339 return (ptbranchhead
);
343 /*============================================================================*
344 | function delconebranch(); |
345 | delete a branch from a cone and update its INCONE field and the OUTCONE |
346 | fields of the respective driving cones |
347 *============================================================================*/
349 delconebranch(ptcone
, ptconebr
, ptbranch2del
)
351 branch_list
*ptconebr
;
352 branch_list
*ptbranch2del
;
356 branch_list
*ptbranch
;
357 branch_list
*value
= NULL
;
358 branch_list
*ptbranch2sav
;
360 lotrs_list
*ptlotrs1
;
361 ptype_list
*ptptype1
;
364 if (CNS_TRACE_MODE
>= CNS_TRACE
)
365 (void) printf("TRA_cns delconebranch in\n");
367 if ((ptconebr
== NULL
) || (ptbranch2del
== NULL
)) {
368 (void) fflush(stdout
);
369 (void) fprintf(stderr
, "*** cns error ***");
370 (void) fprintf(stderr
, " delconebranch() impossible: NULL pointer !\n");
371 if (CNS_TRACE_MODE
>= CNS_TRACE
)
372 (void) printf("TRA_cns delconebranch out\n");
376 if ((ptbranch2del
->TYPE
& CNS_PARALLEL
) == CNS_PARALLEL
) {
377 if ((ptbranch2del
->TYPE
& CNS_PARALLEL_INS
) != CNS_PARALLEL_INS
)
381 if (ptbranch2del
== ptconebr
) {
382 ptbranch
= ptconebr
->NEXT
;
383 ptconebr
->NEXT
= NULL
;
388 for (ptbranch
= ptconebr
; ptbranch
; ptbranch
= ptbranch
->NEXT
) {
389 if (ptbranch
== ptbranch2del
) {
392 ptbranch2sav
= ptbranch
;
394 if (ptbranch
!= NULL
) {
395 ptbranch2sav
->NEXT
= ptbranch
->NEXT
;
396 ptbranch2del
->NEXT
= NULL
;
397 value
= ptbranch2del
;
401 for (ptlink1
= ptbranch2del
->LINK
; ptlink1
!= NULL
; ptlink1
= ptlink1
->NEXT
) {
402 if ((ptlink1
->TYPE
& CNS_ACTIVE
) == CNS_ACTIVE
) {
403 ptlotrs1
= ptlink1
->ULINK
.LOTRS
;
404 if ((ptptype1
= getptype(ptlotrs1
->USER
, (long) CNS_DRIVINGCONE
)) != NULL
) {
405 ptcone1
= (cone_list
*) ptptype1
->DATA
;
406 if (checkincone(ptcone
, (branch_list
*) NULL
, (link_list
*) NULL
, (void *) ptcone1
) == 0) {
407 delincone(ptcone
, 1, (void *) ptcone1
);
408 deloutcone(ptcone1
, 1, (void *) ptcone
);
412 (void) fflush(stdout
);
413 (void) fprintf(stderr
, "*** cns error ***");
414 (void) fprintf(stderr
, " addconebranch() impossible: no cone drives transistor !\n");
415 if (CNS_TRACE_MODE
>= CNS_TRACE
)
416 (void) printf("TRA_cns addconebranch out\n");
420 else if ((ptlink1
->TYPE
& CNS_EXT
) == CNS_EXT
) {
421 if (checkincone(ptcone
, (branch_list
*) NULL
, (link_list
*) NULL
, (void *) ptlink1
->ULINK
.LOCON
) == 0) {
422 delincone(ptcone
, 1, (void *) ptlink1
->ULINK
.LOCON
);
425 else if ((ptlink1
->TYPE
& CNS_PASSIVE
) != CNS_PASSIVE
) {
426 (void) fflush(stdout
);
427 (void) fprintf(stderr
, "*** cns error ***");
428 (void) fprintf(stderr
, " delconebranch() impossible: unknown link type !\n");
429 if (CNS_TRACE_MODE
>= CNS_TRACE
)
430 (void) printf("TRA_cns delconebranch out\n");
439 if (CNS_TRACE_MODE
>= CNS_TRACE
)
440 (void) printf("TRA_cns delconebranch out\n");
443 /*============================================================================*
444 | function appendbranch(); |
445 | chain two branch lists. WARNING: no consistency check |
446 *============================================================================*/
448 appendbranch(ptbranch1
, ptbranch2
)
449 branch_list
*ptbranch1
;
450 branch_list
*ptbranch2
;
453 branch_list
*ptbranch
= NULL
;
455 if (CNS_TRACE_MODE
>= CNS_TRACE
)
456 (void) printf("TRA_cns appendbranch\n");
458 if (ptbranch1
== NULL
) {
462 for (ptbranch
= ptbranch1
; ptbranch
->NEXT
!= NULL
; ptbranch
= ptbranch
->NEXT
) {
464 ptbranch
->NEXT
= ptbranch2
;
469 /*============================================================================*
470 | function appendconebranch(); |
471 | chain a branch list to that of a cone and update its INCONE field |
472 *============================================================================*/
474 appendconebranch(ptcone
, ptconebr
, ptbranch2
)
476 branch_list
*ptconebr
;
477 branch_list
*ptbranch2
;
480 branch_list
*ptbranch
;
483 if (CNS_TRACE_MODE
>= CNS_TRACE
)
484 (void) printf("TRA_cns appendconebranch in\n");
486 if (ptconebr
== NULL
) {
487 ptconebr
= ptbranch2
;
490 for (ptbranch
= ptconebr
; ptbranch
->NEXT
!= NULL
; ptbranch
= ptbranch
->NEXT
);
491 ptbranch
->NEXT
= ptbranch2
;
494 for (ptbranch
= ptbranch2
; ptbranch
->NEXT
!= NULL
; ptbranch
= ptbranch
->NEXT
) {
495 for (ptlink
= ptbranch
->LINK
; ptlink
!= NULL
; ptlink
= ptlink
->NEXT
) {
496 if ((ptlink
->TYPE
& CNS_ACTIVE
) == CNS_ACTIVE
) {
497 addincone(ptcone
, (long) CNS_CONE
, (void *) ptlink
->ULINK
.LOTRS
->GRID
);
499 else if ((ptlink
->TYPE
& CNS_EXT
) == CNS_EXT
) {
500 addincone(ptcone
, (long) CNS_EXT
, (void *) ptlink
->ULINK
.LOCON
);
502 else if ((ptlink
->TYPE
& CNS_PASSIVE
) != CNS_PASSIVE
) {
503 (void) fflush(stdout
);
504 (void) fprintf(stderr
, "*** cns error ***");
505 (void) fprintf(stderr
, " appendbranch() impossible: unknown link type !\n");
506 if (CNS_TRACE_MODE
>= CNS_TRACE
)
507 (void) printf("TRA_cns appendconebranch out\n");
513 if (CNS_TRACE_MODE
>= CNS_TRACE
)
514 (void) printf("TRA_cns appendconebranch out\n");
517 /*============================================================================*
518 | function viewbranch(); |
519 | display the content of a given branch structure |
520 *============================================================================*/
522 viewbranch(ptbranch
, depth
)
523 branch_list
*ptbranch
;
527 char *margin
= (char *) mbkalloc(80);
532 if (CNS_TRACE_MODE
>= CNS_TRACE
)
533 (void) printf("TRA_cns viewbranch in\n");
535 if (ptbranch
== NULL
) {
536 (void) fflush(stdout
);
537 (void) fprintf(stderr
, "*** cns error ***");
538 (void) fprintf(stderr
, " viewbranch() impossible: NULL pointer !\n");
539 if (CNS_TRACE_MODE
>= CNS_TRACE
)
540 (void) printf("TRA_cns viewbranch out\n");
548 margin
= strcpy(margin
, " ");
549 while (k
<= CNS_VIEW_LEVEL
) {
550 margin
= strcat(margin
, " ");
555 printf("%sbranch->NEXT = 0x%lx\n", margin
, (unsigned long)ptbranch
->NEXT
);
556 printf("%sbranch->TYPE = 0x%lx\n", margin
, (unsigned long)ptbranch
->TYPE
);
557 printf("%sbranch->LINK = 0x%lx\n", margin
, (unsigned long)ptbranch
->LINK
);
558 if ((depth
>= 1) && (ptbranch
->LINK
!= NULL
)) {
559 for (ptlink
= ptbranch
->LINK
; ptlink
!= NULL
; ptlink
= ptlink
->NEXT
) {
560 viewlink(ptlink
, depth
- 1);
563 printf("%sbranch->USER = 0x%lx\n", margin
, (unsigned long)ptbranch
->USER
);
564 if ((depth
>= 1) && (ptbranch
->USER
!= NULL
)) {
565 for (ptptype
= ptbranch
->USER
; ptptype
!= NULL
; ptptype
= ptptype
->NEXT
) {
566 viewcnsptype(ptptype
);
573 mbkfree((void *) margin
);
575 if (CNS_TRACE_MODE
>= CNS_TRACE
)
576 (void) printf("TRA_cns viewbranch out\n");
579 /*============================================================================*
580 | function parabrs(); |
581 | identify and type parallel branches within input list and return a chain |
582 | list that contains chain lists of parallel branches |
583 *============================================================================*/
586 branch_list
*ptbranch
;
589 branch_list
*ptbranch1
;
590 branch_list
*ptbranch2
;
591 chain_list
*ptchain1
;
593 chain_list
*ptchain
= NULL
;
595 if (CNS_TRACE_MODE
>= CNS_TRACE
)
596 (void) printf("TRA_cns parabrs in\n");
598 for (ptbranch1
= ptbranch
; ptbranch1
!= NULL
; ptbranch1
= ptbranch1
->NEXT
) {
599 ptbranch1
->TYPE
&= ~CNS_PARALLEL_INS
;
601 for (ptbranch1
= ptbranch
; ptbranch1
!= NULL
; ptbranch1
= ptbranch1
->NEXT
) {
602 if ((ptbranch1
->TYPE
& CNS_PARALLEL
) == CNS_PARALLEL
)
605 if ((ptbranch2
= ptbranch1
->NEXT
) != NULL
) {
606 ptchain1
= addchain((chain_list
*) NULL
, (void *) ptbranch1
);
607 for (ptbranch2
= ptbranch1
->NEXT
; ptbranch2
!= NULL
; ptbranch2
= ptbranch2
->NEXT
) {
608 if (testparabrs(ptbranch1
, ptbranch2
)) {
610 ptbranch2
->TYPE
|= CNS_PARALLEL_INS
;
611 ptchain1
= addchain(ptchain1
, (void *) ptbranch2
);
614 if (ptchain1
->NEXT
!= NULL
) {
615 ptchain
= addchain(ptchain
, (void *) ptchain1
);
620 ptbranch1
->TYPE
|= CNS_PARALLEL
;
625 if (CNS_TRACE_MODE
>= CNS_TRACE
)
626 (void) printf("TRA_cns parabrs out\n");
631 /*============================================================================*
632 | function testparabrs(); |
633 | test to see if the two input branches are parallel and return 1 if it is |
634 | the case. WARNING: this function may be eroneous if the two branches are |
635 | from two different cones |
636 *============================================================================*/
638 testparabrs(ptbranch1
, ptbranch2
)
639 branch_list
*ptbranch1
;
640 branch_list
*ptbranch2
;
646 lotrs_list
*ptlotrs1
;
647 lotrs_list
*ptlotrs2
;
648 ptype_list
*ptptype1
;
649 ptype_list
*ptptype2
;
651 if (CNS_TRACE_MODE
>= CNS_TRACE
)
652 (void) printf("TRA_cns testparabrs\n");
654 ptlink1
= ptbranch1
->LINK
;
655 ptlink2
= ptbranch2
->LINK
;
657 while ((ptlink1
!= NULL
) && (ptlink2
!= NULL
)) {
658 if (((ptlink1
->TYPE
& CNS_EXT
) == CNS_EXT
) && (ptlink1
->TYPE
== ptlink2
->TYPE
)) {
659 if (ptlink1
->ULINK
.LOCON
!= ptlink2
->ULINK
.LOCON
)
664 else if (ptlink1
->TYPE
== ptlink2
->TYPE
) {
665 if ((ptlink1
->TYPE
& CNS_ACTIVE
) == CNS_ACTIVE
) {
666 ptlotrs1
= ptlink1
->ULINK
.LOTRS
;
667 ptlotrs2
= ptlink2
->ULINK
.LOTRS
;
668 if (((ptptype1
= getptype(ptlotrs1
->USER
, (long) CNS_DRIVINGCONE
)) != NULL
) && ((ptptype2
= getptype(ptlotrs2
->USER
, (long) CNS_DRIVINGCONE
)) != NULL
)) {
669 if (ptptype1
->DATA
!= ptptype2
->DATA
)
682 ptlink1
= ptlink1
->NEXT
;
683 ptlink2
= ptlink2
->NEXT
;
686 if ((ptlink1
!= NULL
) || (ptlink2
!= NULL
))
692 /*============================================================================*
693 | function brlotrsnum(); |
694 | returns the maximum number of series transistors found in the input |
696 *============================================================================*/
699 branch_list
*ptbrlist
;
702 branch_list
*ptbranch
;
706 if (CNS_TRACE_MODE
>= CNS_TRACE
)
707 (void) printf("TRA_cns brlotrsnum in\n");
709 for (ptbranch
= ptbrlist
; ptbranch
!= NULL
; ptbranch
= ptbranch
->NEXT
) {
710 if ((ptbranch
->TYPE
& CNS_PARALLEL_INS
) == CNS_PARALLEL_INS
)
712 if ((number
= lotrsnum(ptbranch
->LINK
)) > result
)
716 if (CNS_TRACE_MODE
>= CNS_TRACE
)
717 (void) printf("TRA_cns brlotrsnum out\n");