From e690f0cc4d8b023e0a08c76f24e79d272ad416fe Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Mon, 3 Nov 2008 13:10:35 +0000 Subject: [PATCH] Eolite, the lastest version git-svn-id: svn://kolibrios.org@898 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../fs/Eolite/trunk/Eolite_svn/Eolite.c-- | 723 ++++++++++++++++++ .../fs/Eolite/trunk/Eolite_svn/compile.bat | 4 + .../Eolite_svn/imgs/icons/Eolite-Sun.png | Bin 0 -> 9239 bytes .../trunk/Eolite_svn/imgs/icons/a_g.PNG | Bin 0 -> 328 bytes .../trunk/Eolite_svn/imgs/icons/dev.png | Bin 0 -> 1062 bytes .../Eolite_svn/imgs/icons/file_actions.png | Bin 0 -> 381 bytes .../trunk/Eolite_svn/imgs/icons/icons.png | Bin 0 -> 2162 bytes .../trunk/Eolite_svn/imgs/icons/toolbar.png | Bin 0 -> 2544 bytes .../fs/Eolite/trunk/Eolite_svn/imgs/imgs.zip | Bin 0 -> 29107 bytes .../trunk/Eolite_svn/include/LVabout.c-- | 129 ++++ .../trunk/Eolite_svn/include/icons_f.h-- | 68 ++ .../trunk/Eolite_svn/include/run_file.h-- | 92 +++ .../trunk/Eolite_svn/lib/edit_box_lib.h-- | 81 ++ .../Eolite/trunk/Eolite_svn/lib/kolibri.h-- | 392 ++++++++++ .../fs/Eolite/trunk/Eolite_svn/lib/memory.h-- | 36 + 15 files changed, 1525 insertions(+) create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/Eolite.c-- create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/compile.bat create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/imgs/icons/Eolite-Sun.png create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/imgs/icons/a_g.PNG create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/imgs/icons/dev.png create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/imgs/icons/file_actions.png create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/imgs/icons/icons.png create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/imgs/icons/toolbar.png create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/imgs/imgs.zip create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/include/LVabout.c-- create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/include/icons_f.h-- create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/include/run_file.h-- create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/lib/edit_box_lib.h-- create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/lib/kolibri.h-- create mode 100644 programs/fs/Eolite/trunk/Eolite_svn/lib/memory.h-- diff --git a/programs/fs/Eolite/trunk/Eolite_svn/Eolite.c-- b/programs/fs/Eolite/trunk/Eolite_svn/Eolite.c-- new file mode 100644 index 0000000000..15a8fcd12e --- /dev/null +++ b/programs/fs/Eolite/trunk/Eolite_svn/Eolite.c-- @@ -0,0 +1,723 @@ +//Leency & Veliant -=- KolibriOS Team -=- 2008 + +#codesize +#include "lib\kolibri.h--" +#include "lib\memory.h--" +#include "lib\edit_box_lib.h--" +#include "include\run_file.h--" +#include "include\icons_f.h--" +#include "imgs\toolbar_new.cpp" +#include "imgs\left_p.cpp" + +//локализация и настройки +byte header[27] = "Eolite File Manager v0.96.7"; +#define videlenie 0x94AECE; //цвет выделенного элемента из списка файлов +int toolbar_buttons_x[6]={14,51,90,139,172,208}; +// +dword but_num=0, kolichestvo=0, curbtn=0, za_kadrom=0; +byte cut_active, rename_active, del_active; +byte show_actions=1, show_preview=0, sort_num=1, isdir; +dword razm_scrl; //для скрола +byte path[256]="/rd/1/", edit_path[256], PathHistory[2560], temp[256]; //для путей +byte file_path[256], file_name[256]; //для файлов +byte copyfile[256],copy_name[256]; //копирование +dword i; //для циклов +dword file_mas[6898]; //список файлов +dword temp_int; +dword stak[100]=0; //окно About + +edit_box edit1= {250,252,17,0xffffff,0x94AECE,0xD3DDEB,0xffffff,0,248,#edit_path,64,6,6}; +edit_box edit2= {250,218,80,0xFFFFCC,0x94AECE,0xFFFFCC,0xffffff,0,248,#file_name,64,6,6}; + +proc_info Form; + +struct { + int func; + int pos; + int rezerv; + int sizefile; + int buffer; + char rezerv2; + int stroka; +}open_file_70; +dword buf=0, off; //для текста и буфера +dword devbuf=0, dev_num; +#include "include\LVabout.c--" + + +void main() +byte pressed, key, id; +mouse m; +{ + devbuf= malloc(3112); //буфер где-то на 10 девайсов в левой панели + open_file_70.func = 1; + open_file_70.pos = 0; + open_file_70.rezerv = 0; + open_file_70.sizefile = 10; + open_file_70.buffer = devbuf; + open_file_70.rezerv2 = 0; + open_file_70.stroka = "/"; + $mov eax,70 + $mov ebx,#open_file_70.func + $int 0x40 + dev_num=EBX; + load_dll(); //подгружает либу с едит_боксом + IF (param[0]<>'') {copystr(#param,#edit_path); Goto_edit_path();} + Open_Dir(#path,2); + SetEventMask(); + loop() + { + switch(WaitEvent()) + { + CASE evMouse: + id = 0; + IF (del_active==1) break; + m.get(); + // + 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.pkm==1) && (m.x>197) && (m.x56) + // IF (m.y-skin_width-56/18<>curbtn) FileList_ReDraw(m.y-skin_width-56/18-curbtn); + //скролл + IF (m.y>Form.width) || (57+razm_scrl>m.y) m.y=57+razm_scrl; //если курсор над окном + IF (m.lkm==0) pressed=0; ELSE + IF (m.x>=Form.width-21) && (m.x<=Form.width-6) pressed=1; + IF (pressed==1) + { + temp_int=za_kadrom; //сохраняем старое количество + za_kadrom = m.y -57-razm_scrl * kolichestvo / onTop(22,57); + IF (but_num+za_kadrom>kolichestvo) za_kadrom=kolichestvo-but_num; + IF (temp_int<>za_kadrom) List_ReDraw(); //чтоб лишний раз не перерисовывать + } + break; +//Button pressed----------------------------------------------------------------------------- + case evButton: + IF (edit1.flags<>64) {edit1.flags=64; edit_box_draw stdcall(#edit1);} //сбрасываем выделение при нажатии на батон + id=GetButtonID(); + IF (id==1) ExitProcess(); + IF (del_active==1) {IF (id==301) || (id==302) Del_File(302-id); break;} + switch(id) + { + CASE 21: GoBack(); break;//Назад + CASE 23: IF (strcmp(#path,"/")<>0) Dir_Up(); break;//up! + CASE 24: key=24; //cut + CASE 25: goto CTRLC_MARK; //copy + CASE 26: Paste(); break;//paste + CASE 27: Goto_edit_path(); break; //goto edit_path + CASE 31...33: //sort + IF (sort_num==id-30) break; + IF(sort_num==1)DrawBar(onLeft(197,163)/2+215,45,6,9,0xE4DFE1); + IF(sort_num==2)DrawBar(onLeft(110,0),45,6,9,0xE4DFE1); + IF(sort_num==3)DrawBar(onLeft(39,0),45,6,9,0xE4DFE1); + sort_num=id-30; + Open_Dir(#path,1); + break; + case 30: //about + EAX = 51; EBX = 1; + ECX = #authors; EDX = #stak; + $int 40h; + break; + case 50: //стрелка вверх на скроле + FileList_ReDraw(-1); + BREAK; + case 51: //стрелка вниз на скроле + FileList_ReDraw(1); + BREAK; + case 78: //preview + IF (show_preview==1) show_preview=0; ELSE show_preview=1; + Preview(); + BREAK; + case 77: //actions + IF (show_actions==1) show_actions=0; ELSE show_actions=1; + Actions(); Preview(); + BREAK; + case 80: goto REN_MARK; //rename + case 81: Del_Form(); BREAK;//Delete file + } + if (id>200) //кнопки из списка файлов + { + IF (curbtn!=id-201) {FileList_ReDraw(id-201-curbtn); break;} + else OPEN_MARK: + if (!isdir) Run_File(#file_path); else + if (strcmp(za_kadrom+curbtn+1*304 + buf+72,"..")==0) Dir_Up(); else + { OPEN_DEV: + copystr(#file_path, #path); + copystr("/", #path+strlen(#path)); + DrawBar(197,curbtn*18+57,onLeft(22,197),18,0xFFFFFF); //закрашиваем старое выделение + za_kadrom=curbtn=0; + Open_Dir(#path,1); + } + break; + } + if (id>=100) && (id<130) //подключённые носители информации + { DEVICE_MARK: + copystr(id-100*304+ devbuf+72, #path); + IF (strcmp(#path,"rd")==0) copystr("/rd/1",#file_path); + ELSE { + copystr("/", #file_path); + copystr(#path, #file_path+strlen(#file_path)); + } + GOTO OPEN_DEV; + } + break; +//Key pressed----------------------------------------------------------------------------- + case evKey: + key = GetKey(); + IF (del_active==1) + { + IF (key==013) Del_File(true); + IF (key==027) Del_File(false); + break; + } + IF (edit1.flags<>64) || (edit2.flags<>64) SWITCH (key) { CASE 8: CASE 180...182: CASE 051...056: goto EDIT_KEY_MARK; } //1..10 и ноум/енд в едитбоксах + switch (key) + { + case 209...217: id=key-109; IF(dev_num>id-100)GOTO DEVICE_MARK; break; + case 8: GoBack(); break; //Назад + case 014: MoveSize(80,80,OLD,OLD); Run_Program("/sys/File Managers/Eolite", #path); break; //новое окно + case 024: //Ctrl+X cut + case 089: //Ctrl+Ins copy + case 003: //Ctrl+C copy + CTRLC_MARK: + IF (isdir) break; //папки пока что копировать не умеем + copystr(#file_name,#copy_name); + copystr(#file_path,#copyfile); //вычисляем какой файл копировать + IF (key==24) cut_active=1; ELSE cut_active=0; + break; + case 022: Paste(); break;//Ctrl+V paste + case 027: //Esc + IF (rename_active==1) Line_ReDraw(videlenie, 100); + break; + case 013: //Enter + IF (rename_active==1) {Line_ReDraw(videlenie, curbtn); break;} + IF (strcmp(#path,#edit_path)<>0) Goto_edit_path(); + ELSE GOTO OPEN_MARK; + break; + case 56: //IF (rename_active==1) break;//up + case 178: //up + FileList_ReDraw(-1); + break; + case 177: //down + FileList_ReDraw(1); + break; + case 180: //home + FileList_ReDraw(-za_kadrom-curbtn); + break; + case 181: //end + FileList_ReDraw(kolichestvo-za_kadrom-curbtn+but_num); + break; + case 183: //Page Down + FileList_ReDraw(but_num-1); + break; + case 184: //Page Up + FileList_ReDraw(-but_num+1); + break; + case 051: //Нажата F2 + REN_MARK: + IF (isdir==1) break; //папки пока что копировать не умеем + edit2.flags=66; //делаем компонент активным + DeleteButton(curbtn+201); //это чтоб можно было выделять мышью + edit2.width=onLeft(24,217); + edit2.top=curbtn*18+59+skin_width; + edit2.size=strlen(#file_name); edit2.pos=strlen(#file_name); + edit_box_draw stdcall (#edit2); + DrawBar(218,curbtn*18+58,edit2.width+1,1,0xFFFFCC); //полоса желтая сверху для одинаковости + rename_active=1; + BREAK; + case 052: //Нажата F3 + IF (isdir==false) Run_Program("/sys/tinypad", #file_path); BREAK; + case 054: Open_Dir(#path,1); BREAK; //перерисовать окно F5 + case 182: Del_Form(); BREAK; //delete file + default: EDIT_KEY_MARK: + EAX=key <<8; + IF (rename_active==0) edit_box_key stdcall (#edit1); ELSE edit_box_key stdcall (#edit2); + } + break; + case evReDraw: draw_window(); BREAK; + } + IF (rename_active==0) edit_box_mouse stdcall(#edit1); ELSE edit_box_mouse stdcall(#edit2); + } + free(buf); //free memory + ExitProcess(); +} + + +inline fastcall void draw_window() +{ + WindowRedrawStatus(1); + skin_width = GetSkinWidth(); + DefineAndDrawWindow(100,100,600,410,0x43,0x10E4DFE1,0,0,#header); //DrawTitle(#header); + Form.getme(); + IF (Form.height==skin_width+3) {WindowRedrawStatus(2); return;} //это зачёт! + IF (Form.height<280) MoveSize(OLD,OLD,OLD,280); + IF (Form.width<480) MoveSize(OLD,OLD,480,OLD); + //toolbar buttons + PutImage(#toolbar,246,39,5,0); + FOR (j=0; j<6; j++) DefineButton(toolbar_buttons_x[j],5,31,29,21+j+BT_HIDE,0xE4DFE1); + //полоса адреса + DrawBar(251,0,onLeft(251,60),12,0xE4DFE1); //фон над полосой адреса + edit1.width=Form.width-314; + edit1.top=13+skin_width; + KEdit(); + DrawRegion(251,12,onLeft(61,251),16,0x94AECE); //ободок + DrawBar(251,29,onLeft(251,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); //кнопка перехода + PutImage(#goto_about,56,40,onLeft(60,0),0); + //прямоугольники внутри + DrawRegion(6,40,Form.width-12,Form.height-skin_width-46,0x94AECE); //синий ободок + DrawRegion(5,39,Form.width-10,Form.height-skin_width-44,0xE4DFE1); //фон + Devices(); //панель слева на синем фоне + //Buttons + DrawFlatButton(197,40,onLeft(197,163),16,31,0xE4DFE1,"File"); + DrawFlatButton(onLeft(163,0),40,73,16,32,0xE4DFE1,"Type"); + DrawFlatButton(onLeft(90,0),40,68,16,33,0xE4DFE1,"Size"); + IF (sort_num==1) WriteText(onLeft(197,163)/2+197+18,45,0x80,0x4E78AC,"\x19",0); + ELSE IF (sort_num==2) WriteText(onLeft(110,0),45,0x80,0x4E78AC,"\x19",0); + ELSE WriteText(onLeft(39,0),45,0x80,0x4E78AC,"\x19",0); + //прокрутка + DrawFlatButton(onLeft(22,0),40,16,16,50,0xE4DFE1,"\x18"); //прокрутка вверх + DrawFlatButton(onLeft(22,0),onTop(22,0),16,16,51,0xE4DFE1,"\x19");//прокрутка вниз + DrawBar(onLeft(22,0),57,1,onTop(22,57),0x94AECE); //линия слева от прокрутки + but_num=onTop(6,57)/18; + IF (but_num>100) but_num=1; ELSE IF (kolichestvoonTop(22,57)-on_y+56) || (za_kadrom+but_num>=kolichestvo) on_y=onTop(23+razm_scrl,0); //для большого списка + DrawFlatButton(onLeft(22,0),on_y,16,razm_scrl,0,0xE4DFE1,"");//ползунок + DrawBar(onLeft(21,0),57,15,on_y-57,0xCED0D0);//поле до ползунка + DrawBar(onLeft(21,0),on_y+razm_scrl+1,15,onTop(22,57)-razm_scrl-on_y+56,0xCED0D0); //поле после ползунка +} + + +void FileList_ReDraw(int curbtn_) +{ + if (curbtn_<=0) //вверх + { + IF (za_kadrom==0) && (curbtn==0) return; + IF (-curbtn_-1curbtn_) + { + Line_ReDraw(0xFFFFFF, curbtn); //белая полоса + curbtn+=curbtn_; + Line_ReDraw(videlenie, curbtn); //выделение + return; + } + ELSE + { + IF(but_num+za_kadrom+curbtn_>=kolichestvo) za_kadrom=kolichestvo-but_num; ELSE za_kadrom+=curbtn_+curbtn-but_num+1; + curbtn=but_num; + List_ReDraw(); + } + } +} + + +void List_ReDraw() +{ + IF (kolichestvo-za_kadrombut_num-1) curbtn=but_num-1; //это если выделение после схлопывания окна за кадром + // + FOR (j=0; jj) Line_ReDraw(0xFFFFFF, j); ELSE Line_ReDraw(videlenie, curbtn); + temp_int=but_num-1*18+75; + DrawBar(197,temp_int,onLeft(22,197),onTop(temp_int,6),0xFFFFFF); //заливка белым доконца + DrawBar(onLeft(163,0),temp_int,1,onTop(temp_int,6),0xE4DFE1); //полоса серая вертикальная 1 + DrawBar(onLeft(90,0),temp_int,1,onTop(temp_int,6),0xE4DFE1); //полоса серая вертикальная 2 + TVScroll(); +} + + +void Line_ReDraw(dword color, filenum){ + dword y, size; + if (rename_active==1) + { + rename_active=0; + edit2.flags=64; + DefineButton(197,curbtn+1*18+39,onLeft(22,197),18,curbtn+201+BT_HIDE+BT_NOFRAME,0xFFFFFF); + IF (filenum==100) filenum=curbtn; ELSE + { + copystr(#path,#temp); + copystr(#file_name,#temp+strlen(#temp)); + IF (strcmp(#file_path,#temp)<>0) && (strlen(#file_name)>0) + { CopyFile(#file_path,#temp); Del_File(true); } + } + } + DrawBar(197,filenum*18+57,onLeft(22,197),18,color); //полоса белая или выделения + // + y= filenum*18+85; //положение текста по Y + IF (strcmp(".",buf+72)<>0) off=file_mas[filenum+za_kadrom]*304 + buf+72; ELSE off=file_mas[filenum+za_kadrom+1]*304 + buf+72; + temp_int = onLeft(220,160)/6; + IF (strlen(off)", y); + IF (color==videlenie) + { + IconFairing(temp_int, y, videlenie); //закрашиваем иконку + copystr(#path,#file_path); + copystr(off,#file_name); + copystr(off,#file_path+strlen(#file_path)); //итак, file_path=файлу, т.к. по-умолчанию это прога + } + DrawBar(onLeft(163,0),filenum*18+57,1,18,0xE4DFE1); //полоса серая вертикальная 1 + DrawBar(onLeft(90,0),filenum*18+57,1,18,0xE4DFE1); //полоса серая вертикальная 2 + //Preview(); +} + + +void Open_Dir(dword path_,redraw){ + IF (buf) free(buf); + //open_file_70.func = 1; //а нафига, они сверху есть... + //open_file_70.pos = 0; + //open_file_70.rezerv = 0; + open_file_70.sizefile = 6898; + buf = malloc(2097152); + open_file_70.buffer = buf; + //open_file_70.rezerv2 = 0; + open_file_70.stroka = path_; + $mov eax,70 + $mov ebx,#open_file_70.func + $int 0x40 + kolichestvo=EBX; + // + if (kolichestvo<>-1) && (redraw>0) + { + FOR (j=0;j0) ChangeCase(off);} //регистр + FOR (j=0;j100) but_num=1; ELSE//эта странная строчка для того если размеры окна слишком маленькие + IF (kolichestvo0) && (strlen(#path)>6) kolichestvo--; //фак! это бред! хз как оно работает + FOR (i=0;i<=kolichestvo;i++) //а папки всё выше и выше... + { + EAX=ESDWORD[off-40]; + $shr eax,4 + $and eax,1 + IF (EAX) {file_mas[k]=i; k++;} + ELSE {file_mas[kolichestvo-l]=i; l++;} + off += 304; + } + //k=0; l=kolichestvo; + switch(sort_num) + { + CASE 1: //упорядочиваем файлы по имени + WriteText(onLeft(197,163)/2+215,45,0x80,0x4E78AC,"\x19",0); + IF (strcmp(#path,"/")==0) break; + IF (strcmp("..",buf+72+304)<>0) Sort_by_Name(k,kolichestvo-1); ELSE Sort_by_Name(k,kolichestvo); + break; + case 2: //упорядочиваем файлы по типу + WriteText(onLeft(110,0),45,0x80,0x4E78AC,"\x19",0); + IF (strcmp("..",buf+72+304)<>0) Sort_by_Type(k, kolichestvo-1); ELSE Sort_by_Type(k, kolichestvo); + break; + case 3: + WriteText(onLeft(39,0),45,0x80,0x4E78AC,"\x19",0); + IF (strcmp("..",buf+72+304)<>0) Sort_by_Size(k,kolichestvo-1); ELSE Sort_by_Size(k,kolichestvo); + BREAK; + } + IF (strcmp(#path,"/")<>0) IF (strcmp("..",304+buf+72)<>0) Sort_by_Name(0,k-1); ELSE Sort_by_Name(2,k-1); //иногда имя папки начинается с !,&... + IF (strcmp(".",buf+72)<>0) && (strlen(#path)>6) kolichestvo++; +} + + +dword onLeft(dword right,left) {return Form.width-right-left;} +dword onTop(dword down,up) {return Form.height-skin_width-down-up;} + + +void Del_Form() +{ + IF (isdir==true) return; //папки пока что удалять не умеем + temp_int=Form.width-200+197/2; + //типа окно + FOR (i=5;i<11;i++) DeleteButton(201+i); //удаляем кнопки под формой + DrawFlatButton(temp_int,160,200,80,0,0xE4DFE1, ""); //форма + WriteText(temp_int+19,175,0x80,0,"Do you really want to delete",28); + IF (strlen(#file_name)<28) + { + WriteText(strlen(#file_name)*6+temp_int+20,190,0x80,0,"?",1); + WriteText(temp_int+20,190,0x80,0,#file_name,24); //пишем имя + } + ELSE + { + WriteText(164+temp_int,190,0x80,0,"...?",4); + WriteText(temp_int+20,190,0,0,#file_name,24); //пишем имя + } + //кнопочки + DrawFlatButton(temp_int+20,208,70,20,301,0xFFB6B5,"Yes"); + DrawFlatButton(temp_int+111,208,70,20,302,0xC6DFC6,"No"); + del_active=1; +} + +void Del_File(byte dodel) +{ + IF (dodel==true){ + run_file_70.func = 8; + run_file_70.flag = 0; + run_file_70.param= 0; + run_file_70.rez1 = 0; + run_file_70.rez2 = 0; + run_file_70.rezerv2 = 0; + run_file_70.stroka = #file_path; + $mov eax,70 + $mov ebx,#run_file_70.func + $int 0x40} + del_active=0; + DeleteButton(301); DeleteButton(302); //удаляем кнопочки Yes/No + Open_Dir(#path,1); +} + + +void Paste() +{ + IF (strcmp(#copyfile,"")==0) return; //отмена, еши ещё ничё не скопировали + copystr(#path,#temp); + copystr(#copy_name,#temp+strlen(#temp)); + if (strcmp(#copyfile,#temp)==0) //если мы копируем и вставляем в одной и той же папке + { + copystr(#path,#temp); + copystr("new_",#temp+strlen(#temp)); + copystr(#copy_name,#temp+strlen(#temp)); + } + CopyFile(#copyfile,#temp); + IF (cut_active==1) //если мы выбрали вырезать + { + copystr(#copyfile,#file_path); + Del_File(true); + copyfile=''; + cut_active=0; + } + Open_Dir(#path,1); +} + + +void Tip(int y, dword caption, id, arrow) +{ + DrawBar(22,y,160,17,0xE4DFE1); //серое сверху + WriteText(30,y+5,0x80,0,caption,0); //text Goto: + IF (id<>0) DefineButton(164,y+1,16,16,id+BT_HIDE+BT_NOFRAME,0xE4DFE1); //кнопа для стрелки + WriteText(170,y+5,0x80,0,arrow,0); //стрелка вниз + DrawBar(22,y+17,160,1,0x94AECE); //подчёркивание +} + + +void Devices() +{ + byte dev_icon; dword drive_name[30]; char dev_name[4]; + DrawBar(7,41,190,15,0x00699C); //синий прямоугольник - сверху + DrawBar(7,56,15,onTop(21,41),0x00699C); //синий прямоугольник - слева + DrawBar(182,56,15,onTop(21,41),0x00699C); //синий прямоугольник - справа + //список дисков + Tip(56, "Goto:", 0, ""); + DrawBar(22,74,160,dev_num*16+1,0xFFFFFF); //белое + for (i=0;i",0); + //delete file + DefineButton(22,dev_num*16+125,159,16,81+BT_HIDE,0xE4DFE1); + WriteText(47,dev_num*16+130,0x80,0,"Delete file ",0); + //create folder + DefineButton(22,dev_num*16+142,159,16,82+BT_HIDE,0xE4DFE1); + WriteText(47,dev_num*16+147,0x80,0,"Create folder ",0); + DrawBar(22,dev_num*16+159,160,15,0x00699C); //синее после Actions + } + ELSE + { + DeleteButton(80); DeleteButton(81); DeleteButton(82); + Tip(dev_num*16+90, "Actions", 77, "\x18"); + DrawBar(22,dev_num*16+108,160,51,0x00699C); //синее + } +} + + +/*void Dir_Up() +{ + byte 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; i>0; i--;) IF(strcmp(file_mas[i]*304+buf+72,#temp_)==0) BREAK; + // + IF (i0) za_kadrom=i; ELSE za_kadrom=i-1;} + ELSE {za_kadrom=kolichestvo-but_num; curbtn=i-kolichestvo+but_num;} + List_ReDraw(); +}*/ + +/*void Dir_Up() +{ + i=strlen(#path)-1; + do i--; while (path[i]<>'/'); + path[i+1]=0x00; + za_kadrom=0; curbtn=0; //вверх списка + Open_Dir(#path,1); +}*/ + +//баг - если сверху, то сверху,а не снизу +void Dir_Up() +{ + byte 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; i>0; i--;) IF(strcmp(file_mas[i]*304+buf+72,#temp_)==0) BREAK; + // + if (i>kolichestvo-but_num) + { + za_kadrom=kolichestvo-but_num; + IF (strcmp(".",buf+72)<>0) curbtn=i-kolichestvo+but_num; ELSE curbtn=i-kolichestvo+but_num-1; + } + ELSE IF (strcmp(".",buf+72)<>0) FileList_ReDraw(i); ELSE FileList_ReDraw(i-1); + List_ReDraw(); +} + + +void Preview() +{ + dword top_pr=dev_num*16+123; + top_pr+=show_actions*51; //ничинаем ниже, если Акшнс видимы + DeleteButton(78); + if (show_preview==1) + { + Tip(top_pr,"Preview",78,"\x19"); + DrawBar(22,top_pr+18,160,100,0xFFFFFF); //белое + //WriteText(30,top_pr+30,0x80,0,"kolichestvo:",0); WriteText(105,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); + //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... Yet.",0); + //WriteText(30,top_pr+70,0x80,0,"Nable, I'm waiting (:",0); + DrawBar(22,top_pr+118,160,onTop(top_pr+118,6),0x00699C); //синее + } + ELSE { + Tip(top_pr,"Preview",78,"\x18"); + DrawBar(22,top_pr+18,160,onTop(top_pr+18,6),0x00699C); //синее + } +} + + +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 //просто очищаем полосу адреса + {za_kadrom=curbtn=0; copystr(#edit_path,#path);}//наверх списка + Open_Dir(#path,1); +} + + +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; 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 literal 0 HcmV?d00001 diff --git a/programs/fs/Eolite/trunk/Eolite_svn/imgs/icons/a_g.PNG b/programs/fs/Eolite/trunk/Eolite_svn/imgs/icons/a_g.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d4a2012b1e5786edb414a3c215927656d5575406 GIT binary patch literal 328 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�t)KlbW5pYk6+%`m z2u%%Imr+vgR@XMbQR!eI{9I%HlO(S%=vH1QqLn)uI_8OEybXjwb4;hiR%B92q#1I7 ztSY$?$vTOzUh^xtG&7E7$vqlDY?Ob~MzwU_=f8#s(6{yTY|OV%eX=yxDi&Y^!lg0b z^!-ugd&yy{1j|%Q67sOLwilyb{5 z1ZBE%nTF&xT>7>y#TZ2t%-dehhwvwI+N4^ZLGGP+^|5Uy50;11of<%u4yK+VwyBZK z?u&>(P%x3K5DbHI;PCyFmUq-v9zeqHFaw%%LrZCFXc?g8;hCfT^qahnwZ~IfS{rXk zj-ugnqp{f|j*8h5TH_8i3bIZR^NLmz9dDjsIVzlDU!)4)~_LiGFEwbQYtQ0)+m&>HSkhtR(z+9rDZj>au4vd z9Q(uODe=;?(onEVp|25a`o3n?4 z$fU^Dv?yzcG>~(#?3DG5Ee^ls5dnHX9FULN=s5p@IbY}IubE%!PTot4s_KmY*6+UG zt7)qwfPp-PWdcArW2@_KS`Ka)HLuzi-&c@2RqFW(N{l=lQ#R-uNGAwgzC+#av+0gc1*@=+lyd^c0 z+{st!_hA*Q96mHLCZWqmt2`?%_#I~K6P6K4noOltvMEcT3Gk>R5nro}VuY~UP_9aqET)*?~OcwG%PbgXQqeAIHN*1xY#A8`8q z%^evkp``wk>_Q}RW4FtI5l{`OY;@5-d-`k#_v|SJn~3Gac~*UQC~zj44P}qtCnXn{ z@Mq$(*CUNDfiPi*eiO&_CNg1Io)b^so5|Xs1$M>^&X=#Q3>4_co?%Bll+J>_F5bTI zGTn~lCYh=DT;dFG98L=5f<^gGHa~s0k=<&U>l0sl=joRYOd%lm_P$sYZdR6z^!5=v zlbpEkOxjjWWEhc)F=RGj_`-gSSt%klIClRuQ>F`T4Ab)UB&*?f%rVS#oZj(3mR_2? zmp_VOW_~mz77YKS5HH81v<3@Q`f|sZh54E!s~^3lV8+<(DaynN)d>~L#3AjiM^!AI z?sK^FTrI$GZuJLeHiq%CbEdBg8(hk0YpFmD>F0N5lF;n}KFjZgz4Jx8T(8*;&Ys7+ zSgbe(PN90_KFyZwxb~*PKKZsd_w$2yYX$++*cZaFQ2r{*Eu%UD%(Hbt`{e9f zlH>*4GqhdwLx%ig^aWH4q5S`*?&!3C0|3lO@*$`q6F=!civLs1^_0qA?Ydq9KQO8* zp<_^>{olVqh=w}Q(VqT2p$^-BeUb1#$^N@s{eK_+Cm9Lpe`fCgPrCmu5$(U}>}da; zmi9lX{=04L|E4nI{XaIf|0m&p7jE)z!ZX$XP57_i6Llpl?7t6Sp?-AeXlNlWe@p)h D)@hh| literal 0 HcmV?d00001 diff --git a/programs/fs/Eolite/trunk/Eolite_svn/include/LVabout.c-- b/programs/fs/Eolite/trunk/Eolite_svn/include/LVabout.c-- new file mode 100644 index 0000000000..af5b1b9ec3 --- /dev/null +++ b/programs/fs/Eolite/trunk/Eolite_svn/include/LVabout.c-- @@ -0,0 +1,129 @@ +#include "imgs\logo.cpp" + +/*void authors() +{ + _HH: + WindowRedrawStatus(1); + DefineAndDrawWindow(500,200,181,256,0x04,0x10EFEBEF,0,0,"About Eolite"); + //DrawTitle("About Eolite"); + DrawBar(5,0,172,50,0x8494C4); //голубое сзади + PutImage(#logo,85,85,48,7); + WriteText(32,100,0x80,0xBF40BF,"Eolite v0.96.4 beta7",0); + WriteText(68,120,0x80,0,"Authors:",0); + WriteText(44,130,0x80,0,"Leency & Veliant",0); + WriteText(50,140,0x80,0,"KolibriOS Team",0); + WriteText(26,160,0x80,0,"Made using C-- in 2008",0); + WriteText(23,170,0x80,0,"Visit www.kolibrios.org",0); + DrawFlatButton(90,190,70,22,2,0x00D7D7D7, "Close"); + WindowRedrawStatus(2); + loop() + { + SWITCH(WaitEvent()) + { + CASE evButton: ExitProcess(); + CASE evKey: IF (GetKey()==27) ExitProcess(); break; + CASE evReDraw: GOTO _HH; + BREAK; + } + } + ExitProcess(); +}*/ + + +void authors() +{ + loop() + { + switch(WaitEvent()) + { + CASE evButton: ExitProcess(); + CASE evKey: IF (GetKey()==27) ExitProcess(); break; + CASE evReDraw: + WindowRedrawStatus(1); + DefineAndDrawWindow(500,200,181,256,0x04,0x10EFEBEF,0,0,"About Eolite"); + //DrawTitle("About Eolite"); + DrawBar(5,0,172,50,0x8494C4); //голубое сзади + PutImage(#logo,85,85,48,7); + WriteText(32,100,0x80,0xBF40BF,"Eolite v0.96.7 beta7",0); + WriteText(68,120,0x80,0,"Authors:",0); + WriteText(44,130,0x80,0,"Leency & Veliant",0); + WriteText(50,140,0x80,0,"KolibriOS Team",0); + WriteText(26,160,0x80,0,"Made using C-- in 2008",0); + WriteText(23,170,0x80,0,"Visit www.kolibrios.org",0); + DrawFlatButton(90,190,70,22,2,0x00D7D7D7, "Close"); + WindowRedrawStatus(2); + } + } + //ExitProcess(); +} + + +dword ConvertSize(dword bytes) +{ + byte size_prefix[7], 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; + copystr(IntToStr(bytes),#size_prefix); + copystr(#temp,#size_prefix+strlen(#size_prefix)); + EAX=#size_prefix; +} + + +void Sort_by_Size(int a, b) // для первого вызова: a = 0, b = <элементов в массиве> - 1 +{ + int i= a; + IF (a >= b) return; + FOR (j = a; j <= b; j++) + { + IF (ESDWORD[file_mas[j]*304 + buf+72-8] <= ESDWORD[file_mas[b]*304 + buf+72-8]) + { file_mas[i] >< file_mas[j]; i++;} + } + Sort_by_Size (a, i-2); + Sort_by_Size (i, b); +} + + +void Sort_by_Name(int a, b) // для первого вызова: a = 0, b = <элементов в массиве> - 1 +{ + int i = 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); +} + + +int partition1(dword a, b) +{ + dword i = a; byte filename1[256], filename2[256]; int n; + for (j = a; j <= b; j++) + { + // + copystr(file_mas[j]*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); + 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 + buf+72, file_mas[b]*304 + buf+72)<=0) { file_mas[i] >< file_mas[j]; i++;} + } + EAX = i-1; +} + +void Sort_by_Type(dword a, b) // для первого вызова: a = 0, b = <элементов в массиве> - 1 +{ + int c; + IF (a >= b) RETURN; + c = partition1(a, b); + Sort_by_Type(a, c-1); + Sort_by_Type(c+1, b); +} diff --git a/programs/fs/Eolite/trunk/Eolite_svn/include/icons_f.h-- b/programs/fs/Eolite/trunk/Eolite_svn/include/icons_f.h-- new file mode 100644 index 0000000000..edbeeadc84 --- /dev/null +++ b/programs/fs/Eolite/trunk/Eolite_svn/include/icons_f.h-- @@ -0,0 +1,68 @@ +void IconFairing(dword filenum, y, videlenie) +{ + if (filenum<5) //файлик + { + DrawBar(200,y-26,2,15,videlenie); + DrawBar(214,y-26,2,15,videlenie); + DrawBar(210,y-26,4,1,videlenie);//ле + DrawBar(211,y-25,3,1,videlenie);//сен + DrawBar(212,y-24,2,1,videlenie);//ка + DrawBar(213,y-23,1,1,videlenie);// + } + if (filenum==16) || (filenum==17) //папка + { + DrawBar(201,y-13,15,2,videlenie); //снизу линия + DrawBar(200,y-26,1,15,videlenie); //слева линия + DrawBar(208,y-26,8,2,videlenie); //сверху справа линия + IF (filenum==17) DrawBar(211,y-25,1,1,0x1A7B17); //зелёная точка стрелки + //.точки + PutPixel(201,y-26+skin_width,videlenie); //сверху слева точка + PutPixel(207,y-26+skin_width,videlenie); //сверху справа точка + PutPixel(201,y-14+skin_width,videlenie); //слева снизу точка + PutPixel(215,y-14+skin_width,videlenie); //справа снизу точка + PutPixel(215,y-24+skin_width,videlenie); //какая разница где + } + IF (filenum==13) PutPixel(215,y-26+skin_width,videlenie); //skin + IF (filenum==14) {DrawBar(200,y-26,1,15,videlenie); DrawBar(215,y-26,1,15,videlenie);} //video +} + +dword Put_icon(dword extension, yy) +{ + dword ftype="", fnum=0; //еши неизвесный файл + IF (strcmp(extension,".kex")==0) {fnum = 6; ftype="Program";} + IF (strcmp(extension,".cvs")==0) {fnum = 18; ftype="Graph";} + IF (strcmp(extension,".cmd")==0) {fnum = 5; ftype="CMD skript";} + IF (strcmp(extension,".skn")==0) {fnum = 13; ftype="Skin";} + IF (strcmp(extension,".chr")==0) {fnum = 10; ftype="Font";} + IF (strcmp(extension,".avi")==0) {fnum = 14; ftype="Video";} + IF (strcmp(extension,".asm")==0) {fnum = 11; ftype="Source";} + IF (strcmp(extension,".inc")==0) fnum = 9; + IF (strcmp(extension,".exe")==0) {fnum = 7; ftype="Win32 Exec";} + IF (strcmp(extension,".dll")==0) || (strcmp(extension,".obj")==0) {fnum = 8; ftype="Library";} + IF (strcmp(extension,".ini")==0) || (strcmp(extension,"conf")==0) {fnum = 8; ftype="Config";} + IF (strcmp(extension,".htm")==0) || (strcmp(extension,"html")==0) {fnum = 2; ftype="Web-page";} + //text + IF (strcmp(extension,".txt")==0) {fnum = 1; ftype="Text";} + IF (strcmp(extension,".doc")==0) {fnum = 1; ftype="Text";} + IF (strcmp(extension,".rtf")==0) {fnum = 1; ftype="Text";} + //изображения + IF (strcmp(extension,".gif")==0) || (strcmp(extension,".bmp")==0) || + (strcmp(extension,".tga")==0) || (strcmp(extension,".pcx")==0) || + (strcmp(extension,".png")==0) || (strcmp(extension,".jpg")==0) || + (strcmp(extension,"jpeg")==0) || (strcmp(extension,".raw")==0) {fnum = 3; ftype="Image";} + //архивы + IF (strcmp(extension,".rar")==0) || (strcmp(extension,".zip")==0) || + (strcmp(extension,".cab")==0) || (strcmp(extension,".tar")==0) || + (strcmp(extension,".ajr")==0) {fnum = 15; ftype="Archive";} + //audio + IF (strcmp(extension,".mp3")==0) {fnum = 12; ftype="Music";} + IF (strcmp(extension,".wav")==0) || (strcmp(extension,".mid")==0) || + (strcmp(extension,"midi")==0) || (strcmp(extension,".ogg")==0) {fnum = 12; ftype="Audio";} + //папка + IF (strcmp(extension,"")==0) || (strcmp(extension," ")==0) + { fnum=21-strlen(extension); WriteText(onLeft(140,0),yy-22,0x80,0,extension,0);} + // + PutImage(fnum*16*15*3+#ficons,16,15,200,yy-26); + WriteText(onLeft(155,0),yy-22,0x80,0,ftype,0); + return fnum; +} diff --git a/programs/fs/Eolite/trunk/Eolite_svn/include/run_file.h-- b/programs/fs/Eolite/trunk/Eolite_svn/include/run_file.h-- new file mode 100644 index 0000000000..f9cb423eba --- /dev/null +++ b/programs/fs/Eolite/trunk/Eolite_svn/include/run_file.h-- @@ -0,0 +1,92 @@ +#include "imgs\icons.cpp" + +struct { + int func; + int flag; + int param; + int rez1; + int rez2; + char rezerv2; + int stroka; +}run_file_70; + + +/////////////////////////// +// Запуск программы // +/////////////////////////// +void Run_Program(dword run_path, run_param) +{ + run_file_70.func = 7; + run_file_70.flag = 0; + run_file_70.param= run_param; + run_file_70.rez1 = 0; + run_file_70.rez2 = 0; + run_file_70.rezerv2 = 0; + run_file_70.stroka = run_path; + $mov eax,70 + $mov ebx,#run_file_70.func + $int 0x40 +} + + +/*char *extension[25]={".skn",".avi",".htm","html",".3ds",".lif",".cvs",".mp3", +".wav",".mid","midi",".rtf",".txt",".inc",".ini",".dat",".asm",".gif",".bmp", +".tga",".pcx",".png",".jpg","jpeg", 0}; //массив указателей +char *prog_path[25]={"desktop","/sys/kvid","/sys/network/HTMLv","/sys/network/HTMLv", +"/sys/demos/3d/view3ds","/sys/demos/life2","graph","AC97SND","AC97SND","MIDAMP", +"MIDAMP","RtfRead","TinyPad","TinyPad","TinyPad","TinyPad","TinyPad","MV","MV", +"MV","MV","@rcher","JpegView","JpegView", 0}; + + +void Run_File(dword fpath) +{ + byte i; + dword file_ext[4]=fpath+strlen(fpath)-4; + FOR(i=0; extension[i]!=0; i++) IF (strcmp(file_ext,extension[i])==0) + { + Run_Program(prog_path[i], fpath); + return; + } + Run_Program(fpath, ""); +}*/ + +/////////////////////////// +// Запуск файла // +/////////////////////////// +void Run_File(dword fpath) +{ + dword extension[4], fparam[256]; + copystr(fpath,#fparam); //по-умолчанию прога и параметр равны, если окажется что это файл, парам - сбросим + copystr(fpath+strlen(fpath)-4,#extension); //узнаём расширение файла с каким работаем + //тут мы это расширение сравнимаем, и, если оно асоциируется с прогой, прога - это fpath + IF (strcmp(#extension,".skn")==0) copystr("desktop",fpath); + IF (strcmp(#extension,".avi")==0) copystr("/sys/kvid",fpath); + IF (strcmp(#extension,".htm")==0) copystr("/sys/network/HTMLv",fpath); + IF (strcmp(#extension,"html")==0) copystr("/sys/network/HTMLv",fpath); + //IF (strcmp(#extension,".htm")==0) || (strcmp(#extension,"html")==0) copystr("/hd0/2/Programs/QIP/Users/419114984/RcvdFiles/313257308_Veliant/browser/HTMLv",fpath); + IF (strcmp(#extension,".3ds")==0) copystr("/sys/demos/3d/view3ds",fpath); + IF (strcmp(#extension,".lif")==0) copystr("/sys/demos/life2",fpath); + IF (strcmp(#extension,".cvs")==0) copystr("graph",fpath); + //audio + IF (strcmp(#extension,".mp3")==0) copystr("AC97SND",fpath); + IF (strcmp(#extension,".wav")==0) copystr("AC97SND",fpath); + IF (strcmp(#extension,".mid")==0) copystr("MIDAMP",fpath); + IF (strcmp(#extension,"midi")==0) copystr("MIDAMP",fpath); + //text + IF (strcmp(#extension,".rtf")==0) copystr("RtfRead",fpath); + IF (strcmp(#extension,".txt")==0) copystr("TinyPad",fpath); + IF (strcmp(#extension,".inc")==0) copystr("TinyPad",fpath); + IF (strcmp(#extension,".ini")==0) copystr("TinyPad",fpath); + IF (strcmp(#extension,".dat")==0) copystr("TinyPad",fpath); + IF (strcmp(#extension,".asm")==0) copystr("TinyPad",fpath); //AsmMenu1,AsmMenu2 + //изображения + IF (strcmp(#extension,".gif")==0) copystr("MV",fpath); //GifView,MenuAnimage + IF (strcmp(#extension,".bmp")==0) copystr("MV",fpath); //BmpMenu1,MenuAnimage + IF (strcmp(#extension,".tga")==0) copystr("MV",fpath); + IF (strcmp(#extension,".pcx")==0) copystr("MV",fpath); + IF (strcmp(#extension,".png")==0) copystr("@rcher",fpath); + IF (strcmp(#extension,".jpg")==0) copystr("JpegView",fpath); + IF (strcmp(#extension,"jpeg")==0) copystr("JpegView",fpath); + IF (strcmp(fpath,#fparam)==0) copystr("",#fparam); //если fpath не изменился, то это таки, наверное, прога, параметров нет. + Run_Program(fpath, #fparam); //запуск! +} diff --git a/programs/fs/Eolite/trunk/Eolite_svn/lib/edit_box_lib.h-- b/programs/fs/Eolite/trunk/Eolite_svn/lib/edit_box_lib.h-- new file mode 100644 index 0000000000..15968b60b6 --- /dev/null +++ b/programs/fs/Eolite/trunk/Eolite_svn/lib/edit_box_lib.h-- @@ -0,0 +1,81 @@ +//BOX_LIB +dword edit_box_draw = #aEdit_box_draw; +dword edit_box_key = #aEdit_box_key; +dword edit_box_mouse = #aEdit_box_mouse; +dword version_ed = #aVersion_ed; + +dword am__ = 0x0; +dword bm__ = 0x0; + +char aEdit_box_draw[9] = "edit_box\0"; +char aEdit_box_key[13] = "edit_box_key\0"; +char aEdit_box_mouse[15] = "edit_box_mouse\0"; +char aVersion_ed[11] = "version_ed\0"; + +char aCheck_box_draw [15] = "check_box_draw\0"; +char aCheck_box_mouse [16] = "check_box_mouse\0"; +char aVersion_ch [11] = "version_ch\0"; + +char aOption_box_draw [16] = "option_box_draw\0"; +char aOption_box_mouse[17] = "option_box_mouse\0"; +char aVersion_op [11] = "version_op\0" ; + + +struct edit_box{ +dword width, left, top, color, shift_color, focus_border_color, blur_border_color, +text_color, max, text, flags, size, pos, offset, cl_curs_x, cl_curs_y, shift, shift_old; +}; + + + +int load_dll(EAX) +{ +//set mask + $mov eax,40 + $mov ebx,0x27 + $int 0x40 +// load DLL + $mov eax, 68 + $mov ebx, 19 + ECX="/sys/lib/box_lib.obj"; + $int 0x40 + $test eax, eax + $jz exit + +// initialize import + $mov edx,eax + ESI=#edit_box_draw; +import_loop: + $lodsd + $test eax,eax + $jz import_done + $push edx +import_find: + $mov ebx,DSDWORD[EDX] + $test ebx, ebx + $jz exit + $push eax +nex1: + $mov cl,DSBYTE[EAX]; + $cmp cl,DSBYTE[EBX]; + $jnz import_find_next + $test cl,cl + $jz import_found + $inc eax + $inc ebx + $jmp nex1 +import_find_next: + $pop eax + $add edx, 8 + $jmp import_find +import_found: + $pop eax + $mov eax,DSDWORD[edx+4] + $mov DSDWORD[esi-4],eax + $pop edx + $jmp import_loop +import_done: + return 0; +exit: + return -1; +} diff --git a/programs/fs/Eolite/trunk/Eolite_svn/lib/kolibri.h-- b/programs/fs/Eolite/trunk/Eolite_svn/lib/kolibri.h-- new file mode 100644 index 0000000000..898cbf3e2f --- /dev/null +++ b/programs/fs/Eolite/trunk/Eolite_svn/lib/kolibri.h-- @@ -0,0 +1,392 @@ +//CODED by Veliant, Leency. GNU GPL licence. + +#startaddress 0 +#code32 TRUE + +char os_name[8] = {'M','E','N','U','E','T','0','1'}; +dword os_version = 0x00000001; +dword start_addr = #main; +dword final_addr = #stop+32; +dword alloc_mem = 0x00100000; +dword x86esp_reg = 0x00100000; // 0x0007fff0; +dword I_Param = #param; +dword I_Icon = 0x0; +dword skin_width; + +char param[256]=""; + +//Events +#define evMouse 6 +#define evButton 3 +#define evKey 2 +#define evReDraw 1 +#define evNet 8 + +//Button options +#define BT_DEL 0x80000000 +#define BT_HIDE 0x40000000 +#define BT_NOFRAME 0x20000000 + +#define OLD -1 +#define true 1 +#define false 0 + + + +int vert; +struct mouse{ + dword x,y,lkm,pkm; + void get(); +}; + +void mouse::get() +{ + EAX = 37; + EBX = 1; + $int 0x40 + $mov ebx, eax + $shr eax, 16 + $and ebx,0x0000FFFF + x = EAX; + y = EBX; + EAX = 37; + EBX = 2; + $int 0x40 + $mov ebx, eax + $and eax, 0x00000001 + $shr ebx, 1 + $and ebx, 0x00000001 + lkm = EAX; + pkm = EBX; + EAX = 37; //бЄа®«« + EBX = 7; + $int 0x40 + $mov ebx, eax + $shr eax, 16 + $and ebx,0x0000FFFF + //hor = EAX; + vert = EBX; +} + + +//--------------------------------------------------------------------------- +struct f70{ + dword func; + dword param1; + dword param2; + dword param3; + dword param4; + char rezerv; + dword name; +}; +//--------------------------------------------------------------------------- +struct BDVK{ + dword attr; + byte type_name; + byte rez1, rez2, rez3; + dword timecreate; + dword datecreate; + dword timelastaccess; + dword datelastaccess; + dword timelastedit; + dword datelastedit; + dword sizelo; + dword sizehi; + char name[518]; +}; +//--------------------------------------------------------------------------- +struct proc_info{ + dword use_cpu; + word pos_in_stack,num_slot,rezerv1; + char name[11]; + char rezerv2; + dword adress,use_memory,ID,left,top,width,height; + word status_slot,rezerv3; + dword work_left,work_top,work_width,work_height; + char status_window; + void getme(); +}; + +void proc_info::getme() +{ + EAX = 9; + EBX = #use_cpu; + ECX = -1; + $int 0x40 +} +//------------------------------------------------------------------------------- + +inline fastcall dword WaitEvent(){ + EAX = 10; // wait here for event + $int 0x40 +} + +inline fastcall void ExitProcess(){ + EAX = -1; // close this program + $int 0x40 +} + +inline fastcall word GetKey(){ + EAX = 2; // just read this key from buffer + $int 0x40 + EAX = EAX >> 8; +} + +inline fastcall word GetButtonID(){ + EAX = 17; // Get ID + $int 0x40 + EAX = EAX >> 8; +} + + +inline fastcall void DrawTitle(dword ECX) +{ + EAX = 71; + EBX = 1; + $int 0x40; +} + +inline fastcall dword GetSkinWidth() +{ + EAX = 48; + EBX = 4; + $int 0x40 +} + + +inline fastcall void DeleteButton(dword EDX) +{ + EAX = 8; + EDX = EDX + BT_DEL; + $int 0x40; +} + + +inline fastcall dword strlen(dword EDI) +{ +#speed + ECX=EAX=0; + ECX--; + $REPNE $SCASB + EAX=EAX-2-ECX; +#codesize +} + + +inline fastcall int strcmp(dword EAX,EBX) +{ +#speed + ESI=EAX; + EBX--; +TOP: + EBX++; + $LODSB + $CMP AL,0 + $JE HERE + $CMP DSBYTE[EBX],AL + $JE TOP +HERE: + AL-=DSBYTE[EBX]; + return AL; +#codesize +} + + +inline fastcall dword ChangeCase(dword EDX) +{ +#speed + AL=DSBYTE[EDX]; + IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f; + EDX++; + do{ + AL=DSBYTE[EDX]; + IF(AL>='A')&&(AL<='Z')DSBYTE[EDX]=AL|0x20; + EDX++; + }while(AL!=0); +#codesize +} + + +inline fastcall void WindowRedrawStatus(dword EBX) +{ + EAX = 12; // function 12:tell os about windowdraw + $int 0x40 +} + + +void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,byte headerType,dword headerColour,EDI) +{ + EBX = x << 16 + sizeX; + ECX = y << 16 + sizeY; + EDX = mainAreaType << 24 | mainAreaColour; + ESI = headerType << 24 | headerColour; + $xor eax,eax + $int 0x40 +} + + +inline fastcall void SetEventMask(dword EBX,ECX,EDX) //Coded by Leency :D +{ + $mov eax,40 + $mov ebx,100111b + $int 0x40 +} + +void DefineButton(dword x,y,w,h,EDX,ESI) +{ + EAX = 8; + EBX = x<<16+w; + ECX = skin_width+y<<16+h; + $int 0x40 +} + +void WriteText(dword x,y,byte fontType, dword color, EDX, ESI) +{ + EAX = 4; + EBX = x<<16+skin_width+y; + ECX = fontType<<24+color; + $int 0x40; +} + +inline fastcall void PutPixel(dword EBX,ECX,EDX) +{ + EAX=1; + $int 0x40 +} + +void DrawBar(dword x,y,w,h,EDX) +{ +#speed + EAX = 13; + EBX = x<<16+w; + ECX = skin_width+y<<16+h; + $int 0x40 +#codesize +} + +void DrawRegion(dword x,y,width,height,color1) +{ + DrawBar(x,y,width,1,color1); //Ї®«®б  Ј®а ᢥаег + DrawBar(x,y+height,width,1,color1); //Ї®«®б  Ј®а б­Ё§г + DrawBar(x,y,1,height,color1); //Ї®«®б  ўҐаег б«Ґў  + DrawBar(x+width,y,1,height+1,color1); //Ї®«®б  ўҐаег бЇа ў  +} + +void DrawFlatButton(dword x,y,width,height,id,color,text) +{ + DrawRegion(x,y,width,height,0x94AECE); + DrawBar(x+1,y+1,width-1,1,0xFFFFFF); //Ї®«®б  Ј®а ЎҐ« п + DrawBar(x+1,y+height-1,width-2,1,0xC7C7C7); //ўҐ­¬ ўҐаў + DrawBar(x+1,y+1,1,height-1,0xFFFFFF); //Ї®«®б  ўҐаў ЎҐ« Ї + DrawBar(x+width-1,y+2,1,height-2,0xC7C7C7); //ўҐ­¬ ўҐаў + DrawBar(x+2,y+2,width-3,height-3,color); //§ «ЁўЄ  + IF (id<>0) DefineButton(x,y,width,height,id+BT_HIDE,0xEFEBEF); //®ЇаҐ¤Ґ«ЇҐ¬ Є­®ЇЄЈ + WriteText(-strlen(text)*6+width/2+x+1,height/2-3+y,0x80,0,text,0); +} + + +void PutImage(dword EBX,w,h,x,y) +{ + EAX = 7; + ECX = w<<16+h; + EDX = x<<16+y+skin_width; + $int 0x40 +} + + +void copystr(dword s,d) +{ + $mov esi,s + $mov edi,d + $cld +l1: + $lodsb + $stosb + $test al,al + $jnz l1 +} + + +int j=0; +char buffer[11]=""; +inline fastcall dword IntToStr(dword 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 MoveSize(dword EBX,ECX,EDX,ESI) +{ + EAX = 67; + $int 0x40 +} + + +f70 CopyFile_f; +BDVK CopyFile_atr; +inline fastcall dword CopyFile(dword EBX,ECX) +{ + dword s=EBX, d=ECX, cBufer=0; + CopyFile_f.func = 5; + CopyFile_f.param1 = 0; + CopyFile_f.param2 = 0; + CopyFile_f.param3 = 0; + CopyFile_f.param4 = #CopyFile_atr; + CopyFile_f.rezerv = 0; + CopyFile_f.name = s; + $mov eax, 70 + $mov ebx, #CopyFile_f + $int 0x40 + + if (EAX == 0) + { + cBufer = malloc(CopyFile_atr.sizelo); + CopyFile_f.func = 0; + CopyFile_f.param1 = 0; + CopyFile_f.param2 = 0; + CopyFile_f.param3 = CopyFile_atr.sizelo; + CopyFile_f.param4 = cBufer; + CopyFile_f.rezerv = 0; + CopyFile_f.name = s; + $mov eax, 70 + $mov ebx, #CopyFile_f + $int 0x40 + + IF (EAX == 0) + { + CopyFile_f.func = 2; + CopyFile_f.param1 = 0; + CopyFile_f.param2 = 0; + CopyFile_f.param3 = CopyFile_atr.sizelo; + CopyFile_f.param4 = cBufer; + CopyFile_f.rezerv = 0; + CopyFile_f.name = d; + $mov eax, 70 + $mov ebx, #CopyFile_f + $int 0x40 + } + } + +} diff --git a/programs/fs/Eolite/trunk/Eolite_svn/lib/memory.h-- b/programs/fs/Eolite/trunk/Eolite_svn/lib/memory.h-- new file mode 100644 index 0000000000..ad68fada36 --- /dev/null +++ b/programs/fs/Eolite/trunk/Eolite_svn/lib/memory.h-- @@ -0,0 +1,36 @@ +#code32 TRUE + +inline fastcall dword malloc(dword ECX){ + dword size, heap; + #speed + size = ECX; + EAX = 68; + EBX = 11; + $int 0x40; + heap = EAX; + IF (size<=heap) + { + EAX = 68; + EBX = 12; + ECX = size; + $int 0x40; + } + ELSE EAX=-1; + #codesize +} + +inline fastcall dword free(dword ECX){ + #speed + EAX = 68; + EBX = 13; + $int 0x40; + #codesize +} + +inline fastcall dword realloc(dword ECX, EDX){ + #speed + EAX = 68; + EBX = 20; + $int 0x40; + #codesize +}