forked from KolibriOS/kolibrios
Eolite 1.36
git-svn-id: svn://kolibrios.org@3043 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
5012225aed
commit
eb083dc46f
@ -20,7 +20,7 @@ int BUTTON_HEIGHT=18;
|
||||
#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 @@ void main()
|
||||
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,39 +523,6 @@ void List_ReDraw()
|
||||
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,
|
||||
|
@ -1,3 +1,10 @@
|
||||
15.11.12 -- v1.36
|
||||
- устранена утечка памяти при сканировании устройств;
|
||||
- частично устранён вылет программы на больших папках (спасибо SoUrcerer за
|
||||
то, что научил пользоваться отладчиком);
|
||||
- ограничение на количесво устройств изменено с 10 на 20;
|
||||
- обновление кода.
|
||||
|
||||
12.11.12 -- v1.35
|
||||
- теперь окно не обрабатывает клавиши если свёрнуто в заголовок;
|
||||
- фикс для строки адреса;
|
||||
|
@ -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
|
||||
|
@ -39,7 +39,7 @@ void about_dialog()
|
||||
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);
|
||||
|
@ -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 @@ void DrawSystemDiscs()
|
||||
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);
|
||||
|
@ -61,6 +61,9 @@ char *ext[]={
|
||||
"jpeg",19,
|
||||
"raw", 19,
|
||||
"psd", 19,
|
||||
"wbmp",19,
|
||||
"tiff",19,
|
||||
"tif", 19,
|
||||
"ico", 20,
|
||||
"cur", 20,
|
||||
"ani", 20,
|
||||
|
@ -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 @@ void GetIni(byte onload)
|
||||
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 @@ void Write_Error(int error_number)
|
||||
}
|
||||
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);
|
||||
}
|
@ -14,24 +14,24 @@ void ShowMessage(dword message)
|
||||
|
||||
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); //ïîëå ïîñëå ïîëçóíêà
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -28,8 +28,8 @@ struct BDVK{
|
||||
////////////////////////////
|
||||
// Ńîçäŕňü ôŕéë //
|
||||
////////////////////////////
|
||||
/*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 @@ void CreateFile(dword file_size, read_buffer, file_path)
|
||||
$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;
|
||||
|
@ -15,6 +15,7 @@ dword I_Path = #program_path;
|
||||
char param[4096];
|
||||
char program_path[4096];
|
||||
|
||||
#include "lib\strings.h"
|
||||
|
||||
//Events
|
||||
#define evMouse 6
|
||||
@ -211,153 +212,6 @@ inline fastcall void MoveSize( EBX,ECX,EDX,ESI){
|
||||
$int 0x40
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
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<='<EFBFBD>')DSBYTE[EDX]=AL|0x20; // -¯
|
||||
IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80; //à-ï
|
||||
}while(AL!=0);
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
inline fastcall void PutPixel( EBX,ECX,EDX)
|
||||
{
|
||||
@ -438,9 +292,6 @@ void PutImage(dword EBX,w,h,x,y)
|
||||
//------------------------------------------------------------------------------
|
||||
inline fastcall void debug( EDX)
|
||||
{
|
||||
$push eax
|
||||
$push ebx
|
||||
$push ecx
|
||||
$mov eax, 63
|
||||
$mov ebx, 1
|
||||
next_char:
|
||||
@ -455,7 +306,4 @@ done:
|
||||
$int 0x40
|
||||
$mov cl, 10
|
||||
$int 0x40
|
||||
$pop eax
|
||||
$pop ebx
|
||||
$pop ecx
|
||||
}
|
167
programs/fs/Eolite/trunk/lib/strings.h
Normal file
167
programs/fs/Eolite/trunk/lib/strings.h
Normal file
@ -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<='<EFBFBD>')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
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user