Subversion Repositories Kolibri OS

Rev

Rev 3114 | Rev 3225 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3114 Rev 3128
Line 11... Line 11...
11
// strupr( ESI)
11
// strupr( ESI)
12
// strlwr( ESI) --- kyrillic symbols may not work
12
// strlwr( ESI) --- kyrillic symbols may not work
13
// strttl( EDX)
13
// strttl( EDX)
14
// strtok( ESI)
14
// strtok( ESI)
15
// strcpyb(dword searchin, copyin, startstr, endstr) --- copy string between strings
15
// strcpyb(dword searchin, copyin, startstr, endstr) --- copy string between strings
16
//chrnum(dword searchin, char symbol) --- count of symbol in string
16
// strnumb(dword searchin, startstr, endstr) --- get number between strings
17
//------------------------------------------------------------------------------
17
//------------------------------------------------------------------------------
Line 18... Line 18...
18
 
18
 
19
inline fastcall signed int strcmp( ESI, EDI)
19
inline fastcall signed int strcmp( ESI, EDI)
20
{
20
{
Line 69... Line 69...
69
	$test al,al
69
	$test al,al
70
	$jnz L2
70
	$jnz L2
71
}
71
}
Line -... Line 72...
-
 
72
 
-
 
73
 
-
 
74
inline fastcall int strlcpy(dword ESI, EDI, EBX)
-
 
75
{
-
 
76
	EDX=0;
-
 
77
	do {
-
 
78
		DSBYTE[ESI]=DSBYTE[EDI];
-
 
79
		ESI++;
-
 
80
		EDI++;
-
 
81
		EDX++;
-
 
82
		if (EDX==EBX) { DSBYTE[ESI]='\0'; return -1;}
-
 
83
	} while(DSBYTE[EDI-1]!='\0');
-
 
84
	return 0;
-
 
85
}
-
 
86
 
72
 
87
 
73
 
88
 
74
inline fastcall strcat( EDI, ESI)
89
inline fastcall strcat( EDI, ESI)
75
{
90
{
76
  asm {
91
  asm {
Line 97... Line 112...
97
    rep movsb
112
    rep movsb
98
    mov eax, ebx
113
    mov eax, ebx
99
	}
114
	}
100
}
115
}
Line -... Line 116...
-
 
116
 
-
 
117
 
-
 
118
inline fastcall signed int strchr( ESI,BL)
-
 
119
{
-
 
120
	int jj=0;
-
 
121
	do{
-
 
122
		jj++;
-
 
123
		$lodsb
-
 
124
		IF(AL==BL) return jj;
-
 
125
	} while(AL!=0);
-
 
126
	return 0;
-
 
127
}
-
 
128
 
-
 
129
 
-
 
130
inline fastcall signed int strrchr( ESI,BL)
-
 
131
{
-
 
132
	int jj=0, last=0;
-
 
133
	do{
-
 
134
		jj++;
-
 
135
		$lodsb
-
 
136
		IF(AL==BL) last=jj;
-
 
137
	} while(AL!=0);
-
 
138
	return last;
-
 
139
}
-
 
140
 
-
 
141
 
-
 
142
int chrnum(dword searchin, char symbol)
-
 
143
{
-
 
144
	int num = 0;
-
 
145
	while(DSBYTE[searchin])
-
 
146
	{ 
-
 
147
		if (DSBYTE[searchin] == symbol)	num++;
-
 
148
		searchin++;
-
 
149
	}
-
 
150
	return num;
-
 
151
}
-
 
152
 
-
 
153
 
-
 
154
inline fastcall dword strstr( EBX, EDX)
-
 
155
{
-
 
156
  asm {
-
 
157
    MOV EDI, EDX
-
 
158
    XOR ECX, ECX
-
 
159
    XOR EAX, EAX
-
 
160
    DEC ECX
-
 
161
    REPNE SCASB
-
 
162
    NOT ECX
-
 
163
    DEC ECX
-
 
164
    JE LS2
-
 
165
    MOV ESI, ECX
-
 
166
    XOR ECX, ECX
-
 
167
    MOV EDI, EBX
-
 
168
    DEC ECX
-
 
169
    REPNE SCASB
-
 
170
    NOT ECX
-
 
171
    SUB ECX, ESI
-
 
172
    JBE LS2
-
 
173
    MOV EDI, EBX
-
 
174
    LEA EBX, DSDWORD[ ESI-1]
-
 
175
LS1: MOV ESI, EDX
-
 
176
    LODSB
-
 
177
    REPNE SCASB
-
 
178
    JNE LS2
-
 
179
    MOV EAX, ECX
-
 
180
    PUSH EDI
-
 
181
    MOV ECX, EBX
-
 
182
    REPE CMPSB
-
 
183
    POP EDI
-
 
184
    MOV ECX, EAX
-
 
185
    JNE LS1
-
 
186
    LEA EAX, DSDWORD[ EDI-1]
-
 
187
    JMP SHORT LS3
-
 
188
LS2: XOR EAX, EAX
-
 
189
LS3:
-
 
190
  }
-
 
191
}
-
 
