Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / tas / tas / tas_drislo.c
1 /****************************************************************************/
2 /* */
3 /* Chaine de CAO & VLSI Alliance */
4 /* */
5 /* Produit : TAS Version 5 */
6 /* Fichier : tas_drislo.c */
7 /* */
8 /* (c) copyright 1991-1998 Laboratoire LIP6 equipe ASIM */
9 /* Tous droits reserves */
10 /* Support : e-mail alliance-support@asim.lip6.fr */
11 /* */
12 /* Auteur(s) : Payam KIANI */
13 /* Karim DIOURY */
14 /* */
15 /****************************************************************************/
16 /* driver des fronts */
17 /****************************************************************************/
18
19 #include "tas.h"
20
21 /****************************************************************************/
22 /* fonction tas_drislo() */
23 /* pour driver les fronts de signaux */
24 /****************************************************************************/
25 int tas_drislo(cnsfig,ttvfig)
26 cnsfig_list *cnsfig ;
27 ttvfig_list *ttvfig ;
28 {
29 cone_list *cone ;
30 edge_list *incone ;
31 locon_list *locon ;
32 FILE *file ;
33 time_t counter;
34 char buffer[1024];
35
36 if(cnsfig != NULL)
37 file = mbkfopen(cnsfig->NAME,"slo",WRITE_TEXT) ;
38 else
39 file = mbkfopen(ttvfig->INFO->FIGNAME,"slo",WRITE_TEXT) ;
40
41 if(file == NULL)
42 {
43 char straux[100] ;
44
45 if(cnsfig != NULL)
46 sprintf(straux,"%s.slo",cnsfig->NAME) ;
47 else
48 sprintf(straux,"%s.slo",ttvfig->INFO->FIGNAME) ;
49 tas_error(8,straux,TAS_WARNING) ;
50
51 return(0) ;
52 }
53
54 /* entete du fichier ".slo" */
55 sprintf(buffer,"List of slopes : %s.slo\n",cnsfig->NAME);
56 avt_printExecInfo(file, "#", buffer, "");
57
58 if(cnsfig != NULL)
59 {
60 for(locon = cnsfig->LOCON ; locon != NULL ; locon = locon->NEXT)
61 {
62 ptype_list *user = getptype(locon->USER,TAS_SLOPE_MAX) ;
63 ptype_list *usermin = getptype(locon->USER,TAS_SLOPE_MIN) ;
64
65 if(user != NULL)
66 {
67 front_list *slope = (front_list *)user->DATA ;
68
69 fprintf(file,"locon (%s)\t: FUPMAX = ",locon->NAME) ;
70 if(slope->FUP == TAS_NOFRONT) fprintf(file,"NO SLOPE") ;
71 else fprintf(file,"%ld",slope->FUP) ;
72 fprintf(file,"\tFDOWNMAX = ") ;
73 if(slope->FDOWN == TAS_NOFRONT) fprintf(file,"NO SLOPE ;\n") ;
74 else fprintf(file,"%ld ;\n",slope->FDOWN) ;
75 }
76 if(TAS_CONTEXT->TAS_FIND_MIN == 'Y')
77 {
78 if(usermin != NULL)
79 {
80 front_list *slope = (front_list *)usermin->DATA ;
81
82 fprintf(file,"locon (%s)\t: FUPMIN = ",locon->NAME) ;
83 if(slope->FUP == TAS_NOFRONT) fprintf(file,"NO SLOPE") ;
84 else fprintf(file,"%ld",slope->FUP) ;
85 fprintf(file,"\tFDOWNMIN = ") ;
86 if(slope->FDOWN == TAS_NOFRONT) fprintf(file,"NO SLOPE ;\n") ;
87 else fprintf(file,"%ld ;\n",slope->FDOWN) ;
88 }
89 }
90 }
91 for(cone = cnsfig->CONE ; cone != NULL ; cone = cone->NEXT)
92 {
93 ptype_list *user = getptype(cone->USER,TAS_SLOPE_MAX) ;
94 ptype_list *usermin = getptype(cone->USER,TAS_SLOPE_MIN) ;
95
96 if(user != NULL)
97 {
98 front_list *slope = (front_list *)user->DATA ;
99
100 fprintf(file,"cone (%s)\t: FUPMAX = ",cone->NAME) ;
101 if(slope->FUP == TAS_NOFRONT) fprintf(file,"NO SLOPE") ;
102 else fprintf(file,"%ld",slope->FUP) ;
103 fprintf(file,"\tFDOWNMAX = ") ;
104 if(slope->FDOWN == TAS_NOFRONT) fprintf(file,"NO SLOPE ;\n") ;
105 else fprintf(file,"%ld ;\n",slope->FDOWN) ;
106 }
107 if(TAS_CONTEXT->TAS_FIND_MIN == 'Y')
108 {
109 if(usermin != NULL)
110 {
111 front_list *slope = (front_list *)usermin->DATA ;
112
113 fprintf(file,"cone (%s)\t: FUPMIN = ",cone->NAME) ;
114 if(slope->FUP == TAS_NOFRONT) fprintf(file,"NO SLOPE") ;
115 else fprintf(file,"%ld",slope->FUP) ;
116 fprintf(file,"\tFDOWNMIN = ") ;
117 if(slope->FDOWN == TAS_NOFRONT) fprintf(file,"NO SLOPE ;\n") ;
118 else fprintf(file,"%ld ;\n",slope->FDOWN) ;
119 }
120 }
121 for(incone = cone->INCONE ; incone != NULL ; incone = incone->NEXT)
122 {
123 user = getptype(incone->USER,TAS_SLOPE_MAX) ;
124 usermin = getptype(incone->USER,TAS_SLOPE_MIN) ;
125 if(user != NULL)
126 {
127 front_list *slope = (front_list *)user->DATA ;
128
129 fprintf(file,"cone (%s)\t input (%s)\t: FUPMAX = ",cone->NAME,
130 ((incone->TYPE & CNS_EXT) == CNS_EXT) ? incone->UEDGE.LOCON->NAME :
131 incone->UEDGE.CONE->NAME) ;
132 if(slope->FUP == TAS_NOFRONT) fprintf(file,"NO SLOPE") ;
133 else fprintf(file,"%ld",slope->FUP) ;
134 fprintf(file,"\tFDOWNMAX = ") ;
135 if(slope->FDOWN == TAS_NOFRONT) fprintf(file,"NO SLOPE ;\n") ;
136 else fprintf(file,"%ld ;\n",slope->FDOWN) ;
137 }
138 if(TAS_CONTEXT->TAS_FIND_MIN == 'Y')
139 {
140 if(usermin != NULL)
141 {
142 front_list *slope = (front_list *)usermin->DATA ;
143
144 fprintf(file,"cone (%s)\t input (%s)\t : FUPMIN = ",cone->NAME,
145 ((incone->TYPE & CNS_EXT) == CNS_EXT) ? incone->UEDGE.LOCON->NAME :
146 incone->UEDGE.CONE->NAME) ;
147 if(slope->FUP == TAS_NOFRONT) fprintf(file,"NO SLOPE") ;
148 else fprintf(file,"%ld",slope->FUP) ;
149 fprintf(file,"\tFDOWNMIN = ") ;
150 if(slope->FDOWN == TAS_NOFRONT) fprintf(file,"NO SLOPE ;\n") ;
151 else fprintf(file,"%ld ;\n",slope->FDOWN) ;
152 }
153 }
154 }
155 }
156 }
157 else if(ttvfig != NULL)
158 {
159 ttvsig_list *ptsig ;
160 chain_list *chain ;
161 chain_list *chainx ;
162 long i ;
163
164 chain = NULL ;
165
166 for(i = 0 ; i < ttvfig->NBCONSIG ; i++)
167 chain = addchain(chain,(void*)(*(ttvfig->CONSIG + i))) ;
168
169 for(i = 0 ; i < ttvfig->NBNCSIG ; i++)
170 chain = addchain(chain,(void*)(*(ttvfig->NCSIG + i))) ;
171
172 for(i = 0 ; i < ttvfig->NBILCMDSIG ; i++)
173 if(((*(ttvfig->ILCMDSIG + i))->ROOT == ttvfig) &&
174 (((*(ttvfig->ILCMDSIG + i))->TYPE & (TTV_SIG_N | TTV_SIG_C)) == 0))
175 chain = addchain(chain,(void*)(*(ttvfig->ILCMDSIG + i))) ;
176
177 for(i = 0 ; i < ttvfig->NBELCMDSIG ; i++)
178 if(((*(ttvfig->ELCMDSIG + i))->ROOT == ttvfig) &&
179 (((*(ttvfig->ELCMDSIG + i))->TYPE & (TTV_SIG_N | TTV_SIG_C)) == 0))
180 chain = addchain(chain,(void*)(*(ttvfig->ELCMDSIG + i))) ;
181
182 for(i = 0 ; i < ttvfig->NBILATCHSIG ; i++)
183 if(((*(ttvfig->ILATCHSIG + i))->ROOT == ttvfig) &&
184 (((*(ttvfig->ILATCHSIG + i))->TYPE & (TTV_SIG_N | TTV_SIG_C)) == 0))
185 chain = addchain(chain,(void*)(*(ttvfig->ILATCHSIG + i))) ;
186
187 for(i = 0 ; i < ttvfig->NBELATCHSIG ; i++)
188 if(((*(ttvfig->ELATCHSIG + i))->ROOT == ttvfig) &&
189 (((*(ttvfig->ELATCHSIG + i))->TYPE & (TTV_SIG_N | TTV_SIG_C)) == 0))
190 chain = addchain(chain,(void*)(*(ttvfig->ELATCHSIG + i))) ;
191
192 for(i = 0 ; i < ttvfig->NBIPRESIG ; i++)
193 if(((*(ttvfig->IPRESIG + i))->ROOT == ttvfig) &&
194 (((*(ttvfig->IPRESIG + i))->TYPE & (TTV_SIG_N | TTV_SIG_C)) == 0))
195 chain = addchain(chain,(void*)(*(ttvfig->IPRESIG + i))) ;
196
197 for(i = 0 ; i < ttvfig->NBEPRESIG ; i++)
198 if(((*(ttvfig->EPRESIG + i))->ROOT == ttvfig) &&
199 (((*(ttvfig->EPRESIG + i))->TYPE & (TTV_SIG_N | TTV_SIG_C)) == 0))
200 chain = addchain(chain,(void*)(*(ttvfig->EPRESIG + i))) ;
201
202 for(i = 0 ; i < ttvfig->NBINTSIG ; i++)
203 if((*(ttvfig->INTSIG + i))->ROOT == ttvfig)
204 chain = addchain(chain,(void*)(*(ttvfig->INTSIG + i))) ;
205
206 for(i = 0 ; i < ttvfig->NBEXTSIG ; i++)
207 if((*(ttvfig->EXTSIG + i))->ROOT == ttvfig)
208 chain = addchain(chain,(void*)(*(ttvfig->EXTSIG + i))) ;
209
210 for(i = 0 ; i < ttvfig->NBESIG ; i++)
211 if((*(ttvfig->ESIG + i))->ROOT == ttvfig)
212 chain = addchain(chain,(void*)(*(ttvfig->ESIG + i))) ;
213
214 if(ttvfig->NBISIG != 0)
215 {
216 long j ;
217 long nbfree ;
218 long nbend ;
219 ttvsbloc_list *ptsbloc = ttvfig->ISIG ;
220 nbfree = (TTV_MAX_SBLOC - (ttvfig->NBISIG % TTV_MAX_SBLOC))
221 % TTV_MAX_SBLOC ;
222 nbend = ttvfig->NBISIG + nbfree ;
223 for(i = nbfree ; i < nbend ; i++)
224 {
225 j = i % TTV_MAX_SBLOC ;
226 if((j == 0) && (i != 0)) ptsbloc = ptsbloc->NEXT ;
227 chain = addchain(chain,(void*)(ptsbloc->SIG + j)) ;
228 }
229 }
230
231 for(chainx = chain ; chainx != NULL ; chainx = chainx->NEXT)
232 {
233 ptsig = (ttvsig_list *)chainx->DATA ;
234 if(TAS_CONTEXT->TAS_FIND_MIN == 'Y')
235 {
236 }
237 }
238 freechain(chain) ;
239 }
240
241 if(fclose(file) != 0)
242 {
243 char straux[100] ;
244
245 if(cnsfig != NULL)
246 sprintf(straux,"%s.slo",cnsfig->NAME) ;
247 else
248 sprintf(straux,"%s.slo",ttvfig->INFO->FIGNAME) ;
249
250 tas_error(10,straux,TAS_WARNING) ;
251 return(0) ;
252 }
253
254 return(1) ;
255 }
256
257 /****************************************************************************/
258 /* fonction tas_drivrcfile() */
259 /* driver les delais rc des portes */
260 /****************************************************************************/
261 int tas_drivrcfile(cnsfig)
262 cnsfig_list *cnsfig ;
263 {
264 edge_list *incone ;
265 locon_list *locon ;
266 cone_list *cone ;
267 delay_list *delay ;
268 delay_list *delaymin ;
269 delay_list *delaymax ;
270 ptype_list *ptype ;
271 long timemax ;
272 long timemin ;
273 char *name1,*name2 ;
274 char *type1,*type2 ;
275 time_t counter;
276 char buffer[1024];
277 char flag ;
278
279 FILE *file ;
280 #ifdef USEOLDTEMP
281
282 if(cnsfig != NULL)
283 file = mbkfopen(TAS_CONTEXT->TAS_RC_FILE,"rc",WRITE_TEXT) ;
284 else
285 return(0) ;
286
287 if(file == NULL)
288 {
289 char straux[100] ;
290
291 sprintf(straux,"%s.rc",TAS_CONTEXT->TAS_RC_FILE) ;
292 tas_error(8,straux,TAS_WARNING) ;
293
294 return(0) ;
295 }
296
297 time(&counter);
298
299 sprintf(buffer,"List of interconnect delays : %s.rc\n",cnsfig->NAME);
300 avt_printExecInfo(file, "#", buffer, "");
301
302 fprintf(file,"\n\n") ;
303
304 for(cone = cnsfig->CONE ; cone != NULL ; cone = cone->NEXT)
305 {
306 name2 = cone->NAME ;
307 type2= "GATE" ;
308 for(incone = cone->INCONE ; incone != NULL ; incone = incone->NEXT)
309 {
310 if((incone->TYPE & (CNS_FEEDBACK | CNS_VDD | CNS_VSS |
311 CNS_BLEEDER | TAS_PATH_INOUT | TAS_EXT_IN | TAS_EXT_OUT)) != 0)
312 continue ;
313 delay = NULL ;
314 delaymax = NULL ;
315 delaymin = NULL ;
316 if((incone->TYPE & CNS_EXT) == CNS_EXT)
317 {
318 name1 = incone->UEDGE.LOCON->NAME ;
319 if(incone->UEDGE.LOCON->DIRECTION == CNS_I)
320 type1 = "CONNECTOR" ;
321 else
322 type1 = "GATE" ;
323 }
324 else
325 {
326 if((incone->UEDGE.CONE->TYPE & CNS_EXT) == CNS_EXT)
327 {
328 chain_list *cl;
329 type1="CONNECTOR" ;
330 cl=cns_get_cone_external_connectors(incone->UEDGE.CONE);
331 // ptype = getptype(incone->UEDGE.CONE->USER,CNS_EXT) ;
332 if(cl!=NULL/*ptype != NULL*/)
333 if(((locon_list *)cl->DATA)->DIRECTION != CNS_I)
334 type1 = "GATE" ;
335 }
336 else
337 type1="GATE" ;
338 name1 = incone->UEDGE.CONE->NAME ;
339 }
340 flag = 'N' ;
341 timemax = TAS_NOTIME ;
342 timemin = TAS_NOTIME ;
343 if((ptype = getptype(incone->USER,TAS_DELAY_MIN)) != NULL)
344 {
345 delay = (delay_list *)ptype->DATA ;
346 delaymin = delay ;
347 if(((delay->RCLL != TAS_NOTIME) && ((delay->TPLH != TAS_NOTIME) ||
348 (delay->TPLL != TAS_NOTIME) ||
349 ((incone->TYPE & CNS_COMMAND) == CNS_COMMAND))) ||
350 ((delay->RCHH != TAS_NOTIME) && ((delay->TPHL != TAS_NOTIME) ||
351 (delay->TPHH != TAS_NOTIME) ||
352 ((incone->TYPE & CNS_COMMAND) == CNS_COMMAND))))
353 {
354 if(delay->RCLL != TAS_NOTIME)
355 timemin = delay->RCLL ;
356 else
357 timemin = delay->RCHH ;
358 flag = 'Y' ;
359 }
360 }
361 if((ptype = getptype(incone->USER,TAS_DELAY_MAX)) != NULL)
362 {
363 delay = (delay_list *)ptype->DATA ;
364 delaymax = delay ;
365 if(((delay->RCLL != TAS_NOTIME) && ((delay->TPLH != TAS_NOTIME) ||
366 (delay->TPLL != TAS_NOTIME) ||
367 ((incone->TYPE & CNS_COMMAND) == CNS_COMMAND))) ||
368 ((delay->RCHH != TAS_NOTIME) && ((delay->TPHL != TAS_NOTIME) ||
369 (delay->TPHH != TAS_NOTIME) ||
370 ((incone->TYPE & CNS_COMMAND) == CNS_COMMAND))))
371 {
372 if(delay->RCLL != TAS_NOTIME)
373 timemax = delay->RCLL ;
374 else
375 timemax = delay->RCHH ;
376 flag = 'Y' ;
377 }
378 }
379 if(flag == 'Y')
380 {
381 fprintf(file,"%s %s %s %s ",type1,name1,type2,name2) ;
382 if(timemin != TAS_NOTIME)
383 fprintf(file,"TRCMIN=%ld ",timemin) ;
384 if(timemax != TAS_NOTIME)
385 fprintf(file,"TRCMAX=%ld ",timemax) ;
386 }
387
388 if((delaymin != NULL) && ((incone->TYPE & CNS_COMMAND) != CNS_COMMAND))
389 {
390 if((flag == 'N') &&
391 ((delaymin->TPLH != TAS_NOTIME) || (delaymin->TPLL != TAS_NOTIME) ||
392 (delaymin->TPHL != TAS_NOTIME) || (delaymin->TPHH != TAS_NOTIME)))
393 {
394 fprintf(file,"%s %s %s %s ",type1,name1,type2,name2) ;
395 flag = 'Y' ;
396 }
397 if((delaymin->SHH != TAS_NOS) && (delaymin->TPHH != TAS_NOTIME))
398 fprintf(file,"SUUMIN=%ld ",delaymin->SHH) ;
399 if((delaymin->SLH != TAS_NOS) && (delaymin->TPLH != TAS_NOTIME))
400 fprintf(file,"SDUMIN=%ld ",delaymin->SLH) ;
401 if((delaymin->SHL != TAS_NOS) && (delaymin->TPHL != TAS_NOTIME))
402 fprintf(file,"SUDMIN=%ld ",delaymin->SHL) ;
403 if((delaymin->SLL != TAS_NOS) && (delaymin->TPLL != TAS_NOTIME))
404 fprintf(file,"SDDMIN=%ld ",delaymin->SLL) ;
405 if((delaymin->RHH != TAS_NORES) && (delaymin->TPHH != TAS_NOTIME))
406 fprintf(file,"RUUMIN=%ld ",delaymin->RHH) ;
407 if((delaymin->RLH != TAS_NORES) && (delaymin->TPLH != TAS_NOTIME))
408 fprintf(file,"RDUMIN=%ld ",delaymin->RLH) ;
409 if((delaymin->RHL != TAS_NORES) && (delaymin->TPHL != TAS_NOTIME))
410 fprintf(file,"RUDMIN=%ld ",delaymin->RHL) ;
411 if((delaymin->RLL != TAS_NORES) && (delaymin->TPLL != TAS_NOTIME))
412 fprintf(file,"RDDMIN=%ld ",delaymin->RLL) ;
413 }
414
415 if((delay != NULL) && ((incone->TYPE & CNS_COMMAND) != CNS_COMMAND))
416 {
417 if((flag == 'N') &&
418 ((delay->TPLH != TAS_NOTIME) || (delay->TPLL != TAS_NOTIME) ||
419 (delay->TPHL != TAS_NOTIME) || (delay->TPHH != TAS_NOTIME)))
420 {
421 fprintf(file,"%s %s %s %s ",type1,name1,type2,name2) ;
422 flag = 'Y' ;
423 }
424 if((delay->SHH != TAS_NOS) && (delay->TPHH != TAS_NOTIME))
425 fprintf(file,"SUUMAX=%ld ",delay->SHH) ;
426 if((delay->SLH != TAS_NOS) && (delay->TPLH != TAS_NOTIME))
427 fprintf(file,"SDUMAX=%ld ",delay->SLH) ;
428 if((delay->SHL != TAS_NOS) && (delay->TPHL != TAS_NOTIME))
429 fprintf(file,"SUDMAX=%ld ",delay->SHL) ;
430 if((delay->SLL != TAS_NOS) && (delay->TPLL != TAS_NOTIME))
431 fprintf(file,"SDDMAX=%ld ",delay->SLL) ;
432 if((delay->RHH != TAS_NORES) && (delay->TPHH != TAS_NOTIME))
433 fprintf(file,"RUUMAX=%ld ",delay->RHH) ;
434 if((delay->RLH != TAS_NORES) && (delay->TPLH != TAS_NOTIME))
435 fprintf(file,"RDUMAX=%ld ",delay->RLH) ;
436 if((delay->RHL != TAS_NORES) && (delay->TPHL != TAS_NOTIME))
437 fprintf(file,"RUDMAX=%ld ",delay->RHL) ;
438 if((delay->RLL != TAS_NORES) && (delay->TPLL != TAS_NOTIME))
439 fprintf(file,"RDDMAX=%ld ",delay->RLL) ;
440 }
441
442 if(flag == 'Y')
443 fprintf(file,";\n") ;
444
445 timemax = TAS_NOTIME ;
446 timemin = TAS_NOTIME ;
447 flag = 'N' ;
448 if(((ptype = getptype(incone->USER,TAS_DELAY_MINT)) != NULL) &&
449 (delaymin != NULL))
450 {
451 delay = (delay_list *)ptype->DATA ;
452 delaymin = delay ;
453 if(((delay->RCLL != TAS_NOTIME) && ((delaymin->TPLH != TAS_NOTIME) ||
454 (delaymin->TPLL != TAS_NOTIME) ||
455 ((incone->TYPE & CNS_COMMAND) == CNS_COMMAND))) ||
456 ((delay->RCHH != TAS_NOTIME) && ((delaymin->TPHL != TAS_NOTIME) ||
457 (delaymin->TPHH != TAS_NOTIME) ||
458 ((incone->TYPE & CNS_COMMAND) == CNS_COMMAND))))
459 {
460 if(delay->RCLL != TAS_NOTIME)
461 timemin = delay->RCLL ;
462 else
463 timemin = delay->RCHH ;
464 flag = 'Y' ;
465 }
466 }
467 if(((ptype = getptype(incone->USER,TAS_DELAY_MAXT)) != NULL) &&
468 (delaymax != NULL))
469 {
470 delay = (delay_list *)ptype->DATA ;
471 if(((delay->RCLL != TAS_NOTIME) && ((delaymax->TPLH != TAS_NOTIME) ||
472 (delaymax->TPLL != TAS_NOTIME) ||
473 ((incone->TYPE & CNS_COMMAND) == CNS_COMMAND))) ||
474 ((delay->RCHH != TAS_NOTIME) && ((delaymax->TPHL != TAS_NOTIME) ||
475 (delaymax->TPHH != TAS_NOTIME) ||
476 ((incone->TYPE & CNS_COMMAND) == CNS_COMMAND))))
477 {
478 if(delay->RCLL != TAS_NOTIME)
479 timemax = delay->RCLL ;
480 else
481 timemax = delay->RCHH ;
482 flag = 'Y' ;
483 }
484 }
485 if(flag == 'Y')
486 {
487 fprintf(file,"CONNECTOR %s %s %s ",name1,type2,name2) ;
488 if(timemin != TAS_NOTIME)
489 fprintf(file,"TRCMIN=%ld ",timemin) ;
490 if(timemax != TAS_NOTIME)
491 fprintf(file,"TRCMAX=%ld ",timemax) ;
492 fprintf(file,";\n") ;
493 }
494 }
495 }
496
497 for(locon = cnsfig->LOCON ; locon != NULL ; locon = locon->NEXT)
498 {
499 name2 = locon->NAME ;
500 type2= "CONNECTOR" ;
501 type1="GATE" ;
502 name1 = locon->NAME ;
503 flag = 'N' ;
504 timemax = TAS_NOTIME ;
505 timemin = TAS_NOTIME ;
506 if((ptype = getptype(locon->USER,TAS_DELAY_MIN)) != NULL)
507 {
508 delay = (delay_list *)ptype->DATA ;
509 if((delay->RCLL != TAS_NOTIME) || (delay->RCHH != TAS_NOTIME))
510 {
511 if(delay->RCLL != TAS_NOTIME)
512 timemin = delay->RCLL ;
513 else
514 timemin = delay->RCHH ;
515 flag = 'Y' ;
516 }
517 }
518 if((ptype = getptype(locon->USER,TAS_DELAY_MAX)) != NULL)
519 {
520 delay = (delay_list *)ptype->DATA ;
521 if((delay->RCLL != TAS_NOTIME) || (delay->RCHH != TAS_NOTIME))
522 {
523 if(delay->RCLL != TAS_NOTIME)
524 timemax = delay->RCLL ;
525 else
526 timemax = delay->RCHH ;
527 flag = 'Y' ;
528 }
529 }
530 if(flag == 'Y')
531 {
532 fprintf(file,"%s %s %s %s ",type1,name1,type2,name2) ;
533 if(timemin != TAS_NOTIME)
534 fprintf(file,"TRCMIN=%ld ",timemin) ;
535 if(timemax != TAS_NOTIME)
536 fprintf(file,"TRCMAX=%ld ",timemax) ;
537 fprintf(file,";\n") ;
538 }
539 }
540
541 if(fclose(file) != 0)
542 {
543 char straux[100] ;
544
545 sprintf(straux,"%s.rc",TAS_CONTEXT->TAS_RC_FILE) ;
546 tas_error(10,straux,TAS_WARNING) ;
547 return(0) ;
548 }
549 #endif
550 return(1) ;
551 }