Rev 3444 | Rev 3467 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3444 | Rev 3448 | ||
---|---|---|---|
1 | //------------------------------------------------------------------------------ |
1 | //------------------------------------------------------------------------------ |
2 | // strcmp( ESI, EDI) |
2 | // strcmp( ESI, EDI) |
3 | // strlen( EDI) |
3 | // strlen( EDI) |
4 | // strcpy( EDI, ESI) --- 0 if == |
4 | // strcpy( EDI, ESI) --- 0 if == |
5 | // strcat( EDI, ESI) |
5 | // strcat( EDI, ESI) |
6 | // strchr( ESI,BL) --- find first BL |
6 | // strchr( ESI,BL) --- find first BL |
7 | // strrchr( ESI,BL) --- find last BL |
7 | // strrchr( ESI,BL) --- find last BL |
8 | // strstr( EBX, EDX) |
8 | // strstr( EBX, EDX) |
9 | // itoa( ESI) |
9 | // itoa( ESI) |
10 | // atoi( EAX) |
10 | // atoi( EAX) |
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 | // strtrim( ESI) --- removes "blank" characters (\r, \n and space) |
|
15 | // chrnum(dword searchin, char symbol) |
16 | // chrnum(dword searchin, char symbol) |
16 | // strcpyb(dword searchin, copyin, startstr, endstr) --- copy string between strings |
17 | // strcpyb(dword searchin, copyin, startstr, endstr) --- copy string between strings |
17 | // strnumb(dword searchin, startstr, endstr) --- get number between strings |
18 | // strnumb(dword searchin, startstr, endstr) --- get number between strings |
18 | //------------------------------------------------------------------------------ |
19 | //------------------------------------------------------------------------------ |
19 | 20 | ||
20 | inline fastcall signed int strcmp( ESI, EDI) |
21 | inline fastcall signed int strcmp( ESI, EDI) |
21 | { |
22 | { |
22 | loop() |
23 | loop() |
23 | { |
24 | { |
24 | IF (DSBYTE[ESI] |
25 | IF (DSBYTE[ESI] |
25 | IF (DSBYTE[ESI]>DSBYTE[EDI]) RETURN 1; |
26 | IF (DSBYTE[ESI]>DSBYTE[EDI]) RETURN 1; |
26 | IF (DSBYTE[ESI]=='\0') RETURN 0; |
27 | IF (DSBYTE[ESI]=='\0') RETURN 0; |
27 | ESI++; |
28 | ESI++; |
28 | EDI++; |
29 | EDI++; |
29 | } |
30 | } |
30 | } |
31 | } |
31 | 32 | ||
32 | 33 | ||
33 | inline fastcall signed int strncmp( ESI, EDI, ECX) |
34 | inline fastcall signed int strncmp( ESI, EDI, ECX) |
34 | { |
35 | { |
35 | asm { |
36 | asm { |
36 | MOV EBX, EDI |
37 | MOV EBX, EDI |
37 | XOR EAX, EAX |
38 | XOR EAX, EAX |
38 | MOV EDX, ECX |
39 | MOV EDX, ECX |
39 | OR ECX, ECX |
40 | OR ECX, ECX |
40 | JE L1 |
41 | JE L1 |
41 | REPNE SCASB |
42 | REPNE SCASB |
42 | SUB EDX, ECX |
43 | SUB EDX, ECX |
43 | MOV ECX, EDX |
44 | MOV ECX, EDX |
44 | MOV EDI, EBX |
45 | MOV EDI, EBX |
45 | XOR EBX, EBX |
46 | XOR EBX, EBX |
46 | REPE CMPSB |
47 | REPE CMPSB |
47 | MOV AL, DSBYTE[ ESI-1] |
48 | MOV AL, DSBYTE[ ESI-1] |
48 | MOV BL, DSBYTE[ EDI-1] |
49 | MOV BL, DSBYTE[ EDI-1] |
49 | SUB EAX, EBX |
50 | SUB EAX, EBX |
50 | L1: |
51 | L1: |
51 | } |
52 | } |
52 | } |
53 | } |
53 | 54 | ||
54 | 55 | ||
55 | inline fastcall unsigned int strlen( EDI) |
56 | inline fastcall unsigned int strlen( EDI) |
56 | { |
57 | { |
57 | $xor eax, eax |
58 | $xor eax, eax |
58 | $mov ecx, -1 |
59 | $mov ecx, -1 |
59 | $REPNE $SCASB |
60 | $REPNE $SCASB |
60 | EAX-=2+ECX; |
61 | EAX-=2+ECX; |
61 | } |
62 | } |
62 | 63 | ||
63 | 64 | ||
64 | inline fastcall void strcpy( EDI, ESI) |
65 | inline fastcall void strcpy( EDI, ESI) |
65 | { |
66 | { |
66 | $cld |
67 | $cld |
67 | L2: |
68 | L2: |
68 | $lodsb |
69 | $lodsb |
69 | $stosb |
70 | $stosb |
70 | $test al,al |
71 | $test al,al |
71 | $jnz L2 |
72 | $jnz L2 |
72 | } |
73 | } |
73 | 74 | ||
74 | 75 | ||
75 | inline fastcall int strlcpy(dword ESI, EDI, EBX) |
76 | inline fastcall int strlcpy(dword ESI, EDI, EBX) |
76 | { |
77 | { |
77 | EDX=0; |
78 | EDX=0; |
78 | do { |
79 | do { |
79 | DSBYTE[ESI]=DSBYTE[EDI]; |
80 | DSBYTE[ESI]=DSBYTE[EDI]; |
80 | ESI++; |
81 | ESI++; |
81 | EDI++; |
82 | EDI++; |
82 | EDX++; |
83 | EDX++; |
83 | if (EDX==EBX) { DSBYTE[ESI]='\0'; return -1;} |
84 | if (EDX==EBX) { DSBYTE[ESI]='\0'; return -1;} |
84 | } while(DSBYTE[EDI-1]!='\0'); |
85 | } while(DSBYTE[EDI-1]!='\0'); |
85 | return 0; |
86 | return 0; |
86 | } |
87 | } |
- | 88 | ||
- | 89 | inline fastcall strtrim( ESI) |
|
- | 90 | { |
|
- | 91 | EDI = ESI; |
|
- | 92 | do{ |
|
- | 93 | AL=DSBYTE[EDI]; |
|
- | 94 | if (AL != '\32') && (AL != '\13') && (AL != '\10') |
|
- | 95 | { |
|
- | 96 | DSBYTE[ESI]=AL; |
|
- | 97 | ESI++; |
|
- | 98 | } |
|
- | 99 | EDI++; |
|
- | 100 | }while(AL!=0); |
|
- | 101 | DSBYTE[ESI] = '\0'; |
|
87 | 102 | } |
|
88 | 103 | ||
89 | 104 | ||
90 | inline fastcall void strcat( EDI, ESI) |
105 | inline fastcall void strcat( EDI, ESI) |
91 | { |
106 | { |
92 | asm { |
107 | asm { |
93 | mov ebx, edi |
108 | mov ebx, edi |
94 | xor ecx, ecx |
109 | xor ecx, ecx |
95 | xor eax, eax |
110 | xor eax, eax |
96 | dec ecx |
111 | dec ecx |
97 | repne scasb |
112 | repne scasb |
98 | dec edi |
113 | dec edi |
99 | mov edx, edi |
114 | mov edx, edi |
100 | mov edi, esi |
115 | mov edi, esi |
101 | xor ecx, ecx |
116 | xor ecx, ecx |
102 | xor eax, eax |
117 | xor eax, eax |
103 | dec ecx |
118 | dec ecx |
104 | repne scasb |
119 | repne scasb |
105 | xor ecx, 0ffffffffh |
120 | xor ecx, 0ffffffffh |
106 | mov edi, edx |
121 | mov edi, edx |
107 | mov edx, ecx |
122 | mov edx, ecx |
108 | mov eax, edi |
123 | mov eax, edi |
109 | shr ecx, 2 |
124 | shr ecx, 2 |
110 | rep movsd |
125 | rep movsd |
111 | mov ecx, edx |
126 | mov ecx, edx |
112 | and ecx, 3 |
127 | and ecx, 3 |
113 | rep movsb |
128 | rep movsb |
114 | mov eax, ebx |
129 | mov eax, ebx |
115 | } |
130 | } |
116 | } |
131 | } |
117 | 132 | ||
118 | inline fastcall void chrcat(ESI, BL) |
133 | inline fastcall void chrcat(ESI, BL) |
119 | { |
134 | { |
120 | EDI = strlen(ESI); |
135 | EDI = strlen(ESI); |
121 | ESBYTE[ESI+EDI] = BL; |
136 | ESBYTE[ESI+EDI] = BL; |
122 | ESBYTE[ESI+EDI+1] = 0; |
137 | ESBYTE[ESI+EDI+1] = 0; |
123 | } |
138 | } |
124 | 139 | ||
125 | 140 | ||
126 | inline fastcall signed int strchr( ESI,BL) |
141 | inline fastcall signed int strchr( ESI,BL) |
127 | { |
142 | { |
128 | int jj=0; |
143 | int jj=0; |
129 | do{ |
144 | do{ |
130 | jj++; |
145 | jj++; |
131 | $lodsb |
146 | $lodsb |
132 | IF(AL==BL) return jj; |
147 | IF(AL==BL) return jj; |
133 | } while(AL!=0); |
148 | } while(AL!=0); |
134 | return 0; |
149 | return 0; |
135 | } |
150 | } |
136 | 151 | ||
137 | 152 | ||
138 | inline fastcall signed int strrchr( ESI,BL) |
153 | inline fastcall signed int strrchr( ESI,BL) |
139 | { |
154 | { |
140 | int jj=0, last=0; |
155 | int jj=0, last=0; |
141 | do{ |
156 | do{ |
142 | jj++; |
157 | jj++; |
143 | $lodsb |
158 | $lodsb |
144 | IF(AL==BL) last=jj; |
159 | IF(AL==BL) last=jj; |
145 | } while(AL!=0); |
160 | } while(AL!=0); |
146 | return last; |
161 | return last; |
147 | } |
162 | } |
148 | 163 | ||
149 | 164 | ||
150 | int chrnum(dword searchin, char symbol) |
165 | int chrnum(dword searchin, char symbol) |
151 | { |
166 | { |
152 | int num = 0; |
167 | int num = 0; |
153 | while(DSBYTE[searchin]) |
168 | while(DSBYTE[searchin]) |
154 | { |
169 | { |
155 | if (DSBYTE[searchin] == symbol) num++; |
170 | if (DSBYTE[searchin] == symbol) num++; |
156 | searchin++; |
171 | searchin++; |
157 | } |
172 | } |
158 | return num; |
173 | return num; |
159 | } |
174 | } |
160 | 175 | ||
161 | 176 | ||
162 | inline fastcall signed int strstr( EBX, EDX) |
177 | inline fastcall signed int strstr( EBX, EDX) |
163 | { |
178 | { |
164 | asm { |
179 | asm { |
165 | MOV EDI, EDX |
180 | MOV EDI, EDX |
166 | XOR ECX, ECX |
181 | XOR ECX, ECX |
167 | XOR EAX, EAX |
182 | XOR EAX, EAX |
168 | DEC ECX |
183 | DEC ECX |
169 | REPNE SCASB |
184 | REPNE SCASB |
170 | NOT ECX |
185 | NOT ECX |
171 | DEC ECX |
186 | DEC ECX |
172 | JE LS2 |
187 | JE LS2 |
173 | MOV ESI, ECX |
188 | MOV ESI, ECX |
174 | XOR ECX, ECX |
189 | XOR ECX, ECX |
175 | MOV EDI, EBX |
190 | MOV EDI, EBX |
176 | DEC ECX |
191 | DEC ECX |
177 | REPNE SCASB |
192 | REPNE SCASB |
178 | NOT ECX |
193 | NOT ECX |
179 | SUB ECX, ESI |
194 | SUB ECX, ESI |
180 | JBE LS2 |
195 | JBE LS2 |
181 | MOV EDI, EBX |
196 | MOV EDI, EBX |
182 | LEA EBX, DSDWORD[ ESI-1] |
197 | LEA EBX, DSDWORD[ ESI-1] |
183 | LS1: MOV ESI, EDX |
198 | LS1: MOV ESI, EDX |
184 | LODSB |
199 | LODSB |
185 | REPNE SCASB |
200 | REPNE SCASB |
186 | JNE LS2 |
201 | JNE LS2 |
187 | MOV EAX, ECX |
202 | MOV EAX, ECX |
188 | PUSH EDI |
203 | PUSH EDI |
189 | MOV ECX, EBX |
204 | MOV ECX, EBX |
190 | REPE CMPSB |
205 | REPE CMPSB |
191 | POP EDI |
206 | POP EDI |
192 | MOV ECX, EAX |
207 | MOV ECX, EAX |
193 | JNE LS1 |
208 | JNE LS1 |
194 | LEA EAX, DSDWORD[ EDI-1] |
209 | LEA EAX, DSDWORD[ EDI-1] |
195 | JMP SHORT LS3 |
210 | JMP SHORT LS3 |
196 | LS2: XOR EAX, EAX |
211 | LS2: XOR EAX, EAX |
197 | LS3: |
212 | LS3: |
198 | } |
213 | } |
199 | } |
214 | } |
200 | 215 | ||
201 | 216 | ||
202 | dword strstri(dword searchin, usestr_s) |
217 | dword strstri(dword searchin, usestr_s) |
203 | { |
218 | { |
204 | dword usestr_e = usestr_s; |
219 | dword usestr_e = usestr_s; |
205 | char si, ue; |
220 | char si, ue; |
206 | 221 | ||
207 | while(DSBYTE[searchin]) |
222 | while(DSBYTE[searchin]) |
208 | { |
223 | { |
209 | si = DSBYTE[searchin]; |
224 | si = DSBYTE[searchin]; |
210 | ue = DSBYTE[usestr_e]; |
225 | ue = DSBYTE[usestr_e]; |
211 | if (si>='A') && (si<='Z') si +=32; |
226 | if (si>='A') && (si<='Z') si +=32; |
212 | if (ue>='A') && (ue<='Z') ue +=32; |
227 | if (ue>='A') && (ue<='Z') ue +=32; |
213 | if (si == ue) usestr_e++; else usestr_e = usestr_s; |
228 | if (si == ue) usestr_e++; else usestr_e = usestr_s; |
214 | searchin++; |
229 | searchin++; |
215 | if (DSBYTE[usestr_e]=='\0') return searchin; |
230 | if (DSBYTE[usestr_e]=='\0') return searchin; |
216 | } |
231 | } |
217 | return 0; |
232 | return 0; |
218 | } |
233 | } |
219 | 234 | ||
220 | 235 | ||
221 | void strcpyb(dword search_in, copyin, startstr, endstr) |
236 | void strcpyb(dword search_in, copyin, startstr, endstr) |
222 | { |
237 | { |
223 | dword startp, endp; |
238 | dword startp, endp; |
224 | startp = strstr(search_in, startstr) + strlen(startstr); |
239 | startp = strstr(search_in, startstr) + strlen(startstr); |
225 | endp = strstri(startp, endstr); |
240 | endp = strstri(startp, endstr); |
226 | if (startp==endp) return; |
241 | if (startp==endp) return; |
227 | do |
242 | do |
228 | { |
243 | { |
229 | DSBYTE[copyin] = DSBYTE[startp]; |
244 | DSBYTE[copyin] = DSBYTE[startp]; |
230 | copyin++; |
245 | copyin++; |
231 | startp++; |
246 | startp++; |
232 | } |
247 | } |
233 | while (startp |
248 | while (startp |
234 | DSBYTE[copyin] = '\0'; |
249 | DSBYTE[copyin] = '\0'; |
235 | } |
250 | } |
236 | 251 | ||
237 | 252 | ||
238 | /*void strcat(char *to, char *from) //òîæå ðàáîòàåò |
253 | /*void strcat(char *to, char *from) //òîæå ðàáîòàåò |
239 | { |
254 | { |
240 | while(*to) to++; |
255 | while(*to) to++; |
241 | while(*from) |
256 | while(*from) |
242 | { |
257 | { |
243 | *to = *from; |
258 | *to = *from; |
244 | to++; |
259 | to++; |
245 | from++; |
260 | from++; |
246 | } |
261 | } |
247 | *to = '\0'; |
262 | *to = '\0'; |
248 | }*/ |
263 | }*/ |
249 | 264 | ||
250 | dword itoa( ESI) |
265 | dword itoa( ESI) |
251 | { |
266 | { |
252 | unsigned char buffer[11]; |
267 | unsigned char buffer[11]; |
253 | $pusha |
268 | $pusha |
254 | 269 | ||
255 | EDI = #buffer; |
270 | EDI = #buffer; |
256 | ECX = 10; |
271 | ECX = 10; |
257 | if (ESI < 0) |
272 | if (ESI < 0) |
258 | { |
273 | { |
259 | $mov al, '-' |
274 | $mov al, '-' |
260 | $stosb |
275 | $stosb |
261 | $neg esi |
276 | $neg esi |
262 | } |
277 | } |
263 | 278 | ||
264 | $mov eax, esi |
279 | $mov eax, esi |
265 | $push -'0' |
280 | $push -'0' |
266 | F2: |
281 | F2: |
267 | $xor edx, edx |
282 | $xor edx, edx |
268 | $div ecx |
283 | $div ecx |
269 | $push edx |
284 | $push edx |
270 | $test eax, eax |
285 | $test eax, eax |
271 | $jnz F2 |
286 | $jnz F2 |
272 | F3: |
287 | F3: |
273 | $pop eax |
288 | $pop eax |
274 | $add al, '0' |
289 | $add al, '0' |
275 | $stosb |
290 | $stosb |
276 | $jnz F3 |
291 | $jnz F3 |
277 | 292 | ||
278 | $mov al, '\0' |
293 | $mov al, '\0' |
279 | $stosb |
294 | $stosb |
280 | 295 | ||
281 | $popa |
296 | $popa |
282 | return #buffer; |
297 | return #buffer; |
283 | } |
298 | } |
284 | 299 | ||
285 | 300 | ||
286 | inline fastcall dword atoi( EDI) |
301 | inline fastcall dword atoi( EDI) |
287 | { |
302 | { |
288 | $push ebx |
303 | $push ebx |
289 | $push esi |
304 | $push esi |
290 | ESI=EDI; |
305 | ESI=EDI; |
291 | while (DSBYTE[ESI]==' ') ESI++; |
306 | while (DSBYTE[ESI]==' ') ESI++; |
292 | if (DSBYTE[ESI]=='-') ESI++; |
307 | if (DSBYTE[ESI]=='-') ESI++; |
293 | EAX=0; |
308 | EAX=0; |
294 | while (DSBYTE[ESI]>='0') && (DSBYTE[ESI]<='9') |
309 | while (DSBYTE[ESI]>='0') && (DSBYTE[ESI]<='9') |
295 | { |
310 | { |
296 | $xor ebx, ebx |
311 | $xor ebx, ebx |
297 | EBX = DSBYTE[ESI]-'0'; |
312 | EBX = DSBYTE[ESI]-'0'; |
298 | EAX *= 10; |
313 | EAX *= 10; |
299 | EAX += EBX; |
314 | EAX += EBX; |
300 | ESI++; |
315 | ESI++; |
301 | } |
316 | } |
302 | IF (DSBYTE[EDI]=='-') -EAX; |
317 | IF (DSBYTE[EDI]=='-') -EAX; |
303 | $pop esi |
318 | $pop esi |
304 | $pop ebx |
319 | $pop ebx |
305 | } |
320 | } |
306 | 321 | ||
307 | 322 | ||
308 | 323 | ||
309 | inline fastcall strupr( ESI) |
324 | inline fastcall strupr( ESI) |
310 | { |
325 | { |
311 | do{ |
326 | do{ |
312 | AL=DSBYTE[ESI]; |
327 | AL=DSBYTE[ESI]; |
313 | IF(AL>='a')IF(AL<='z')DSBYTE[ESI]=AL&0x5f; |
328 | IF(AL>='a')IF(AL<='z')DSBYTE[ESI]=AL&0x5f; |
314 | IF (AL>=160) && (AL<=175) DSBYTE[ESI] = AL - 32; //à-ï |
329 | IF (AL>=160) && (AL<=175) DSBYTE[ESI] = AL - 32; //à-ï |
315 | IF (AL>=224) && (AL<=239) DSBYTE[ESI] = AL - 80; //à-ï |
330 | IF (AL>=224) && (AL<=239) DSBYTE[ESI] = AL - 80; //à-ï |
316 | ESI++; |
331 | ESI++; |
317 | }while(AL!=0); |
332 | }while(AL!=0); |
318 | } |
333 | } |
319 | 334 | ||
320 | inline fastcall strlwr( ESI) |
335 | inline fastcall strlwr( ESI) |
321 | { |
336 | { |
322 | do{ |
337 | do{ |
323 | $LODSB |
338 | $LODSB |
324 | IF(AL>='A')&&(AL<='Z'){ |
339 | IF(AL>='A')&&(AL<='Z'){ |
325 | AL+=0x20; |
340 | AL+=0x20; |
326 | DSBYTE[ESI-1]=AL; |
341 | DSBYTE[ESI-1]=AL; |
327 | CONTINUE; |
342 | CONTINUE; |
328 | } |
343 | } |
329 | }while(AL!=0); |
344 | }while(AL!=0); |
330 | } |
345 | } |
331 | 346 | ||
332 | inline fastcall strttl( EDX) |
347 | inline fastcall strttl( EDX) |
333 | { |
348 | { |
334 | AL=DSBYTE[EDX]; |
349 | AL=DSBYTE[EDX]; |
335 | IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f; |
350 | IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f; |
336 | IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32; //à-ï |
351 | IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32; //à-ï |
337 | IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80; //à-ï |
352 | IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80; //à-ï |
338 | do{ |
353 | do{ |
339 | EDX++; |
354 | EDX++; |
340 | AL=DSBYTE[EDX]; |
355 | AL=DSBYTE[EDX]; |
341 | IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;} |
356 | IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;} |
342 | IF(AL>='')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯ |
357 | IF(AL>='')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯ |
343 | IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80; //à-ï |
358 | IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80; //à-ï |
344 | }while(AL!=0); |
359 | }while(AL!=0); |
345 | } |
360 | } |
346 | 361 | ||
347 | void debugi(dword d_int) |
362 | void debugi(dword d_int) |
348 | { |
363 | { |
349 | char tmpch[11]; |
364 | char tmpch[11]; |
350 | strcpy(#tmpch, itoa(d_int)); |
365 | strcpy(#tmpch, itoa(d_int)); |
351 | debug(#tmpch); |
366 | debug(#tmpch); |
352 | } |
367 | } |
353 | 368 | ||
354 | 369 | ||
355 | /* strtok( LPSTR dest, src, divs); |
370 | /* strtok( LPSTR dest, src, divs); |
356 | src - óêàçàòåëü íà èñõîäíóþ ñòðîêó èëè ðåçóëüòàò ïðåäûäóùåãî âûçîâà |
371 | src - óêàçàòåëü íà èñõîäíóþ ñòðîêó èëè ðåçóëüòàò ïðåäûäóùåãî âûçîâà |
357 | dest - óêàçàòåëü íà áóôåð, êóäà áóäåò ñêîïèðîâàíî ñëîâî |
372 | dest - óêàçàòåëü íà áóôåð, êóäà áóäåò ñêîïèðîâàíî ñëîâî |
358 | divs - óêàçàòåëü íà ñòðîêó, ñîäåðæàùóþ ñèìâîëû-ðàçäåëèòåëè |
373 | divs - óêàçàòåëü íà ñòðîêó, ñîäåðæàùóþ ñèìâîëû-ðàçäåëèòåëè |
359 | Âîçâðàùàåò: 0, åñëè ñëîâ áîëüøå íåò |
374 | Âîçâðàùàåò: 0, åñëè ñëîâ áîëüøå íåò |
360 | íå 0, åñëè ñëîâî ñêîïèðîâàíî â dest (ïåðåäàéòå ýòî çíà÷åíèå |
375 | íå 0, åñëè ñëîâî ñêîïèðîâàíî â dest (ïåðåäàéòå ýòî çíà÷åíèå |
361 | â êà÷åñòâå src äëÿ ïîñëåäóþùåãî ïîèñêà) */ |
376 | â êà÷åñòâå src äëÿ ïîñëåäóþùåãî ïîèñêà) */ |
362 | 377 | ||
363 | inline fastcall dword strtok( EDX, ESI, EBX) |
378 | inline fastcall dword strtok( EDX, ESI, EBX) |
364 | { |
379 | { |
365 | asm { |
380 | asm { |
366 | XOR ECX, ECX |
381 | XOR ECX, ECX |
367 | MOV EDI, EBX |
382 | MOV EDI, EBX |
368 | XOR EAX, EAX |
383 | XOR EAX, EAX |
369 | DEC ECX |
384 | DEC ECX |
370 | REPNE SCASB |
385 | REPNE SCASB |
371 | XOR ECX, 0FFFFFFFFH |
386 | XOR ECX, 0FFFFFFFFH |
372 | DEC ECX |
387 | DEC ECX |
373 | PUSH ECX |
388 | PUSH ECX |
374 | L1: LODSB |
389 | L1: LODSB |
375 | OR AL, AL |
390 | OR AL, AL |
376 | JZ L4 |
391 | JZ L4 |
377 | MOV EDI, EBX |
392 | MOV EDI, EBX |
378 | MOV ECX, SSDWORD[ ESP] |
393 | MOV ECX, SSDWORD[ ESP] |
379 | REPNE SCASB |
394 | REPNE SCASB |
380 | JZ L1 |
395 | JZ L1 |
381 | DEC ESI |
396 | DEC ESI |
382 | L2: LODSB |
397 | L2: LODSB |
383 | MOV EDI, EBX |
398 | MOV EDI, EBX |
384 | MOV ECX, SSDWORD[ ESP] |
399 | MOV ECX, SSDWORD[ ESP] |
385 | REPNE SCASB |
400 | REPNE SCASB |
386 | JZ L3 |
401 | JZ L3 |
387 | MOV DSBYTE[ EDX], AL |
402 | MOV DSBYTE[ EDX], AL |
388 | INC EDX |
403 | INC EDX |
389 | JMP SHORT L2 |
404 | JMP SHORT L2 |
390 | L3: MOV EAX, ESI |
405 | L3: MOV EAX, ESI |
391 | L4: POP ECX |
406 | L4: POP ECX |
392 | } DSBYTE[ EDX] = 0; |
407 | } DSBYTE[ EDX] = 0; |
393 | } |
408 | } |
394 | 409 | ||
395 | #define strncpy strcpyn |
410 | #define strncpy strcpyn |
396 | #define strnmov strmovn |
411 | #define strnmov strmovn |
397 | #define stricmp strcmpi |
412 | #define stricmp strcmpi |
398 | #define strcmpn strncmp |
413 | #define strcmpn strncmp |
399 | #define strncmpi strcmpni |
414 | #define strncmpi strcmpni |
400 | #define stricmpn strcmpni |
415 | #define stricmpn strcmpni |
401 | #define strnicmp strcmpni |
416 | #define strnicmp strcmpni |
402 | #define strincmp strcmpni |
417 | #define strincmp strcmpni |
403 | #define strcmpin strcmpni=159)>='')DSBYTE[EDX]=AL|0x20;>='Z'){DSBYTE[EDX]=AL|0x20;>=239)>=175)>='z')DSBYTE[EDX]=AL&0x5f; |
418 | #define strcmpin strcmpni=159)>='')DSBYTE[EDX]=AL|0x20;>='Z'){DSBYTE[EDX]=AL|0x20;>=239)>=175)>='z')DSBYTE[EDX]=AL&0x5f; |
404 | >='Z'){ |
419 | >='Z'){ |
405 | >=239)>=175)>='z')DSBYTE[ESI]=AL&0x5f; |
420 | >=239)>=175)>='z')DSBYTE[ESI]=AL&0x5f; |
406 | >='9') |
421 | >='9') |
407 | >> |
422 | >> |
408 | >='Z')>='Z')> |
423 | >='Z')>='Z')> |