Subversion Repositories Kolibri OS

Rev

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