8c2952457
김태훈
응용 프로그램 추가
|
1
2
3
|
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
4
|
@author 장길석 jwjwmx@gmail.com
|
8c2952457
김태훈
응용 프로그램 추가
|
5
|
@brief Ver 0.0.4
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
6
|
문자열을 분석하여 tstrlist로 생성한다.
|
8c2952457
김태훈
응용 프로그램 추가
|
7
8
9
10
|
@todo
@bug
@remark
@warning
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
11
12
13
|
- 저작권 에프에이리눅스(주)
- 외부공개 금지
@section ModifyInfo 수정 정보
|
8c2952457
김태훈
응용 프로그램 추가
|
14
|
- 2009-07-06
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
15
|
-# Doxygen을 위한 주석 수정
|
8c2952457
김태훈
응용 프로그램 추가
|
16
|
- 2009-06-01
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
17
|
-# 기본 기능을 추가
|
8c2952457
김태훈
응용 프로그램 추가
|
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <tlist.h>
#include <tstrlist.h>
#include <strparsing.h>
#define MAX_BUFFSIZE 1024
#define MAX_IDENTIFY 128
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
32
|
int strp_error_code;
|
8c2952457
김태훈
응용 프로그램 추가
|
33
34
35
36
37
|
static char buff_parse[1024];
static char buff_identify[1024];
static char *read_string( tstrlist *strplist, char *str_identify)
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
38
39
40
41
42
43
|
|
8c2952457
김태훈
응용 프로그램 추가
|
44
45
46
47
48
49
50
51
52
53
|
{
int index;
index = tstrlist_indexof( strplist, str_identify);
if ( 0 > index) return NULL;
return (char *)tstrlist_get_object( strplist, index);
}
static char *get_inner( char *str, char branch)
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
54
55
56
|
|
8c2952457
김태훈
응용 프로그램 추가
|
57
|
{
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
58
59
|
char *pbuff;
char ch_data;
|
8c2952457
김태훈
응용 프로그램 추가
|
60
61
62
63
64
65
|
pbuff = buff_parse;
while( '\0' != *str)
{
ch_data = *str++;
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
66
|
if ( branch == ch_data)
|
8c2952457
김태훈
응용 프로그램 추가
|
67
68
69
70
71
|
{
break;
}
else
{
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
72
|
*pbuff++ = ch_data;
|
8c2952457
김태훈
응용 프로그램 추가
|
73
74
|
}
}
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
75
|
*pbuff = '\0';
|
8c2952457
김태훈
응용 프로그램 추가
|
76
77
78
79
|
return str;
}
static char *get_string( char *str)
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
80
81
|
|
8c2952457
김태훈
응용 프로그램 추가
|
82
|
{
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
83
84
|
char *pbuff;
char ch_data;
|
8c2952457
김태훈
응용 프로그램 추가
|
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
pbuff = buff_parse;
while( '\0' != *str)
{
ch_data = *str;
if ( ( ' ' == ch_data) || ( '=' == ch_data))
{
break;
}
else
{
*pbuff++ = ch_data;
}
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
100
|
str++;
|
8c2952457
김태훈
응용 프로그램 추가
|
101
102
103
104
105
106
|
}
*pbuff = '\0';
return str;
}
static char *get_parse( char *str)
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
107
108
|
|
8c2952457
김태훈
응용 프로그램 추가
|
109
110
111
112
113
114
115
|
{
buff_parse[0] = '\0';
while( '\0' != *str)
{
switch( *str++)
{
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
116
|
case '\'' :
|
8c2952457
김태훈
응용 프로그램 추가
|
117
118
119
120
|
{
str = get_inner( str, '\'');
return str;
}
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
121
|
case '"' :
|
8c2952457
김태훈
응용 프로그램 추가
|
122
123
124
125
|
{
str = get_inner( str, '\"');
return str;
}
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
126
127
|
case ' ' :
case '=' :
|
8c2952457
김태훈
응용 프로그램 추가
|
128
129
130
|
break;
default :
{
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
131
|
str = get_string( str-1);
|
8c2952457
김태훈
응용 프로그램 추가
|
132
133
134
135
136
137
138
139
|
return str;
}
}
}
return str;
}
static int is_identify( char *str)
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
140
141
142
|
|
8c2952457
김태훈
응용 프로그램 추가
|
143
144
145
146
147
|
{
while( '\0' != *str)
{
switch( *str++)
{
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
148
149
150
|
case ' ' : break;
case '=' : return 1;
default : return 0;
|
8c2952457
김태훈
응용 프로그램 추가
|
151
152
153
154
155
156
|
}
}
return 0;
}
static void parse_string( tstrlist *lst_parse, char *str)
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
157
158
|
|
8c2952457
김태훈
응용 프로그램 추가
|
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
{
char *pdata;
while ( '\0' != *str)
{
str = get_parse( str);
if ( '\0' == buff_parse[0])
{
break;
}
if ( !is_identify( str))
{
continue;
}
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
173
|
memcpy( buff_identify, buff_parse, strlen( buff_parse)+1);
|
8c2952457
김태훈
응용 프로그램 추가
|
174
175
176
177
178
179
180
181
182
183
|
str = get_parse( str);
pdata = ( char *)malloc( strlen( buff_parse)+1);
if ( NULL == pdata)
{
strp_error_code = STRPERR_OUT_OF_MEMORY;
break;
}
else
{
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
184
|
memcpy( pdata, buff_parse, strlen( buff_parse)+1);
|
8c2952457
김태훈
응용 프로그램 추가
|
185
186
187
188
189
190
191
|
tstrlist_add_object( lst_parse, buff_identify, pdata);
}
}
}
int strp_read_bool( tstrlist *strplist, char *str_identify, int default_value)
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
192
193
194
195
196
197
198
199
200
201
202
|
@brief 구별자가 지정하는 Boolean 데이터를 구한다.
@param strplist : 파싱 자료를 가지고 있는 tstlist
@param str_identify : 구별자 문자열
@param default_value : 값이 없다면 대신 반환될 기본값
@warning 구별자의 문자열이 0 이면 FALSE로 반환하며
이외는 무조건 TRUE로 반환한다.
즉, 구별자가 가지고 있는 문자열 정보가
'0' 인지 아닌지의 여부를 반환한다.
|
8c2952457
김태훈
응용 프로그램 추가
|
203
204
205
206
207
|
*/
{
char *data;
int int_data;
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
208
209
210
211
212
|
data = read_string( strplist, str_identify);
if ( NULL == data) return default_value;
else if ( 0 == strlen( data) ) return default_value;
else if ( 0 == sscanf( data, "%d", &int_data)) return default_value;
else return 0 != int_data;
|
8c2952457
김태훈
응용 프로그램 추가
|
213
214
215
216
|
}
double strp_read_real( tstrlist *strplist, char *str_identify, double default_value)
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
217
218
219
220
|
@brief 구별자가 지정하는 정수 데이터를 구한다.
@param strplist : 파싱 자료를 가지고 있는 tstlist
@param str_identify : 구별자 문자열
@param default_value : 값이 없다면 대신 반환될 기본값
|
8c2952457
김태훈
응용 프로그램 추가
|
221
|
@return
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
222
223
|
- 구별자에 해당하는 실수 값
- 저정한 섹션이나 구별자에 대한 실수 값이 없다면 기본값을 반환
|
8c2952457
김태훈
응용 프로그램 추가
|
224
225
226
227
228
229
|
*/
{
char *data;
double float_data;
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
230
231
232
233
234
|
data = read_string( strplist, str_identify);
if ( NULL == data) return default_value;
else if ( 0 == strlen( data) ) return default_value;
else if ( 0 == sscanf( data, "%lf", &float_data)) return default_value;
else return float_data;
|
8c2952457
김태훈
응용 프로그램 추가
|
235
236
237
238
|
}
int strp_read_integer( tstrlist *strplist, char *str_identify, int default_value)
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
239
240
241
242
|
@brief 구별자가 지정하는 정수 데이터를 구한다.
@param strplist : 파싱 자료를 가지고 있는 tstlist
@param str_identify : 구별자 문자열
@param default_value : 값이 없다면 대신 반환될 기본값
|
8c2952457
김태훈
응용 프로그램 추가
|
243
|
@return
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
244
245
|
- 구별자에 해당하는 정수 값
- 저정한 섹션이나 구별자에 대한 정수 값이 없다면 기본값을 반환
|
8c2952457
김태훈
응용 프로그램 추가
|
246
247
248
249
250
|
*/
{
char *data;
int int_data;
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
251
252
253
254
255
|
data = read_string( strplist, str_identify);
if ( NULL == data) return default_value;
else if ( 0 == strlen( data) ) return default_value;
else if ( 0 == sscanf( data, "%d", &int_data)) return default_value;
else return int_data;
|
8c2952457
김태훈
응용 프로그램 추가
|
256
257
258
259
|
}
char *strp_read_string( tstrlist *strplist, char *str_identify, char *default_value)
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
260
261
262
263
|
@brief 섹션과 구별자가 지정하는 문자열 데이터를 구한다.
@param strplist : 파싱 자료를 가지고 있는 tstlist
@param str_identify : 구별자 문자열
@param default_value : 값이 없다면 대신 반환될 기본값
|
8c2952457
김태훈
응용 프로그램 추가
|
264
265
|
@return
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
266
267
268
269
|
구별자의 문자열 정보
저정한 섹션이나 구별자에 대한 문자열이 없다면 기본값을 반환
@warning 절대 반환 받은 문자열을 소멸 시켜서는 안 된다!!
|
8c2952457
김태훈
응용 프로그램 추가
|
270
271
272
273
|
*/
{
char *data;
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
274
275
276
|
data = read_string( strplist, str_identify);
if ( NULL == data) return default_value;
else if ( 0 == strlen( data) ) return default_value;
|
8c2952457
김태훈
응용 프로그램 추가
|
277
278
279
280
281
|
else return data;
}
char *strp_error_string( void)
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
282
283
284
|
@brief strp_error_code에 대한 에러 설명 문자열을 반환
@return 에러 코드에 대한 에러 설명 문자열 포인터
@warning 절대 반환 받은 문자열을 소멸 시켜서는 안 된다!!
|
8c2952457
김태훈
응용 프로그램 추가
|
285
286
|
*/
{
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
287
288
289
290
291
292
293
294
295
|
char *error_string[] ={ "에러 없음",
"메모리 부족",
"파일 이름 지정 오류",
"자료 없음",
"IniFile 없음",
"IniFile을 읽을 수 없음",
"섹션 리스트 생성 실패",
"구별자 생성 실패",
"인수의 객체가 NULL"
|
8c2952457
김태훈
응용 프로그램 추가
|
296
297
298
299
300
301
|
};
return( error_string[strp_error_code]);
}
int strp_print_error( char *remark)
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
302
303
|
@brief ini_error_code에 대한 에러 설명 문자열을 화면에 출력
@param remark : 에러 설명 문자열 끝에 첨부하여 출력할 문자열
|
8c2952457
김태훈
응용 프로그램 추가
|
304
305
|
@return
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
306
|
에러 코드
|
8c2952457
김태훈
응용 프로그램 추가
|
307
308
309
310
311
312
313
314
315
|
*/
{
printf( "[str parsing error:%d]%s %s
", strp_error_code, strp_error_string(), remark);
return strp_error_code;
}
void strp_free( tstrlist *strplist)
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
316
317
|
@brief strparsing 객체를 소멸한다.
@param strplist : strparsing 객체
|
8c2952457
김태훈
응용 프로그램 추가
|
318
319
320
321
322
323
324
|
*/
{
int ndx;
char *pdata;
for ( ndx = 0; ndx < tstrlist_getcount( strplist); ndx++)
{
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
325
|
pdata = ( char *)tstrlist_get_object( strplist, ndx);
|
8c2952457
김태훈
응용 프로그램 추가
|
326
327
|
free( pdata);
}
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
328
|
tstrlist_free( strplist);
|
8c2952457
김태훈
응용 프로그램 추가
|
329
330
331
|
}
tstrlist *strp_parsing( char *data)
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
332
333
334
|
@brief data 문자열을 분석해서 구별자와 데이터로 구성된 아이템 목록을 만든다.
@param data : 문자열 데이터
|
8c2952457
김태훈
응용 프로그램 추가
|
335
336
|
@return
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
337
338
339
|
구별자와 데이터로 구성된 아이템의 tstrlist *
읽기에 실패했다면 NULL을 반환
|
8c2952457
김태훈
응용 프로그램 추가
|
340
341
342
343
|
*/
{
tstrlist *lst_parse;
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
344
|
strp_error_code = STRPERR_NONE;
|
8c2952457
김태훈
응용 프로그램 추가
|
345
|
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
346
347
|
lst_parse = tstrlist_create();
if ( NULL == lst_parse)
|
8c2952457
김태훈
응용 프로그램 추가
|
348
|
{
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
349
|
strp_error_code = STRPERR_CREATE_LIST_FAIL;
|
8c2952457
김태훈
응용 프로그램 추가
|
350
351
352
353
354
|
return NULL;
}
parse_string( lst_parse, data);
return lst_parse;
}
|