10 #define API_USE_REAL_TYPES
14 static char *getwhere()
16 static char where
[1024];
17 sprintf(where
,"%s: ",gen_info());
22 fclMarkCorrespondingSignal(char *signame
, char *marks
)
34 if ((ifl
=getloadedinffig(gns_GetWorkingFigureName()))==NULL
)
35 ifl
=addinffig(gns_GetWorkingFigureName());
37 signal
= gns_GetCorrespondingSignal(signame
);
38 if (signal
== NULL
) return 0;
39 copymarks
= mbkstrdup(marks
);
41 while ((pttok
= strtok(ptr
, "+")) != NULL
) {
43 typeconst
= min_namealloc(pttok
);
44 for (i
=0; i
<NUMNETTYPES
; i
++) {
45 if (nettype_names
[i
] == typeconst
) type
|= nettype_values
[i
];
48 avt_errmsg(FCL_API_ERRMSG
, "001", AVT_ERROR
, pttok
);
49 //printf("fclMarkSignal: Illegal markings\n");
54 if ((type
& FCL_VSS
) == FCL_VSS
) signal
->TYPE
= CNS_SIGVSS
;
55 if ((type
& FCL_VDD
) == FCL_VDD
) signal
->TYPE
= CNS_SIGVDD
;
56 if ((type
& FCL_BYPASS
) == FCL_BYPASS
)
58 inf_AddString(ifl
, INF_LOADED_LOCATION
, signal
->NAMECHAIN
->DATA
, INF_BYPASS
, INF_ALL
, getwhere());
59 //infAddList (ifl, INF_LOADED_LOCATION, signal->NAMECHAIN->DATA, INF_BYPASS, 'd',NULL, getwhere());
61 if ((ptuser
= getptype(signal
->USER
, FCL_TRANSFER_PTYPE
)) != NULL
) {
62 ptuser
->DATA
= (void *)((long)ptuser
->DATA
| type
);
64 else signal
->USER
= addptype(signal
->USER
, FCL_TRANSFER_PTYPE
, (void *)type
);
69 fclMarkCorrespondingTransistor(char *transname
, char *marks
)
72 lotrs_list
*transistor
;
80 transistor
= gns_GetCorrespondingTransistor(transname
);
81 if (transistor
== NULL
) {
82 avt_errmsg(FCL_API_ERRMSG
, "002", AVT_ERROR
, transname
);
83 //printf("fclMarkTransistor: transistor '%s' does not exist\n", transname);
86 copymarks
= mbkstrdup(marks
);
88 while ((pttok
= strtok(ptr
, "+")) != NULL
) {
90 typeconst
= min_namealloc(pttok
);
91 for (i
=0; i
<NUMTRANSTYPES
; i
++) {
92 if (transtype_names
[i
] == typeconst
) type
|= transtype_values
[i
];
95 avt_errmsg(FCL_API_ERRMSG
, "001", AVT_ERROR
, pttok
);
96 // printf("fclMarkTransistor: Illegal markings\n");
100 if ((ptuser
= getptype(transistor
->USER
, FCL_TRANSFER_PTYPE
)) != NULL
) {
101 ptuser
->DATA
= (void *)((long)ptuser
->DATA
| type
);
103 else transistor
->USER
= addptype(transistor
->USER
, FCL_TRANSFER_PTYPE
, (void *)type
);
108 fclOrientCorrespondingSignal(char *signame
, int level
)
112 int oldlevel
, newlevel
;
114 signal
= gns_GetCorrespondingSignal(signame
);
115 if (signal
== NULL
) return;
116 ptuser
= getptype(signal
->USER
, YAG_VAL_S_PTYPE
);
117 if (ptuser
!= NULL
) {
118 oldlevel
= (unsigned int)((long)ptuser
->DATA
);
119 if (level
> oldlevel
) {
121 avt_errmsg(FCL_API_ERRMSG
, "003", AVT_ERROR
, signame
, newlevel
);
122 // printf("fclOrientSignal: multiple orientation on '%s', resolved to %u\n", signame, newlevel);
124 else newlevel
= oldlevel
;
125 ptuser
->DATA
= (void *)((long)newlevel
);
128 signal
->USER
= addptype(signal
->USER
, YAG_VAL_S_PTYPE
, (void *)((long)level
));
133 fclCmpUpConstraint(chain_list
*siglist
)
136 chain_list
*newchain
= NULL
;
140 if ((ifl
=getloadedinffig(gns_GetWorkingFigureName()))==NULL
)
141 ifl
=addinffig(gns_GetWorkingFigureName());
143 if (siglist
== NULL
) return;
144 for (ptchain
= siglist
; ptchain
; ptchain
= ptchain
->NEXT
) {
145 ptlosig
= (losig_list
*)ptchain
->DATA
;
146 newchain
= addchain(newchain
, ptlosig
->NAMECHAIN
->DATA
);
148 inf_AddList(INF_FIG
, INF_LOADED_LOCATION
, INF_CMPU
, "", newchain
, getwhere());
149 // ifl->LOADED.INF_CMPU = addchain(ifl->LOADED.INF_CMPU, newchain);
153 fclCmpDnConstraint(chain_list
*siglist
)
156 chain_list
*newchain
= NULL
;
160 if ((ifl
=getloadedinffig(gns_GetWorkingFigureName()))==NULL
)
161 ifl
=addinffig(gns_GetWorkingFigureName());
163 if (siglist
== NULL
) return;
164 for (ptchain
= siglist
; ptchain
; ptchain
= ptchain
->NEXT
) {
165 ptlosig
= (losig_list
*)ptchain
->DATA
;
166 newchain
= addchain(newchain
, ptlosig
->NAMECHAIN
->DATA
);
168 inf_AddList(INF_FIG
, INF_LOADED_LOCATION
, INF_CMPD
, "", newchain
, getwhere());
169 // ifl->LOADED.INF_CMPD = addchain(ifl->LOADED.INF_CMPD, newchain);
173 fclMuxUpConstraint(chain_list
*siglist
)
176 chain_list
*newchain
= NULL
;
180 if ((ifl
=getloadedinffig(gns_GetWorkingFigureName()))==NULL
)
181 ifl
=addinffig(gns_GetWorkingFigureName());
183 if (siglist
== NULL
) return;
184 for (ptchain
= siglist
; ptchain
; ptchain
= ptchain
->NEXT
) {
185 ptlosig
= (losig_list
*)ptchain
->DATA
;
186 newchain
= addchain(newchain
, ptlosig
->NAMECHAIN
->DATA
);
188 inf_AddList(INF_FIG
, INF_LOADED_LOCATION
, INF_MUXU
, "", newchain
, getwhere());
189 // ifl->LOADED.INF_MUXU = addchain(ifl->LOADED.INF_MUXU, newchain);
193 fclMuxDnConstraint(chain_list
*siglist
)
196 chain_list
*newchain
= NULL
;
200 if ((ifl
=getloadedinffig(gns_GetWorkingFigureName()))==NULL
)
201 ifl
=addinffig(gns_GetWorkingFigureName());
203 if (siglist
== NULL
) return;
204 for (ptchain
= siglist
; ptchain
; ptchain
= ptchain
->NEXT
) {
205 ptlosig
= (losig_list
*)ptchain
->DATA
;
206 newchain
= addchain(newchain
, ptlosig
->NAMECHAIN
->DATA
);
208 inf_AddList(INF_FIG
, INF_LOADED_LOCATION
, INF_MUXD
, "", newchain
, getwhere());
209 // ifl->LOADED.INF_MUXD = addchain(ifl->LOADED.INF_MUXD, newchain);
213 fclAllowShare(lotrs_list
*transistor
)
217 ptuser
= getptype(transistor
->USER
, FCL_MARK_PTYPE
);
218 if (ptuser
!= NULL
) {
219 ptuser
->DATA
= (void *)FCL_SHARE_TRANS
;
221 else transistor
->USER
= addptype(transistor
->USER
, FCL_MARK_PTYPE
, (void *)FCL_SHARE_TRANS
);