bipolar handling fixed
This commit is contained in:
parent
7072bb23f1
commit
1de4a31321
|
|
@ -1,3 +1,10 @@
|
||||||
|
2009-05-16 Holger Vogt
|
||||||
|
* inpcom.c lines 2940ff fix case 'q'
|
||||||
|
* inp.c:788 error message with original line number from
|
||||||
|
input deck
|
||||||
|
* inp2q.c:155 error message if no model is found and default
|
||||||
|
BJT is selected instead
|
||||||
|
|
||||||
2009-05-12 Holger Vogt
|
2009-05-12 Holger Vogt
|
||||||
* inpcom.c fcn inp_fix_gnd_name() remove excessive white
|
* inpcom.c fcn inp_fix_gnd_name() remove excessive white
|
||||||
spaces after replacing gnd by 0
|
spaces after replacing gnd by 0
|
||||||
|
|
|
||||||
|
|
@ -785,7 +785,7 @@ inp_dodeck(struct line *deck, char *tt, wordlist *end, bool reuse,
|
||||||
|
|
||||||
if (p == dd->li_error)
|
if (p == dd->li_error)
|
||||||
out_printf("Error on line %d : %s\n\t%s\n",
|
out_printf("Error on line %d : %s\n\t%s\n",
|
||||||
dd->li_linenum, dd->li_line, dd->li_error);
|
dd->li_linenum_orig, dd->li_line, dd->li_error);
|
||||||
else
|
else
|
||||||
out_printf("\t%s\n", p);
|
out_printf("\t%s\n", p);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2899,7 +2899,7 @@ static int
|
||||||
get_number_terminals( char *c )
|
get_number_terminals( char *c )
|
||||||
{
|
{
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
char *name[10];
|
char *name[12];
|
||||||
char nam_buf[33];
|
char nam_buf[33];
|
||||||
bool area_found = FALSE;
|
bool area_found = FALSE;
|
||||||
|
|
||||||
|
|
@ -2938,16 +2938,32 @@ get_number_terminals( char *c )
|
||||||
return i-j-2;
|
return i-j-2;
|
||||||
break;
|
break;
|
||||||
case 'q': /* recognition of 3/4 terminal bjt's needed */
|
case 'q': /* recognition of 3/4 terminal bjt's needed */
|
||||||
|
/* QXXXXXXX NC NB NE <NS> MNAME <AREA> <OFF> <IC=VBE, VCE> <TEMP=T> */
|
||||||
|
/* 12 tokens maximum */
|
||||||
i = j = 0;
|
i = j = 0;
|
||||||
while ( (i < 10) && (*c != '\0') ) {
|
while ( (i < 12) && (*c != '\0') ) {
|
||||||
|
char* comma;
|
||||||
name[i] = gettok_instance(&c);
|
name[i] = gettok_instance(&c);
|
||||||
if (strstr(name[i], "off") || strstr(name[i], "=")) j++;
|
if (strstr(name[i], "off") || strstr(name[i], "=")) j++;
|
||||||
|
/* If we have IC=VBE, VCE instead of IC=VBE,VCE we need to inc j */
|
||||||
|
if ((comma = strstr(name[i], ",")) && ( *(++comma) == NULL)) j++;
|
||||||
|
/* If we have IC=VBE , VCE we need to inc j */
|
||||||
|
if (eq(name[i], ",")) j++;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
i--;
|
i--;
|
||||||
area_found = FALSE;
|
area_found = FALSE;
|
||||||
for (k = i; k > i-j-1; k--) {
|
for (k = i; k > i-j-1; k--) {
|
||||||
if (isdigit(*name[k])) area_found = TRUE;
|
bool only_digits = TRUE;
|
||||||
|
char* nametmp = name[k];
|
||||||
|
/* MNAME has to contain at least one alpha character. AREA may be assumed
|
||||||
|
if we have a token with only digits, and where the previous token does not
|
||||||
|
end with a ',' */
|
||||||
|
while (*nametmp) {
|
||||||
|
if (isalpha(*nametmp) || (*nametmp == ',')) only_digits = FALSE;
|
||||||
|
nametmp++;
|
||||||
|
}
|
||||||
|
if (only_digits && (strstr(name[k-1],",") == NULL)) area_found = TRUE;
|
||||||
}
|
}
|
||||||
if (area_found) {
|
if (area_found) {
|
||||||
return i-j-2;
|
return i-j-2;
|
||||||
|
|
|
||||||
|
|
@ -141,15 +141,21 @@ void INP2Q(void *ckt, INPtables * tab, card * current, void *gnode)
|
||||||
type = (thismodel->INPmodType);
|
type = (thismodel->INPmodType);
|
||||||
mdfast = (thismodel->INPmodfast);
|
mdfast = (thismodel->INPmodfast);
|
||||||
} else {
|
} else {
|
||||||
type = INPtypelook("BJT");
|
/* no model found */
|
||||||
|
type = INPtypelook("BJT");
|
||||||
if (type < 0) {
|
if (type < 0) {
|
||||||
LITERR("Device type BJT not supported by this binary\n");
|
LITERR("Device type BJT not supported by this binary\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!tab->defQmod) {
|
if (!tab->defQmod) {
|
||||||
/* create default Q model */
|
/* create default Q model */
|
||||||
|
char *err;
|
||||||
IFnewUid(ckt, &uid, (IFuid) NULL, "Q", UID_MODEL, (void **) NULL);
|
IFnewUid(ckt, &uid, (IFuid) NULL, "Q", UID_MODEL, (void **) NULL);
|
||||||
IFC(newModel, (ckt, type, &(tab->defQmod), uid));
|
IFC(newModel, (ckt, type, &(tab->defQmod), uid));
|
||||||
|
err = (char *) MALLOC((70 + strlen(model)) * sizeof(char));
|
||||||
|
(void) sprintf(err, "Unable to find definition of model %s - default BJT assumed \n", model);
|
||||||
|
LITERR(err);
|
||||||
|
tfree(err);
|
||||||
}
|
}
|
||||||
mdfast = tab->defQmod;
|
mdfast = tab->defQmod;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue