inpgmod.c, #11/15, reduce scope and rewrite

This commit is contained in:
rlar 2017-01-08 18:23:52 +01:00
parent 66976d492e
commit 627ed98464
1 changed files with 13 additions and 21 deletions

View File

@ -135,11 +135,8 @@ create_model( CKTcircuit* ckt, INPmodel* modtmp, INPtables* tab )
static bool
parse_line( char* line, char* tokens[], int num_tokens, double values[], bool found[] )
{
char* token = NULL;
int get_index = -1;
int i;
bool flag = TRUE;
int error;
for ( i = 0; i < num_tokens; i++ )
found[i] = FALSE;
@ -147,12 +144,14 @@ parse_line( char* line, char* tokens[], int num_tokens, double values[], bool fo
while (*line) {
if ( get_index != -1 ) {
int error;
values[get_index] = INPevaluate( &line, &error, 1 );
found[get_index] = TRUE;
get_index = -1;
continue;
}
char *token = NULL;
INPgetNetTok( &line, &token, 1 );
for ( i = 0; i < num_tokens; i++ )
@ -162,12 +161,10 @@ parse_line( char* line, char* tokens[], int num_tokens, double values[], bool fo
}
for ( i = 0; i < num_tokens; i++ )
if ( found[i] == FALSE ) {
flag = FALSE;
break;
}
if (!found[i])
return FALSE;
return flag;
return TRUE;
}
static bool
@ -192,7 +189,6 @@ INPgetModBin( CKTcircuit* ckt, char* name, INPmodel** model, INPtables* tab, cha
bool parse_found[4];
static char* instance_tokens[] = { "l", "w" };
static char* model_tokens[] = { "lmin", "lmax", "wmin", "wmax" };
int error;
double scale;
if (!cp_getvar("scale", CP_REAL, &scale))
@ -241,7 +237,7 @@ INPgetModBin( CKTcircuit* ckt, char* name, INPmodel** model, INPtables* tab, cha
if ( in_range( l, lmin, lmax ) && in_range( w, wmin, wmax ) ) {
/* create unless model is already defined */
if ( !modtmp->INPmodfast ) {
error = create_model( ckt, modtmp, tab );
int error = create_model( ckt, modtmp, tab );
if ( error )
return NULL;
}
@ -256,7 +252,6 @@ char *
INPgetMod(CKTcircuit *ckt, char *name, INPmodel ** model, INPtables * tab)
{
INPmodel *modtmp;
int error;
#ifdef TRACE
printf("In INPgetMod, examining model %s ...\n", name);
@ -285,7 +280,7 @@ INPgetMod(CKTcircuit *ckt, char *name, INPmodel ** model, INPtables * tab)
/* create unless model is already defined */
if (! modtmp->INPmodfast) {
error = create_model( ckt, modtmp, tab );
int error = create_model( ckt, modtmp, tab );
if ( error ) {
*model = NULL;
return INPerror(error);
@ -322,13 +317,10 @@ INPparseNumMod( CKTcircuit* ckt, INPmodel *model, INPtables *tab, char **errMess
card *txtCard; /* Text description of a card */
GENcard *tmpCard; /* Processed description of a card */
IFcardInfo *info = NULL; /* Info about the type of card located */
char *line;
char *cardName = NULL; /* name of a card */
char *parm; /* name of a parameter */
int cardNum = 0; /* number of this card in the overall line */
char *err = NULL; /* Strings for error messages */
IFvalue *value;
int error, idx, invert;
int error;
/* Chase down to the top of the list of actual cards */
txtCard = model->INPmodLine->actualLine;
@ -340,7 +332,7 @@ INPparseNumMod( CKTcircuit* ckt, INPmodel *model, INPtables *tab, char **errMess
/* Now parse each remaining card */
for (; txtCard; txtCard = txtCard->nextcard) {
line = txtCard->line;
char *line = txtCard->line;
cardNum++;
/* Skip the initial '+' and any whitespace. */
@ -410,17 +402,17 @@ INPparseNumMod( CKTcircuit* ckt, INPmodel *model, INPtables *tab, char **errMess
/* parse the rest of this line */
while (*line) {
int invert = FALSE;
/* Strip leading carat from booleans */
if (*line == '^') {
invert = TRUE;
line++;
} else {
invert = FALSE;
}
char *parm; /* name of a parameter */
INPgetTok(&line,&parm,1);
if (!*parm)
break;
idx = INPfindParm(parm, info->cardParms, info->numParms);
int idx = INPfindParm(parm, info->cardParms, info->numParms);
if (idx == E_MISSING) {
/* parm not found */
err = INPerrCat(err,
@ -432,7 +424,7 @@ INPparseNumMod( CKTcircuit* ckt, INPmodel *model, INPtables *tab, char **errMess
tprintf("Error on card %d : ambiguous parameter (%s) - ignored",
cardNum, parm));
} else {
value = INPgetValue( ckt, &line, info->cardParms[idx].dataType, tab );
IFvalue *value = INPgetValue( ckt, &line, info->cardParms[idx].dataType, tab );
/* invert if this is a boolean entry */
if (invert) {
if ((info->cardParms[idx].dataType & IF_VARTYPES) == IF_FLAG) {