1 /****************************************************************************/
3 /* Chaine de CAO & VLSI AVERTEC */
5 /* Produit : AVERTEC global tools */
6 /* Fichier : sim_meas.c */
8 /* © copyright 2000 AVERTEC */
9 /* Tous droits reserves */
11 /* Auteur(s) : Antony PINTO */
13 /****************************************************************************/
18 #define __func__ __FILE__
21 sim_meas_cmd SIM_MEAS
;
22 static int set_SIM_MEAS
=0;
24 static void printMeasCmd_int(FILE *fd
, sim_meas_arg
*arg
);
25 static int existMeasArg(sim_model
*model
, sim_meas_arg
**arg
, char *label
);
26 static void freeMeasArg_int(sim_meas_arg
*arg
);
27 static sim_meas_print
*allocprn(sim_model
*model
, char *delay
, char *sig1
, char *sig2
, char sigt
[2], char *transition
, int delay_type
, SIM_FLOAT th_in
, SIM_FLOAT th_out
);
28 static void addMeas(sim_model
*model
, char *delay
, char *slope
, char *sig1
, char *sig2
, char *transition
, int check
, int delay_type
);
29 static sim_meas_print
*freePrn(sim_meas_print
*prn
);
31 /****************************************************************************/
32 /*{{{ External functions */
33 /*{{{ sim_decodeMeasCmd() */
36 /****************************************************************************/
37 void sim_decodeMeasCmd(char *env
)
39 char buf
[2048], minibuf
[256];
40 int i
, j
, k
, l
,dep
, type
, ind
, envlen
;
42 envlen
= (int)strlen(env
);
43 memset(&SIM_MEAS
,0,sizeof(SIM_MEAS
));
46 for (i
= 0, j
= 0, dep
= 0; i
< envlen
; i
++)
68 SIM_MEAS
.ARGORDER
[dep
] = type
+ SIM_MEAS_A4S
*ind
;
69 if (type
== SIM_MEAS_TRANS
)
79 if (minibuf
[k
] == ',' || minibuf
[k
] == '}')
82 SIM_MEAS
.TRANS
[ind
][l
++] =
88 sim_err("Measure command malformed");
92 sim_war("Token %%%c must have a list of data",
95 else if (type
== SIM_MEAS_NTRANS
)
100 while (env
[++i
] != '}')
102 minibuf
[k
++] = env
[i
];
104 sim_err("Measure command malformed");
110 sim_war("Token %%%c must have a data",env
[i
-2]);
114 sim_war("Token %%%c must have an index (1,2)",env
[i
-1]);
118 SIM_MEAS
.ARGORDER
[dep
] = SIM_MEAS_LABEL
;
121 sim_war("Unknown token : %%%c",env
[i
]);
129 SIM_MEAS
.CMDSTR
= mbkstrdup(buf
);
132 void sim_decodeMeasCmdFree()
135 if (!set_SIM_MEAS
) return;
137 for (i
=0; i
<SIM_MEAS_NBSIG
; i
++)
139 if (SIM_MEAS
.LAST
[i
]!=NULL
) mbkfree(SIM_MEAS
.LAST
[i
]);
141 if (SIM_MEAS
.TRANS
[i
][j
]!=NULL
) mbkfree(SIM_MEAS
.TRANS
[i
][j
]);
144 if (SIM_MEAS
.CMDSTR
!=NULL
) mbkfree(SIM_MEAS
.CMDSTR
);
147 /*}}}************************************************************************/
148 /*{{{ sim_affectMeasCmdArg() */
151 /****************************************************************************/
152 void sim_affectMeasCmdArg(sim_model
*model
, char *label
,
153 char *sig1
, char trans1
, int ntrans1
, double val1
,
154 char *sig2
, char trans2
, int ntrans2
, double val2
)
158 long ntrans
[SIM_MEAS_NBSIG
] = { ntrans1
, ntrans2
};
159 double val
[SIM_MEAS_NBSIG
] = { val1
, val2
};
160 char trans
[SIM_MEAS_NBSIG
] = { trans1
, trans2
};
161 char *sig
[SIM_MEAS_NBSIG
] = { sig1
, sig2
};
164 if (existMeasArg(model
,&arg
,label
))
165 freeMeasArg_int(arg
);
168 arg
= mbkalloc(sizeof(sim_meas_arg
));
169 arg
->NEXT
= model
->LARGS
;
173 arg
->REFCMD
= &SIM_MEAS
;
174 arg
->ARG
[SIM_MEAS_LABEL
] = label
;
176 for (i
= 0; i
< SIM_MEAS_NBSIG
; i
++)
179 arg
->ARG
[SIM_MEAS_SIG
+ SIM_MEAS_A4S
*i
] = mbkstrdup(sig
[i
]);
181 /* transition type */
182 if (trans
[i
] == 'U' || trans
[i
] == 'u')
183 arg
->ARG
[SIM_MEAS_TRANS
+ SIM_MEAS_A4S
*i
] =
184 SIM_MEAS
.TRANS
[i
][SIM_MEAS_UP
];
185 else if (trans
[i
] == 'D' || trans
[i
] == 'd')
186 arg
->ARG
[SIM_MEAS_TRANS
+ SIM_MEAS_A4S
*i
] =
187 SIM_MEAS
.TRANS
[i
][SIM_MEAS_DN
];
190 sim_war("Unknown type of transition");
191 arg
->ARG
[SIM_MEAS_TRANS
+ SIM_MEAS_A4S
*i
] = NULL
;
194 /* threshold value */
195 sprintf(buf
,"%g",val
[i
]);
196 arg
->ARG
[SIM_MEAS_VALUE
+ SIM_MEAS_A4S
*i
] = mbkstrdup(buf
);
198 /* number of transition */
199 if (ntrans
[i
] != SIM_MEASURE_LAST
)
200 sprintf(buf
,"%ld",ntrans
[i
]);
202 sprintf(buf
,"%s",SIM_MEAS
.LAST
[i
]);
204 arg
->ARG
[SIM_MEAS_NTRANS
+ SIM_MEAS_A4S
*i
] = mbkstrdup(buf
);
208 /*}}}************************************************************************/
209 /*{{{ sim_freeMeasArg() */
212 /****************************************************************************/
213 void sim_freeMeasArg(sim_model
*model
, char *label
)
215 sim_meas_arg
*arg
, *tmp
;
217 for (arg
= (sim_meas_arg
*)&(model
->LARGS
); arg
->NEXT
; arg
= arg
->NEXT
)
218 if (arg
->NEXT
->ARG
[SIM_MEAS_LABEL
] == label
)
220 freeMeasArg_int(arg
->NEXT
);
222 arg
->NEXT
= arg
->NEXT
->NEXT
;
228 /*}}}************************************************************************/
229 /*{{{ sim_freeMeasAllArg() */
232 /****************************************************************************/
233 void sim_freeMeasAllArg(sim_model
*model
)
235 sim_meas_arg
*arg
, *tmp
;
237 for (arg
= (sim_meas_arg
*)&(model
->LARGS
); arg
->NEXT
; )
239 freeMeasArg_int(arg
->NEXT
);
241 arg
->NEXT
= arg
->NEXT
->NEXT
;
246 /*}}}************************************************************************/
247 /*{{{ sim_freePrn() */
250 /****************************************************************************/
251 void sim_freePrn(sim_model
*model
)
253 model
->LPRN
= freePrn(model
->LPRN
);
256 /*}}}************************************************************************/
257 /*{{{ sim_addMeas() */
260 /****************************************************************************/
261 void sim_addMeas(sim_model
*model
, char *delay
, char *slope
,
262 char *sig1
, char *sig2
, char *transition
, int delay_type
)
264 addMeas(model
,delay
,slope
,sig1
,sig2
,transition
,1,delay_type
);
267 /*}}}************************************************************************/
268 /*{{{ sim_addMeasDelay() */
271 /****************************************************************************/
272 void sim_addMeasDelay(sim_model
*model
, char *delay
,
273 char *sig1
, char *sig2
, char *transition
, int delay_type
)
275 addMeas(model
,delay
,NULL
,sig1
,sig2
,transition
,1,delay_type
);
278 /*}}}************************************************************************/
279 /*{{{ sim_addMeasSlope() */
282 /****************************************************************************/
283 void sim_addMeasSlope(sim_model
*model
, char *slope
, char *sig
,
284 char *transition
, int delay_type
)
286 addMeas(model
,NULL
,slope
,NULL
,sig
,transition
,1,delay_type
);
289 /*}}}************************************************************************/
290 /*{{{ sim_addMeasWithoutNameCheck() */
293 /****************************************************************************/
294 void sim_addMeasWithoutNameCheck(sim_model
*model
, char *delay
, char *slope
,
295 char *sig1
, char *sig2
, char *transition
, int delay_type
)
297 addMeas(model
,delay
,slope
,sig1
,sig2
,transition
,0,delay_type
);
300 /*}}}************************************************************************/
301 /*{{{ sim_addMeasDelayWithoutNameCheck() */
304 /****************************************************************************/
305 void sim_addMeasDelayWithoutNameCheck(sim_model
*model
, char *delay
,
306 char *sig1
, char *sig2
,
307 char *transition
, int delay_type
)
309 addMeas(model
,delay
,NULL
,sig1
,sig2
,transition
,0,delay_type
);
312 /*}}}************************************************************************/
313 /*{{{ sim_addMeasSlopeWithoutNameCheck() */
316 /****************************************************************************/
317 void sim_addMeasSlopeWithoutNameCheck(sim_model
*model
, char *slope
,
318 char *sig
, char *transition
, int delay_type
)
320 addMeas(model
,NULL
,slope
,NULL
,sig
,transition
,0,delay_type
);
323 /*}}}************************************************************************/
324 /*{{{ sim_getMeas() */
327 /****************************************************************************/
328 //int sim_getMeas(sim_model *model, char *label, double *value)
330 // return !(mfe_labelvalue(model->LLABELS,namealloc(label),value));
333 int sim_getMcMeas( sim_model
*model
, char *label
, double *value
, int idmc
)
337 if( V_BOOL_TAB
[__SIM_USE_MEAS
].VALUE
) {
339 res
= mfe_labelvalue(model
->LLABELS
,label
,value
,idmc
);
343 else if (V_BOOL_TAB
[__SIM_USE_PRINT
].VALUE
) {
350 /*}}}************************************************************************/
351 /*{{{ sim_getMeasSlope() */
354 /****************************************************************************/
355 int sim_getMeasSlope(sim_model
*model
, char *label
, double *value
)
357 return sim_getMeas(model
,NULL
,label
,NULL
,value
);
360 /*}}}************************************************************************/
361 /*{{{ sim_getMeasDelay() */
364 /****************************************************************************/
365 int sim_getMeasDelay(sim_model
*model
, char *label
, double *value
)
367 return sim_getMeas(model
,label
,NULL
,value
,NULL
);
370 /*}}}************************************************************************/
371 /*{{{ sim_getMeas() */
374 /****************************************************************************/
375 int sim_getMeas(sim_model
*model
, char *delay
, char *slope
,
376 double *dval
, double *sval
)
378 if (V_BOOL_TAB
[__SIM_USE_MEAS
].VALUE
)
383 res
+= mfe_labelvalue(model
->LLABELS
,delay
,dval
,-1);
385 res
+= mfe_labelvalue(model
->LLABELS
,slope
,sval
,-1);
389 else if (V_BOOL_TAB
[__SIM_USE_PRINT
].VALUE
)
391 sim_meas_print
*prnx
;
394 /* read output file */
395 sim_parse_spiceout(model
);
400 delay
= min_namealloc(delay
);
404 slope
= min_namealloc(slope
);
406 for (prnx
= model
->LPRN
; prnx
&& done
< 2; prnx
= prnx
->NEXT
)
407 if (prnx
->LABEL
== delay
)
409 *dval
= sim_get_trans_delay(model
,prnx
->DELAY_TYPE
,
410 prnx
->SIGTYPE
[0],prnx
->SIGNAME
[0],
411 prnx
->SIGTYPE
[1],prnx
->SIGNAME
[1],
412 prnx
->TRANSITION
, prnx
->TH_IN
, prnx
->TH_OUT
);
415 else if (prnx
->LABEL
== slope
)
417 *sval
= sim_get_trans_slope(model
,prnx
->DELAY_TYPE
,
418 prnx
->SIGTYPE
[1],prnx
->SIGNAME
[1],
419 prnx
->TRANSITION
, prnx
->TH_IN
, prnx
->TH_OUT
);
423 return (done
< 2) ? 0 : 1;
429 /*}}}************************************************************************/
430 /*{{{ sim_printMeasCmd() */
433 /****************************************************************************/
434 void sim_printMeasCmd(sim_model
*model
, FILE *fd
)
436 printMeasCmd_int(fd
,(sim_meas_arg
*)(model
->LARGS
));
439 /*}}}************************************************************************/
440 /*}}}************************************************************************/
441 /*{{{ Internal functions */
442 /****************************************************************************/
443 /*{{{ getNodeName() */
446 /****************************************************************************/
447 static inline int getNodeName(sim_model
*model
, char *signame
,
448 char **nodename
, char *type
)
456 sim_find_by_name(signame
,model
->FIG
,&con
,&sig
,&inslist
);
460 *type
= SIM_IC_LOCON
;
462 node
= con
->PNODE
->DATA
;
464 node
= sim_run_simu_spice_get_one_node(con
->SIG
);
465 /* implicit declaration cause it don't have to be there */
466 /* it should be in sim_drive_spice.c */
467 sim_run_simu_spice_name_signal(model
,inslist
,con
->SIG
,node
,0,buf
);
468 *nodename
= mbkstrdup(buf
);
472 *type
= SIM_IC_SIGNAL
;
473 node
= sim_run_simu_spice_get_one_node(sig
);
474 sim_run_simu_spice_name_signal(model
,inslist
,sig
,node
,0,buf
);
475 *nodename
= mbkstrdup(buf
);
479 fprintf(stderr
,"[SIM_WAR] : Problem occured in creating name for %s\n",
487 /*}}}************************************************************************/
491 /****************************************************************************/
492 static void addMeas(sim_model
*model
, char *delay
, char *slope
,
493 char *sig1
, char *sig2
, char *transition
, int check
, int delay_type
)
496 double val
[2], alim
, th_in
, th_out
, slopelow
, slopehigh
;
497 char trans
[2], *labelname
, *sig
[2] = {sig1
, sig2
}, *signame
;
498 char sigt
[2], buf
[2];
505 alim
= sim_parameter_get_alim(model
, 'i');
506 sim_get_THR(model
, &th_in
, &th_out
, &slopelow
, &slopehigh
);
507 /* make signal name */
510 for (i
= 0; i
< 2; i
++)
515 if (!getNodeName(model
,signame
,&sig
[i
],&sigt
[i
]))
517 if (i
==1) mbkfree(sig
[0]);
523 for (i
= 0; i
< 2; i
++)
524 sig
[i
] = (sig
[i
]) ? mbkstrdup(sig
[i
]) : NULL
;
526 sim_getTransition(model
,transition
,trans
,ntrans
);
529 if (V_BOOL_TAB
[__SIM_USE_PRINT
].VALUE
)
535 labelname
= min_namealloc(delay
);
536 prn
= allocprn(model
,labelname
,sig1
,sig2
,sigt
,transition
,delay_type
, th_in
, th_out
);
540 sim_measure_set_signal(model
,sig1
);
543 sim_measure_set_locon(model
,sig1
);
549 labelname
= min_namealloc(slope
);
551 prn
= allocprn(model
,labelname
,sig2
,sig2
,sigt
,transition
,delay_type
, slopelow
, slopehigh
);
554 if (ntrans
[1] == SIM_MEASURE_LAST
)
555 sprintf(buf
,"%cL",trans
[1]);
557 sprintf(buf
,"%c%ld",trans
[1],ntrans
[1]);
558 prn
= allocprn(model
,labelname
,sig2
,sig2
,sigt
,buf
,delay_type
,slopelow
, slopehigh
);
564 sim_measure_set_signal(model
,sig2
);
567 sim_measure_set_locon(model
,sig2
);
573 if (V_BOOL_TAB
[__SIM_USE_MEAS
].VALUE
)
575 if (!SIM_MEAS
.CMDSTR
)
577 fprintf(stderr
,"[SIM_ERR] : Need a configuration of drive"
578 " rules : simmeascmd\n");
585 labelname
= min_namealloc(delay
);
588 sim_affectMeasCmdArg(model
,labelname
,
589 sig
[0],trans
[0],ntrans
[0],val
[0],
590 sig
[1],trans
[1],ntrans
[1],val
[1]);
591 mfe_addlabel(&(model
->LLABELS
),labelname
,model
->NBMC
);
595 labelname
= min_namealloc(slope
);
597 /* sig[1] = mbkstrdup(sig[1]);
601 ntrans
[1] = ntrans
[0];
604 i
= (trans
[1] == 'U' || trans
[1] == 'u') ? 0 : 1;
606 val
[(i
+1)%2] = slopehigh
;
608 sim_affectMeasCmdArg(model
,labelname
,
609 sig
[1],trans
[1],ntrans
[1],val
[0],
610 sig
[1],trans
[1],ntrans
[1],val
[1]);
611 mfe_addlabel(&(model
->LLABELS
),labelname
,model
->NBMC
);
615 if (sig
[i
]!=NULL
) mbkfree(sig
[i
]);
620 /*}}}************************************************************************/
621 /*{{{ sim_getTransition() */
624 /****************************************************************************/
625 int sim_getTransition(sim_model
*model
, char *trans
, char t
[2], long n
[2])
630 for (i
= 0, pt
= trans
; i
< 2; i
++)
633 if (pt
[1] == 'L' || pt
[1] == 'l')
635 n
[i
] = SIM_MEASURE_LAST
;
638 else if (!(n
[i
] = strtol(&(pt
[1]),&pt
,10)))
644 switch (sim_parameter_get_tool(model
))
651 /*}}}************************************************************************/
652 /*{{{ printMeasCmd_int() */
655 /****************************************************************************/
656 static void printMeasCmd_int(FILE *fd
, sim_meas_arg
*arg
)
660 printMeasCmd_int(fd
,arg
->NEXT
);
661 spi_print(fd
,arg
->REFCMD
->CMDSTR
,
662 arg
->ARG
[SIM_MEAS
.ARGORDER
[0]],
663 arg
->ARG
[SIM_MEAS
.ARGORDER
[1]],
664 arg
->ARG
[SIM_MEAS
.ARGORDER
[2]],
665 arg
->ARG
[SIM_MEAS
.ARGORDER
[3]],
666 arg
->ARG
[SIM_MEAS
.ARGORDER
[4]],
667 arg
->ARG
[SIM_MEAS
.ARGORDER
[5]],
668 arg
->ARG
[SIM_MEAS
.ARGORDER
[6]],
669 arg
->ARG
[SIM_MEAS
.ARGORDER
[7]],
670 arg
->ARG
[SIM_MEAS
.ARGORDER
[8]]);
674 /*}}}************************************************************************/
675 /*{{{ existMeasArg() */
678 /****************************************************************************/
679 static int existMeasArg(sim_model
*model
, sim_meas_arg
**arg
, char *label
)
681 for (*arg
= model
->LARGS
; *arg
; *arg
= (*arg
)->NEXT
)
682 if ((*arg
)->ARG
[SIM_MEAS_LABEL
] == label
)
685 return ((*arg
) != NULL
);
688 /*}}}************************************************************************/
689 /*{{{ freeMeasArg_int() */
692 /****************************************************************************/
693 static void freeMeasArg_int(sim_meas_arg
*arg
)
696 for (i
= 0; i
< SIM_MEAS_NBSIG
; i
++)
698 if (arg
->ARG
[SIM_MEAS_VALUE
+ SIM_MEAS_A4S
*i
]!=NULL
) mbkfree(arg
->ARG
[SIM_MEAS_VALUE
+ SIM_MEAS_A4S
*i
]);
700 for (i
= 0; i
< SIM_MEAS_NBSIG
; i
++)
702 if (arg
->ARG
[SIM_MEAS_NTRANS
+ SIM_MEAS_A4S
*i
]!=NULL
) mbkfree(arg
->ARG
[SIM_MEAS_NTRANS
+ SIM_MEAS_A4S
*i
]);
704 // mbkfree(arg->ARG[SIM_MEAS_NTRANS + SIM_MEAS_A4S]);
705 /* mbkfree(arg->ARG[SIM_MEAS_VALUE]);
706 mbkfree(arg->ARG[SIM_MEAS_VALUE + SIM_MEAS_A4S]);*/
708 if (arg
->ARG
[SIM_MEAS_SIG
+ SIM_MEAS_A4S
] == arg
->ARG
[SIM_MEAS_SIG
])
711 //mbkfree(arg->ARG[SIM_MEAS_NTRANS]);
712 mbkfree(arg
->ARG
[SIM_MEAS_SIG
]);
717 // mbkfree(arg->ARG[SIM_MEAS_NTRANS]);
718 mbkfree(arg
->ARG
[SIM_MEAS_SIG
]);
719 mbkfree(arg
->ARG
[SIM_MEAS_SIG
+ SIM_MEAS_A4S
]);
723 /*}}}************************************************************************/
727 /****************************************************************************/
728 static sim_meas_print
*allocprn(sim_model
*model
, char *label
, char *sig1
,
729 char *sig2
, char sigt
[2], char *transition
, int delay_type
, SIM_FLOAT th_in
, SIM_FLOAT th_out
)
733 prn
= mbkalloc(sizeof(sim_meas_print
));
735 prn
->NEXT
= model
->LPRN
;
737 prn
->SIGNAME
[0] = sig1
;
738 prn
->SIGNAME
[1] = sig2
;
739 prn
->SIGTYPE
[0] = sigt
[0];
740 prn
->SIGTYPE
[1] = sigt
[1];
741 prn
->TRANSITION
= mbkstrdup(transition
);
742 prn
->DELAY_TYPE
= delay_type
;
750 /*}}}************************************************************************/
754 /****************************************************************************/
755 static sim_meas_print
*freePrn(sim_meas_print
*prn
)
761 res
= freePrn(prn
->NEXT
);
762 mbkfree(prn
->TRANSITION
);
770 /*}}}************************************************************************/
771 /*}}}************************************************************************/
773 /*{{{ Test function for sim_meas */
775 /* /usr/local/bin/gcc -o main -L/users/disk01/antony/dev/Solaris/lib -Xlinker -z -Xlinker allextract -lSim100 -lTut100 -lSim100 -lGsp100 -lEfg100 -lCbh100 -lEqt100 -lTrc102 -lTlc100 -lApi100 -lInf112 -lCns211 -lElp110 -lAvt100 -lMlu501 -lMcl413 -lMal100 -lMsl700 -lMgl100 -lMvl409 -lMel407 -lMhl403 -lMlo501 -lSpf100 -lSpe100 -lBef100 -lBgl100 -lBvl202 -lBeg100 -lBhl110 -lBeh110 -llog202 -lRcn200 -lMut325 -lstdc++ -lnsl -ldl -lm -Xlinker -z -Xlinker defaultextract */
777 /****************************************************************************/
782 memset(model
,0,sizeof(sim_model
) * 4);
784 sim_decodeMeasCmd(".meas tran %l"
785 " TRIG v(%s1) val=%v1 %t1{rise1,fall1}=%n1{LAST1}"
786 " TARG v(%s2) val=%v2 %t2{rise2,fall2}=%n2{LAST2}");
787 sim_affectMeasCmdArg(&model
[0],"test1","a",'U',15,1.5,"b",'D',16,1.6);
788 printf("-**** test 1 ****-\n");
789 sim_printMeasCmd(&model
[0],stdout
);
791 sim_decodeMeasCmd(".measure tran %l"
792 " TRIG v(%s1) TARG v(%s2)"
794 " %t1{rise1,fall1}=%n5{LAST1} %y2{rise2,fall2}=%n2{LAST2}");
795 sim_affectMeasCmdArg(&model
[1],"test2","a",'U',15,1.5,"b",'D',16,1.6);
796 printf("-**** test 2 ****-\n");
797 sim_printMeasCmd(&model
[1],stdout
);
799 sim_decodeMeasCmd(".measure tran"
801 " TRIG v(%s1) TARG v(%s2)"
802 " %t1{rise1,fall1}=%n1{LAST1} %t2{rise2,fall2}=%n2{LAST2} %l");
803 sim_affectMeasCmdArg(&model
[2],"test3","a",'D',SIM_MEASURE_LAST
,1.5,"b",'D',25,1.6);
804 printf("-**** test 3 ****-\n");
805 sim_printMeasCmd(&model
[2],stdout
);
807 sim_decodeMeasCmd(".meas tran %l"
808 " TRIG v(%s1) val=%v1 %t1{rise1,fall1}=%n1{LAST1}"
809 " TARG v(%s2) val=%v2 %t2{rise2,fall2}=%n2{LAST2}");
810 sim_affectMeasCmdArg(&model
[3],"test4","a",'U',1 ,1.5,"b",'D',16,1.6);
811 sim_affectMeasCmdArg(&model
[3],"test5","b",'U',SIM_MEASURE_LAST
,1.5,"c",'D',17,1.7);
812 sim_affectMeasCmdArg(&model
[3],"test6","a",'D',1 ,1.5,"b",'U',18,1.4);
813 sim_affectMeasCmdArg(&model
[3],"test7","a",'D',1 ,1.5,"c",'D',19,1.5);
814 sim_freeMeasArg(&model
[3],"test4");
815 sim_freeMeasAllArg(&model
[3]);
816 printf("-**** test 4 ****-\n");
817 sim_printMeasCmd(&model
[3],stdout
);
818 sim_printMeasCmd(&model
[2],stdout
);
823 /*}}}************************************************************************/