1 /****************************************************************************/
3 /* Chaine de CAO & VLSI Alliance */
5 /* Produit : FCL v1.02 */
6 /* Fichier : fcl_constrain.c */
8 /* (c) copyright 1996 Laboratoire MASI equipe CAO & VLSI */
9 /* Tous droits reserves */
10 /* Support : e-mail alliance-support@asim.lip6.fr */
13 /****************************************************************************/
15 #include "fcl_headers.h"
18 fclConstrainConnectedInstances(losig_list
*ptmodelsig
, losig_list
*ptsig
)
20 ht
*occurht_model
, *occurht
;
23 chain_list
*modelchain
= NULL
, *modelchain_model
= NULL
;
25 chain_list
*inschain_model
, *inschain
;
29 occurht_model
= addht(40);
31 ptchain
= (chain_list
*)getptype(ptmodelsig
->USER
, LOFIGCHAIN
)->DATA
;
32 for (;ptchain
; ptchain
= ptchain
->NEXT
) {
33 ptlocon
= (locon_list
*)ptchain
->DATA
;
34 if (ptlocon
->TYPE
!= 'I') continue;
35 ptloins
= (loins_list
*)ptlocon
->ROOT
;
36 if ((inschain_model
= (chain_list
*)gethtitem(occurht_model
, ptloins
->FIGNAME
)) != (void *)EMPTYHT
) {
37 sethtitem(occurht_model
, ptloins
->FIGNAME
, (long)addchain(inschain_model
, ptloins
->INSNAME
));
40 addhtitem(occurht_model
, ptloins
->FIGNAME
, (long)addchain(NULL
, ptloins
->INSNAME
));
41 modelchain_model
= addchain(modelchain_model
, ptloins
->FIGNAME
);
44 ptchain
= (chain_list
*)getptype(ptsig
->USER
, LOFIGCHAIN
)->DATA
;
45 for (;ptchain
; ptchain
= ptchain
->NEXT
) {
46 ptlocon
= (locon_list
*)ptchain
->DATA
;
47 if (ptlocon
->TYPE
!= 'I') continue;
48 ptloins
= (loins_list
*)ptlocon
->ROOT
;
49 if ((inschain
= (chain_list
*)gethtitem(occurht
, ptloins
->FIGNAME
)) != (void *)EMPTYHT
) {
50 sethtitem(occurht
, ptloins
->FIGNAME
, (long)addchain(inschain
, ptloins
->INSNAME
));
53 addhtitem(occurht
, ptloins
->FIGNAME
, (long)addchain(NULL
, ptloins
->INSNAME
));
54 modelchain
= addchain(modelchain
, ptloins
->FIGNAME
);
58 for (ptchain
= modelchain_model
; ptchain
; ptchain
= ptchain
->NEXT
) {
59 figname
= (char *)ptchain
->DATA
;
60 inschain_model
= (chain_list
*)gethtitem(occurht_model
, figname
);
61 if (inschain_model
->NEXT
== NULL
) {
62 inschain
= (chain_list
*)gethtitem(occurht
, figname
);
63 if (inschain
!= (void *)EMPTYHT
&& inschain
->NEXT
== NULL
) {
64 sethtitem(FCL_REAL_CORRESP_HT
, inschain_model
->DATA
, (long)inschain
->DATA
);
67 freechain(inschain_model
);
69 freechain(modelchain_model
);
71 for (ptchain
= modelchain
; ptchain
; ptchain
= ptchain
->NEXT
) {
72 figname
= (char *)ptchain
->DATA
;
73 inschain
= (chain_list
*)gethtitem(occurht
, figname
);
76 freechain(modelchain
);