Subversion Repositories Kolibri OS

Rev

Rev 7244 | Blame | Last modification | View Log | Download | RSS feed

  1. #define MEMSIZE 4096*20
  2.  
  3. //===================================================//
  4. //                                                   //
  5. //                       LIB                         //
  6. //                                                   //
  7. //===================================================//
  8.  
  9. #include "../lib/gui.h"
  10. #include "../lib/list_box.h"
  11. #include "../lib/obj/box_lib.h"
  12. #include "../lib/io.h"
  13. #include "../lib/patterns/select_list.h"
  14. #include "../lib/patterns/restart_process.h"
  15.  
  16. //===================================================//
  17. //                                                   //
  18. //                       DATA                        //
  19. //                                                   //
  20. //===================================================//
  21.  
  22. #define T_WINDOW_TITLE "Process Manager"
  23. #define T_SHOW_SYSTEM_PROCESSES "Show system"
  24. #define T_DETAILS "Details"
  25. #define T_END_PROCESS "End process"
  26.  
  27.  
  28. #define BOTPANEL_H 34
  29. proc_info Form;
  30. proc_info Process;
  31.  
  32. enum {
  33.         BTN_ID_SHOW_SYSTEM_PROCESSES=20,
  34.         BTN_ID_KILL_PROCESS,
  35.         BTN_ID_SHOW_PROCESS_INFO
  36. };
  37.  
  38. int current_process_id = 0;
  39. unsigned maxcpu;
  40. int proc_list[256];
  41.  
  42. checkbox show_system = { T_SHOW_SYSTEM_PROCESSES, false };
  43.  
  44. //===================================================//
  45. //                                                   //
  46. //                       CODE                        //
  47. //                                                   //
  48. //===================================================//
  49.  
  50. void main()
  51. {
  52.         int btn;
  53.         load_dll(boxlib, #box_lib_init,0);
  54.         SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER);
  55.         maxcpu = GetCpuFrequency();
  56.         loop()
  57.         {
  58.           WaitEventTimeout(50);
  59.           switch(EAX & 0xFF)
  60.           {
  61.                 case evMouse:
  62.                         if (!CheckActiveProcess(Form.ID)) break;
  63.                         SelectList_ProcessMouse();
  64.                         break;
  65.                 case evKey:
  66.                         GetKeys();
  67.                         if (select_list.ProcessKey(key_scancode)) SelectList_LineChanged();
  68.                         break;
  69.                 case evButton:
  70.                         btn = GetButtonID();
  71.                         if (1 == btn)
  72.                         {
  73.                                 ExitProcess();
  74.                         }
  75.                         if (show_system.click(btn))  
  76.                         {
  77.                                 SelectList_LineChanged();
  78.                         }
  79.                         if (BTN_ID_KILL_PROCESS == btn)  
  80.                         {
  81.                                 KillProcess(current_process_id);
  82.                                 pause(10);
  83.                                 SelectList_LineChanged();
  84.                         }
  85.                         if (BTN_ID_SHOW_PROCESS_INFO == btn)  
  86.                         {
  87.                                 io.run("/sys/tinfo", itoa(GetProcessSlot(current_process_id)));
  88.                         }
  89.                         break;
  90.                 case evReDraw:
  91.                         system.color.get();
  92.                         DefineAndDrawWindow(screen.width-400/2,screen.height-450/2,400,454,0x73,0,T_WINDOW_TITLE,0);
  93.                         GetProcessInfo(#Form, SelfInfo);
  94.                         if (Form.status_window>2) break;
  95.                         if (Form.width  < 300) { MoveSize(OLD,OLD,300,OLD); break; }
  96.                         if (Form.height < 200) { MoveSize(OLD,OLD,OLD,200); break; }
  97.                         SelectList_Init(6, 6, Form.cwidth-12 - scroll1.size_x, Form.cheight-12-BOTPANEL_H, false);
  98.                         SelectList_DrawBorder();
  99.                         DrawWideRectangle(0, 0, Form.cwidth, Form.cheight, 4, system.color.work);
  100.                         DrawBar(select_list.x-2, select_list.y+select_list.h+2,
  101.                                 select_list.w+scroll1.size_x+4, BOTPANEL_H, system.color.work);
  102.                         DrawCaptButton(Form.cwidth-116,
  103.                                 select_list.y+select_list.h+5,
  104.                                 110,25,BTN_ID_KILL_PROCESS,0xF38181, 0xFFFfff, T_END_PROCESS);
  105.                         DrawCaptButton(Form.cwidth-236,
  106.                                 select_list.y+select_list.h+5,
  107.                                 110,25,BTN_ID_SHOW_PROCESS_INFO,
  108.                                 system.color.work_button, system.color.work_button_text, T_DETAILS);
  109.                         show_system.draw(select_list.x + 3, select_list.y+select_list.h+10);
  110.                 default:
  111.                         SelectList_LineChanged();
  112.           }
  113.         }
  114. }
  115.  
  116. void SelectList_LineChanged()
  117. {
  118.         GetProcessList();
  119.         SelectList_Draw();
  120. }
  121.  
  122.  
  123. void GetProcessList()
  124. {
  125.         int i, j;
  126.         select_list.count=0;
  127.         for (i=0; i<MAX_PROCESS_COUNT; i++)
  128.         {
  129.                 GetProcessInfo(#Process, i);
  130.                 if (Process.name)
  131.                 {
  132.                         for (j=0; j<11; j++) if (Process.name[j]!=' ') {
  133.                                 if (show_system.checked==false) {
  134.                                         //do not show system process
  135.                                         if (Process.name[0]=='@') break;
  136.                                         if (!strcmp(#Process.name, "IDLE")) break;
  137.                                         if (!strcmp(#Process.name, "OS")) break;
  138.                                 }
  139.                                 proc_list[select_list.count] = i;
  140.                                 select_list.count++;
  141.                                 break;
  142.                         }
  143.                 }
  144.         }
  145. }
  146.  
  147. void SelectList_DrawLine(dword i)
  148. {
  149.         int posy;
  150.         char cpu_use[16];
  151.         dword bg_color;
  152.         GetProcessInfo(#Process, proc_list[i+select_list.first]);
  153.        
  154.         posy = i *select_list.item_h + select_list.y;
  155.         if (i % 2) bg_color = 0xFFFfff; else bg_color = 0xF0F0F0;
  156.         if (i+select_list.first == select_list.cur_y) {
  157.                 current_process_id = Process.ID;
  158.                 bg_color = 0x67CCEB;
  159.         }
  160.         DrawBar(select_list.x, posy, select_list.w, select_list.item_h, bg_color);
  161.         WriteText(select_list.x+005, posy+select_list.text_y, select_list.font_type, 0, #Process.name);
  162.         WriteText(select_list.w/10*5+select_list.x, posy+select_list.text_y, select_list.font_type, 0x444444, ConvertSizeToKb(Process.use_memory));
  163.         sprintf(#cpu_use, "%i %%", Process.use_cpu*100/maxcpu);
  164.         if (maxcpu) WriteText(select_list.w/10*8+select_list.x - calc(strlen(#cpu_use)-4*8),
  165.                 posy+select_list.text_y, select_list.font_type, 0x444444, #cpu_use);
  166. }
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173. stop: