Rev 7244 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6696 | leency | 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" |
||
6708 | leency | 14 | #include "../lib/patterns/restart_process.h" |
6696 | leency | 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 | |||
7244 | leency | 42 | checkbox show_system = { T_SHOW_SYSTEM_PROCESSES, false }; |
43 | |||
6696 | leency | 44 | //===================================================// |
45 | // // |
||
46 | // CODE // |
||
47 | // // |
||
48 | //===================================================// |
||
49 | |||
50 | void main() |
||
51 | { |
||
7244 | leency | 52 | int btn; |
6696 | leency | 53 | load_dll(boxlib, #box_lib_init,0); |
7227 | leency | 54 | SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER); |
7357 | leency | 55 | maxcpu = GetCpuFrequency(); |
6696 | leency | 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 | } |
||
7244 | leency | 75 | if (show_system.click(btn)) |
76 | { |
||
6696 | leency | 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(); |
||
6746 | leency | 92 | DefineAndDrawWindow(screen.width-400/2,screen.height-450/2,400,454,0x73,0,T_WINDOW_TITLE,0); |
6696 | leency | 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); |
||
7244 | leency | 109 | show_system.draw(select_list.x + 3, select_list.y+select_list.h+10); |
6696 | leency | 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; |
||
6708 | leency | 127 | for (i=0; i |
6696 | leency | 128 | { |
129 | GetProcessInfo(#Process, i); |
||
130 | if (Process.name) |
||
131 | { |
||
132 | for (j=0; j<11; j++) if (Process.name[j]!=' ') { |
||
7244 | leency | 133 | if (show_system.checked==false) { |
6696 | leency | 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:11;>>> |