Tidy code in get_number_terminals(), removing unneeded copying.
This commit is contained in:
parent
d18479b45b
commit
b41b8a48c3
|
|
@ -5156,10 +5156,10 @@ static int inp_get_param_level(
|
|||
the first letter of its instance line. Returns 0 upon error. */
|
||||
int get_number_terminals(char *c)
|
||||
{
|
||||
int i, j, k;
|
||||
int i, j, k;
|
||||
char *inst;
|
||||
char *name[12];
|
||||
char nam_buf[128];
|
||||
bool area_found = FALSE;
|
||||
bool area_found = FALSE;
|
||||
|
||||
if (!c)
|
||||
return 0;
|
||||
|
|
@ -5181,28 +5181,31 @@ int get_number_terminals(char *c)
|
|||
but still allow self heating diode with ngspice syntax. */
|
||||
if (newcompat.ps && !search_plain_identifier(c, "thermal"))
|
||||
return 2;
|
||||
i = 0;
|
||||
|
||||
/* find the first token with "off" or "=" in the line*/
|
||||
while ((i < 10) && (*c != '\0')) {
|
||||
char *inst = gettok_instance(&c);
|
||||
strncpy(nam_buf, inst, sizeof(nam_buf) - 1);
|
||||
txfree(inst);
|
||||
if ( i > 3 && (search_plain_identifier(nam_buf, "off") || search_plain_identifier(nam_buf, "thermal") || strchr(nam_buf, '=')))
|
||||
for (i = 0; (i < 10) && (*c != '\0'); ++i) {
|
||||
inst = gettok_instance(&c);
|
||||
if (i > 3 && (search_plain_identifier(inst, "off") ||
|
||||
search_plain_identifier(inst, "thermal") ||
|
||||
strchr(inst, '='))) {
|
||||
txfree(inst);
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
txfree(inst);
|
||||
}
|
||||
return i - 2;
|
||||
break;
|
||||
case 'x':
|
||||
i = 0;
|
||||
/* find the first token with "params:" or "=" in the line*/
|
||||
while ((i < 100) && (*c != '\0')) {
|
||||
char *inst = gettok_instance(&c);
|
||||
strncpy(nam_buf, inst, sizeof(nam_buf) - 1);
|
||||
txfree(inst);
|
||||
if (search_plain_identifier(nam_buf, "params:") || strchr(nam_buf, '='))
|
||||
|
||||
for (i = 0; (i < 100) && (*c != '\0'); ++i) {
|
||||
inst = gettok_instance(&c);
|
||||
if (search_plain_identifier(inst, "params:") ||
|
||||
strchr(inst, '=')) {
|
||||
txfree(inst);
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
txfree(inst);
|
||||
}
|
||||
return i - 2;
|
||||
break;
|
||||
|
|
@ -5223,34 +5226,36 @@ int get_number_terminals(char *c)
|
|||
case 'm': /* recognition of 4, 5, 6, or 7 nodes for SOI devices needed
|
||||
*/
|
||||
{
|
||||
i = 0;
|
||||
char* cc, * ccfree;
|
||||
|
||||
cc = copy(c);
|
||||
/* required to make m= 1 a single token m=1 */
|
||||
ccfree = cc = inp_remove_ws(cc);
|
||||
/* find the first token with "off", "tnodeout", "thermal" or "=" in the line*/
|
||||
while ((i < 20) && (*cc != '\0')) {
|
||||
char* inst = gettok_instance(&cc);
|
||||
strncpy(nam_buf, inst, sizeof(nam_buf) - 1);
|
||||
txfree(inst);
|
||||
if ( i > 4 && (search_plain_identifier(nam_buf, "off") || strchr(nam_buf, '=') ||
|
||||
search_plain_identifier(nam_buf, "tnodeout") || search_plain_identifier(nam_buf, "thermal")))
|
||||
for (i = 0; (i < 20) && (*cc != '\0'); ++i) {
|
||||
inst = gettok_instance(&cc);
|
||||
if ( i > 4 &&
|
||||
(search_plain_identifier(inst, "off") ||
|
||||
strchr(inst, '=') ||
|
||||
search_plain_identifier(inst, "tnodeout") ||
|
||||
search_plain_identifier(inst, "thermal"))) {
|
||||
txfree(inst);
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
txfree(inst);
|
||||
}
|
||||
tfree(ccfree);
|
||||
return i - 2;
|
||||
break;
|
||||
}
|
||||
case 'p': /* recognition of up to 100 cpl nodes */
|
||||
i = j = 0;
|
||||
/* find the last token in the line*/
|
||||
while ((i < 100) && (*c != '\0')) {
|
||||
char *tmp_inst = gettok_instance(&c);
|
||||
strncpy(nam_buf, tmp_inst, 32);
|
||||
tfree(tmp_inst);
|
||||
if (strchr(nam_buf, '='))
|
||||
|
||||
for (i = j = 0; (i < 100) && (*c != '\0'); ++i) {
|
||||
inst = gettok_instance(&c);
|
||||
if (strchr(inst, '='))
|
||||
j++;
|
||||
tfree(inst);
|
||||
i++;
|
||||
}
|
||||
if (i == 100)
|
||||
|
|
@ -5263,21 +5268,27 @@ int get_number_terminals(char *c)
|
|||
/* 12 tokens maximum */
|
||||
{
|
||||
char* cc, * ccfree;
|
||||
i = j = 0;
|
||||
|
||||
cc = copy(c);
|
||||
/* required to make m= 1 a single token m=1 */
|
||||
ccfree = cc = inp_remove_ws(cc);
|
||||
while ((i < 12) && (*cc != '\0')) {
|
||||
for (i = j = 0; (i < 12) && (*cc != '\0'); ++i) {
|
||||
char* comma;
|
||||
|
||||
name[i] = gettok_instance(&cc);
|
||||
if (search_plain_identifier(name[i], "off") || strchr(name[i], '='))
|
||||
if (search_plain_identifier(name[i], "off") ||
|
||||
strchr(name[i], '=')) {
|
||||
j++;
|
||||
}
|
||||
#ifdef CIDER
|
||||
if (search_plain_identifier(name[i], "save") || search_plain_identifier(name[i], "print"))
|
||||
if (search_plain_identifier(name[i], "save") ||
|
||||
search_plain_identifier(name[i], "print")) {
|
||||
j++;
|
||||
}
|
||||
#endif
|
||||
/* If we have IC=VBE, VCE instead of IC=VBE,VCE we need to inc
|
||||
* j */
|
||||
/* If we have IC=VBE, VCE instead of IC=VBE,VCE
|
||||
* we need to increment j.
|
||||
*/
|
||||
if ((comma = strchr(name[i], ',')) != NULL &&
|
||||
(*(++comma) == '\0'))
|
||||
j++;
|
||||
|
|
@ -5285,14 +5296,14 @@ int get_number_terminals(char *c)
|
|||
*/
|
||||
if (eq(name[i], ","))
|
||||
j++;
|
||||
i++;
|
||||
}
|
||||
tfree(ccfree);
|
||||
i--;
|
||||
tfree(ccfree);
|
||||
area_found = FALSE;
|
||||
for (k = i; k > i - j - 1; k--) {
|
||||
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 ',' */
|
||||
|
|
@ -5317,19 +5328,20 @@ int get_number_terminals(char *c)
|
|||
#ifdef OSDI
|
||||
case 'n': /* Recognize an unknown number of nodes by stopping at tokens with '=' */
|
||||
{
|
||||
i = 0;
|
||||
char* cc, * ccfree;
|
||||
|
||||
cc = copy(c);
|
||||
/* required to make m= 1 a single token m=1 */
|
||||
ccfree = cc = inp_remove_ws(cc);
|
||||
/* find the first token with "off", "tnodeout", "thermal" or "=" in the line*/
|
||||
while ((i < 20) && (*cc != '\0')) {
|
||||
char* inst = gettok_instance(&cc);
|
||||
strncpy(nam_buf, inst, sizeof(nam_buf) - 1);
|
||||
txfree(inst);
|
||||
if (i > 2 && (strchr(nam_buf, '=')))
|
||||
|
||||
/* Find the first token with "off", "tnodeout", "thermal" or "=" */
|
||||
for (i = 0; (i < 20) && (*cc != '\0'); ++i) {
|
||||
inst = gettok_instance(&cc);
|
||||
if (i > 2 && (strchr(inst, '='))) {
|
||||
txfree(inst);
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
txfree(inst);
|
||||
}
|
||||
tfree(ccfree);
|
||||
return i - 2;
|
||||
|
|
|
|||
Loading…
Reference in New Issue