40 #ifdef PROCESSLIST_CONF_HEIGHT
41 #define PROCESSLIST_HEIGHT PROCESSLIST_CONF_HEIGHT
43 #define PROCESSLIST_HEIGHT 16
46 #define MAX_PROCESSLABELS 13
49 static struct {
struct process *p;
char id[2];} processes[MAX_PROCESSLABELS];
50 static struct ctk_label processidlabels[MAX_PROCESSLABELS];
51 static struct ctk_label processnamelabels[MAX_PROCESSLABELS];
53 static struct ctk_label killlabel =
54 {
CTK_LABEL(0, PROCESSLIST_HEIGHT - 2, 12, 1,
"Kill process")};
55 static char killprocnum[3];
56 static struct ctk_textentry killtextentry =
57 {
CTK_TEXTENTRY(13, PROCESSLIST_HEIGHT - 2, 2, 1, killprocnum, 2)};
58 static struct ctk_button killbutton =
59 {
CTK_BUTTON(19, PROCESSLIST_HEIGHT - 2, 2,
"Ok")};
60 static struct ctk_button processupdatebutton =
61 {
CTK_BUTTON(0, PROCESSLIST_HEIGHT - 1, 6,
"Update")};
62 static struct ctk_button processclosebutton =
63 {
CTK_BUTTON(19, PROCESSLIST_HEIGHT - 1, 5,
"Close")};
65 PROCESS(processes_process,
"Process listing");
67 AUTOSTART_PROCESSES(&processes_process);
75 update_processwindow(
void)
82 for(p = PROCESS_LIST(); p !=
NULL && i < MAX_PROCESSLABELS; p = p->next) {
84 idptr = processes[i].id;
85 idptr[0] =
'0' + (i / 10) % 10;
86 idptr[1] =
'0' + i % 10;
87 CTK_LABEL_NEW(&processidlabels[i],
88 1, i + 1, 2, 1, idptr);
91 CTK_LABEL_NEW(&processnamelabels[i],
92 4, i + 1, 22, 1, PROCESS_NAME_STRING(p));
119 unsigned char procnum, valid, i;
124 for(i = 0; i < 2; ++i) {
125 if(killprocnum[i] >=
'0' && killprocnum[i] <=
'9') {
126 procnum = procnum * 10 + (killprocnum[i] -
'0');
136 for(p = PROCESS_LIST(); p !=
NULL; p = p->next) {
137 if(p == processes[procnum].p) {
158 ctk_window_new(&processwindow, 26, PROCESSLIST_HEIGHT,
"Processes");
159 update_processwindow();
165 if(ev == EVENT_UPDATE) {
167 update_processwindow();
170 if(data == (process_data_t)&processupdatebutton) {
172 update_processwindow();
174 }
else if(data == (process_data_t)&processclosebutton) {
178 }
else if(data == (process_data_t)&killbutton) {
181 }
else if(ev == PROCESS_EVENT_EXIT ||
183 data == (process_data_t)&processwindow)) {
#define CTK_WIDGET_ADD(win, widg)
Add a widget to a window.
process_event_t ctk_signal_window_close
Emitted when a window is closed.
#define CTK_TEXTENTRY_CLEAR(e)
Clears a text entry widget and sets the cursor to the start of the text line.
process_event_t ctk_signal_button_activate
Same as ctk_signal_widget_activate.
void ctk_window_open(CC_REGISTER_ARG struct ctk_window *w)
Open a window, or bring window to front if already open.
#define CTK_WIDGET_FOCUS(win, widg)
Set focus to a widget.
void ctk_window_close(struct ctk_window *w)
Close a window if it is open.
#define PROCESS_BEGIN()
Define the beginning of a process.
#define CTK_TEXTENTRY(x, y, w, h, text, len)
Instantiating macro for the ctk_textentry widget.
#define NULL
The null pointer.
int process_post(struct process *p, process_event_t ev, process_data_t data)
Post an asynchronous event.
#define CTK_LABEL(x, y, w, h, text)
Instantiating macro for the ctk_label widget.
#define PROCESS_THREAD(name, ev, data)
Define the body of a process.
#define PROCESS_END()
Define the end of a process.
void ctk_window_new(struct ctk_window *window, unsigned char w, unsigned char h, char *title)
Create a new window.
#define LOADER_UNLOAD()
Unload a program from memory.
void ctk_window_clear(struct ctk_window *w)
Remove all widgets from a window.
#define PROCESS_WAIT_EVENT()
Wait for an event to be posted to the process.
#define PROCESS(name, strname)
Declare a process.
#define CTK_BUTTON(x, y, w, text)
Instantiating macro for the ctk_button widget.
Representation of a CTK window.
#define CTK_WIDGET_REDRAW(widg)
Add a widget to the redraw queue.
void process_exit(struct process *p)
Cause a process to exit.