Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / tas / tlf / tlf_util.c
1 /******************************************/
2 /* tlf_util.c */
3 /******************************************/
4 /******************************************************************************/
5 /* INCLUDE */
6 /******************************************************************************/
7 #include "tlf_util.h"
8
9
10 char TLF_TRACE_MODE = 'N' ;
11 char *LIBRARY_TLF_NAME ;
12
13
14
15 char *tlf_chainlistToStr(chain_list *pchain)
16 {
17 chain_list *p;
18 char s[32];
19 char *str;
20
21 strcpy(s,(char *)pchain->DATA);
22
23 for(p=pchain->NEXT ; p != NULL ; p=p->NEXT)
24 strcat(s,(char *)p->DATA);
25
26 str = (char*)mbkalloc((sizeof(char)*strlen(s))+1);
27 strcpy(str,s);
28 return str;
29 }
30
31
32 void tlf_aff_cbhcomb(cbhcomb *p)
33 {
34 avt_log(LOGTLF,2,"Structure CBHCOMB:\n");
35 avt_log(LOGTLF,2,"\tNAME: %s\n", p->NAME);
36 if(p->FUNCTION != NULL)
37 {
38 avt_log(LOGTLF,2,"\tFUNCTION: ");
39 displayExprLog(LOGTLF,2,p->FUNCTION);
40 }
41 if(p->HZFUNC != NULL)
42 {
43 avt_log(LOGTLF,2,"\tHZFUNCTION: ");
44 displayExprLog(LOGTLF,2,p->HZFUNC);
45 }
46 if(p->CONFLICT != NULL)
47 {
48 avt_log(LOGTLF,2,"\tCONFLICT: ");
49 displayExprLog(LOGTLF,2,p->CONFLICT);
50 }
51 }
52
53 void tlf_aff_cbhseq(cbhseq *p)
54 {
55 avt_log(LOGTLF,2,"Structure CBHSEQ:\n");
56 avt_log(LOGTLF,2,"SEQTYPE: %d\n", p->SEQTYPE);
57 if(p->NAME != NULL)
58 avt_log(LOGTLF,2,"NAME: %s\n", p->NAME);
59 if(p->NEGNAME != NULL)
60 avt_log(LOGTLF,2,"NEGNAME: %s\n", p->NEGNAME);
61 if(p->PIN != NULL)
62 avt_log(LOGTLF,2,"PIN: %s\n", p->PIN);
63 if(p->NEGPIN != NULL)
64 avt_log(LOGTLF,2,"NEGPIN: %s\n", p->NEGPIN);
65 if(p->CLOCK != NULL)
66 {
67 avt_log(LOGTLF,2,"CLOCK:");
68 displayExprLog(LOGTLF,2,p->CLOCK);
69 }
70 if(p->SLAVECLOCK != NULL)
71 {
72 avt_log(LOGTLF,2,"SLAVECLOCK:");
73 displayExprLog(LOGTLF,2,p->SLAVECLOCK);
74 }
75 if(p->DATA != NULL)
76 {
77 avt_log(LOGTLF,2,"DATA:");
78 displayExprLog(LOGTLF,2,p->DATA);
79 }
80 if(p->RESET != NULL)
81 {
82 avt_log(LOGTLF,2,"RESET:");
83 displayExprLog(LOGTLF,2,p->RESET);
84 }
85 if(p->SET != NULL)
86 {
87 avt_log(LOGTLF,2,"SET:");
88 displayExprLog(LOGTLF,2,p->SET);
89 }
90 if(p->RSCONF != NULL)
91 {
92 avt_log(LOGTLF,2,"RSCONF:");
93 displayExprLog(LOGTLF,2,p->RSCONF);
94 }
95 if(p->RSCONFNEG != NULL)
96 {
97 avt_log(LOGTLF,2,"RSCONFNEG:");
98 displayExprLog(LOGTLF,2,p->RSCONFNEG);
99 }
100
101 }
102
103 /*****************************************************************************
104 * fonction tlf_setenv() *
105 *****************************************************************************/
106 void tlf_setenv()
107 {
108 char *str;
109
110 str = getenv("TLF_TRACE_MODE") ;
111 if(str != NULL){
112 TLF_TRACE_MODE = (strcmp(str,"yes") == 0 ) ? 'Y' : 'N' ;
113 }
114 }
115
116 /*****************************************************************************
117 * fonction tlf_treatname() *
118 *****************************************************************************/
119 char *tlf_treatname(char *str)
120 {
121 char ss[1024];
122 char name[1024];
123 int i, j;
124
125 sprintf (name, str);
126 /* enlevement de '"' */
127 i = 0;
128 j = 0;
129 while (name[i] != '\0') {
130 if (name[i] != '"'){
131 ss[j] = name[i];
132 j++;
133 }
134 i++;
135 }
136 ss[j] = '\0';
137 return namealloc (ss);
138 }
139
140 /*****************************************************************************
141 * fonction tlf_getlibname() *
142 *****************************************************************************/
143 char *tlf_getlibname(void)
144 {
145 return LIBRARY_TLF_NAME;
146 }
147
148 /****************************************************************************
149 * fonction tlf_multout() *
150 *****************************************************************************/
151 /* appelee quand on a detecte plusieurs sorties de latch/registre */
152 short tlf_multout(lofig_list **lofig, cbhcomb **comb, cbhseq **seq,
153 char *cname)
154 {
155 locon_list *lc;
156 cbhcomb *c;
157
158 if (TLF_TRACE_MODE == 'Y')
159 fprintf(stderr,"WARNING: multiple output for latch/register in cell %s\n", cname);
160 if (*comb)
161 {
162 cbh_delcomb(*comb);
163 *comb = NULL;
164 }
165 if (*seq)
166 {
167 cbh_delseq(*seq);
168 *seq = NULL;
169 }
170 for ( lc = (*lofig)->LOCON; lc; lc = lc->NEXT)
171 if ((c = cbh_getcombfromlocon(lc)))
172 cbh_delcombtolocon(lc);
173 *lofig = (*lofig)->NEXT ;
174 dellofig(cname);
175
176 return 1;
177 }
178
179 /*----------------------------------------------------------------------------*/
180 /* AFFCHAIN : */
181 /* Affiche tous les champs DATA de la liste chainee passee en argument */
182 /*----------------------------------------------------------------------------*/
183 void tlf_affchain(chain_list *p, char *format, char type)
184 {
185 chain_list *d;
186
187 for(d=p; d != NULL; d=d->NEXT) {
188 if(type == TYPE_STRING)
189 printf(format, (char *)(d->DATA));
190 else if(type == TYPE_FLOAT)
191 printf(format, *((float *)(d->DATA)));
192 }
193
194 printf("\n");
195 }
196 /*----------------------------------------------------------------------------*/
197 /* LOOKINGFORLOOP: */
198 /* */
199 /*----------------------------------------------------------------------------*/
200 short tlf_lookingForExpr(chain_list *ch, char *expr)
201 {
202 short res=0;
203 chain_list *p,*c;
204
205 p = supportChain_listExpr(ch);
206
207 for(c=p ; c != NULL ; c=c->NEXT) {
208 if(!strcasecmp(c->DATA,expr))
209 res=1;
210 }
211
212 freechain(p);
213 return res;
214 }
215
216 /*----------------------------------------------------------------------------*/
217 /* REPLACEINABL : */
218 /* */
219 /*----------------------------------------------------------------------------*/
220 chain_list *tlf_replaceInAbl(chain_list *abl, char *oldExpr, char *newExpr)
221 {
222 chain_list *newabl, *expr;
223
224 expr = createAtom(newExpr);
225
226 newabl = substExpr(abl,oldExpr,expr);
227 freeExpr(abl);
228 freeExpr(expr);
229
230 return newabl;
231 }
232
233