8 #include "ttv_API_util.h"
10 static chain_list
*findtr(branch_list
*br
, long typemask
, char *namein
, chain_list
*cl
)
16 for (lk
=br
->LINK
; lk
!=NULL
; lk
=lk
->NEXT
)
18 if ((lk
->TYPE
& CNS_EXT
) != CNS_EXT
&&
19 (lk
->ULINK
.LOTRS
->TYPE
& typemask
)==typemask
&&
20 lk
->ULINK
.LOTRS
->GRID
->SIG
->NAMECHAIN
->DATA
==namein
&&
21 lk
->ULINK
.LOTRS
->TRNAME
!=NULL
24 for (ch
=cl
; ch
!=NULL
; ch
=ch
->NEXT
)
25 if (ch
->DATA
==lk
->ULINK
.LOTRS
) break;
26 if (ch
==NULL
) cl
=addchain(cl
, lk
->ULINK
.LOTRS
);
34 static chain_list
*ttv_cnsgettransistor(cnsfig_list
*cf
, char *namein
, char dirin
, char *nameout
, char dirout
, int hz
)
37 long transistortypemask
;
38 branch_list
*brtosearch
;
41 if (tolower(dirin
)!='u' && tolower(dirin
)!='d')
43 avt_errmsg(TTV_API_ERRMSG
, "001", AVT_ERROR
, dirin
);
44 /* avt_error("ttvapi", 4, AVT_ERR, "invalid direction for input signal '%c', function call ignored.\n", dirin);
45 avt_error("ttvapi", 4, AVT_INFO, "a direction should be 'u' or 'd'.\n");*/
48 if (tolower(dirout
)!='u' && tolower(dirout
)!='d')
50 avt_errmsg(TTV_API_ERRMSG
, "001", AVT_ERROR
, dirout
);
51 /* avt_error("ttvapi", 4, AVT_ERR, "invalid direction for output signal '%c', function call ignored.\n", dirout);
52 avt_error("ttvapi", 4, AVT_INFO, "a direction should be 'u' or 'd'.\n");*/
56 if ((cn
=getcone(cf
, 0, nameout
))==NULL
) return NULL
;
61 if (dirin
=='u') transistortypemask
=TRANSN
; else transistortypemask
=TRANSP
;
65 // transistor bloquant
66 if (dirin
=='u') transistortypemask
=TRANSP
; else transistortypemask
=TRANSN
;
69 if (dirout
=='u') brtosearch
=cn
->BRVDD
; else brtosearch
=cn
->BRVSS
;
71 cl
=findtr(cn
->BREXT
, transistortypemask
, namein
, NULL
);
72 return findtr(brtosearch
, transistortypemask
, namein
, cl
);
75 chain_list
*__ttv_GetCrossedTransistors(ttvfig_list
*tvf
, char *namein
, char dirin
, char *nameout
, char dirout
, int hzflag
)
80 cf
=ttvutil_cnsload(tvf
->INFO
->FIGNAME
, getloadedinffig(tvf
->INFO
->FIGNAME
));
82 if (cf
==NULL
) return NULL
;
84 cl
=ttv_cnsgettransistor(cf
, namealloc(namein
), dirin
, namealloc(nameout
), dirout
, hzflag
);
87 namein
=mbk_devect(namein
, "[", "]");
88 nameout
=mbk_devect(nameout
, "[", "]");
89 cl
=ttv_cnsgettransistor(cf
, namein
, dirin
, nameout
, dirout
, hzflag
);
94 chain_list
*ttv_GetCrossedTransistorNames(ttvfig_list
*tvf
, char *namein
, char dirin
, char *nameout
, char dirout
, int hzflag
)
97 cl
=__ttv_GetCrossedTransistors(tvf
, namein
, dirin
, nameout
, dirout
, hzflag
);
98 for (ch
=cl
; ch
!=NULL
; ch
=ch
->NEXT
)
100 ch
->DATA
=((lotrs_list
*)ch
->DATA
)->TRNAME
;