Subversion Repositories Kolibri OS

Rev

Rev 6708 | Go to most recent revision | 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. int show_system;
  40. unsigned maxcpu;
  41. int proc_list[256];
  42.  
  43. //===================================================//
  44. //                                                   //
  45. //                       CODE                        //
  46. //                                                   //
  47. //===================================================//
  48.  
  49. void GetCpuFrequency() {
  50.         EAX = 18;
  51.         EBX = 5;
  52.         $int 0x40
  53.         maxcpu = EAX;
  54. }
  55.  
  56. void main()
  57. {
  58.         byte btn;
  59.         load_dll(boxlib, #box_lib_init,0);
  60.         SetEventMask(10000000000000000000000001100111b);
  61.         debugi(3);
  62.         GetCpuFrequency();
  63.         debugi(4);
  64.         loop()
  65.         {
  66.           WaitEventTimeout(50);
  67.           switch(EAX & 0xFF)
  68.           {
  69.                 case evMouse:
  70.                         if (!CheckActiveProcess(Form.ID)) break;
  71.                         SelectList_ProcessMouse();
  72.                         break;
  73.                 case evKey:
  74.                         GetKeys();
  75.                         if (select_list.ProcessKey(key_scancode)) SelectList_LineChanged();
  76.                         break;
  77.                 case evButton:
  78.                         btn = GetButtonID();
  79.                         if (1 == btn)
  80.                         {
  81.                                 ExitProcess();
  82.                         }
  83.                         if (BTN_ID_SHOW_SYSTEM_PROCESSES == btn)  
  84.                         {
  85.                                 show_system ^= 1;
  86.                                 Draw_ShowSystemProcessesCheckbox();
  87.                                 SelectList_LineChanged();
  88.                         }
  89.                         if (BTN_ID_KILL_PROCESS == btn)  
  90.                         {
  91.                                 KillProcess(current_process_id);
  92.                                 pause(10);
  93.                                 SelectList_LineChanged();
  94.                         }
  95.                         if (BTN_ID_SHOW_PROCESS_INFO == btn)  
  96.                         {
  97.                                 io.run("/sys/tinfo", itoa(GetProcessSlot(current_process_id)));
  98.                         }
  99.                         break;
  100.                 case evReDraw:
  101.                         system.color.get();
  102.                         DefineAndDrawWindow(screen.width-400/2,screen.height-450/2,400,454,0x73,0,T_WINDOW_TITLE,0);
  103.                         GetProcessInfo(#Form, SelfInfo);
  104.                         if (Form.status_window>2) break;
  105.                         if (Form.width  < 300) { MoveSize(OLD,OLD,300,OLD); break; }
  106.                         if (Form.height < 200) { MoveSize(OLD,OLD,OLD,200); break; }
  107.                         SelectList_Init(6, 6, Form.cwidth-12 - scroll1.size_x, Form.cheight-12-BOTPANEL_H, false);
  108.                         SelectList_DrawBorder();
  109.                         DrawWideRectangle(0, 0, Form.cwidth, Form.cheight, 4, system.color.work);
  110.                         DrawBar(select_list.x-2, select_list.y+select_list.h+2,
  111.                                 select_list.w+scroll1.size_x+4, BOTPANEL_H, system.color.work);
  112.                         DrawCaptButton(Form.cwidth-116,
  113.                                 select_list.y+select_list.h+5,
  114.                                 110,25,BTN_ID_KILL_PROCESS,0xF38181, 0xFFFfff, T_END_PROCESS);
  115.                         DrawCaptButton(Form.cwidth-236,
  116.                                 select_list.y+select_list.h+5,
  117.                                 110,25,BTN_ID_SHOW_PROCESS_INFO,
  118.                                 system.color.work_button, system.color.work_button_text, T_DETAILS);
  119.                         Draw_ShowSystemProcessesCheckbox();
  120.                 default:
  121.                         SelectList_LineChanged();
  122.           }
  123.         }
  124. }
  125.  
  126. void SelectList_LineChanged()
  127. {
  128.         GetProcessList();
  129.         SelectList_Draw();
  130. }
  131.  
  132.  
  133. void GetProcessList()
  134. {
  135.         int i, j;
  136.         select_list.count=0;
  137.         for (i=0; i<MAX_PROCESS_COUNT; i++)
  138.         {
  139.                 GetProcessInfo(#Process, i);
  140.                 if (Process.name)
  141.                 {
  142.                         for (j=0; j<11; j++) if (Process.name[j]!=' ') {
  143.                                 if (show_system==false) {
  144.                                         //do not show system process
  145.                                         if (Process.name[0]=='@') break;
  146.                                         if (!strcmp(#Process.name, "IDLE")) break;
  147.                                         if (!strcmp(#Process.name, "OS")) break;
  148.                                 }
  149.                                 proc_list[select_list.count] = i;
  150.                                 select_list.count++;
  151.                                 break;
  152.                         }
  153.                 }
  154.         }
  155. }
  156.  
  157. void SelectList_DrawLine(dword i)
  158. {
  159.         int posy;
  160.         char cpu_use[16];
  161.         dword bg_color;
  162.         GetProcessInfo(#Process, proc_list[i+select_list.first]);
  163.        
  164.         posy = i *select_list.item_h + select_list.y;
  165.         if (i % 2) bg_color = 0xFFFfff; else bg_color = 0xF0F0F0;
  166.         if (i+select_list.first == select_list.cur_y) {
  167.                 current_process_id = Process.ID;
  168.                 bg_color = 0x67CCEB;
  169.         }
  170.         DrawBar(select_list.x, posy, select_list.w, select_list.item_h, bg_color);
  171.         WriteText(select_list.x+005, posy+select_list.text_y, select_list.font_type, 0, #Process.name);
  172.         WriteText(select_list.w/10*5+select_list.x, posy+select_list.text_y, select_list.font_type, 0x444444, ConvertSizeToKb(Process.use_memory));
  173.         sprintf(#cpu_use, "%i %%", Process.use_cpu*100/maxcpu);
  174.         if (maxcpu) WriteText(select_list.w/10*8+select_list.x - calc(strlen(#cpu_use)-4*8),
  175.                 posy+select_list.text_y, select_list.font_type, 0x444444, #cpu_use);
  176. }
  177.  
  178.  
  179. void Draw_ShowSystemProcessesCheckbox() {
  180.         CheckBox(select_list.x + 3, select_list.y+select_list.h+10, 20,
  181.                 T_SHOW_SYSTEM_PROCESSES, show_system);
  182. }
  183.  
  184.  
  185.  
  186.  
  187.  
  188. stop: