Subversion Repositories Kolibri OS

Rev

Rev 5576 | Rev 5591 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3067 leency 1
//------------------------------------------------------------------------------
5574 pavelyakov 2
// strspn(dword text1,text2) --- example: strspn("12 year","1234567890") -> return 2
3
// strpbrk(dword text1,text2) --- example: strpbrk("this test", " ckfi") -> return "is test"
3067 leency 4
// strcmp( ESI, EDI)
5
// strlen( EDI)
3107 leency 6
// strcpy( EDI, ESI) --- 0 if ==
5573 pavelyakov 7
// strncpy(dword text1,text2,signed length)
3067 leency 8
// strcat( EDI, ESI)
5573 pavelyakov 9
// strncat(dword text1,text2,signed length) --- pasting the text of a certain length
3363 leency 10
// strchr( ESI,BL) --- find first BL
11
// strrchr( ESI,BL) --- find last BL
3067 leency 12
// strstr( EBX, EDX)
5573 pavelyakov 13
// itoa(signed long number) --- convert the number as a string
14
// atoi(dword text) --- convert a string as a number
3067 leency 15
// strupr( ESI)
3107 leency 16
// strlwr( ESI) --- kyrillic symbols may not work
3067 leency 17
// strttl( EDX)
18
// strtok( ESI)
5573 pavelyakov 19
// strltrim(dword text) --- removes "blank" characters on the left (\r, \n and space)
20
// strrtrim(dword text) --- removes "blank" characters on the right (\r, \n and space)
21
// strtrim(dword text) --- delete "empty" characters (\ r \ n and space) on both sides
3444 leency 22
// chrnum(dword searchin, char symbol)
3107 leency 23
// strcpyb(dword searchin, copyin, startstr, endstr) --- copy string between strings
3128 leency 24
// strnumb(dword searchin, startstr, endstr) --- get number between strings
5573 pavelyakov 25
// strdup(dword text) --- allocation under the text
3067 leency 26
//------------------------------------------------------------------------------
27
 
5573 pavelyakov 28
/*
3067 leency 29
inline fastcall signed int strcmp( ESI, EDI)
30
{
5573 pavelyakov 31
    loop()
32
    {
33
        IF (DSBYTE[ESI]
34
        IF (DSBYTE[ESI]>DSBYTE[EDI]) RETURN 1;
35
        IF (DSBYTE[ESI]=='\0') RETURN 0;
36
        ESI++;
37
        EDI++;
38
    }
3067 leency 39
}
5573 pavelyakov 40
*/
3067 leency 41
 
5575 pavelyakov 42
inline int strspn(dword text1,text2)
5574 pavelyakov 43
{
44
	dword beg;
45
	char s1,s2;
46
	int ret;
47
	ret = 0;
48
	beg = text2;
49
	do {
50
		s1 = ESBYTE[text1];
51
		text2 = beg;
52
		do {
53
			s2 = ESBYTE[text2];
54
			if(s1==s2)
55
			{
56
				if(!s2)break;
57
				$inc ret
58
				break;
59
			}
60
			else $inc text2
61
		} while(s2);
62
		$inc text1
63
	} while(s1);
64
	return ret;
65
}
3067 leency 66
 
5575 pavelyakov 67
inline dword strpbrk(dword text1,text2)
5574 pavelyakov 68
{
69
	char s,ss;
70
	dword beg;
71
	beg = text2;
72
	do {
73
		s = ESBYTE[text1];
74
		text2 = beg;
75
		do {
76
			ss = ESBYTE[text2];
77
			if(ss==s) return text1;
78
			$inc text2
79
		} while(ss);
80
		$inc text1
81
	} while(s);
82
	return text1;
83
}
84
 
3067 leency 85
inline fastcall signed int strncmp( ESI, EDI, ECX)
86
{
87
  asm {
88
    MOV EBX, EDI
89
    XOR EAX, EAX
90
    MOV EDX, ECX
91
    OR ECX, ECX
92
    JE L1
93
    REPNE SCASB
94
    SUB EDX, ECX
95
    MOV ECX, EDX
96
    MOV EDI, EBX
97
    XOR EBX, EBX
98
    REPE CMPSB
99
    MOV AL, DSBYTE[ ESI-1]
100
    MOV BL, DSBYTE[ EDI-1]
101
    SUB EAX, EBX
102
L1:
103
  }
104
}
105
 
