Subversion Repositories Kolibri OS

Rev

Rev 3042 | Blame | Last modification | View Log | Download | RSS feed

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