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 - óêàçàòåëü íà áóôåð, êóäà áóäåò ñêîïèðîâàíî ñëîâî |