Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. //Leency & Veliant -=- KolibriOS Team -=- 2008
  2.  
  3. #pragma option J0
  4. #pragma option LST
  5. #pragma option OC
  6. #pragma option 4
  7. #pragma option A
  8. #include "lib\kolibri.h--"
  9. #include "lib\memory.h--"
  10. #include "imgs\Imgs.cpp"
  11. #include "imgs\icons.cpp"
  12. #include "imgs\left_p.cpp"
  13. #include "LVabout.c--"
  14. #speed
  15.  
  16. //ëîêàëèçàöèÿ è íàñòðîéêè
  17. char header = "Eolite File Manager v0.84";
  18. char gotodev = "Goto:";
  19. char actions = "Actions";
  20. char preview = "Preview";
  21. char tfile = "File";
  22. char ttype = "Type";
  23. char tsize = "Size";
  24. dword videlenie=0x94AECE; //öâåò âûäåëåííîãî ýëåìåíòà èç ñïèñêà ôàéëîâ
  25. //
  26.  
  27. int but_num, kolichestvo, curbtn, za_kadrom, longest_name;;
  28. dword top_actions, show_actions=1, show_preview=0, top_pr;
  29. int razm_scrl, on_y; //äëÿ ñêðîëà
  30. int y,off; //äëÿ òåêñòà
  31. char path[256] = "/rd/1/", edit_path[256], temp[256]; //äëÿ ïóòåé
  32. char file_path[256], param[256], file_name[256]; //äëÿ ôàéëîâ
  33. char copyfile[256],copy_name[256]; //êîïèðîâàíèå
  34. int i=1; //äëÿ öèêëîâ
  35. dword id=1;
  36. dword ins_mas[200]=0; //Insert
  37. dword file_mas[2000]; //ñïèñîê ôàéëîâ
  38. int cut_active, rename_active, del_active;
  39. int temp_int, str_len;
  40. dword stak[100]=0;
  41.  
  42. proc_info       Form;
  43.  
  44. struct {
  45.         int     func;
  46.         int     pos;
  47.         int     rezerv;
  48.         int     sizefile;
  49.         int     buffer;
  50.         char rezerv2;
  51.         int     stroka;
  52. }open_file_70;
  53. dword buf, size, isdir;
  54.  
  55. struct {
  56.      int     func;
  57.      int     flag;
  58.      int     param;
  59.      int     rez1;
  60.      int     rez2;
  61.      char rezerv2;
  62.      int     stroka;
  63. }run_file_70;
  64.  
  65. void main()
  66. dword pressed, key;
  67. mouse m;
  68. {
  69.         skin_width = GetSkinWidth();
  70.         buf = malloc(65536); //65536
  71.         draw_window();
  72.         $mov eax,40
  73.         $mov ebx,100111b
  74.         $int 0x40
  75.         loop()
  76.         {
  77.                 switch(WaitEvent())
  78.                 {
  79.                         CASE 6:
  80.                                         IF (del_active==1) break;
  81.                                         m.get();
  82.                                         IF ((kolichestvo==but_num) || (m.y<57)) break; //åñëè ïðîêðóòêè íåò, òî íèêóäà íå ìîòàåì
  83.                                         IF (m.y>Form.width) m.y=57; //åñëè êóðñîð íàä îêíîì
  84.                                         IF (m.lkm==0) pressed=0; ELSE
  85.                                         //if (m.y>=on_y+skin_width) if (m.y<=on_y+razm_scrl+skin_width)
  86.                                         IF (m.x>=onLeft(21,0)) IF (m.x<=onLeft(6,0)) pressed=1;
  87.                                         if (pressed==1) IF (m.y>=on_y+razm_scrl+skin_width) //if (kolichestvo<za_kadrom+but_num)
  88.                                                 {
  89.                                                 IF (za_kadrom+but_num>=kolichestvo) break;
  90.                                                 Line_ReDraw(0xFFFFFF); //áåëàÿ ïîëîñà
  91.                                                 za_kadrom=za_kadrom+but_num; //za_kadrom=za_kadrom+1;
  92.                                                 List_ReDraw();
  93.                                                 }
  94.                                         ELSE IF (pressed==1) IF (m.y<=on_y) IF (on_y<>57)
  95.                                                 {
  96.                                                 IF (za_kadrom>but_num) za_kadrom=za_kadrom-but_num; //za_kadrom=za_kadrom-1;
  97.                                                         ELSE za_kadrom=0;
  98.                                                 List_ReDraw();
  99.                                                 }
  100.                                         break;
  101.                         CASE evButton:
  102.                                 id=GetButtonID();
  103.                                 IF (id==1) {ExitProcess(); break;}
  104.                                 IF (del_active==1)
  105.                                         {
  106.                                         IF (id==301) Del_File();
  107.                                         IF (id==302) {del_active=0; Open_Dir(#path,1);}
  108.                                         break;
  109.                                         }
  110.                                 switch(id)
  111.                                 {
  112.                                         CASE 23: IF (strcmp(#path,"/")==-1) Dir_Up(); break;//up!
  113.                                         case 26: Paste(); break;//paste
  114.                                         case 27: Goto_edit_path(); break; //goto edit_path
  115.                                         case 81: Del_Form(); break;//Delete file
  116.                                         case 24: //cut
  117.                                         case 25: //copy
  118.                                                 if (isdir==1) break; //ïàïêè ïîêà ÷òî êîïèðîâàòü íå óìååì
  119.                                                 copystr(#file_name,#copy_name);
  120.                                                 copystr(#file_path,#copyfile); //âû÷èñëÿåì êàêîé ôàéë êîïèðîâàòü
  121.                                                 IF (id==24) cut_active=1; ELSE cut_active=0; //ðåæåì èëè êîïèðóåì?
  122.                                                 break;
  123.                                         case 30: //about
  124.                                                 EAX = 51;
  125.                                                 EBX = 1;
  126.                                                 ECX = #authors;
  127.                                                 EDX = #stak;
  128.                                                 $int 40h;      
  129.                                                 break;
  130.                                         case 50: //ñòðåëêà ââåðõ íà ñêðîëå
  131.                                                 IF (za_kadrom<=0) break;
  132.                                                 za_kadrom=za_kadrom-1;
  133.                                                 List_ReDraw();
  134.                                                 break;
  135.                                         case 51: //ñòðåëêà âíèç íà ñêðîëå
  136.                                                 IF (za_kadrom+but_num>=kolichestvo) break;
  137.                                                 za_kadrom=za_kadrom+1;
  138.                                                 List_ReDraw();
  139.                                                 break;
  140.                                         case 77: //actions
  141.                                                 IF (show_actions==1) show_actions=0; else show_actions=1;
  142.                                                 Actions(); //äàëåå ðèñóåì ñäåñü ÷òîá ìåíüøå áûëà ïåðåðèñîâêà
  143.                                                 IF (show_actions==1) DrawBar(22,top_actions*16+159,160,15,0x00699C);
  144.                                                 ELSE {
  145.                                                         DrawBar(22,top_actions*16+120,160,15,0x00699C);
  146.                                                         DrawBar(22,top_actions*16+242,160,50,0x00699C);
  147.                                                         }
  148.                                                 Preview();
  149.                                                 IF (show_preview==0) DrawBar(22,top_pr+18,160,101,0x00699C); //ñèíåå ðèñóåì ñäåñü
  150.                                                 break;
  151.                                         case 78: //preview
  152.                                                 if (show_preview==0)show_preview=1; else
  153.                                                 { show_preview=0; DrawBar(22,top_pr+18,160,101,0x00699C); } //ñèíåå
  154.                                                 Preview();
  155.                                                 break;
  156.                                         case 80: //rename
  157.                                                 if (isdir==1) break; //ïàïêè ïîêà ÷òî ïåðåèìåíîâûâàòü íå óìååì
  158.                                                 y= curbtn*18+85;
  159.                                                 DrawRegion(219,curbtn*18+57,onLeft(50,197),17,0x94AECE); //îáîäîê
  160.                                                 DrawBar(220,curbtn*18+58,onLeft(50,197)-1,16,0xFFFFCC); //æ¸ëòîå
  161.                                                 WriteTextXY(224<<16+y, 0x80000000, #file_name, 0);
  162.                                                 rename_active=1;
  163.                                                 break;
  164.                                         case 21: //Íàçàä
  165.                                                 GoBack(1);
  166.                                                 break;
  167.                                         case 22: //Âïåð¸ä
  168.                                                 GoBack(0);
  169.                                                 break;
  170.                                 }//---------------------------ïåðåõîä ïî id----------------------
  171.                                 if (id>200) //êíîïêè èç ñïèñêà ôàéëîâ
  172.                                 {
  173.                                         if (curbtn!=id-201)
  174.                                         {
  175.                                                 Line_ReDraw(0xFFFFFF); //áåëàÿ ïîëîñà
  176.                                                 curbtn=id-201;
  177.                                                 Line_ReDraw(videlenie); //âûäåëåíèå
  178.                                                 break;
  179.                                         }
  180.                                         else
  181.                                         if ((isdir==1)  if (strcmp(curbtn+1*304 + buf+72,"..")==-1)
  182.                                         {
  183.                                                         copystr(#file_path, #path);
  184.                                                         copystr("/", #path+strlen(#path));
  185.                                                         za_kadrom=0; //ââåðõ ñïèñêà
  186.                                                         curbtn=0;
  187.                                                         Open_Dir(#path,1);
  188.                                         } else Dir_Up(); else Run_File();
  189.                                         break;
  190.                                 }
  191.                                 if (id>=100) //ïîäêëþ÷¸ííûå íîñèòåëè èíôîðìàöèè
  192.                                 {
  193.                                 Open_Dir("/",0);
  194.                                 copystr(id-100*304+ buf+72, #path);
  195.                                 if (strcmp(#path,"rd")==0) copystr("/rd/1/",#path);
  196.                                 else
  197.                                         {
  198.                                         copystr("/", #temp);
  199.                                         copystr(#path, #temp+strlen(#temp));
  200.                                         copystr("/", #temp+strlen(#temp));
  201.                                         copystr(#temp,#path);
  202.                                         }
  203.                                 za_kadrom=0; //ââåðõ ñïèñêà
  204.                                 curbtn=0;
  205.                                 Open_Dir(#path,1);
  206.                                 break;
  207.                                 }
  208.                         case evKey:
  209.                                 key = GetKey();
  210.                                 IF (del_active==1)
  211.                                         {
  212.                                         IF (key==013) Del_File();
  213.                                         IF (key==027) {del_active=0; Open_Dir(#path,1);}
  214.                                         break;
  215.                                         }
  216.                                 switch (key)
  217.                                 {
  218.                                                 case 0x08: //backspace
  219.                                                                         if (rename_active==1) {copystr(#file_name,#temp); if (strlen(#temp)<=0) break;}
  220.                                                                                 else {copystr(#edit_path,#temp); if (strlen(#temp)<=1) break;} //îñòàâëÿåì òîëüêî "/"
  221.                                                                                 EBX=#temp + strlen(#temp)-1;
  222.                                                                                 ESBYTE[EBX] = 0;
  223.                                                                         if (rename_active==1)
  224.                                                                         {
  225.                                                                                 DrawBar(strlen(#file_name)*6+218,curbtn*18+58,6,16,0xFFFFCC); //æ¸ëòîå
  226.                                                                                 copystr(#temp,#file_name);
  227.                                                                                 WriteTextXY(224<<16+y, 0x80000000, #file_name, 0);
  228.                                                                         } else { copystr(#temp,#edit_path); KEdit(); }
  229.                                                                         break;
  230.                                                 case 014: //íîâîå îêíî
  231.                                                                         break;
  232.                                                 case 024: //Ctrl+X cut
  233.                                                                         if (isdir==1) break; //ïàïêè ïîêà ÷òî êîïèðîâàòü íå óìååì
  234.                                                                         copystr(#file_name,#copy_name);
  235.                                                                         copystr(#file_path,#copyfile); //âû÷èñëÿåì êàêîé ôàéë êîïèðîâàòü
  236.                                                                         cut_active=1;
  237.                                                                         break;
  238.                                                 case 089: //Ctrl+Ins copy
  239.                                                 case 003: //Ctrl+C copy
  240.                                                                         if (isdir==1) break; //ïàïêè ïîêà ÷òî êîïèðîâàòü íå óìååì
  241.                                                                         copystr(#file_name,#copy_name);
  242.                                                                         copystr(#file_path,#copyfile); //âû÷èñëÿåì êàêîé ôàéë êîïèðîâàòü
  243.                                                                         cut_active=0;
  244.                                                                         break;
  245.                                                 case 022: //Ctrl+V paste
  246.                                                                         Paste();
  247.                                                                         break;
  248.                                                 case 027: //Esc
  249.                                                                         if (rename_active==1) { rename_active=0; Line_ReDraw(videlenie); }
  250.                                                                         break;
  251.                                                 case 013:       //Enter
  252.                                                                         if (rename_active==1) {Line_ReDraw(videlenie); break;}
  253.                                                                         if (strcmp(#path,#edit_path)==-1) Goto_edit_path(); else
  254.                                                                         if ((isdir==1)  if (strcmp(curbtn+1*304 + buf+72,"..")==-1)
  255.                                                                         {
  256.                                                                                 copystr(#file_path, #path);
  257.                                                                                 copystr("/", #path+strlen(#path));
  258.                                                                                 za_kadrom=0; //ââåðõ ñïèñêà
  259.                                                                                 curbtn=0;
  260.                                                                                 Open_Dir(#path,1);
  261.                                                                         } else Dir_Up(); else Run_File();
  262.                                                                         break;
  263.                                                 case 178:       //up
  264.                                                                         if (curbtn>=1)
  265.                                                                         {      
  266.                                                                                 Line_ReDraw(0xFFFFFF); //áåëàÿ ïîëîñà
  267.                                                                                 curbtn=curbtn-1;
  268.                                                                                 Line_ReDraw(videlenie); //âûäåëåíèå
  269.                                                                                 break;
  270.                                                                         }
  271.                                                                         if (za_kadrom<=0) break;
  272.                                                                         za_kadrom=za_kadrom-1;
  273.                                                                         List_ReDraw();
  274.                                                                         break;
  275.                                                 case 177:       //down
  276.                                                                         if(curbtn<but_num-1)
  277.                                                                         {
  278.                                                                                 Line_ReDraw(0xFFFFFF); //áåëàÿ ïîëîñà
  279.                                                                                 curbtn=curbtn+1;
  280.                                                                                 Line_ReDraw(videlenie); //âûäåëåíèå
  281.                                                                                 break;
  282.                                                                         }
  283.                                                                         if (za_kadrom+but_num>=kolichestvo) break;
  284.                                                                         za_kadrom=za_kadrom+1;
  285.                                                                         List_ReDraw();
  286.                                                                         break;
  287.                                                 case 180: //home
  288.                                                                         if (curbtn==0)
  289.                                                                         if (strcmp(".",buf+72)==-1) if (za_kadrom==0) break; else if (za_kadrom==1) break;
  290.                                                                         if (za_kadrom==0){
  291.                                                                                 Line_ReDraw(0xFFFFFF); //áåëàÿ ïîëîñà
  292.                                                                                 curbtn=0;
  293.                                                                                 Line_ReDraw(videlenie); //âûäåëåíèå
  294.                                                                                 break;
  295.                                                                         }
  296.                                                                         Line_ReDraw(0xFFFFFF); //áåëàÿ ïîëîñà
  297.                                                                         za_kadrom=0; //åñëè ìû óæå ïðîìîòàëè è ïåðâûé ýëåìåíò çà êàäðîì
  298.                                                                         curbtn=0;
  299.                                                                         List_ReDraw();
  300.                                                                         break;
  301.                                                 case 181: //end
  302.                                                                         if (curbtn==kolichestvo-za_kadrom-1) break;
  303.                                                                         if (but_num==kolichestvo-za_kadrom){
  304.                                                                                 Line_ReDraw(0xFFFFFF); //áåëàÿ ïîëîñà
  305.                                                                                 curbtn=but_num-1;
  306.                                                                                 Line_ReDraw(videlenie); //âûäåëåíèå
  307.                                                                                 break;
  308.                                                                         }
  309.                                                                         Line_ReDraw(0xFFFFFF); //áåëàÿ ïîëîñà
  310.                                                                         za_kadrom=kolichestvo-but_num;
  311.                                                                         curbtn=but_num;
  312.                                                                         List_ReDraw();
  313.                                                                         break;
  314.                                                 case 183: //Page Down
  315.                                                                         IF (but_num==kolichestvo-za_kadrom) break;
  316.                                                                         IF (kolichestvo-za_kadrom-but_num<but_num) || (kolichestvo==but_num)
  317.                                                                                 za_kadrom=kolichestvo-but_num; ELSE za_kadrom=za_kadrom+but_num;
  318.                                                                         List_ReDraw();
  319.                                                                         break;
  320.                                                 case 184: //Page Up
  321.                                                                         IF (za_kadrom==0) break;
  322.                                                                         IF (za_kadrom<=but_num) za_kadrom=0; ELSE za_kadrom=za_kadrom-but_num;
  323.                                                                         List_ReDraw();
  324.                                                                         break;
  325.                                                 case 185: //Insert
  326.                                                                         if (ins_mas[file_mas[za_kadrom+curbtn]]==0) ins_mas[file_mas[za_kadrom+curbtn]]=1;
  327.                                                                                 else ins_mas[file_mas[za_kadrom+curbtn]]=0;    
  328.                                                                         if(curbtn<but_num-1)
  329.                                                                         {
  330.                                                                                 Line_ReDraw(0xFFFFFF); //áåëàÿ ïîëîñà
  331.                                                                                 curbtn++;
  332.                                                                                 Line_ReDraw(videlenie); //âûäåëåíèå
  333.                                                                                 break;
  334.                                                                         }
  335.                                                                         if (za_kadrom+but_num>=kolichestvo) Line_ReDraw(videlenie);
  336.                                                                                 else { za_kadrom=za_kadrom+1; List_ReDraw(); }
  337.                                                                         break;                                                                 
  338.                                                 case 182:       Del_Form(); break; //delete file
  339.                                                 case 054: IF (rename_active==0) {draw_window(); break;} ELSE goto REN_; //ïåðåðèñîâàòü îêíî F5
  340.                                                 case 051: //Íàæàòà F2
  341.                                                                         if (rename_active==0){
  342.                                                                         if (isdir==1) break; //ïàïêè ïîêà ÷òî ïåðåèìåíîâûâàòü íå óìååì
  343.                                                                         y= curbtn*18+85;
  344.                                                                         DrawRegion(219,curbtn*18+57,onLeft(50,197),17,0x94AECE);
  345.                                                                         DrawBar(220,curbtn*18+58,onLeft(50,197)-1,16,0xFFFFCC);
  346.                                                                         WriteTextXY(224<<16+y, 0x80000000, #file_name, 0);
  347.                                                                         rename_active=1;
  348.                                                                         } ELSE GOTO REN_;
  349.                                                                         break;
  350.                                                 default:
  351.                                                                         REN_:
  352.                                                                         if (rename_active==1) copystr(#file_name,#temp); else copystr(#edit_path,#temp);
  353.                                                                         if (strlen(#temp)>256) break;
  354.                                                                                 EBX=#temp + strlen(#temp);
  355.                                                                                 ESBYTE[EBX] = key;
  356.                                                                                 ESBYTE[EBX+1] = 0;
  357.                                                                         //
  358.                                                                         if (rename_active==1)
  359.                                                                         {
  360.                                                                                 DrawBar(220,curbtn*18+58,onLeft(50,197)-1,16,0xFFFFCC); //æ¸ëòîå
  361.                                                                                 copystr(#temp,#file_name);
  362.                                                                                 WriteTextXY(224<<16+y, 0x80000000, #file_name, 0);
  363.                                                                         } else { copystr(#temp,#edit_path); KEdit(); }
  364.                                                                         break;
  365.                                 }
  366.                                 break;
  367.                                 CASE evReDraw:
  368.                                 draw_window();
  369.                                 break;
  370.                 }
  371.         }
  372.         ExitProcess();
  373. }
  374.  
  375. void draw_window()
  376. {
  377.         WindowRedrawStatus(1);
  378.         DefineAndDrawWindow(100,100,600,410,0x03,0x00E4DFE1,0,0,0);
  379.      DrawTitle(#header);
  380.      Form.getme();
  381.      if (Form.height<skin_width+10) return;
  382.      if (Form.width<493) MoveSize(OLD,OLD,493,OLD);
  383.         //control buttons
  384.         DefineButton(14,5,31,29,21+BT_HIDE,0xE4DFE1); //back
  385.                 PutImage(#back,30,28,15,6);
  386.         DefineButton(50,5,31,29,22+BT_HIDE,0xE4DFE1); //forward
  387.                 PutImage(#forward,30,28,51,6);
  388.         DefineButton(89,5,31,29,23+BT_HIDE,0xE4DFE1); //up!
  389.                 PutImage(#up,30,28,90,6);
  390.         DrawBar(132,8,1,25,0x94AECE);
  391.         DefineButton(140,5,31,29,24+BT_HIDE,0xE4DFE1); //cut
  392.                 PutImage(#fcut,30,28,141,6);
  393.         DefineButton(176,5,31,29,25+BT_HIDE,0xE4DFE1); //copy
  394.                 PutImage(#fcopy,30,28,177,6);
  395.         DefineButton(212,5,31,29,26+BT_HIDE,0xE4DFE1); //paste
  396.                 PutImage(#fpaste,30,28,213,6);
  397.         DefineButton(onLeft(34,0),6,27,28,30+BT_HIDE+BT_NOFRAME,0xE4DFE1); //about
  398.                 PutImage(#about,25,26,onLeft(34,0),7);
  399.         //ïîëîñà àäðåñà
  400.         DrawRegion(251,12,onLeft(61,251),16,0x94AECE);//îáîäîê
  401.         DefineButton(onLeft(61,0),12,18,16,27+BT_HIDE,0xE4DFE1); //goto there
  402.         PutImage(#Edit_Goto,18,17,onLeft(60,0),12);
  403.         //ãëàâíûé ïðÿìîóãîëüíèê âíóòðè
  404.         DrawRegion(6,40,Form.width-12,Form.height-skin_width-46,0x94AECE);
  405.         DrawBar(7,41,190,onTop(6,41),0x00699C); //ñèíèé ïðÿìîóãîëüíèê
  406.      LeftBar(); //ïàíåëü ñëåâà íà ñèíåì ôîíå
  407.         //Íàçâàíèÿ ñòîëáöîâ
  408.         DrawBar(197,41,onLeft(6,197),1,0xFFFFFF); //áåëàÿ ïîëîñà ñâåðõó
  409.         DrawBar(197,56,onLeft(6,197),1,0x94AECE); //ïîëîñà ñíèçó
  410.         DrawBar(onLeft(163,0),41,1,16,0x94AECE); //ïîëîñà âåðòèêàëüíàÿ 1
  411.         DrawBar(onLeft(90,0),41,1,16,0x94AECE); //ïîëîñà âåðòèêàëüíàÿ 2
  412.         temp_int=Form.width-163-197>>1-15; //íàõîäèì ñåðåäèíó ïîëÿ text File
  413.         WriteText(temp_int+197,45,0x80,0,#tfile,0);//text File
  414.         WriteText(onLeft(137,0),45,0x80,0,#ttype,0);//text Type
  415.         WriteText(onLeft(66,0),45,0x80,0,#tsize,0);//text Size
  416.         if (curbtn<>0) DrawBar(197,57,onLeft(22,197),18,0xFFFFFF);
  417.         Open_Dir(#path,1);
  418.         //ïðîêðóòêà
  419.         DefineButton(onLeft(22,0),40,16,16,50+BT_HIDE,0xE4DFE1); //ïðîêðóòêà ââåðõ
  420.                 DrawBar(onLeft(21,0),42,1,14,0x00FFFFFF); //áåëàÿ ïîëîñà ñëåâà
  421.                 WriteText(onLeft(16,0),45,0x80,0,"\x18",0); //ñòðåëêà ââåðõ
  422.         DefineButton(onLeft(22,0),onTop(22,0),16,16,51+BT_DEL,0xE4DFE1); //óäàëÿåì
  423.         DrawFlatButton(onLeft(22,0),onTop(22,0),16,16,51,0xE4DFE1); //ïðîêðóòêà âíèç
  424.                 DrawBar(onLeft(21,0),onTop(22,0)+15,15,1,0xE4DFE1); //óäàëÿåì òåíü
  425.                 DrawBar(onLeft(7,0),onTop(20,0),1,14,0xE4DFE1); //óäàëÿåì òåíü
  426.                 WriteText(onLeft(16,0),onTop(17,0),0x80,0,"\x19",0); //ñòðåëêà âíèç
  427.         DrawBar(onLeft(22,0),41,1,onTop(6,57),0x94AECE); //ëèíèÿ ñëåâà îò ïðîêðóòêè
  428.         IF (del_active==1) Del_Form();
  429.         WindowRedrawStatus(2);
  430. }
  431.  
  432. void KEdit()
  433. {
  434.         temp_int=onLeft(61,252)/6;
  435.         IF (strlen(#edit_path)<temp_int)
  436.                 {
  437.                 DrawBar(strlen(#edit_path)*6+252+5,17,6,9,0xFFFFFF); //áåëàÿ îáëàñòü ïîä KEdit
  438.                 WriteText(257,17,0x80,0,#edit_path,0); //text 'path'
  439.                 }
  440.         ELSE   
  441.                 {
  442.                 DrawBar(252,17,onLeft(61,252),9,0xFFFFFF); //áåëàÿ îáëàñòü
  443.                 WriteText(257,17,0x80,0,#edit_path+strlen(#edit_path)-temp_int,0); //text 'path'
  444.                 }
  445. }
  446.  
  447. char drive_name[30];
  448. dword dev_icon;
  449. void LeftBar(){
  450.         //ñïèñîê äèñêîâ
  451.         DrawBar(22,56,160,17,0xE4DFE1); //ñåðîå ñâåðõó
  452.         WriteText(30,61,0x80,0,#gotodev,0); //text Goto:
  453.         DrawBar(22,73,160,1,0x94AECE); //ïîä÷¸ðêèâàíèå
  454.         Open_Dir("/",0);
  455.         DrawBar(22,74,160,kolichestvo*16+1,0xFFFFFF); //áåëîå
  456.         for (i=0;i<kolichestvo;i++)
  457.             {
  458.             copystr("Unknown drive",#drive_name); //èçíà÷àëüíî íåèçâåñíûé íîñèòåëü
  459.          DefineButton(22,i*16+74,159,16,100+i+BT_HIDE,0xE4DFE1); //ñîçäà¸ì êíîïêè, à ïîòîì âûâîäèì íàçâàíèÿ äèñêîâ
  460.          IF (strcmp(i*304+ buf+72,"rd")<>-1) { copystr("RAM-disk /rd/1/",#drive_name); dev_icon=#rd; }
  461.          IF (strcmp(i*304+ buf+72,"fd")<>-1) { copystr("Floppy disk /fd/",#drive_name); dev_icon=#fd; }
  462.          IF (strcmp(i*304+ buf+72,"hd0")<>-1) { copystr("Hard disk drive /hd0/",#drive_name); dev_icon=#hd; }
  463.          IF (strcmp(i*304+ buf+72,"hd1")<>-1) { copystr("Hard disk drive /hd1/",#drive_name); dev_icon=#hd; }
  464.          IF (strcmp(i*304+ buf+72,"hd2")<>-1) { copystr("Hard disk drive /hd2/",#drive_name); dev_icon=#hd; }
  465.          IF (strcmp(i*304+ buf+72,"bd0")<>-1) { copystr("Hard disk drive /bd0/",#drive_name); dev_icon=#hd; }
  466.          IF (strcmp(i*304+ buf+72,"bd1")<>-1) { copystr("Hard disk drive /bd1/",#drive_name); dev_icon=#hd; }
  467.          IF (strcmp(i*304+ buf+72,"bd2")<>-1) { copystr("Hard disk drive /bd2/",#drive_name); dev_icon=#hd; }
  468.          IF (strcmp(i*304+ buf+72,"cd1")<>-1) { copystr("CD-drive /cd1/",#drive_name); dev_icon=#cd; }
  469.          IF (strcmp(i*304+ buf+72,"cd2")<>-1) { copystr("CD-drive /cd2/",#drive_name); dev_icon=#cd; }
  470.             WriteText(45,i*16+79,0x80,0,#drive_name,0);
  471.             PutImage(dev_icon,14,13,26,i*16+76);
  472.          }
  473.      //ôóíêöèè ôàéëîâ è ïàïîê
  474.         top_actions=kolichestvo;
  475.         Actions();
  476.         Preview();
  477. }
  478.  
  479. void Actions()
  480. {
  481.         DrawBar(22,top_actions*16+90,160,17,0xE4DFE1); //ñåðîå ñâåðõó
  482.         WriteText(30,top_actions*16+95,0x80,0,#actions,0); //text Actions
  483.         DefineButton(164,top_actions*16+91,16,16,77+BT_HIDE+BT_NOFRAME,0xE4DFE1); //êíîïà äëÿ ñòðåëêè
  484.         DrawBar(22,top_actions*16+107,160,1,0x94AECE); //ïîä÷¸ðêèâàíèå
  485.         if (show_actions==1)
  486.         {
  487.                 WriteText(170,top_actions*16+95,0x80,0,"\x19",0); //ñòðåëêà âíèç
  488.                 DrawBar(22,top_actions*16+108,160,51,0xFFFFFF); //áåëîå
  489.                 //rename file
  490.                 DefineButton(22,top_actions*16+108,159,16,80+BT_HIDE,0xE4DFE1);
  491.                 WriteText(47,top_actions*16+113,0x80,0,"Rename file <F2>",0);
  492.                 PutImage(#ren_file,16,15,26,top_actions*16+109);
  493.                 //delete file
  494.                 DefineButton(22,top_actions*16+125,159,16,81+BT_HIDE,0xE4DFE1);
  495.                 WriteText(47,top_actions*16+130,0x80,0,"Delete file <Del>",0);
  496.                 PutImage(#del_file,16,15,26,top_actions*16+125);
  497.                 //create folder
  498.                 DefineButton(22,top_actions*16+142,159,16,82+BT_HIDE,0xE4DFE1);
  499.                 WriteText(47,top_actions*16+147,0x80,0,"Create folder <F6>",0);
  500.                 PutImage(#new_fol,16,15,26,top_actions*16+142);
  501.         }
  502.         else
  503.         {
  504.         DefineButton(22,top_actions*16+108,159,16,80+BT_DEL,0xE4DFE1);
  505.         DefineButton(22,top_actions*16+125,159,16,81+BT_DEL,0xE4DFE1);
  506.         DefineButton(22,top_actions*16+142,159,16,82+BT_DEL,0xE4DFE1);
  507.         WriteText(170,top_actions*16+95,0x80,0,"\x18",0); //ñòðåëêà ââåðõ
  508.         DrawBar(22,top_actions*16+108,160,51,0x00699C); //ñèíåå
  509.         }
  510. }
  511.  
  512. void Preview()
  513. {
  514.         IF (show_actions==1) top_pr=top_actions*16+174; ELSE top_pr=top_actions*16+174-51;
  515.         DrawBar(22,top_pr,160,17,0xE4DFE1); //ñåðîå ñâåðõó
  516.         WriteText(30,top_pr+5,0x80,0,#preview,0); //text Preview
  517.         DefineButton(164,top_pr+1,16,16,78+BT_DEL,0xE4DFE1);
  518.         DefineButton(164,top_pr+1,16,16,78+BT_HIDE+BT_NOFRAME,0xE4DFE1); //êíîïà äëÿ ñòðåëêè
  519.         DrawBar(22,top_pr+17,160,1,0x94AECE); //ïîä÷¸ðêèâàíèå
  520.         IF (show_preview==0) WriteText(170,top_pr+5,0x80,0,"\x18",0); else//ñòðåëêà ââåðõ
  521.         {
  522.                 WriteText(170,top_pr+5,0x80,0,"\x19",0); //ñòðåëêà âíèç
  523.                 DrawBar(22,top_pr+18,160,100,0xFFFFFF); //áåëîå
  524.                 /*WriteText(30,top_pr+30,0x80,0,IntToStr(kolichestvo),0);
  525.                 WriteText(30,top_pr+50,0x80,0,IntToStr(but_num),0);
  526.                 WriteText(30,top_pr+60,0x80,0,IntToStr(za_kadrom),0);
  527.                 WriteText(30,top_pr+70,0x80,0,#file_path,0);
  528.                 WriteText(30,top_pr+80,0x80,0,#param,0);*/
  529.                 WriteText(30,top_pr+60,0x80,0,"Not realized... Yet.",0);
  530.         }
  531. }
  532.  
  533. void TVScroll() { //Ïðîêðóòêà
  534. if (but_num==kolichestvo)
  535.         {      
  536.                 DefineButton(onLeft(22,0),57,15,on_y-57,54+BT_DEL,0xE4DFE1); //óäàëÿåì
  537.                 DefineButton(onLeft(22,0),on_y+razm_scrl+2,16,onTop(22,57)-razm_scrl-on_y+55,55+BT_DEL,0xE4DFE1); //óäàëÿåì
  538.                 DrawBar(onLeft(21,0),57,15,onTop(79,0),0xCED0D0); //ñåðóþ îáëàñòü ðèñóåì
  539.         }
  540. else
  541.         {
  542.                 razm_scrl=onTop(22,57) * but_num - but_num / kolichestvo; //ñ÷èòàåò ïî-ïîðÿäêó         
  543.                 on_y = za_kadrom / but_num * razm_scrl+57;
  544.                 IF (razm_scrl<20) razm_scrl = 20; //óñòàíàâëèâàåì ìèíèìàëüíûé ðàçìåð ñêðîëëà
  545.                 IF (za_kadrom==0) on_y= 57; ELSE IF (za_kadrom<but_num) on_y=70;
  546.                 IF (za_kadrom+but_num==kolichestvo) on_y= onTop(23,57)-razm_scrl+57; //â êîíåö åñëè òàì íè÷¸ íåò
  547.                 //ïîëçóíîê, ðèñóåì âèäèìûé, êðàñèâûé ïðÿìîóãîëüíèê
  548.                 DrawBar(onLeft(21,0),on_y,15,1,0x94AECE); //ñèíÿÿ ëèíèÿ ñâåðõó
  549.                 DrawBar(onLeft(21,0),on_y+razm_scrl,15,1,0x94AECE); //ñèíÿÿ ëèíèÿ ñíèçó
  550.                 DrawBar(onLeft(21,0),on_y+1,1,razm_scrl-1,0x00FFFFFF); //áåëàÿ ïîëîñà ñëåâà
  551.                 DrawBar(onLeft(21,0),on_y+1,15,1,0x00FFFFFF); //áåëàÿ ïîëîñà ñâåðõó
  552.                 DrawBar(onLeft(20,0),on_y+2,14,razm_scrl-2,0x00E4DFE1); //ïðÿìîóãîëüíèê âíóòðè
  553.                 //ïîëîñû
  554.                 DrawBar(onLeft(21,0),57,15,on_y-57,0xCED0D0); //ïîëå äî ïîëçóíêà
  555.                 DrawBar(onLeft(21,0),on_y+razm_scrl+1,15,onTop(22,57)-razm_scrl-on_y+56,0xCED0D0); //ïîëå ïîñëå ïîëçóíêà
  556.         }
  557. }
  558.  
  559. void List_ReDraw()
  560. {
  561.         y=85;
  562.         if ((kolichestvo-za_kadrom<but_num) && (za_kadrom>1)) //åñëè ìû â êîíöå ñïèñêà ôàéëîâ ðàçâåðí¸ì îêíî ïîÿâÿòüñÿ ïóñòÿå áåëûå êíîïêè
  563.         {
  564.                 za_kadrom=kolichestvo-but_num;
  565.                 curbtn=but_num-1;
  566.         } else if (curbtn>but_num-1) curbtn=but_num-1; //ýòî åñëè âûäåëåíèå ïîñëå ñõëîïûâàíèÿ îêíà çà êàäðîì
  567.         //
  568.         if (onLeft(165,220)/6<longest_name) longest_name= onLeft(165,220)/6+1; //îãðàíè÷åíèå íà ðàçìåð áåëîãî ïîëÿ
  569.         DrawBar(220,57,longest_name*6,curbtn-3*18+57-3,0xFFFFFF); //áåëàÿ îáëàñòü ñëåâà
  570.         DrawBar(220,curbtn+1*18+57,longest_name*6,onTop(6,curbtn+1*18+57),0xFFFFFF); //áåëàÿ îáëàñòü ñëåâà
  571.         DrawBar(onLeft(155,0),57,121,curbtn-3*18+57-3,0xFFFFFF); //áåëàÿ îáëàñòü ñïðàâà
  572.         DrawBar(onLeft(155,0),curbtn+1*18+57,121,onTop(6,curbtn+1*18+57),0xFFFFFF); //áåëàÿ îáëàñòü ñïðàâà
  573.         //
  574.         str_len = onLeft(220,160)/6; //äëèííà íàçâàíèÿ ôàéëà
  575.         longest_name=strlen(off);
  576.         for (i=za_kadrom;i<za_kadrom+but_num;i++)
  577.         {
  578.                 if (strcmp(".",buf+72)==-1) off = file_mas[i]*304 + buf+72; else off = file_mas[i+1]*304 + buf+72;
  579.                 EAX = off - 8;
  580.                 size=ESDWORD[EAX];
  581.                 EAX = off - 40;
  582.                 EAX=ESDWORD[EAX];
  583.                 $shr eax,4
  584.                 $and eax,1
  585.                 isdir=EAX;
  586.                 if (curbtn<>i) if (isdir==1) Put_icon("<dir>"); else
  587.                 {
  588.                         WriteText(7-strlen(ConvertSize(size))*6+onLeft(75,0),y-22,0x80,0,ConvertSize(size),0);
  589.                         Put_icon(off+strlen(off)-4);
  590.                 }
  591.                 if (strlen(off)<str_len) temp_int=strlen(off); else temp_int=str_len;  //äëèííà íàçâàíèÿ ôàéëà         
  592.                 if (ins_mas[file_mas[i]]==0)
  593.                  WriteTextXY(220<<16+y, 0, off, temp_int); //âûäåëåíî ëè èíñåðòîì?
  594.                 else WriteTextXY(220<<16+y, 0x00FF9900, off, temp_int);
  595.                 y=y+18;
  596.                 if (longest_name<temp_int) longest_name=temp_int; //ñòðàííî: ïî÷åìó íå ðàáîòàåò
  597.         }
  598.         Line_ReDraw(videlenie);
  599.         DrawBar(onLeft(90,0),57,1,onTop(7,57),0xE4DFE1); //ïîëîñà ñåðàÿ âåðòèêàëüíàÿ 2
  600.         TVScroll();
  601. }
  602.  
  603. void Line_ReDraw(dword color){
  604.         if (rename_active==1)
  605.                 {
  606.                 rename_active=0;
  607.                 copystr(#path,#temp);
  608.                 copystr(#file_name,#temp+strlen(#temp));
  609.                 if (strcmp(#file_path,#temp)==-1) if (strlen(#file_name)>0)
  610.                         {
  611.                         CopyFile(#file_path,#temp);
  612.                         Del_File();
  613.                         //za_kadrom=kolichestvo-but_num;
  614.                         //curbtn=but_num-1;
  615.                         //Line_ReDraw(videlenie);
  616.                         }
  617.                 }
  618.         DrawBar(197,curbtn*18+57,onLeft(22,197),18,color); //ïîëîñà áåëàÿ èëè âûäåëåíèÿ
  619.         y= curbtn*18+85; //ïîëîæåíèå òåêñòà ïî Y
  620.         if (strcmp(".",buf+72)==-1) off = file_mas[curbtn+za_kadrom]*304 + buf+72; else off = file_mas[curbtn+za_kadrom+1]*304 + buf+72;
  621.         temp_int = onLeft(220,160)/6;
  622.         if (strlen(off)<temp_int) temp_int = strlen(off);  //äëèííà íàçâàíèÿ ôàéëà
  623.   if (ins_mas[file_mas[za_kadrom+curbtn]]==0)
  624.           WriteTextXY(220<<16+y, 0, off, temp_int); //âûäåëåíî ëè èíñåðòîì?
  625.                 //EDI = 0x80FFFFFF;
  626.                 //WriteTextXY(temp_int<<16+y, 0xC0000000,#temp, 7); //DD8500 èëè FF3399
  627.           else WriteTextXY(220<<16+y, 0x80DD8500, off, temp_int); //DD8500 èëè FF3399
  628.         EAX = off - 8;
  629.         size=ESDWORD[EAX];
  630.         EAX = off - 40;
  631.         EAX=ESDWORD[EAX];
  632.         $shr eax,4
  633.         $and eax,1
  634.         isdir=EAX;
  635.         if (isdir==1) Put_icon("<dir>"); else
  636.         {
  637.                 WriteText(7-strlen(ConvertSize(size))*6+onLeft(75,0),y-22,0x80,0,ConvertSize(size),0);
  638.                 Put_icon(off+strlen(off)-4);
  639.         }      
  640.         copystr(#path,#file_path);
  641.         copystr(off,#file_name);
  642.         copystr(off,#file_path+strlen(#file_path)); //èòàê, file_path=ôàéëó, ò.ê. ïî-óìîë÷àíèþ ýòî ïðîãà
  643.         DrawBar(onLeft(163,0),curbtn*18+57,1,18,0xE4DFE1); //ïîëîñà ñåðàÿ âåðòèêàëüíàÿ 1
  644.         DrawBar(onLeft(90,0),curbtn*18+57,1,18,0xE4DFE1); //ïîëîñà ñåðàÿ âåðòèêàëüíàÿ 2
  645.         if (color==videlenie) //çàêðàøèâàåì èêîíêó
  646.                 {
  647.                 if (temp_int==1) //ôàéëèê
  648.                         {
  649.                         DrawBar(200,y-26,2,15,videlenie);
  650.                         DrawBar(214,y-26,2,15,videlenie);
  651.                         DrawBar(210,y-26,4,1,videlenie);//ëå
  652.                         DrawBar(211,y-25,3,1,videlenie);//ñåí
  653.                         DrawBar(212,y-24,2,1,videlenie);//êà
  654.                         DrawBar(213,y-23,1,1,videlenie);//
  655.                         }
  656.                 if (temp_int==2) //ïàïêà
  657.                         {
  658.                         DrawBar(201,y-13,15,2,videlenie); //ñíèçó ëèíèÿ
  659.                         DrawBar(200,y-26,1,15,videlenie); //ñëåâà ëèíèÿ
  660.                         DrawBar(208,y-26,8,2,videlenie); //ñâåðõó ñïðàâà ëèíèÿ
  661.                         //.òî÷êè
  662.                         PutPixel(201,y-26+skin_width,videlenie); //ñâåðõó ñëåâà òî÷êà
  663.                         PutPixel(207,y-26+skin_width,videlenie); //ñâåðõó ñïðàâà òî÷êà
  664.                         PutPixel(201,y-14+skin_width,videlenie); //ñëåâà ñíèçó òî÷êà
  665.                         PutPixel(215,y-14+skin_width,videlenie); //ñïðàâà ñíèçó òî÷êà
  666.                         PutPixel(215,y-24+skin_width,videlenie); //êàêàÿ ðàçíèöà ãäå
  667.                         }
  668.                 IF (temp_int==3) PutPixel(215,y-26+skin_width,videlenie); //skin
  669.                 IF (temp_int==5) {DrawBar(200,y-26,1,15,videlenie); DrawBar(215,y-26,1,15,videlenie);} //video
  670.                 }
  671. }
  672.  
  673. void Open_Dir(dword path_,redraw){
  674. for (i=0;i<kolichestvo;i++) ins_mas[i]=0;
  675. //temp=path+3;
  676. //copestr(#temp
  677. //if (strcmp(#temp,"/rd")==0) ExitProcess(); //realloc(500000
  678.         open_file_70.func = 1;
  679.         open_file_70.pos = 0;
  680.         open_file_70.rezerv = 0;
  681.         open_file_70.sizefile = 65536;
  682.         open_file_70.buffer = buf;
  683.         open_file_70.rezerv2 = 0;
  684.         open_file_70.stroka = path_;
  685.     $mov eax,70
  686.     $mov ebx,#open_file_70.func
  687.     $int 0x40
  688.     kolichestvo=EBX;
  689.     //
  690.         if (kolichestvo<>-1) if (redraw==1)
  691.         {
  692.                 FOR (i=0;i<but_num;i++) DefineButton(197,i+1*18+39,onLeft(22,197),18,201+i+BT_DEL,0xFFFFFF); //óäàëÿåì ñòàðûå
  693.                 but_num=onTop(6,57)/18;
  694.                 if (strcmp(".",buf+72)==0) kolichestvo--; //ôèëüòðóåì ýëåìåíò "."
  695.                 IF (but_num>100) but_num=1; ELSE//ýòà ñòðàííàÿ ñòðî÷êà äëÿ òîãî åñëè ðàçìåðû îêðà ñëèøêîì ìàëåíüêèå
  696.                 IF (kolichestvo<but_num) but_num=kolichestvo;
  697.                 FOR (i=0;i<but_num;i++) DefineButton(197,i+1*18+39,onLeft(22,197),18,201+i+BT_HIDE+BT_NOFRAME,0xFFFFFF); //åáîøèì íîâûå
  698.                 DrawBar(197,75,onLeft(22,197),onTop(6,75),0xFFFFFF); //áåëàÿ îáëàñòü
  699.                 DrawBar(onLeft(163,0),57,1,onTop(7,57),0xE4DFE1); //ïîëîñà ñåðàÿ âåðòèêàëüíàÿ 1
  700.                 FoldesGoUp();
  701.                 List_ReDraw();
  702.                 copystr(path_,#edit_path);
  703.                 DrawBar(252,13,onLeft(61,252),15,0xFFFFFF); //áåëàÿ îáëàñòü ïîä KEdit
  704.                 KEdit();
  705.         }
  706. }
  707.  
  708. int k,l;
  709. void FoldesGoUp(){
  710. if (strcmp(#path,"/rd/1/")==0) kolichestvo--;  else if (strcmp(#path,"/fd/1/")==0) kolichestvo--;
  711. else if (strlen(#path)>7) if (strcmp(".",buf+72)==-1) kolichestvo--; //>7 ýòî äëÿ /hd1/ è ò.ä.
  712. k=0; l=0;
  713. off=buf+72;
  714. FOR (i=0;i<=kolichestvo;i++)
  715.         {
  716.                 EAX = off - 8;
  717.                 EAX = off - 40;
  718.                 EAX=ESDWORD[EAX];
  719.                 $shr eax,4
  720.                 $and eax,1
  721.                 isdir=EAX;
  722.                 IF (isdir==1) {file_mas[k]=i; k++;}
  723.                         ELSE {file_mas[kolichestvo-l]=i; l++;}
  724.                 off = off + 304;
  725.         }
  726. }
  727.  
  728. dword offs_put_icon, file_type;
  729. void Put_icon(dword extension){
  730.         lowcase(extension);
  731.         offs_put_icon = #somefile; //åøè íåèçâåñíûé ôàéë
  732.         file_type = ""; temp_int=1;
  733.         IF (strcmp(extension,".kex")==0) {      offs_put_icon = #kex; file_type="Program";  temp_int=0;}
  734.         IF (strcmp(extension,".cmd")==0) {      offs_put_icon = #cmd; file_type="CMD skript"; temp_int=0;}
  735.         IF (strcmp(extension,".skn")==0) {      offs_put_icon = #skn; file_type="Skin"; temp_int=3;}
  736.         IF (strcmp(extension,".chr")==0) {      offs_put_icon = #font; file_type="Font"; temp_int=4;}
  737.         IF (strcmp(extension,".avi")==0) {      offs_put_icon = #video; file_type="Video"; temp_int=5;}
  738.         IF (strcmp(extension,".ini")==0) {      offs_put_icon = #ini; file_type="Config"; temp_int=1;}
  739.         IF (strcmp(extension,"conf")==0) {      offs_put_icon = #ini; file_type="Config"; temp_int=1;}
  740.         IF (strcmp(extension,".htm")==0) {      offs_put_icon = #web; file_type="Web-page"; temp_int=1;}
  741.         IF (strcmp(extension,"html")==0) {      offs_put_icon = #web; file_type="Web-page"; temp_int=1;}
  742.         IF (strcmp(extension,".asm")==0) {      offs_put_icon = #source; file_type="Source"; }
  743.         IF (strcmp(extension,".inc")==0) {      offs_put_icon = #inc ; temp_int=8;}
  744.         IF (strcmp(extension,".exe")==0) {      offs_put_icon = #exe; file_type="Win32 Exec"; temp_int=0;}
  745.         IF (strcmp(extension,".dll")==0) {      offs_put_icon = #lib; file_type="Library"; temp_int=0;}
  746.         IF (strcmp(extension,".obj")==0) {      offs_put_icon = #lib; file_type="Library"; temp_int=0;}
  747.         //text
  748.         IF (strcmp(extension,".txt")==0) {      offs_put_icon = #text; file_type="Text"; temp_int=1;}
  749.         IF (strcmp(extension,".doc")==0) {      offs_put_icon = #text; file_type="Text"; temp_int=1;}
  750.         IF (strcmp(extension,".rtf")==0) {      offs_put_icon = #text; file_type="Text"; temp_int=1;}
  751.         //èçîáðàæåíèÿ
  752.         IF (strcmp(extension,".gif")==0) {      offs_put_icon = #pic; file_type="Image"; temp_int=1;}
  753.         IF (strcmp(extension,".bmp")==0) {      offs_put_icon = #pic; file_type="Image"; temp_int=1;}
  754.         IF (strcmp(extension,".png")==0) {      offs_put_icon = #pic; file_type="Image"; temp_int=1;}
  755.         IF (strcmp(extension,".jpg")==0) {      offs_put_icon = #pic; file_type="Image"; temp_int=1;}
  756.         IF (strcmp(extension,"jpeg")==0) {      offs_put_icon = #pic; file_type="Image"; temp_int=1;}
  757.         IF (strcmp(extension,".raw")==0) {      offs_put_icon = #pic; file_type="Image"; temp_int=1;}
  758.         //àðõèâû
  759.         IF (strcmp(extension,".rar")==0) {      offs_put_icon = #arhiv; file_type="Archive"; temp_int=6;}
  760.         IF (strcmp(extension,".zip")==0) {      offs_put_icon = #arhiv; file_type="Archive"; temp_int=6;}
  761.         IF (strcmp(extension,".cab")==0) {      offs_put_icon = #arhiv; file_type="Archive"; temp_int=6;}
  762.         IF (strcmp(extension,".tar")==0) {      offs_put_icon = #arhiv; file_type="Archive"; temp_int=6;}
  763.         IF (strcmp(extension,".ajr")==0) {      offs_put_icon = #arhiv; file_type="Archive"; temp_int=6;}
  764.         //audio
  765.         IF (strcmp(extension,".mp3")==0) {      offs_put_icon = #audio; file_type="Music"; temp_int=7;}
  766.         IF (strcmp(extension,".wav")==0) {      offs_put_icon = #audio; file_type="Audio"; temp_int=7;}
  767.         IF (strcmp(extension,".mid")==0) {      offs_put_icon = #audio; file_type="Audio"; temp_int=7;}
  768.         IF (strcmp(extension,"midi")==0) {      offs_put_icon = #audio; file_type="Audio"; temp_int=7;}
  769.         IF (strcmp(extension,".ogg")==0) {      offs_put_icon = #audio; file_type="Audio"; temp_int=7;}
  770.         //ïàïêà
  771.         IF (strcmp(extension,"<dir>")==0) { offs_put_icon = #folder; WriteText(onLeft(140,0),y-22,0x80,0,"<DIR>",0); temp_int=2;}
  772.         PutImage(offs_put_icon,16,15,200,y-26);
  773.         WriteText(onLeft(155,0),y-22,0x80,0,file_type,0);
  774. }
  775.  
  776. void Dir_Up()
  777. {
  778.         i=strlen(#path)-1;
  779.         do
  780.         {
  781.                 path[i]=0x00;
  782.                 i--;
  783.                 IF (i==0) break;
  784.         }
  785.         while (path[i]!='/');
  786.         za_kadrom=0; //â ñàìûé ââåðõ ñïèñêà
  787.         curbtn=0;
  788.         Open_Dir(#path,1);
  789. }
  790.  
  791. dword onLeft(dword right,left) {return Form.width-right-left;}
  792. dword onTop(dword down,up) {return Form.height-skin_width-down-up;}
  793.  
  794. char extension[5];
  795. void Run_File(){
  796. copystr(#file_path,#param); //ïî-óìîë÷àíèþ ïðîãà è ïàðàìåòð ðàâíû, åñëè îêàæåòñÿ ÷òî ýòî ôàéë, ïàðàì - ñáðîñèì
  797. copystr(#file_path+strlen(#file_path)-4,#extension); //óçíà¸ì ðàñøèðåíèå ôàéëà ñ êàêèì ðàáîòàåì
  798. lowcase(#extension);
  799. //òóò ìû ýòî ðàñøèðåíèå ñðàâíèìàåì, è, åñëè îíî àñîöèèðóåòñÿ ñ ïðîãîé, ïðîãà - ýòî file_path
  800.         IF (strcmp(#extension,".skn")==0) copystr("/rd/1/desktop",#file_path);
  801.         IF (strcmp(#extension,".avi")==0) copystr("/rd/1/kvid",#file_path);
  802.         IF (strcmp(#extension,".htm")==0) copystr("/rd/1/network/hTTPC",#file_path);
  803.         IF (strcmp(#extension,"html")==0) copystr("/rd/1/network/hTTPC",#file_path);
  804.         IF (strcmp(#extension,".3ds")==0) copystr("/rd/1/3d/view3ds",#file_path);
  805.         IF (strcmp(#extension,".lif")==0) copystr("/rd/1/demos/life2",#file_path);
  806.         //audio
  807.         IF (strcmp(#extension,".mp3")==0) copystr("/rd/1/AC97SND",#file_path);
  808.         IF (strcmp(#extension,".wav")==0) copystr("/rd/1/AC97SND",#file_path);
  809.         IF (strcmp(#extension,".mid")==0) copystr("/rd/1/MIDAMP",#file_path);
  810.         IF (strcmp(#extension,"midi")==0) copystr("/rd/1/MIDAMP",#file_path);
  811.         //text
  812.         IF (strcmp(#extension,".rtf")==0) copystr("/rd/1/RtfRead",#file_path);
  813.         IF (strcmp(#extension,".txt")==0) copystr("/rd/1/TinyPad",#file_path);
  814.         IF (strcmp(#extension,".inc")==0) copystr("/rd/1/TinyPad",#file_path);
  815.         IF (strcmp(#extension,".ini")==0) copystr("/rd/1/TinyPad",#file_path);
  816.         IF (strcmp(#extension,"conf")==0) copystr("/rd/1/TinyPad",#file_path);
  817.         IF (strcmp(#extension,".dat")==0) copystr("/rd/1/TinyPad",#file_path);
  818.         IF (strcmp(#extension,".asm")==0) copystr("/rd/1/TinyPad",#file_path); //AsmMenu1,AsmMenu2
  819.         //èçîáðàæåíèÿ
  820.         IF (strcmp(#extension,".gif")==0) copystr("/rd/1/GIFVIEW",#file_path); //GifMenu1,MenuAnimage
  821.         IF (strcmp(#extension,".bmp")==0) copystr("/rd/1/MV",#file_path); //BmpMenu1,MenuAnimage
  822.         IF (strcmp(#extension,".png")==0) copystr("/rd/1/@rcher",#file_path);
  823.         IF (strcmp(#extension,".jpg")==0) copystr("/rd/1/JpegView",#file_path);
  824.         IF (strcmp(#extension,"jpeg")==0) copystr("/rd/1/JpegView",#file_path);
  825. IF (strcmp(#file_path,#param)==0) copystr("",#param); //åñëè file_path íå èçìåíèëñÿ, òî ýòî òàêè, íàâåðíîå, ïðîãà, ïàðàìåòðîâ íåò.
  826. Run_Program(); //çàïóñê!
  827. }
  828.  
  829. void Run_Program()
  830. {
  831.     run_file_70.func = 7;
  832.     run_file_70.flag = 0;
  833.     run_file_70.param= #param;
  834.     run_file_70.rez1 = 0;
  835.     run_file_70.rez2 = 0;
  836.     run_file_70.rezerv2 = 0;
  837.     run_file_70.stroka = #file_path;
  838.     $mov eax,70
  839.     $mov ebx,#run_file_70.func
  840.     $int 0x40
  841. }
  842.  
  843. void Del_Form()
  844. {
  845.         if (isdir==0){//ïàïêè ïîêà ÷òî óäàëÿòü íå óìååì
  846.         temp_int=Form.width-200+197/2;
  847.         //òèïà îêíî
  848.         FOR (i=5;i<11;i++) DefineButton(197,i+1*18+39,onLeft(22,197),18,201+i+BT_DEL,0xFFFFFF); //óäàëÿåì êíîïêè ïîä ôîðìîé
  849.         DrawFlatButton(temp_int,160,200,80,0,0xE4DFE1); //ôîðìà
  850.         WriteText(temp_int+19,175,0x80,0,"Do you really want to delete",28);
  851.         WriteTextXY(220<<16+y, 0, off, strlen(off));
  852.         WriteText(temp_int+20,190,0x80,0,#file_name,0); //ïèøåì èìÿ è îíî ìîæåò áûòü î÷åíü äëèííûì
  853.         WriteText(strlen(#file_name)*6+temp_int+20,190,0x80,0,"?",1);
  854.         //êíîïî÷êè
  855.         DrawFlatButton(temp_int+20,208,70,20,301,0xFFB6B5);
  856.         WriteText(temp_int+46,215,0x80,0,"Yes",3);
  857.         DrawFlatButton(temp_int+111,208,70,20,302,0xC6DFC6);
  858.         WriteText(temp_int+141,215,0x80,0,"No",2);
  859.         del_active=1;
  860. }}
  861.        
  862. void Del_File()
  863. {
  864.         run_file_70.func = 8;
  865.         run_file_70.flag = 0;
  866.         run_file_70.param= 0;
  867.         run_file_70.rez1 = 0;
  868.         run_file_70.rez2 = 0;
  869.         run_file_70.rezerv2 = 0;
  870.         run_file_70.stroka = #file_path;
  871.         $mov eax,70
  872.         $mov ebx,#run_file_70.func
  873.         $int 0x40
  874.         del_active=0;
  875.         Open_Dir(#path,1);
  876. }
  877.  
  878. dword size_prefix;
  879. dword ConvertSize(dword bytes)
  880. {
  881.         copystr(IntToStr(bytes),#size_prefix);
  882.         copystr(" b ",#size_prefix+strlen(#size_prefix));
  883.         if (bytes>=1024)
  884.                 {
  885.                 bytes=bytes/1024;
  886.                 copystr(IntToStr(bytes),#size_prefix);
  887.                 copystr(" Kb",#size_prefix+strlen(#size_prefix));
  888.                 }
  889.         if (bytes>=1024)
  890.                 {
  891.                 bytes=bytes/1024;
  892.                 copystr(IntToStr(bytes),#size_prefix);
  893.                 copystr(" Mb",#size_prefix+strlen(#size_prefix));
  894.                 }
  895.         if (bytes>=1024)
  896.                 {
  897.                 bytes=bytes/1024;
  898.                 copystr(IntToStr(bytes),#size_prefix);
  899.                 copystr(" Gb",#size_prefix+strlen(#size_prefix));
  900.                 }
  901.         return #size_prefix;
  902. }
  903.  
  904. void Paste()
  905. {
  906.         if (strcmp(#copyfile,"")==-1){ //îòìåíà, åøè åù¸ íè÷¸ íå ñêîïèðîâàëè
  907.         copystr(#path,#temp);
  908.         copystr(#copy_name,#temp+strlen(#temp));
  909.         if (strcmp(#copyfile,#temp)==0) //åñëè ìû êîïèðóåì è âñòàâëÿåì â îäíîé è òîé æå ïàïêå
  910.                 {
  911.                         copystr(#path,#temp);
  912.                         copystr("new_",#temp+strlen(#temp));
  913.                         copystr(#copy_name,#temp+strlen(#temp));
  914.                 }
  915.         CopyFile(#copyfile,#temp);
  916.         //
  917.         if (cut_active==1) //åñëè ìû âûáðàëè âûðåçàòü
  918.                 {
  919.                         copystr(#copyfile,#file_path);
  920.                         Del_File();
  921.                         copystr("",#copyfile);
  922.                 }
  923.         Open_Dir(#path,1);
  924. }}
  925.  
  926. void Goto_edit_path()
  927. {
  928.         if (strcmp(#path,#edit_path)==-1) //ïðîâåðêà íå â ýòîé ëè ìû ïàïêå
  929.         {
  930.         copystr(#edit_path+strlen(#edit_path)-1,#temp); //åñëè ëåíü áûëî ñòàâèòü /
  931.         if (strcmp(#temp,"/")==-1) copystr("/",#edit_path+strlen(#edit_path));
  932.         copystr(#edit_path,#temp);
  933.         Open_Dir(#temp,0);
  934.         if (kolichestvo==-1) KEdit(); else //ïðîñòî î÷èùàåì ïîëîñó àäðåñà
  935.                 {
  936.                 za_kadrom=0; //íàâåðõ ñïèñêà
  937.                 curbtn=0;
  938.                 copystr(#temp,#path);
  939.                 }
  940.                 Open_Dir(#path,1);
  941.         }
  942. }
  943.  
  944. //
  945. dword PathHistory[256*8]="/rd/1/";
  946. dword PathHistory_Len[8]=0;
  947. int cur_path=0;
  948. //
  949. void GoBack(dword back)
  950. {
  951. if (back==0) //IF (cur_path<=8)
  952.         {
  953.         cur_path++;
  954.         copystr(#path,256*cur_path+#PathHistory); //ïèøåì
  955.         PathHistory_Len[cur_path]=strlen(#path);
  956.         }
  957. if (back==1) IF (cur_path>=1)
  958.         {
  959.         cur_path--;
  960.         copystr(256*cur_path+#PathHistory,#edit_path); //÷èòàåì
  961.         }
  962. DrawBar(252,13,onLeft(61,252),15,0xFFFFFF); //áåëàÿ îáëàñòü ïîä KEdit
  963. copystr(IntToStr(cur_path),#edit_path); //÷èòàåì
  964. KEdit();
  965. //Open_Dir(#path);
  966. }
  967.  
  968. /*int i,j,k;
  969. int n=20;
  970.  
  971. void sort_by_name(int z){
  972.      for(i = 0; i <= n-1; i++)
  973.     {
  974.         for(j = 0; j <= n-2-i; j++)
  975.         {
  976.             if( mas[j][z]>mas[j+1][z] )
  977.             {
  978.                     if (mas[j][z-1] == mas[j+1][z-1])
  979.                     {
  980.                     strcpy(back,mas[j]);
  981.                     strcpy(mas[j],mas[j+1]);
  982.                     strcpy(mas[j+1],back);
  983.                     }
  984.             }
  985.         }
  986.     }
  987. }*/
  988.  
  989. /*int q,z;
  990. int n=20;
  991. void sort_by_name(int z)
  992. {
  993.      for(q = 0; q <= n-1; q++) for(i = 0; i <= n-2-i; i++)
  994.      if( mas[i][z]>mas[j+1][z]) if (mas[i][z-1]==mas[i+1][z-1])
  995.         {
  996.                 strcpy(back,mas[i]);
  997.                 strcpy(mas[i],mas[i+1]);
  998.                 strcpy(mas[i+1],back);
  999.           }
  1000. }*/
  1001.  
  1002. /*âûçûâàòü òàê
  1003. for (k=0;k<255;k++) sort(k);
  1004. */
  1005.  
  1006. stop:
  1007.