Subversion Repositories Kolibri OS

Rev

Rev 3306 | Blame | Compare with Previous | 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]",
  9.         "Удалить диск [Del]",
  10.         "Добавить [Ctrl+Enter]",
  11.         0};
  12.        
  13.         ?define INTRO_TEXT_1 "Здесь будет отображаться список"
  14.         ?define INTRO_TEXT_2 "виртуальных дисков в системе."
  15.         ?define INTRO_TEXT_3 "Попробуйте добавить один..."
  16.  
  17.         ?define NOTIFY_TEXT_NO_DISK    "Для начала добавьте хотя бы один диск"
  18.         ?define NOTIFY_TEXT_DISK_LIMIT "Достигнут предел количества виртуальных дисков"
  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. #define TOPPANELH 30
  51. #define BOTPANELH 20
  52.  
  53.  
  54.  
  55. void Main_Window()
  56. {
  57.         unsigned int id, key, err;
  58.         int i, x;
  59.        
  60.         mem_Init();
  61.         if (load_dll2(boxlib, #edit_box_draw,0)!=0)
  62.         {
  63.                 notify("error: library doesn't exist /rd/1/lib/box_lib.obj");
  64.                 ExitProcess();
  65.         }
  66.         SetEventMask(0x27);
  67.         loop()
  68.         {
  69.                 switch(WaitEvent())
  70.                 {
  71.                 case evMouse:
  72.                         //edit_box_mouse stdcall (#edit1);
  73.                         break;
  74.                 case evButton:
  75.             id=GetButtonID();              
  76.                         if (id==1) ExitProcess();
  77.                         if (id==10) AddDisk();
  78.                         if (id==11) //del
  79.                         {
  80.                                 _DEL_DISK:
  81.                                 if (disk_num==0)
  82.                                 {
  83.                                         notify(NOTIFY_TEXT_NO_DISK);
  84.                                         break;
  85.                                 }
  86.                                 param[0]='d';
  87.                                 param[1]=disk_list[selected].Item[3];
  88.                                 err = Console_Work();
  89.                                 if ((err!=0) && (err<7)) notify(rezult_text[err]);
  90.                                 pause(15);
  91.                                 GetDisks();
  92.                                 DrawTmpDisks();
  93.                         }
  94.                         if (id>=20)
  95.                         {
  96.                                 if (selected==id-20) OpenTmpDisk();
  97.                                 selected=id-20;
  98.                                 DrawTmpDisks();
  99.                         }
  100.             break;
  101.         case evKey:
  102.                         key = GetKey();
  103.                         if (key==182) if (disk_num<>0) goto _DEL_DISK;
  104.                         if (key==51) AddDisk();
  105.                         if (key==13) OpenTmpDisk();
  106.                         if (key==178)
  107.                         {
  108.                                 if (selected==0) break;
  109.                                 selected--;
  110.                                 DrawTmpDisks();
  111.                         }
  112.                         if (key==177)
  113.                         {
  114.                                 if (selected+2>disk_num) break;
  115.                                 selected++;
  116.                                 DrawTmpDisks();
  117.                         }
  118.                         if (key==176)
  119.                         {
  120.                                 if (selected<3) break;
  121.                                 selected-=3;
  122.                                 DrawTmpDisks();
  123.                         }
  124.                         if (key==179)
  125.                         {
  126.                                 if (selected+4>disk_num) break;
  127.                                 selected+=3;
  128.                                 DrawTmpDisks();
  129.                         }
  130.                         //EAX=key<<8;
  131.                         //edit_box_key stdcall(#edit1);
  132.                         break;
  133.          case evReDraw:                
  134.                         sc.get();
  135.                         DefineAndDrawWindow(170,150,314,250,0x74,sc.work,"Virtual Disk Manager 0.45",0);
  136.                         GetProcessInfo(#Form, SelfInfo);
  137.                         if (Form.status_window>2) return;
  138.  
  139.                         DrawBar(0,0,  Form.cwidth,TOPPANELH, sc.work);
  140.                         DrawBar(0,TOPPANELH, Form.cwidth,1,  sc.work_graph);
  141.                         x=6;
  142.                         for (i=0; i<2; i++)
  143.                         {
  144.                                 DefineButton(x,5, strlen(but_text[i])*6+28,19, 10+i, sc.work_button);
  145.                                 _PutImage(x+3,8,  14,14,   i*14*14*3+#icons);
  146.                                 WriteText(x+22,11, 0x80, sc.work_button_text, but_text[i]);
  147.                                 x+=strlen(but_text[i])*6+37;
  148.                         }                      
  149.                         GetDisks();
  150.                         DrawTmpDisks();
  151.                 }
  152.         }
  153. }
  154.  
  155.  
  156. void OpenTmpDisk()
  157. {
  158.         unsigned char eol_param[256];
  159.         if (!disk_num) return;
  160.         strcpy(#eol_param, "/tmp#/1/");
  161.         eol_param[4]=disk_list[selected].Item[3];
  162.         RunProgram("/sys/File managers/Eolite", #eol_param);
  163. }
  164.  
  165.  
  166. void GetDisks()
  167. {
  168.         unsigned int j, fcount=30;
  169.         unsigned char disk_name[256];
  170.        
  171.         mem_Free(devbuf);
  172.         devbuf= mem_Alloc(32);
  173.         ReadDir(0, devbuf, "/");
  174.         fcount=ESDWORD[devbuf+8];
  175.         mem_Free(devbuf);
  176.         devbuf = mem_Alloc(fcount+1*304+32);
  177.         ReadDir(fcount, devbuf, "/");
  178.        
  179.         disk_num=0;
  180.         for (j=0; j<fcount; j++;)
  181.         {
  182.                 strcpy(#disk_name, j*304+devbuf+72);
  183.                 if (disk_name[0]!='t') continue;
  184.                 strcpy(#disk_list[disk_num].Item, #disk_name);
  185.                 disk_num++;
  186.         }
  187.         if (disk_num>12) disk_num=12;
  188. }
  189.  
  190.  
  191. unsigned int disk_pos_x[]={13,13,13,83,83,83,153,153,153,223,223,223};
  192. unsigned int disk_pos_y[]={40,65,90,40,65,90,40,65,90,40,65,90};
  193.  
  194. void DrawTmpDisks()
  195. {
  196.         int i;
  197.         DrawBar(0,31, Form.cwidth,Form.cheight-TOPPANELH-BOTPANELH-2, 0xFFFFFF);
  198.         DrawBar(0,Form.cheight-BOTPANELH-1, Form.cwidth,1, sc.work_graph);
  199.         DrawBar(0,Form.cheight-BOTPANELH, Form.cwidth,BOTPANELH, sc.work);
  200.         WriteText(10, Form.cheight-13, 0x80, sc.work_text, "Free RAM size:");
  201.         WriteText(100, Form.cheight-13, 0x80, sc.work_text, itoa(GetFreeRAM()/2048));
  202.         WriteText(strlen(itoa(GetFreeRAM()/2048))*6 + 100, Form.cheight-13, 0x80, sc.work_text, " MB");
  203.         if (disk_num==0)
  204.         {
  205.                 WriteText(17,45,    0x90, 0x777777, INTRO_TEXT_1);
  206.                 WriteText(17,45+15, 0x90, 0x777777, INTRO_TEXT_2);
  207.                 WriteText(17,45+42, 0x90, 0x777777, INTRO_TEXT_3);
  208.                 return;
  209.         };
  210.         if (selected>=disk_num) selected=disk_num-1; //restore selected
  211.         for (i=0; i<10; i++) DeleteButton(20+i);
  212.         for (i=0; i<disk_num; i++)
  213.         {
  214.                 DefineButton(disk_pos_x[i], disk_pos_y[i], 60, 20, 20+i, 0xFFFfff);
  215.                 WriteText(disk_pos_x[i]+25,disk_pos_y[i]+6, 0x90, 0, #disk_list[i].Item);
  216.                 _PutImage(disk_pos_x[i]+5,disk_pos_y[i]+4, 14,14, 3*14*14*3+#icons);
  217.                 if (selected==i) DrawRectangle(disk_pos_x[i], disk_pos_y[i], 60-1, 20-1, 0x00459A);
  218.         }
  219. }
  220.  
  221. void AddDisk()
  222. {
  223.         unsigned int i, j, err;
  224.         if (disk_num>=10)
  225.         {
  226.                 notify(NOTIFY_TEXT_DISK_LIMIT);
  227.                 return;
  228.         }
  229.         param[0]='a';
  230.         for (i=0; i<9; i++)
  231.         {
  232.                 for (j=0; j<=disk_num; j++)
  233.                 {
  234.                         if (i+48==disk_list[j].Item[3]) continue 1;
  235.                 }
  236.                 break;
  237.         }
  238.         param[1]=i+48;
  239.         err = Console_Work();
  240.         if ((err!=0) && (err<7)) notify(rezult_text[err]);
  241.         pause(5);
  242.         GetDisks();
  243.         DrawTmpDisks();
  244. }
  245.  
  246.  
  247.  
  248.  
  249.  
  250.