CRT.c 24.3 KB
Newer Older
Hisham Muhammad's avatar
Hisham Muhammad committed
1
2
/*
htop - CRT.c
Hisham Muhammad's avatar
Hisham Muhammad committed
3
(C) 2004-2011 Hisham H. Muhammad
Hisham Muhammad's avatar
Hisham Muhammad committed
4
5
6
7
8
9
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/

#include "CRT.h"

Hisham Muhammad's avatar
Hisham Muhammad committed
10
#include "String.h"
11
#include "RichString.h"
Hisham Muhammad's avatar
Hisham Muhammad committed
12

13
#include <stdio.h>
14
#include <errno.h>
Hisham Muhammad's avatar
Hisham Muhammad committed
15
16
#include <signal.h>
#include <stdlib.h>
17
#include <string.h>
Hisham Muhammad's avatar
Hisham Muhammad committed
18
#include <locale.h>
Hisham Muhammad's avatar
Hisham Muhammad committed
19
20
21

#define ColorPair(i,j) COLOR_PAIR((7-i)*8+j)

Hisham Muhammad's avatar
Hisham Muhammad committed
22
23
24
25
26
27
28
#define COLORSCHEME_DEFAULT 0
#define COLORSCHEME_MONOCHROME 1
#define COLORSCHEME_BLACKONWHITE 2
#define COLORSCHEME_BLACKONWHITE2 3
#define COLORSCHEME_MIDNIGHT 4
#define COLORSCHEME_BLACKNIGHT 5

Hisham Muhammad's avatar
Hisham Muhammad committed
29
30
31
32
33
34
35
36
37
38
39
40
#define Black COLOR_BLACK
#define Red COLOR_RED
#define Green COLOR_GREEN
#define Yellow COLOR_YELLOW
#define Blue COLOR_BLUE
#define Magenta COLOR_MAGENTA
#define Cyan COLOR_CYAN
#define White COLOR_WHITE

//#link curses

/*{
Hisham Muhammad's avatar
Hisham Muhammad committed
41
#include <stdbool.h>
Hisham Muhammad's avatar
Hisham Muhammad committed
42

Hisham Muhammad's avatar
Hisham Muhammad committed
43
44
45
46
47
48
49
50
51
52
53
typedef enum TreeStr_ {
   TREE_STR_HORZ,
   TREE_STR_VERT,
   TREE_STR_RTEE,
   TREE_STR_BEND,
   TREE_STR_TEND,
   TREE_STR_OPEN,
   TREE_STR_SHUT,
   TREE_STR_COUNT
} TreeStr;

Hisham Muhammad's avatar
Hisham Muhammad committed
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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,
Hisham Muhammad's avatar
Hisham Muhammad committed
69
   BATTERY,
Hisham Muhammad's avatar
Hisham Muhammad committed
70
71
72
73
74
75
76
77
   TASKS_RUNNING,
   SWAP,
   PROCESS,
   PROCESS_SHADOW,
   PROCESS_TAG,
   PROCESS_MEGABYTES,
   PROCESS_TREE,
   PROCESS_R_STATE,
78
   PROCESS_D_STATE,
Hisham Muhammad's avatar
Hisham Muhammad committed
79
80
81
   PROCESS_BASENAME,
   PROCESS_HIGH_PRIORITY,
   PROCESS_LOW_PRIORITY,
82
83
   PROCESS_THREAD,
   PROCESS_THREAD_BASENAME,
Hisham Muhammad's avatar
Hisham Muhammad committed
84
85
86
87
88
89
   BAR_BORDER,
   BAR_SHADOW,
   GRAPH_1,
   GRAPH_2,
   MEMORY_USED,
   MEMORY_BUFFERS,
90
   MEMORY_BUFFERS_TEXT,
Hisham Muhammad's avatar
Hisham Muhammad committed
91
92
93
94
95
96
97
98
99
   MEMORY_CACHE,
   LOAD,
   LOAD_AVERAGE_FIFTEEN,
   LOAD_AVERAGE_FIVE,
   LOAD_AVERAGE_ONE,
   CHECK_BOX,
   CHECK_MARK,
   CHECK_TEXT,
   CLOCK,
100
101
   HELP_BOLD,
   HOSTNAME,
Hisham Muhammad's avatar
Hisham Muhammad committed
102
   CPU_NICE,
103
   CPU_NICE_TEXT,
Hisham Muhammad's avatar
Hisham Muhammad committed
104
105
   CPU_NORMAL,
   CPU_KERNEL,
106
107
108
   CPU_IOWAIT,
   CPU_IRQ,
   CPU_SOFTIRQ,
109
110
   CPU_STEAL,
   CPU_GUEST,
Hisham Muhammad's avatar
Hisham Muhammad committed
111
112
113
   LAST_COLORELEMENT
} ColorElements;

114
115
void CRT_fatalError(const char* note) __attribute__ ((noreturn));

116
117
void CRT_handleSIGSEGV(int sgn);

Hisham Muhammad's avatar
Hisham Muhammad committed
118
119
}*/

Hisham Muhammad's avatar
Hisham Muhammad committed
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
const char *CRT_treeStrAscii[TREE_STR_COUNT] = {
   "-", // TREE_STR_HORZ
   "|", // TREE_STR_VERT
   "`", // TREE_STR_RTEE
   "`", // TREE_STR_BEND
   ",", // TREE_STR_TEND
   "+", // TREE_STR_OPEN
   "-", // TREE_STR_SHUT
};

