Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / yagle / fcl / fcl_constrain.c
1 /****************************************************************************/
2 /* */
3 /* Chaine de CAO & VLSI Alliance */
4 /* */
5 /* Produit : FCL v1.02 */
6 /* Fichier : fcl_constrain.c */
7 /* */
8 /* (c) copyright 1996 Laboratoire MASI equipe CAO & VLSI */
9 /* Tous droits reserves */
10 /* Support : e-mail alliance-support@asim.lip6.fr */
11 /* */
12 /* */
13 /****************************************************************************/
14
15 #include "fcl_headers.h"
16
17 void
18 fclConstrainConnectedInstances(losig_list *ptmodelsig, losig_list *ptsig)
19 {
20 ht *occurht_model, *occurht;
21 loins_list *ptloins;
22 locon_list *ptlocon;
23 chain_list *modelchain = NULL, *modelchain_model = NULL;
24 chain_list *ptchain;
25 chain_list *inschain_model, *inschain;
26 char *figname;
27
28 occurht = addht(40);
29 occurht_model = addht(40);
30
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));
38 }
39 else {
40 addhtitem(occurht_model, ptloins->FIGNAME, (long)addchain(NULL, ptloins->INSNAME));
41 modelchain_model = addchain(modelchain_model, ptloins->FIGNAME);
42 }
43 }
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));
51 }
52 else {
53 addhtitem(occurht, ptloins->FIGNAME, (long)addchain(NULL, ptloins->INSNAME));
54 modelchain = addchain(modelchain, ptloins->FIGNAME);
55 }
56 }
57
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);
65 }
66 }
67 freechain(inschain_model);
68 }
69 freechain(modelchain_model);
70 delht(occurht_model);
71 for (ptchain = modelchain; ptchain; ptchain = ptchain->NEXT) {
72 figname = (char *)ptchain->DATA;
73 inschain = (chain_list *)gethtitem(occurht, figname);
74 freechain(inschain);
75 }
76 freechain(modelchain);
77 delht(occurht);
78 }
79