src/frontend/subckt.c src/frontend/vectors.c
src/spicelib/analysis/dctran.c src/spicelib/parser/inperror.c src/xspice/idn/idndig.c src/xspice/mif/mif_inp2.c ChangeLog Memory leak fixes
This commit is contained in:
parent
4c572183d5
commit
14483620d4
|
|
@ -1,5 +1,11 @@
|
||||||
2003-07-17 Stefan Jones <stefan.jones@multigig.com>
|
2003-07-17 Stefan Jones <stefan.jones@multigig.com>
|
||||||
|
|
||||||
|
* src/frontend/{subckt.c,vectors.c}
|
||||||
|
src/spicelib/analysis/dctran.c
|
||||||
|
src/spicelib/parser/inperror.c
|
||||||
|
src/xspice/idn/idndig.c src/xspice/mif/mif_inp2.c :
|
||||||
|
More memory leak fixes
|
||||||
|
|
||||||
* configure.in src/xspice/xspice.c :
|
* configure.in src/xspice/xspice.c :
|
||||||
Fix compile problems with garbage collector
|
Fix compile problems with garbage collector
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -332,14 +332,14 @@ doit(struct line *deck)
|
||||||
gotone = FALSE;
|
gotone = FALSE;
|
||||||
for (c = deck, lc = NULL; c; ) {
|
for (c = deck, lc = NULL; c; ) {
|
||||||
if (ciprefix(invoke, c->li_line)) { /* found reference to .subckt (i.e. component with refdes X) */
|
if (ciprefix(invoke, c->li_line)) { /* found reference to .subckt (i.e. component with refdes X) */
|
||||||
char *tofree;
|
char *tofree, *tofree2;
|
||||||
gotone = TRUE;
|
gotone = TRUE;
|
||||||
t = tofree = s = copy(c->li_line); /* s & t hold copy of component line */
|
t = tofree = s = copy(c->li_line); /* s & t hold copy of component line */
|
||||||
|
|
||||||
/* make scname point to first non-whitepace chars after refdes invocation
|
/* make scname point to first non-whitepace chars after refdes invocation
|
||||||
* e.g. if invocation is Xreference, *scname = reference
|
* e.g. if invocation is Xreference, *scname = reference
|
||||||
*/
|
*/
|
||||||
scname = gettok(&s);
|
tofree2 = scname = gettok(&s);
|
||||||
scname += strlen(invoke);
|
scname += strlen(invoke);
|
||||||
while ((*scname == ' ') || (*scname == '\t') ||
|
while ((*scname == ' ') || (*scname == '\t') ||
|
||||||
(*scname == ':'))
|
(*scname == ':'))
|
||||||
|
|
@ -398,6 +398,7 @@ doit(struct line *deck)
|
||||||
*/
|
*/
|
||||||
if (!translate(lcc, s, t, scname, subname))
|
if (!translate(lcc, s, t, scname, subname))
|
||||||
error = 1;
|
error = 1;
|
||||||
|
tfree(subname);
|
||||||
|
|
||||||
/* Now splice the decks together. */
|
/* Now splice the decks together. */
|
||||||
if (lc)
|
if (lc)
|
||||||
|
|
@ -410,6 +411,7 @@ doit(struct line *deck)
|
||||||
c = lcc->li_next;
|
c = lcc->li_next;
|
||||||
lc = lcc;
|
lc = lcc;
|
||||||
tfree(tofree);
|
tfree(tofree);
|
||||||
|
tfree(tofree2);
|
||||||
} /* if (ciprefix(invoke, c->li_line)) . . . */
|
} /* if (ciprefix(invoke, c->li_line)) . . . */
|
||||||
else {
|
else {
|
||||||
lc = c;
|
lc = c;
|
||||||
|
|
@ -481,19 +483,20 @@ translate(struct line *deck, char *formal, char *actual, char *scname, char *sub
|
||||||
struct line *c;
|
struct line *c;
|
||||||
char *buffer, *next_name, dev_type, *name, *s, *t, ch, *nametofree;
|
char *buffer, *next_name, dev_type, *name, *s, *t, ch, *nametofree;
|
||||||
int nnodes, i, dim;
|
int nnodes, i, dim;
|
||||||
|
int rtn=0;
|
||||||
|
|
||||||
/* settrans builds the table holding the translated netnames. */
|
/* settrans builds the table holding the translated netnames. */
|
||||||
i = settrans(formal, actual, subname);
|
i = settrans(formal, actual, subname);
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Too few parameters for subcircuit type \"%s\" (instance: x%s)\n",
|
"Too few parameters for subcircuit type \"%s\" (instance: x%s)\n",
|
||||||
subname, scname);
|
subname, scname);
|
||||||
return 0;
|
goto quit;
|
||||||
} else if (i > 0) {
|
} else if (i > 0) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Too many parameters for subcircuit type \"%s\" (instance: x%s)\n",
|
"Too many parameters for subcircuit type \"%s\" (instance: x%s)\n",
|
||||||
subname, scname);
|
subname, scname);
|
||||||
return 0;
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* now iterate through the .subckt deck and translate the cards. */
|
/* now iterate through the .subckt deck and translate the cards. */
|
||||||
|
|
@ -627,7 +630,7 @@ translate(struct line *deck, char *formal, char *actual, char *scname, char *sub
|
||||||
|
|
||||||
|
|
||||||
s = c->li_line; /* s now holds the SPICE line */
|
s = c->li_line; /* s now holds the SPICE line */
|
||||||
name = gettok(&s); /* name points to the refdes */
|
t = name = gettok(&s); /* name points to the refdes */
|
||||||
if (!name)
|
if (!name)
|
||||||
continue;
|
continue;
|
||||||
if (!*name) {
|
if (!*name) {
|
||||||
|
|
@ -650,6 +653,7 @@ translate(struct line *deck, char *formal, char *actual, char *scname, char *sub
|
||||||
name);
|
name);
|
||||||
else
|
else
|
||||||
(void) sprintf(buffer, "%c:%s ", ch, scname); /* F:subcircuitname */
|
(void) sprintf(buffer, "%c:%s ", ch, scname); /* F:subcircuitname */
|
||||||
|
tfree(t);
|
||||||
|
|
||||||
|
|
||||||
/* Next iterate over all nodes (netnames) found and translate them. */
|
/* Next iterate over all nodes (netnames) found and translate them. */
|
||||||
|
|
@ -660,7 +664,7 @@ translate(struct line *deck, char *formal, char *actual, char *scname, char *sub
|
||||||
if (name == NULL) {
|
if (name == NULL) {
|
||||||
fprintf(cp_err, "Error: too few nodes: %s\n",
|
fprintf(cp_err, "Error: too few nodes: %s\n",
|
||||||
c->li_line);
|
c->li_line);
|
||||||
return 0;
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* call gettrans and see if netname was used in the invocation */
|
/* call gettrans and see if netname was used in the invocation */
|
||||||
|
|
@ -675,6 +679,7 @@ translate(struct line *deck, char *formal, char *actual, char *scname, char *sub
|
||||||
(void) sprintf(buffer + strlen(buffer),
|
(void) sprintf(buffer + strlen(buffer),
|
||||||
"%s:%s ", scname, name);
|
"%s:%s ", scname, name);
|
||||||
}
|
}
|
||||||
|
tfree(name);
|
||||||
} /* while (nnodes-- . . . . */
|
} /* while (nnodes-- . . . . */
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -694,7 +699,8 @@ translate(struct line *deck, char *formal, char *actual, char *scname, char *sub
|
||||||
if( get_l_paren(&s) == 1 ) {
|
if( get_l_paren(&s) == 1 ) {
|
||||||
fprintf(cp_err, "Error: no left paren after POLY %s\n",
|
fprintf(cp_err, "Error: no left paren after POLY %s\n",
|
||||||
c->li_line);
|
c->li_line);
|
||||||
return 0;
|
tfree(next_name);
|
||||||
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
nametofree = gettok_noparens(&s);
|
nametofree = gettok_noparens(&s);
|
||||||
|
|
@ -705,7 +711,8 @@ translate(struct line *deck, char *formal, char *actual, char *scname, char *sub
|
||||||
if( get_r_paren(&s) == 1 ) {
|
if( get_r_paren(&s) == 1 ) {
|
||||||
fprintf(cp_err, "Error: no right paren after POLY %s\n",
|
fprintf(cp_err, "Error: no right paren after POLY %s\n",
|
||||||
c->li_line);
|
c->li_line);
|
||||||
return 0;
|
tfree(next_name);
|
||||||
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Write POLY(dim) into buffer */
|
/* Write POLY(dim) into buffer */
|
||||||
|
|
@ -716,15 +723,16 @@ translate(struct line *deck, char *formal, char *actual, char *scname, char *sub
|
||||||
} /* if ( (strcmp(next_name, "POLY") == 0) . . . */
|
} /* if ( (strcmp(next_name, "POLY") == 0) . . . */
|
||||||
else
|
else
|
||||||
dim = 1; /* only one controlling source . . . */
|
dim = 1; /* only one controlling source . . . */
|
||||||
|
tfree(next_name);
|
||||||
|
|
||||||
/* Now translate the controlling source/nodes */
|
/* Now translate the controlling source/nodes */
|
||||||
nnodes = dim * numdevs(c->li_line);
|
nnodes = dim * numdevs(c->li_line);
|
||||||
while (nnodes-- > 0) {
|
while (nnodes-- > 0) {
|
||||||
name = gettok(&s); /* name points to the returned token */
|
nametofree = name = gettok(&s); /* name points to the returned token */
|
||||||
if (name == NULL) {
|
if (name == NULL) {
|
||||||
fprintf(cp_err, "Error: too few devs: %s\n",
|
fprintf(cp_err, "Error: too few devs: %s\n",
|
||||||
c->li_line);
|
c->li_line);
|
||||||
return 0;
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (dev_type == 'f') ||
|
if ( (dev_type == 'f') ||
|
||||||
|
|
@ -732,13 +740,6 @@ translate(struct line *deck, char *formal, char *actual, char *scname, char *sub
|
||||||
(dev_type == 'h') ||
|
(dev_type == 'h') ||
|
||||||
(dev_type == 'H') ) {
|
(dev_type == 'H') ) {
|
||||||
|
|
||||||
/*
|
|
||||||
if ( (strcmp(&dev_type, "f") == 0) ||
|
|
||||||
(strcmp(&dev_type, "F") == 0) ||
|
|
||||||
(strcmp(&dev_type, "h") == 0) ||
|
|
||||||
(strcmp(&dev_type, "H") == 0) ) {
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Handle voltage source name */
|
/* Handle voltage source name */
|
||||||
|
|
||||||
#ifdef TRACE
|
#ifdef TRACE
|
||||||
|
|
@ -775,6 +776,7 @@ translate(struct line *deck, char *formal, char *actual, char *scname, char *sub
|
||||||
/* From netname and Urefdes creates Urefdes:netname */
|
/* From netname and Urefdes creates Urefdes:netname */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
tfree(nametofree);
|
||||||
} /* while (nnodes--. . . . */
|
} /* while (nnodes--. . . . */
|
||||||
|
|
||||||
/* Now write out remainder of line (polynomial coeffs) */
|
/* Now write out remainder of line (polynomial coeffs) */
|
||||||
|
|
@ -819,7 +821,7 @@ translate(struct line *deck, char *formal, char *actual, char *scname, char *sub
|
||||||
if (name == NULL) {
|
if (name == NULL) {
|
||||||
fprintf(cp_err, "Error: too few nodes: %s\n",
|
fprintf(cp_err, "Error: too few nodes: %s\n",
|
||||||
c->li_line);
|
c->li_line);
|
||||||
return 0;
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* call gettrans and see if netname was used in the invocation */
|
/* call gettrans and see if netname was used in the invocation */
|
||||||
|
|
@ -847,7 +849,7 @@ translate(struct line *deck, char *formal, char *actual, char *scname, char *sub
|
||||||
if (name == NULL) {
|
if (name == NULL) {
|
||||||
fprintf(cp_err, "Error: too few devs: %s\n",
|
fprintf(cp_err, "Error: too few devs: %s\n",
|
||||||
c->li_line);
|
c->li_line);
|
||||||
return 0;
|
goto quit;
|
||||||
}
|
}
|
||||||
ch = *name;
|
ch = *name;
|
||||||
name++;
|
name++;
|
||||||
|
|
@ -885,7 +887,15 @@ translate(struct line *deck, char *formal, char *actual, char *scname, char *sub
|
||||||
|
|
||||||
tfree(buffer);
|
tfree(buffer);
|
||||||
} /* for (c = deck . . . . */
|
} /* for (c = deck . . . . */
|
||||||
return 1;
|
rtn = 1;
|
||||||
|
quit:
|
||||||
|
for (i = 0; ; i++) {
|
||||||
|
if(!table[i].t_old && !table[i].t_new)
|
||||||
|
break;
|
||||||
|
FREE(table[i].t_old);
|
||||||
|
FREE(table[i].t_new);
|
||||||
|
}
|
||||||
|
return rtn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1007,6 +1017,8 @@ settrans(char *formal, char *actual, char *subname)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
bzero(table,sizeof(*table));
|
||||||
|
|
||||||
for (i = 0; ; i++) {
|
for (i = 0; ; i++) {
|
||||||
table[i].t_old = gettok(&formal);
|
table[i].t_old = gettok(&formal);
|
||||||
table[i].t_new = gettok(&actual);
|
table[i].t_new = gettok(&actual);
|
||||||
|
|
@ -1217,6 +1229,7 @@ modtranslate(struct line *deck, char *subname)
|
||||||
buffer = tmalloc(strlen(name) + strlen(t) +
|
buffer = tmalloc(strlen(name) + strlen(t) +
|
||||||
strlen(subname) + 4);
|
strlen(subname) + 4);
|
||||||
(void) sprintf(buffer, "%s ",name); /* at this point, buffer = ".model " */
|
(void) sprintf(buffer, "%s ",name); /* at this point, buffer = ".model " */
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t); /* name now holds model name */
|
name = gettok(&t); /* name now holds model name */
|
||||||
wlsub = alloc(struct wordlist);
|
wlsub = alloc(struct wordlist);
|
||||||
wlsub->wl_next = submod;
|
wlsub->wl_next = submod;
|
||||||
|
|
@ -1269,10 +1282,13 @@ devmodtranslate(struct line *deck, char *subname)
|
||||||
case 'c':
|
case 'c':
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer,"%s ",name);
|
(void) sprintf(buffer,"%s ",name);
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
|
|
||||||
if (*t) {
|
if (*t) {
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
|
|
@ -1287,6 +1303,7 @@ devmodtranslate(struct line *deck, char *subname)
|
||||||
}
|
}
|
||||||
if (!found)
|
if (!found)
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
found = FALSE;
|
found = FALSE;
|
||||||
|
|
@ -1303,6 +1320,7 @@ devmodtranslate(struct line *deck, char *subname)
|
||||||
}
|
}
|
||||||
if (!found)
|
if (!found)
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
(void) strcat(buffer, t);
|
(void) strcat(buffer, t);
|
||||||
|
|
@ -1313,10 +1331,13 @@ devmodtranslate(struct line *deck, char *subname)
|
||||||
case 'd':
|
case 'd':
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer,"%s ",name);
|
(void) sprintf(buffer,"%s ",name);
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
|
|
||||||
/* Now, is this a subcircuit model? */
|
/* Now, is this a subcircuit model? */
|
||||||
|
|
@ -1331,6 +1352,7 @@ devmodtranslate(struct line *deck, char *subname)
|
||||||
|
|
||||||
if (!found)
|
if (!found)
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
(void) strcat(buffer, t);
|
(void) strcat(buffer, t);
|
||||||
tfree(s->li_line);
|
tfree(s->li_line);
|
||||||
s->li_line = buffer;
|
s->li_line = buffer;
|
||||||
|
|
@ -1372,14 +1394,19 @@ devmodtranslate(struct line *deck, char *subname)
|
||||||
case 'm':
|
case 'm':
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer,"%s ",name);
|
(void) sprintf(buffer,"%s ",name);
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
|
|
||||||
/* Now, is this a subcircuit model? */
|
/* Now, is this a subcircuit model? */
|
||||||
|
|
@ -1397,17 +1424,22 @@ devmodtranslate(struct line *deck, char *subname)
|
||||||
(void) strcat(buffer, t);
|
(void) strcat(buffer, t);
|
||||||
tfree(s->li_line);
|
tfree(s->li_line);
|
||||||
s->li_line = buffer;
|
s->li_line = buffer;
|
||||||
|
tfree(name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'q':
|
case 'q':
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer,"%s ",name);
|
(void) sprintf(buffer,"%s ",name);
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
name = gettok(&t);
|
name = gettok(&t);
|
||||||
|
|
||||||
/* Now, is this a subcircuit model? */
|
/* Now, is this a subcircuit model? */
|
||||||
|
|
@ -1421,6 +1453,7 @@ devmodtranslate(struct line *deck, char *subname)
|
||||||
}
|
}
|
||||||
if (!found)
|
if (!found)
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
|
|
||||||
found = FALSE;
|
found = FALSE;
|
||||||
if (*t) {
|
if (*t) {
|
||||||
|
|
@ -1436,6 +1469,7 @@ devmodtranslate(struct line *deck, char *subname)
|
||||||
}
|
}
|
||||||
if (!found)
|
if (!found)
|
||||||
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
(void) sprintf(buffer + strlen(buffer), "%s ", name);
|
||||||
|
tfree(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
(void) strcat(buffer, t);
|
(void) strcat(buffer, t);
|
||||||
|
|
|
||||||
|
|
@ -640,7 +640,8 @@ bool
|
||||||
vec_eq(struct dvec *v1, struct dvec *v2)
|
vec_eq(struct dvec *v1, struct dvec *v2)
|
||||||
{
|
{
|
||||||
char *s1, *s2;
|
char *s1, *s2;
|
||||||
|
bool rtn;
|
||||||
|
|
||||||
if (v1->v_plot != v2->v_plot)
|
if (v1->v_plot != v2->v_plot)
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
|
|
||||||
|
|
@ -648,9 +649,13 @@ vec_eq(struct dvec *v1, struct dvec *v2)
|
||||||
s2 = vec_basename(v2);
|
s2 = vec_basename(v2);
|
||||||
|
|
||||||
if (cieq(s1, s2))
|
if (cieq(s1, s2))
|
||||||
return (TRUE);
|
rtn = TRUE;
|
||||||
else
|
else
|
||||||
return (FALSE);
|
rtn = FALSE;
|
||||||
|
|
||||||
|
tfree(s1);
|
||||||
|
tfree(s2);
|
||||||
|
return rtn;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the name of the vector with the plot prefix stripped off. This
|
/* Return the name of the vector with the plot prefix stripped off. This
|
||||||
|
|
|
||||||
|
|
@ -126,6 +126,7 @@ DCtran(CKTcircuit *ckt,
|
||||||
(void*)ckt->CKTcurJob,
|
(void*)ckt->CKTcurJob,
|
||||||
ckt->CKTcurJob->JOBname,timeUid,IF_REAL,numNames,nameList,
|
ckt->CKTcurJob->JOBname,timeUid,IF_REAL,numNames,nameList,
|
||||||
IF_REAL,&(((TRANan*)ckt->CKTcurJob)->TRANplot));
|
IF_REAL,&(((TRANan*)ckt->CKTcurJob)->TRANplot));
|
||||||
|
tfree(nameList);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
|
|
||||||
ckt->CKTtime = 0;
|
ckt->CKTtime = 0;
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,8 @@ char *INPerror(int type)
|
||||||
char *ebuf;
|
char *ebuf;
|
||||||
|
|
||||||
/*CDHW Lots of things set errMsg but it is never used so let's hack it in CDHW*/
|
/*CDHW Lots of things set errMsg but it is never used so let's hack it in CDHW*/
|
||||||
if ( errMsg ) {
|
if ( errMsg )
|
||||||
val = errMsg; errMsg=NULL; }
|
val = errMsg;
|
||||||
else
|
else
|
||||||
/*CDHW end of hack CDHW*/
|
/*CDHW end of hack CDHW*/
|
||||||
val = SPerror(type);
|
val = SPerror(type);
|
||||||
|
|
@ -55,5 +55,6 @@ char *INPerror(int type)
|
||||||
sprintf(ebuf, "%s\n", val);
|
sprintf(ebuf, "%s\n", val);
|
||||||
}
|
}
|
||||||
#endif /* HAVE_ASPRINTF */
|
#endif /* HAVE_ASPRINTF */
|
||||||
|
FREE(errMsg);
|
||||||
return ebuf;
|
return ebuf;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,14 +39,11 @@ NON-STANDARD FEATURES
|
||||||
|
|
||||||
============================================================================*/
|
============================================================================*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include "ngspice.h"
|
||||||
|
|
||||||
#include "cm.h"
|
#include "cm.h"
|
||||||
|
|
||||||
#include "evtudn.h"
|
#include "evtudn.h"
|
||||||
|
|
||||||
void *tmalloc(size_t);
|
|
||||||
|
|
||||||
|
|
||||||
/* ************************************************************************ */
|
/* ************************************************************************ */
|
||||||
|
|
||||||
|
|
@ -146,7 +143,7 @@ void idn_digital_resolve(int num_struct,
|
||||||
|
|
||||||
/* Cast the input void pointers to pointers of the digital type */
|
/* Cast the input void pointers to pointers of the digital type */
|
||||||
dig_struct = evt_struct;
|
dig_struct = evt_struct;
|
||||||
dig_struct_array = evt_struct_array;
|
dig_struct_array = (Digital_t **)evt_struct_array;
|
||||||
|
|
||||||
/* Copy the first member of the array directly to the output */
|
/* Copy the first member of the array directly to the output */
|
||||||
dig_struct->state = dig_struct_array[0]->state;
|
dig_struct->state = dig_struct_array[0]->state;
|
||||||
|
|
|
||||||
|
|
@ -188,6 +188,7 @@ card *current; /* the card we are to parse */
|
||||||
/* and return a pointer to its structure in 'thismodel' */
|
/* and return a pointer to its structure in 'thismodel' */
|
||||||
|
|
||||||
current->error = MIFgetMod(ckt, model, &thismodel, tab);
|
current->error = MIFgetMod(ckt, model, &thismodel, tab);
|
||||||
|
tfree(name);
|
||||||
|
|
||||||
if(current->error) {
|
if(current->error) {
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue