Subversion Repositories Kolibri OS

Rev

Rev 4638 | 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;
  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.         GetSizeDisk();
  67.         edit_disk_size.left = strlen(INTRO_TEXT_4)*6 + 10;
  68.         SetEventMask(0x27);
  69.         loop()
  70.         {
  71.                 switch(WaitEvent())
  72.                 {
  73.                 case evMouse:
  74.                         if (!CheckActiveProcess(Form.ID)) 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==9)
  108.                         {
  109.                                 if ( !asm test edit_disk_size.flags, 2) edit_disk_size.flags=1000000000000010b;
  110.                                 else edit_disk_size.flags=1000000000000000b;
  111.                                 edit_box_draw stdcall (#edit_disk_size);
  112.                         }                              
  113.                         if ( asm test edit_disk_size.flags, 2)
  114.                         {
  115.                                 if (key==13)
  116.                                 {
  117.                                         edit_disk_size.flags=1000000000000000b;
  118.                                         edit_box_draw stdcall (#edit_disk_size);
  119.                                 }
  120.                                 EAX=key<<8;
  121.                                 edit_box_key stdcall(#edit_disk_size);
  122.                                 break;
  123.                         }
  124.                         if (key==182) if (disk_num<>0) goto _DEL_DISK;
  125.                         if (key==185) AddDisk();
  126.                         if (key==13) OpenTmpDisk();
  127.                         if (key==178)
  128.                         {
  129.                                 if (selected==0) break;
  130.                                 selected--;
  131.                                 DrawTmpDisks();
  132.                         }
  133.                         if (key==177)
  134.                         {
  135.                                 if (selected+2>disk_num) break;
  136.                                 selected++;
  137.                                 DrawTmpDisks();
  138.                         }
  139.                         if (key==176)
  140.                         {
  141.                                 if (selected<3) break;
  142.                                 selected-=3;
  143.                                 DrawTmpDisks();
  144.                         }
  145.                         if (key==179)
  146.                         {
  147.                                 if (selected+4>disk_num) break;
  148.                                 selected+=3;
  149.                                 DrawTmpDisks();
  150.                         }
  151.                         //EAX=key<<8;
  152.                         //edit_box_key stdcall(#edit_disk_size);
  153.                         break;
  154.          case evReDraw:                
  155.                         sc.get();
  156.                         DefineAndDrawWindow(170,150,314,270,0x74,sc.work,"Virtual Disk Manager 0.5",0);
  157.                         GetProcessInfo(#Form, SelfInfo);
  158.                         if (Form.status_window>2) break;
  159.  
  160.                         DrawBar(0,0,  Form.cwidth,TOPPANELH, sc.work);
  161.                         DrawBar(0,TOPPANELH, Form.cwidth,1,  sc.work_graph);
  162.                         WriteText(6, 9, 0x80, sc.work_text, INTRO_TEXT_4);
  163.                         WriteText(edit_disk_size.left + edit_disk_size.width + 8, 9, 0x80, sc.work_text, "MB.");
  164.                         edit_box_draw stdcall (#edit_disk_size);
  165.                         for (i=0, x=6; i<2; i++, x+=strlen(but_text[i])*6+37)
  166.                         {
  167.                                 DefineButton(x,25, strlen(but_text[i])*6+28,19, 10+i, sc.work_button);
  168.                                 _PutImage(x+3,28,  14,14,   i*14*14*3+#icons);
  169.                                 WriteText(x+22,31, 0x80, sc.work_button_text, but_text[i]);
  170.                         }                      
  171.                         GetDisks();
  172.                         DrawTmpDisks();
  173.                 }
  174.         }
  175. }
  176.  
  177. void GetSizeDisk()
  178. {
  179.         int fr;
  180.         fr = GetFreeRAM() / 5;
  181.         fr = itoa(fr / 2048);
  182.         strcpy(#disk_size, fr);
  183.         edit_disk_size.size = edit_disk_size.pos = strlen(#disk_size);
  184.         edit_box_draw stdcall (#edit_disk_size);
  185. }
  186.  
  187. void OpenTmpDisk()
  188. {
  189.         unsigned char eol_param[256];
  190.         if (!disk_num) return;
  191.         strcpy(#eol_param, "/tmp#/1/");
  192.         eol_param[4]=disk_list[selected].Item[3];
  193.         RunProgram("/sys/File managers/Eolite", #eol_param);
  194. }
  195.  
  196.  
  197. void GetDisks()
  198. {
  199.         unsigned int j, fcount=30;
  200.         unsigned char disk_name[256];
  201.        
  202.         mem_Free(devbuf);
  203.         devbuf= mem_Alloc(32);
  204.         ReadDir(0, devbuf, "/");
  205.         fcount=ESDWORD[devbuf+8];
  206.         mem_Free(devbuf);
  207.         devbuf = mem_Alloc(fcount+1*304+32);
  208.         ReadDir(fcount, devbuf, "/");
  209.        
  210.         disk_num=0;
  211.         for (j=0; j<fcount; j++;)
  212.         {
  213.                 strcpy(#disk_name, j*304+devbuf+72);
  214.                 if (disk_name[0]!='t') continue;
  215.                 strcpy(#disk_list[disk_num].Item, #disk_name);
  216.                 disk_num++;
  217.         }
  218.         if (disk_num>12) disk_num=12;
  219. }
  220.  
  221.  
  222. unsigned int disk_pos_x[]={13,13,13,83,83,83,153,153,153,223,223,223};
  223. unsigned int disk_pos_y[]={60,85,110,60,85,110,60,85,110,60,85,110};
  224.  
  225. void DrawTmpDisks()
  226. {
  227.         char free_ram_text[60];
  228.         int i,FreeRAM=GetFreeRAM()/1024;
  229.         DrawBar(0,51, Form.cwidth,Form.cheight-TOPPANELH-BOTPANELH-2, 0xFFFFFF);
  230.         DrawBar(0,Form.cheight-BOTPANELH-1, Form.cwidth,1, sc.work_graph);
  231.         DrawBar(0,Form.cheight-BOTPANELH, Form.cwidth,BOTPANELH, sc.work);
  232.         strcpy(#free_ram_text, FREE_RAM_TEXT);
  233.         strcat(#free_ram_text, itoa(FreeRAM));
  234.         strcat(#free_ram_text, " MB");
  235.         WriteText(10, Form.cheight-13, 0x80, sc.work_text, #free_ram_text);
  236.         if (disk_num==0)
  237.         {
  238.                 WriteText(17,65,    0x90, 0x777777, INTRO_TEXT_1);
  239.                 WriteText(17,65+15, 0x90, 0x777777, INTRO_TEXT_2);
  240.                 WriteText(17,65+42, 0x90, 0x777777, INTRO_TEXT_3);
  241.                 return;
  242.         };
  243.         if (selected>=disk_num) selected=disk_num-1; //restore selected
  244.         for (i=0; i<10; i++) DeleteButton(20+i);
  245.         for (i=0; i<disk_num; i++)
  246.         {
  247.                 DefineButton(disk_pos_x[i], disk_pos_y[i], 60, 20, 20+i, 0xFFFfff);
  248.                 WriteText(disk_pos_x[i]+25,disk_pos_y[i]+6, 0x90, 0, #disk_list[i].Item);
  249.                 _PutImage(disk_pos_x[i]+5,disk_pos_y[i]+4, 14,14, 3*14*14*3+#icons);
  250.                 if (selected==i) DrawRectangle(disk_pos_x[i], disk_pos_y[i], 60-1, 20-1, 0x00459A);
  251.         }
  252. }
  253.  
  254. void AddDisk()
  255. {
  256.         unsigned int i, j, err;
  257.         if (disk_num>=10)
  258.         {
  259.                 notify(NOTIFY_TEXT_DISK_LIMIT);
  260.                 return;
  261.         }
  262.        
  263.         param[0]='a';
  264.         for (i=0; i<9; i++)
  265.         {
  266.                 for (j=0; j<=disk_num; j++)
  267.                 {
  268.                         if (i+48==disk_list[j].Item[3]) continue 1;
  269.                 }
  270.                 break;
  271.         }
  272.        
  273.         param[1]=i+48;
  274.         param[2]='s';
  275.         param[3]='\0';
  276.         strcat(#param, #disk_size);
  277.         err = Console_Work();
  278.         if ((err!=0) && (err<7)) notify(rezult_text[err]);
  279.         pause(5);
  280.         GetDisks();
  281.         DrawTmpDisks();
  282.         GetSizeDisk();
  283. }
  284.  
  285.  
  286.  
  287.  
  288.  
  289.