From eaf11cc12a1aa4b050a8a1e7ea3770d3d9c81e95 Mon Sep 17 00:00:00 2001 From: Daniel Lange Date: Mon, 11 Apr 2016 13:00:29 +0200 Subject: Imported Upstream version 1.0 --- SignalsPanel.c | 83 ++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 46 insertions(+), 37 deletions(-) (limited to 'SignalsPanel.c') diff --git a/SignalsPanel.c b/SignalsPanel.c index 83dfda8..f591e63 100644 --- a/SignalsPanel.c +++ b/SignalsPanel.c @@ -1,7 +1,7 @@ #include "SignalsPanel.h" #include "Panel.h" -#include "SignalItem.h" +#include "ListItem.h" #include "RichString.h" #include "debug.h" @@ -11,59 +11,69 @@ /*{ +typedef struct SignalItem_ { + const char* name; + int number; +} SignalItem; + typedef struct SignalsPanel_ { Panel super; - - int state; - Signal** signals; } SignalsPanel; }*/ -static HandlerResult SignalsPanel_eventHandler(Panel* super, int ch) { - SignalsPanel* this = (SignalsPanel*) super; - - int size = Panel_size(super); - - if (ch <= 255 && isdigit(ch)) { - int sgn = ch-48 + this->state; - for (int i = 0; i < size; i++) - if (((Signal*) Panel_get(super, i))->number == sgn) { - Panel_setSelected(super, i); - break; - } - this->state = sgn * 10; - if (this->state > 100) - this->state = 0; - return HANDLED; - } else { - this->state = 0; - } - if (ch == 13) { - return BREAK_LOOP; - } - return IGNORED; -} - static void SignalsPanel_delete(Object* object) { Panel* super = (Panel*) object; SignalsPanel* this = (SignalsPanel*) object; Panel_done(super); - free(this->signals); free(this); } +static SignalItem signals[] = { + { .name = " 0 Cancel", .number = 0 }, + { .name = " 1 SIGHUP", .number = 1 }, + { .name = " 2 SIGINT", .number = 2 }, + { .name = " 3 SIGQUIT", .number = 3 }, + { .name = " 4 SIGILL", .number = 4 }, + { .name = " 5 SIGTRAP", .number = 5 }, + { .name = " 6 SIGABRT", .number = 6 }, + { .name = " 6 SIGIOT", .number = 6 }, + { .name = " 7 SIGBUS", .number = 7 }, + { .name = " 8 SIGFPE", .number = 8 }, + { .name = " 9 SIGKILL", .number = 9 }, + { .name = "10 SIGUSR1", .number = 10 }, + { .name = "11 SIGSEGV", .number = 11 }, + { .name = "12 SIGUSR2", .number = 12 }, + { .name = "13 SIGPIPE", .number = 13 }, + { .name = "14 SIGALRM", .number = 14 }, + { .name = "15 SIGTERM", .number = 15 }, + { .name = "16 SIGSTKFLT", .number = 16 }, + { .name = "17 SIGCHLD", .number = 17 }, + { .name = "18 SIGCONT", .number = 18 }, + { .name = "19 SIGSTOP", .number = 19 }, + { .name = "20 SIGTSTP", .number = 20 }, + { .name = "21 SIGTTIN", .number = 21 }, + { .name = "22 SIGTTOU", .number = 22 }, + { .name = "23 SIGURG", .number = 23 }, + { .name = "24 SIGXCPU", .number = 24 }, + { .name = "25 SIGXFSZ", .number = 25 }, + { .name = "26 SIGVTALRM", .number = 26 }, + { .name = "27 SIGPROF", .number = 27 }, + { .name = "28 SIGWINCH", .number = 28 }, + { .name = "29 SIGIO", .number = 29 }, + { .name = "29 SIGPOLL", .number = 29 }, + { .name = "30 SIGPWR", .number = 30 }, + { .name = "31 SIGSYS", .number = 31 }, +}; + SignalsPanel* SignalsPanel_new(int x, int y, int w, int h) { SignalsPanel* this = (SignalsPanel*) malloc(sizeof(SignalsPanel)); Panel* super = (Panel*) this; - Panel_init(super, x, y, w, h, SIGNAL_CLASS, true); + Panel_init(super, x, y, w, h, LISTITEM_CLASS, true); ((Object*)this)->delete = SignalsPanel_delete; - this->signals = Signal_getSignalTable(); - super->eventHandler = SignalsPanel_eventHandler; - int sigCount = Signal_getSignalCount(); - for(int i = 0; i < sigCount; i++) - Panel_set(super, i, (Object*) this->signals[i]); + for(unsigned int i = 0; i < sizeof(signals)/sizeof(SignalItem); i++) + Panel_set(super, i, (Object*) ListItem_new(signals[i].name, signals[i].number)); SignalsPanel_reset(this); return this; } @@ -73,5 +83,4 @@ void SignalsPanel_reset(SignalsPanel* this) { Panel_setHeader(super, "Send signal:"); Panel_setSelected(super, 16); // 16th item is SIGTERM - this->state = 0; } -- cgit v1.2.3