Subversion Repositories Kolibri OS

Rev

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