Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / beh / beh / beh_gnsConflictingName.c
1 /****************************************************************************/
2 /* */
3 /* Chaine de CAO & VLSI AVERTEC */
4 /* */
5 /* Produit : AVERTEC global tools */
6 /* Fichier : beh_gnsConflictingName.c */
7 /* */
8 /* © copyright 2000 AVERTEC */
9 /* Tous droits reserves */
10 /* */
11 /* Auteur(s) : Antony PINTO */
12 /* */
13 /****************************************************************************/
14
15 #include "beh_gnsConflictingName.h"
16
17 //#define BEH_AVT_SUPPORT(num) (stderr,"[BEH_ERR] %d please contact Avertec support\n",(num))
18 #define BEH_UNDO_NAME (long)(-9)
19
20 static ht *HTSIGREF;
21
22 /****************************************************************************/
23 /*{{{ */
24 /****************************************************************************/
25 /*{{{ addInHt() */
26 /* */
27 /* */
28 /****************************************************************************/
29 static void addInHt(ht *signalht, char *ref, char *name)
30 {
31 chain_list *c;
32
33 c = (chain_list*)gethtitem(signalht,ref);
34 if (c == (chain_list*)EMPTYHT || c == (chain_list*)DELETEHT)
35 c = NULL;
36
37 addhtitem(signalht,ref,(long)addchain(c,name));
38 }
39
40 /*}}}************************************************************************/
41 /*{{{ renameSig() */
42 /* */
43 /* */
44 /****************************************************************************/
45 static char *renameSig(char *name)
46 {
47 char *res;
48
49 res = (char*)gethtitem(HTSIGREF,name);
50 if (res == (char*)EMPTYHT || res == (char*)DELETEHT)
51 res = name;
52
53 return res;
54 }
55
56 /*}}}************************************************************************/
57 /*{{{ */
58 /****************************************************************************/
59 /*{{{ beh_createName() */
60 /* */
61 /* */
62 /****************************************************************************/
63 void beh_createName(ht *signalht, char *(*func)(char *,chain_list*))
64 {
65 htitem *hi;
66 chain_list *listname;
67 char *oldname;
68 int i;
69
70 if (signalht)
71 for (i = 0; i < signalht->length; i ++)
72 {
73 hi =& signalht->pElem[i];
74 listname = (chain_list*)hi->value;
75 if (listname != (chain_list*)EMPTYHT)
76 {
77 oldname = (char*)hi->key;
78 if (func)
79 hi->value = (long)func(oldname,listname);
80 else
81 hi->value = (long)(listname->DATA);
82
83 freechain(listname);
84 }
85 }
86 }
87
88 /*}}}************************************************************************/
89 /*{{{ */
90 /* */
91 /* */
92 /****************************************************************************/
93 void beh_dumpHTName(ht *nameht, int mode)
94 {
95 htitem *hi;
96 chain_list *listname, *chainx;
97 char *oldname;
98 int i;
99
100 if (nameht)
101 for (i = 0; i < nameht->length; i ++)
102 {
103 hi =& nameht->pElem[i];
104 listname = (chain_list*)hi->value;
105 if (listname != (chain_list*)EMPTYHT)
106 {
107 oldname = (char*)hi->key;
108
109 if (mode)
110 {
111 beh_warning(312,oldname,(char*)listname->DATA);
112 //(stderr,"%20s -> %s\n",oldname,(char*)listname->DATA);
113 for (chainx = listname->NEXT; chainx; chainx = chainx->NEXT)
114 beh_warning(313," ",(char*)chainx->DATA);
115 //(stderr,"%23s %s\n"," ",(char*)chainx->DATA);
116 }
117 else
118 beh_warning(312,oldname,(char*)listname);
119 //(stderr,"%20s -> %s\n",oldname,(char*)listname);
120 }
121 }
122 }
123
124 /*}}}************************************************************************/
125 /*{{{ beh_changeNameInCnsBefigFromSignalHt() */
126 /* */
127 /* */
128 /****************************************************************************/
129 void beh_changeNameInside(ht *signalht, befig_list *fig)
130 {
131 if (signalht)
132 {
133 bepor_list *por;
134
135 if (fig->BEVECTPOR)
136 {
137 char buf[16];
138
139 sprintf(buf,"%d",__LINE__);
140 beh_toolbug(199,buf,NULL,0);
141 //BEH_AVT_SUPPORT(__LINE__);
142 //EXIT(0);
143 }
144 // discard top level interface renaming
145 for (por = fig->BEPOR; por; por = por->NEXT)
146 addhtitem(signalht,por->NAME,(long)por->NAME);
147
148 HTSIGREF = signalht;
149 beh_namewrap(fig,renameSig);
150 }
151 }
152
153 /*}}}************************************************************************/
154 /*{{{ beh_changeNameInterface() */
155 /* */
156 /* */
157 /****************************************************************************/
158 void beh_changeNameInterface(ht *signalht, befig_list *fig)
159 {
160 ptype_list *hlcor, *ptx, *lcor, *nlcor;
161 bepor_list *por;
162 berin_list *rin;
163 bevectpor_list *vpor;
164 char *oldname, *newname, buf1[1024], buf2[1024];
165 ht *porht, *rinht;
166 void *tmp;
167 int n, o, i;
168
169 if (signalht)
170 {
171 porht = addht(40);
172 rinht = addht(40);
173
174 for (rin = fig->BERIN; rin; rin = rin->NEXT)
175 addhtitem(rinht,rin->NAME,(long)rin);
176
177 nlcor = NULL;
178 if ((hlcor = getptype(fig->USER,BEG_RENAME_LIST)))
179 {
180 lcor = hlcor->DATA;
181 for (ptx = lcor; ptx; ptx = ptx->NEXT)
182 {
183 newname = (char*)gethtitem(signalht,ptx->DATA);
184 oldname = (char*)ptx->TYPE;
185 n = sscanf(newname,"%[^ ] %d",buf1,&i);
186 o = sscanf(oldname,"%[^ ] %d",buf2,&i);
187 if (o == 1)
188 addhtitem(porht,oldname,(long)newname);
189 else if (o == n)
190 addhtitem(porht,namealloc(buf2),(long)namealloc(buf1));
191 else
192 addptype(nlcor,(long)oldname,newname);
193 }
194 freeptype(lcor);
195 hlcor->DATA = nlcor;
196
197 }
198
199 for (por = fig->BEPOR; por; por = por->NEXT)
200 if ((newname = (char*)gethtitem(porht,por->NAME)) != (char*)EMPTYHT)
201 {
202 rin = (berin_list*)gethtitem(rinht,por->NAME);
203 if (rin == (berin_list *)EMPTYHT)
204 rin = NULL;
205 beh_renameport(fig,por,rin,newname);
206 }
207
208 for (vpor = fig->BEVECTPOR; vpor; vpor = vpor->NEXT)
209 if ((newname = (char*)gethtitem(porht,vpor->NAME)) != (char*)EMPTYHT)
210 {
211 rin = (berin_list*)gethtitem(rinht,vpor->NAME);
212 if (rin == (berin_list *)EMPTYHT)
213 rin = NULL;
214 beh_renamevectport(fig,vpor,rin,newname,0);
215 }
216 else
217 {
218 if (vpor->DIRECTION != 'I')
219 for (ptx = nlcor; ptx; ptx = ptx->NEXT)
220 {
221 sscanf((char*)ptx->TYPE,"%[^ ] %d",buf2,&i);
222 if (namealloc(buf2) == vpor->NAME)
223 {
224 tmp = ptx->DATA;
225 ptx->DATA = (void*)ptx->TYPE;
226 ptx->TYPE = (long)tmp;
227 }
228 }
229 }
230
231 delht(porht);
232 delht(rinht);
233 }
234 }
235
236 /*}}}************************************************************************/
237 /*{{{ beh_addRefName() */
238 /* */
239 /* */
240 /****************************************************************************/
241 void beh_addRefName(ht **signalht, befig_list *fig)
242 {
243 ptype_list *pt;
244
245 if ((pt = getptype(fig->USER,BEG_RENAME_LIST)))
246 {
247 if (!*signalht)
248 *signalht = addht(40);
249 for (pt = pt->DATA; pt; pt = pt->NEXT)
250 addInHt(*signalht,(char*)pt->DATA,(char*)pt->TYPE);
251 }
252 }
253
254 /*}}}************************************************************************/
255 /*}}}************************************************************************/