Subversion Repositories Kolibri OS

Rev

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