const char *CRT_treeStrUtf8[TREE_STR_COUNT] = {
   "\xe2\x94\x80", // TREE_STR_HORZ ─
   "\xe2\x94\x82", // TREE_STR_VERT │
   "\xe2\x94\x9c", // TREE_STR_RTEE ├
   "\xe2\x94\x94", // TREE_STR_BEND └
   "\xe2\x94\x8c", // TREE_STR_TEND ┌
   "+",            // TREE_STR_OPEN +
   "\xe2\x94\x80", // TREE_STR_SHUT ─
};

const char **CRT_treeStr = CRT_treeStrAscii;
Hisham Muhammad's avatar
Hisham Muhammad committed
141

Hisham Muhammad's avatar
Hisham Muhammad committed
142
143
static bool CRT_hasColors;

144
static int CRT_delay = 0;
Hisham Muhammad's avatar
Hisham Muhammad committed
145

146
147
bool CRT_utf8 = false;

148
int CRT_colors[LAST_COLORELEMENT] = { 0 };
Hisham Muhammad's avatar
Hisham Muhammad committed
149

150
151
int CRT_cursorX = 0;

Hisham Muhammad's avatar
Hisham Muhammad committed
152
153
int CRT_scrollHAmount = 5;

154
155
char* CRT_termType;

Hisham Muhammad's avatar
Hisham Muhammad committed
156
157
158
159
// TODO move color scheme to Settings, perhaps?

int CRT_colorScheme = 0;

160
161
void *backtraceArray[128];

Hisham Muhammad's avatar
Hisham Muhammad committed
162
163
static void CRT_handleSIGTERM(int sgn) {
   (void) sgn;
164
165
166
167
   CRT_done();
   exit(0);
}

Hisham Muhammad's avatar
Hisham Muhammad committed
168
169
170
171
172
// TODO: pass an instance of Settings instead.

void CRT_init(int delay, int colorScheme) {
   initscr();
   noecho();
173
174
175
176
   CRT_delay = delay/2;
   if (CRT_delay == 0) {
      CRT_delay = 1;
   }
Hisham Muhammad's avatar
Hisham Muhammad committed
177
   CRT_colorScheme = colorScheme;
178
   halfdelay(CRT_delay);
Hisham Muhammad's avatar
Hisham Muhammad committed
179
180
181
182
183
184
185
186
187
188
   nonl();
   intrflush(stdscr, false);
   keypad(stdscr, true);
   curs_set(0);
   if (has_colors()) {
      start_color();
      CRT_hasColors = true;
   } else {
      CRT_hasColors = false;
   }
189
   CRT_termType = getenv("TERM");
Hisham Muhammad's avatar
Hisham Muhammad committed
190
191
192
193
   if (String_eq(CRT_termType, "linux"))
      CRT_scrollHAmount = 20;
   else
      CRT_scrollHAmount = 5;
194
   if (String_eq(CRT_termType, "xterm") || String_eq(CRT_termType, "xterm-color") || String_eq(CRT_termType, "vt220")) {
Hisham Muhammad's avatar
Hisham Muhammad committed
195
196
      define_key("\033[H", KEY_HOME);
      define_key("\033[F", KEY_END);
197
198
      define_key("\033[7~", KEY_HOME);
      define_key("\033[8~", KEY_END);
Hisham Muhammad's avatar
Hisham Muhammad committed
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
      define_key("\033OP", KEY_F(1));
      define_key("\033OQ", KEY_F(2));
      define_key("\033OR", KEY_F(3));
      define_key("\033OS", KEY_F(4));
      define_key("\033[11~", KEY_F(1));
      define_key("\033[12~", KEY_F(2));
      define_key("\033[13~", KEY_F(3));
      define_key("\033[14~", KEY_F(4));
      define_key("\033[17;2~", KEY_F(18));
   }
#ifndef DEBUG
   signal(11, CRT_handleSIGSEGV);
#endif
   signal(SIGTERM, CRT_handleSIGTERM);
   use_default_colors();
   if (!has_colors())
      CRT_colorScheme = 1;
   CRT_setColors(CRT_colorScheme);

Hisham Muhammad's avatar
Hisham Muhammad committed
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
#ifdef HAVE_LIBNCURSESW
   char *locale = setlocale(LC_ALL, NULL);
   if (locale == NULL || locale[0] == '\0')
      locale = setlocale(LC_CTYPE, NULL);
   if (locale != NULL &&
       (strstr(locale, "UTF-8") ||
        strstr(locale, "utf-8") ||
        strstr(locale, "UTF8")  ||
        strstr(locale, "utf8")))
      CRT_utf8 = true;
   else
      CRT_utf8 = false;
#endif

   CRT_treeStr = CRT_utf8 ? CRT_treeStrUtf8 : CRT_treeStrAscii;

Hisham Muhammad's avatar
Hisham Muhammad committed
234
235
236
237
238
239
240
241
   mousemask(BUTTON1_CLICKED, NULL);
}

void CRT_done() {
   curs_set(1);
   endwin();
}

242
243
244
245
246
247
248
void CRT_fatalError(const char* note) {
   char* sysMsg = strerror(errno);
   CRT_done();
   fprintf(stderr, "%s: %s\n", note, sysMsg);
   exit(2);
}