192
 
-
 
193
 
-
 
194
dword strstri(dword searchin, usestr_s)
-
 
195
{
-
 
196
	dword usestr_e = usestr_s;
-
 
197
	char si, ue;
-
 
198
 
-
 
199
	while(DSBYTE[searchin])
-
 
200
	{ 
-
 
201
		si = DSBYTE[searchin];
-
 
202
		ue = DSBYTE[usestr_e];
-
 
203
		if (si>='A') && (si<='Z') si +=32;
-
 
204
		if (ue>='A') && (ue<='Z') ue +=32;
-
 
205
		if (si == ue) usestr_e++; else usestr_e = usestr_s;
-
 
206
		searchin++;
-
 
207
		if (DSBYTE[usestr_e]=='\0') return searchin;
-
 
208
	}
-
 
209
	return 0;
-
 
210
}
-
 
211
 
-
 
212
 
-
 
213
void strcpyb(dword searchin, copyin, startstr, endstr)
-
 
214
{
-
 
215
	dword startp, endp;
-
 
216
	startp = strstr(searchin, startstr) + strlen(startstr);
-
 
217
	endp = strstr(startp, endstr);
-
 
218
	if (startp==endp) return;
-
 
219
	do
-
 
220
	{ 
-
 
221
		DSBYTE[copyin] = DSBYTE[startp];
-
 
222
		copyin++;
-
 
223
		startp++;
-
 
224
	}
-
 
225
	while (startp
-
 
226
	DSBYTE[copyin] = '\0';
-
 
227
}
-
 
228
 
101
 
229
 
102
/*void strcat(char *to, char *from) //òîæå ðàáîòàåò
230
/*void strcat(char *to, char *from) //òîæå ðàáîòàåò
103
{
231
{
104
	while(*to) to++;
232
	while(*to) to++;
105
	while(*from)
233
	while(*from)
Line 145... Line 273...
145
	$popa 
273
	$popa
146
    return #buffer;
274
    return #buffer;
147
} 
275
} 
Line 148... Line -...
148
 
-
 
149
 
276
 
150
 
277
 
-
 
278
inline fastcall dword atoi( EDI)
-
 
279
{
151
inline fastcall dword atoi( EDI)
280
	$push ebx
-
 
281
	$push esi
152
{
282
	ESI=EDI;
153
	ESI=EDI;
283
	while (DSBYTE[ESI]==' ') ESI++;
154
	IF(DSBYTE[ESI]=='-')ESI++;
284
	if (DSBYTE[ESI]=='-') ESI++;
155
	EAX=0;
285
	EAX=0;
-
 
286
	while (DSBYTE[ESI]>='0') && (DSBYTE[ESI]<='9')
156
	BH=AL;
287
	{
-
 
288
		$xor ebx, ebx
157
	do{
289
		EBX = DSBYTE[ESI]-'0';
158
		BL=DSBYTE[ESI]-'0';
290
		EAX *= 10;
159
		EAX=EAX*10+EBX;
-
 
160
		ESI++;
-
 
161
	}while(DSBYTE[ESI]>='0');
291
		EAX += EBX;
162
	IF(DSBYTE[EDI]=='-') -EAX;
-
 
163
}
-
 
164
 
292
		ESI++;
165
 
-
 
166
inline fastcall signed int strchr( ESI,BL)
293
	} 
167
{
-
 
168
	int jj=0;
-
 
169
	do{
294
	IF (DSBYTE[EDI]=='-') -EAX;
170
		jj++;
-
 
171
		$lodsb
-
 
172
		IF(AL==BL) return jj;
-
 
173
	} while(AL!=0);
295
	$pop esi
Line 174... Line -...
174
	return 0;
-
 
175
}
-
 
176
 
-
 
177
 
-
 
178
inline fastcall signed int strrchr( ESI,BL)
-
 
179
{
-
 
180
	int jj=0, last=0;
-
 
181
	do{
-
 
182
		jj++;
-
 
183
		$lodsb
-
 
184
		IF(AL==BL) last=jj;
-
 
Line 185... Line 296...
185
	} while(AL!=0);
296
	$pop ebx
186
	return last;
297
}
187
}
298
 
188
 
299
 
Line 223... Line 334...
223
		IF(AL>='€')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯
334
		IF(AL>='€')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯
224
		IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80;	//à-ï
335
		IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80;	//à-ï
225
	}while(AL!=0);
336
	}while(AL!=0);
226
}
337
}
Line 227... Line -...
227
 
-
 
228
 
-
 
229
 
-
 
230
inline fastcall dword strstr( EBX, EDX)
-
 
231
{
-
 
232
  asm {
-
 
233
    MOV EDI, EDX
-
 
234
    XOR ECX, ECX
-
 
235
    XOR EAX, EAX
-
 
236
    DEC ECX
-
 
237
    REPNE SCASB
-
 
238
    NOT ECX
-
 
239
    DEC ECX
-
 
240
    JE LS2
-
 
241
    MOV ESI, ECX
-
 
242
    XOR ECX, ECX
-
 
243
    MOV EDI, EBX
-
 
244
    DEC ECX
-
 
245
    REPNE SCASB
-
 
246
    NOT ECX
-
 
247
    SUB ECX, ESI
-
 
248
    JBE LS2
-
 
249
    MOV EDI, EBX
-
 
250
    LEA EBX, DSDWORD[ ESI-1]
-
 
251
LS1: MOV ESI, EDX
-
 
252
    LODSB
-
 
253
    REPNE SCASB
-
 
254
    JNE LS2
-
 
255
    MOV EAX, ECX
-
 
256
    PUSH EDI
-
 
257
    MOV ECX, EBX
-
 
258
    REPE CMPSB
-
 
259
    POP EDI
-
 
260
    MOV ECX, EAX
-
 
261
    JNE LS1
-
 
262
    LEA EAX, DSDWORD[ EDI-1]
-
 
263
    JMP SHORT LS3
-
 
264
LS2: XOR EAX, EAX
-
 
265
LS3:
-
 
266
  }
-
 
267
}
-
 
268
 
-
 
269
//
-
 
270
void strcpyb(dword searchin, copyin, startstr, endstr)
-
 
271
{
-
 
272
	dword startp, endp;
-
 
273
	startp = strstr(searchin, startstr) + strlen(startstr);
338
 
274
	endp = strstr(startp, endstr);
-
 
275
	if (startp==endp) return;
-
 
276
	do
-
 
277
	{ 
-
 
278
		DSBYTE[copyin] = DSBYTE[startp];
-
 
279
		copyin++;
-
 
280
		startp++;
-
 
281
	}
-
 
282
	while (startp
-
 
283
	DSBYTE[copyin] = '\0';
-
 
284
}
-
 
285
 
-
 
286
int chrnum(dword searchin, char symbol)
339
void debugi(dword d_int)
287
{
340
{
288
	int num = 0;
341
	char tmpch[11];
289
	while(DSBYTE[searchin])
-
 
290
	{ 
-
 
291
		if (DSBYTE[searchin] == symbol)	num++;
-
 
292
		searchin++;
-
 
293
	}
342
	strcpy(#tmpch, itoa(d_int));
294
	return num;
343
	debug(#tmpch);
Line 295... Line -...
295
}
-
 
296
 
-
 
297
 
-
 
298
 
344
}
299
 
345
 
300
/* strtok( LPSTR dest, src, divs);
346
/* strtok( LPSTR dest, src, divs);
301
src - óêàçàòåëü íà èñõîäíóþ ñòðîêó èëè ðåçóëüòàò ïðåäûäóùåãî âûçîâà
347
src - óêàçàòåëü íà èñõîäíóþ ñòðîêó èëè ðåçóëüòàò ïðåäûäóùåãî âûçîâà
302
dest - óêàçàòåëü íà áóôåð, êóäà áóäåò ñêîïèðîâàíî ñëîâî
348
dest - óêàçàòåëü íà áóôåð, êóäà áóäåò ñêîïèðîâàíî ñëîâî