OSDN Git Service

1.change core file extension to .c from .cpp
[mimic/MiMicSDK.git] / lib / src / utils / NyLPC_cFormatTextReader.c
1 /**\r
2  * @file\r
3  * NyLPC_cFormatTextReader.c\r
4  * このクラスは、書式テキスト読み出し関数を集約します。\r
5  *  Created on: 2013/04/18\r
6  *      Author: nyatla\r
7  */\r
8 #include <ctype.h>\r
9 #include <stdlib.h>\r
10 #include <string.h>\r
11 #include "NyLPC_cFormatTextReader.h"\r
12 /**\r
13  * [a-zA-Z0-9_-]で構成されるワードを取得します。\r
14  * This function peek a word from string.\r
15  * @return\r
16  * size of seeked.\r
17  */\r
18 NyLPC_TInt32 NyLPC_cFormatTextReader_readWord(const NyLPC_TChar* buf,const NyLPC_TChar** top)\r
19 {\r
20     const NyLPC_TChar* p=buf;\r
21     *top=p;\r
22     for(;*p!='\0' && (isalnum(*p)|| (strchr("_-",*p)!=NULL));p++);//skip words\r
23         return p-(*top);\r
24 }\r
25 \r
26 /**\r
27  * 文字列からIPアドレスを取得します。\r
28  * [:number:]\.[:number:]\.[:number:]\.[:number:]\r
29  * [:number:]は0-255までに制限されます。\r
30  * @return\r
31  * next pointer\r
32  */\r
33 NyLPC_TInt32 NyLPC_cFormatTextReader_readIpAddr(const NyLPC_TChar* buf,NyLPC_TUInt8 v[4])\r
34 {\r
35         NyLPC_TInt32 t;\r
36     const NyLPC_TChar* p=buf;\r
37     NyLPC_TInt32 i;\r
38     for(i=0;i<4;i++){\r
39         t=0;\r
40                 for(;isdigit(*p);p++){\r
41                         t=t*10+NyLPC_ctoi(*p);\r
42                         if(t>255){\r
43                                 return 0;\r
44                         }\r
45         }\r
46                 v[i]=t;\r
47                 if(i<3){\r
48                         if(*p!='.'){\r
49                                 return 0;\r
50                         }\r
51                         p++;\r
52                 }else if(!isspace(*p) && *p!='\0'){\r
53                         return 0;\r
54                 }\r
55     }\r
56         return (p-buf);\r
57 }\r
58 /**\r
59  * 文字列からMACアドレスを取得します。\r
60  * [:hex:]:[:hex:]:[:hex:]:[:hex:]\r
61  */\r
62 NyLPC_TInt32 NyLPC_cFormatTextReader_readMacAddr(const NyLPC_TChar* buf,NyLPC_TUInt8 v[6])\r
63 {\r
64         NyLPC_TInt32 t,i;\r
65     const NyLPC_TChar* p=buf;\r
66     for(i=0;i<6;i++){\r
67         t=0;\r
68                 for(;isxdigit(*p);p++){\r
69                         t=t*16+NyLPC_ctox(*p);\r
70                         if(t>255){\r
71                                 return 0;\r
72                         }\r
73         }\r
74                 v[i]=t;\r
75                 if(i<5){\r
76                         if(*p!=':'){\r
77                                 return 0;\r
78                         }\r
79                         p++;\r
80                 }else if(!isspace(*p) && *p!='\0'){\r
81                         return 0;\r
82                 }\r
83     }\r
84         return (p-buf);\r
85 }\r
86 /**\r
87  * 連続するスペースを読み飛ばします。\r
88  * @return\r
89  * 読み飛ばしたスペース\r
90  */\r
91 NyLPC_TInt32 NyLPC_cFormatTextReader_seekSpace(const NyLPC_TChar* s)\r
92 {\r
93         const NyLPC_TChar* p=s;\r
94         for(;*p!='\0' && isspace(*p);p++);\r
95         return p-s;\r
96 }\r
97 \r
98 \r
99 \r