/[svn]/liblscp/trunk/examples/parser.c
ViewVC logotype

Diff of /liblscp/trunk/examples/parser.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 962 by capela, Sun Sep 24 12:55:48 2006 UTC revision 963 by capela, Sun Dec 3 18:30:04 2006 UTC
# Line 33  Line 33 
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    

Legend:
Removed from v.962  
changed lines
  Added in v.963

  ViewVC Help
Powered by ViewVC