From d3c9975943df58e293359b87905d19ff1fd52061 Mon Sep 17 00:00:00 2001 From: Daniel Lange Date: Mon, 11 Apr 2016 13:00:15 +0200 Subject: Imported Upstream version 0.5 --- CRT.c | 270 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 270 insertions(+) create mode 100644 CRT.c (limited to 'CRT.c') 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 +#include +#include +#include + +#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); +} -- cgit v1.2.3