Subversion Repositories Kolibri OS

Rev

Rev 3043 | 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
52
     $ret
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
  }
82
 
83
  return color;
84
}
85
 
3045 leency 86
inline fastcall signed char strcmp(ESI, EDI)
3043 leency 87
{
88
	loop()
89
	{
90
		IF (DSBYTE[ESI]
91
		IF (DSBYTE[ESI]>DSBYTE[EDI]) RETURN 1;
92
		IF (DSBYTE[ESI]=='\0') RETURN 0;
93
		ESI++;
94
		EDI++;
95
	}
96
}
97
 
98
 
99
 
100
inline fastcall unsigned int strchr(ESI,BL)
101
{
102
	int jj=0, last=-1;
103
	do{
104
		jj++;
105
		$lodsb
106
		IF(AL==BL) last=jj;
107
	} while(AL!=0);
108
	return last;
109
}
110
 
111
 
112
inline fastcall TitleCase( EDX)
113
{
114
	AL=DSBYTE[EDX];
115
	IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f;
116
	IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32;	//à-ï
117
	IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80;	//à-ï
118
	do{
119
		EDX++;
120
		AL=DSBYTE[EDX];
121
		IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;}
122
		IF(AL>='€')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯
123
		IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80;	//à-ï
124
	}while(AL!=0);
125
}
126
 
127
 
128
 
129
inline fastcall strcpy( EDI, ESI)
130
{
131
	$cld
132
l2:
133
	$lodsb
134
	$stosb
135
	$test al,al
136
	$jnz l2
137
}
138
 
139
 
140
inline fastcall strcat( EDI, ESI)
141
{
142
  asm {
143
    mov ebx, edi
144
    xor ecx, ecx
145
    xor eax, eax
146
    dec ecx
147
    repne scasb
148
    dec edi
149
    mov edx, edi
150
    mov edi, esi
151
    xor ecx, ecx
152
    xor eax, eax
153
    dec ecx
154
    repne scasb
155
    xor ecx, 0ffffffffh
156
    mov edi, edx
157
    mov edx, ecx
158
    mov eax, edi
159
    shr ecx, 2
160
    rep movsd
161
    mov ecx, edx
162
    and ecx, 3
163
    rep movsb
164
    mov eax, ebx
165
	}
166
}