1 // ---------------------------------------------------------------------------
2 // Hyper Operating System V4 コンフィギュレーター
5 // Copyright (C) 1998-2002 by Project HOS
6 // http://sourceforge.jp/projects/hos/
7 // ---------------------------------------------------------------------------
18 // ステートメントをAPI名とパラメーターに分割
19 int CAnalyze::SplitState(char* pszApiName, char* pszParams, const char *pszState)
24 while ( *pszState != '(' )
26 if ( *pszState == '\0' )
28 return CFG_ERR_SYNTAX;
30 *pszApiName++ = *pszState++;
36 iErr = SearchChar(pszParams, pszState, ')');
37 if ( iErr != CFG_ERR_OK )
43 if ( *pszState != '\0' )
45 return CFG_ERR_SEMICOLON;
53 int CAnalyze::SearchChar(char* pszBuf, const char* &pszText, char c)
63 if ( *pszText == '\0' )
65 iErr = CFG_ERR_SYNTAX;
77 // '\' の次の文字は無条件にエスケープ
80 *pszBuf++ = *pszText++;
87 if ( *pszBuf == '\\' )
89 *pszBuf++ = *pszText++;
95 if ( !blText && *pszText == '\"' || *pszText == '\'' )
97 cDelimiter = *pszText;
98 *pszBuf++ = *pszText++;
106 if ( *pszText == cDelimiter )
108 *pszBuf++ = *pszText++;
113 *pszBuf++ = *pszText++;
119 if ( *pszText == '{' )
121 *pszBuf++ = *pszText++;
122 iErr = SearchChar(pszBuf, pszText, '}');
123 if ( iErr != CFG_ERR_OK )
125 iErr = CFG_ERR_BRACE;
127 pszBuf += strlen(pszBuf);
133 if ( *pszText == '(' )
135 *pszBuf++ = *pszText++;
136 iErr = SearchChar(pszBuf, pszText, ')');
137 if ( iErr != CFG_ERR_OK )
139 iErr = CFG_ERR_PAREN;
141 pszBuf += strlen(pszBuf);
146 *pszBuf++ = *pszText++;
156 int CAnalyze::GetParameter(char* pszBuf, const char* &pszText)
161 iErr = SearchChar(pszBuf, pszText, ',');
162 if ( iErr == CFG_ERR_SYNTAX )
164 // 括弧対応OKで終端ならコンマが見つからなくても可
173 int CAnalyze::DecodeText(char *pszBuf, const char* pszText)
177 if ( *pszText++ != '\"')
184 if ( *pszText == '\0' )
192 *pszBuf++ = *pszText++;
198 if ( *pszText == '\\' )
206 if ( *pszText == '\"' )
212 *pszBuf++ = *pszText++;
216 if ( *pszText != '\0' )
228 void CAnalyze::SpaceCut(char* pszText)
236 while ( *pszTmp == ' ' )
242 while ( *pszTmp != '\0' )
244 pszText[i++] = *pszTmp++;
248 while ( i > 0 && pszText[i - 1] == ' ' )