parser/inpgtok.c, whitespace cleanup
This commit is contained in:
parent
4ae35e8974
commit
39d391fe33
|
|
@ -4,99 +4,105 @@ Author: 1985 Thomas L. Quarles
|
|||
Modified: 2000 AlansFixes
|
||||
**********/
|
||||
|
||||
/* get input token from 'line',
|
||||
* and return a pointer to it in 'token'
|
||||
*/
|
||||
/* get input token from 'line',
|
||||
* and return a pointer to it in 'token'
|
||||
*/
|
||||
|
||||
/* INPgetTok: node names
|
||||
INPgetUTok: numbers and other elements in expressions
|
||||
(called from INPevaluate)
|
||||
*/
|
||||
(called from INPevaluate)
|
||||
*/
|
||||
|
||||
#include "ngspice/ngspice.h"
|
||||
#include "ngspice/iferrmsg.h"
|
||||
#include "ngspice/inpdefs.h"
|
||||
#include "inpxx.h"
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
* INPgetTok -- this fcn extracts a generic input token from
|
||||
* 'line' and returns a pointer to it in 'token'.
|
||||
* INPgetTok -- this fcn extracts a generic input token from
|
||||
* 'line' and returns a pointer to it in 'token'.
|
||||
*------------------------------------------------------------------*/
|
||||
int INPgetTok(char **line, char **token, int gobble)
|
||||
/* eat non-whitespace trash AFTER token? */
|
||||
|
||||
int
|
||||
INPgetTok(char **line, char **token, int gobble)
|
||||
/* gobble: eat non-whitespace trash AFTER token? */
|
||||
{
|
||||
char *point;
|
||||
int signstate;
|
||||
int diffpoints;
|
||||
int diffpoints;
|
||||
|
||||
/* scan along throwing away garbage characters until end of line
|
||||
or a separation char is found */
|
||||
for (point = *line; *point != '\0'; point++) {
|
||||
if (*point == ' ')
|
||||
continue;
|
||||
if (*point == '\t')
|
||||
continue;
|
||||
if (*point == '\r')
|
||||
continue;
|
||||
if (*point == '=')
|
||||
continue;
|
||||
if (*point == '(')
|
||||
continue;
|
||||
if (*point == ')')
|
||||
continue;
|
||||
if (*point == ',')
|
||||
continue;
|
||||
break;
|
||||
if (*point == ' ')
|
||||
continue;
|
||||
if (*point == '\t')
|
||||
continue;
|
||||
if (*point == '\r')
|
||||
continue;
|
||||
if (*point == '=')
|
||||
continue;
|
||||
if (*point == '(')
|
||||
continue;
|
||||
if (*point == ')')
|
||||
continue;
|
||||
if (*point == ',')
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
/* mark beginning of token */
|
||||
*line = point;
|
||||
|
||||
/* now find all good characters up to next occurance of a
|
||||
/* now find all good characters up to next occurance of a
|
||||
separation character. */
|
||||
signstate = 0;
|
||||
for (point = *line; *point != '\0'; point++) {
|
||||
if (*point == ' ')
|
||||
break;
|
||||
if (*point == '\t')
|
||||
break;
|
||||
if (*point == '\r')
|
||||
break;
|
||||
if (*point == '=')
|
||||
break;
|
||||
if (*point == '(')
|
||||
break;
|
||||
if (*point == ')')
|
||||
break;
|
||||
if (*point == ',')
|
||||
break;
|
||||
/* This is not complex enough to catch all errors,
|
||||
but it will get the "good" parses */
|
||||
if ((*point == '+') || (*point == '-')){
|
||||
/* Treat '+' signs same as '-' signs */
|
||||
if (signstate == 1 || signstate == 3) break;
|
||||
signstate += 1;
|
||||
continue;
|
||||
}
|
||||
if (*point == '*')
|
||||
break;
|
||||
if (*point == '/')
|
||||
break;
|
||||
if (*point == '^')
|
||||
break;
|
||||
if (isdigit(*point) || *point == '.') {
|
||||
if (signstate > 1)
|
||||
signstate = 3;
|
||||
else
|
||||
signstate = 1;
|
||||
} else if (tolower(*point) == 'e' && signstate == 1)
|
||||
signstate = 2;
|
||||
else
|
||||
signstate = 3;
|
||||
|
||||
if (*point == ' ')
|
||||
break;
|
||||
if (*point == '\t')
|
||||
break;
|
||||
if (*point == '\r')
|
||||
break;
|
||||
if (*point == '=')
|
||||
break;
|
||||
if (*point == '(')
|
||||
break;
|
||||
if (*point == ')')
|
||||
break;
|
||||
if (*point == ',')
|
||||
break;
|
||||
/* This is not complex enough to catch all errors,
|
||||
but it will get the "good" parses */
|
||||
if ((*point == '+') || (*point == '-')) {
|
||||
/* Treat '+' signs same as '-' signs */
|
||||
if (signstate == 1 || signstate == 3)
|
||||
break;
|
||||
signstate += 1;
|
||||
continue;
|
||||
}
|
||||
if (*point == '*')
|
||||
break;
|
||||
if (*point == '/')
|
||||
break;
|
||||
if (*point == '^')
|
||||
break;
|
||||
|
||||
if (isdigit(*point) || *point == '.') {
|
||||
if (signstate > 1)
|
||||
signstate = 3;
|
||||
else
|
||||
signstate = 1;
|
||||
} else if (tolower(*point) == 'e' && signstate == 1)
|
||||
signstate = 2;
|
||||
else
|
||||
signstate = 3;
|
||||
}
|
||||
|
||||
if (point == *line && *point) /* Weird items, 1 char */
|
||||
point++;
|
||||
if (point == *line && *point) /* Weird items, 1 char */
|
||||
point++;
|
||||
|
||||
diffpoints = (int)(point - *line);
|
||||
*token = TMALLOC(char, 1 + diffpoints);
|
||||
|
|
@ -104,30 +110,22 @@ int INPgetTok(char **line, char **token, int gobble)
|
|||
return (E_NOMEM);
|
||||
(void) strncpy(*token, *line, (size_t) diffpoints);
|
||||
*(*token + diffpoints) = '\0';
|
||||
|
||||
*line = point;
|
||||
/*
|
||||
if (point == *line && *point)
|
||||
point++;
|
||||
*token = TMALLOC(char, 1 + point - *line);
|
||||
if (!*token)
|
||||
return (E_NOMEM);
|
||||
(void) strncpy(*token, *line, point - *line);
|
||||
*(*token + (point - *line)) = '\0';
|
||||
*line = point;
|
||||
*/
|
||||
|
||||
/* gobble garbage to next token */
|
||||
for (; **line != '\0'; (*line)++) {
|
||||
if (**line == ' ')
|
||||
continue;
|
||||
if (**line == '\t')
|
||||
continue;
|
||||
if (**line == '\r')
|
||||
continue;
|
||||
if ((**line == '=') && gobble)
|
||||
continue;
|
||||
if ((**line == ',') && gobble)
|
||||
continue;
|
||||
break;
|
||||
if (**line == ' ')
|
||||
continue;
|
||||
if (**line == '\t')
|
||||
continue;
|
||||
if (**line == '\r')
|
||||
continue;
|
||||
if ((**line == '=') && gobble)
|
||||
continue;
|
||||
if ((**line == ',') && gobble)
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef TRACE
|
||||
|
|
@ -140,14 +138,16 @@ int INPgetTok(char **line, char **token, int gobble)
|
|||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
* INPgetNetTok -- this fcn extracts an input netname token from
|
||||
* 'line' and returns a pointer to it in 'token'.
|
||||
* INPgetNetTok -- this fcn extracts an input netname token from
|
||||
* 'line' and returns a pointer to it in 'token'.
|
||||
* This fcn cloned from INPgetTok by SDB to enable
|
||||
* complex netnames (e.g. netnames like '+VCC' and 'IN-').
|
||||
* mailto:sdb@cloud9.net -- 4.7.2003
|
||||
*------------------------------------------------------------------*/
|
||||
int INPgetNetTok(char **line, char **token, int gobble)
|
||||
/* eat non-whitespace trash AFTER token? */
|
||||
|
||||
int
|
||||
INPgetNetTok(char **line, char **token, int gobble)
|
||||
/* gobble: eat non-whitespace trash AFTER token? */
|
||||
{
|
||||
char *point;
|
||||
int diffpoints;
|
||||
|
|
@ -155,77 +155,67 @@ int INPgetNetTok(char **line, char **token, int gobble)
|
|||
/* scan along throwing away garbage characters until end of line
|
||||
or a separation char is found */
|
||||
for (point = *line; *point != '\0'; point++) {
|
||||
if (*point == ' ')
|
||||
continue;
|
||||
if (*point == '\t')
|
||||
continue;
|
||||
if (*point == '=')
|
||||
continue;
|
||||
if (*point == '(')
|
||||
continue;
|
||||
if (*point == ')')
|
||||
continue;
|
||||
if (*point == ',')
|
||||
continue;
|
||||
break;
|
||||
if (*point == ' ')
|
||||
continue;
|
||||
if (*point == '\t')
|
||||
continue;
|
||||
if (*point == '=')
|
||||
continue;
|
||||
if (*point == '(')
|
||||
continue;
|
||||
if (*point == ')')
|
||||
continue;
|
||||
if (*point == ',')
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
/* mark beginning of token */
|
||||
*line = point;
|
||||
|
||||
/* now find all good characters up to next occurance of a
|
||||
/* now find all good characters up to next occurance of a
|
||||
separation character. INPgetNetTok is very liberal about
|
||||
what it accepts. */
|
||||
for (point = *line; *point != '\0'; point++) {
|
||||
if (*point == ' ')
|
||||
break;
|
||||
if (*point == '\t')
|
||||
break;
|
||||
if (*point == '\r')
|
||||
break;
|
||||
if (*point == '=')
|
||||
break;
|
||||
if (*point == ',')
|
||||
break;
|
||||
if (*point == ')')
|
||||
break;
|
||||
if (*point == ' ')
|
||||
break;
|
||||
if (*point == '\t')
|
||||
break;
|
||||
if (*point == '\r')
|
||||
break;
|
||||
if (*point == '=')
|
||||
break;
|
||||
if (*point == ',')
|
||||
break;
|
||||
if (*point == ')')
|
||||
break;
|
||||
}
|
||||
|
||||
if (point == *line && *point) /* Weird items, 1 char */
|
||||
point++;
|
||||
if (point == *line && *point) /* Weird items, 1 char */
|
||||
point++;
|
||||
|
||||
/* now copy found token into *token */
|
||||
diffpoints = (int)(point - *line);
|
||||
*token = TMALLOC(char, 1 + diffpoints);
|
||||
if (!*token)
|
||||
return (E_NOMEM);
|
||||
(void) strncpy(*token, *line, (size_t) diffpoints);
|
||||
*(*token + diffpoints) = '\0';
|
||||
|
||||
*line = point;
|
||||
|
||||
/*
|
||||
if (point == *line && *point)
|
||||
point++;
|
||||
*token = TMALLOC(char, 1 + point - *line);
|
||||
if (!*token)
|
||||
return (E_NOMEM);
|
||||
(void) strncpy(*token, *line, point - *line);
|
||||
*(*token + (point - *line)) = '\0';
|
||||
*line = point;
|
||||
*/
|
||||
/* gobble garbage to next token */
|
||||
for (; **line != '\0'; (*line)++) {
|
||||
if (**line == ' ')
|
||||
continue;
|
||||
if (**line == '\t')
|
||||
continue;
|
||||
if (**line == '\r')
|
||||
continue;
|
||||
if ((**line == '=') && gobble)
|
||||
continue;
|
||||
if ((**line == ',') && gobble)
|
||||
continue;
|
||||
break;
|
||||
if (**line == ' ')
|
||||
continue;
|
||||
if (**line == '\t')
|
||||
continue;
|
||||
if (**line == '\r')
|
||||
continue;
|
||||
if ((**line == '=') && gobble)
|
||||
continue;
|
||||
if ((**line == ',') && gobble)
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef TRACE
|
||||
|
|
@ -237,42 +227,43 @@ int INPgetNetTok(char **line, char **token, int gobble)
|
|||
}
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
* INPgetUTok -- this fcn extracts an input refdes token from
|
||||
* 'line' and returns a pointer to it in 'token'.
|
||||
* INPgetUTok -- this fcn extracts an input refdes token from
|
||||
* 'line' and returns a pointer to it in 'token'.
|
||||
*------------------------------------------------------------------*/
|
||||
int INPgetUTok(char **line, char **token, int gobble)
|
||||
|
||||
|
||||
/* eat non-whitespace trash AFTER token? */
|
||||
int
|
||||
INPgetUTok(char **line, char **token, int gobble)
|
||||
/* gobble: eat non-whitespace trash AFTER token? */
|
||||
{
|
||||
char *point, separator;
|
||||
int signstate;
|
||||
|
||||
/* scan along throwing away garbage characters */
|
||||
for (point = *line; *point != '\0'; point++) {
|
||||
if (*point == ' ')
|
||||
continue;
|
||||
if (*point == '\t')
|
||||
continue;
|
||||
if (*point == '=')
|
||||
continue;
|
||||
if (*point == '(')
|
||||
continue;
|
||||
if (*point == ')')
|
||||
continue;
|
||||
if (*point == ',')
|
||||
continue;
|
||||
break;
|
||||
if (*point == ' ')
|
||||
continue;
|
||||
if (*point == '\t')
|
||||
continue;
|
||||
if (*point == '=')
|
||||
continue;
|
||||
if (*point == '(')
|
||||
continue;
|
||||
if (*point == ')')
|
||||
continue;
|
||||
if (*point == ',')
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
if (*point == '"') {
|
||||
separator = '"';
|
||||
point++;
|
||||
separator = '"';
|
||||
point++;
|
||||
} else if (*point == '\'') {
|
||||
separator = '\'';
|
||||
point++;
|
||||
separator = '\'';
|
||||
point++;
|
||||
} else
|
||||
separator = 0;
|
||||
separator = 0;
|
||||
|
||||
/* mark beginning of token */
|
||||
*line = point;
|
||||
|
|
@ -280,118 +271,131 @@ int INPgetUTok(char **line, char **token, int gobble)
|
|||
/* now find all good characters */
|
||||
signstate = 0;
|
||||
for (point = *line; *point != '\0'; point++) {
|
||||
if (separator) {
|
||||
if (*point == separator)
|
||||
break;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
if (*point == ' ')
|
||||
break;
|
||||
if (*point == '\t')
|
||||
break;
|
||||
if (*point == '=')
|
||||
break;
|
||||
if (*point == '(')
|
||||
break;
|
||||
if (*point == ')')
|
||||
break;
|
||||
if (*point == ',')
|
||||
break;
|
||||
/* This is not complex enough to catch all errors, but it will
|
||||
get the "good" parses */
|
||||
if (*point == '+' && (signstate == 1 || signstate == 3))
|
||||
break;
|
||||
if (*point == '-') {
|
||||
if (signstate == 1 || signstate == 3)
|
||||
break;
|
||||
signstate += 1;
|
||||
continue;
|
||||
}
|
||||
if (*point == '*')
|
||||
break;
|
||||
if (*point == '/')
|
||||
break;
|
||||
if (*point == '^')
|
||||
break;
|
||||
if (isdigit(*point) || *point == '.') {
|
||||
if (signstate > 1)
|
||||
signstate = 3;
|
||||
else
|
||||
signstate = 1;
|
||||
} else if (tolower(*point) == 'e' && signstate == 1)
|
||||
signstate = 2;
|
||||
else
|
||||
signstate = 3;
|
||||
|
||||
if (separator) {
|
||||
if (*point == separator)
|
||||
break;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
|
||||
if (*point == ' ')
|
||||
break;
|
||||
if (*point == '\t')
|
||||
break;
|
||||
if (*point == '=')
|
||||
break;
|
||||
if (*point == '(')
|
||||
break;
|
||||
if (*point == ')')
|
||||
break;
|
||||
if (*point == ',')
|
||||
break;
|
||||
/* This is not complex enough to catch all errors, but it will
|
||||
get the "good" parses */
|
||||
if (*point == '+' && (signstate == 1 || signstate == 3))
|
||||
break;
|
||||
if (*point == '-') {
|
||||
if (signstate == 1 || signstate == 3)
|
||||
break;
|
||||
signstate += 1;
|
||||
continue;
|
||||
}
|
||||
if (*point == '*')
|
||||
break;
|
||||
if (*point == '/')
|
||||
break;
|
||||
if (*point == '^')
|
||||
break;
|
||||
|
||||
if (isdigit(*point) || *point == '.') {
|
||||
if (signstate > 1)
|
||||
signstate = 3;
|
||||
else
|
||||
signstate = 1;
|
||||
} else if (tolower(*point) == 'e' && signstate == 1)
|
||||
signstate = 2;
|
||||
else
|
||||
signstate = 3;
|
||||
}
|
||||
|
||||
if (separator && *point == separator)
|
||||
point--;
|
||||
if (point == *line && *point) /* Weird items, 1 char */
|
||||
point++;
|
||||
point--;
|
||||
|
||||
if (point == *line && *point) /* Weird items, 1 char */
|
||||
point++;
|
||||
|
||||
*token = TMALLOC(char, 1 + point - *line);
|
||||
if (!*token)
|
||||
return (E_NOMEM);
|
||||
return (E_NOMEM);
|
||||
(void) strncpy(*token, *line, (size_t) (point - *line));
|
||||
*(*token + (point - *line)) = '\0';
|
||||
|
||||
/* gobble garbage to next token */
|
||||
for (; *point != '\0'; point++) {
|
||||
if (*point == separator)
|
||||
continue;
|
||||
if (*point == ' ')
|
||||
continue;
|
||||
if (*point == '\t')
|
||||
continue;
|
||||
if ((*point == '=') && gobble)
|
||||
continue;
|
||||
if ((*point == ',') && gobble)
|
||||
continue;
|
||||
break;
|
||||
if (*point == separator)
|
||||
continue;
|
||||
if (*point == ' ')
|
||||
continue;
|
||||
if (*point == '\t')
|
||||
continue;
|
||||
if ((*point == '=') && gobble)
|
||||
continue;
|
||||
if ((*point == ',') && gobble)
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
*line = point;
|
||||
|
||||
#ifdef TRACE
|
||||
/* SDB debug statement */
|
||||
/* printf("found refdes token (%s) and rest of line (%s)\n",*token,*line); */
|
||||
/* printf("found refdes token (%s) and rest of line (%s)\n",*token,*line); */
|
||||
#endif
|
||||
|
||||
return (OK);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
* INPgetUTok plus points < > ? :, called from INPevaluate called
|
||||
* from INPevaluate with gobble == 2
|
||||
* fcn added to avoid unforeseeable side effects during other calls
|
||||
* to INPevaluate.
|
||||
* to INPevaluate.
|
||||
*------------------------------------------------------------------*/
|
||||
int INPgetU2Tok(char **line, char **token, int gobble)
|
||||
/* eat non-whitespace trash AFTER token? */
|
||||
|
||||
int
|
||||
INPgetU2Tok(char **line, char **token, int gobble)
|
||||
/* gobble: eat non-whitespace trash AFTER token? */
|
||||
{
|
||||
char *point, separator;
|
||||
int signstate;
|
||||
|
||||
/* scan along throwing away garbage characters */
|
||||
for (point = *line; *point != '\0'; point++) {
|
||||
if (*point == ' ')
|
||||
continue;
|
||||
if (*point == '\t')
|
||||
continue;
|
||||
if (*point == '=')
|
||||
continue;
|
||||
if (*point == '(')
|
||||
continue;
|
||||
if (*point == ')')
|
||||
continue;
|
||||
if (*point == ',')
|
||||
continue;
|
||||
break;
|
||||
if (*point == ' ')
|
||||
continue;
|
||||
if (*point == '\t')
|
||||
continue;
|
||||
if (*point == '=')
|
||||
continue;
|
||||
if (*point == '(')
|
||||
continue;
|
||||
if (*point == ')')
|
||||
continue;
|
||||
if (*point == ',')
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
if (*point == '"') {
|
||||
separator = '"';
|
||||
point++;
|
||||
separator = '"';
|
||||
point++;
|
||||
} else if (*point == '\'') {
|
||||
separator = '\'';
|
||||
point++;
|
||||
separator = '\'';
|
||||
point++;
|
||||
} else
|
||||
separator = 0;
|
||||
separator = 0;
|
||||
|
||||
/* mark beginning of token */
|
||||
*line = point;
|
||||
|
|
@ -399,86 +403,94 @@ int INPgetU2Tok(char **line, char **token, int gobble)
|
|||
/* now find all good characters */
|
||||
signstate = 0;
|
||||
for (point = *line; *point != '\0'; point++) {
|
||||
if (separator) {
|
||||
if (*point == separator)
|
||||
break;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
if (*point == ' ')
|
||||
break;
|
||||
if (*point == '\t')
|
||||
break;
|
||||
if (*point == '=')
|
||||
break;
|
||||
if (*point == '(')
|
||||
break;
|
||||
if (*point == ')')
|
||||
break;
|
||||
if (*point == ',')
|
||||
break;
|
||||
/* This is not complex enough to catch all errors, but it will
|
||||
get the "good" parses */
|
||||
if (*point == '+' && (signstate == 1 || signstate == 3))
|
||||
break;
|
||||
if (*point == '-') {
|
||||
if (signstate == 1 || signstate == 3)
|
||||
break;
|
||||
signstate += 1;
|
||||
continue;
|
||||
}
|
||||
if (*point == '*')
|
||||
break;
|
||||
if (*point == '/')
|
||||
break;
|
||||
if (*point == '^')
|
||||
break;
|
||||
if (*point == '<')
|
||||
break;
|
||||
if (*point == '>')
|
||||
break;
|
||||
if (*point == '?')
|
||||
break;
|
||||
if (*point == ':')
|
||||
break;
|
||||
if (isdigit(*point) || *point == '.') {
|
||||
if (signstate > 1)
|
||||
signstate = 3;
|
||||
else
|
||||
signstate = 1;
|
||||
} else if (tolower(*point) == 'e' && signstate == 1)
|
||||
signstate = 2;
|
||||
else
|
||||
signstate = 3;
|
||||
|
||||
if (separator) {
|
||||
if (*point == separator)
|
||||
break;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
|
||||
if (*point == ' ')
|
||||
break;
|
||||
if (*point == '\t')
|
||||
break;
|
||||
if (*point == '=')
|
||||
break;
|
||||
if (*point == '(')
|
||||
break;
|
||||
if (*point == ')')
|
||||
break;
|
||||
if (*point == ',')
|
||||
break;
|
||||
/* This is not complex enough to catch all errors, but it will
|
||||
get the "good" parses */
|
||||
if (*point == '+' && (signstate == 1 || signstate == 3))
|
||||
break;
|
||||
if (*point == '-') {
|
||||
if (signstate == 1 || signstate == 3)
|
||||
break;
|
||||
signstate += 1;
|
||||
continue;
|
||||
}
|
||||
if (*point == '*')
|
||||
break;
|
||||
if (*point == '/')
|
||||
break;
|
||||
if (*point == '^')
|
||||
break;
|
||||
if (*point == '<')
|
||||
break;
|
||||
if (*point == '>')
|
||||
break;
|
||||
if (*point == '?')
|
||||
break;
|
||||
if (*point == ':')
|
||||
break;
|
||||
|
||||
if (isdigit(*point) || *point == '.') {
|
||||
if (signstate > 1)
|
||||
signstate = 3;
|
||||
else
|
||||
signstate = 1;
|
||||
} else if (tolower(*point) == 'e' && signstate == 1)
|
||||
signstate = 2;
|
||||
else
|
||||
signstate = 3;
|
||||
}
|
||||
|
||||
if (separator && *point == separator)
|
||||
point--;
|
||||
if (point == *line && *point) /* Weird items, 1 char */
|
||||
point++;
|
||||
point--;
|
||||
|
||||
if (point == *line && *point) /* Weird items, 1 char */
|
||||
point++;
|
||||
|
||||
*token = TMALLOC(char, 1 + point - *line);
|
||||
if (!*token)
|
||||
return (E_NOMEM);
|
||||
return (E_NOMEM);
|
||||
(void) strncpy(*token, *line, (size_t) (point - *line));
|
||||
*(*token + (point - *line)) = '\0';
|
||||
|
||||
/* gobble garbage to next token */
|
||||
for (; *point != '\0'; point++) {
|
||||
if (*point == separator)
|
||||
continue;
|
||||
if (*point == ' ')
|
||||
continue;
|
||||
if (*point == '\t')
|
||||
continue;
|
||||
if ((*point == '=') && gobble)
|
||||
continue;
|
||||
if ((*point == ',') && gobble)
|
||||
continue;
|
||||
break;
|
||||
if (*point == separator)
|
||||
continue;
|
||||
if (*point == ' ')
|
||||
continue;
|
||||
if (*point == '\t')
|
||||
continue;
|
||||
if ((*point == '=') && gobble)
|
||||
continue;
|
||||
if ((*point == ',') && gobble)
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
*line = point;
|
||||
|
||||
#ifdef TRACE
|
||||
/* SDB debug statement */
|
||||
/* printf("found refdes token (%s) and rest of line (%s)\n",*token,*line); */
|
||||
/* printf("found refdes token (%s) and rest of line (%s)\n",*token,*line); */
|
||||
#endif
|
||||
|
||||
return (OK);
|
||||
|
|
|
|||
Loading…
Reference in New Issue