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