Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 3042 → Rev 3043

/programs/fs/Eolite/trunk/Eolite.c--
20,7 → 20,7
#define ONLY_OPEN 2
 
//ïåðåìåííûå
#define title "Eolite File Manager v1.35"
#define title "Eolite File Manager v1.36"
dword selection_col = 0x94AECE;
dword lpanel_col = 0x00699C;
 
224,8 → 224,9
IF (show_actions==1) show_actions=0; ELSE show_actions=1;
Actions();
break;
case 78:
IF (show_dev_name==1) show_dev_name=0; ELSE show_dev_name=1;
case 78: //rescan devices
Tip(56, "Devices", 78, "-");
Pause(10);
GetSystemDiscs();
Open_Dir(#path,WITH_REDRAW);
DrawSystemDiscs();
522,40 → 523,7
TVScroll();
}
 
/*#include "def_file.txt"
#define CELL_SIZE 58
void List_ReDraw()
{
int i,
po_gor, po_ver,
on_xx, name_len;
po_gor=onLeft(22,197)/CELL_SIZE;
po_ver=onTop(57,6)/CELL_SIZE;
for (j=0; j<po_ver; j++;) for (i=0; i<po_gor; i++;)
{
if (j*po_gor+i+za_kadrom>=count)
{
DrawBar(i*CELL_SIZE+192,j*CELL_SIZE+57,CELL_SIZE,CELL_SIZE,0xFFFFFF);
continue;
}
DefineButton(i*CELL_SIZE+192,j*CELL_SIZE+57,CELL_SIZE,CELL_SIZE,j*po_gor+i+201+BT_HIDE,0xFFFFFF);
DrawBar(i*CELL_SIZE+192,j*CELL_SIZE+57,CELL_SIZE,CELL_SIZE,0xFFFFFF);
 
off=file_mas[j*po_gor+i+za_kadrom]*304 + buf+72;
name_len=strlen(off);
if (name_len>9) name_len=9;
on_xx=-name_len*3+29;
WriteText(i*CELL_SIZE+193+on_xx,j*CELL_SIZE+57+CELL_SIZE-16,0,0,off,name_len);
if (!TestBit(ESDWORD[off-40], 4))
PutImage(#file32,32,32,i*CELL_SIZE+197+9,j*CELL_SIZE+57+5);
else
PutImage(#folder32,32,32,i*CELL_SIZE+197+9,j*CELL_SIZE+57+5);
 
}
TVScroll();
}*/
 
 
void Line_ReDraw(dword color, filenum){
dword text_col=0, name_len,
y=filenum*BUTTON_HEIGHT+57; //ïîëîæåíèå òåêñòà ïî Y
/programs/fs/Eolite/trunk/History.txt
1,3 → 1,10
15.11.12 -- v1.36
- óñòðàíåíà óòå÷êà ïàìÿòè ïðè ñêàíèðîâàíèè óñòðîéñòâ;
- ÷àñòè÷íî óñòðàí¸í âûëåò ïðîãðàììû íà áîëüøèõ ïàïêàõ (ñïàñèáî SoUrcerer çà
òî, ÷òî íàó÷èë ïîëüçîâàòüñÿ îòëàä÷èêîì);
- îãðàíè÷åíèå íà êîëè÷åñâî óñòðîéñòâ èçìåíåíî ñ 10 íà 20;
- îáíîâëåíèå êîäà.
 
12.11.12 -- v1.35
- òåïåðü îêíî íå îáðàáàòûâàåò êëàâèøè åñëè ñâ¸ðíóòî â çàãîëîâîê;
- ôèêñ äëÿ ñòðîêè àäðåñà;
/programs/fs/Eolite/trunk/compile.bat
1,5 → 1,5
del Eolite
@..\C--\c-- Eolite.c--
@..\C--\c-- Eolite.c-- /lst
rename Eolite.com Eolite
rem ..\C--\kpack Eolite
del warning.txt
/programs/fs/Eolite/trunk/include/about_dialog.h
39,7 → 39,7
DefineAndDrawWindow(600,150,181,256,0x34,0x10EFEBEF,"About Eolite");
DrawBar(0,0,172,50,0x8494C4); //ãîëóáîå ñçàäè
PutPaletteImage(#logo,85,85,43,7,#logo_pal);
WriteText(46,100,0x90,0xBF40BF,"Eolite v1.34",0);
WriteText(46,100,0x90,0xBF40BF,"Eolite v1.36",0);
$add ebx, 1<<16
$int 0x40
WriteText(55,120,0x80,0,"Developers:",0);
/programs/fs/Eolite/trunk/include/devices.h
2,17 → 2,17
 
path_string disk_list[20];
int disc_num;
dword devbuf;
 
void GetSystemDiscs()
{
char dev_name[10], sys_discs[10];
int i1, j1, dev_num, dev_disc_num;
dword devbuf;
unsigned char dev_name[10], sys_discs[10];
unsigned int i1, j1, dev_num, dev_disc_num;
 
disc_num=0;
if (devbuf) free(devbuf);
devbuf= malloc(3112); //áóôåð ãäå-òî íà 10 äåâàéñîâ â ëåâîé ïàíåëè
ReadDir(10, devbuf, "/");
ReadDir(19, devbuf, "/");
dev_num = EBX;
for (i1=0; i1<dev_num; i1++)
{
46,23 → 46,47
DrawBar(2,56,15,onTop(21,41),lpanel_col); //ñèíèé ïðÿìîóãîëüíèê - ñëåâà
DrawBar(177,56,15,onTop(21,41),lpanel_col); //ñèíèé ïðÿìîóãîëüíèê - ñïðàâà
//ñïèñîê äèñêîâ
if (show_dev_name) Tip(56, "Devices", 78, "=");
else Tip(56, "Devices", 78, "-");
Tip(56, "Devices", 78, "=");
for (i=0;i<disc_num;i++)
{
DrawBar(17,i*16+74,160,17,0xFFFFFF); //áåëîå
DrawBar(17,i*16+74,160,17,0xFFFFFF); //ôîí
DefineButton(17,i*16+74,159,16,100+i+BT_HIDE,0xFFFFFF); //ñîçäà¸ì êíîïêè, à ïîòîì âûâîäèì íàçâàíèÿ äèñêîâ
copystr("Unknown ",#disc_name); //èçíà÷àëüíî íåèçâåñíûé íîñèòåëü
dev_icon=3; //ïî-óìîë÷àíèþ óñòðîéñòâî âûãëÿäèò êàê æåñòÿê
copystr(#disk_list[i].Item, #dev_name);
dev_name[strlen(#dev_name)-1]='';
IF (dev_name[1]=='r') { dev_icon=0; copystr("RAM disk ",#disc_name); }
IF (dev_name[1]=='c') { dev_icon=1; copystr("CD-ROM ",#disc_name); }
IF (dev_name[1]=='f') { dev_icon=2; copystr("Floppy disk ",#disc_name); }
IF (dev_name[1]=='t') { dev_icon=4; copystr("Virtual disk ",#disc_name); }
IF (dev_name[1]=='h') || (dev_name[1]=='b') copystr("Hard disk ",#disc_name);
copystr(#dev_name,#disc_name+strlen(#disc_name));
//
strcpy(#dev_name, #disk_list[i].Item);
dev_name[strlen(#dev_name)-1]=NULL;
switch(dev_name[1])
{
case 'r':
dev_icon=0;
strcpy(#disc_name, "RAM disk ");
break;
case 'c':
dev_icon=1;
strcpy(#disc_name, "CD-ROM ");
break;
case 'f':
dev_icon=2;
strcpy(#disc_name, "Floppy disk ");
break;
case 'h':
case 'b':
dev_icon=3;
strcpy(#disc_name, "Hard disk ");
break;
case 't':
dev_icon=4;
strcpy(#disc_name, "RAM disk ");
//temp[0]=dev_name[4]; //àõóåòü ñèñòåìà
//temp[1]=NULL;
//DefineButton(17+143,i*16+74,16,16,StrToInt(#temp)+130+BT_HIDE+BT_NOFRAME,0xFFFFFF);
//WriteText(45+121,i*16+79,0x80,0xAC0000,"-",0);
//WriteText(45+121,i*16+79+1,0x80,0xAC0000,"-",0);
break;
default:
dev_icon=3; //ïî-óìîë÷àíèþ óñòðîéñòâî âûãëÿäèò êàê æåñòÿê íî ýòî íåïðàâèëüíî
strcpy(#disc_name, "Unknown ");
}
strcat(#disc_name, #dev_name);
if (show_dev_name) WriteText(45,i*16+79,0x80,0,#disc_name,0);
else WriteText(45,i*16+79,0x80,0,#dev_name,0);
PutImage(dev_icon*14*13*3+#devices,14,13,21,i*16+76);
/programs/fs/Eolite/trunk/include/icons_f.h
61,6 → 61,9
"jpeg",19,
"raw", 19,
"psd", 19,
"wbmp",19,
"tiff",19,
"tif", 19,
"ico", 20,
"cur", 20,
"ani", 20,
/programs/fs/Eolite/trunk/include/ini.h
6,7 → 6,7
#define PARAM 2
#define OPTION 3
 
char NOTIFY_PATH[7]="@notify";
#define NOTIFY_PATH "@notify";
 
unsigned char *ERROR_TEXT[]={
"Code #0 - No error",
43,7 → 43,7
ReadFile(0, 12000, buff, "/sys/File managers/Eolite.ini");
IF (EAX<>6) //åñëè ôàéëà ñ íàñòðîéêàìè òóïî íåò ïå÷àëüêà
{
IF (onload==1) RunProgram(#NOTIFY_PATH, "Eolite.ini not found. Defaults will be used.");
IF (onload==1) RunProgram(NOTIFY_PATH, "Eolite.ini not found. Defaults will be used.");
IF (onload==0) goto RUN_AS_PROGRAM;
}
fsize=EBX;
120,7 → 120,7
}
if (curbtn>=0) Line_ReDraw(0xFF0000, curbtn);
Pause(5);
RunProgram(#NOTIFY_PATH, #error);
RunProgram(NOTIFY_PATH, #error);
//DrawBar(192,onTop(0, BUTTON_HEIGHT+7),onLeft(27,192),BUTTON_HEIGHT,0xFF0000);
//WriteText(205,onTop(-5, BUTTON_HEIGHT+7),0x80,0xFFFFFF,#error,0);
}
/programs/fs/Eolite/trunk/include/some_code.h
14,24 → 14,24
 
dword ConvertSize(dword bytes)
{
byte size_prefix[8], temp[3];
IF (bytes>=1073741824) copystr(" Gb",#temp);
ELSE IF (bytes>=1048576) copystr(" Mb",#temp);
ELSE IF (bytes>=1024) copystr(" Kb",#temp);
ELSE copystr(" b ",#temp);
WHILE (bytes>1023) bytes/=1024;
unsigned char size_prefix[8], size_nm[4];
if (bytes>=1073741824) copystr(" Gb",#size_nm);
else if (bytes>=1048576) copystr(" Mb",#size_nm);
else if (bytes>=1024) copystr(" Kb",#size_nm);
else copystr(" b ",#size_nm);
while (bytes>1023) bytes/=1024;
copystr(IntToStr(bytes),#size_prefix);
copystr(#temp,#size_prefix+strlen(#size_prefix));
EAX=#size_prefix;
copystr(#size_nm,#size_prefix+strlen(#size_prefix));
return #size_prefix;
}
 
inline fastcall void TVScroll() { //Ïðîêðóòêà
dword on_y;
IF (count<=0) {DrawFlatButton(onLeft(27,0),57,16,onTop(22,58),0,0xE4DFE1,""); return;}
if (count<=0) {DrawFlatButton(onLeft(27,0),57,16,onTop(22,58),0,0xE4DFE1,""); return;}
on_y = za_kadrom * onTop(22,57) / count +57;
scroll_size=onTop(22,57) * but_num - but_num / count;
IF (scroll_size<20) scroll_size = 20; //óñòàíàâëèâàåì ìèíèìàëüíûé ðàçìåð ñêðîëëà
IF (scroll_size>onTop(22,57)-on_y+56) || (za_kadrom+but_num>=count) on_y=onTop(23+scroll_size,0); //äëÿ áîëüøîãî ñïèñêà
if (scroll_size<20) scroll_size = 20; //óñòàíàâëèâàåì ìèíèìàëüíûé ðàçìåð ñêðîëëà
if (scroll_size>onTop(22,57)-on_y+56) || (za_kadrom+but_num>=count) on_y=onTop(23+scroll_size,0); //äëÿ áîëüøîãî ñïèñêà
DrawFlatButton(onLeft(27,0),on_y,16,scroll_size,0,0xE4DFE1,"");//ïîëçóíîê
DrawBar(onLeft(26,0),57,15,on_y-57,0xCED0D0);//ïîëå äî ïîëçóíêà
DrawBar(onLeft(26,0),on_y+scroll_size+1,15,onTop(22,57)-scroll_size-on_y+56,0xCED0D0); //ïîëå ïîñëå ïîëçóíêà
/programs/fs/Eolite/trunk/include/sorting.h
2,53 → 2,52
 
void Sort_by_Size(int a, b) // äëÿ ïåðâîãî âûçîâà: a = 0, b = <ýëåìåíòîâ â ìàññèâå> - 1
{
int i = a;
int iss = a;
IF (a >= b) return;
FOR (j = a; j <= b; j++)
IF (ESDWORD[file_mas[j]*304 + buf+64] <= ESDWORD[file_mas[b]*304 + buf+64])
{ file_mas[i] >< file_mas[j]; i++;}
Sort_by_Size (a, i-2);
Sort_by_Size (i, b);
IF (ESDWORD[file_mas[j]*304 + buf+64] <= ESDWORD[file_mas[b]*304 + buf+64]) { file_mas[iss] >< file_mas[j]; iss++;}
Sort_by_Size (a, iss-2);
Sort_by_Size (iss, b);
}
 
 
void Sort_by_Name(int a, b) // äëÿ ïåðâîãî âûçîâà: a = 0, b = <ýëåìåíòîâ â ìàññèâå> - 1
{
int i = a;
int isn = a;
IF (a >= b) return;
FOR (j = a; j <= b; j++)
IF (strcmp(file_mas[j]*304 + buf+72, file_mas[b]*304 + buf+72)<=0) { file_mas[i] >< file_mas[j]; i++;}
Sort_by_Name(a, i-2);
Sort_by_Name(i, b);
IF (strcmp(file_mas[j]*304 + buf+72, file_mas[b]*304 + buf+72)<=0) { file_mas[isn] >< file_mas[j]; isn++;}
Sort_by_Name(a, isn-2);
Sort_by_Name(isn, b);
}
 
void Sort_by_Type(int a, b) // äëÿ ïåðâîãî âûçîâà: a = 0, b = <ýëåìåíòîâ â ìàññèâå> - 1
{
int i=a;
int jst, ist=a;
int n;
dword offset=buf+72;
byte filename1[256], filename2[256];
unsigned char filename1[256], filename2[256];
unsigned char ext1[256], ext2[256];
IF (a >= b) return;
for (j = a; j <= b; j++)
for (jst = a; jst <= b; jst++)
{
//
copystr(file_mas[j]*304 + offset, #filename1);
copystr(file_mas[b]*304 + offset, #filename2);
ext1[0]=ext2[0]=filename1[0]=filename2[0]=NULL;
copystr(file_mas[jst]*304 + buf+72, #filename1);
copystr(file_mas[b]*304 + buf+72, #filename2);
n=strlen(#filename1)-1;
WHILE (filename1[n]<>'.') && (n>0) n--;
IF (n) copystr(#filename1+n+1, #filename1);
IF (n) copystr(#filename1+n+1, #ext1);
n=strlen(#filename2)-1;
WHILE (filename2[n]<>'.') && (n>0) n--;
IF (n) copystr(#filename2+n+1, #filename2);
//
n=strcmp(#filename1, #filename2);
IF (n<0) { file_mas[i] >< file_mas[j]; i++;}
IF (n==0) && (strcmp(file_mas[j]*304 + offset, file_mas[b]*304 + offset)<=0) { file_mas[i] >< file_mas[j]; i++;}
IF (n) copystr(#filename2+n+1, #ext2);
 
n=strcmp(#ext1, #ext2);
IF (n<0) { file_mas[ist] >< file_mas[jst]; ist++;}
IF (n==0) && (strcmp(#filename1, #filename2)<=0) { file_mas[ist] >< file_mas[jst]; ist++;}
}
Sort_by_Type(a, i-2);
Sort_by_Type(i, b);
Sort_by_Type(a, ist-2);
Sort_by_Type(ist, b);
}
 
 
/programs/fs/Eolite/trunk/lib/file_system.h
28,8 → 28,8
////////////////////////////
// Ñîçäàòü ôàéë //
////////////////////////////
/*f70 create_file_70;
void CreateFile(dword file_size, read_buffer, file_path)
f70 create_file_70;
int CreateFile(dword file_size, read_buffer, file_path)
{
create_file_70.func = 2;
create_file_70.param1 = 0;
41,13 → 41,13
$mov eax,70
$mov ebx,#create_file_70.func
$int 0x40
} */
}
 
////////////////////////////
// Ïðî÷èòàòü ôàéë //
////////////////////////////
f70 read_file_70;
void ReadFile(dword pos, file_size, read_buffer, file_path)
int ReadFile(dword pos, file_size, read_buffer, file_path)
{
read_file_70.func = 0;
read_file_70.param1 = pos;
/programs/fs/Eolite/trunk/lib/kolibri.h
15,6 → 15,7
char param[4096];
char program_path[4096];
 
#include "lib\strings.h"
 
//Events
#define evMouse 6
212,153 → 213,6
}
 
//------------------------------------------------------------------------------
 
inline fastcall dword strlen( EDI)
{
asm {
xor ecx, ecx
xor eax, eax
dec ecx
repne scasb
sub eax, 2
sub eax, ecx
}
}
 
 
inline fastcall copystr( ESI,EDI)
{
$cld
l1:
$lodsb
$stosb
$test al,al
$jnz l1
}
 
char buffer[11];
inline fastcall dword IntToStr( ESI)
{
$mov edi, #buffer
$mov ecx, 10
$test esi, esi
$jns f1
$mov al, '-'
$stosb
$neg esi
f1:
$mov eax, esi
$push -'0'
f2:
$xor edx, edx
$div ecx
$push edx
$test eax, eax
$jnz f2
f3:
$pop eax
$add al, '0'
$stosb
$jnz f3
$mov eax, #buffer
$ret
}
 
inline fastcall dword StrToInt()
{
ESI=EDI=EAX;
IF(DSBYTE[ESI]=='-')ESI++;
EAX=0;
BH=AL;
do{
BL=DSBYTE[ESI]-'0';
EAX=EAX*10+EBX;
ESI++;
}while(DSBYTE[ESI]>0);
IF(DSBYTE[EDI]=='-') -EAX;
}
 
dword StrToCol(char* htmlcolor)
{
dword j, color=0;
char ch=0x00;
FOR (j=0; j<6; j++)
{
ch=ESBYTE[htmlcolor+j];
IF ((ch>='0') && (ch<='9')) ch -= '0';
IF ((ch>='A') && (ch<='F')) ch -= 'A'-10;
IF ((ch>='a') && (ch<='f')) ch -= 'a'-10;
color = color*0x10 + ch;
}
return color;
}
 
inline fastcall int strcmp(ESI, EDI)
{
loop()
{
IF (DSBYTE[ESI]<DSBYTE[EDI]) RETURN -1;
IF (DSBYTE[ESI]>DSBYTE[EDI]) RETURN 1;
IF (DSBYTE[ESI]=='\0') RETURN 0;
ESI++;
EDI++;
}
}
 
 
inline fastcall signed int strncmp( ESI, EDI, ECX)
{
asm {
MOV EBX, EDI
XOR EAX, EAX
MOV EDX, ECX
OR ECX, ECX
JE L1
REPNE SCASB
SUB EDX, ECX
MOV ECX, EDX
MOV EDI, EBX
XOR EBX, EBX
REPE CMPSB
MOV AL, DSBYTE[ ESI-1]
MOV BL, DSBYTE[ EDI-1]
SUB EAX, EBX
L1:
}
}
 
 
inline fastcall unsigned int strchr(ESI,BL)
{
int jj=0, last=-1;
do{
jj++;
$lodsb
IF(AL==BL) last=jj;
} while(AL!=0);
return last;
}
 
 
inline fastcall TitleCase( EDX)
{
AL=DSBYTE[EDX];
IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f;
IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32; //à-ï
IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80; //à-ï
do{
EDX++;
AL=DSBYTE[EDX];
IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;}
IF(AL>='€')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯
IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80; //à-ï
}while(AL!=0);
}
 
 
//------------------------------------------------------------------------------
inline fastcall void PutPixel( EBX,ECX,EDX)
{
EAX=1;
438,9 → 292,6
//------------------------------------------------------------------------------
inline fastcall void debug( EDX)
{
$push eax
$push ebx
$push ecx
$mov eax, 63
$mov ebx, 1
next_char:
455,7 → 306,4
$int 0x40
$mov cl, 10
$int 0x40
$pop eax
$pop ebx
$pop ecx
}
/programs/fs/Eolite/trunk/lib/strings.h
0,0 → 1,167
//CODED by Veliant, Leency 2008-2012. GNU GPL licence.
 
 
inline fastcall dword strlen( EDI)
{
asm {
xor ecx, ecx
xor eax, eax
dec ecx
repne scasb
sub eax, 2
sub eax, ecx
}
}
 
 
inline fastcall copystr( ESI,EDI)
{
$cld
l1:
$lodsb
$stosb
$test al,al
$jnz l1
}
 
char buffer[11];
inline fastcall dword IntToStr( ESI)
{
$mov edi, #buffer
$mov ecx, 10
$test esi, esi
$jns f1
$mov al, '-'
$stosb
$neg esi
f1:
$mov eax, esi
$push -'0'
f2:
$xor edx, edx
$div ecx
$push edx
$test eax, eax
$jnz f2
f3:
$pop eax
$add al, '0'
$stosb
$jnz f3
$mov eax, #buffer
$ret
}
 
inline fastcall dword StrToInt()
{
ESI=EDI=EAX;
IF(DSBYTE[ESI]=='-')ESI++;
EAX=0;
BH=AL;
do{
BL=DSBYTE[ESI]-'0';
EAX=EAX*10+EBX;
ESI++;
}while(DSBYTE[ESI]>0);
IF(DSBYTE[EDI]=='-') -EAX;
}
 
dword StrToCol(char* htmlcolor)
{
dword j, color=0;
char ch=0x00;
FOR (j=0; j<6; j++)
{
ch=ESBYTE[htmlcolor+j];
IF ((ch>='0') && (ch<='9')) ch -= '0';
IF ((ch>='A') && (ch<='F')) ch -= 'A'-10;
IF ((ch>='a') && (ch<='f')) ch -= 'a'-10;
color = color*0x10 + ch;
}
return color;
}
 
inline fastcall int strcmp(ESI, EDI)
{
loop()
{
IF (DSBYTE[ESI]<DSBYTE[EDI]) RETURN -1;
IF (DSBYTE[ESI]>DSBYTE[EDI]) RETURN 1;
IF (DSBYTE[ESI]=='\0') RETURN 0;
ESI++;
EDI++;
}
}
 
 
 
 
inline fastcall unsigned int strchr(ESI,BL)
{
int jj=0, last=-1;
do{
jj++;
$lodsb
IF(AL==BL) last=jj;
} while(AL!=0);
return last;
}
 
 
inline fastcall TitleCase( EDX)
{
AL=DSBYTE[EDX];
IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f;
IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32; //à-ï
IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80; //à-ï
do{
EDX++;
AL=DSBYTE[EDX];
IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;}
IF(AL>='€')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯
IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80; //à-ï
}while(AL!=0);
}
 
 
 
inline fastcall strcpy( EDI, ESI)
{
$cld
l2:
$lodsb
$stosb
$test al,al
$jnz l2
}
 
 
inline fastcall strcat( EDI, ESI)
{
asm {
mov ebx, edi
xor ecx, ecx
xor eax, eax
dec ecx
repne scasb
dec edi
mov edx, edi
mov edi, esi
xor ecx, ecx
xor eax, eax
dec ecx
repne scasb
xor ecx, 0ffffffffh
mov edi, edx
mov edx, ecx
mov eax, edi
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov eax, ebx
}
}