Subversion Repositories Kolibri OS

Rev

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

  1. #include "..\lib\figures.h"
  2. #include "..\lib\mem.h"
  3. #include "..\lib\dll.h"
  4. #include "..\lib\edit_box_lib.h"
  5.  
  6. #ifdef LANG_RUS
  7.         unsigned char *but_text[]={
  8.         "Äîáàâèòü äèñê [F2]"w,
  9.         "Óäàëèòü äèñê [Del]"w,
  10.         "Äîáàâèòü [Ctrl+Enter]"w,
  11.         0};
  12.        
  13.         ?define INTRO_TEXT_1 "Çäåñü áóäåò îòîáðàæàòüñÿ ñïèñîê"w
  14.         ?define INTRO_TEXT_2 "âèðòóàëüíûõ äèñêîâ â ñèñòåìå."w
  15.         ?define INTRO_TEXT_3 "Ïîïðîáóéòå äîáàâèòü îäèí..."w
  16.  
  17.         ?define NOTIFY_TEXT_NO_DISK    "Äëÿ íà÷àëà äîáàâüòå õîòÿ áû îäèí äèñê"w
  18.         ?define NOTIFY_TEXT_DISK_LIMIT "Äîñòèãíóò ïðåäåë êîëè÷åñòâà âèðòóàëüíûõ äèñêîâ"w
  19.        
  20. #else
  21.         unsigned char *but_text[]={
  22.         "Add disk [F2]",
  23.         "Delete disk [Del]",
  24.         "Add [Ctrl+Enter]",
  25.         0};
  26.        
  27.         ?define INTRO_TEXT_1 " There will be list of mounted"
  28.         ?define INTRO_TEXT_2 " virtual disks."
  29.         ?define INTRO_TEXT_3 " Try to add one..."
  30.  
  31.         ?define NOTIFY_TEXT_NO_DISK    "You need to have at least one disk"
  32.         ?define NOTIFY_TEXT_DISK_LIMIT "Reached the limit of the number of virtual disks"
  33. #endif
  34.  
  35. struct path_string { unsigned char Item[256]; };
  36. path_string disk_list[40];
  37.  
  38. dword devbuf;
  39. int disk_num;
  40. int selected;
  41.  
  42. system_colors sc;
  43. proc_info Form;
  44.  
  45. int mouse_dd;
  46. unsigned char dsize[30];
  47. edit_box edit1= {40,20,200,0xffffff,0x94AECE,0x94AECE,0x94AECE,0,4,#dsize,#mouse_dd,100000000000010b};
  48.  
  49. unsigned char icons[14*56] = FROM "icons.raw";
  50.  
  51.  
  52.  
  53. void Main_Window()
  54. {
  55.         unsigned int id;
  56.         unsigned char key;
  57.        
  58.         mem_Init();
  59.         if (load_dll2(boxlib, #edit_box_draw,0)!=0)
  60.         {
  61.                 notify("error: library doesn't exists /rd/1/lib/box_lib.obj");
  62.                 ExitProcess();
  63.         }
  64.         SetEventMask(0x27);
  65.         loop()
  66.         {
  67.                 switch(WaitEvent())
  68.                 {
  69.                 case evMouse:
  70.                         //edit_box_mouse stdcall (#edit1);
  71.                         break;
  72.                 case evButton:
  73.             id=GetButtonID();              
  74.                         if (id==1) ExitProcess();
  75.                         if (id==10) AddDisk();
  76.                         if (id==11) //del
  77.                         {
  78.                                 _DEL_DISK:
  79.                                 if (disk_num==0)
  80.                                 {
  81.                                         notify(NOTIFY_TEXT_NO_DISK);
  82.                                         break;
  83.                                 }
  84.                                 param[0]='d';
  85.                                 param[1]=disk_list[selected].Item[3];
  86.                                 Console_Work();
  87.                                 Pause(15);
  88.                                 GetDisks();
  89.                                 DrawTmpDisks();
  90.                         }
  91.                         if (id>=20)
  92.                         {
  93.                                 if (selected==id-20) OpenTmpDisk();
  94.                                 selected=id-20;
  95.                                 DrawTmpDisks();
  96.                         }
  97.             break;
  98.         case evKey:
  99.                         key = GetKey();
  100.                         if (key==182) if (disk_num<>0) goto _DEL_DISK;
  101.                         if (key==51) AddDisk();
  102.                         if (key==13) OpenTmpDisk();
  103.                         if (key==178)
  104.                         {
  105.                                 if (selected==0) break;
  106.                                 selected--;
  107.                                 DrawTmpDisks();
  108.                         }
  109.                         if (key==177)
  110.                         {
  111.                                 if (selected+2>disk_num) break;
  112.                                 selected++;
  113.                                 DrawTmpDisks();
  114.                         }
  115.                         if (key==176)
  116.                         {
  117.                                 if (selected<3) break;
  118.                                 selected-=3;
  119.                                 DrawTmpDisks();
  120.                         }
  121.                         if (key==179)
  122.                         {
  123.                                 if (selected+4>disk_num) break;
  124.                                 selected+=3;
  125.                                 DrawTmpDisks();
  126.                         }
  127.                         //EAX=key<<8;
  128.                         //edit_box_key stdcall(#edit1);
  129.                         break;
  130.          case evReDraw:
  131.                         Draw_Window();
  132.                 }
  133.         }
  134. }
  135.  
  136.  
  137. void OpenTmpDisk()
  138. {
  139.         unsigned char eol_param[256];
  140.         if (!disk_num) return;
  141.         strcpy(#eol_param, "/tmp#/1/");
  142.         eol_param[4]=disk_list[selected].Item[3];
  143.         RunProgram("/sys/File managers/Eolite", #eol_param);
  144. }
  145.  
  146.  
  147. void GetDisks()
  148. {
  149.         unsigned int j, fcount=30;
  150.         unsigned char disk_name[256];
  151.        
  152.         mem_Free(devbuf);
  153.         devbuf= mem_Alloc(32);
  154.         ReadDir(0, devbuf, "/");
  155.         fcount=ESDWORD[devbuf+8];
  156.         mem_Free(devbuf);
  157.         devbuf = mem_Alloc(fcount+1*304+32);
  158.         ReadDir(fcount, devbuf, "/");
  159.        
  160.         disk_num=0;
  161.         for (j=0; j<fcount; j++;)
  162.         {
  163.                 strcpy(#disk_name, j*304+devbuf+72);
  164.                 if (disk_name[0]!='t') continue;
  165.                 strcpy(#disk_list[disk_num].Item, #disk_name);
  166.                 disk_num++;
  167.         }
  168.         if (disk_num>12) disk_num=12;
  169. }
  170.  
  171.  
  172. unsigned int disk_pos_x[]={13,13,13,83,83,83,153,153,153,223,223,223};
  173. unsigned int disk_pos_y[]={40,65,90,40,65,90,40,65,90,40,65,90};
  174.  
  175. void DrawTmpDisks()
  176. {
  177.         int i;
  178.         DrawBar(0,31, Form.width-9,Form.height-GetSkinHeight()-5-30, 0xFFFFFF);
  179.         if (disk_num==0)
  180.         {
  181.                 WriteText(17,45,    0x90, 0x777777, INTRO_TEXT_1, 0);
  182.                 WriteText(17,45+15, 0x90, 0x777777, INTRO_TEXT_2, 0);
  183.                 WriteText(17,45+42, 0x90, 0x777777, INTRO_TEXT_3, 0);
  184.                 return;
  185.         };
  186.         if (selected>=disk_num) selected=disk_num-1; //âîññòàíàâëèâàåò âûäåëåíèå - õîðîøàÿ ôè÷à
  187.         for (i=0; i<10; i++) DeleteButton(20+i);
  188.         for (i=0; i<disk_num; i++)
  189.         {
  190.                 DefineButton(disk_pos_x[i], disk_pos_y[i], 60, 20, 20+i, 0xFFFfff);
  191.                 WriteText(disk_pos_x[i]+25,disk_pos_y[i]+6, 0x90, 0, #disk_list[i].Item, 0);
  192.                 _PutImage(disk_pos_x[i]+5,disk_pos_y[i]+4, 14,14, 3*14*14*3+#icons);
  193.                 if (selected==i) DrawRectangle(disk_pos_x[i], disk_pos_y[i], 60-1, 20-1, 0x00459A);
  194.         }
  195. }
  196.  
  197. void AddDisk()
  198. {
  199.         unsigned int i, j;
  200.         if (disk_num>=10)
  201.         {
  202.                 notify(NOTIFY_TEXT_DISK_LIMIT);
  203.                 return;
  204.         }
  205.         param[0]='a';
  206.         for (i=0; i<9; i++)
  207.         {
  208.                 for (j=0; j<=disk_num; j++)
  209.                 {
  210.                         if (i+48==disk_list[j].Item[3]) continue 1;
  211.                 }
  212.                 break;
  213.         }
  214.         param[1]=i+48;
  215.         Console_Work();
  216.         Pause(5);
  217.         GetDisks();
  218.         DrawTmpDisks();
  219. }
  220.  
  221. void Draw_Window()
  222. {      
  223.         int i, x;
  224.        
  225.         sc.get();
  226.         DefineAndDrawWindow(170,150,314,250,0x74,sc.work,"Virtual Disk Manager 0.4",0);
  227.         GetProcessInfo(#Form, SelfInfo);
  228.         if (Form.status_window>2) return; //åñëè ñâåðíóòî â çàãîëîâîê, íè÷åãî íå ðèñóåì
  229.        
  230.         //ðèñóåì ïàíåëü
  231.         DrawBar(0,0,  Form.width-9,30, sc.work);
  232.         DrawBar(0,30, Form.width-9,1,  sc.work_graph);
  233.         x=6;
  234.         for (i=0; i<2; i++)
  235.         {
  236.                 DefineButton(x,5, strlen(but_text[i])*6+28,19, 10+i, sc.work_button);
  237.                 _PutImage(x+3,8,  14,14,   i*14*14*3+#icons);
  238.                 WriteText(x+22,11, 0x80, sc.work_button_text, but_text[i], 0);
  239.                 x+=strlen(but_text[i])*6+37;
  240.         }
  241.        
  242.         //ïîëó÷àåì ñïèñîê äîñòóïíûõ äèñêîâ
  243.         GetDisks();
  244.         //âûâîäèì äîñòóïíûå äèñêè
  245.         DrawTmpDisks();
  246.         //AddPanel();
  247. }
  248.  
  249. /*void AddPanel()
  250. {
  251.         DrawBar(0,Form.height-GetSkinHeight()-40, Form.width-9,1,  sc.work_graph);
  252.         DrawBar(0,Form.height-GetSkinHeight()-39, Form.width-9,35, sc.work);
  253.  
  254.         strcpy(#dsize, itoa(GetFreeRAM()/10));
  255.         //strcpy(#dsize, "100");
  256.         edit1.size=edit1.pos=strlen(#dsize);
  257.         edit_box_draw stdcall(#edit1); //ðèñóåì ñòðîêó àäðåñà
  258.         //DefineButton(-strlen(but_text[2])+Form.width-9,200, strlen(but_text[2])*6+28,19, 12, sc.work_button);
  259.         //_PutImage(-strlen(but_text[2])+Form.width-9+3,200+3,  14,14,   2*14*14*3+#icons);
  260. }*/
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.