lists struct pt_temper *modtlist and struct pt_temper *devtlist
contain parse trees handling TEMPER equations in model or instance lines. Create new lists upon entering inp_parse_temper(). Save pointers to lists in current circuit ft_curckt. Upon changing circuit, reload lists from ft_curckt. Upon removing current circuit, delete lists.
This commit is contained in:
parent
ef21363e4f
commit
c9517c397b
|
|
@ -69,18 +69,6 @@ void inp_evaluate_temper(void);
|
||||||
|
|
||||||
extern bool ft_batchmode;
|
extern bool ft_batchmode;
|
||||||
|
|
||||||
/* structure used to save expression parse trees for .model and
|
|
||||||
* device instance lines
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct pt_temper {
|
|
||||||
char *expression;
|
|
||||||
wordlist *wl;
|
|
||||||
wordlist *wlend;
|
|
||||||
INPparseTree *pt;
|
|
||||||
struct pt_temper *next;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* create an unique artificial *unusable* FILE ptr
|
* create an unique artificial *unusable* FILE ptr
|
||||||
* meant to be used with Xprintf() only to eventually
|
* meant to be used with Xprintf() only to eventually
|
||||||
|
|
@ -1697,9 +1685,13 @@ inp_parse_temper(struct line *card)
|
||||||
{
|
{
|
||||||
int error = 0;
|
int error = 0;
|
||||||
char *end_tstr, *beg_tstr, *beg_pstr, *str_ptr, *devmodname, *paramname;
|
char *end_tstr, *beg_tstr, *beg_pstr, *str_ptr, *devmodname, *paramname;
|
||||||
|
/* reset lists */
|
||||||
|
modtlist = NULL;
|
||||||
|
devtlist = NULL;
|
||||||
|
|
||||||
/* skip title line */
|
/* skip title line */
|
||||||
card = card->li_next;
|
card = card->li_next;
|
||||||
|
|
||||||
for (; card; card = card->li_next) {
|
for (; card; card = card->li_next) {
|
||||||
|
|
||||||
char *curr_line = card->li_line;
|
char *curr_line = card->li_line;
|
||||||
|
|
@ -1830,11 +1822,39 @@ inp_parse_temper_trees(void)
|
||||||
|
|
||||||
for(d = devtlist; d; d = d->next)
|
for(d = devtlist; d; d = d->next)
|
||||||
INPgetTree(&d->expression, &d->pt, ft_curckt->ci_ckt, NULL);
|
INPgetTree(&d->expression, &d->pt, ft_curckt->ci_ckt, NULL);
|
||||||
|
ft_curckt->devtlist = devtlist;
|
||||||
|
|
||||||
for(d = modtlist; d; d = d->next)
|
for(d = modtlist; d; d = d->next)
|
||||||
INPgetTree(&d->expression, &d->pt, ft_curckt->ci_ckt, NULL);
|
INPgetTree(&d->expression, &d->pt, ft_curckt->ci_ckt, NULL);
|
||||||
|
ft_curckt->modtlist = modtlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* set modtlist and devtlist. Called from com_scirc(), when another circuit is selected */
|
||||||
|
void
|
||||||
|
set_tlist(struct circ *curckt)
|
||||||
|
{
|
||||||
|
modtlist = curckt->modtlist;
|
||||||
|
devtlist = curckt->devtlist;
|
||||||
|
expr_w_temper = (modtlist || devtlist);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remove the actual modtlist and devtlist */
|
||||||
|
void
|
||||||
|
rem_tlist(void)
|
||||||
|
{
|
||||||
|
if (devtlist) {
|
||||||
|
// tfree(devtlist->expression);
|
||||||
|
wl_free(devtlist->wl);
|
||||||
|
/*should we remove the parse tree pt ?*/
|
||||||
|
tfree(devtlist);
|
||||||
|
}
|
||||||
|
if (modtlist) {
|
||||||
|
// tfree(modtlist->expression);
|
||||||
|
wl_free(modtlist->wl);
|
||||||
|
/*should we remove the parse tree pt ?*/
|
||||||
|
tfree(modtlist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
inp_evaluate_temper(void)
|
inp_evaluate_temper(void)
|
||||||
|
|
|
||||||
|
|
@ -112,6 +112,8 @@ com_scirc(wordlist *wl)
|
||||||
dbs = ft_curckt->ci_dbs;
|
dbs = ft_curckt->ci_dbs;
|
||||||
/* set the numparam dicos structure for use with measure */
|
/* set the numparam dicos structure for use with measure */
|
||||||
nupa_set_dicoslist(ft_curckt->ci_dicos);
|
nupa_set_dicoslist(ft_curckt->ci_dicos);
|
||||||
|
/* set the temper lists */
|
||||||
|
set_tlist(ft_curckt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -259,6 +259,7 @@ com_remcirc(wordlist *wl)
|
||||||
tfree(ft_curckt->ci_name);
|
tfree(ft_curckt->ci_name);
|
||||||
if (ft_curckt->ci_filename)
|
if (ft_curckt->ci_filename)
|
||||||
tfree(ft_curckt->ci_filename);
|
tfree(ft_curckt->ci_filename);
|
||||||
|
rem_tlist();
|
||||||
|
|
||||||
/* delete the actual circuit entry from ft_circuits */
|
/* delete the actual circuit entry from ft_circuits */
|
||||||
for (p = ft_circuits; p; p = p->ci_next) {
|
for (p = ft_circuits; p; p = p->ci_next) {
|
||||||
|
|
@ -284,5 +285,6 @@ com_remcirc(wordlist *wl)
|
||||||
modtab = ft_curckt->ci_modtab;
|
modtab = ft_curckt->ci_modtab;
|
||||||
dbs = ft_curckt->ci_dbs;
|
dbs = ft_curckt->ci_dbs;
|
||||||
nupa_set_dicoslist(ft_curckt->ci_dicos);
|
nupa_set_dicoslist(ft_curckt->ci_dicos);
|
||||||
|
set_tlist(ft_curckt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,19 @@ struct save_info {
|
||||||
int used;
|
int used;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The curcuits that are currently available to the user. */
|
|
||||||
|
/* structure used to save expression parse trees for .model and
|
||||||
|
* device instance lines
|
||||||
|
*/
|
||||||
|
struct pt_temper {
|
||||||
|
char *expression;
|
||||||
|
wordlist *wl;
|
||||||
|
wordlist *wlend;
|
||||||
|
INPparseTree *pt;
|
||||||
|
struct pt_temper *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The circuits that are currently available to the user. */
|
||||||
|
|
||||||
struct circ {
|
struct circ {
|
||||||
char *ci_name; /* What the circuit can be called. */
|
char *ci_name; /* What the circuit can be called. */
|
||||||
|
|
@ -54,7 +66,8 @@ struct circ {
|
||||||
JOB *ci_curOpt; /* the most recent options anal. for the circuit */
|
JOB *ci_curOpt; /* the most recent options anal. for the circuit */
|
||||||
char *ci_last_an; /* name of last analysis run */
|
char *ci_last_an; /* name of last analysis run */
|
||||||
int ci_dicos; /* index to the numparam dicoS structure for this circuit*/
|
int ci_dicos; /* index to the numparam dicoS structure for this circuit*/
|
||||||
|
struct pt_temper *modtlist; /* List of all expressions with 'temper' in .model lines */
|
||||||
|
struct pt_temper *devtlist; /* List of all expressions with 'temper' in device instance lines */
|
||||||
FTESTATistics *FTEstats; /* Statistics for the front end */
|
FTESTATistics *FTEstats; /* Statistics for the front end */
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -207,7 +207,7 @@ extern bool gr_circular;
|
||||||
/* inp.c */
|
/* inp.c */
|
||||||
|
|
||||||
void inp_dodeck(struct line *deck, char *tt, wordlist *end, bool reuse,
|
void inp_dodeck(struct line *deck, char *tt, wordlist *end, bool reuse,
|
||||||
struct line *options, char *filename);
|
struct line *options, char *filename);
|
||||||
extern void inp_source(char *file);
|
extern void inp_source(char *file);
|
||||||
void inp_spsource(FILE *fp, bool comfile, char *filename, bool intfile);
|
void inp_spsource(FILE *fp, bool comfile, char *filename, bool intfile);
|
||||||
extern void inp_casefix(char *string);
|
extern void inp_casefix(char *string);
|
||||||
|
|
@ -221,12 +221,14 @@ extern void mc_free(void);
|
||||||
void eval_seed_opt(struct line *deck);
|
void eval_seed_opt(struct line *deck);
|
||||||
|
|
||||||
extern char** circarray;
|
extern char** circarray;
|
||||||
|
extern void set_tlist(struct circ *curckt);
|
||||||
|
extern void rem_tlist(void);
|
||||||
|
|
||||||
/* nutinp.c */
|
/* nutinp.c */
|
||||||
|
|
||||||
void inp_nutsource(FILE *fp, bool comfile, char *filename);
|
void inp_nutsource(FILE *fp, bool comfile, char *filename);
|
||||||
void nutinp_dodeck(struct line *deck, char *tt, wordlist *end, bool reuse,
|
void nutinp_dodeck(struct line *deck, char *tt, wordlist *end, bool reuse,
|
||||||
struct line *options, char *filename);
|
struct line *options, char *filename);
|
||||||
extern void nutcom_source(wordlist *wl);
|
extern void nutcom_source(wordlist *wl);
|
||||||
|
|
||||||
/* interpolate.c */
|
/* interpolate.c */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue