Rev 4639 | Rev 4688 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4639 | Rev 4645 | ||
---|---|---|---|
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 | if (EBX<0) return -1; |
78 | if (EBX<0) return -1; |
79 | EDX=0; |
79 | EDX=0; |
80 | do { |
80 | do { |
81 | DSBYTE[ESI]=DSBYTE[EDI]; |
81 | DSBYTE[ESI]=DSBYTE[EDI]; |
82 | ESI++; |
82 | ESI++; |
83 | EDI++; |
83 | EDI++; |
84 | EDX++; |
84 | EDX++; |
85 | if (EDX==EBX) { DSBYTE[ESI]='\0'; return -1;} |
85 | if (EDX==EBX) { DSBYTE[ESI]='\0'; return -1;} |
86 | } while(DSBYTE[EDI-1]!='\0'); |
86 | } while(DSBYTE[EDI-1]!='\0'); |
87 | return 0; |
87 | return 0; |
88 | } |
88 | } |
89 | 89 | ||
90 | inline fastcall strtrim( ESI) |
90 | inline fastcall strtrim( ESI) |
91 | { |
91 | { |
92 | EDI = ESI; |
92 | EDI = ESI; |
93 | do{ |
93 | do{ |
94 | AL=DSBYTE[EDI]; |
94 | AL=DSBYTE[EDI]; |
95 | if (AL != '\32') && (AL != '\13') && (AL != '\10') |
95 | if (AL != '\32') && (AL != '\13') && (AL != '\10') |
96 | { |
96 | { |
97 | DSBYTE[ESI]=AL; |
97 | DSBYTE[ESI]=AL; |
98 | ESI++; |
98 | ESI++; |
99 | } |
99 | } |
100 | EDI++; |
100 | EDI++; |
101 | }while(AL!=0); |
101 | }while(AL!=0); |
102 | DSBYTE[ESI] = '\0'; |
102 | DSBYTE[ESI] = '\0'; |
103 | } |
103 | } |
104 | 104 | ||
105 | 105 | ||
106 | inline fastcall void strcat( EDI, ESI) |
106 | inline fastcall void strcat( EDI, ESI) |
107 | { |
107 | { |
108 | asm { |
108 | asm { |
109 | mov ebx, edi |
109 | mov ebx, edi |
110 | xor ecx, ecx |
110 | xor ecx, ecx |
111 | xor eax, eax |
111 | xor eax, eax |
112 | dec ecx |
112 | dec ecx |
113 | repne scasb |
113 | repne scasb |
114 | dec edi |
114 | dec edi |
115 | mov edx, edi |
115 | mov edx, edi |
116 | mov edi, esi |
116 | mov edi, esi |
117 | xor ecx, ecx |
117 | xor ecx, ecx |
118 | xor eax, eax |
118 | xor eax, eax |
119 | dec ecx |
119 | dec ecx |
120 | repne scasb |
120 | repne scasb |
121 | xor ecx, 0ffffffffh |
121 | xor ecx, 0ffffffffh |
122 | mov edi, edx |
122 | mov edi, edx |
123 | mov edx, ecx |
123 | mov edx, ecx |
124 | mov eax, edi |
124 | mov eax, edi |
125 | shr ecx, 2 |
125 | shr ecx, 2 |
126 | rep movsd |
126 | rep movsd |
127 | mov ecx, edx |
127 | mov ecx, edx |
128 | and ecx, 3 |
128 | and ecx, 3 |
129 | rep movsb |
129 | rep movsb |
130 | mov eax, ebx |
130 | mov eax, ebx |
131 | } |
131 | } |
132 | } |
132 | } |
133 | 133 | ||
134 | inline fastcall void chrcat(ESI, BL) |
134 | inline fastcall void chrcat(ESI, BL) |
135 | { |
135 | { |
136 | EDI = strlen(ESI); |
136 | EDI = strlen(ESI); |
137 | ESBYTE[ESI+EDI] = BL; |
137 | ESBYTE[ESI+EDI] = BL; |
138 | ESBYTE[ESI+EDI+1] = 0; |
138 | ESBYTE[ESI+EDI+1] = 0; |
139 | } |
139 | } |
140 | 140 | ||
141 | 141 | ||
142 | inline fastcall signed int strchr( ESI,BL) |
142 | inline fastcall signed int strchr( ESI,BL) |
143 | { |
143 | { |
144 | int jj=0; |
144 | int jj=0; |
145 | do{ |
145 | do{ |
146 | jj++; |
146 | jj++; |
147 | $lodsb |
147 | $lodsb |
148 | IF(AL==BL) return jj; |
148 | IF(AL==BL) return jj; |
149 | } while(AL!=0); |
149 | } while(AL!=0); |
150 | return 0; |
150 | return 0; |
151 | } |
151 | } |
152 | 152 | ||
153 | 153 | ||
154 | inline fastcall signed int strrchr( ESI,BL) |
154 | inline fastcall signed int strrchr( ESI,BL) |
155 | { |
155 | { |
156 | int jj=0, last=0; |
156 | int jj=0, last=0; |
157 | do{ |
157 | do{ |
158 | jj++; |
158 | jj++; |
159 | $lodsb |
159 | $lodsb |
160 | IF(AL==BL) last=jj; |
160 | IF(AL==BL) last=jj; |
161 | } while(AL!=0); |
161 | } while(AL!=0); |
162 | return last; |
162 | return last; |
163 | } |
163 | } |
164 | 164 | ||
165 | 165 | ||
166 | int chrnum(dword searchin, char symbol) |
166 | int chrnum(dword searchin, char symbol) |
167 | { |
167 | { |
168 | int num = 0; |
168 | int num = 0; |
169 | while(DSBYTE[searchin]) |
169 | while(DSBYTE[searchin]) |
170 | { |
170 | { |
171 | if (DSBYTE[searchin] == symbol) num++; |
171 | if (DSBYTE[searchin] == symbol) num++; |
172 | searchin++; |
172 | searchin++; |
173 | } |
173 | } |
174 | return num; |
174 | return num; |
175 | } |
175 | } |
176 | 176 | ||
177 | 177 | ||
178 | inline fastcall signed int strstr( EBX, EDX) |
178 | inline fastcall signed int strstr( EBX, EDX) |
179 | { |
179 | { |
180 | asm { |
180 | asm { |
181 | MOV EDI, EDX |
181 | MOV EDI, EDX |
182 | XOR ECX, ECX |
182 | XOR ECX, ECX |
183 | XOR EAX, EAX |
183 | XOR EAX, EAX |
184 | DEC ECX |
184 | DEC ECX |
185 | REPNE SCASB |
185 | REPNE SCASB |
186 | NOT ECX |
186 | NOT ECX |
187 | DEC ECX |
187 | DEC ECX |
188 | JE LS2 |
188 | JE LS2 |
189 | MOV ESI, ECX |
189 | MOV ESI, ECX |
190 | XOR ECX, ECX |
190 | XOR ECX, ECX |
191 | MOV EDI, EBX |
191 | MOV EDI, EBX |
192 | DEC ECX |
192 | DEC ECX |
193 | REPNE SCASB |
193 | REPNE SCASB |
194 | NOT ECX |
194 | NOT ECX |
195 | SUB ECX, ESI |
195 | SUB ECX, ESI |
196 | JBE LS2 |
196 | JBE LS2 |
197 | MOV EDI, EBX |
197 | MOV EDI, EBX |
198 | LEA EBX, DSDWORD[ ESI-1] |
198 | LEA EBX, DSDWORD[ ESI-1] |
199 | LS1: MOV ESI, EDX |
199 | LS1: MOV ESI, EDX |
200 | LODSB |
200 | LODSB |
201 | REPNE SCASB |
201 | REPNE SCASB |
202 | JNE LS2 |
202 | JNE LS2 |
203 | MOV EAX, ECX |
203 | MOV EAX, ECX |
204 | PUSH EDI |
204 | PUSH EDI |
205 | MOV ECX, EBX |
205 | MOV ECX, EBX |
206 | REPE CMPSB |
206 | REPE CMPSB |
207 | POP EDI |
207 | POP EDI |
208 | MOV ECX, EAX |
208 | MOV ECX, EAX |
209 | JNE LS1 |
209 | JNE LS1 |
210 | LEA EAX, DSDWORD[ EDI-1] |
210 | LEA EAX, DSDWORD[ EDI-1] |
211 | JMP SHORT LS3 |
211 | JMP SHORT LS3 |
212 | LS2: XOR EAX, EAX |
212 | LS2: XOR EAX, EAX |
213 | LS3: |
213 | LS3: |
214 | } |
214 | } |
215 | } |
215 | } |
216 | 216 | ||
217 | dword strcmpi(dword cmp1, cmp2) |
217 | dword strcmpi(dword cmp1, cmp2) |
218 | { |
218 | { |
219 | char si, ue; |
219 | char si, ue; |
220 | 220 | ||
221 | loop() |
221 | loop() |
222 | { |
222 | { |
223 | si = DSBYTE[cmp1]; |
223 | si = DSBYTE[cmp1]; |
224 | ue = DSBYTE[cmp2]; |
224 | ue = DSBYTE[cmp2]; |
225 | if (si>='A') && (si<='Z') si +=32; |
225 | if (si>='A') && (si<='Z') si +=32; |
226 | if (ue>='A') && (ue<='Z') ue +=32; |
226 | if (ue>='A') && (ue<='Z') ue +=32; |
227 | if (si != ue) return -1; |
227 | if (si != ue) return -1; |
228 | cmp1++; |
228 | cmp1++; |
229 | cmp2++; |
229 | cmp2++; |
230 | if ((DSBYTE[cmp1]=='\0') && (DSBYTE[cmp2]=='\0')) return 0; |
230 | if ((DSBYTE[cmp1]=='\0') && (DSBYTE[cmp2]=='\0')) return 0; |
231 | if (DSBYTE[cmp1]=='\0') return -1; |
231 | if (DSBYTE[cmp1]=='\0') return -1; |
232 | if (DSBYTE[cmp2]=='\0') return 1; |
232 | if (DSBYTE[cmp2]=='\0') return 1; |
233 | } |
233 | } |
234 | } |
234 | } |
235 | 235 | ||
236 | dword strstri(dword searchin, usestr_s) |
236 | dword strstri(dword searchin, usestr_s) |
237 | { |
237 | { |
238 | dword usestr_e = usestr_s; |
238 | dword usestr_e = usestr_s; |
239 | char si, ue; |
239 | char si, ue; |
240 | 240 | ||
241 | while(DSBYTE[searchin]) |
241 | while(DSBYTE[searchin]) |
242 | { |
242 | { |
243 | si = DSBYTE[searchin]; |
243 | si = DSBYTE[searchin]; |
244 | ue = DSBYTE[usestr_e]; |
244 | ue = DSBYTE[usestr_e]; |
245 | if (si>='A') && (si<='Z') si +=32; |
245 | if (si>='A') && (si<='Z') si +=32; |
246 | if (ue>='A') && (ue<='Z') ue +=32; |
246 | if (ue>='A') && (ue<='Z') ue +=32; |
247 | if (si == ue) usestr_e++; else usestr_e = usestr_s; |
247 | if (si == ue) usestr_e++; else usestr_e = usestr_s; |
248 | searchin++; |
248 | searchin++; |
249 | if (DSBYTE[usestr_e]=='\0') return searchin; |
249 | if (DSBYTE[usestr_e]=='\0') return searchin; |
250 | } |
250 | } |
251 | return 0; |
251 | return 0; |
252 | } |
252 | } |
253 | 253 | ||
254 | 254 | ||
255 | unsigned int strcpyb(dword search_in, copyin, startstr, endstr) |
255 | unsigned int strcpyb(dword search_in, copyin, startstr, endstr) |
256 | { |
256 | { |
257 | dword startp, endp; |
257 | dword startp, endp; |
258 | dword copyin_start_off = copyin; |
258 | dword copyin_start_off = copyin; |
259 | if (startstr==0) startp = search_in; else startp = strstr(search_in, startstr) + strlen(startstr); |
259 | if (startstr==0) startp = search_in; else startp = strstr(search_in, startstr) + strlen(startstr); |
260 | endp = strstri(startp, endstr); |
260 | endp = strstri(startp, endstr); |
261 | if (endp==0) endp = startp+strlen(search_in); |
261 | if (endp==0) endp = startp+strlen(search_in); |
262 | //if (startp==endp) return 0; |
262 | //if (startp==endp) return 0; |
263 | do |
263 | do |
264 | { |
264 | { |
265 | DSBYTE[copyin] = DSBYTE[startp]; |
265 | DSBYTE[copyin] = DSBYTE[startp]; |
266 | copyin++; |
266 | copyin++; |
267 | startp++; |
267 | startp++; |
268 | } |
268 | } |
269 | while (startp |
269 | while (startp |
270 | DSBYTE[copyin] = '\0'; |
270 | DSBYTE[copyin] = '\0'; |
271 | return copyin_start_off; |
271 | return copyin_start_off; |
272 | } |
272 | } |
273 | 273 | ||
274 | 274 | ||
275 | /*void strcat(char *to, char *from) //òîæå ðàáîòàåò |
275 | /*void strcat(char *to, char *from) //òîæå ðàáîòàåò |
276 | { |
276 | { |
277 | while(*to) to++; |
277 | while(*to) to++; |
278 | while(*from) |
278 | while(*from) |
279 | { |
279 | { |
280 | *to = *from; |
280 | *to = *from; |
281 | to++; |
281 | to++; |
282 | from++; |
282 | from++; |
283 | } |
283 | } |
284 | *to = '\0'; |
284 | *to = '\0'; |
285 | }*/ |
285 | }*/ |
286 | 286 | ||
287 | 287 | ||
288 | inline fastcall dword atoi( EDI) |
288 | inline fastcall dword atoi( EDI) |
289 | { |
289 | { |
290 | $push ebx |
290 | $push ebx |
291 | $push esi |
291 | $push esi |
292 | ESI=EDI; |
292 | ESI=EDI; |
293 | while (DSBYTE[ESI]==' ') ESI++; |
293 | while (DSBYTE[ESI]==' ') ESI++; |
294 | if (DSBYTE[ESI]=='-') ESI++; |
294 | if (DSBYTE[ESI]=='-') ESI++; |
295 | EAX=0; |
295 | EAX=0; |
296 | while (DSBYTE[ESI]>='0') && (DSBYTE[ESI]<='9') |
296 | while (DSBYTE[ESI]>='0') && (DSBYTE[ESI]<='9') |
297 | { |
297 | { |
298 | $xor ebx, ebx |
298 | $xor ebx, ebx |
299 | EBX = DSBYTE[ESI]-'0'; |
299 | EBX = DSBYTE[ESI]-'0'; |
300 | EAX *= 10; |
300 | EAX *= 10; |
301 | EAX += EBX; |
301 | EAX += EBX; |
302 | ESI++; |
302 | ESI++; |
303 | } |
303 | } |
304 | IF (DSBYTE[EDI]=='-') -EAX; |
304 | IF (DSBYTE[EDI]=='-') -EAX; |
305 | $pop esi |
305 | $pop esi |
306 | $pop ebx |
306 | $pop ebx |
307 | } |
307 | } |
308 | 308 | ||
309 | 309 | ||
310 | 310 | ||
311 | inline fastcall strupr( ESI) |
311 | inline fastcall strupr( ESI) |
312 | { |
312 | { |
313 | do{ |
313 | do{ |
314 | AL=DSBYTE[ESI]; |
314 | AL=DSBYTE[ESI]; |
315 | IF(AL>='a')IF(AL<='z')DSBYTE[ESI]=AL&0x5f; |
315 | IF(AL>='a')IF(AL<='z')DSBYTE[ESI]=AL&0x5f; |
316 | IF (AL>=160) && (AL<=175) DSBYTE[ESI] = AL - 32; //à-ï |
316 | IF (AL>=160) && (AL<=175) DSBYTE[ESI] = AL - 32; //à-ï |
317 | IF (AL>=224) && (AL<=239) DSBYTE[ESI] = AL - 80; //à-ï |
317 | IF (AL>=224) && (AL<=239) DSBYTE[ESI] = AL - 80; //à-ï |
318 | ESI++; |
318 | ESI++; |
319 | }while(AL!=0); |
319 | }while(AL!=0); |
320 | } |
320 | } |
321 | 321 | ||
322 | inline fastcall strlwr( ESI) |
322 | inline fastcall strlwr( ESI) |
323 | { |
323 | { |
324 | do{ |
324 | do{ |
325 | $LODSB |
325 | $LODSB |
326 | IF(AL>='A')&&(AL<='Z'){ |
326 | IF(AL>='A')&&(AL<='Z'){ |
327 | AL+=0x20; |
327 | AL+=0x20; |
328 | DSBYTE[ESI-1]=AL; |
328 | DSBYTE[ESI-1]=AL; |
329 | CONTINUE; |
329 | CONTINUE; |
330 | } |
330 | } |
331 | }while(AL!=0); |
331 | }while(AL!=0); |
332 | } |
332 | } |
333 | 333 | ||
334 | inline fastcall strttl( EDX) |
334 | inline fastcall strttl( EDX) |
335 | { |
335 | { |
336 | AL=DSBYTE[EDX]; |
336 | AL=DSBYTE[EDX]; |
337 | IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f; |
337 | IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f; |
338 | IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32; //à-ï |
338 | IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32; //à-ï |
339 | IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80; //à-ï |
339 | IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80; //à-ï |
340 | do{ |
340 | do{ |
341 | EDX++; |
341 | EDX++; |
342 | AL=DSBYTE[EDX]; |
342 | AL=DSBYTE[EDX]; |
343 | IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;} |
343 | IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;} |
344 | IF(AL>='')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯ |
344 | IF(AL>='')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯ |
345 | IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80; //à-ï |
345 | IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80; //à-ï |
346 | }while(AL!=0); |
346 | }while(AL!=0); |
347 | } |
347 | } |
348 | 348 | ||
349 | 349 | ||
350 | dword itoa( ESI) |
350 | dword itoa( ESI) |
351 | { |
351 | { |
352 | unsigned char buffer[11]; |
352 | unsigned char buffer[11]; |
353 | $pusha |
353 | $pusha |
354 | EDI = #buffer; |
354 | EDI = #buffer; |
355 | ECX = 10; |
355 | ECX = 10; |
356 | if (ESI < 0) |
356 | if (ESI < 0) |
357 | { |
357 | { |
358 | $mov al, '-' |
358 | $mov al, '-' |
359 | $stosb |
359 | $stosb |
360 | $neg esi |
360 | $neg esi |
361 | } |
361 | } |
362 | 362 | ||
363 | $mov eax, esi |
363 | $mov eax, esi |
364 | $push -'0' |
364 | $push -'0' |
365 | F2: |
365 | F2: |
366 | $xor edx, edx |
366 | $xor edx, edx |
367 | $div ecx |
367 | $div ecx |
368 | $push edx |
368 | $push edx |
369 | $test eax, eax |
369 | $test eax, eax |
370 | $jnz F2 |
370 | $jnz F2 |
371 | F3: |
371 | F3: |
372 | $pop eax |
372 | $pop eax |
373 | $add al, '0' |
373 | $add al, '0' |
374 | $stosb |
374 | $stosb |
375 | $jnz F3 |
375 | $jnz F3 |
376 | 376 | ||
377 | $mov al, '\0' |
377 | $mov al, '\0' |
378 | $stosb |
378 | $stosb |
379 | 379 | ||
380 | $popa |
380 | $popa |
381 | return #buffer; |
381 | return #buffer; |
382 | } |
382 | } |
383 | 383 | ||
384 | inline fastcall itoa_(signed int EDI, ESI) |
384 | inline fastcall itoa_(signed int EDI, ESI) |
385 | { |
385 | { |
386 | $pusha |
386 | $pusha |
387 | EBX = EDI; |
387 | EBX = EDI; |
388 | ECX = 10; |
388 | ECX = 10; |
389 | if (ESI > 90073741824) |
389 | if (ESI > 90073741824) |
390 | { |
390 | { |
391 | $mov al, '-' |
391 | $mov al, '-' |
392 | $stosb |
392 | $stosb |
393 | $neg esi |
393 | $neg esi |
394 | } |
394 | } |
395 | 395 | ||
396 | $mov eax, esi |
396 | $mov eax, esi |
397 | $push -'0' |
397 | $push -'0' |
398 | F2: |
398 | F2: |
399 | $xor edx, edx |
399 | $xor edx, edx |
400 | $div ecx |
400 | $div ecx |
401 | $push edx |
401 | $push edx |
402 | $test eax, eax |
402 | $test eax, eax |
403 | $jnz F2 |
403 | $jnz F2 |
404 | F3: |
404 | F3: |
405 | $pop eax |
405 | $pop eax |
406 | $add al, '0' |
406 | $add al, '0' |
407 | $stosb |
407 | $stosb |
408 | $jnz F3 |
408 | $jnz F3 |
409 | 409 | ||
410 | $mov al, '\0' |
410 | $mov al, '\0' |
411 | $stosb |
411 | $stosb |
412 | 412 | ||
413 | $popa |
413 | $popa |
414 | return EBX; |
414 | return EBX; |
415 | } |
415 | } |
416 | 416 | ||
417 | void debugi(dword d_int) |
417 | void debugi(dword d_int) |
418 | { |
418 | { |
419 | char tmpch[12]; |
419 | char tmpch[12]; |
420 | itoa_(#tmpch, d_int); |
420 | itoa_(#tmpch, d_int); |
421 | debug(#tmpch); |
421 | debugln(#tmpch); |
422 | } |
422 | } |
423 | 423 | ||
424 | 424 | ||
425 | #define strncpy strcpyn |
425 | #define strncpy strcpyn |
426 | #define strnmov strmovn |
426 | #define strnmov strmovn |
427 | #define stricmp strcmpi |
427 | #define stricmp strcmpi |
428 | #define strcmpn strncmp>=159)>='')DSBYTE[EDX]=AL|0x20;>='Z'){DSBYTE[EDX]=AL|0x20;>=239)>=175)>='z')DSBYTE[EDX]=AL&0x5f; |
428 | #define strcmpn strncmp>=159)>='')DSBYTE[EDX]=AL|0x20;>='Z'){DSBYTE[EDX]=AL|0x20;>=239)>=175)>='z')DSBYTE[EDX]=AL&0x5f; |
429 | >='Z'){ |
429 | >='Z'){ |
430 | >=239)>=175)>='z')DSBYTE[ESI]=AL&0x5f; |
430 | >=239)>=175)>='z')DSBYTE[ESI]=AL&0x5f; |
431 | >='9') |
431 | >='9') |
432 | > |
432 | > |
433 | >='Z')>='Z')>='Z')>='Z')>0)> |
433 | >='Z')>='Z')>='Z')>='Z')>0)> |