Hisham Muhammad's avatar
Hisham Muhammad committed
249
250
251
int CRT_readKey() {
   nocbreak();
   cbreak();
Hisham Muhammad's avatar
Hisham Muhammad committed
252
   nodelay(stdscr, FALSE);
Hisham Muhammad's avatar
Hisham Muhammad committed
253
   int ret = getch();
254
   halfdelay(CRT_delay);
Hisham Muhammad's avatar
Hisham Muhammad committed
255
256
257
258
259
260
261
262
263
264
   return ret;
}

void CRT_disableDelay() {
   nocbreak();
   cbreak();
   nodelay(stdscr, TRUE);
}

void CRT_enableDelay() {
265
   halfdelay(CRT_delay);
Hisham Muhammad's avatar
Hisham Muhammad committed
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
}

void CRT_setColors(int colorScheme) {
   CRT_colorScheme = colorScheme;
   if (colorScheme == COLORSCHEME_BLACKNIGHT) {
      for (int i = 0; i < 8; i++)
         for (int j = 0; j < 8; j++)
            init_pair((7-i)*8+j, i, j);
   } else {
      for (int i = 0; i < 8; i++) 
         for (int j = 0; j < 8; j++)
            init_pair((7-i)*8+j, i, (j==0?-1:j));
   }

   if (colorScheme == COLORSCHEME_MONOCHROME) {
      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;
287
288
      CRT_colors[PANEL_HIGHLIGHT_FOCUS] = A_REVERSE;
      CRT_colors[PANEL_HIGHLIGHT_UNFOCUS] = A_BOLD;
Hisham Muhammad's avatar
Hisham Muhammad committed
289
290
      CRT_colors[FAILED_SEARCH] = A_REVERSE | A_BOLD;
      CRT_colors[UPTIME] = A_BOLD;
Hisham Muhammad's avatar
Hisham Muhammad committed
291
      CRT_colors[BATTERY] = A_BOLD;
Hisham Muhammad's avatar
Hisham Muhammad committed
292
293
294
295
296
297
298
299
300
301
302
303
      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;
304
      CRT_colors[PROCESS_D_STATE] = A_BOLD;
Hisham Muhammad's avatar
Hisham Muhammad committed
305
306
      CRT_colors[PROCESS_HIGH_PRIORITY] = A_BOLD;
      CRT_colors[PROCESS_LOW_PRIORITY] = A_DIM;
307
308
      CRT_colors[PROCESS_THREAD] = A_BOLD;
      CRT_colors[PROCESS_THREAD_BASENAME] = A_REVERSE;
Hisham Muhammad's avatar
Hisham Muhammad committed
309
310
311
312
      CRT_colors[BAR_BORDER] = A_BOLD;
      CRT_colors[BAR_SHADOW] = A_DIM;
      CRT_colors[SWAP] = A_BOLD;
      CRT_colors[GRAPH_1] = A_BOLD;
Hisham Muhammad's avatar
Hisham Muhammad committed
313
      CRT_colors[GRAPH_2] = A_NORMAL;
Hisham Muhammad's avatar
Hisham Muhammad committed
314
315
      CRT_colors[MEMORY_USED] = A_BOLD;
      CRT_colors[MEMORY_BUFFERS] = A_NORMAL;
316
      CRT_colors[MEMORY_BUFFERS_TEXT] = A_NORMAL;
Hisham Muhammad's avatar
Hisham Muhammad committed
317
318
319
320
321
322
323
324
325
326
      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[CLOCK] = A_BOLD;
      CRT_colors[CHECK_BOX] = A_BOLD;
      CRT_colors[CHECK_MARK] = A_NORMAL;
      CRT_colors[CHECK_TEXT] = A_NORMAL;
327
328
      CRT_colors[HOSTNAME] = A_BOLD;
      CRT_colors[CPU_NICE] = A_NORMAL;
329
      CRT_colors[CPU_NICE_TEXT] = A_NORMAL;
330
331
      CRT_colors[CPU_NORMAL] = A_BOLD;
      CRT_colors[CPU_KERNEL] = A_BOLD;
332
      CRT_colors[CPU_IOWAIT] = A_NORMAL;
333
334
      CRT_colors[CPU_IRQ] = A_BOLD;
      CRT_colors[CPU_SOFTIRQ] = A_BOLD;
335
336
      CRT_colors[CPU_STEAL] = A_REVERSE;
      CRT_colors[CPU_GUEST] = A_REVERSE;
Hisham Muhammad's avatar
Hisham Muhammad committed
337
338
339
340
341
342
343
344
345
346
347
   } else if (CRT_colorScheme == COLORSCHEME_BLACKONWHITE) {
      CRT_colors[RESET_COLOR] = ColorPair(Black,White);
      CRT_colors[DEFAULT_COLOR] = ColorPair(Black,White);
      CRT_colors[FUNCTION_BAR] = ColorPair(Black,Cyan);
      CRT_colors[FUNCTION_KEY] = ColorPair(Black,White);
      CRT_colors[PANEL_HEADER_FOCUS] = ColorPair(Black,Green);
      CRT_colors[PANEL_HEADER_UNFOCUS] = ColorPair(Black,Green);
      CRT_colors[PANEL_HIGHLIGHT_FOCUS] = ColorPair(Black,Cyan);
      CRT_colors[PANEL_HIGHLIGHT_UNFOCUS] = ColorPair(Blue,White);
      CRT_colors[FAILED_SEARCH] = ColorPair(Red,Cyan);
      CRT_colors[UPTIME] = ColorPair(Yellow,White);
Hisham Muhammad's avatar
Hisham Muhammad committed
348
      CRT_colors[BATTERY] = ColorPair(Yellow,White);
Hisham Muhammad's avatar
Hisham Muhammad committed
349
350
351
352
353
354
355
356
357
      CRT_colors[LARGE_NUMBER] = ColorPair(Red,White);
      CRT_colors[METER_TEXT] = ColorPair(Blue,White);
      CRT_colors[METER_VALUE] = ColorPair(Black,White);
      CRT_colors[LED_COLOR] = ColorPair(Green,White);
      CRT_colors[TASKS_RUNNING] = ColorPair(Green,White);
      CRT_colors[PROCESS] = ColorPair(Black,White);
      CRT_colors[PROCESS_SHADOW] = A_BOLD | ColorPair(Black,White);
      CRT_colors[PROCESS_TAG] = ColorPair(White,Blue);
      CRT_colors[PROCESS_MEGABYTES] = ColorPair(Blue,White);
358
359
      CRT_colors[PROCESS_BASENAME] = ColorPair(Blue,White);
      CRT_colors[PROCESS_TREE] = ColorPair(Green,White);
Hisham Muhammad's avatar
Hisham Muhammad committed
360
      CRT_colors[PROCESS_R_STATE] = ColorPair(Green,White);
361
      CRT_colors[PROCESS_D_STATE] = A_BOLD | ColorPair(Red,White);
Hisham Muhammad's avatar
Hisham Muhammad committed
362
363
      CRT_colors[PROCESS_HIGH_PRIORITY] = ColorPair(Red,White);
      CRT_colors[PROCESS_LOW_PRIORITY] = ColorPair(Red,White);
364
365
      CRT_colors[PROCESS_THREAD] = ColorPair(Blue,White);
      CRT_colors[PROCESS_THREAD_BASENAME] = A_BOLD | ColorPair(Blue,White);
Hisham Muhammad's avatar
Hisham Muhammad committed
366
367
368
      CRT_colors[BAR_BORDER] = ColorPair(Blue,White);
      CRT_colors[BAR_SHADOW] = ColorPair(Black,White);
      CRT_colors[SWAP] = ColorPair(Red,White);
Hisham Muhammad's avatar
Hisham Muhammad committed
369
370
      CRT_colors[GRAPH_1] = A_BOLD | ColorPair(Blue,White);
      CRT_colors[GRAPH_2] = ColorPair(Blue,White);
Hisham Muhammad's avatar
Hisham Muhammad committed
371
372
      CRT_colors[MEMORY_USED] = ColorPair(Green,White);
      CRT_colors[MEMORY_BUFFERS] = ColorPair(Cyan,White);
373
      CRT_colors[MEMORY_BUFFERS_TEXT] = ColorPair(Cyan,White);
Hisham Muhammad's avatar
Hisham Muhammad committed
374
375
376
377
378
379
      CRT_colors[MEMORY_CACHE] = ColorPair(Yellow,White);
      CRT_colors[LOAD_AVERAGE_FIFTEEN] = ColorPair(Black,White);
      CRT_colors[LOAD_AVERAGE_FIVE] = ColorPair(Black,White);
      CRT_colors[LOAD_AVERAGE_ONE] = ColorPair(Black,White);
      CRT_colors[LOAD] = ColorPair(Black,White);
      CRT_colors[HELP_BOLD] = ColorPair(Blue,White);
380
      CRT_colors[CLOCK] = ColorPair(Black,White);
Hisham Muhammad's avatar
Hisham Muhammad committed
381
382
383
      CRT_colors[CHECK_BOX] = ColorPair(Blue,White);
      CRT_colors[CHECK_MARK] = ColorPair(Black,White);
      CRT_colors[CHECK_TEXT] = ColorPair(Black,White);
384
385
      CRT_colors[HOSTNAME] = ColorPair(Black,White);
      CRT_colors[CPU_NICE] = ColorPair(Cyan,White);
386
      CRT_colors[CPU_NICE_TEXT] = ColorPair(Cyan,White);
387
388
      CRT_colors[CPU_NORMAL] = ColorPair(Green,White);
      CRT_colors[CPU_KERNEL] = ColorPair(Red,White);
389
      CRT_colors[CPU_IOWAIT] = A_BOLD | ColorPair(Black, White);
390
391
      CRT_colors[CPU_IRQ] = ColorPair(Blue,White);
      CRT_colors[CPU_SOFTIRQ] = ColorPair(Blue,White);
392
393
      CRT_colors[CPU_STEAL] = ColorPair(Cyan,White);
      CRT_colors[CPU_GUEST] = ColorPair(Cyan,White);
Hisham Muhammad's avatar
Hisham Muhammad committed
394
395
396
397
398
399
400
401
402
403
404
   } else if (CRT_colorScheme == COLORSCHEME_BLACKONWHITE2) {
      CRT_colors[RESET_COLOR] = ColorPair(Black,Black);
      CRT_colors[DEFAULT_COLOR] = ColorPair(Black,Black);
      CRT_colors[FUNCTION_BAR] = ColorPair(Black,Cyan);
      CRT_colors[FUNCTION_KEY] = ColorPair(Black,Black);
      CRT_colors[PANEL_HEADER_FOCUS] = ColorPair(Black,Green);
      CRT_colors[PANEL_HEADER_UNFOCUS] = ColorPair(Black,Green);
      CRT_colors[PANEL_HIGHLIGHT_FOCUS] = ColorPair(Black,Cyan);
      CRT_colors[PANEL_HIGHLIGHT_UNFOCUS] = ColorPair(Blue,Black);
      CRT_colors[FAILED_SEARCH] = ColorPair(Red,Cyan);
      CRT_colors[UPTIME] = ColorPair(Yellow,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
405
      CRT_colors[BATTERY] = ColorPair(Yellow,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
406
407
408
409
410
411
412
413
414
415
416
417
      CRT_colors[LARGE_NUMBER] = ColorPair(Red,Black);
      CRT_colors[METER_TEXT] = ColorPair(Blue,Black);
      CRT_colors[METER_VALUE] = ColorPair(Black,Black);
      CRT_colors[LED_COLOR] = ColorPair(Green,Black);
      CRT_colors[TASKS_RUNNING] = ColorPair(Green,Black);
      CRT_colors[PROCESS] = ColorPair(Black,Black);
      CRT_colors[PROCESS_SHADOW] = A_BOLD | ColorPair(Black,Black);
      CRT_colors[PROCESS_TAG] = ColorPair(White,Blue);
      CRT_colors[PROCESS_MEGABYTES] = ColorPair(Blue,Black);
      CRT_colors[PROCESS_BASENAME] = ColorPair(Green,Black);
      CRT_colors[PROCESS_TREE] = ColorPair(Blue,Black);
      CRT_colors[PROCESS_R_STATE] = ColorPair(Green,Black);
418
      CRT_colors[PROCESS_D_STATE] = A_BOLD | ColorPair(Red,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
419
420
      CRT_colors[PROCESS_HIGH_PRIORITY] = ColorPair(Red,Black);
      CRT_colors[PROCESS_LOW_PRIORITY] = ColorPair(Red,Black);
421
422
      CRT_colors[PROCESS_THREAD] = ColorPair(Blue,Black);
      CRT_colors[PROCESS_THREAD_BASENAME] = A_BOLD | ColorPair(Blue,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
423
424
425
      CRT_colors[BAR_BORDER] = ColorPair(Blue,Black);
      CRT_colors[BAR_SHADOW] = ColorPair(Black,Black);
      CRT_colors[SWAP] = ColorPair(Red,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
426
427
      CRT_colors[GRAPH_1] = A_BOLD | ColorPair(Cyan,Black);
      CRT_colors[GRAPH_2] = ColorPair(Cyan,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
428
429
      CRT_colors[MEMORY_USED] = ColorPair(Green,Black);
      CRT_colors[MEMORY_BUFFERS] = ColorPair(Cyan,Black);
430
      CRT_colors[MEMORY_BUFFERS_TEXT] = ColorPair(Cyan,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
431
432
433
434
435
436
437
438
439
440
      CRT_colors[MEMORY_CACHE] = ColorPair(Yellow,Black);
      CRT_colors[LOAD_AVERAGE_FIFTEEN] = ColorPair(Black,Black);
      CRT_colors[LOAD_AVERAGE_FIVE] = ColorPair(Black,Black);
      CRT_colors[LOAD_AVERAGE_ONE] = ColorPair(Black,Black);
      CRT_colors[LOAD] = ColorPair(White,Black);
      CRT_colors[HELP_BOLD] = ColorPair(Blue,Black);
      CRT_colors[CLOCK] = ColorPair(White,Black);
      CRT_colors[CHECK_BOX] = ColorPair(Blue,Black);
      CRT_colors[CHECK_MARK] = ColorPair(Black,Black);
      CRT_colors[CHECK_TEXT] = ColorPair(Black,Black);
441
442
      CRT_colors[HOSTNAME] = ColorPair(White,Black);
      CRT_colors[CPU_NICE] = ColorPair(Cyan,Black);
443
      CRT_colors[CPU_NICE_TEXT] = ColorPair(Cyan,Black);
444
445
      CRT_colors[CPU_NORMAL] = ColorPair(Green,Black);
      CRT_colors[CPU_KERNEL] = ColorPair(Red,Black);
446
      CRT_colors[CPU_IOWAIT] = A_BOLD | ColorPair(Black, Black);
447
448
      CRT_colors[CPU_IRQ] = A_BOLD | ColorPair(Blue,Black);
      CRT_colors[CPU_SOFTIRQ] = ColorPair(Blue,Black);
449
450
      CRT_colors[CPU_STEAL] = ColorPair(Black,Black);
      CRT_colors[CPU_GUEST] = ColorPair(Black,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
451
452
453
454
455
456
457
458
459
460
461
   } else if (CRT_colorScheme == COLORSCHEME_MIDNIGHT) {
      CRT_colors[RESET_COLOR] = ColorPair(White,Blue);
      CRT_colors[DEFAULT_COLOR] = ColorPair(White,Blue);
      CRT_colors[FUNCTION_BAR] = ColorPair(Black,Cyan);
      CRT_colors[FUNCTION_KEY] = A_NORMAL;
      CRT_colors[PANEL_HEADER_FOCUS] = ColorPair(Black,Cyan);
      CRT_colors[PANEL_HEADER_UNFOCUS] = ColorPair(Black,Cyan);
      CRT_colors[PANEL_HIGHLIGHT_FOCUS] = ColorPair(Black,White);
      CRT_colors[PANEL_HIGHLIGHT_UNFOCUS] = A_BOLD | ColorPair(Yellow,Blue);
      CRT_colors[FAILED_SEARCH] = ColorPair(Red,Cyan);
      CRT_colors[UPTIME] = A_BOLD | ColorPair(Yellow,Blue);
Hisham Muhammad's avatar
Hisham Muhammad committed
462
      CRT_colors[BATTERY] = A_BOLD | ColorPair(Yellow,Blue);
Hisham Muhammad's avatar
Hisham Muhammad committed
463
464
465
466
467
468
469
470
471
472
473
474
      CRT_colors[LARGE_NUMBER] = A_BOLD | ColorPair(Red,Blue);
      CRT_colors[METER_TEXT] = ColorPair(Cyan,Blue);
      CRT_colors[METER_VALUE] = A_BOLD | ColorPair(Cyan,Blue);
      CRT_colors[LED_COLOR] = ColorPair(Green,Blue);
      CRT_colors[TASKS_RUNNING] = A_BOLD | ColorPair(Green,Blue);
      CRT_colors[PROCESS] = ColorPair(White,Blue);
      CRT_colors[PROCESS_SHADOW] = A_BOLD | ColorPair(Black,Blue);
      CRT_colors[PROCESS_TAG] = A_BOLD | ColorPair(Yellow,Blue);
      CRT_colors[PROCESS_MEGABYTES] = ColorPair(Cyan,Blue);
      CRT_colors[PROCESS_BASENAME] = A_BOLD | ColorPair(Cyan,Blue);
      CRT_colors[PROCESS_TREE] = ColorPair(Cyan,Blue);
      CRT_colors[PROCESS_R_STATE] = ColorPair(Green,Blue);
475
      CRT_colors[PROCESS_D_STATE] = A_BOLD | ColorPair(Red,Blue);
Hisham Muhammad's avatar
Hisham Muhammad committed
476
477
      CRT_colors[PROCESS_HIGH_PRIORITY] = ColorPair(Red,Blue);
      CRT_colors[PROCESS_LOW_PRIORITY] = ColorPair(Red,Blue);
478
479
      CRT_colors[PROCESS_THREAD] = ColorPair(Green,Blue);
      CRT_colors[PROCESS_THREAD_BASENAME] = A_BOLD | ColorPair(Green,Blue);
Hisham Muhammad's avatar
Hisham Muhammad committed
480
481
482
      CRT_colors[BAR_BORDER] = A_BOLD | ColorPair(Yellow,Blue);
      CRT_colors[BAR_SHADOW] = ColorPair(Cyan,Blue);
      CRT_colors[SWAP] = ColorPair(Red,Blue);
Hisham Muhammad's avatar
Hisham Muhammad committed
483
484
      CRT_colors[GRAPH_1] = A_BOLD | ColorPair(Cyan,Blue);
      CRT_colors[GRAPH_2] = ColorPair(Cyan,Blue);
Hisham Muhammad's avatar
Hisham Muhammad committed
485
486
      CRT_colors[MEMORY_USED] = A_BOLD | ColorPair(Green,Blue);
      CRT_colors[MEMORY_BUFFERS] = A_BOLD | ColorPair(Cyan,Blue);
487
      CRT_colors[MEMORY_BUFFERS_TEXT] = A_BOLD | ColorPair(Cyan,Blue);
Hisham Muhammad's avatar
Hisham Muhammad committed
488
489
490
491
492
493
494
495
496
497
      CRT_colors[MEMORY_CACHE] = A_BOLD | ColorPair(Yellow,Blue);
      CRT_colors[LOAD_AVERAGE_FIFTEEN] = A_BOLD | ColorPair(Black,Blue);
      CRT_colors[LOAD_AVERAGE_FIVE] = A_NORMAL | ColorPair(White,Blue);
      CRT_colors[LOAD_AVERAGE_ONE] = A_BOLD | ColorPair(White,Blue);
      CRT_colors[LOAD] = A_BOLD | ColorPair(White,Blue);
      CRT_colors[HELP_BOLD] = A_BOLD | ColorPair(Cyan,Blue);
      CRT_colors[CLOCK] = ColorPair(White,Blue);
      CRT_colors[CHECK_BOX] = ColorPair(Cyan,Blue);
      CRT_colors[CHECK_MARK] = A_BOLD | ColorPair(White,Blue);
      CRT_colors[CHECK_TEXT] = A_NORMAL | ColorPair(White,Blue);
498
499
      CRT_colors[HOSTNAME] = ColorPair(White,Blue);
      CRT_colors[CPU_NICE] = A_BOLD | ColorPair(Cyan,Blue);
500
      CRT_colors[CPU_NICE_TEXT] = A_BOLD | ColorPair(Cyan,Blue);
501
502
503
      CRT_colors[CPU_NORMAL] = A_BOLD | ColorPair(Green,Blue);
      CRT_colors[CPU_KERNEL] = A_BOLD | ColorPair(Red,Blue);
      CRT_colors[CPU_IOWAIT] = A_BOLD | ColorPair(Blue,Blue);
504
505
      CRT_colors[CPU_IRQ] = A_BOLD | ColorPair(Black,Blue);
      CRT_colors[CPU_SOFTIRQ] = ColorPair(Black,Blue);
506
507
      CRT_colors[CPU_STEAL] = ColorPair(White,Blue);
      CRT_colors[CPU_GUEST] = ColorPair(White,Blue);
Hisham Muhammad's avatar
Hisham Muhammad committed
508
509
510
511
512
513
514
515
516
517
518
   } else if (CRT_colorScheme == COLORSCHEME_BLACKNIGHT) {
      CRT_colors[RESET_COLOR] = ColorPair(Cyan,Black);
      CRT_colors[DEFAULT_COLOR] = ColorPair(Cyan,Black);
      CRT_colors[FUNCTION_BAR] = ColorPair(Black,Green);
      CRT_colors[FUNCTION_KEY] = ColorPair(Cyan,Black);
      CRT_colors[PANEL_HEADER_FOCUS] = ColorPair(Black,Green);
      CRT_colors[PANEL_HEADER_UNFOCUS] = ColorPair(Black,Green);
      CRT_colors[PANEL_HIGHLIGHT_FOCUS] = ColorPair(Black,Cyan);
      CRT_colors[PANEL_HIGHLIGHT_UNFOCUS] = ColorPair(Black,White);
      CRT_colors[FAILED_SEARCH] = ColorPair(Red,Cyan);
      CRT_colors[UPTIME] = ColorPair(Green,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
519
      CRT_colors[BATTERY] = ColorPair(Green,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
520
521
522
523
524
525
526
527
528
529
530
      CRT_colors[LARGE_NUMBER] = A_BOLD | ColorPair(Red,Black);
      CRT_colors[METER_TEXT] = ColorPair(Cyan,Black);
      CRT_colors[METER_VALUE] = ColorPair(Green,Black);
      CRT_colors[LED_COLOR] = ColorPair(Green,Black);
      CRT_colors[TASKS_RUNNING] = A_BOLD | ColorPair(Green,Black);
      CRT_colors[PROCESS] = ColorPair(Cyan,Black);
      CRT_colors[PROCESS_SHADOW] = A_BOLD | ColorPair(Black,Black);
      CRT_colors[PROCESS_TAG] = A_BOLD | ColorPair(Yellow,Black);
      CRT_colors[PROCESS_MEGABYTES] = A_BOLD | ColorPair(Green,Black);
      CRT_colors[PROCESS_BASENAME] = A_BOLD | ColorPair(Green,Black);
      CRT_colors[PROCESS_TREE] = ColorPair(Cyan,Black);
531
532
      CRT_colors[PROCESS_THREAD] = ColorPair(Green,Black);
      CRT_colors[PROCESS_THREAD_BASENAME] = A_BOLD | ColorPair(Blue,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
533
      CRT_colors[PROCESS_R_STATE] = ColorPair(Green,Black);
534
      CRT_colors[PROCESS_D_STATE] = A_BOLD | ColorPair(Red,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
535
536
537
538
539
      CRT_colors[PROCESS_HIGH_PRIORITY] = ColorPair(Red,Black);
      CRT_colors[PROCESS_LOW_PRIORITY] = ColorPair(Red,Black);
      CRT_colors[BAR_BORDER] = A_BOLD | ColorPair(Green,Black);
      CRT_colors[BAR_SHADOW] = ColorPair(Cyan,Black);
      CRT_colors[SWAP] = ColorPair(Red,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
540
541
      CRT_colors[GRAPH_1] = A_BOLD | ColorPair(Green,Black);
      CRT_colors[GRAPH_2] = ColorPair(Green,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
542
543
      CRT_colors[MEMORY_USED] = ColorPair(Green,Black);
      CRT_colors[MEMORY_BUFFERS] = ColorPair(Blue,Black);
544
      CRT_colors[MEMORY_BUFFERS_TEXT] = A_BOLD | ColorPair(Blue,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
545
546
547
548
549
550
      CRT_colors[MEMORY_CACHE] = ColorPair(Yellow,Black);
      CRT_colors[LOAD_AVERAGE_FIFTEEN] = ColorPair(Green,Black);
      CRT_colors[LOAD_AVERAGE_FIVE] = ColorPair(Green,Black);
      CRT_colors[LOAD_AVERAGE_ONE] = A_BOLD | ColorPair(Green,Black);
      CRT_colors[LOAD] = A_BOLD;
      CRT_colors[HELP_BOLD] = A_BOLD | ColorPair(Cyan,Black);
551
      CRT_colors[CLOCK] = ColorPair(Green,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
552
553
554
      CRT_colors[CHECK_BOX] = ColorPair(Green,Black);
      CRT_colors[CHECK_MARK] = A_BOLD | ColorPair(Green,Black);
      CRT_colors[CHECK_TEXT] = ColorPair(Cyan,Black);
555
556
      CRT_colors[HOSTNAME] = ColorPair(Green,Black);
      CRT_colors[CPU_NICE] = ColorPair(Blue,Black);
557
      CRT_colors[CPU_NICE_TEXT] = A_BOLD | ColorPair(Blue,Black);
558
559
      CRT_colors[CPU_NORMAL] = ColorPair(Green,Black);
      CRT_colors[CPU_KERNEL] = ColorPair(Red,Black);
560
561
562
      CRT_colors[CPU_IOWAIT] = ColorPair(Yellow,Black);
      CRT_colors[CPU_IRQ] = A_BOLD | ColorPair(Blue,Black);
      CRT_colors[CPU_SOFTIRQ] = ColorPair(Blue,Black);
563
564
      CRT_colors[CPU_STEAL] = ColorPair(Cyan,Black);
      CRT_colors[CPU_GUEST] = ColorPair(Cyan,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
565
566
567
568
569
570
571
572
573
574
575
576
   } else {
      /* Default */
      CRT_colors[RESET_COLOR] = ColorPair(White,Black);
      CRT_colors[DEFAULT_COLOR] = ColorPair(White,Black);
      CRT_colors[FUNCTION_BAR] = ColorPair(Black,Cyan);
      CRT_colors[FUNCTION_KEY] = ColorPair(White,Black);
      CRT_colors[PANEL_HEADER_FOCUS] = ColorPair(Black,Green);
      CRT_colors[PANEL_HEADER_UNFOCUS] = ColorPair(Black,Green);
      CRT_colors[PANEL_HIGHLIGHT_FOCUS] = ColorPair(Black,Cyan);
      CRT_colors[PANEL_HIGHLIGHT_UNFOCUS] = ColorPair(Black,White);
      CRT_colors[FAILED_SEARCH] = ColorPair(Red,Cyan);
      CRT_colors[UPTIME] = A_BOLD | ColorPair(Cyan,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
577
      CRT_colors[BATTERY] = A_BOLD | ColorPair(Cyan,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
578
579
580
581
582
583
584
585
586
587
588
589
      CRT_colors[LARGE_NUMBER] = A_BOLD | ColorPair(Red,Black);
      CRT_colors[METER_TEXT] = ColorPair(Cyan,Black);
      CRT_colors[METER_VALUE] = A_BOLD | ColorPair(Cyan,Black);
      CRT_colors[LED_COLOR] = ColorPair(Green,Black);
      CRT_colors[TASKS_RUNNING] = A_BOLD | ColorPair(Green,Black);
      CRT_colors[PROCESS] = A_NORMAL;
      CRT_colors[PROCESS_SHADOW] = A_BOLD | ColorPair(Black,Black);
      CRT_colors[PROCESS_TAG] = A_BOLD | ColorPair(Yellow,Black);
      CRT_colors[PROCESS_MEGABYTES] = ColorPair(Cyan,Black);
      CRT_colors[PROCESS_BASENAME] = A_BOLD | ColorPair(Cyan,Black);
      CRT_colors[PROCESS_TREE] = ColorPair(Cyan,Black);
      CRT_colors[PROCESS_R_STATE] = ColorPair(Green,Black);
590
      CRT_colors[PROCESS_D_STATE] = A_BOLD | ColorPair(Red,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
591
592
      CRT_colors[PROCESS_HIGH_PRIORITY] = ColorPair(Red,Black);
      CRT_colors[PROCESS_LOW_PRIORITY] = ColorPair(Red,Black);
593
594
      CRT_colors[PROCESS_THREAD] = ColorPair(Green,Black);
      CRT_colors[PROCESS_THREAD_BASENAME] = A_BOLD | ColorPair(Green,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
595
596
597
      CRT_colors[BAR_BORDER] = A_BOLD;
      CRT_colors[BAR_SHADOW] = A_BOLD | ColorPair(Black,Black);
      CRT_colors[SWAP] = ColorPair(Red,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
598
599
      CRT_colors[GRAPH_1] = A_BOLD | ColorPair(Cyan,Black);
      CRT_colors[GRAPH_2] = ColorPair(Cyan,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
600
601
      CRT_colors[MEMORY_USED] = ColorPair(Green,Black);
      CRT_colors[MEMORY_BUFFERS] = ColorPair(Blue,Black);
602
      CRT_colors[MEMORY_BUFFERS_TEXT] = A_BOLD | ColorPair(Blue,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
603
      CRT_colors[MEMORY_CACHE] = ColorPair(Yellow,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
604
605
606
      CRT_colors[LOAD_AVERAGE_FIFTEEN] = A_NORMAL;
      CRT_colors[LOAD_AVERAGE_FIVE] = ColorPair(Cyan,Black);
      CRT_colors[LOAD_AVERAGE_ONE] = A_BOLD | ColorPair(Cyan,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
607
608
609
610
611
612
      CRT_colors[LOAD] = A_BOLD;
      CRT_colors[HELP_BOLD] = A_BOLD | ColorPair(Cyan,Black);
      CRT_colors[CLOCK] = A_BOLD;
      CRT_colors[CHECK_BOX] = ColorPair(Cyan,Black);
      CRT_colors[CHECK_MARK] = A_BOLD;
      CRT_colors[CHECK_TEXT] = A_NORMAL;
613
614
      CRT_colors[HOSTNAME] = A_BOLD;
      CRT_colors[CPU_NICE] = ColorPair(Blue,Black);
615
      CRT_colors[CPU_NICE_TEXT] = A_BOLD | ColorPair(Blue,Black);
616
617
      CRT_colors[CPU_NORMAL] = ColorPair(Green,Black);
      CRT_colors[CPU_KERNEL] = ColorPair(Red,Black);
618
      CRT_colors[CPU_IOWAIT] = A_BOLD | ColorPair(Black, Black);
619
620
      CRT_colors[CPU_IRQ] = ColorPair(Yellow,Black);
      CRT_colors[CPU_SOFTIRQ] = ColorPair(Magenta,Black);
621
622
      CRT_colors[CPU_STEAL] = ColorPair(Cyan,Black);
      CRT_colors[CPU_GUEST] = ColorPair(Cyan,Black);
Hisham Muhammad's avatar
Hisham Muhammad committed
623
624
   }
}