Eolite 0.98.3

git-svn-id: svn://kolibrios.org@976 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2008-12-20 03:38:10 +00:00
parent 104d540920
commit ee45105438
6 changed files with 568 additions and 123 deletions

View File

@ -3,11 +3,10 @@
//ñòðîêà 258, êåéàï!
//âîçìîæíî, áàã â KEdit
//find_symbol íàäî ÷èòàòü ñ êîíöà
//335 ñòðîêà
//PathHistory áëÿ íàäî API äëÿ ðàáîòû ñ èñòîðèåé, â ò.÷. ïðîâåðÿòü íå ðàâíà ëè íîâàÿ ïàïêà ïðåäûäóùåé
//DrawBar(sort_num[1],45,6,9,0xE4DFE1);
//Open_Dir íàõðåí èñïàãàíåí èôàìè, ñäåëàòü äåôàéëû èëè åù¸ ÷òî-òî, ïîòîìó ÷òî ïîêà ýòî âûãëÿäèò íåêðàñèâî
#codesize
#codesize
#include "lib\kolibri.h--"
#include "lib\memory.h--"
#include "lib\edit_box_lib.h--"
@ -16,15 +15,15 @@
#include "imgs\left_p.txt"
//ëîêàëèçàöèÿ è íàñòðîéêè
#define header "Eolite File Manager v0.98.2"
#define title "Eolite File Manager v0.98.3"
#define videlenie 0x94AECE //0x94AECE,0xFEA4B7,0x8BCDFF,0xB8C9B8}; //öâåò âûäåëåííîãî ýëåìåíòà èç ñïèñêà ôàéëîâ
byte toolbar_buttons_x[6]={9,46,85,134,167,203};
//
dword but_num,
kolichestvo,
count,
za_kadrom,
curbtn,
razm_scrl;
scroll_size;
byte cut_active,
rename_active,
del_active;
@ -32,13 +31,13 @@ byte show_actions=1,
show_preview=0,
sort_num=2,
isdir;
char path[256]="/rd/1/",
byte path[256]="/rd/1/",
edit_path[256],
file_path[256],
file_name[256],
copy_file[256],
temp[256];
char PathHistory[2560];
byte PathHistory[2560];
dword file_mas[6898];
int temp_int, j, i;
@ -90,7 +89,7 @@ int pressed_y;
if (m.x>=Form.width-21) && (m.x<=Form.width-6) && (m.y>onTop(22,0)+1) && (m.y<onTop(22,0)+16)
{
IF (m.lkm==1) DrawRegion_3D(onLeft(26,0),onTop(21,0),14,14,0xC7C7C7,0xFFFFFF);
while (m.lkm==1) && (za_kadrom<kolichestvo-but_num)
while (m.lkm==1) && (za_kadrom<count-but_num)
{
Pause(10);
za_kadrom++;
@ -101,16 +100,16 @@ int pressed_y;
}
//êîë¸ñèêî ìûøè
IF (vert==65535) IF (curbtn==0) FileList_ReDraw(-3); ELSE FileList_ReDraw(-1);
IF (vert==1) IF (curbtn==but_num-1) FileList_ReDraw(3); ELSE FileList_ReDraw(1);
IF (m.vert==65535) IF (curbtn==0) FileList_ReDraw(-3); ELSE FileList_ReDraw(-1);
IF (m.vert==1) IF (curbtn==but_num-1) FileList_ReDraw(3); ELSE FileList_ReDraw(1);
//ñêðîëë
if (m.x>=Form.width-21) && (m.x<=Form.width-6) while (m.lkm)
{
IF (razm_scrl/2+57>m.y) || (m.y<0) || (m.y>4000) m.y=razm_scrl/2+57; //åñëè êóðñîð íàä îêíîì
IF (scroll_size/2+57>m.y) || (m.y<0) || (m.y>4000) m.y=scroll_size/2+57; //åñëè êóðñîð íàä îêíîì
temp_int=za_kadrom; //ñîõðàíÿåì ñòàðîå êîëè÷åñòâî
j= razm_scrl/2;
za_kadrom = m.y -j -57 * kolichestvo / onTop(22,57);
IF (but_num+za_kadrom>kolichestvo) za_kadrom=kolichestvo-but_num;
j= scroll_size/2;
za_kadrom = m.y -j -57 * count / onTop(22,57);
IF (but_num+za_kadrom>count) za_kadrom=count-but_num;
IF (temp_int<>za_kadrom) List_ReDraw(); //÷òîá ëèøíèé ðàç íå ïåðåðèñîâûâàòü
m.get();
}
@ -146,7 +145,7 @@ int pressed_y;
break;
case 77: //actions
IF (show_actions==1) show_actions=0; ELSE show_actions=1;
Actions(); Preview();
Actions();
break;
case 80: //rename
goto REN_MARK;
@ -158,10 +157,7 @@ int pressed_y;
copystr(#path, #temp);
copystr("New folder", #temp+strlen(#temp));
CreateFolder(#temp);
za_kadrom=curbtn=0;
Open_Dir(#path,1);
FOR (i=0; i<kolichestvo; i++)
IF (strcmp("New folder",file_mas[i]*304+buf+72)==0) {FileList_ReDraw(i); break;}
SelectFile("New folder");
goto REN_MARK;
case 100...120:
DEVICE_MARK:
@ -232,7 +228,7 @@ int pressed_y;
FileList_ReDraw(-za_kadrom-curbtn);
break;
case 181: //end
FileList_ReDraw(kolichestvo-za_kadrom-curbtn+but_num-1);
FileList_ReDraw(count-za_kadrom-curbtn+but_num-1);
break;
case 183: //Page Down
FileList_ReDraw(but_num-1);
@ -261,7 +257,7 @@ int pressed_y;
Del_Form();
break;
default:
FOR (i=curbtn+za_kadrom+1; i<kolichestvo; i++)
FOR (i=curbtn+za_kadrom+1; i<count; i++)
{
copystr(file_mas[i]*304+buf+72,#temp);
AL=DSBYTE[#temp];
@ -281,7 +277,7 @@ inline fastcall void draw_window()
{
WindowRedrawStatus(1);
skin_width = GetSkinWidth();
DefineAndDrawWindow(100,100,600,410,0x73,0x10E4DFE1,0,0,header);
DefineAndDrawWindow(100,100,600,410,0x73,0x10E4DFE1,0,0,title);
Form.GetInfo(SelfInfo);
IF (Form.height==skin_width+3) {WindowRedrawStatus(2); return;} //íè÷åãî íå äåëàòü åñëè îêíî ñõëîïíóòî â çàãîëîâîê
IF (Form.height<280) MoveSize(OLD,OLD,OLD,280);
@ -297,7 +293,7 @@ inline fastcall void draw_window()
DrawRegion_3D(246,12,onLeft(66,246),16,0x94AECE,0x94AECE); //îáîäîê
DrawBar(246,29,onLeft(246,60),10,0xE4DFE1); //ôîí ïîä ïîëîñîé àäðåñà
DefineButton(onLeft(34,0),6,27,28,30+BT_HIDE+BT_NOFRAME,0xE4DFE1); //about
DefineButton(onLeft(61,0),12,18,16,27+BT_HIDE,0xE4DFE1); //êíîïêà ïåðåõîäà
DefineButton(onLeft(66,0),12,18,16,27+BT_HIDE,0xE4DFE1); //êíîïêà ïåðåõîäà
PutPaletteImage(#goto_about,56,40,Form.width-65,0,#goto_about_pal);
//ïðÿìîóãîëüíèêè âíóòðè
DrawRegion_3D(1,40,Form.width-12,Form.height-skin_width-46,0x94AECE,0x94AECE); //ñèíèé îáîäîê
@ -307,6 +303,10 @@ inline fastcall void draw_window()
DrawFlatButton(192,40,onLeft(192,168),16,31,0xE4DFE1,"File");
DrawFlatButton(onLeft(168,0),40,73,16,32,0xE4DFE1,"Type");
DrawFlatButton(onLeft(95,0),40,68,16,33,0xE4DFE1,"Size");
//
//sort_type[1]=onLeft(192,168)/2+210;
//sort_type[2]=onLeft(115,0);
//sort_type[3]=onLeft(44,0);
//ïðîêðóòêà
DrawBar(onLeft(27,0),57,1,onTop(22,57),0x94AECE); //ëèíèÿ ñëåâà îò ïðîêðóòêè
DrawFlatButton(onLeft(27,0),40,16,16,0,0xE4DFE1,"\x18"); //ïðîêðóòêà ââåðõ
@ -320,21 +320,26 @@ inline fastcall void draw_window()
void KEdit()
{
edit1.size=strlen(#edit_path); edit1.pos=strlen(#edit_path);
edit1.size=edit1.pos=strlen(#edit_path);
edit_box_draw stdcall (#edit1);
/*edit2.flags=66; //äåëàåì êîìïîíåíò àêòèâíûì
edit2.width=onLeft(24,217);
edit2.top=curbtn*18+59;
edit2.size=edit2.pos=strlen(#file_name);
edit_box_draw stdcall (#edit2);*/
}
inline fastcall void TVScroll() { //Ïðîêðóòêà
dword on_y;
IF (kolichestvo<=0) {DrawFlatButton(onLeft(27,0),57,16,onTop(22,58),0,0xE4DFE1,""); return;}
on_y = za_kadrom * onTop(22,57) / kolichestvo +57;
razm_scrl=onTop(22,57) * but_num - but_num / kolichestvo;
IF (razm_scrl<20) razm_scrl = 20; //óñòàíàâëèâàåì ìèíèìàëüíûé ðàçìåð ñêðîëëà
IF (razm_scrl>onTop(22,57)-on_y+56) || (za_kadrom+but_num>=kolichestvo) on_y=onTop(23+razm_scrl,0); //äëÿ áîëüøîãî ñïèñêà
DrawFlatButton(onLeft(27,0),on_y,16,razm_scrl,0,0xE4DFE1,"");//ïîëçóíîê
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); //äëÿ áîëüøîãî ñïèñêà
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+razm_scrl+1,15,onTop(22,57)-razm_scrl-on_y+56,0xCED0D0); //ïîëå ïîñëå ïîëçóíêà
DrawBar(onLeft(26,0),on_y+scroll_size+1,15,onTop(22,57)-scroll_size-on_y+56,0xCED0D0); //ïîëå ïîñëå ïîëçóíêà
}
@ -360,7 +365,7 @@ void FileList_ReDraw(int curbtn_)
}
else //âíèç
{
IF (za_kadrom==kolichestvo-but_num) && (curbtn==but_num-1) return;
IF (za_kadrom==count-but_num) && (curbtn==but_num-1) return;
IF (but_num-curbtn>curbtn_)
{
Line_ReDraw(0xFFFFFF, curbtn); //áåëàÿ ïîëîñà
@ -370,7 +375,7 @@ void FileList_ReDraw(int curbtn_)
}
ELSE
{
IF(but_num+za_kadrom+curbtn_>=kolichestvo) za_kadrom=kolichestvo-but_num; ELSE za_kadrom+=curbtn_+curbtn-but_num+1;
IF(but_num+za_kadrom+curbtn_>=count) za_kadrom=count-but_num; ELSE za_kadrom+=curbtn_+curbtn-but_num+1;
curbtn=but_num-1;
List_ReDraw();
}
@ -380,8 +385,8 @@ void FileList_ReDraw(int curbtn_)
void List_ReDraw()
{
IF (kolichestvo-za_kadrom<but_num) || (curbtn>but_num-1) //åñëè ìû â êîíöå ñïèñêà ôàéëîâ ðàçâåðí¸ì îêíî ïîÿâÿòüñÿ ïóñòÿå áåëûå êíîïêè
{ za_kadrom=kolichestvo-but_num; curbtn=but_num-1; } //ýòî åñëè âûäåëåíèå ïîñëå ñõëîïûâàíèÿ îêíà çà êàäðîì
IF (count-za_kadrom<but_num) || (curbtn>but_num-1) //åñëè ìû â êîíöå ñïèñêà ôàéëîâ ðàçâåðí¸ì îêíî ïîÿâÿòüñÿ ïóñòÿå áåëûå êíîïêè
{ za_kadrom=count-but_num; curbtn=but_num-1; } //ýòî åñëè âûäåëåíèå ïîñëå ñõëîïûâàíèÿ îêíà çà êàäðîì
//
FOR (j=0; j<but_num; j++) IF (curbtn<>j) Line_ReDraw(0xFFFFFF, j); ELSE Line_ReDraw(videlenie, curbtn);
temp_int=but_num*18+57;
@ -394,7 +399,7 @@ void List_ReDraw()
void Line_ReDraw(dword color, filenum){
dword y;//ïîëîæåíèå òåêñòà ïî Y;
if (rename_active==1)
if (rename_active==1) //âñ¸ ýòî ïîëíûé ïèïåö, è íàäî âûíåñòè â îòäåëüíóþ ïðîöåäóðó
{
rename_active=0;
edit2.flags=64;
@ -428,7 +433,7 @@ void Line_ReDraw(dword color, filenum){
if (!EAX)
{
temp_int = Put_icon(off+strlen(off)-4, y+2);
WriteText(7-strlen(ConvertSize(ESDWORD[off-8]))*6+onLeft(70,0),y+6,0x80,0,ConvertSize(ESDWORD[off-8]),0); //size
WriteText(7-strlen(ConvertSize(ESDWORD[off-8]))*6+onLeft(75,0),y+6,0x80,0,ConvertSize(ESDWORD[off-8]),0); //size
} ELSE IF (!strcmp("..",off)) temp_int=Put_icon("..", y+2); ELSE temp_int=Put_icon("<DIR>", y+2);
if (color==videlenie)
{
@ -449,6 +454,7 @@ void Line_ReDraw(dword color, filenum){
WriteText(215,y+6,0,0,off,temp_int); //èìÿ ôàéëà
DrawBar(onLeft(168,0),y,1,18,0xE4DFE1); //ïîëîñà ñåðàÿ âåðòèêàëüíàÿ 1
DrawBar(onLeft(95,0),y,1,18,0xE4DFE1); //ïîëîñà ñåðàÿ âåðòèêàëüíàÿ 2
//Preview();
}
@ -462,32 +468,31 @@ void Open_Dir(dword temp_, redraw){
IF (buf) free(buf);
buf = malloc(32);
ReadDir(0, buf, #path_);
kolichestvo = ESDWORD[buf+8];
buf = realloc(kolichestvo * 304 + 32, buf);
ReadDir(kolichestvo, buf, #path_);
IF (EBX>6898) && (EBX<>-1) EBX=6898;
kolichestvo=EBX;
}
if (kolichestvo<>-1) && (redraw>0)
count = ESDWORD[buf+8];
buf = realloc(count * 304 + 32, buf);
ReadDir(count, buf, #path_);
IF (EBX>6897) && (EBX<>-1) EBX=6897; //1 íà óäà÷ó ;)
count=EBX;
}
if (count<>-1) && (redraw>0)
{
IF (!strcmp(".",buf+72)) {memmov(buf,buf+304,kolichestvo-1*304); kolichestvo--; } //ôèëüòðóåì ýëåìåíò "."
IF (!strcmp(".",buf+72)) {memmov(buf,buf+304,count-1*304); count--; } //ôèëüòðóåì ýëåìåíò "."
FOR (j=0;j<but_num;j++) DeleteButton(201+j); //óäàëÿåì ñòàðûå
but_num=onTop(6,57)/18;
IF (but_num>100) but_num=1; ELSE //ýòà ñòðàííàÿ ñòðî÷êà äëÿ òîãî åñëè ðàçìåðû îêíà ñëèøêîì ìàëåíüêèå
IF (kolichestvo<but_num) but_num=kolichestvo;
IF (count<but_num) but_num=count;
FOR (j=0;j<but_num;j++) DefineButton(192,j*18+57,onLeft(27,192),18,201+j+BT_HIDE+BT_NOFRAME,0xFFFFFF); //íîâûå êíîïû
IF (redraw<>3) Sorting();
IF (redraw==1) || (redraw==3) List_ReDraw();
copystr(temp_,#edit_path);
KEdit();
copystr("|",#PathHistory+strlen(#PathHistory));
copystr(#path,#PathHistory+strlen(#PathHistory));
HistoryPath(add_new_path);
//ñòðåëî÷êà ñîðòèðîâêè
IF (sort_num==1) WriteText(onLeft(192,168)/2+210,45,0x80,0x4E78AC,"\x19",0);
IF (sort_num==2) WriteText(onLeft(115,0),45,0x80,0x4E78AC,"\x19",0);
IF (sort_num==3) WriteText(onLeft(44,0),45,0x80,0x4E78AC,"\x19",0);
}
IF (kolichestvo==-1) {but_num=kolichestvo=0; List_ReDraw();}
IF (count==-1) {but_num=count=0; List_ReDraw();}
}
@ -495,21 +500,21 @@ void Open_Dir(dword temp_, redraw){
inline Sorting()
{
dword k=0, l=1;
IF (!strcmp(#path,"/")) {FOR(k=1;k<kolichestvo;k++;)file_mas[k]=k; return;} //íå ñîðòèðîâàòü ïàïêè è íå ìåíÿòü ðåãèñòð â "/"
FOR (j=kolichestvo-1, off=kolichestvo-1*304+buf+32; j>=0; j--, off-=304;) //ïàïêè ââåðõ, ôàéëû âíèç
IF (!strcmp(#path,"/")) {FOR(k=1;k<count;k++;)file_mas[k]=k; return;} //íå ñîðòèðîâàòü ïàïêè è íå ìåíÿòü ðåãèñòð â "/"
FOR (j=count-1, off=count-1*304+buf+32; j>=0; j--, off-=304;) //ïàïêè ââåðõ, ôàéëû âíèç
{
ChangeCase(off+40);
EAX=ESDWORD[off];
$shr eax,4
$and eax,1
IF (EAX) {file_mas[k]=j; k++;} ELSE
{file_mas[kolichestvo-l]=j; l++;}
{file_mas[count-l]=j; l++;}
}
//Ñîáñòâåííî ñîðòèðîâêà
Sort_by_Name(0,k-1);
IF (sort_num==1) Sort_by_Name(k,kolichestvo-1);
IF (sort_num==2) Sort_by_Type(k, kolichestvo-1);
IF (sort_num==3) Sort_by_Size(k,kolichestvo-1);
Sort_by_Name(0,k-1); //ñîðòèðóåì ïàïêè, íèæå - ôàéëû
IF (sort_num==1) Sort_by_Name(k,count-1);
IF (sort_num==2) Sort_by_Type(k, count-1);
IF (sort_num==3) Sort_by_Size(k,count-1);
//åñëè ïàïêà ".." íå ïåðâàÿ, ñòàâèì å¸ òóäà
IF (strcmp(file_mas[0]*304+buf+72,"..")<>0) FOR(k=k-1; k>0; k--;) IF (!strcmp(file_mas[k]*304+buf+72,"..")) file_mas[k]><file_mas[0];
}
@ -571,7 +576,7 @@ void Paste()
copy_file='';
cut_active=0;
}
Open_Dir(#path,1);
SelectFile(#copy_file+find_symbol(#copy_file,'/'));
}
@ -600,18 +605,19 @@ void Devices()
copystr("Unknown drive",#drive_name); //èçíà÷àëüíî íåèçâåñíûé íîñèòåëü
dev_icon=3; //ïî-óìîë÷àíèþ óñòðîéñòâî âûãëÿäèò êàê æåñòÿê
copystr(i*304+ devbuf+72, #dev_name);
IF (dev_name[0]=='f') { copystr("Floppy disk /",#drive_name); dev_icon=2; }
IF (dev_name[0]=='h') copystr("Hard disk drive /",#drive_name);
IF (dev_name[0]=='b') copystr("SATA disk drive /",#drive_name);
IF (dev_name[0]=='c') {copystr("CD-drive /",#drive_name); dev_icon=1;}
copystr(#dev_name,#drive_name+strlen(#drive_name));
IF (dev_name[0]=='r') { dev_icon=0; copystr("RAM-disk /rd/1",#drive_name); }
IF (dev_name[0]=='c') { dev_icon=1; copystr("CD-drive /",#drive_name); }
IF (dev_name[0]=='f') { dev_icon=2; copystr("Floppy disk /",#drive_name); }
IF (dev_name[0]=='h') copystr("Hard disk drive /",#drive_name);
IF (dev_name[0]=='b') copystr("SATA disk drive /",#drive_name);
//
IF (dev_icon<>0) copystr(#dev_name,#drive_name+strlen(#drive_name));
copystr("/",#drive_name+strlen(#drive_name));
IF (dev_name[0]=='r') { copystr("RAM-disk /rd/1/",#drive_name); dev_icon=0; }
WriteText(45,i*16+79,0x80,0,#drive_name,0);
PutImage(dev_icon*14*13*3+#devices,14,13,21,i*16+76);
//
WriteText(45,i*16+79,0x80,0,#drive_name,0);
PutImage(dev_icon*14*13*3+#devices,14,13,21,i*16+76);
}
Actions(); //ôóíêöèè ôàéëîâ è ïàïîê
Preview();
}
@ -636,32 +642,11 @@ void Actions()
}
ELSE
{
DeleteButton(80); DeleteButton(81); DeleteButton(82);
Tip(dev_num*16+90, "Actions", 77, "\x18");
DrawBar(17,dev_num*16+108,160,51,0x00699C); //ñèíåå
DeleteButton(80); DeleteButton(81); DeleteButton(82);
Tip(dev_num*16+90, "Actions", 77, "\x18");
DrawBar(17,dev_num*16+108,160,51,0x00699C); //ñèíåå
}
}
void Dir_Up()
{
char temp_[256];
i=strlen(#path)-1;
path[i]=0x00;
do i--; while (path[i]<>'/'); copystr(#path+i+1,#temp_);
path[i+1]=0x00;
ChangeCase(#temp_);
za_kadrom=curbtn=0; //ââåðõ ñïèñêà
Open_Dir(#path,2);
FOR (i=kolichestvo-1; i>0; i--;) IF(strcmp(file_mas[i]*304+buf+72,#temp_)==0) BREAK;
//
if (i>kolichestvo-but_num)
{
za_kadrom=kolichestvo-but_num;
curbtn=i-kolichestvo+but_num;
}
ELSE FileList_ReDraw(i);
List_ReDraw();
Preview();
}
@ -674,15 +659,14 @@ void Preview()
{
Tip(top_pr,"Preview",78,"\x19");
DrawBar(17,top_pr+18,160,100,0xFFFFFF); //áåëîå
WriteText(25,top_pr+30,0x80,0,"Number of files:",0); WriteText(135,top_pr+30,0x80,0,IntToStr(kolichestvo),0);
/*WriteText(30,top_pr+40,0x80,0,"but_num:",0); WriteText(105,top_pr+40,0x80,0,IntToStr(but_num),0);
DrawBar(17,top_pr+118,160,onTop(top_pr+118,6),0x00699C); //ñèíåå
//
WriteText(25,top_pr+30,0x80,0,"Number of files:",0); WriteText(135,top_pr+30,0x80,0,IntToStr(count),0);
WriteText(30,top_pr+40,0x80,0,"but_num:",0); WriteText(105,top_pr+40,0x80,0,IntToStr(but_num),0);
WriteText(30,top_pr+50,0x80,0,"curbtn",0); WriteText(105,top_pr+50,0x80,0,IntToStr(curbtn),0);
WriteText(30,top_pr+60,0x80,0,"ra_kadrom:",0); WriteText(105,top_pr+60,0x80,0,IntToStr(za_kadrom),0);
WriteText(30,top_pr+70,0x80,0,#file_path,0);
WriteText(30,top_pr+80,0x80,0,#file_name,0);*/
//WriteText(30,top_pr+60,0x80,0,"Not realized... I think",0);
//WriteText(30,top_pr+70,0x80,0,"it will be realired soon.",0);
DrawBar(17,top_pr+118,160,onTop(top_pr+118,6),0x00699C); //ñèíåå
WriteText(30,top_pr+80,0x80,0,#file_name,0);
}
ELSE
{
@ -697,28 +681,45 @@ void Goto_edit_path()
IF (strcmp(#path,#edit_path)==0) return; //ïðîâåðêà íå â ýòîé ëè ìû ïàïêå
IF (strcmp(#edit_path+strlen(#edit_path)-1,"/")<>0) copystr("/",#edit_path+strlen(#edit_path)); //åñëè íåò, + "/"
Open_Dir(#edit_path,0); //ïðîâåðÿåì åñëè ôàéëû â ïàïêå, òàê ìû óçíà¸ì ñóùåñòâóåò ëè îíà
IF (kolichestvo==-1) KEdit(); ELSE //ïðîñòî î÷èùàåì ïîëîñó àäðåñà
IF (count<1) KEdit(); ELSE //ïðîñòî î÷èùàåì ïîëîñó àäðåñà
{za_kadrom=curbtn=0; copystr(#edit_path,#path);}//íàâåðõ ñïèñêà
Open_Dir(#path,1);
}
void SelectFile(dword that_file)
{
za_kadrom=curbtn=0; //ââåðõ ñïèñêà
Open_Dir(#path,2);
ChangeCase(that_file);
FOR (i=count-1; i>=0; i--;) IF(strcmp(file_mas[i]*304+buf+72,that_file)==0) BREAK;
IF (i>but_num-1) && (i>count-but_num)
{
za_kadrom=count-but_num;
curbtn=i-count+but_num;
}
ELSE FileList_ReDraw(i);
List_ReDraw();
}
void Dir_Up()
{
char temp_[256];
i=strlen(#path)-1;
path[i]=0x00;
do i--; while (path[i]<>'/'); copystr(#path+i+1,#temp_);
path[i+1]=0x00;
SelectFile(#temp_);
}
inline fastcall void GoBack() //âíà÷àëå óäàëÿåì òåêóùèé ïóòü, à ïîòîì êîïèðóåì òî, ÷òî îñòàëîñü
{
//char old_dir[256]='';
i=strlen(#PathHistory)-2;
//
//WHILE (PathHistory[i]<>'/') { copystr(#PathHistory[i],#old_dir); i--; };
//old_dir[strlen(#old_dir)-1]=0x00;
//DrawTitle(#old_dir);
//
WHILE (PathHistory[i]<>'|') { i--; };
IF (i>0) PathHistory[i]=0x00;
WHILE (PathHistory[i]<>'|') { copystr(#PathHistory[i],#path); i--; }
IF (i>0) PathHistory[i]=0x00;
za_kadrom=curbtn=0; Open_Dir(#path,1);
//FOR (i=0; i<kolichestvo; i++;) IF (strcmp(file_mas[i]*304+buf+72,#old_dir)==0) {curbtn=3; za_kadrom=i-3; Open_Dir(#path,1); return;}
i=strlen(#PathHistory)-1;
PathHistory[i]=0x00;
copystr(#PathHistory+find_symbol(#PathHistory,'/'),#temp); //ïàïêà â êîòîðîé áûëè
HistoryPath(go_back);
SelectFile(#temp);
}

View File

@ -0,0 +1,400 @@
20.12.08 -- v0.98.3 RC1 -- 14.6 Кб
- теперь координаты отсчитываются от конца скина;
- устранён вылет программы в случае, если в папке 0 или больше чем 6898 файлов;
- исправлен баг: если в конце списка развернуть окно, выделение "прыгало" вверх;
- исправлена перерисовка при переходе в другую папку или устройство;
- немного оптимизировано изменение регистра букв в названиях файлов;
- теперь выделяется папка, в которой мы были и после кнопки "Назад";
- исправлены недочёты при переходе в верхнюю папку;
- в историю посещённых папок теперь не может два раза подряд записаться одна и
та же папка;
- удалён неиспользуемый код;
16.12.08 -- v0.98.1 RC1 -- 14.7 Кб
- папка ".." теперь всегда первая в списке;
- кнопки вверх/вниз скролл бара теперь реагируют на нажатие и удержание;
- файлы с некоторыми расширениями теперь нельзя запускать (реализовал s1n).
15.12.08 -- v0.98 RC1 -- 14.5 Кб
- программа научилась работать с bd-дисками и NTFS;
- исправлен баг из-за которого прога вылетала при переходе на уровень вверх;
- исправлено отображение регистра букв для кириллицы;
- удаление папки "." из листинга директории (спасибо diamond'у за помощь).
30.11.08 -- v0.97.2 beta7 -- 14.4 Кб
- на /bd/ разделах прога больше не вылетает (хоть ничего на них и не видит);
- некоторые исправления в работе полосы прокрутки;
- динамическое выделение памяти (в режиме тестирования).
26.11.08 -- v0.97.1 beta7 -- 14.3 Кб
- удаление, создание и переименование пустых папок;
- все процедуры работы с файловой системой вынесены в отдельный файл;
- благодаря помощи Veliant'а большая часть изображений конвертирована в
256-цветные с палитрой. В результате чего уменьшился размер сжатой программы
и в 2 раза уменьшился обьём несжатой kpack'ом;
- улучшено перетягивание ползунка;
- исправлен один баг.
20.11.08 -- v0.97 beta7 -- 14.9 Кб
- уменьшена перерисовка: во время перерисовки списка
фон под иконками не рисуется;
- новая иконка изображений, обтекаемость архивов.
17.11.08 -- v0.96.9 beta7 -- 14.9 Кб
- некоторые новые ассоциации и иконки файлов .dll (.obj) и .img.
14.11.08 -- v0.96.8 beta7 -- 14.6 Кб
- при нажатии на букву, выделяется соответствующий файл;
- некоторые новые ассоциации и иконки файлов .cpp и .nes.
31.10.08 -- v0.96.7 beta7 -- 14.4 Кб
- теперь, при переходе на уровень вверх, выделяется папка в которой мы были;
- отловил баг из-за которого, если попытаться войти в верхнюю папку\файл в
списке, не смотря что там выделено, вы перейдёте на уровень вверх;
- исправлен баг из-за которого не все элементы сортировались по типу;
- теперь выделеный элемент в списке рисуется "в порядке очереди", а не самым
последним; это было заметно при перемотке;
- оптимизации.
24.10.08 -- v0.96.3 beta7 -- 14.4 Кб
- скролл колёсиком как в Symbian;
- уменьшена перерисовка окна в ущерб размеру программы;
- исправлен баг, когда папки, названия которых имели симполы типа !,& прыгали
вверх, выше папки "..";
- исправление других багов, улучшение кода.
23.10.08 -- v0.96 beta6 -- 14.1 Кб
- вместо сортировки пузырьком теперь используется алгоритм быстрой сортировки
(да здравствует Википедия!)). Как результат скорость сортировки по размеру
увеличилась в 8 раз, по типу более чем в 5 раз, по имени возросла на 30%;
- и более того: теперь, конечно же, сортировка проходит не по первой букве имени
файла, а по названию вообще. Так же, при сортировке по типу есть одинаковые
расширения, то эти файлы упорядывачиваются по имени;
- оптимизирована процедура сравнения строк;
- перемотка по 3 елемента;
- оптимизация и доработка панели устройств;
17.10.08 -- v0.95.7 beta6 -- 14.3 Кб
- перемотка по 2 елемента;
- упорядочивание файлов по типу.
15.10.08 -- v0.95.4 beta6 -- 14.0 Кб
- исправлен баг: первая буква названия файл\папки не делалась большой (строчной).
03.10.08 -- v0.95.3 beta6 -- 14.1 Кб
- устранён серьёзный баг с кнопкой "Назад";
- при сортировке файлов по размеру, папки не перемешиваются в хаотичном порядке,
а продолжают быть отсортированными по имени.
- устранён баг в сортировке файлов;
- новая иконка папки.
17.09.08 -- v0.95.2 beta6 -- 14.1 Кб
- исправлена ошибка, связанная с количеством файлов в папке, замечена Serge'м.
Теперь Эолайт без проблем заходит даже в самые большие папки (было проверено
на папке объёмом 91000 файлов), но отображает максимум только 6898 файлов;
- по нажатию Ctrl+N создаётся новое окно программы с текущей папкой;
- небольшие оптимизации.
14.09.08 -- v0.95 beta6 -- 14.0 Кб
- новая полоса адреса и переименования файла, основанные на компоненте от <Lrz>;
- в EditBox'ax теперь можно использовать все цифры от 1 до 9 (мечта Атаульпы:);
- если не выделена строка адреса клавиша BackSpace возвращает в предыдущую папку;
- оптимизирована функция IntToStr() за что огромное спасибо diamond'y, она стала
меньше на 158 байт;
- много интересного почерпнуто из либы Nable'а относительно оптимизации функций;
- по совету Albom'a динамическое выделение памяти было заменено статическим, как
последствие - исчезло два известных бага, связанных с копированием файлов и
их переименованием;
- некоторые переменные стали локальными, ещё оптимизации и небольшие багфиксы;
02.08.08 -- v0.94.4 beta5 -- 14.0 Кб
- правка трёх небольших багов, оптимизации;
28.07.08 -- v0.94.3 beta5 -- 14.1 Кб
- переход по девайсам Ctrl+<цифра>;
- установлен минимальный размер высоты окна;
- иконка папки "вверх";
- почищен и оптимизирован код.
04.07.08 -- v0.94 beta5 -- 13.9 Кб
- исправлен довольно старый баг, если ползунок прокрутки в папке с очень большим
количеством файлов перетянуть вверх до начала списка, программа вылетала
04.07.08 -- v0.93.9 beta5 -- 13.9 Кб
- работает клавиша "Назад" :)
- устранён баг из-за которого папки "." и ".." подвергались сортировке
29.06.08 -- v0.93.8 beta5 -- 13.8 Кб
- сортировка файлов по первой букве имени
22.06.08 -- v0.93.6 beta5 -- 13.7 Кб
- новый алгоритм сортировки файлов по размеру, более быстрый (вычитал о нём на
Википедии:), в списке появилось 2 досели потеряных файла
18.06.08 -- v0.93.5 beta5 -- 13.7 Кб
- запуск программы с параметрами - например "Eolite /hd1/1/" откроет программу
с папкой /hd1/1/ в ней. Несуществующий путь открыт не будет
- устранён глюк окна "О программе", когда нажатие на любую клавишу приводило к
его зависанию (уходу в бесконечный цикл)
- иконка и поддержка файлов ".cvs"
- оптимизации кода
15.06.08 -- v0.93.4 beta5 -- 13.4 Кб
- исправлен баг с тем появления несуществующего файла в /rd/1/
- теперь rd, fd, hd1 и т.д. всегда в нижнем регистре
- устранён вылет проги после нажатия кнопки "Up" (спасибо сеса за найденый баг)
14.06.08 -- v0.93.3 beta5 -- 13.4 Кб
- теперь заливается белым не весь список, а потом выводится текст, а рисуются
белые полосы с текстом - так немного медленнее, но перерисовка значительно
меньше (спасибо Марио79 за подсказку)
- оптимизирована и исправлена процедура удаления файла
- F3 - просмотр любого файла в Тайнипаде
- исправлены баги интерфейса
14.06.08 -- v0.93 beta5 -- 13.6 Кб
- реализована прокрутка скроллом мыши (спасибо diamond'у за отловленный баг)
- немного уменьшена перерисовка окна
- уменьшен и оптимизирован код программы
- частично исправлен баг разворачивания окна, если мы были в конце списка
- теперь при переименовании файла можно использовать все цифры, кроме восьмёрки
- у программы изменился компилятор на более новый и ключи компиляции
- оптимизирован kolibri.h--
08.06.08 -- v0.92.1 beta5 -- 14.0 Кб
- исправлен баг, когда ползунок не всегда доезжал не до конца полосы прокрутки
- оптимизации в прокрутке
08.06.08 -- v0.92 beta5 -- 14.0 Кб
- устранён баг, появившейся в версии 0.88. Если вы в конце списка и начнёте
понемногу увеличивать размеры окна, оттягивая его нижний конец вниз, то со
временем программа вылетит
- реализован алгоритм плавной прокрутки, есть 1 серьёзный и 1 несерьёзный баг
07.06.08 -- v0.91.5 beta4 -- 14.0 Кб
- удалён неиспользуемый с 03.03.08 (v0.83) кусок кода
- интерфейс полосы прокрутки стал более объёмным, это было сделано не с целью
улучшения дизайна, а с целью уменьшения кода в исходнике :)
- устранён баг открытия первого файла, который проявлялся только в эмуляторе
- cпасибо diamond'у за исправление ошибки в процедуре складывания двух строк
copystr() и её оптимизацию
- установлено ограничение на размер имени файла, отображаемого при его удалении
- если отменили удаление файла, то опять создаются кнопочки под формой
- устранён старый баг (замеченный недавно) - если в полосе адреса прописали
несуществующий адрес, программу выкидывало
- уменьшена перерисовка при переходе в другую папку, где файлов меньше, чем
было в текущей
- исправлена ошибка в функциях lowcase() и upcase()
- теперь названия файлов и папок начинаются с большой буквы, далее - прописные
- с папками на NTFS-разделе программа всё ещё работать не умеет, но, по крайней
мере, при попытке войти в какую-то из них она уже не вылетает
- немного оптимизирована процедура перехода на девайс
- исправлен баг из-за которого имена файлов иногда оказывались чуть выше чем
надо, относительно иконок
- уменьшена перерисовка окна
- другие оптимизации и багфиксы
02.06.08 -- v0.90.4 beta4 -- 14.1 Кб
- оптимизации и багфиксы (в т.ч. спасибо Maxis за найденный баг)
01.06.08 -- v0.90 beta4 -- 14.1 Кб
- критически уменьшена перерисовка, в несколько раз! Огромное спасибо diamond
за подсказку
01.06.08 -- v0.88.5 beta3 -- 14.1 Кб
- раньше при переходе из одной папки в другую вся область с файлами
закрашивалась белым цветом, а поверх выводились новые. Вопрос: зачем
закрашивать ВСЮ область, если файлов ней может быть всего 2? Я тоже не
знаю почему я понял это только сейчас. Закрашиваем только эти файлы.
- раньше рисовалась левая синяя панель, а поверх неё окошечки с девайсами
и т.д. Сейчас не так: синяя панель рисуется ВОКРУГ окошечек, что уменьшает
перерисовку.
30.05.08 -- v0.88.2 beta3 -- 14.1 Кб
- устранён баг, связанный с клавишами F2 и Home
27.04.08 -- v0.88 beta3 -- 14.1 Кб
- обьединены процедуры открытия файла
- устранён баг, связанный с переходом из некорневой папки на другой девайс
- динамическое выделение памяти под папки
08.04.08 -- v0.87 beta3 -- 14.0 Кб
- оптимизировано удаление файла
- удалён продублированный код переименования файла
- теперь для списка девайсов в левой панели (RАM-диск, жестяки и т.д.)
существует определённый буфер, а не открывается папка "/" каждый раз при
выводе этого списка или же перехода в какой-то из его элементов
- при перерисовке окна больше не считывается содержимое папки, просто
выводятся данные, что хранятся в буфере
- посла деактивации окна то, что было напечатано в строке адреса не исчезает
- упорядочивание файлов по размеру
27.03.08 -- v0.86 beta3 -- 14.4 Кб
- оптимизирован вывод размера файлов
- убрана лишняя перерисовка при открытии программы
- оптимизирован переход в начало и в конец списка файлов
- исправлен баг с потелей одного файла в корневых разделах жестких дисков
- обьединены процедуры Ctrl+С и Ctrl+X
- теперь для каждого изображения не своя переменная, а все они собраны по типам
в один файл: toolbar icons, file icons, device icons
- уменьшено потребление программой ресурсов при выводе иконок файлов
- и ещё много-много всего отимизировано!
09.03.08 -- v0.84 beta2 -- 16.1 Кб
- cделано окно "О программе" (размер за kpack-ованого изображения 2.5 Кб)
- теперь при переименовании файла можно использовать все цифры
- оптимизировано процедуры открытия папки, копирования, перерисовка полосы
адреса и полосы переименования файла
- запрос на удаление
07.03.08 -- v0.83.3 beta2 -- 13.0 Кб
- решён глюк, связанный с корневыми папками жёстких дисков
07.03.08 -- v0.83.2 beta2 -- 13.0 Кб
- решён крайне серьёзный баг с пожиранием программой дополнительного количества
памяти каждый раз после перерисовки окна или открытия папки
07.03.08 -- v0.83.1 beta2 -- 13.0 Кб
- решен баг с прокруткой и папками
- опитимизации
03.03.08 -- v0.83 beta2 -- 13.0 Кб
- цвет окна более тёмный
- распределение: вначале папки, затем файлы
- теперь перетягивание ползунка прокрутки работает и в Колибри!
- реализованы быстрые клавиши Ctrl+C (Ctrl+Ins), Ctrl+X, Ctrl+V. Как сделать с
Shift-ом я не знаю
- новое лого
- устранён баг с серой линией, отделяющей названия файлов и их тип
- устранён древний баг, связанный с невозможностью открыть любой файл с первого
раза, только со второго
- устранён баг, связаный с длинной имени файла
- новая иконка текстовых документов
27.02.08 -- v0.81 beta -- 12.8 Кб
- оптимизирование перерисовки при переходе в другую папку
- некоторые иконки теперь обтекаемы
- багфиксы прокрутки списка
25.02.08 -- v0.80 beta -- 12.6 Кб
- критически уменьшена перерисовка!
- багфиксы интерфейса
25.02.08 -- v0.77 beta -- 12.5 Кб
- переименовывание файлов
23.02.08 -- v0.75 beta -- 12.1 Кб
- опять заработали горячие клавиши
- библиотека eolite_copy.obj больше не нужна
- теперь работает и вырезание файлов (размером не больше чем ОЗУ)
- улучшение алгоритма прокрутки
- багфиксы
23.02.08 -- v0.71 beta -- 12.1 Кб
- устранён баг ограничения размера строки для имён файлов
- ReadMe
23.02.08 -- v0.7 beta -- 12.1 Кб
- ограничение размера строки для имён файлов
- удалена "." в начале списка файлов
22.02.08 -- v0.65 beta -- 12.3 Кб
- размер файлов теперь выводится в Кб, Мб и Гб
- оптимизация отрисовки в левой синей панели
- удобно стало пользоваться полосой адреса. Если она была изменена, нажав Enter
мы переходим по новому адресу, если же нет - открывается выделенная папка,
файл или программа
- в Колибри не работает, в отличии от эмулятора, реализованное перетягивание
ползунка :(
- выделение по Insert, пока что нигде не используется
18.02.08 -- v0.6 beta -- 11.7 Кб
- совместными усилиями устранён серьёзный баг с нажатием ПКМ на заголовке окна
- если мы пропишем адрес папки, которой не существует и попытаемся в неё перейти
ничего у нас УЖЕ не получится
- улучшения в скролле
- F5 перерисовать окно
- иконки у устройств
- панель действий
- одиночное копирование и вырезание файлов размером не больше чем ОЗУ
- удаление файлов, пока что без запроса
09.02.08 -- v0.5 beta -- 10 Кб
- оптимизировано Preview
- до деактивации окна уже нельзя кляцать по белой области и видеть кнопки
- уменьшен размер иконок - теперь они 16х15
- нельзя удалить весь путь в строке адреса, "/" по-любому остаётся
- при деактивации окна выделение не перепрыгивает на первый элемент
- реализовано открытие програм и ассоциированных файлов
- расширения больше не в верхнем регистре
- переходит по носителям, теперь если неизвестный носитель - оно так и напишет
- добавлены новые типы файлов
04.02.08 -- v0.35 beta -- 9.17 Кб
- для строки адреса отдельный "путь" (не #path, а #edit_path).
- красивая кнопка перехода
- входит в первую папку
- вывод типов файлов
- оптимизация в коде
03.02.08 -- v0.33 beta -- 8.91 Кб (англ.версия)
Первая версия. Краткое хистори:
1. Leency делает дизайн программы и ищет пути решения некоторых проблем.
2. Veliant делает отображение списка файлов из /rd/1/, а Leency реализует
перемотку списка и горячие клавиши.
3. Veliant осуществляет вывод размера файлов. Leency мучается с прокруткой.
4. Veliant выводит иконки, Leency эти иконки рисует и переделывает дизайн окна.
5. Veliant с Leency сделали переход по папкам.
6. Устранение багов.
22.02.08 -- v0.0 -- 0 Кб
Начало.

View File

@ -1,5 +1,8 @@
#include "imgs\logo.txt"
?define add_new_path 1
?define go_back 2
/*
//IPC
#include "lib\Nable_lib.h--"
@ -38,7 +41,7 @@ void authors()
DefineAndDrawWindow(500,200,181,256,0x34,0x10EFEBEF,0,0,"About Eolite");
DrawBar(0,0,172,50,0x8494C4); //ãîëóáîå ñçàäè
PutPaletteImage(#logo,85,85,48,7,#logo_pal);
WriteText(33,100,0x80,0xBF40BF,"Eolite v0.98.2 RC1",0);
WriteText(33,100,0x80,0xBF40BF,"Eolite v0.98.3 RC1",0);
WriteText(55,120,0x80,0,"Developers:",0);
WriteText(39,130,0x80,0,"Leency & Veliant",0);
WriteText(30,140,0x80,0,"Diamond, Lrz, Nable",0);
@ -50,6 +53,24 @@ void authors()
}
void HistoryPath(byte action)
{
IF (action==add_new_path)
{
IF (strcmp(#PathHistory+find_symbol(#PathHistory,'|'),#path)==0) return;
copystr("|",#PathHistory+strlen(#PathHistory));
copystr(#path,#PathHistory+strlen(#PathHistory));
}
IF (action==go_back)
{
WHILE (PathHistory[i]<>'|') { i--; };
IF (i>0) PathHistory[i]=0x00;
WHILE (PathHistory[i]<>'|') { copystr(#PathHistory[i],#path); i--; }
IF (i>0) PathHistory[i]=0x00;
}
}
/*òèïà àíèìàöèÿ
WHILE (m.lkm==1)
{

View File

@ -25,7 +25,7 @@ void Sort_by_Name(int a, b) //
}
int partition1(dword a, b)
/*int partition1(dword a, b)
{
dword i = a; byte filename1[256], filename2[256]; int n;
for (j = a; j <= b; j++)
@ -45,6 +45,29 @@ int partition1(dword a, b)
IF (n==0) && (strcmp(file_mas[j]*304 + buf+72, file_mas[b]*304 + buf+72)<=0) { file_mas[i] >< file_mas[j]; i++;}
}
EAX = i-1;
}*/
int partition1(dword a, b)
{
dword i = a; byte filename1[256], filename2[256]; int n;
dword offset=buf+72;
for (j = a; j <= b; j++)
{
//
copystr(file_mas[j]*304 + offset, #filename1);
copystr(file_mas[b]*304 + offset, #filename2);
n=strlen(#filename1)-1;
WHILE (filename1[n]<>'.') && (n>0) n--;
IF (n) copystr(#filename1+n+1, #filename1);
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++;}
}
EAX = i-1;
}
void Sort_by_Type(dword a, b) // äëÿ ïåðâîãî âûçîâà: a = 0, b = <ýëåìåíòîâ â ìàññèâå> - 1

View File

@ -3,12 +3,13 @@
#define fce "/sys/games/fce"
#define graph "graph"
#define htmlv "/sys/network/HTMLv"
#define jpegview "JpegView"
#define jpegview "jpegview"
#define kvid "/sys/kvid"
#define life2 "/sys/demos/life2"
#define midamp "MIDAMP"
#define mv "MV"
#define pngview "pngview"
#define midamp "/sys/multimedia/midamp"
//#define mv "MV"
#define mv "/sys/multimedia/imgview"
#define pngview "/sys/multimedia/pngview"
#define rtfread "RtfRead"
#define tinypad "TinyPad"
#define view3ds "/sys/demos/3d/view3ds"

View File

@ -3,7 +3,7 @@
#startaddress 0
#code32 TRUE
char os_name[8] = {'M','E','N','U','E','T','0','1'};
byte os_name[8] = {'M','E','N','U','E','T','0','1'};
dword os_version = 0x00000001;
dword start_addr = #main;
dword final_addr = #stop+32;
@ -31,9 +31,8 @@ char param[256]="";
int vert;
struct mouse{
int x,y,lkm,pkm;
int x,y,lkm,pkm,hor,vert;
void get();
};
@ -166,8 +165,8 @@ inline fastcall dword MoveSize(dword EBX,ECX,EDX,ESI){
//------------------------------------------------------------------------------
inline fastcall dword strlen(dword EDI){
ECX=EAX=0;
ECX--;
EAX=0;
ECX=-1;
$REPNE $SCASB
EAX-=2+ECX;
}