106
 
107
inline fastcall unsigned int strlen( EDI)
108
{
5573 pavelyakov 109
    $xor eax, eax
110
    $mov ecx, -1
111
    $REPNE $SCASB
112
    EAX-=2+ECX;
3067 leency 113
}
114
 
5575 pavelyakov 115
inline strnlen(dword str, dword maxlen)
116
{
117
	dword cp;
118
	for (cp = str; (maxlen != 0) && (DSBYTE[cp] != '\0'); cp++, maxlen--);
119
	return cp - str;
120
}
3067 leency 121
 
5575 pavelyakov 122
 
123
inline signed int strcmp(dword text1, text2)
5573 pavelyakov 124
{
125
	char s1,s2;
126
	dword p1,p2;
127
	p1 = text1;
128
	p2 = text2;
129
	loop()
130
	{
131
		s1 = DSBYTE[text1];
132
		s2 = DSBYTE[text2];
133
		if(s1==s2)
134
		{
135
			if(s1==0) return 0;
136
		}
137
		else {
5574 pavelyakov 138
			return s1-s2;
5573 pavelyakov 139
		}
140
		$inc text1
141
		$inc text2
142
	}
143
	return 0;
144
}
145
 
5575 pavelyakov 146
/*
147
signed int strncmp(dword s1, s2, signed n)
148
unsigned char _s1,_s2;
149
{
150
	if (n == 0)
151
		return 0;
152
	do {
153
		_s1 = DSBYTE[s1];
154
		_s2 = DSBYTE[s2];
155
		if (_s1 != _s2)
156
		{
157
			$dec s2
158
			return _s1 - _s2;
159
		}
160
		$inc s2
161
		if (_s1 == 0)
162
			break;
163
		$inc s1
164
		$dec n
165
	} while (n);
166
	return 0;
167
}
168
*/
5573 pavelyakov 169
 
5575 pavelyakov 170
 
3363 leency 171
inline fastcall void strcpy( EDI, ESI)
3067 leency 172
{
5573 pavelyakov 173
    $cld
3107 leency 174
L2:
5573 pavelyakov 175
    $lodsb
176
    $stosb
177
    $test al,al
178
    $jnz L2
3067 leency 179
}
180
 
5582 pavelyakov 181
inline dword strncpy(dword text1, text2, signed len)
5573 pavelyakov 182
	signed o1,o2;
183
{
5576 pavelyakov 184
	if(!text1)||(!len) return text1;
185
	if(len<4)
186
	{
187
		o2 = len;
188
		goto RUN_BYTE;
189
	}
5573 pavelyakov 190
	o1 = len/4;
191
	o2 = len-4*o1;
192
	while(o1){
5576 pavelyakov 193
		DSDWORD[text1] = DSDWORD[text2];
5573 pavelyakov 194
		text1 += 4;
195
		text2 += 4;
196
		$dec o1
197
	}
5576 pavelyakov 198
	RUN_BYTE:
5573 pavelyakov 199
	while(o2){
5576 pavelyakov 200
		DSBYTE[text1] = DSBYTE[text2];
5573 pavelyakov 201
		$inc text1
202
		$inc text2
203
		$dec o2
204
	}
5576 pavelyakov 205
	DSBYTE[text1] = 0;
5575 pavelyakov 206
	return text1;
5573 pavelyakov 207
}
3067 leency 208
 
3128 leency 209
inline fastcall int strlcpy(dword ESI, EDI, EBX)
210
{
5573 pavelyakov 211
    if (EBX<0) return -1;
212
    EDX=0;
213
    do {
214
        DSBYTE[ESI]=DSBYTE[EDI];
215
        ESI++;
216
        EDI++;
217
        EDX++;
218
        if (EDX==EBX) { DSBYTE[ESI]='\0'; return -1;}
219
    } while(DSBYTE[EDI-1]!='\0');
220
    return 0;
3128 leency 221
}
222
 
5573 pavelyakov 223
/*
224
inline fastcall void strtrim( ESI)
3448 esevece 225
{
5573 pavelyakov 226
    EDI = ESI;
227
    do{
22