Subversion Repositories Kolibri OS

Rev

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