33 |
|
|
34 |
const char *lscp_parser_strtok ( char *pchBuffer, const char *pszDelim, char **ppch ) |
const char *lscp_parser_strtok ( char *pchBuffer, const char *pszDelim, char **ppch ) |
35 |
{ |
{ |
36 |
const char *pszToken; |
const char *pszToken; |
37 |
|
|
38 |
if (pchBuffer == NULL) |
if (pchBuffer == NULL) |
39 |
pchBuffer = *ppch; |
pchBuffer = *ppch; |
40 |
|
|
41 |
pchBuffer += strspn(pchBuffer, pszDelim); |
pchBuffer += strspn(pchBuffer, pszDelim); |
42 |
if (*pchBuffer == '\0') |
if (*pchBuffer == '\0') |
43 |
return NULL; |
return NULL; |
44 |
|
|
45 |
pszToken = pchBuffer; |
pszToken = pchBuffer; |
46 |
pchBuffer = strpbrk(pszToken, pszDelim); |
pchBuffer = strpbrk(pszToken, pszDelim); |
47 |
if (pchBuffer == NULL) { |
if (pchBuffer == NULL) { |
48 |
*ppch = strchr(pszToken, '\0'); |
*ppch = strchr(pszToken, '\0'); |
49 |
} else { |
} else { |
50 |
*pchBuffer = '\0'; |
*pchBuffer = '\0'; |
51 |
*ppch = pchBuffer + 1; |
*ppch = pchBuffer + 1; |
52 |
while (strchr(pszDelim, **ppch)) |
while (strchr(pszDelim, **ppch)) |
53 |
(*ppch)++; |
(*ppch)++; |
54 |
} |
} |
55 |
|
|
56 |
return pszToken; |
return pszToken; |
57 |
} |
} |
58 |
|
|
59 |
|
|
60 |
void lscp_parser_init ( lscp_parser_t *pParser, const char *pchBuffer, int cchBuffer ) |
void lscp_parser_init ( lscp_parser_t *pParser, const char *pchBuffer, int cchBuffer ) |
61 |
{ |
{ |
62 |
memset(pParser, 0, sizeof(lscp_parser_t)); |
memset(pParser, 0, sizeof(lscp_parser_t)); |
63 |
|
|
64 |
pParser->pchBuffer = (char *) malloc(cchBuffer + 1); |
pParser->pchBuffer = (char *) malloc(cchBuffer + 1); |
65 |
if (pParser->pchBuffer) { |
if (pParser->pchBuffer) { |
66 |
memcpy(pParser->pchBuffer, pchBuffer, cchBuffer); |
memcpy(pParser->pchBuffer, pchBuffer, cchBuffer); |
67 |
pParser->pchBuffer[cchBuffer] = (char) 0; |
pParser->pchBuffer[cchBuffer] = (char) 0; |
68 |
pParser->pszToken = lscp_parser_strtok(pParser->pchBuffer, " \t\r\n", &(pParser->pch)); |
pParser->pszToken = lscp_parser_strtok(pParser->pchBuffer, " \t\r\n", &(pParser->pch)); |
69 |
} |
} |
70 |
|
|
71 |
} |
} |
72 |
|
|
73 |
|
|
74 |
const char *lscp_parser_next ( lscp_parser_t *pParser ) |
const char *lscp_parser_next ( lscp_parser_t *pParser ) |
75 |
{ |
{ |
76 |
const char *pszToken = pParser->pszToken; |
const char *pszToken = pParser->pszToken; |
77 |
|
|
78 |
if (pParser->pszToken) |
if (pParser->pszToken) |
79 |
pParser->pszToken = lscp_parser_strtok(NULL, " \t\r\n", &(pParser->pch)); |
pParser->pszToken = lscp_parser_strtok(NULL, " \t\r\n", &(pParser->pch)); |
80 |
|
|
81 |
return pszToken; |
return pszToken; |
82 |
} |
} |
83 |
|
|
84 |
int lscp_parser_nextint ( lscp_parser_t *pParser ) |
int lscp_parser_nextint ( lscp_parser_t *pParser ) |
85 |
{ |
{ |
86 |
int ret = 0; |
int ret = 0; |
87 |
|
|
88 |
if (pParser->pszToken) { |
if (pParser->pszToken) { |
89 |
ret = atoi(pParser->pszToken); |
ret = atoi(pParser->pszToken); |
90 |
lscp_parser_next(pParser); |
lscp_parser_next(pParser); |
91 |
} |
} |
92 |
|
|
93 |
return ret; |
return ret; |
94 |
} |
} |
95 |
|
|
96 |
float lscp_parser_nextnum ( lscp_parser_t *pParser ) |
float lscp_parser_nextnum ( lscp_parser_t *pParser ) |
97 |
{ |
{ |
98 |
float ret = 0; |
float ret = 0; |
99 |
|
|
100 |
if (pParser->pszToken) { |
if (pParser->pszToken) { |
101 |
ret = (float) atof(pParser->pszToken); |
ret = (float) atof(pParser->pszToken); |
102 |
lscp_parser_next(pParser); |
lscp_parser_next(pParser); |
103 |
} |
} |
104 |
|
|
105 |
return ret; |
return ret; |
106 |
} |
} |
107 |
|
|
108 |
int lscp_parser_test ( lscp_parser_t *pParser, const char *pszToken ) |
int lscp_parser_test ( lscp_parser_t *pParser, const char *pszToken ) |
109 |
{ |
{ |
110 |
int ret = (pParser->pszToken != NULL); |
int ret = (pParser->pszToken != NULL); |
111 |
if (ret) |
if (ret) |
112 |
ret = (strcasecmp(pParser->pszToken, pszToken) == 0); |
ret = (strcasecmp(pParser->pszToken, pszToken) == 0); |
113 |
if (ret) |
if (ret) |
114 |
lscp_parser_next(pParser); |
lscp_parser_next(pParser); |
115 |
|
|
116 |
return ret; |
return ret; |
117 |
} |
} |
118 |
|
|
119 |
int lscp_parser_test2 ( lscp_parser_t *pParser, const char *pszToken, const char *pszToken2 ) |
int lscp_parser_test2 ( lscp_parser_t *pParser, const char *pszToken, const char *pszToken2 ) |
120 |
{ |
{ |
121 |
int ret = lscp_parser_test(pParser, pszToken); |
int ret = lscp_parser_test(pParser, pszToken); |
122 |
if (ret) |
if (ret) |
123 |
ret = lscp_parser_test(pParser, pszToken2); |
ret = lscp_parser_test(pParser, pszToken2); |
124 |
|
|
125 |
return ret; |
return ret; |
126 |
} |
} |
127 |
|
|
128 |
void lscp_parser_free ( lscp_parser_t *pParser ) |
void lscp_parser_free ( lscp_parser_t *pParser ) |
129 |
{ |
{ |
130 |
if (pParser->pchBuffer) |
if (pParser->pchBuffer) |
131 |
free(pParser->pchBuffer); |
free(pParser->pchBuffer); |
132 |
pParser->pchBuffer = NULL; |
pParser->pchBuffer = NULL; |
133 |
} |
} |
134 |
|
|
135 |
|
|