Rev 3054 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3054 | Rev 3058 | ||
---|---|---|---|
1 | //------------------------------------------------------------------------------ |
1 | //------------------------------------------------------------------------------ |
2 | // strcmp( ESI, EDI) |
2 | // strcmp( ESI, EDI) |
3 | // strlen( EDI) |
3 | // strlen( EDI) |
4 | // strcpy( EDI, ESI) |
4 | // strcpy( EDI, ESI) |
5 | // strcat( EDI, ESI) |
5 | // strcat( EDI, ESI) |
6 | // strchr( ESI,BL) |
6 | // strchr( ESI,BL) |
7 | // strrchr( ESI,BL) |
7 | // strrchr( ESI,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) ----- âîçìîæíî íå ïîääåðæèâàåò êèðèëëèöó |
12 | // strlwr( ESI) ----- âîçìîæíî íå ïîääåðæèâàåò êèðèëëèöó |
13 | // strttl( EDX) |
13 | // strttl( EDX) |
14 | // strtok( ESI) |
14 | // strtok( ESI) |
15 | //------------------------------------------------------------------------------ |
15 | //------------------------------------------------------------------------------ |
16 | 16 | ||
17 | inline fastcall signed int strcmp( ESI, EDI) |
17 | inline fastcall signed int strcmp( ESI, EDI) |
18 | { |
18 | { |
19 | loop() |
19 | loop() |
20 | { |
20 | { |
21 | IF (DSBYTE[ESI] |
21 | IF (DSBYTE[ESI] |
22 | IF (DSBYTE[ESI]>DSBYTE[EDI]) RETURN 1; |
22 | IF (DSBYTE[ESI]>DSBYTE[EDI]) RETURN 1; |
23 | IF (DSBYTE[ESI]=='\0') RETURN 0; |
23 | IF (DSBYTE[ESI]=='\0') RETURN 0; |
24 | ESI++; |
24 | ESI++; |
25 | EDI++; |
25 | EDI++; |
26 | } |
26 | } |
27 | } |
27 | } |
28 | 28 | ||
29 | 29 | ||
30 | inline fastcall signed int strncmp( ESI, EDI, ECX) |
30 | inline fastcall signed int strncmp( ESI, EDI, ECX) |
31 | { |
31 | { |
32 | asm { |
32 | asm { |
33 | MOV EBX, EDI |
33 | MOV EBX, EDI |
34 | XOR EAX, EAX |
34 | XOR EAX, EAX |
35 | MOV EDX, ECX |
35 | MOV EDX, ECX |
36 | OR ECX, ECX |
36 | OR ECX, ECX |
37 | JE L1 |
37 | JE L1 |
38 | REPNE SCASB |
38 | REPNE SCASB |
39 | SUB EDX, ECX |
39 | SUB EDX, ECX |
40 | MOV ECX, EDX |
40 | MOV ECX, EDX |
41 | MOV EDI, EBX |
41 | MOV EDI, EBX |
42 | XOR EBX, EBX |
42 | XOR EBX, EBX |
43 | REPE CMPSB |
43 | REPE CMPSB |
44 | MOV AL, DSBYTE[ ESI-1] |
44 | MOV AL, DSBYTE[ ESI-1] |
45 | MOV BL, DSBYTE[ EDI-1] |
45 | MOV BL, DSBYTE[ EDI-1] |
46 | SUB EAX, EBX |
46 | SUB EAX, EBX |
47 | L1: |
47 | L1: |
48 | } |
48 | } |
49 | } |
49 | } |
50 | 50 | ||
51 | 51 | ||
52 | 52 | ||
53 | /* |
53 | /* |
54 | 54 | ||
55 | inline fastcall signed int strcmpi( ESI,EDI) |
55 | inline fastcall signed int strcmpi( ESI,EDI) |
56 | uses EBX |
56 | uses EBX |
57 | { |
57 | { |
58 | do{ |
58 | do{ |
59 | $lodsb |
59 | $lodsb |
60 | IF(AL>='a')&&(AL<='z')AL-=0x20; |
60 | IF(AL>='a')&&(AL<='z')AL-=0x20; |
61 | BL=DSBYTE[(E)DI]; |
61 | BL=DSBYTE[(E)DI]; |
62 | IF(BL>='a')&&(BL<='z')BL-=0x20; |
62 | IF(BL>='a')&&(BL<='z')BL-=0x20; |
63 | AL-=BL; |
63 | AL-=BL; |
64 | IF(!ZEROFLAG)BREAK; |
64 | IF(!ZEROFLAG)BREAK; |
65 | (E)DI++; |
65 | (E)DI++; |
66 | }while(BL!=0); |
66 | }while(BL!=0); |
67 | } |
67 | } |
68 | 68 | ||
69 | inline char STRNCMPI((E)SI,(E)DI,(E)CX) |
69 | inline char STRNCMPI((E)SI,(E)DI,(E)CX) |
70 | { |
70 | { |
71 | (E)AX=0; |
71 | (E)AX=0; |
72 | LOOPNZ((E)CX){ |
72 | LOOPNZ((E)CX){ |
73 | $lodsb |
73 | $lodsb |
74 | IF(AL>='a')&&(AL<='z')AL-=0x20; |
74 | IF(AL>='a')&&(AL<='z')AL-=0x20; |
75 | AH=DSBYTE[EDI]; |
75 | AH=DSBYTE[EDI]; |
76 | IF(AH>='a')&&(AH<='z')AH-=0x20; |
76 | IF(AH>='a')&&(AH<='z')AH-=0x20; |
77 | EDI++; |
77 | EDI++; |
78 | IF(AL==0)||(AH==0)||(AL!=AH)BREAK; |
78 | IF(AL==0)||(AH==0)||(AL!=AH)BREAK; |
79 | } |
79 | } |
80 | AL=AL-AH; |
80 | AL=AL-AH; |
81 | }*/ |
81 | }*/ |
82 | 82 | ||
83 | 83 | ||
84 | 84 | ||
85 | inline fastcall unsigned int strlen( EDI) |
85 | inline fastcall unsigned int strlen( EDI) |
86 | { |
86 | { |
87 | $xor eax, eax |
87 | $xor eax, eax |
88 | $mov ecx, -1 |
88 | $mov ecx, -1 |
89 | $REPNE $SCASB |
89 | $REPNE $SCASB |
90 | EAX-=2+ECX; |
90 | EAX-=2+ECX; |
91 | } |
91 | } |
92 | 92 | ||
93 | 93 | ||
94 | inline fastcall strcpy( EDI, ESI) |
94 | inline fastcall strcpy( EDI, ESI) |
95 | { |
95 | { |
96 | $cld |
96 | $cld |
97 | l2: |
97 | l2: |
98 | $lodsb |
98 | $lodsb |
99 | $stosb |
99 | $stosb |
100 | $test al,al |
100 | $test al,al |
101 | $jnz l2 |
101 | $jnz l2 |
102 | } |
102 | } |
103 | 103 | ||
104 | 104 | ||
105 | inline fastcall strcat( EDI, ESI) |
105 | inline fastcall 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 | dword itoa( ESI) |
133 | dword itoa( ESI) |
134 | { |
134 | { |
135 | unsigned char buffer[11]; |
135 | unsigned char buffer[11]; |
136 | EDI = #buffer; |
136 | EDI = #buffer; |
137 | ECX = 10; |
137 | ECX = 10; |
138 | if (ESI < 0) |
138 | if (ESI < 0) |
139 | { |
139 | { |
140 | $mov al, '-' |
140 | $mov al, '-' |
141 | $stosb |
141 | $stosb |
142 | $neg esi |
142 | $neg esi |
143 | } |
143 | } |
144 | 144 | ||
145 | $mov eax, esi |
145 | $mov eax, esi |
146 | $push -'0' |
146 | $push -'0' |
147 | f2: |
147 | f2: |
148 | $xor edx, edx |
148 | $xor edx, edx |
149 | $div ecx |
149 | $div ecx |
150 | $push edx |
150 | $push edx |
151 | $test eax, eax |
151 | $test eax, eax |
152 | $jnz f2 |
152 | $jnz f2 |
153 | f3: |
153 | f3: |
154 | $pop eax |
154 | $pop eax |
155 | $add al, '0' |
155 | $add al, '0' |
156 | $stosb |
156 | $stosb |
157 | $jnz f3 |
157 | $jnz f3 |
158 | 158 | ||
159 | $mov al, '\0' |
159 | $mov al, '\0' |
160 | $stosb |
160 | $stosb |
161 | 161 | ||
162 | return #buffer; |
162 | return #buffer; |
163 | } |
163 | } |
164 | 164 | ||
165 | 165 | ||
166 | 166 | ||
167 | inline fastcall dword atoi( EDI) |
167 | inline fastcall dword atoi( EDI) |
168 | { |
168 | { |
169 | ESI=EDI; |
169 | ESI=EDI; |
170 | IF(DSBYTE[ESI]=='-')ESI++; |
170 | IF(DSBYTE[ESI]=='-')ESI++; |
171 | EAX=0; |
171 | EAX=0; |
172 | BH=AL; |
172 | BH=AL; |
173 | do{ |
173 | do{ |
174 | BL=DSBYTE[ESI]-'0'; |
174 | BL=DSBYTE[ESI]-'0'; |
175 | EAX=EAX*10+EBX; |
175 | EAX=EAX*10+EBX; |
176 | ESI++; |
176 | ESI++; |
177 | }while(DSBYTE[ESI]>0); |
177 | }while(DSBYTE[ESI]>0); |
178 | IF(DSBYTE[EDI]=='-') -EAX; |
178 | IF(DSBYTE[EDI]=='-') -EAX; |
179 | } |
179 | } |
180 | 180 | ||
181 | 181 | ||
182 | inline fastcall signed int strchr( ESI,BL) |
182 | inline fastcall signed int strchr( ESI,BL) |
183 | { |
183 | { |
184 | int jj=0; |
184 | int jj=0; |
185 | do{ |
185 | do{ |
186 | jj++; |
186 | jj++; |
187 | $lodsb |
187 | $lodsb |
188 | IF(AL==BL) return jj; |
188 | IF(AL==BL) return jj; |
189 | } while(AL!=0); |
189 | } while(AL!=0); |
190 | return 0; |
190 | return 0; |
191 | } |
191 | } |
192 | 192 | ||
193 | 193 | ||
194 | inline fastcall signed int strrchr( ESI,BL) |
194 | inline fastcall signed int strrchr( ESI,BL) |
195 | { |
195 | { |
196 | int jj=0, last=-1; |
196 | int jj=0, last=0; |
197 | do{ |
197 | do{ |
198 | jj++; |
198 | jj++; |
199 | $lodsb |
199 | $lodsb |
200 | IF(AL==BL) last=jj; |
200 | IF(AL==BL) last=jj; |
201 | } while(AL!=0); |
201 | } while(AL!=0); |
202 | return last; |
202 | return last; |
203 | } |
203 | } |
204 | 204 | ||
205 | 205 | ||
206 | inline fastcall strupr( ESI) |
206 | inline fastcall strupr( ESI) |
207 | { |
207 | { |
208 | do{ |
208 | do{ |
209 | AL=DSBYTE[ESI]; |
209 | AL=DSBYTE[ESI]; |
210 | IF(AL>='a')IF(AL<='z')DSBYTE[ESI]=AL&0x5f; |
210 | IF(AL>='a')IF(AL<='z')DSBYTE[ESI]=AL&0x5f; |
211 | IF (AL>=160) && (AL<=175) DSBYTE[ESI] = AL - 32; //à-ï |
211 | IF (AL>=160) && (AL<=175) DSBYTE[ESI] = AL - 32; //à-ï |
212 | IF (AL>=224) && (AL<=239) DSBYTE[ESI] = AL - 80; //à-ï |
212 | IF (AL>=224) && (AL<=239) DSBYTE[ESI] = AL - 80; //à-ï |
213 | ESI++; |
213 | ESI++; |
214 | }while(AL!=0); |
214 | }while(AL!=0); |
215 | } |
215 | } |
216 | 216 | ||
217 | inline fastcall strlwr( ESI) |
217 | inline fastcall strlwr( ESI) |
218 | { |
218 | { |
219 | do{ |
219 | do{ |
220 | $LODSB |
220 | $LODSB |
221 | IF(AL>='A')&&(AL<='Z'){ |
221 | IF(AL>='A')&&(AL<='Z'){ |
222 | AL+=0x20; |
222 | AL+=0x20; |
223 | DSBYTE[ESI-1]=AL; |
223 | DSBYTE[ESI-1]=AL; |
224 | CONTINUE; |
224 | CONTINUE; |
225 | } |
225 | } |
226 | }while(AL!=0); |
226 | }while(AL!=0); |
227 | } |
227 | } |
228 | 228 | ||
229 | inline fastcall strttl( EDX) |
229 | inline fastcall strttl( EDX) |
230 | { |
230 | { |
231 | AL=DSBYTE[EDX]; |
231 | AL=DSBYTE[EDX]; |
232 | IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f; |
232 | IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f; |
233 | IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32; //à-ï |
233 | IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32; //à-ï |
234 | IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80; //à-ï |
234 | IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80; //à-ï |
235 | do{ |
235 | do{ |
236 | EDX++; |
236 | EDX++; |
237 | AL=DSBYTE[EDX]; |
237 | AL=DSBYTE[EDX]; |
238 | IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;} |
238 | IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;} |
239 | IF(AL>='')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯ |
239 | IF(AL>='')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯ |
240 | IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80; //à-ï |
240 | IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80; //à-ï |
241 | }while(AL!=0); |
241 | }while(AL!=0); |
242 | } |
242 | } |
243 | 243 | ||
244 | 244 | ||
245 | 245 | ||
246 | inline fastcall dword strstr( EBX, EDX) |
246 | inline fastcall dword strstr( EBX, EDX) |
247 | { |
247 | { |
248 | asm { |
248 | asm { |
249 | MOV EDI, EDX |
249 | MOV EDI, EDX |
250 | XOR ECX, ECX |
250 | XOR ECX, ECX |
251 | XOR EAX, EAX |
251 | XOR EAX, EAX |
252 | DEC ECX |
252 | DEC ECX |
253 | REPNE SCASB |
253 | REPNE SCASB |
254 | NOT ECX |
254 | NOT ECX |
255 | DEC ECX |
255 | DEC ECX |
256 | JE LS2 |
256 | JE LS2 |
257 | MOV ESI, ECX |
257 | MOV ESI, ECX |
258 | XOR ECX, ECX |
258 | XOR ECX, ECX |
259 | MOV EDI, EBX |
259 | MOV EDI, EBX |
260 | DEC ECX |
260 | DEC ECX |
261 | REPNE SCASB |
261 | REPNE SCASB |
262 | NOT ECX |
262 | NOT ECX |
263 | SUB ECX, ESI |
263 | SUB ECX, ESI |
264 | JBE LS2 |
264 | JBE LS2 |
265 | MOV EDI, EBX |
265 | MOV EDI, EBX |
266 | LEA EBX, DSDWORD[ ESI-1] |
266 | LEA EBX, DSDWORD[ ESI-1] |
267 | LS1: MOV ESI, EDX |
267 | LS1: MOV ESI, EDX |
268 | LODSB |
268 | LODSB |
269 | REPNE SCASB |
269 | REPNE SCASB |
270 | JNE LS2 |
270 | JNE LS2 |
271 | MOV EAX, ECX |
271 | MOV EAX, ECX |
272 | PUSH EDI |
272 | PUSH EDI |
273 | MOV ECX, EBX |
273 | MOV ECX, EBX |
274 | REPE CMPSB |
274 | REPE CMPSB |
275 | POP EDI |
275 | POP EDI |
276 | MOV ECX, EAX |
276 | MOV ECX, EAX |
277 | JNE LS1 |
277 | JNE LS1 |
278 | LEA EAX, DSDWORD[ EDI-1] |
278 | LEA EAX, DSDWORD[ EDI-1] |
279 | JMP SHORT LS3 |
279 | JMP SHORT LS3 |
280 | LS2: XOR EAX, EAX |
280 | LS2: XOR EAX, EAX |
281 | LS3: |
281 | LS3: |
282 | } |
282 | } |
283 | } |
283 | } |
284 | 284 | ||
285 | 285 | ||
286 | 286 | ||
287 | 287 | ||
288 | /* strtok( LPSTR dest, src, divs); |
288 | /* strtok( LPSTR dest, src, divs); |
289 | src - óêàçàòåëü íà èñõîäíóþ ñòðîêó èëè ðåçóëüòàò ïðåäûäóùåãî âûçîâà |
289 | src - óêàçàòåëü íà èñõîäíóþ ñòðîêó èëè ðåçóëüòàò ïðåäûäóùåãî âûçîâà |
290 | dest - óêàçàòåëü íà áóôåð, êóäà áóäåò ñêîïèðîâàíî ñëîâî |
290 | dest - óêàçàòåëü íà áóôåð, êóäà áóäåò ñêîïèðîâàíî ñëîâî |
291 | divs - óêàçàòåëü íà ñòðîêó, ñîäåðæàùóþ ñèìâîëû-ðàçäåëèòåëè |
291 | divs - óêàçàòåëü íà ñòðîêó, ñîäåðæàùóþ ñèìâîëû-ðàçäåëèòåëè |
292 | Âîçâðàùàåò: 0, åñëè ñëîâ áîëüøå íåò |
292 | Âîçâðàùàåò: 0, åñëè ñëîâ áîëüøå íåò |
293 | íå 0, åñëè ñëîâî ñêîïèðîâàíî â dest (ïåðåäàéòå ýòî çíà÷åíèå |
293 | íå 0, åñëè ñëîâî ñêîïèðîâàíî â dest (ïåðåäàéòå ýòî çíà÷åíèå |
294 | â êà÷åñòâå src äëÿ ïîñëåäóþùåãî ïîèñêà) */ |
294 | â êà÷åñòâå src äëÿ ïîñëåäóþùåãî ïîèñêà) */ |
295 | 295 | ||
296 | inline fastcall dword strtok( EDX, ESI, EBX) |
296 | inline fastcall dword strtok( EDX, ESI, EBX) |
297 | { |
297 | { |
298 | asm { |
298 | asm { |
299 | XOR ECX, ECX |
299 | XOR ECX, ECX |
300 | MOV EDI, EBX |
300 | MOV EDI, EBX |
301 | XOR EAX, EAX |
301 | XOR EAX, EAX |
302 | DEC ECX |
302 | DEC ECX |
303 | REPNE SCASB |
303 | REPNE SCASB |
304 | XOR ECX, 0FFFFFFFFH |
304 | XOR ECX, 0FFFFFFFFH |
305 | DEC ECX |
305 | DEC ECX |
306 | PUSH ECX |
306 | PUSH ECX |
307 | L1: LODSB |
307 | L1: LODSB |
308 | OR AL, AL |
308 | OR AL, AL |
309 | JZ L4 |
309 | JZ L4 |
310 | MOV EDI, EBX |
310 | MOV EDI, EBX |
311 | MOV ECX, SSDWORD[ ESP] |
311 | MOV ECX, SSDWORD[ ESP] |
312 | REPNE SCASB |
312 | REPNE SCASB |
313 | JZ L1 |
313 | JZ L1 |
314 | DEC ESI |
314 | DEC ESI |
315 | L2: LODSB |
315 | L2: LODSB |
316 | MOV EDI, EBX |
316 | MOV EDI, EBX |
317 | MOV ECX, SSDWORD[ ESP] |
317 | MOV ECX, SSDWORD[ ESP] |
318 | REPNE SCASB |
318 | REPNE SCASB |
319 | JZ L3 |
319 | JZ L3 |
320 | MOV DSBYTE[ EDX], AL |
320 | MOV DSBYTE[ EDX], AL |
321 | INC EDX |
321 | INC EDX |
322 | JMP SHORT L2 |
322 | JMP SHORT L2 |
323 | L3: MOV EAX, ESI |
323 | L3: MOV EAX, ESI |
324 | L4: POP ECX |
324 | L4: POP ECX |
325 | } DSBYTE[ EDX] = 0; |
325 | } DSBYTE[ EDX] = 0; |
326 | } |
326 | } |
327 | 327 | ||
328 | #define strncpy strcpyn |
328 | #define strncpy strcpyn |
329 | #define strnmov strmovn |
329 | #define strnmov strmovn |
330 | #define stricmp strcmpi |
330 | #define stricmp strcmpi |
331 | #define strcmpn strncmp |
331 | #define strcmpn strncmp |
332 | #define strncmpi strcmpni |
332 | #define strncmpi strcmpni |
333 | #define stricmpn strcmpni |
333 | #define stricmpn strcmpni |
334 | #define strnicmp strcmpni |
334 | #define strnicmp strcmpni |
335 | #define strincmp strcmpni |
335 | #define strincmp strcmpni |
336 | #define strcmpin strcmpni=159)>='')DSBYTE[EDX]=AL|0x20;>='Z'){DSBYTE[EDX]=AL|0x20;>=239)>=175)>='z')DSBYTE[EDX]=AL&0x5f; |
336 | #define strcmpin strcmpni=159)>='')DSBYTE[EDX]=AL|0x20;>='Z'){DSBYTE[EDX]=AL|0x20;>=239)>=175)>='z')DSBYTE[EDX]=AL&0x5f; |
337 | >='Z'){ |
337 | >='Z'){ |
338 | >=239)>=175)>='z')DSBYTE[ESI]=AL&0x5f; |
338 | >=239)>=175)>='z')DSBYTE[ESI]=AL&0x5f; |
339 | >>='z')AH-=0x20; |
339 | >>='z')AH-=0x20; |
340 | >='z')AL-=0x20; |
340 | >='z')AL-=0x20; |
341 | >='z')BL-=0x20; |
341 | >='z')BL-=0x20; |
342 | >='z')AL-=0x20; |
342 | >='z')AL-=0x20; |
343 | > |
343 | > |