Configuration/GetParameters [ Functions ]
FUNCTION
Parse a line of text and store the individual words in a Parameters structure. Words are seperated by spaces, the exception are words surrounded by quotes. So:
aap noot mies "back to the future"
contains four words.
INPUTS
- line -- the line of text.
- parameters -- the set of parameters
SOURCE
static void GetParameters( char *line, struct Parameters *parameters ) { int i; int n = strlen( line ); /* Remove any spaces at the end of the line */ for ( i = n - 1; i >= 0 && utf8_isspace( line[i] ); --i ) { line[i] = '\0'; } assert( i > 0 ); /* If i <= 0 then the line was empty and that cannot be, because this is supposed to be a parameter */ /* Skip any white space at the begin of the line. */ n = strlen( line ); for ( i = 0; i < n && utf8_isspace( line[i] ); ++i ) { /* Empty */ } line += i; n = strlen( line ); for ( i = 0; i < n; /* empty */ ) { char *name = line; if ( line[i] == '"' ) { /* It is quoted string, fetch everything until * the next quote */ ++name; /* skip the double quote */ for ( ++i; ( i < n ) && ( line[i] != '"' ); ++i ) { /* empty */ } if ( i == n ) { RB_Panic( "Missing quote in your .rc file in line:\n %s\n", line ); } else { #if defined(__APPLE__) /* hacked because of error when compiling on Mac OS X */ assert( line[i] == 34 ); #else assert( line[i] == '"' ); #endif line[i] = '\0'; AddParameter( name, parameters ); } } else { /* a single word, find the next space */ for ( ; ( i < n ) && !utf8_isspace( line[i] ); ++i ) { /* empty */ } if ( i < n ) { line[i] = '\0'; } AddParameter( name, parameters ); } /* Is there anything left? */ if ( i < n ) { /* skip any spaces until the next parameter */ ++i; /* first skip the nul character */ line += i; n = strlen( line ); for ( i = 0; ( i < n ) && utf8_isspace( line[i] ); ++i ) { /* empty */ } line += i; n = strlen( line ); i = 0; } } }