1 /***********************************************************************
2 * ��¿�ʴؿ�
3 ************************************************************************/
4 #include <string.h>
5
6 /*===========================================================================
7 * ��ʸ������ʸ���ζ��̤ʤ���ʸ������� (stricmp/strcasecmp ?)
8 * �����: ���� == 0, ���� != 0 (�羮��ӤϤʤ�)
9 *===========================================================================*/
my_strcmp(const char * s,const char * d)10 int my_strcmp( const char *s, const char *d )
11 {
12 if( s==NULL || d==NULL ) return 1;
13
14 while( tolower(*s) == tolower(*d) ){
15 if( *s == '\0' ) return 0;
16 s++;
17 d++;
18 }
19 return 1;
20 }
21
22 /*===========================================================================
23 * ʸ���� ct �� ʸ���� s �� ���ԡ� (strlcpy ?)
24 * s ��ʸ����ü�ϡ�ɬ�� '\0' �Ȥʤꡢs ��Ĺ���� n-1 ʸ���ʲ��˼��ޤ롣
25 * ;ʬ���ΰ�� \0 �������ʤ���
26 * �����: �ʤ�
27 *===========================================================================*/
my_strncpy(char * s,const char * ct,unsigned long n)28 void my_strncpy( char *s, const char *ct, unsigned long n )
29 {
30 s[0] = '\0';
31 strncat( s, ct, n-1 );
32 }
33
34 /*===========================================================================
35 * ʸ���� ct �� ʸ���� s �� Ϣ�� (strlcat ?)
36 * s ��ʸ����ü�ϡ�ɬ�� '\0' �Ȥʤꡢs ��Ĺ���� n-1 ʸ���ʲ��˼��ޤ롣
37 * �����: �ʤ�
38 *===========================================================================*/
my_strncat(char * s,const char * ct,unsigned long n)39 void my_strncat( char *s, const char *ct, unsigned long n )
40 {
41 size_t used = strlen(s) + 1;
42
43 if( n > used )
44 strncat( s, ct, n - used );
45 }
46
47 /*===========================================================================
48 * SJIS �� EUC ���Ѵ� (���ʤ�Ŭ��)
49 * *sjis_p ��ʸ����� EUC ���Ѵ����ơ�*euc_p �˳�Ǽ���롣
50 *
51 * ��ա��ˤ��δؿ��ϡ��Хåե����դ������å����Ƥ��ʤ���
52 * *euc_p �ϡ�*sjis_p ���ܰʾ��Ĺ�����ʤ��ȴ�
53 *===========================================================================*/
sjis2euc(char * euc_p,const char * sjis_p)54 void sjis2euc( char *euc_p, const char *sjis_p )
55 {
56 int h,l, h2, l2;
57
58 while( ( h = (unsigned char)*sjis_p++ ) ){
59
60 if( h < 0x80 ){ /* ASCII */
61
62 *euc_p ++ = h;
63
64 }else if( 0xa1 <= h && h <= 0xdf ){ /* Ⱦ�ѥ��� */
65
66 *euc_p ++ = (char)0x8e;
67 *euc_p ++ = h;
68
69 }else{ /* ����ʸ�� */
70
71 if( ( l = (unsigned char)*sjis_p++ ) ){
72
73 if( l <= 0x9e ){
74 if( h <= 0x9f ) h2 = (h - 0x71) *2 +1;
75 else h2 = (h - 0xb1) *2 +1;
76 if( l >= 0x80 ) l2 = l - 0x1f -1;
77 else l2 = l - 0x1f;
78 }else{
79 if( h <= 0x9f ) h2 = (h - 0x70) *2;
80 else h2 = (h - 0xb0) *2;
81 l2 = l - 0x7e;
82 }
83 *euc_p++ = 0x80 | h2;
84 *euc_p++ = 0x80 | l2;
85
86 }else{
87 break;
88 }
89
90 }
91 }
92
93 *euc_p = '\0';
94 }
95
96
97 /*===========================================================================
98 * EUC �� SJIS ���Ѵ� (���ʤ�Ŭ��)
99 * *euc_p ��ʸ����� SJIS ���Ѵ����ơ�*sjis_p �˳�Ǽ���롣
100 *
101 * ��ա��ˤ��δؿ��ϡ��Хåե����դ������å����Ƥ��ʤ���
102 * *sjis_p �ϡ�*euc_p ��Ʊ���ʾ��Ĺ�����ʤ��ȴ�
103 *===========================================================================*/
104
euc2sjis(char * sjis_p,const char * euc_p)105 void euc2sjis( char *sjis_p, const char *euc_p )
106 {
107 int h,l;
108
109 while( ( h = (unsigned char)*euc_p++ ) ){
110
111 if( h < 0x80 ){ /* ASCII */
112
113 *sjis_p ++ = h;
114
115 }else if( h==0x8e ){ /* Ⱦ�ѥ��� */
116
117 if( ( h = (unsigned char)*euc_p++ ) ){
118
119 if( 0xa1 <= h && h <= 0xdf )
120 *sjis_p ++ = h;
121
122 }else{
123 break;
124 }
125
126 }else if( h & 0x80 ){ /* ����ʸ�� */
127
128 if( ( l = (unsigned char)*euc_p++ ) ){
129
130 if( l & 0x80 ){
131
132 h = (h & 0x7f) - 0x21;
133 l = (l & 0x7f) - 0x21;
134
135 if( h & 0x01 ) l += 0x9e;
136 else l += 0x40;
137 if( l >= 0x7f ) l += 1;
138
139 h = (h>>1) + 0x81;
140
141 if( h >= 0xa0 ) h += 0x40;
142
143 *sjis_p++ = h;
144 *sjis_p++ = l;
145
146 }
147
148 }else{
149 break;
150 }
151
152 }
153 }
154
155 *sjis_p = '\0';
156 }
157
158
159 /*===========================================================================
160 * EUCʸ�����Ĺ����� (���ä���Ŭ��)
161 * ASCII��Ⱦ�ѥ��ʤ�1ʸ�������Ѵ�����2ʸ���Ȥ��롣
162 * ʸ�������Ρ�\0 ��Ĺ���˴ޤ�ʤ���
163 *===========================================================================*/
164
euclen(const char * euc_p)165 int euclen( const char *euc_p )
166 {
167 int i = 0, h;
168
169 while( ( h = (unsigned char)*euc_p++ ) ){
170
171 if( h < 0x80 ){ /* ASCII */
172
173 i++;
174
175 }else if( h == 0x8e ){ /* Ⱦ�ѥ��� */
176
177 euc_p ++;
178 i++;
179
180 }else{ /* ���� */
181
182 euc_p ++;
183 i += 2;
184
185 }
186 }
187
188 return i;
189 }
190
191 /*===========================================================================
192 * ʸ���� src ��ȡ������ʬ�䤹�롣
193 * ���ڤ�ʸ���ϡ����ڡ����ȥ��֡���Ƭ�Υ��ڡ��������֤�̵�뤵��롣
194 * ʬ�䤷���ȡ������ ( \0 ���ղä��� ) dst �˥��ԡ�����
195 * src �λĤ��ʸ������ʬ����Ƭ���ɥ쥹���֤���
196 * ����ʾ�ʬ��Ǥ��ʤ����� dst �ˤ� "\0" �ԡ�����NULL���֤���
197 *
198 * �ȡ������ʬ�䤹��ݤΥ롼��
199 * �� ����(\r or \n) �ʤ��� ��ü(\0) ��ʸ����Ͻ����Ȥߤʤ���
200 * ���̤�ʸ��
201 * �� ���ڡ����ȥ��֤ϡ����ڤ�ʸ���Ȥ���
202 * �� # �ϥ�����ʸ���Ȥ�����üʸ����Ʊ�ͤ˰�����
203 * �� \ �ϥ���������ʸ���Ȥ��롣���ڡ��������֡�#��"��\ ������ \ ��
204 * �����硢���������̤�ʸ���Ȥ������̾��ʸ����Ʊ�ͤ˰�����
205 * ¾��ʸ�������� \ �������硢ñ�� \ �ϥ����åפ���롣
206 * �� " �ϰ�����ʸ���Ȥ��롣����ʸ���ǰϤޤ줿��ʬ��ʸ����ˤĤ��ơ�
207 * ���ڡ��������֡�#��\ �����̤�ʸ���Ȥߤʤ���ʤ���
208 * �������� "" ��2ʸ����³���Ƥ�����˸¤ꡢ" �Ȥߤʤ���
209 *===========================================================================*/
210 #define COMMENT '#'
211 #define ESCAPE '\\'
212 #define QUOTE '\"'
my_strtok(char * dst,char * src)213 char *my_strtok( char *dst, char *src )
214 {
215 char *p = &src[0];
216 char *q = &dst[0];
217
218 int esc = FALSE; /* ���������ץ����������� */
219 int quote = FALSE; /* ��������ʸ�������� */
220
221 *q = '\0';
222
223 while( *p==' ' || *p=='\t' ){ /* ��Ƭ�Υ��ڡ��������֤��å� */
224 p ++;
225 }
226
227 while(1){
228
229 if( quote == FALSE ){ /* �̾���ʬ�ν��� */
230
231 if( esc == FALSE ){
232 if ( *p=='\0' ||
233 *p=='\r' ||
234 *p=='\n' ||
235 *p==' ' ||
236 *p=='\t' ||
237 *p==COMMENT ){ *q = '\0'; break; }
238 else if( *p==QUOTE ){ p++; quote = TRUE; }
239 else if( *p==ESCAPE ){ p++; esc = TRUE; }
240 else { *q++ = *p++; }
241 }else{
242 if ( *p=='\0' ||
243 *p=='\r' ||
244 *p=='\n' ) { *q = '\0'; break; }
245 else { *q++ = *p++; esc = FALSE; }
246 }
247
248 }else{ /* " " �ǰϤޤ줿��ʬ�ν��� */
249
250 if ( *p=='\0' ||
251 *p=='\r' ||
252 *p=='\n' ){ *q = '\0'; break; }
253 else if( *p==QUOTE )
254 if( *(p+1)==QUOTE ){ *q++ = QUOTE; p+=2; quote = FALSE; }
255 else { p++; quote = FALSE; }
256 else { *q++ = *p++; }
257
258 }
259 }
260
261 if( *dst == '\0' ) return NULL;
262 else return p;
263 }
264