aboutsummaryrefslogtreecommitdiffstats
path: root/CRT.c
diff options
context:
space:
mode:
authorDaniel Lange <DLange@git.local>2016-04-11 13:00:15 +0200
committerDaniel Lange <DLange@git.local>2016-04-11 13:00:15 +0200
commitd3c9975943df58e293359b87905d19ff1fd52061 (patch)
treee416378879f60e8d538b1b25963904f767d30ff4 /CRT.c
downloaddebian_htop-d3c9975943df58e293359b87905d19ff1fd52061.tar.gz
debian_htop-d3c9975943df58e293359b87905d19ff1fd52061.tar.bz2
debian_htop-d3c9975943df58e293359b87905d19ff1fd52061.zip
Imported Upstream version 0.5upstream/0.5
Diffstat (limited to 'CRT.c')
-rw-r--r--CRT.c270
1 files changed, 270 insertions, 0 deletions
diff --git a/CRT.c b/CRT.c
new file mode 100644
index 0000000..6c2149c
--- /dev/null
+++ b/CRT.c
@@ -0,0 +1,270 @@
+/*
+htop
+(C) 2004 Hisham H. Muhammad
+Released under the GNU GPL, see the COPYING file
+in the source distribution for its full text.
+*/
+
+#include "CRT.h"
+
+#include <curses.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+#include "String.h"
+
+#include "debug.h"
+
+#define WHITE_PAIR 0
+#define BLUE_PAIR 1
+#define GREEN_PAIR 2
+#define RED_PAIR 3
+#define BROWN_PAIR 4
+#define CYAN_PAIR 5
+#define BLACK_PAIR 6
+#define BLACK_CYAN_PAIR 7
+#define RED_CYAN_PAIR 8
+#define BLACK_GREEN_PAIR 9
+#define BLACK_WHITE_PAIR 10
+
+#define MIN_UPDATE_SLICE 15
+
+//#link curses
+
+bool CRT_hasColors;
+
+/*{
+
+typedef enum ColorElements_ {
+ RESET_COLOR,
+ DEFAULT_COLOR,
+ FUNCTION_BAR,
+ FUNCTION_KEY,
+ FAILED_SEARCH,
+ PANEL_HEADER_FOCUS,
+ PANEL_HEADER_UNFOCUS,
+ PANEL_HIGHLIGHT_FOCUS,
+ PANEL_HIGHLIGHT_UNFOCUS,
+ LARGE_NUMBER,
+ METER_TEXT,
+ METER_VALUE,
+ LED_COLOR,
+ UPTIME,
+ TASKS_TOTAL,
+ TASKS_RUNNING,
+ SWAP,
+ PROCESS,
+ PROCESS_SHADOW,
+ PROCESS_TAG,
+ PROCESS_MEGABYTES,
+ PROCESS_TREE,
+ PROCESS_R_STATE,
+ PROCESS_BASENAME,
+ PROCESS_HIGH_PRIORITY,
+ PROCESS_LOW_PRIORITY,
+ BAR_BORDER,
+ BAR_SHADOW,
+ GRAPH_1,
+ GRAPH_2,
+ GRAPH_3,
+ GRAPH_4,
+ GRAPH_5,
+ GRAPH_6,
+ GRAPH_7,
+ GRAPH_8,
+ GRAPH_9,
+ MEMORY_USED,
+ MEMORY_BUFFERS,
+ MEMORY_CACHE,
+ LOAD,
+ LOAD_AVERAGE_FIFTEEN,
+ LOAD_AVERAGE_FIVE,
+ LOAD_AVERAGE_ONE,
+ CHECK_BOX,
+ CHECK_MARK,
+ CHECK_TEXT,
+ CLOCK,
+ CPU_NICE,
+ CPU_NORMAL,
+ CPU_KERNEL,
+ HELP_BOLD,
+ LAST_COLORELEMENT
+} ColorElements;
+
+extern int CRT_colors[LAST_COLORELEMENT];
+
+}*/
+
+/* private property */
+int CRT_colors[LAST_COLORELEMENT];
+
+void CRT_init() {
+ initscr();
+ noecho();
+ halfdelay(MIN_UPDATE_SLICE);
+ nonl();
+ intrflush(stdscr, false);
+ keypad(stdscr, true);
+ curs_set(0);
+ if (has_colors()) {
+ start_color();
+ CRT_hasColors = true;
+ } else {
+ CRT_hasColors = false;
+ }
+ char* termType = getenv("TERM");
+ if (String_eq(termType, "xterm") || String_eq(termType, "xterm-color") || String_eq(termType, "vt220")) {
+ define_key("\033OP", KEY_F(1));
+ define_key("\033OQ", KEY_F(2));
+ define_key("\033OR", KEY_F(3));
+ define_key("\033OS", KEY_F(4));
+ }
+#ifndef DEBUG
+ signal(11, CRT_handleSIGSEGV);
+#endif
+ signal(SIGTERM, CRT_handleSIGTERM);
+ use_default_colors();
+ init_pair(BLUE_PAIR, COLOR_BLUE, -1);
+ init_pair(GREEN_PAIR, COLOR_GREEN, -1);
+ init_pair(RED_PAIR, COLOR_RED, -1);
+ init_pair(BROWN_PAIR, COLOR_YELLOW, -1);
+ init_pair(CYAN_PAIR, COLOR_CYAN, -1);
+ init_pair(BLACK_PAIR, COLOR_BLACK, -1);
+ init_pair(BLACK_PAIR, COLOR_BLACK, -1);
+ init_pair(BLACK_CYAN_PAIR, COLOR_BLACK, COLOR_CYAN);
+ init_pair(RED_CYAN_PAIR, COLOR_RED, COLOR_CYAN);
+ init_pair(BLACK_GREEN_PAIR, COLOR_BLACK, COLOR_GREEN);
+ init_pair(BLACK_WHITE_PAIR, COLOR_BLACK, COLOR_WHITE);
+ if (has_colors()) {
+ CRT_colors[RESET_COLOR] = A_NORMAL;
+ CRT_colors[DEFAULT_COLOR] = A_NORMAL;
+ CRT_colors[FUNCTION_BAR] = COLOR_PAIR(BLACK_CYAN_PAIR);
+ CRT_colors[FUNCTION_KEY] = A_NORMAL;
+ CRT_colors[PANEL_HEADER_FOCUS] = COLOR_PAIR(BLACK_GREEN_PAIR);
+ CRT_colors[PANEL_HEADER_UNFOCUS] = COLOR_PAIR(BLACK_GREEN_PAIR);
+ CRT_colors[PANEL_HIGHLIGHT_FOCUS] = COLOR_PAIR(BLACK_CYAN_PAIR);
+ CRT_colors[PANEL_HIGHLIGHT_UNFOCUS] = COLOR_PAIR(BLACK_WHITE_PAIR);
+ CRT_colors[FAILED_SEARCH] = COLOR_PAIR(RED_CYAN_PAIR);
+ CRT_colors[UPTIME] = A_BOLD | COLOR_PAIR(CYAN_PAIR);
+ CRT_colors[LARGE_NUMBER] = A_BOLD | COLOR_PAIR(RED_PAIR);
+ CRT_colors[METER_TEXT] = COLOR_PAIR(CYAN_PAIR);
+ CRT_colors[METER_VALUE] = A_BOLD | COLOR_PAIR(CYAN_PAIR);
+ CRT_colors[LED_COLOR] = COLOR_PAIR(GREEN_PAIR);
+ CRT_colors[TASKS_RUNNING] = A_BOLD | COLOR_PAIR(GREEN_PAIR);
+ CRT_colors[PROCESS] = A_NORMAL;
+ CRT_colors[PROCESS_SHADOW] = A_BOLD | COLOR_PAIR(BLACK_PAIR);
+ CRT_colors[PROCESS_TAG] = A_BOLD | COLOR_PAIR(BROWN_PAIR);
+ CRT_colors[PROCESS_MEGABYTES] = COLOR_PAIR(CYAN_PAIR);
+ CRT_colors[PROCESS_BASENAME] = A_BOLD | COLOR_PAIR(CYAN_PAIR);
+ CRT_colors[PROCESS_TREE] = COLOR_PAIR(CYAN_PAIR);
+ CRT_colors[PROCESS_R_STATE] = COLOR_PAIR(GREEN_PAIR);
+ CRT_colors[PROCESS_HIGH_PRIORITY] = COLOR_PAIR(RED_PAIR);
+ CRT_colors[PROCESS_LOW_PRIORITY] = COLOR_PAIR(RED_PAIR);
+ CRT_colors[BAR_BORDER] = A_BOLD;
+ CRT_colors[BAR_SHADOW] = A_BOLD | COLOR_PAIR(BLACK_PAIR);
+ CRT_colors[SWAP] = COLOR_PAIR(RED_PAIR);
+ CRT_colors[GRAPH_1] = A_BOLD | COLOR_PAIR(RED_PAIR);
+ CRT_colors[GRAPH_2] = COLOR_PAIR(RED_PAIR);
+ CRT_colors[GRAPH_3] = A_BOLD | COLOR_PAIR(BROWN_PAIR);
+ CRT_colors[GRAPH_4] = A_BOLD | COLOR_PAIR(GREEN_PAIR);
+ CRT_colors[GRAPH_5] = COLOR_PAIR(GREEN_PAIR);
+ CRT_colors[GRAPH_6] = COLOR_PAIR(CYAN_PAIR);
+ CRT_colors[GRAPH_7] = A_BOLD | COLOR_PAIR(BLUE_PAIR);
+ CRT_colors[GRAPH_8] = COLOR_PAIR(BLUE_PAIR);
+ CRT_colors[GRAPH_9] = A_BOLD | COLOR_PAIR(BLACK_PAIR);
+ CRT_colors[MEMORY_USED] = COLOR_PAIR(GREEN_PAIR);
+ CRT_colors[MEMORY_BUFFERS] = COLOR_PAIR(BLUE_PAIR);
+ CRT_colors[MEMORY_CACHE] = COLOR_PAIR(BROWN_PAIR);
+ CRT_colors[LOAD_AVERAGE_FIFTEEN] = A_BOLD | COLOR_PAIR(BLACK_PAIR);
+ CRT_colors[LOAD_AVERAGE_FIVE] = A_NORMAL;
+ CRT_colors[LOAD_AVERAGE_ONE] = A_BOLD;
+ CRT_colors[LOAD] = A_BOLD;
+ CRT_colors[HELP_BOLD] = A_BOLD | COLOR_PAIR(CYAN_PAIR);
+ CRT_colors[CPU_NICE] = COLOR_PAIR(BLUE_PAIR);
+ CRT_colors[CPU_NORMAL] = COLOR_PAIR(GREEN_PAIR);
+ CRT_colors[CPU_KERNEL] = COLOR_PAIR(RED_PAIR);
+ CRT_colors[CLOCK] = A_BOLD;
+ CRT_colors[CHECK_BOX] = COLOR_PAIR(CYAN_PAIR);
+ CRT_colors[CHECK_MARK] = A_BOLD;
+ CRT_colors[CHECK_TEXT] = A_NORMAL;
+ } else {
+ CRT_colors[RESET_COLOR] = A_NORMAL;
+ CRT_colors[DEFAULT_COLOR] = A_NORMAL;
+ CRT_colors[FUNCTION_BAR] = A_REVERSE;
+ CRT_colors[FUNCTION_KEY] = A_NORMAL;
+ CRT_colors[PANEL_HEADER_FOCUS] = A_REVERSE;
+ CRT_colors[PANEL_HEADER_UNFOCUS] = A_REVERSE;
+ CRT_colors[PANEL_HIGHLIGHT_FOCUS] = A_REVERSE | A_BOLD;
+ CRT_colors[PANEL_HIGHLIGHT_UNFOCUS] = A_REVERSE;
+ CRT_colors[FAILED_SEARCH] = A_REVERSE | A_BOLD;
+ CRT_colors[UPTIME] = A_BOLD;
+ CRT_colors[LARGE_NUMBER] = A_BOLD;
+ CRT_colors[METER_TEXT] = A_NORMAL;
+ CRT_colors[METER_VALUE] = A_BOLD;
+ CRT_colors[LED_COLOR] = A_NORMAL;
+ CRT_colors[TASKS_RUNNING] = A_BOLD;
+ CRT_colors[PROCESS] = A_NORMAL;
+ CRT_colors[PROCESS_SHADOW] = A_DIM;
+ CRT_colors[PROCESS_TAG] = A_BOLD;
+ CRT_colors[PROCESS_MEGABYTES] = A_BOLD;
+ CRT_colors[PROCESS_BASENAME] = A_BOLD;
+ CRT_colors[PROCESS_TREE] = A_BOLD;
+ CRT_colors[PROCESS_R_STATE] = A_BOLD;
+ CRT_colors[PROCESS_HIGH_PRIORITY] = A_BOLD;
+ CRT_colors[PROCESS_LOW_PRIORITY] = A_DIM;
+ CRT_colors[BAR_BORDER] = A_BOLD;
+ CRT_colors[BAR_SHADOW] = A_DIM;
+ CRT_colors[SWAP] = A_BOLD;
+ CRT_colors[GRAPH_1] = A_BOLD;
+ CRT_colors[GRAPH_2] = A_BOLD;
+ CRT_colors[GRAPH_3] = A_BOLD;
+ CRT_colors[GRAPH_4] = A_NORMAL;
+ CRT_colors[GRAPH_5] = A_NORMAL;
+ CRT_colors[GRAPH_6] = A_NORMAL;
+ CRT_colors[GRAPH_7] = A_DIM;
+ CRT_colors[GRAPH_8] = A_DIM;
+ CRT_colors[GRAPH_9] = A_DIM;
+ CRT_colors[MEMORY_USED] = A_BOLD;
+ CRT_colors[MEMORY_BUFFERS] = A_NORMAL;
+ CRT_colors[MEMORY_CACHE] = A_NORMAL;
+ CRT_colors[LOAD_AVERAGE_FIFTEEN] = A_DIM;
+ CRT_colors[LOAD_AVERAGE_FIVE] = A_NORMAL;
+ CRT_colors[LOAD_AVERAGE_ONE] = A_BOLD;
+ CRT_colors[LOAD] = A_BOLD;
+ CRT_colors[HELP_BOLD] = A_BOLD;
+ CRT_colors[CPU_NICE] = A_NORMAL;
+ CRT_colors[CPU_NORMAL] = A_BOLD;
+ CRT_colors[CPU_KERNEL] = A_BOLD;
+ CRT_colors[CLOCK] = A_BOLD;
+ CRT_colors[CHECK_BOX] = A_BOLD;
+ CRT_colors[CHECK_MARK] = A_NORMAL;
+ CRT_colors[CHECK_TEXT] = A_NORMAL;
+ }
+
+ mousemask(BUTTON1_PRESSED, NULL);
+}
+
+void CRT_done() {
+ curs_set(1);
+ endwin();
+}
+
+int CRT_readKey() {
+ nocbreak();
+ cbreak();
+ int ret = getch();
+ halfdelay(MIN_UPDATE_SLICE);
+ return ret;
+}
+
+void CRT_handleSIGSEGV(int signal) {
+ CRT_done();
+ fprintf(stderr, "Aborted. Please report bug at http://htop.sf.net");
+ exit(1);
+}
+
+void CRT_handleSIGTERM(int signal) {
+ CRT_done();
+ exit(0);
+}

© 2014-2024 Faster IT GmbH | imprint | privacy policy