Subversion Repositories Kolibri OS

Rev

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