2006-03-04 18:16:49 +00:00
|
|
|
/*
|
|
|
|
htop - SignalItem.c
|
2006-03-23 18:53:08 +00:00
|
|
|
(C) 2004-2006 Hisham H. Muhammad
|
2006-03-04 18:16:49 +00:00
|
|
|
Released under the GNU GPL, see the COPYING file
|
|
|
|
in the source distribution for its full text.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "SignalItem.h"
|
|
|
|
#include "String.h"
|
|
|
|
#include "Object.h"
|
|
|
|
#include "RichString.h"
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include "debug.h"
|
|
|
|
|
|
|
|
#define SIGNAL_COUNT 34
|
|
|
|
|
|
|
|
/*{
|
|
|
|
|
|
|
|
typedef struct Signal_ {
|
|
|
|
Object super;
|
|
|
|
char* name;
|
|
|
|
int number;
|
|
|
|
} Signal;
|
|
|
|
|
|
|
|
}*/
|
|
|
|
|
2006-07-11 06:13:32 +00:00
|
|
|
#ifdef DEBUG
|
2006-03-04 18:16:49 +00:00
|
|
|
char* SIGNAL_CLASS = "Signal";
|
2006-07-11 06:13:32 +00:00
|
|
|
#else
|
|
|
|
#define SIGNAL_CLASS NULL
|
|
|
|
#endif
|
2006-03-04 18:16:49 +00:00
|
|
|
|
2008-03-09 08:58:38 +00:00
|
|
|
static void Signal_delete(Object* cast) {
|
2006-03-04 18:16:49 +00:00
|
|
|
Signal* this = (Signal*)cast;
|
|
|
|
assert (this != NULL);
|
|
|
|
// names are string constants, so we're not deleting them.
|
|
|
|
free(this);
|
|
|
|
}
|
|
|
|
|
2008-03-09 08:58:38 +00:00
|
|
|
static void Signal_display(Object* cast, RichString* out) {
|
2006-03-04 18:16:49 +00:00
|
|
|
Signal* this = (Signal*)cast;
|
|
|
|
assert (this != NULL);
|
|
|
|
|
|
|
|
char buffer[31];
|
|
|
|
snprintf(buffer, 30, "%2d %s", this->number, this->name);
|
|
|
|
RichString_write(out, CRT_colors[DEFAULT_COLOR], buffer);
|
|
|
|
}
|
|
|
|
|
2008-03-09 08:58:38 +00:00
|
|
|
static Signal* Signal_new(char* name, int number) {
|
|
|
|
Signal* this = malloc(sizeof(Signal));
|
|
|
|
Object_setClass(this, SIGNAL_CLASS);
|
|
|
|
((Object*)this)->display = Signal_display;
|
|
|
|
((Object*)this)->delete = Signal_delete;
|
|
|
|
this->name = name;
|
|
|
|
this->number = number;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
2006-03-04 18:16:49 +00:00
|
|
|
int Signal_getSignalCount() {
|
|
|
|
return SIGNAL_COUNT;
|
|
|
|
}
|
|
|
|
|
|
|
|
Signal** Signal_getSignalTable() {
|
|
|
|
Signal** signals = malloc(sizeof(Signal*) * SIGNAL_COUNT);
|
|
|
|
signals[0] = Signal_new("Cancel", 0);
|
|
|
|
signals[1] = Signal_new("SIGHUP", 1);
|
|
|
|
signals[2] = Signal_new("SIGINT", 2);
|
|
|
|
signals[3] = Signal_new("SIGQUIT", 3);
|
|
|
|
signals[4] = Signal_new("SIGILL", 4);
|
|
|
|
signals[5] = Signal_new("SIGTRAP", 5);
|
|
|
|
signals[6] = Signal_new("SIGABRT", 6);
|
|
|
|
signals[7] = Signal_new("SIGIOT", 6);
|
|
|
|
signals[8] = Signal_new("SIGBUS", 7);
|
|
|
|
signals[9] = Signal_new("SIGFPE", 8);
|
|
|
|
signals[10] = Signal_new("SIGKILL", 9);
|
|
|
|
signals[11] = Signal_new("SIGUSR1", 10);
|
|
|
|
signals[12] = Signal_new("SIGSEGV", 11);
|
|
|
|
signals[13] = Signal_new("SIGUSR2", 12);
|
|
|
|
signals[14] = Signal_new("SIGPIPE", 13);
|
|
|
|
signals[15] = Signal_new("SIGALRM", 14);
|
|
|
|
signals[16] = Signal_new("SIGTERM", 15);
|
|
|
|
signals[17] = Signal_new("SIGSTKFLT", 16);
|
|
|
|
signals[18] = Signal_new("SIGCHLD", 17);
|
|
|
|
signals[19] = Signal_new("SIGCONT", 18);
|
|
|
|
signals[20] = Signal_new("SIGSTOP", 19);
|
|
|
|
signals[21] = Signal_new("SIGTSTP", 20);
|
|
|
|
signals[22] = Signal_new("SIGTTIN", 21);
|
|
|
|
signals[23] = Signal_new("SIGTTOU", 22);
|
|
|
|
signals[24] = Signal_new("SIGURG", 23);
|
|
|
|
signals[25] = Signal_new("SIGXCPU", 24);
|
|
|
|
signals[26] = Signal_new("SIGXFSZ", 25);
|
|
|
|
signals[27] = Signal_new("SIGVTALRM", 26);
|
|
|
|
signals[28] = Signal_new("SIGPROF", 27);
|
|
|
|
signals[29] = Signal_new("SIGWINCH", 28);
|
|
|
|
signals[30] = Signal_new("SIGIO", 29);
|
|
|
|
signals[31] = Signal_new("SIGPOLL", 29);
|
|
|
|
signals[32] = Signal_new("SIGPWR", 30);
|
|
|
|
signals[33] = Signal_new("SIGSYS", 31);
|
|
|
|
return signals;
|
|
|
|
}
|