Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 3127 → Rev 3128

/programs/cmm/lib/strings.h
13,7 → 13,7
// strttl( EDX)
// strtok( ESI)
// strcpyb(dword searchin, copyin, startstr, endstr) --- copy string between strings
//chrnum(dword searchin, char symbol) --- count of symbol in string
// strnumb(dword searchin, startstr, endstr) --- get number between strings
//------------------------------------------------------------------------------
 
inline fastcall signed int strcmp( ESI, EDI)
71,6 → 71,21
}
 
 
inline fastcall int strlcpy(dword ESI, EDI, EBX)
{
EDX=0;
do {
DSBYTE[ESI]=DSBYTE[EDI];
ESI++;
EDI++;
EDX++;
if (EDX==EBX) { DSBYTE[ESI]='\0'; return -1;}
} while(DSBYTE[EDI-1]!='\0');
return 0;
}
 
 
 
inline fastcall strcat( EDI, ESI)
{
asm {
99,6 → 114,119
}
}
 
 
inline fastcall signed int strchr( ESI,BL)
{
int jj=0;
do{
jj++;
$lodsb
IF(AL==BL) return jj;
} while(AL!=0);
return 0;
}
 
 
inline fastcall signed int strrchr( ESI,BL)
{
int jj=0, last=0;
do{
jj++;
$lodsb
IF(AL==BL) last=jj;
} while(AL!=0);
return last;
}
 
 
int chrnum(dword searchin, char symbol)
{
int num = 0;
while(DSBYTE[searchin])
{
if (DSBYTE[searchin] == symbol) num++;
searchin++;
}
return num;
}
 
 
inline fastcall dword strstr( EBX, EDX)
{
asm {
MOV EDI, EDX
XOR ECX, ECX
XOR EAX, EAX
DEC ECX
REPNE SCASB
NOT ECX
DEC ECX
JE LS2
MOV ESI, ECX
XOR ECX, ECX
MOV EDI, EBX
DEC ECX
REPNE SCASB
NOT ECX
SUB ECX, ESI
JBE LS2
MOV EDI, EBX
LEA EBX, DSDWORD[ ESI-1]
LS1: MOV ESI, EDX
LODSB
REPNE SCASB
JNE LS2
MOV EAX, ECX
PUSH EDI
MOV ECX, EBX
REPE CMPSB
POP EDI
MOV ECX, EAX
JNE LS1
LEA EAX, DSDWORD[ EDI-1]
JMP SHORT LS3
LS2: XOR EAX, EAX
LS3:
}
}
 
 
dword strstri(dword searchin, usestr_s)
{
dword usestr_e = usestr_s;
char si, ue;
 
while(DSBYTE[searchin])
{
si = DSBYTE[searchin];
ue = DSBYTE[usestr_e];
if (si>='A') && (si<='Z') si +=32;
if (ue>='A') && (ue<='Z') ue +=32;
if (si == ue) usestr_e++; else usestr_e = usestr_s;
searchin++;
if (DSBYTE[usestr_e]=='\0') return searchin;
}
return 0;
}
 
 
void strcpyb(dword searchin, copyin, startstr, endstr)
{
dword startp, endp;
startp = strstr(searchin, startstr) + strlen(startstr);
endp = strstr(startp, endstr);
if (startp==endp) return;
do
{
DSBYTE[copyin] = DSBYTE[startp];
copyin++;
startp++;
}
while (startp<endp);
DSBYTE[copyin] = '\0';
}
 
 
/*void strcat(char *to, char *from) //òîæå ðàáîòàåò
{
while(*to) to++;
147,46 → 275,29
}
 
 
 
inline fastcall dword atoi( EDI)
{
$push ebx
$push esi
ESI=EDI;
IF(DSBYTE[ESI]=='-')ESI++;
while (DSBYTE[ESI]==' ') ESI++;
if (DSBYTE[ESI]=='-') ESI++;
EAX=0;
BH=AL;
do{
BL=DSBYTE[ESI]-'0';
EAX=EAX*10+EBX;
while (DSBYTE[ESI]>='0') && (DSBYTE[ESI]<='9')
{
$xor ebx, ebx
EBX = DSBYTE[ESI]-'0';
EAX *= 10;
EAX += EBX;
ESI++;
}while(DSBYTE[ESI]>='0');
}
IF(DSBYTE[EDI]=='-') -EAX;
$pop esi
$pop ebx
}
 
 
inline fastcall signed int strchr( ESI,BL)
{
int jj=0;
do{
jj++;
$lodsb
IF(AL==BL) return jj;
} while(AL!=0);
return 0;
}
 
 
inline fastcall signed int strrchr( ESI,BL)
{
int jj=0, last=0;
do{
jj++;
$lodsb
IF(AL==BL) last=jj;
} while(AL!=0);
return last;
}
 
 
inline fastcall strupr( ESI)
{
do{
225,78 → 336,13
}while(AL!=0);
}
 
 
 
inline fastcall dword strstr( EBX, EDX)
void debugi(dword d_int)
{
asm {
MOV EDI, EDX
XOR ECX, ECX
XOR EAX, EAX
DEC ECX
REPNE SCASB
NOT ECX
DEC ECX
JE LS2
MOV ESI, ECX
XOR ECX, ECX
MOV EDI, EBX
DEC ECX
REPNE SCASB
NOT ECX
SUB ECX, ESI
JBE LS2
MOV EDI, EBX
LEA EBX, DSDWORD[ ESI-1]
LS1: MOV ESI, EDX
LODSB
REPNE SCASB
JNE LS2
MOV EAX, ECX
PUSH EDI
MOV ECX, EBX
REPE CMPSB
POP EDI
MOV ECX, EAX
JNE LS1
LEA EAX, DSDWORD[ EDI-1]
JMP SHORT LS3
LS2: XOR EAX, EAX
LS3:
char tmpch[11];
strcpy(#tmpch, itoa(d_int));
debug(#tmpch);
}
}
 
//
void strcpyb(dword searchin, copyin, startstr, endstr)
{
dword startp, endp;
startp = strstr(searchin, startstr) + strlen(startstr);
endp = strstr(startp, endstr);
if (startp==endp) return;
do
{
DSBYTE[copyin] = DSBYTE[startp];
copyin++;
startp++;
}
while (startp<endp);
DSBYTE[copyin] = '\0';
}
 
int chrnum(dword searchin, char symbol)
{
int num = 0;
while(DSBYTE[searchin])
{
if (DSBYTE[searchin] == symbol) num++;
searchin++;
}
return num;
}
 
 
 
 
/* strtok( LPSTR dest, src, divs);
src - óêàçàòåëü íà èñõîäíóþ ñòðîêó èëè ðåçóëüòàò ïðåäûäóùåãî âûçîâà
dest - óêàçàòåëü íà áóôåð, êóäà áóäåò ñêîïèðîâàíî ñëîâî