@ -62,13 +62,56 @@ static int MIFget_integer(char *token, char **err);
static double MIFget_real ( char * token , char * * err ) ;
static double MIFget_real ( char * token , char * * err ) ;
static char * MIFget_string ( char * token , char * * err ) ;
static IFcomplex MIFget_complex ( char * token , Mif_Token_Type_t token_type ,
static IFcomplex MIFget_complex ( char * token , Mif_Token_Type_t token_type ,
char * * line , char * * err ) ;
char * * line , char * * err ) ;
/* Pull a string from a .model card, like MIFget_token() but do not break
* on any special characters except ' " ' and ' ] ' .
*/
static char * get_string ( char * * s , int is_array , Mif_Token_Type_t * token_type )
{
char * ret_str ; /* storage for returned string */
char * end ;
char * beg ;
/* Skip over white space. */
while ( isspace_c ( * * s ) )
( * s ) + + ;
if ( ! * s ) {
* token_type = MIF_NO_TOK ;
return NULL ;
}
/* If first character is a quote, read until the closing
* quote , or the end of string , discarding the quotes .
*/
if ( * * s = = ' " ' ) {
( * s ) + + ;
ret_str = gettok_char ( s , ' " ' , FALSE , FALSE ) ;
if ( * * s = = ' " ' )
( * s ) + + ;
} else if ( is_array & & * * s = = ' ] ' ) {
* token_type = MIF_RARRAY_TOK ;
( * s ) + + ;
return NULL ;
} else {
/* Read to next white-space, end of line, or end of array. */
beg = * s ;
while ( * * s ! = ' \0 ' & & ! ( isspace_c ( * * s ) | | ( is_array & & * * s = = ' ] ' ) ) )
( * s ) + + ;
end = * s ;
ret_str = copy_substring ( beg , end ) ;
}
* token_type = MIF_STRING ;
return ret_str ;
}
/*
/*
MIFgetValue
MIFgetValue
@ -94,7 +137,6 @@ MIFgetValue (
int btemp ;
int btemp ;
int itemp ;
int itemp ;
double rtemp ;
double rtemp ;
char * stemp ;
IFcomplex ctemp ;
IFcomplex ctemp ;
char * token ;
char * token ;
@ -114,6 +156,7 @@ MIFgetValue (
/* initialize stuff if array */
/* initialize stuff if array */
if ( is_array ) {
if ( is_array ) {
token = MIFget_token ( line , & token_type ) ;
token = MIFget_token ( line , & token_type ) ;
tfree ( token ) ;
tfree ( token ) ;
@ -129,7 +172,9 @@ MIFgetValue (
/* now get the values into val */
/* now get the values into val */
for ( ; ; ) {
for ( ; ; ) {
if ( ( value_type & ~ IF_VECTOR ) = = IF_STRING )
token = get_string ( line , is_array , & token_type ) ;
else
token = MIFget_token ( line , & token_type ) ;
token = MIFget_token ( line , & token_type ) ;
/* exit if no more tokens */
/* exit if no more tokens */
@ -163,14 +208,14 @@ MIFgetValue (
break ;
break ;
case IF_STRING :
case IF_STRING :
val . sValue = MIFget_string ( token , err ) ;
val . sValue = token ;
token = NULL ;
break ;
break ;
case IF_COMPLEX :
case IF_COMPLEX :
val . cValue = MIFget_complex ( token , token_type , line , err ) ;
val . cValue = MIFget_complex ( token , token_type , line , err ) ;
break ;
break ;
case IF_FLAGVEC :
case IF_FLAGVEC :
btemp = MIFget_boolean ( token , err ) ;
btemp = MIFget_boolean ( token , err ) ;
val . v . vec . iVec = TREALLOC ( int , val . v . vec . iVec , val . v . numValue + 1 ) ;
val . v . vec . iVec = TREALLOC ( int , val . v . vec . iVec , val . v . numValue + 1 ) ;
@ -193,10 +238,10 @@ MIFgetValue (
break ;
break ;
case IF_STRINGVEC :
case IF_STRINGVEC :
stemp = MIFget_string ( token , err ) ;
val . v . vec . sVec = TREALLOC ( char * , val . v . vec . sVec , val . v . numValue + 1 ) ;
val . v . vec . sVec = TREALLOC ( char * , val . v . vec . sVec , val . v . numValue + 1 ) ;
val . v . vec . sVec [ val . v . numValue ] = stemp ;
val . v . vec . sVec [ val . v . numValue ] = token ;
val . v . numValue + + ;
val . v . numValue + + ;
token = NULL ;
break ;
break ;
case IF_CPLXVEC :
case IF_CPLXVEC :
@ -220,6 +265,7 @@ MIFgetValue (
if ( ! is_array )
if ( ! is_array )
break ;
break ;
if ( token )
tfree ( token ) ;
tfree ( token ) ;
} /* end forever loop */
} /* end forever loop */
@ -302,16 +348,6 @@ static double MIFget_real(char *token, char **err)
}
}
/* *************************************************************** */
static char * MIFget_string ( char * token , char * * err )
{
char * ctoken = MIFcopy ( token ) ;
* err = NULL ;
return ( ctoken ) ;
}
/* *************************************************************** */
/* *************************************************************** */
static IFcomplex MIFget_complex ( char * token , Mif_Token_Type_t token_type ,
static IFcomplex MIFget_complex ( char * token , Mif_Token_Type_t token_type ,