blob: 29bce2b1f7b7c48a1274316330c30e911844f526 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
--- src/lib/inp/inpgtok.c.orig 2010-02-09 15:39:09.000000000 +0000
+++ src/lib/inp/inpgtok.c 2010-02-09 15:43:10.000000000 +0000
@@ -27,6 +27,7 @@
int gobble; /* eat non-whitespace trash AFTER token? */
{
char * point;
+ int signstate;
/* scan along throwing away garbage characters */
for(point = *line;*point != '\0' ; point++ ) {
@@ -41,6 +42,7 @@
/* mark beginning of token */
*line = point;
/* now find all good characters */
+ signstate = 0;
for(point = *line;*point!='\0';point++) {
if(*point == ' ') break;
if(*point == '\t') break;
@@ -48,6 +50,22 @@
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 == '-' && (signstate == 1 || signstate == 3)) 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 (point == *line && *point) /* Weird items, 1 char */
point++;
|