-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathparse.c
80 lines (66 loc) · 1.88 KB
/
parse.c
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// parse.c
#include <stdio.h>
#include <string.h>
#include "symtypes.h"
unsigned int parseLine( working_t *working, char *schematype )
{
unsigned int element;
char token[LEN];
int tokpos, linepos=0;
for ( element = 0 ; element < MAX_ELEMENTS ; element++ )
{
if ( working->line[linepos] == 0 ) break;
// Grab the next token
tokpos = 0;
while ( working->line[linepos] != 0 && working->line[linepos] != ',' &&
working->line[linepos] != 10 && working->line[linepos] != 13 )
{
token[tokpos++] = working->line[linepos++];
}
token[tokpos] = 0;
switch( schematype[ element ] )
{
case 's':
strcpy( working->parsedLine[ element ].u.s, token );
working->parsedLine[ element ].type = STRING;
break;
case 'g':
if ( sscanf( token, "%lg", &working->parsedLine[ element ].u.g ) <= 0 )
{
working->errorField = element;
working->error = 1;
}
else
{
working->parsedLine[ element ].type = DOUBLE;
}
break;
case 'd':
if ( sscanf( token, "%d", &working->parsedLine[ element ].u.d ) <= 0 )
{
working->errorField = element;
working->error = 1;
}
else
{
working->parsedLine[ element ].type = INT;
}
break;
default:
working->errorField = element;
working->error = 1;
break;
}
if ( !working->error )
{
AddElementToSummary( element, &working->parsedLine[ element ] );
}
if ( working->line[linepos-1] == 0 ) break;
else linepos++;
}
if ( element != strlen( schematype ) )
{
working->error = 1;
}
return ( element-1 );
}