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