Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
3043 leency 1
//CODED by Veliant, Leency 2008-2012. GNU GPL licence.
2
 
3
 
4
inline fastcall dword strlen( EDI)
5
{
6
	asm {
7
	  xor ecx, ecx
8
	  xor eax, eax
9
	  dec ecx
10
	  repne scasb
11
	  sub eax, 2
12
	  sub eax, ecx
13
	}
14
}
15
 
16
 
17
inline fastcall copystr( ESI,EDI)
18
{
19
	$cld
20
l1:
21
	$lodsb
22
	$stosb
23
	$test al,al
24
	$jnz l1
25
}
26
 
27
char buffer[11];
28
inline fastcall dword IntToStr( ESI)
29
{
30
     $mov     edi, #buffer
31
     $mov     ecx, 10
32
     $test     esi, esi
33
     $jns     f1
34
     $mov     al, '-'
35
     $stosb
36
     $neg     esi
37
f1:
38
     $mov     eax, esi
39
     $push     -'0'
40
f2:
41
     $xor     edx, edx
42
     $div     ecx
43
     $push     edx
44
     $test     eax, eax
45
     $jnz     f2
46
f3:
47
     $pop     eax
48
     $add     al, '0'
49
     $stosb
50
     $jnz     f3
51
     $mov     eax, #buffer
3050 leency 52
     //$ret
3043 leency 53
}
54
 
55
inline fastcall dword StrToInt()
56
{
57
	ESI=EDI=EAX;
58
	IF(DSBYTE[ESI]=='-')ESI++;
59
	EAX=0;
60
	BH=AL;
61
	do{
62
		BL=DSBYTE[ESI]-'0';
63
		EAX=EAX*10+EBX;
64
		ESI++;
65
	}while(DSBYTE[ESI]>0);
66
	IF(DSBYTE[EDI]=='-') -EAX;
67
}
68
 
69
dword StrToCol(char* htmlcolor)
70
{
71
  dword j, color=0;
72
  char ch=0x00;
73
 
74
  FOR (j=0; j<6; j++)
75
  {
76
    ch=ESBYTE[htmlcolor+j];
77
    IF ((ch>='0') && (ch<='9')) ch -= '0';
78
    IF ((ch>='A') && (ch<='F')) ch -= 'A'-10;
79
    IF ((ch>='a') && (ch<='f')) ch -= 'a'-10;
80
    color = color*0x10 + ch;
81
  }
3050 leency 82
   return color;
3043 leency 83
}
84
 
3045 leency 85
inline fastcall signed char strcmp(ESI, EDI)
3043 leency 86
{
87
	loop()
88
	{
89
		IF (DSBYTE[ESI]
90
		IF (DSBYTE[ESI]>DSBYTE[EDI]) RETURN 1;
91
		IF (DSBYTE[ESI]=='\0') RETURN 0;
92
		ESI++;
93
		EDI++;
94
	}
95
}
96
 
97
 
98
 
3050 leency 99
inline fastcall signed int strchr(ESI,BL)
3043 leency 100
{
101
	int jj=0, last=-1;
102
	do{
103
		jj++;
104
		$lodsb
105
		IF(AL==BL) last=jj;
106
	} while(AL!=0);
107
	return last;
108
}
109
 
110
 
111
inline fastcall TitleCase( EDX)
112
{
113
	AL=DSBYTE[EDX];
114
	IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f;
115
	IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32;	//à-ï
116
	IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80;	//à-ï
117
	do{
118
		EDX++;
119
		AL=DSBYTE[EDX];
120
		IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;}
121
		IF(AL>='€')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯
122
		IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80;	//à-ï
123
	}while(AL!=0);
124
}
125
 
126
 
127
 
128
inline fastcall strcpy( EDI, ESI)
129
{
130
	$cld
131
l2:
132
	$lodsb
133
	$stosb
134
	$test al,al
135
	$jnz l2
136
}
137
 
138
 
139
inline fastcall strcat( EDI, ESI)
140
{
141
  asm {
142
    mov ebx, edi
143
    xor ecx, ecx
144
    xor eax, eax
145
    dec ecx
146
    repne scasb
147
    dec edi
148
    mov edx, edi
149
    mov edi, esi
150
    xor ecx, ecx
151
    xor eax, eax
152
    dec ecx
153
    repne scasb
154
    xor ecx, 0ffffffffh
155
    mov edi, edx
156
    mov edx, ecx
157
    mov eax, edi
158
    shr ecx, 2
159
    rep movsd
160
    mov ecx, edx
161
    and ecx, 3
162
    rep movsb
163
    mov eax, ebx
164
	}
165
}