12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379 |
- /*
- htop - CRT.c
- (C) 2004-2011 Hisham H. Muhammad
- Released under the GNU GPLv2+, see the COPYING file
- in the source distribution for its full text.
- */
- #include "config.h" // IWYU pragma: keep
- #include "CRT.h"
- #include <errno.h>
- #include <fcntl.h>
- #include <langinfo.h>
- #include <signal.h>
- #include <stdarg.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include "CommandLine.h"
- #include "ProvideCurses.h"
- #include "ProvideTerm.h"
- #include "XUtils.h"
- #if !defined(NDEBUG) && defined(HAVE_MEMFD_CREATE)
- #include <sys/mman.h>
- #endif
- #if defined(HAVE_LIBUNWIND_H) && defined(HAVE_LIBUNWIND)
- # define PRINT_BACKTRACE
- # define UNW_LOCAL_ONLY
- # include <libunwind.h>
- # if defined(HAVE_DLADDR)
- # include <dlfcn.h>
- # endif
- #elif defined(HAVE_EXECINFO_H)
- # define PRINT_BACKTRACE
- # include <execinfo.h>
- #endif
- #define ColorIndex(i,j) ((7-(i))*8+(j))
- #define ColorPair(i,j) COLOR_PAIR(ColorIndex(i,j))
- #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
- #define ColorPairGrayBlack ColorPair(Magenta,Magenta)
- #define ColorIndexGrayBlack ColorIndex(Magenta,Magenta)
- #define ColorPairWhiteDefault ColorPair(Red, Red)
- #define ColorIndexWhiteDefault ColorIndex(Red, Red)
- static const char* const CRT_treeStrAscii[LAST_TREE_STR] = {
- [TREE_STR_VERT] = "|",
- [TREE_STR_RTEE] = "`",
- [TREE_STR_BEND] = "`",
- [TREE_STR_TEND] = ",",
- [TREE_STR_OPEN] = "+",
- [TREE_STR_SHUT] = "-",
- [TREE_STR_ASC] = "+",
- [TREE_STR_DESC] = "-",
- };
- #ifdef HAVE_LIBNCURSESW
- static const char* const CRT_treeStrUtf8[LAST_TREE_STR] = {
- [TREE_STR_VERT] = "\xe2\x94\x82", // │
- [TREE_STR_RTEE] = "\xe2\x94\x9c", // ├
- [TREE_STR_BEND] = "\xe2\x94\x94", // └
- [TREE_STR_TEND] = "\xe2\x94\x8c", // ┌
- [TREE_STR_OPEN] = "+", // +, TODO use 🮯 'BOX DRAWINGS LIGHT HORIZONTAL
- // WITH VERTICAL STROKE' (U+1FBAF, "\xf0\x9f\xae\xaf") when
- // Unicode 13 is common
- [TREE_STR_SHUT] = "\xe2\x94\x80", // ─
- [TREE_STR_ASC] = "\xe2\x96\xb3", // △
- [TREE_STR_DESC] = "\xe2\x96\xbd", // ▽
- };
- bool CRT_utf8 = false;
- #endif
- const char* const* CRT_treeStr = CRT_treeStrAscii;
- static const Settings* CRT_settings;
- const char* CRT_degreeSign;
- static const char* initDegreeSign(void) {
- #ifdef HAVE_LIBNCURSESW
- if (CRT_utf8)
- return "\xc2\xb0";
- static char buffer[4];
- // this might fail if the current locale does not support wide characters
- int r = snprintf(buffer, sizeof(buffer), "%lc", 176);
- if (r > 0)
- return buffer;
- #endif
- return "";
- }
- const int* CRT_colors;
- static int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
- [COLORSCHEME_DEFAULT] = {
- [RESET_COLOR] = ColorPair(White, Black),
- [DEFAULT_COLOR] = ColorPair(White, Black),
- [FUNCTION_BAR] = ColorPair(Black, Cyan),
- [FUNCTION_KEY] = ColorPair(White, Black),
- [PANEL_HEADER_FOCUS] = ColorPair(Black, Green),
- [PANEL_HEADER_UNFOCUS] = ColorPair(Black, Green),
- [PANEL_SELECTION_FOCUS] = ColorPair(Black, Cyan),
- [PANEL_SELECTION_FOLLOW] = ColorPair(Black, Yellow),
- [PANEL_SELECTION_UNFOCUS] = ColorPair(Black, White),
- [FAILED_SEARCH] = ColorPair(Red, Cyan),
- [FAILED_READ] = A_BOLD | ColorPair(Red, Black),
- [PAUSED] = A_BOLD | ColorPair(Yellow, Cyan),
- [UPTIME] = A_BOLD | ColorPair(Cyan, Black),
- [BATTERY] = A_BOLD | ColorPair(Cyan, Black),
- [LARGE_NUMBER] = A_BOLD | ColorPair(Red, Black),
- [METER_SHADOW] = A_BOLD | ColorPairGrayBlack,
- [METER_TEXT] = ColorPair(Cyan, Black),
- [METER_VALUE] = A_BOLD | ColorPair(Cyan, Black),
- [METER_VALUE_ERROR] = A_BOLD | ColorPair(Red, Black),
- [METER_VALUE_IOREAD] = ColorPair(Green, Black),
- [METER_VALUE_IOWRITE] = A_BOLD | ColorPair(Blue, Black),
- [METER_VALUE_NOTICE] = A_BOLD | ColorPair(White, Black),
- [METER_VALUE_OK] = ColorPair(Green, Black),
- [METER_VALUE_WARN] = A_BOLD | ColorPair(Yellow, Black),
- [LED_COLOR] = ColorPair(Green, Black),
- [TASKS_RUNNING] = A_BOLD | ColorPair(Green, Black),
- [PROCESS] = A_NORMAL,
- [PROCESS_SHADOW] = A_BOLD | ColorPairGrayBlack,
- [PROCESS_TAG] = A_BOLD | ColorPair(Yellow, Black),
- [PROCESS_MEGABYTES] = ColorPair(Cyan, Black),
- [PROCESS_GIGABYTES] = ColorPair(Green, Black),
- [PROCESS_BASENAME] = A_BOLD | ColorPair(Cyan, Black),
- [PROCESS_TREE] = ColorPair(Cyan, Black),
- [PROCESS_RUN_STATE] = ColorPair(Green, Black),
- [PROCESS_D_STATE] = A_BOLD | ColorPair(Red, Black),
- [PROCESS_HIGH_PRIORITY] = ColorPair(Red, Black),
- [PROCESS_LOW_PRIORITY] = ColorPair(Green, Black),
- [PROCESS_NEW] = ColorPair(Black, Green),
- [PROCESS_TOMB] = ColorPair(Black, Red),
- [PROCESS_THREAD] = ColorPair(Green, Black),
- [PROCESS_THREAD_BASENAME] = A_BOLD | ColorPair(Green, Black),
- [PROCESS_COMM] = ColorPair(Magenta, Black),
- [PROCESS_THREAD_COMM] = A_BOLD | ColorPair(Blue, Black),
- [PROCESS_PRIV] = ColorPair(Magenta, Black),
- [BAR_BORDER] = A_BOLD,
- [BAR_SHADOW] = A_BOLD | ColorPairGrayBlack,
- [SWAP] = ColorPair(Red, Black),
- [SWAP_CACHE] = ColorPair(Yellow, Black),
- [SWAP_FRONTSWAP] = A_BOLD | ColorPairGrayBlack,
- [GRAPH_1] = A_BOLD | ColorPair(Cyan, Black),
- [GRAPH_2] = ColorPair(Cyan, Black),
- [MEMORY_USED] = ColorPair(Green, Black),
- [MEMORY_BUFFERS] = A_BOLD | ColorPair(Blue, Black),
- [MEMORY_BUFFERS_TEXT] = A_BOLD | ColorPair(Blue, Black),
- [MEMORY_CACHE] = ColorPair(Yellow, Black),
- [MEMORY_SHARED] = ColorPair(Magenta, Black),
- [MEMORY_COMPRESSED] = A_BOLD | ColorPairGrayBlack,
- [HUGEPAGE_1] = ColorPair(Green, Black),
- [HUGEPAGE_2] = ColorPair(Yellow, Black),
- [HUGEPAGE_3] = ColorPair(Red, Black),
- [HUGEPAGE_4] = A_BOLD | ColorPair(Blue, Black),
- [LOAD_AVERAGE_FIFTEEN] = ColorPair(Cyan, Black),
- [LOAD_AVERAGE_FIVE] = A_BOLD | ColorPair(Cyan, Black),
- [LOAD_AVERAGE_ONE] = A_BOLD | ColorPair(White, Black),
- [LOAD] = A_BOLD,
- [HELP_BOLD] = A_BOLD | ColorPair(Cyan, Black),
- [HELP_SHADOW] = A_BOLD | ColorPairGrayBlack,
- [CLOCK] = A_BOLD,
- [DATE] = A_BOLD,
- [DATETIME] = A_BOLD,
- [CHECK_BOX] = ColorPair(Cyan, Black),
- [CHECK_MARK] = A_BOLD,
- [CHECK_TEXT] = A_NORMAL,
- [HOSTNAME] = A_BOLD,
- [CPU_NICE] = A_BOLD | ColorPair(Blue, Black),
- [CPU_NICE_TEXT] = A_BOLD | ColorPair(Blue, Black),
- [CPU_NORMAL] = ColorPair(Green, Black),
- [CPU_SYSTEM] = ColorPair(Red, Black),
- [CPU_IOWAIT] = A_BOLD | ColorPairGrayBlack,
- [CPU_IRQ] = ColorPair(Yellow, Black),
- [CPU_SOFTIRQ] = ColorPair(Magenta, Black),
- [CPU_STEAL] = ColorPair(Cyan, Black),
- [CPU_GUEST] = ColorPair(Cyan, Black),
- [GPU_ENGINE_1] = ColorPair(Green, Black),
- [GPU_ENGINE_2] = ColorPair(Yellow, Black),
- [GPU_ENGINE_3] = ColorPair(Red, Black),
- [GPU_ENGINE_4] = A_BOLD | ColorPair(Blue, Black),
- [GPU_RESIDUE] = ColorPair(Magenta, Black),
- [PANEL_EDIT] = ColorPair(White, Blue),
- [SCREENS_OTH_BORDER] = ColorPair(Blue, Blue),
- [SCREENS_OTH_TEXT] = ColorPair(Black, Blue),
- [SCREENS_CUR_BORDER] = ColorPair(Green, Green),
- [SCREENS_CUR_TEXT] = ColorPair(Black, Green),
- [PRESSURE_STALL_THREEHUNDRED] = ColorPair(Cyan, Black),
- [PRESSURE_STALL_SIXTY] = A_BOLD | ColorPair(Cyan, Black),
- [PRESSURE_STALL_TEN] = A_BOLD | ColorPair(White, Black),
- [FILE_DESCRIPTOR_USED] = ColorPair(Green, Black),
- [FILE_DESCRIPTOR_MAX] = A_BOLD | ColorPair(Blue, Black),
- [ZFS_MFU] = A_BOLD | ColorPair(Blue, Black),
- [ZFS_MRU] = ColorPair(Yellow, Black),
- [ZFS_ANON] = ColorPair(Magenta, Black),
- [ZFS_HEADER] = ColorPair(Cyan, Black),
- [ZFS_OTHER] = ColorPair(Magenta, Black),
- [ZFS_COMPRESSED] = A_BOLD | ColorPair(Blue, Black),
- [ZFS_RATIO] = ColorPair(Magenta, Black),
- [ZRAM_COMPRESSED] = A_BOLD | ColorPair(Blue, Black),
- [ZRAM_UNCOMPRESSED] = ColorPair(Yellow, Black),
- [DYNAMIC_GRAY] = ColorPairGrayBlack,
- [DYNAMIC_DARKGRAY] = A_BOLD | ColorPairGrayBlack,
- [DYNAMIC_RED] = ColorPair(Red, Black),
- [DYNAMIC_GREEN] = ColorPair(Green, Black),
- [DYNAMIC_BLUE] = A_BOLD | ColorPair(Blue, Black),
- [DYNAMIC_CYAN] = ColorPair(Cyan, Black),
- [DYNAMIC_MAGENTA] = ColorPair(Magenta, Black),
- [DYNAMIC_YELLOW] = ColorPair(Yellow, Black),
- [DYNAMIC_WHITE] = ColorPair(White, Black),
- },
- [COLORSCHEME_MONOCHROME] = {
- [RESET_COLOR] = A_NORMAL,
- [DEFAULT_COLOR] = A_NORMAL,
- [FUNCTION_BAR] = A_REVERSE,
- [FUNCTION_KEY] = A_NORMAL,
- [PANEL_HEADER_FOCUS] = A_REVERSE,
- [PANEL_HEADER_UNFOCUS] = A_REVERSE,
- [PANEL_SELECTION_FOCUS] = A_REVERSE,
- [PANEL_SELECTION_FOLLOW] = A_REVERSE,
- [PANEL_SELECTION_UNFOCUS] = A_BOLD,
- [FAILED_SEARCH] = A_REVERSE | A_BOLD,
- [FAILED_READ] = A_BOLD,
- [PAUSED] = A_BOLD | A_REVERSE,
- [UPTIME] = A_BOLD,
- [BATTERY] = A_BOLD,
- [LARGE_NUMBER] = A_BOLD,
- [METER_SHADOW] = A_DIM,
- [METER_TEXT] = A_NORMAL,
- [METER_VALUE] = A_BOLD,
- [METER_VALUE_ERROR] = A_BOLD,
- [METER_VALUE_IOREAD] = A_NORMAL,
- [METER_VALUE_IOWRITE] = A_NORMAL,
- [METER_VALUE_NOTICE] = A_BOLD,
- [METER_VALUE_OK] = A_NORMAL,
- [METER_VALUE_WARN] = A_BOLD,
- [LED_COLOR] = A_NORMAL,
- [TASKS_RUNNING] = A_BOLD,
- [PROCESS] = A_NORMAL,
- [PROCESS_SHADOW] = A_DIM,
- [PROCESS_TAG] = A_BOLD,
- [PROCESS_MEGABYTES] = A_BOLD,
- [PROCESS_GIGABYTES] = A_BOLD,
- [PROCESS_BASENAME] = A_BOLD,
- [PROCESS_TREE] = A_BOLD,
- [PROCESS_RUN_STATE] = A_BOLD,
- [PROCESS_D_STATE] = A_BOLD,
- [PROCESS_HIGH_PRIORITY] = A_BOLD,
- [PROCESS_LOW_PRIORITY] = A_DIM,
- [PROCESS_NEW] = A_BOLD,
- [PROCESS_TOMB] = A_DIM,
- [PROCESS_THREAD] = A_BOLD,
- [PROCESS_THREAD_BASENAME] = A_REVERSE,
- [PROCESS_COMM] = A_BOLD,
- [PROCESS_THREAD_COMM] = A_REVERSE,
- [PROCESS_PRIV] = A_BOLD,
- [BAR_BORDER] = A_BOLD,
- [BAR_SHADOW] = A_DIM,
- [SWAP] = A_BOLD,
- [SWAP_CACHE] = A_NORMAL,
- [SWAP_FRONTSWAP] = A_DIM,
- [GRAPH_1] = A_BOLD,
- [GRAPH_2] = A_NORMAL,
- [MEMORY_USED] = A_BOLD,
- [MEMORY_BUFFERS] = A_NORMAL,
- [MEMORY_BUFFERS_TEXT] = A_NORMAL,
- [MEMORY_CACHE] = A_NORMAL,
- [MEMORY_SHARED] = A_NORMAL,
- [MEMORY_COMPRESSED] = A_DIM,
- [HUGEPAGE_1] = A_BOLD,
- [HUGEPAGE_2] = A_NORMAL,
- [HUGEPAGE_3] = A_REVERSE | A_BOLD,
- [HUGEPAGE_4] = A_REVERSE,
- [LOAD_AVERAGE_FIFTEEN] = A_DIM,
- [LOAD_AVERAGE_FIVE] = A_NORMAL,
- [LOAD_AVERAGE_ONE] = A_BOLD,
- [LOAD] = A_BOLD,
- [HELP_BOLD] = A_BOLD,
- [HELP_SHADOW] = A_DIM,
- [CLOCK] = A_BOLD,
- [DATE] = A_BOLD,
- [DATETIME] = A_BOLD,
- [CHECK_BOX] = A_BOLD,
- [CHECK_MARK] = A_NORMAL,
- [CHECK_TEXT] = A_NORMAL,
- [HOSTNAME] = A_BOLD,
- [CPU_NICE] = A_NORMAL,
- [CPU_NICE_TEXT] = A_NORMAL,
- [CPU_NORMAL] = A_BOLD,
- [CPU_SYSTEM] = A_BOLD,
- [CPU_IOWAIT] = A_NORMAL,
- [CPU_IRQ] = A_BOLD,
- [CPU_SOFTIRQ] = A_BOLD,
- [CPU_STEAL] = A_DIM,
- [CPU_GUEST] = A_DIM,
- [GPU_ENGINE_1] = A_BOLD,
- [GPU_ENGINE_2] = A_NORMAL,
- [GPU_ENGINE_3] = A_REVERSE | A_BOLD,
- [GPU_ENGINE_4] = A_REVERSE,
- [GPU_RESIDUE] = A_BOLD,
- [PANEL_EDIT] = A_BOLD,
- [SCREENS_OTH_BORDER] = A_DIM,
- [SCREENS_OTH_TEXT] = A_DIM,
- [SCREENS_CUR_BORDER] = A_REVERSE,
- [SCREENS_CUR_TEXT] = A_REVERSE,
- [PRESSURE_STALL_THREEHUNDRED] = A_DIM,
- [PRESSURE_STALL_SIXTY] = A_NORMAL,
- [PRESSURE_STALL_TEN] = A_BOLD,
- [FILE_DESCRIPTOR_USED] = A_BOLD,
- [FILE_DESCRIPTOR_MAX] = A_BOLD,
- [ZFS_MFU] = A_NORMAL,
- [ZFS_MRU] = A_NORMAL,
- [ZFS_ANON] = A_DIM,
- [ZFS_HEADER] = A_BOLD,
- [ZFS_OTHER] = A_DIM,
- [ZFS_COMPRESSED] = A_BOLD,
- [ZFS_RATIO] = A_BOLD,
- [ZRAM_COMPRESSED] = A_NORMAL,
- [ZRAM_UNCOMPRESSED] = A_NORMAL,
- [DYNAMIC_GRAY] = A_DIM,
- [DYNAMIC_DARKGRAY] = A_DIM,
- [DYNAMIC_RED] = A_BOLD,
- [DYNAMIC_GREEN] = A_NORMAL,
- [DYNAMIC_BLUE] = A_NORMAL,
- [DYNAMIC_CYAN] = A_BOLD,
- [DYNAMIC_MAGENTA] = A_NORMAL,
- [DYNAMIC_YELLOW] = A_NORMAL,
- [DYNAMIC_WHITE] = A_BOLD,
- },
- [COLORSCHEME_BLACKONWHITE] = {
- [RESET_COLOR] = ColorPair(Black, White),
- [DEFAULT_COLOR] = ColorPair(Black, White),
- [FUNCTION_BAR] = ColorPair(Black, Cyan),
- [FUNCTION_KEY] = ColorPair(Black, White),
- [PANEL_HEADER_FOCUS] = ColorPair(Black, Green),
- [PANEL_HEADER_UNFOCUS] = ColorPair(Black, Green),
- [PANEL_SELECTION_FOCUS] = ColorPair(Black, Cyan),
- [PANEL_SELECTION_FOLLOW] = ColorPair(Black, Yellow),
- [PANEL_SELECTION_UNFOCUS] = ColorPair(Blue, White),
- [FAILED_SEARCH] = ColorPair(Red, Cyan),
- [FAILED_READ] = ColorPair(Red, White),
- [PAUSED] = A_BOLD | ColorPair(Yellow, Cyan),
- [UPTIME] = ColorPair(Yellow, White),
- [BATTERY] = ColorPair(Yellow, White),
- [LARGE_NUMBER] = ColorPair(Red, White),
- [METER_SHADOW] = ColorPair(Blue, White),
- [METER_TEXT] = ColorPair(Blue, White),
- [METER_VALUE] = ColorPair(Black, White),
- [METER_VALUE_ERROR] = A_BOLD | ColorPair(Red, White),
- [METER_VALUE_IOREAD] = ColorPair(Green, White),
- [METER_VALUE_IOWRITE] = ColorPair(Yellow, White),
- [METER_VALUE_NOTICE] = A_BOLD | ColorPair(Yellow, White),
- [METER_VALUE_OK] = ColorPair(Green, White),
- [METER_VALUE_WARN] = A_BOLD | ColorPair(Yellow, White),
- [LED_COLOR] = ColorPair(Green, White),
- [TASKS_RUNNING] = ColorPair(Green, White),
- [PROCESS] = ColorPair(Black, White),
- [PROCESS_SHADOW] = A_BOLD | ColorPair(Black, White),
- [PROCESS_TAG] = ColorPair(White, Blue),
- [PROCESS_MEGABYTES] = ColorPair(Blue, White),
- [PROCESS_GIGABYTES] = ColorPair(Green, White),
- [PROCESS_BASENAME] = ColorPair(Blue, White),
- [PROCESS_TREE] = ColorPair(Green, White),
- [PROCESS_RUN_STATE] = ColorPair(Green, White),
- [PROCESS_D_STATE] = A_BOLD | ColorPair(Red, White),
- [PROCESS_HIGH_PRIORITY] = ColorPair(Red, White),
- [PROCESS_LOW_PRIORITY] = ColorPair(Green, White),
- [PROCESS_NEW] = ColorPair(White, Green),
- [PROCESS_TOMB] = ColorPair(White, Red),
- [PROCESS_THREAD] = ColorPair(Blue, White),
- [PROCESS_THREAD_BASENAME] = A_BOLD | ColorPair(Blue, White),
- [PROCESS_COMM] = ColorPair(Magenta, White),
- [PROCESS_THREAD_COMM] = ColorPair(Green, White),
- [PROCESS_PRIV] = ColorPair(Magenta, White),
- [BAR_BORDER] = ColorPair(Blue, White),
- [BAR_SHADOW] = ColorPair(Black, White),
- [SWAP] = ColorPair(Red, White),
- [SWAP_CACHE] = ColorPair(Yellow, White),
- [SWAP_FRONTSWAP] = A_BOLD | ColorPair(Black, White),
- [GRAPH_1] = A_BOLD | ColorPair(Blue, White),
- [GRAPH_2] = ColorPair(Blue, White),
- [MEMORY_USED] = ColorPair(Green, White),
- [MEMORY_BUFFERS] = ColorPair(Cyan, White),
- [MEMORY_BUFFERS_TEXT] = ColorPair(Cyan, White),
- [MEMORY_CACHE] = ColorPair(Yellow, White),
- [MEMORY_SHARED] = ColorPair(Magenta, White),
- [MEMORY_COMPRESSED] = A_BOLD | ColorPair(Black, White),
- [HUGEPAGE_1] = ColorPair(Green, White),
- [HUGEPAGE_2] = ColorPair(Yellow, White),
- [HUGEPAGE_3] = ColorPair(Red, White),
- [HUGEPAGE_4] = ColorPair(Blue, White),
- [LOAD_AVERAGE_FIFTEEN] = ColorPair(Black, White),
- [LOAD_AVERAGE_FIVE] = ColorPair(Black, White),
- [LOAD_AVERAGE_ONE] = ColorPair(Black, White),
- [LOAD] = ColorPair(Black, White),
- [HELP_BOLD] = ColorPair(Blue, White),
- [HELP_SHADOW] = A_BOLD | ColorPair(Black, White),
- [CLOCK] = ColorPair(Black, White),
- [DATE] = ColorPair(Black, White),
- [DATETIME] = ColorPair(Black, White),
- [CHECK_BOX] = ColorPair(Blue, White),
- [CHECK_MARK] = ColorPair(Black, White),
- [CHECK_TEXT] = ColorPair(Black, White),
- [HOSTNAME] = ColorPair(Black, White),
- [CPU_NICE] = ColorPair(Cyan, White),
- [CPU_NICE_TEXT] = ColorPair(Cyan, White),
- [CPU_NORMAL] = ColorPair(Green, White),
- [CPU_SYSTEM] = ColorPair(Red, White),
- [CPU_IOWAIT] = A_BOLD | ColorPair(Black, White),
- [CPU_IRQ] = ColorPair(Blue, White),
- [CPU_SOFTIRQ] = ColorPair(Blue, White),
- [CPU_STEAL] = ColorPair(Cyan, White),
- [CPU_GUEST] = ColorPair(Cyan, White),
- [GPU_ENGINE_1] = ColorPair(Green, White),
- [GPU_ENGINE_2] = ColorPair(Yellow, White),
- [GPU_ENGINE_3] = ColorPair(Red, White),
- [GPU_ENGINE_4] = ColorPair(Blue, White),
- [GPU_RESIDUE] = ColorPair(Magenta, White),
- [PANEL_EDIT] = ColorPair(White, Blue),
- [SCREENS_OTH_BORDER] = A_BOLD | ColorPair(Black, White),
- [SCREENS_OTH_TEXT] = A_BOLD | ColorPair(Black, White),
- [SCREENS_CUR_BORDER] = ColorPair(Green, Green),
- [SCREENS_CUR_TEXT] = ColorPair(Black, Green),
- [PRESSURE_STALL_THREEHUNDRED] = ColorPair(Black, White),
- [PRESSURE_STALL_SIXTY] = ColorPair(Black, White),
- [PRESSURE_STALL_TEN] = ColorPair(Black, White),
- [FILE_DESCRIPTOR_USED] = ColorPair(Green, White),
- [FILE_DESCRIPTOR_MAX] = ColorPair(Blue, White),
- [ZFS_MFU] = ColorPair(Cyan, White),
- [ZFS_MRU] = ColorPair(Yellow, White),
- [ZFS_ANON] = ColorPair(Magenta, White),
- [ZFS_HEADER] = ColorPair(Yellow, White),
- [ZFS_OTHER] = ColorPair(Magenta, White),
- [ZFS_COMPRESSED] = ColorPair(Cyan, White),
- [ZFS_RATIO] = ColorPair(Magenta, White),
- [ZRAM_COMPRESSED] = ColorPair(Cyan, White),
- [ZRAM_UNCOMPRESSED] = ColorPair(Yellow, White),
- [DYNAMIC_GRAY] = ColorPair(Black, White),
- [DYNAMIC_DARKGRAY] = A_BOLD | ColorPair(Black, White),
- [DYNAMIC_RED] = ColorPair(Red, White),
- [DYNAMIC_GREEN] = ColorPair(Green, White),
- [DYNAMIC_BLUE] = ColorPair(Blue, White),
- [DYNAMIC_CYAN] = ColorPair(Yellow, White),
- [DYNAMIC_MAGENTA] = ColorPair(Magenta, White),
- [DYNAMIC_YELLOW] = ColorPair(Yellow, White),
- [DYNAMIC_WHITE] = A_BOLD | ColorPair(Black, White),
- },
- [COLORSCHEME_LIGHTTERMINAL] = {
- [RESET_COLOR] = ColorPair(Black, Black),
- [DEFAULT_COLOR] = ColorPair(Black, Black),
- [FUNCTION_BAR] = ColorPair(Black, Cyan),
- [FUNCTION_KEY] = ColorPair(Black, Black),
- [PANEL_HEADER_FOCUS] = ColorPair(Black, Green),
- [PANEL_HEADER_UNFOCUS] = ColorPair(Black, Green),
- [PANEL_SELECTION_FOCUS] = ColorPair(Black, Cyan),
- [PANEL_SELECTION_FOLLOW] = ColorPair(Black, Yellow),
- [PANEL_SELECTION_UNFOCUS] = ColorPair(Blue, Black),
- [FAILED_SEARCH] = ColorPair(Red, Cyan),
- [FAILED_READ] = ColorPair(Red, Black),
- [PAUSED] = A_BOLD | ColorPair(Yellow, Cyan),
- [UPTIME] = ColorPair(Yellow, Black),
- [BATTERY] = ColorPair(Yellow, Black),
- [LARGE_NUMBER] = ColorPair(Red, Black),
- [METER_SHADOW] = A_BOLD | ColorPairGrayBlack,
- [METER_TEXT] = ColorPair(Blue, Black),
- [METER_VALUE] = ColorPair(Black, Black),
- [METER_VALUE_ERROR] = A_BOLD | ColorPair(Red, Black),
- [METER_VALUE_IOREAD] = ColorPair(Green, Black),
- [METER_VALUE_IOWRITE] = ColorPair(Yellow, Black),
- [METER_VALUE_NOTICE] = A_BOLD | ColorPairWhiteDefault,
- [METER_VALUE_OK] = ColorPair(Green, Black),
- [METER_VALUE_WARN] = A_BOLD | ColorPair(Yellow, Black),
- [LED_COLOR] = ColorPair(Green, Black),
- [TASKS_RUNNING] = ColorPair(Green, Black),
- [PROCESS] = ColorPair(Black, Black),
- [PROCESS_SHADOW] = A_BOLD | ColorPairGrayBlack,
- [PROCESS_TAG] = ColorPair(White, Blue),
- [PROCESS_MEGABYTES] = ColorPair(Blue, Black),
- [PROCESS_GIGABYTES] = ColorPair(Green, Black),
- [PROCESS_BASENAME] = ColorPair(Green, Black),
- [PROCESS_TREE] = ColorPair(Blue, Black),
- [PROCESS_RUN_STATE] = ColorPair(Green, Black),
- [PROCESS_D_STATE] = A_BOLD | ColorPair(Red, Black),
- [PROCESS_HIGH_PRIORITY] = ColorPair(Red, Black),
- [PROCESS_LOW_PRIORITY] = ColorPair(Green, Black),
- [PROCESS_NEW] = ColorPair(Black, Green),
- [PROCESS_TOMB] = ColorPair(Black, Red),
- [PROCESS_THREAD] = ColorPair(Blue, Black),
- [PROCESS_THREAD_BASENAME] = A_BOLD | ColorPair(Blue, Black),
- [PROCESS_COMM] = ColorPair(Magenta, Black),
- [PROCESS_THREAD_COMM] = ColorPair(Yellow, Black),
- [PROCESS_PRIV] = ColorPair(Magenta, Black),
- [BAR_BORDER] = ColorPair(Blue, Black),
- [BAR_SHADOW] = ColorPairGrayBlack,
- [SWAP] = ColorPair(Red, Black),
- [SWAP_CACHE] = ColorPair(Yellow, Black),
- [SWAP_FRONTSWAP] = ColorPairGrayBlack,
- [GRAPH_1] = A_BOLD | ColorPair(Cyan, Black),
- [GRAPH_2] = ColorPair(Cyan, Black),
- [MEMORY_USED] = ColorPair(Green, Black),
- [MEMORY_BUFFERS] = ColorPair(Cyan, Black),
- [MEMORY_BUFFERS_TEXT] = ColorPair(Cyan, Black),
- [MEMORY_CACHE] = ColorPair(Yellow, Black),
- [MEMORY_SHARED] = ColorPair(Magenta, Black),
- [MEMORY_COMPRESSED] = ColorPairGrayBlack,
- [HUGEPAGE_1] = ColorPair(Green, Black),
- [HUGEPAGE_2] = ColorPair(Yellow, Black),
- [HUGEPAGE_3] = ColorPair(Red, Black),
- [HUGEPAGE_4] = ColorPair(Blue, Black),
- [LOAD_AVERAGE_FIFTEEN] = ColorPair(Black, Black),
- [LOAD_AVERAGE_FIVE] = ColorPair(Black, Black),
- [LOAD_AVERAGE_ONE] = ColorPair(Black, Black),
- [LOAD] = ColorPairWhiteDefault,
- [HELP_BOLD] = ColorPair(Blue, Black),
- [HELP_SHADOW] = A_BOLD | ColorPairGrayBlack,
- [CLOCK] = ColorPairWhiteDefault,
- [DATE] = ColorPairWhiteDefault,
- [DATETIME] = ColorPairWhiteDefault,
- [CHECK_BOX] = ColorPair(Blue, Black),
- [CHECK_MARK] = ColorPair(Black, Black),
- [CHECK_TEXT] = ColorPair(Black, Black),
- [HOSTNAME] = ColorPairWhiteDefault,
- [CPU_NICE] = ColorPair(Cyan, Black),
- [CPU_NICE_TEXT] = ColorPair(Cyan, Black),
- [CPU_NORMAL] = ColorPair(Green, Black),
- [CPU_SYSTEM] = ColorPair(Red, Black),
- [CPU_IOWAIT] = A_BOLD | ColorPair(Black, Black),
- [CPU_IRQ] = A_BOLD | ColorPair(Blue, Black),
- [CPU_SOFTIRQ] = ColorPair(Blue, Black),
- [CPU_STEAL] = ColorPair(Black, Black),
- [CPU_GUEST] = ColorPair(Black, Black),
- [GPU_ENGINE_1] = ColorPair(Green, Black),
- [GPU_ENGINE_2] = ColorPair(Yellow, Black),
- [GPU_ENGINE_3] = ColorPair(Red, Black),
- [GPU_ENGINE_4] = ColorPair(Blue, Black),
- [GPU_RESIDUE] = ColorPair(Magenta, Black),
- [PANEL_EDIT] = ColorPair(White, Blue),
- [SCREENS_OTH_BORDER] = ColorPair(Blue, Black),
- [SCREENS_OTH_TEXT] = ColorPair(Blue, Black),
- [SCREENS_CUR_BORDER] = ColorPair(Green, Green),
- [SCREENS_CUR_TEXT] = ColorPair(Black, Green),
- [PRESSURE_STALL_THREEHUNDRED] = ColorPair(Black, Black),
- [PRESSURE_STALL_SIXTY] = ColorPair(Black, Black),
- [PRESSURE_STALL_TEN] = ColorPair(Black, Black),
- [FILE_DESCRIPTOR_USED] = ColorPair(Green, Black),
- [FILE_DESCRIPTOR_MAX] = A_BOLD | ColorPair(Blue, Black),
- [ZFS_MFU] = ColorPair(Cyan, Black),
- [ZFS_MRU] = ColorPair(Yellow, Black),
- [ZFS_ANON] = A_BOLD | ColorPair(Magenta, Black),
- [ZFS_HEADER] = ColorPair(Black, Black),
- [ZFS_OTHER] = A_BOLD | ColorPair(Magenta, Black),
- [ZFS_COMPRESSED] = ColorPair(Cyan, Black),
- [ZFS_RATIO] = A_BOLD | ColorPair(Magenta, Black),
- [ZRAM_COMPRESSED] = ColorPair(Cyan, Black),
- [ZRAM_UNCOMPRESSED] = ColorPair(Yellow, Black),
- [DYNAMIC_GRAY] = ColorPairGrayBlack,
- [DYNAMIC_DARKGRAY] = A_BOLD | ColorPairGrayBlack,
- [DYNAMIC_RED] = ColorPair(Red, Black),
- [DYNAMIC_GREEN] = ColorPair(Green, Black),
- [DYNAMIC_BLUE] = ColorPair(Blue, Black),
- [DYNAMIC_CYAN] = ColorPair(Cyan, Black),
- [DYNAMIC_MAGENTA] = ColorPair(Magenta, Black),
- [DYNAMIC_YELLOW] = ColorPair(Yellow, Black),
- [DYNAMIC_WHITE] = ColorPairWhiteDefault,
- },
- [COLORSCHEME_MIDNIGHT] = {
- [RESET_COLOR] = ColorPair(White, Blue),
- [DEFAULT_COLOR] = ColorPair(White, Blue),
- [FUNCTION_BAR] = ColorPair(Black, Cyan),
- [FUNCTION_KEY] = A_NORMAL,
- [PANEL_HEADER_FOCUS] = ColorPair(Black, Cyan),
- [PANEL_HEADER_UNFOCUS] = ColorPair(Black, Cyan),
- [PANEL_SELECTION_FOCUS] = ColorPair(Black, White),
- [PANEL_SELECTION_FOLLOW] = ColorPair(Black, Yellow),
- [PANEL_SELECTION_UNFOCUS] = A_BOLD | ColorPair(Yellow, Blue),
- [FAILED_SEARCH] = ColorPair(Red, Cyan),
- [FAILED_READ] = A_BOLD | ColorPair(Red, Blue),
- [PAUSED] = A_BOLD | ColorPair(Yellow, Cyan),
- [UPTIME] = A_BOLD | ColorPair(Yellow, Blue),
- [BATTERY] = A_BOLD | ColorPair(Yellow, Blue),
- [LARGE_NUMBER] = A_BOLD | ColorPair(Red, Blue),
- [METER_SHADOW] = ColorPair(Cyan, Blue),
- [METER_TEXT] = ColorPair(Cyan, Blue),
- [METER_VALUE] = A_BOLD | ColorPair(Cyan, Blue),
- [METER_VALUE_ERROR] = A_BOLD | ColorPair(Red, Blue),
- [METER_VALUE_IOREAD] = ColorPair(Green, Blue),
- [METER_VALUE_IOWRITE] = ColorPair(Black, Blue),
- [METER_VALUE_NOTICE] = A_BOLD | ColorPair(White, Blue),
- [METER_VALUE_OK] = ColorPair(Green, Blue),
- [METER_VALUE_WARN] = A_BOLD | ColorPair(Yellow, Black),
- [LED_COLOR] = ColorPair(Green, Blue),
- [TASKS_RUNNING] = A_BOLD | ColorPair(Green, Blue),
- [PROCESS] = ColorPair(White, Blue),
- [PROCESS_SHADOW] = A_BOLD | ColorPair(Black, Blue),
- [PROCESS_TAG] = A_BOLD | ColorPair(Yellow, Blue),
- [PROCESS_MEGABYTES] = ColorPair(Cyan, Blue),
- [PROCESS_GIGABYTES] = ColorPair(Green, Blue),
- [PROCESS_BASENAME] = A_BOLD | ColorPair(Cyan, Blue),
- [PROCESS_TREE] = ColorPair(Cyan, Blue),
- [PROCESS_RUN_STATE] = ColorPair(Green, Blue),
- [PROCESS_D_STATE] = A_BOLD | ColorPair(Red, Blue),
- [PROCESS_HIGH_PRIORITY] = ColorPair(Red, Blue),
- [PROCESS_LOW_PRIORITY] = ColorPair(Green, Blue),
- [PROCESS_NEW] = ColorPair(Blue, Green),
- [PROCESS_TOMB] = ColorPair(Blue, Red),
- [PROCESS_THREAD] = ColorPair(Green, Blue),
- [PROCESS_THREAD_BASENAME] = A_BOLD | ColorPair(Green, Blue),
- [PROCESS_COMM] = ColorPair(Magenta, Blue),
- [PROCESS_THREAD_COMM] = ColorPair(Black, Blue),
- [PROCESS_PRIV] = ColorPair(Magenta, Blue),
- [BAR_BORDER] = A_BOLD | ColorPair(Yellow, Blue),
- [BAR_SHADOW] = ColorPair(Cyan, Blue),
- [SWAP] = ColorPair(Red, Blue),
- [SWAP_CACHE] = A_BOLD | ColorPair(Yellow, Blue),
- [SWAP_FRONTSWAP] = A_BOLD | ColorPair(Black, Blue),
- [GRAPH_1] = A_BOLD | ColorPair(Cyan, Blue),
- [GRAPH_2] = ColorPair(Cyan, Blue),
- [MEMORY_USED] = A_BOLD | ColorPair(Green, Blue),
- [MEMORY_BUFFERS] = A_BOLD | ColorPair(Cyan, Blue),
- [MEMORY_BUFFERS_TEXT] = A_BOLD | ColorPair(Cyan, Blue),
- [MEMORY_CACHE] = A_BOLD | ColorPair(Yellow, Blue),
- [MEMORY_SHARED] = A_BOLD | ColorPair(Magenta, Blue),
- [MEMORY_COMPRESSED] = A_BOLD | ColorPair(Black, Blue),
- [HUGEPAGE_1] = A_BOLD | ColorPair(Green, Blue),
- [HUGEPAGE_2] = A_BOLD | ColorPair(Yellow, Blue),
- [HUGEPAGE_3] = A_BOLD | ColorPair(Red, Blue),
- [HUGEPAGE_4] = A_BOLD | ColorPair(White, Blue),
- [LOAD_AVERAGE_FIFTEEN] = A_BOLD | ColorPair(Black, Blue),
- [LOAD_AVERAGE_FIVE] = A_NORMAL | ColorPair(White, Blue),
- [LOAD_AVERAGE_ONE] = A_BOLD | ColorPair(White, Blue),
- [LOAD] = A_BOLD | ColorPair(White, Blue),
- [HELP_BOLD] = A_BOLD | ColorPair(Cyan, Blue),
- [HELP_SHADOW] = A_BOLD | ColorPair(Black, Blue),
- [CLOCK] = ColorPair(White, Blue),
- [DATE] = ColorPair(White, Blue),
- [DATETIME] = ColorPair(White, Blue),
- [CHECK_BOX] = ColorPair(Cyan, Blue),
- [CHECK_MARK] = A_BOLD | ColorPair(White, Blue),
- [CHECK_TEXT] = A_NORMAL | ColorPair(White, Blue),
- [HOSTNAME] = ColorPair(White, Blue),
- [CPU_NICE] = A_BOLD | ColorPair(Cyan, Blue),
- [CPU_NICE_TEXT] = A_BOLD | ColorPair(Cyan, Blue),
- [CPU_NORMAL] = A_BOLD | ColorPair(Green, Blue),
- [CPU_SYSTEM] = A_BOLD | ColorPair(Red, Blue),
- [CPU_IOWAIT] = A_BOLD | ColorPair(Black, Blue),
- [CPU_IRQ] = A_BOLD | ColorPair(Black, Blue),
- [CPU_SOFTIRQ] = ColorPair(Black, Blue),
- [CPU_STEAL] = ColorPair(White, Blue),
- [CPU_GUEST] = ColorPair(White, Blue),
- [GPU_ENGINE_1] = A_BOLD | ColorPair(Green, Blue),
- [GPU_ENGINE_2] = A_BOLD | ColorPair(Yellow, Blue),
- [GPU_ENGINE_3] = A_BOLD | ColorPair(Red, Blue),
- [GPU_ENGINE_4] = A_BOLD | ColorPair(White, Blue),
- [GPU_RESIDUE] = A_BOLD | ColorPair(Magenta, Blue),
- [PANEL_EDIT] = ColorPair(White, Blue),
- [SCREENS_OTH_BORDER] = A_BOLD | ColorPair(Yellow, Blue),
- [SCREENS_OTH_TEXT] = ColorPair(Cyan, Blue),
- [SCREENS_CUR_BORDER] = ColorPair(Cyan, Cyan),
- [SCREENS_CUR_TEXT] = ColorPair(Black, Cyan),
- [PRESSURE_STALL_THREEHUNDRED] = A_BOLD | ColorPair(Black, Blue),
- [PRESSURE_STALL_SIXTY] = A_NORMAL | ColorPair(White, Blue),
- [PRESSURE_STALL_TEN] = A_BOLD | ColorPair(White, Blue),
- [FILE_DESCRIPTOR_USED] = A_BOLD | ColorPair(Green, Blue),
- [FILE_DESCRIPTOR_MAX] = A_BOLD | ColorPair(Red, Blue),
- [ZFS_MFU] = A_BOLD | ColorPair(White, Blue),
- [ZFS_MRU] = A_BOLD | ColorPair(Yellow, Blue),
- [ZFS_ANON] = A_BOLD | ColorPair(Magenta, Blue),
- [ZFS_HEADER] = A_BOLD | ColorPair(Yellow, Blue),
- [ZFS_OTHER] = A_BOLD | ColorPair(Magenta, Blue),
- [ZFS_COMPRESSED] = A_BOLD | ColorPair(White, Blue),
- [ZFS_RATIO] = A_BOLD | ColorPair(Magenta, Blue),
- [ZRAM_COMPRESSED] = ColorPair(Cyan, Blue),
- [ZRAM_UNCOMPRESSED] = ColorPair(Yellow, Blue),
- [DYNAMIC_GRAY] = ColorPairGrayBlack,
- [DYNAMIC_DARKGRAY] = A_BOLD | ColorPairGrayBlack,
- [DYNAMIC_RED] = ColorPair(Red, Blue),
- [DYNAMIC_GREEN] = ColorPair(Green, Blue),
- [DYNAMIC_BLUE] = ColorPair(Black, Blue),
- [DYNAMIC_CYAN] = ColorPair(Cyan, Blue),
- [DYNAMIC_MAGENTA] = ColorPair(Magenta, Blue),
- [DYNAMIC_YELLOW] = ColorPair(Yellow, Blue),
- [DYNAMIC_WHITE] = ColorPair(White, Blue),
- },
- [COLORSCHEME_BLACKNIGHT] = {
- [RESET_COLOR] = ColorPair(Cyan, Black),
- [DEFAULT_COLOR] = ColorPair(Cyan, Black),
- [FUNCTION_BAR] = ColorPair(Black, Green),
- [FUNCTION_KEY] = ColorPair(Cyan, Black),
- [PANEL_HEADER_FOCUS] = ColorPair(Black, Green),
- [PANEL_HEADER_UNFOCUS] = ColorPair(Black, Green),
- [PANEL_SELECTION_FOCUS] = ColorPair(Black, Cyan),
- [PANEL_SELECTION_FOLLOW] = ColorPair(Black, Yellow),
- [PANEL_SELECTION_UNFOCUS] = ColorPair(Black, White),
- [FAILED_SEARCH] = ColorPair(Red, Green),
- [FAILED_READ] = A_BOLD | ColorPair(Red, Black),
- [PAUSED] = A_BOLD | ColorPair(Yellow, Green),
- [UPTIME] = ColorPair(Green, Black),
- [BATTERY] = ColorPair(Green, Black),
- [LARGE_NUMBER] = A_BOLD | ColorPair(Red, Black),
- [METER_SHADOW] = A_BOLD | ColorPairGrayBlack,
- [METER_TEXT] = ColorPair(Cyan, Black),
- [METER_VALUE] = ColorPair(Green, Black),
- [METER_VALUE_ERROR] = A_BOLD | ColorPair(Red, Black),
- [METER_VALUE_IOREAD] = ColorPair(Green, Black),
- [METER_VALUE_IOWRITE] = ColorPair(Blue, Black),
- [METER_VALUE_NOTICE] = A_BOLD | ColorPair(White, Black),
- [METER_VALUE_OK] = ColorPair(Green, Black),
- [METER_VALUE_WARN] = A_BOLD | ColorPair(Yellow, Black),
- [LED_COLOR] = ColorPair(Green, Black),
- [TASKS_RUNNING] = A_BOLD | ColorPair(Green, Black),
- [PROCESS] = ColorPair(Cyan, Black),
- [PROCESS_SHADOW] = A_BOLD | ColorPairGrayBlack,
- [PROCESS_TAG] = A_BOLD | ColorPair(Yellow, Black),
- [PROCESS_MEGABYTES] = A_BOLD | ColorPair(Green, Black),
- [PROCESS_GIGABYTES] = A_BOLD | ColorPair(Yellow, Black),
- [PROCESS_BASENAME] = A_BOLD | ColorPair(Green, Black),
- [PROCESS_TREE] = ColorPair(Cyan, Black),
- [PROCESS_THREAD] = ColorPair(Green, Black),
- [PROCESS_THREAD_BASENAME] = A_BOLD | ColorPair(Blue, Black),
- [PROCESS_COMM] = ColorPair(Magenta, Black),
- [PROCESS_THREAD_COMM] = ColorPair(Yellow, Black),
- [PROCESS_RUN_STATE] = ColorPair(Green, Black),
- [PROCESS_D_STATE] = A_BOLD | ColorPair(Red, Black),
- [PROCESS_HIGH_PRIORITY] = ColorPair(Red, Black),
- [PROCESS_LOW_PRIORITY] = ColorPair(Green, Black),
- [PROCESS_NEW] = ColorPair(Black, Green),
- [PROCESS_TOMB] = ColorPair(Black, Red),
- [PROCESS_PRIV] = ColorPair(Magenta, Black),
- [BAR_BORDER] = A_BOLD | ColorPair(Green, Black),
- [BAR_SHADOW] = ColorPair(Cyan, Black),
- [SWAP] = ColorPair(Red, Black),
- [SWAP_CACHE] = ColorPair(Yellow, Black),
- [SWAP_FRONTSWAP] = ColorPair(Yellow, Black),
- [GRAPH_1] = A_BOLD | ColorPair(Green, Black),
- [GRAPH_2] = ColorPair(Green, Black),
- [MEMORY_USED] = ColorPair(Green, Black),
- [MEMORY_BUFFERS] = ColorPair(Blue, Black),
- [MEMORY_BUFFERS_TEXT] = A_BOLD | ColorPair(Blue, Black),
- [MEMORY_CACHE] = ColorPair(Yellow, Black),
- [MEMORY_SHARED] = ColorPair(Magenta, Black),
- [MEMORY_COMPRESSED] = ColorPair(Yellow, Black),
- [HUGEPAGE_1] = ColorPair(Green, Black),
- [HUGEPAGE_2] = ColorPair(Yellow, Black),
- [HUGEPAGE_3] = ColorPair(Red, Black),
- [HUGEPAGE_4] = ColorPair(Blue, Black),
- [LOAD_AVERAGE_FIFTEEN] = ColorPair(Green, Black),
- [LOAD_AVERAGE_FIVE] = ColorPair(Green, Black),
- [LOAD_AVERAGE_ONE] = A_BOLD | ColorPair(Green, Black),
- [LOAD] = A_BOLD,
- [HELP_BOLD] = A_BOLD | ColorPair(Cyan, Black),
- [HELP_SHADOW] = A_BOLD | ColorPairGrayBlack,
- [CLOCK] = ColorPair(Green, Black),
- [CHECK_BOX] = ColorPair(Green, Black),
- [CHECK_MARK] = A_BOLD | ColorPair(Green, Black),
- [CHECK_TEXT] = ColorPair(Cyan, Black),
- [HOSTNAME] = ColorPair(Green, Black),
- [CPU_NICE] = ColorPair(Blue, Black),
- [CPU_NICE_TEXT] = A_BOLD | ColorPair(Blue, Black),
- [CPU_NORMAL] = ColorPair(Green, Black),
- [CPU_SYSTEM] = ColorPair(Red, Black),
- [CPU_IOWAIT] = ColorPair(Yellow, Black),
- [CPU_IRQ] = A_BOLD | ColorPair(Blue, Black),
- [CPU_SOFTIRQ] = ColorPair(Blue, Black),
- [CPU_STEAL] = ColorPair(Cyan, Black),
- [CPU_GUEST] = ColorPair(Cyan, Black),
- [GPU_ENGINE_1] = ColorPair(Green, Black),
- [GPU_ENGINE_2] = ColorPair(Yellow, Black),
- [GPU_ENGINE_3] = ColorPair(Red, Black),
- [GPU_ENGINE_4] = ColorPair(Blue, Black),
- [GPU_RESIDUE] = ColorPair(Magenta, Black),
- [PANEL_EDIT] = ColorPair(White, Cyan),
- [SCREENS_OTH_BORDER] = ColorPair(White, Black),
- [SCREENS_OTH_TEXT] = ColorPair(Cyan, Black),
- [SCREENS_CUR_BORDER] = A_BOLD | ColorPair(White, Black),
- [SCREENS_CUR_TEXT] = A_BOLD | ColorPair(Green, Black),
- [PRESSURE_STALL_THREEHUNDRED] = ColorPair(Green, Black),
- [PRESSURE_STALL_SIXTY] = ColorPair(Green, Black),
- [PRESSURE_STALL_TEN] = A_BOLD | ColorPair(Green, Black),
- [FILE_DESCRIPTOR_USED] = ColorPair(Green, Black),
- [FILE_DESCRIPTOR_MAX] = A_BOLD | ColorPair(Blue, Black),
- [ZFS_MFU] = ColorPair(Blue, Black),
- [ZFS_MRU] = ColorPair(Yellow, Black),
- [ZFS_ANON] = ColorPair(Magenta, Black),
- [ZFS_HEADER] = ColorPair(Yellow, Black),
- [ZFS_OTHER] = ColorPair(Magenta, Black),
- [ZFS_COMPRESSED] = ColorPair(Blue, Black),
- [ZFS_RATIO] = ColorPair(Magenta, Black),
- [ZRAM_COMPRESSED] = ColorPair(Blue, Black),
- [ZRAM_UNCOMPRESSED] = ColorPair(Yellow, Black),
- [DYNAMIC_GRAY] = ColorPairGrayBlack,
- [DYNAMIC_DARKGRAY] = A_BOLD | ColorPairGrayBlack,
- [DYNAMIC_RED] = ColorPair(Red, Black),
- [DYNAMIC_GREEN] = ColorPair(Green, Black),
- [DYNAMIC_BLUE] = ColorPair(Blue, Black),
- [DYNAMIC_CYAN] = ColorPair(Cyan, Black),
- [DYNAMIC_MAGENTA] = ColorPair(Magenta, Black),
- [DYNAMIC_YELLOW] = ColorPair(Yellow, Black),
- [DYNAMIC_WHITE] = ColorPair(White, Black),
- },
- [COLORSCHEME_BROKENGRAY] = { 0 } // dynamically generated.
- };
- static bool CRT_retainScreenOnExit = false;
- int CRT_scrollHAmount = 5;
- int CRT_scrollWheelVAmount = 10;
- ColorScheme CRT_colorScheme = COLORSCHEME_DEFAULT;
- ATTR_NORETURN
- static void CRT_handleSIGTERM(int sgn) {
- CRT_done();
- if (!CRT_settings->changed)
- _exit(0);
- const char* signal_str = strsignal(sgn);
- if (!signal_str)
- signal_str = "unknown reason";
- char err_buf[512];
- snprintf(err_buf, sizeof(err_buf),
- "A signal %d (%s) was received, exiting without persisting settings to htoprc.\n",
- sgn, signal_str);
- full_write_str(STDERR_FILENO, err_buf);
- _exit(0);
- }
- #ifndef NDEBUG
- static int stderrRedirectNewFd = -1;
- static int stderrRedirectBackupFd = -1;
- static int createStderrCacheFile(void) {
- #if defined(HAVE_MEMFD_CREATE)
- return memfd_create("htop.stderr-redirect", 0);
- #elif defined(O_TMPFILE)
- return open("/tmp", O_TMPFILE | O_CREAT | O_EXCL | O_RDWR, S_IRUSR | S_IWUSR);
- #else
- char tmpName[] = "htop.stderr-redirectXXXXXX";
- mode_t curUmask = umask(S_IXUSR | S_IRWXG | S_IRWXO);
- int r = mkstemp(tmpName);
- umask(curUmask);
- if (r < 0)
- return r;
- (void) unlink(tmpName);
- return r;
- #endif /* HAVE_MEMFD_CREATE */
- }
- static void redirectStderr(void) {
- stderrRedirectNewFd = createStderrCacheFile();
- if (stderrRedirectNewFd < 0) {
- /* ignore failure */
- return;
- }
- stderrRedirectBackupFd = dup(STDERR_FILENO);
- dup2(stderrRedirectNewFd, STDERR_FILENO);
- }
- static void dumpStderr(void) {
- if (stderrRedirectNewFd < 0)
- return;
- fsync(STDERR_FILENO);
- dup2(stderrRedirectBackupFd, STDERR_FILENO);
- close(stderrRedirectBackupFd);
- stderrRedirectBackupFd = -1;
- lseek(stderrRedirectNewFd, 0, SEEK_SET);
- bool header = false;
- char buffer[8192];
- for (;;) {
- errno = 0;
- ssize_t res = read(stderrRedirectNewFd, buffer, sizeof(buffer));
- if (res < 0) {
- if (errno == EINTR)
- continue;
- break;
- }
- if (res == 0) {
- break;
- }
- if (res > 0) {
- if (!header) {
- full_write_str(STDERR_FILENO, ">>>>>>>>>> stderr output >>>>>>>>>>\n");
- header = true;
- }
- full_write(STDERR_FILENO, buffer, res);
- }
- }
- if (header)
- full_write_str(STDERR_FILENO, "\n<<<<<<<<<< stderr output <<<<<<<<<<\n");
- close(stderrRedirectNewFd);
- stderrRedirectNewFd = -1;
- }
- void CRT_debug_impl(const char* file, size_t lineno, const char* func, const char* fmt, ...) {
- va_list args;
- fprintf(stderr, "[%s:%zu (%s)]: ", file, lineno, func);
- va_start(args, fmt);
- vfprintf(stderr, fmt, args);
- va_end(args);
- fprintf(stderr, "\n");
- }
- #else /* !NDEBUG */
- static void redirectStderr(void) {
- }
- static void dumpStderr(void) {
- }
- #endif /* !NDEBUG */
- static struct sigaction old_sig_handler[32];
- static void CRT_installSignalHandlers(void) {
- struct sigaction act;
- sigemptyset(&act.sa_mask);
- act.sa_flags = (int)SA_RESETHAND | SA_NODEFER;
- act.sa_handler = CRT_handleSIGSEGV;
- sigaction(SIGSEGV, &act, &old_sig_handler[SIGSEGV]);
- sigaction(SIGFPE, &act, &old_sig_handler[SIGFPE]);
- sigaction(SIGILL, &act, &old_sig_handler[SIGILL]);
- sigaction(SIGBUS, &act, &old_sig_handler[SIGBUS]);
- sigaction(SIGPIPE, &act, &old_sig_handler[SIGPIPE]);
- sigaction(SIGSYS, &act, &old_sig_handler[SIGSYS]);
- sigaction(SIGABRT, &act, &old_sig_handler[SIGABRT]);
- signal(SIGCHLD, SIG_DFL);
- signal(SIGINT, CRT_handleSIGTERM);
- signal(SIGTERM, CRT_handleSIGTERM);
- signal(SIGQUIT, CRT_handleSIGTERM);
- signal(SIGUSR1, SIG_IGN);
- signal(SIGUSR2, SIG_IGN);
- }
- void CRT_resetSignalHandlers(void) {
- sigaction(SIGSEGV, &old_sig_handler[SIGSEGV], NULL);
- sigaction(SIGFPE, &old_sig_handler[SIGFPE], NULL);
- sigaction(SIGILL, &old_sig_handler[SIGILL], NULL);
- sigaction(SIGBUS, &old_sig_handler[SIGBUS], NULL);
- sigaction(SIGPIPE, &old_sig_handler[SIGPIPE], NULL);
- sigaction(SIGSYS, &old_sig_handler[SIGSYS], NULL);
- sigaction(SIGABRT, &old_sig_handler[SIGABRT], NULL);
- signal(SIGINT, SIG_DFL);
- signal(SIGTERM, SIG_DFL);
- signal(SIGQUIT, SIG_DFL);
- signal(SIGUSR1, SIG_DFL);
- signal(SIGUSR2, SIG_DFL);
- }
- #ifdef HAVE_GETMOUSE
- void CRT_setMouse(bool enabled) {
- if (enabled) {
- #if NCURSES_MOUSE_VERSION > 1
- mousemask(BUTTON1_RELEASED | BUTTON4_PRESSED | BUTTON5_PRESSED, NULL);
- #else
- mousemask(BUTTON1_RELEASED, NULL);
- #endif
- } else {
- mousemask(0, NULL);
- }
- }
- #endif
- static bool terminalSupportsDefinedKeys(const char* termType) {
- if (!termType) {
- return false;
- }
- switch (termType[0]) {
- case 'a':
- if (String_eq(termType, "alacritty")) {
- return true;
- }
- break;
- case 's':
- if (termType[1] == 't' && (termType[2] == '-' || !termType[2])) {
- return true;
- }
- if (String_eq(termType, "screen")) {
- return true;
- }
- break;
- case 't':
- if (String_eq(termType, "tmux")) {
- return true;
- }
- break;
- case 'v':
- if (String_eq(termType, "vt220")) {
- return true;
- }
- break;
- case 'x':
- if (String_eq(termType, "xterm")) {
- return true;
- }
- break;
- }
- return false;
- }
- void CRT_init(const Settings* settings, bool allowUnicode, bool retainScreenOnExit) {
- initscr();
- if (retainScreenOnExit) {
- CRT_retainScreenOnExit = true;
- refresh();
- tputs(exit_ca_mode, 0, putchar);
- tputs(clear_screen, 0, putchar);
- fflush(stdout);
- enter_ca_mode = 0;
- exit_ca_mode = 0;
- }
- redirectStderr();
- noecho();
- CRT_settings = settings;
- CRT_colors = CRT_colorSchemes[settings->colorScheme];
- CRT_colorScheme = settings->colorScheme;
- for (int i = 0; i < LAST_COLORELEMENT; i++) {
- unsigned int color = CRT_colorSchemes[COLORSCHEME_DEFAULT][i];
- CRT_colorSchemes[COLORSCHEME_BROKENGRAY][i] = color == (A_BOLD | ColorPairGrayBlack) ? ColorPair(White, Black) : color;
- }
- halfdelay(settings->delay);
- nonl();
- intrflush(stdscr, false);
- keypad(stdscr, true);
- #ifdef HAVE_GETMOUSE
- mouseinterval(0);
- #endif
- curs_set(0);
- if (has_colors()) {
- start_color();
- }
- const char* termType = getenv("TERM");
- if (termType && String_eq(termType, "linux")) {
- CRT_scrollHAmount = 20;
- } else {
- CRT_scrollHAmount = 5;
- }
- if (terminalSupportsDefinedKeys(termType)) {
- #ifdef HTOP_NETBSD
- #define define_key(s_, k_) define_key((char*)s_, k_)
- IGNORE_WCASTQUAL_BEGIN
- #endif
- define_key("\033[H", KEY_HOME);
- define_key("\033[F", KEY_END);
- define_key("\033[7~", KEY_HOME);
- define_key("\033[8~", KEY_END);
- 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("\033O2R", KEY_F(15));
- 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[14;2~", KEY_F(15));
- define_key("\033[17;2~", KEY_F(18));
- define_key("\033[Z", KEY_SHIFT_TAB);
- char sequence[3] = "\033a";
- for (char c = 'a'; c <= 'z'; c++) {
- sequence[1] = c;
- define_key(sequence, KEY_ALT('A' + (c - 'a')));
- }
- define_key("\033[I", KEY_FOCUS_IN);
- define_key("\033[O", KEY_FOCUS_OUT);
- #ifdef HTOP_NETBSD
- IGNORE_WCASTQUAL_END
- #undef define_key
- #endif
- }
- if (termType && (String_startsWith(termType, "rxvt"))) {
- define_key("\033[Z", KEY_SHIFT_TAB);
- }
- CRT_installSignalHandlers();
- use_default_colors();
- if (!has_colors())
- CRT_colorScheme = COLORSCHEME_MONOCHROME;
- CRT_setColors(CRT_colorScheme);
- #ifdef HAVE_LIBNCURSESW
- if (allowUnicode && String_eq(nl_langinfo(CODESET), "UTF-8")) {
- CRT_utf8 = true;
- } else {
- CRT_utf8 = false;
- }
- #else
- (void) allowUnicode;
- #endif
- CRT_treeStr =
- #ifdef HAVE_LIBNCURSESW
- CRT_utf8 ? CRT_treeStrUtf8 :
- #endif
- CRT_treeStrAscii;
- CRT_setMouse(settings->enableMouse);
- CRT_degreeSign = initDegreeSign();
- }
- void CRT_done(void) {
- int resetColor = CRT_colors ? CRT_colors[RESET_COLOR] : CRT_colorSchemes[COLORSCHEME_DEFAULT][RESET_COLOR];
- attron(resetColor);
- mvhline(LINES - 1, 0, ' ', COLS);
- attroff(resetColor);
- refresh();
- if (CRT_retainScreenOnExit) {
- mvcur(-1, -1, LINES - 1, 0);
- }
- curs_set(1);
- endwin();
- dumpStderr();
- }
- void CRT_fatalError(const char* note) {
- const char* sysMsg = strerror(errno);
- CRT_done();
- fprintf(stderr, "%s: %s\n", note, sysMsg);
- exit(2);
- }
- int CRT_readKey(void) {
- nocbreak();
- cbreak();
- nodelay(stdscr, FALSE);
- int ret = getch();
- halfdelay(CRT_settings->delay);
- return ret;
- }
- void CRT_disableDelay(void) {
- nocbreak();
- cbreak();
- nodelay(stdscr, TRUE);
- }
- void CRT_enableDelay(void) {
- halfdelay(CRT_settings->delay);
- }
- void CRT_setColors(int colorScheme) {
- CRT_colorScheme = colorScheme;
- for (short int i = 0; i < 8; i++) {
- for (short int j = 0; j < 8; j++) {
- if (ColorIndex(i, j) != ColorIndexGrayBlack && ColorIndex(i, j) != ColorIndexWhiteDefault) {
- short int bg = (colorScheme != COLORSCHEME_BLACKNIGHT) && (j == 0) ? -1 : j;
- init_pair(ColorIndex(i, j), i, bg);
- }
- }
- }
- short int grayBlackFg = COLORS > 8 ? 8 : 0;
- short int grayBlackBg = (colorScheme != COLORSCHEME_BLACKNIGHT) ? -1 : 0;
- init_pair(ColorIndexGrayBlack, grayBlackFg, grayBlackBg);
- init_pair(ColorIndexWhiteDefault, White, -1);
- CRT_colors = CRT_colorSchemes[colorScheme];
- }
- #ifdef PRINT_BACKTRACE
- static void print_backtrace(void) {
- #if defined(HAVE_LIBUNWIND_H) && defined(HAVE_LIBUNWIND)
- unw_context_t context;
- unw_getcontext(&context);
- unw_cursor_t cursor;
- unw_init_local(&cursor, &context);
- unsigned int item = 0;
- char err_buf[1024];
- while (unw_step(&cursor) > 0) {
- unw_word_t pc;
- unw_get_reg(&cursor, UNW_REG_IP, &pc);
- if (pc == 0)
- break;
- char symbolName[256] = "?";
- unw_word_t offset = 0;
- unw_get_proc_name(&cursor, symbolName, sizeof(symbolName), &offset);
- unw_proc_info_t pip;
- pip.unwind_info = 0;
- const char* fname = "?";
- const void* ptr = 0;
- if (unw_get_proc_info(&cursor, &pip) == 0) {
- ptr = (const void*)(pip.start_ip + offset);
- #ifdef HAVE_DLADDR
- Dl_info dlinfo;
- if (dladdr(ptr, &dlinfo) && dlinfo.dli_fname && *dlinfo.dli_fname)
- fname = dlinfo.dli_fname;
- #endif
- }
- const bool is_signal_frame = unw_is_signal_frame(&cursor) > 0;
- const char* frame = is_signal_frame ? " {signal frame}" : "";
- snprintf(err_buf, sizeof(err_buf), "%2u: %#14lx %s (%s+%#lx) [%p]%s\n", item++, pc, fname, symbolName, offset, ptr, frame);
- full_write_str(STDERR_FILENO, err_buf);
- }
- #elif defined(HAVE_EXECINFO_H)
- void* backtraceArray[256];
- int nptrs = backtrace(backtraceArray, ARRAYSIZE(backtraceArray));
- if (nptrs > 0) {
- backtrace_symbols_fd(backtraceArray, nptrs, STDERR_FILENO);
- } else {
- full_write_str(STDERR_FILENO,
- "[No backtrace information available from libc]\n"
- );
- }
- #else
- #error No implementation for print_backtrace()!
- #endif
- }
- #endif
- void CRT_handleSIGSEGV(int signal) {
- CRT_done();
- char err_buf[512];
- snprintf(err_buf, sizeof(err_buf), "\n\n"
- "FATAL PROGRAM ERROR DETECTED\n"
- "============================\n"
- "Please check at https://htop.dev/issues whether this issue has already been reported.\n"
- "If no similar issue has been reported before, please create a new issue with the following information:\n"
- " - Your %s version: '"VERSION"'\n"
- " - Your OS and kernel version (uname -a)\n"
- " - Your distribution and release (lsb_release -a)\n"
- " - Likely steps to reproduce (How did it happen?)\n",
- program
- );
- full_write_str(STDERR_FILENO, err_buf);
- #ifdef PRINT_BACKTRACE
- full_write_str(STDERR_FILENO, " - Backtrace of the issue (see below)\n");
- #endif
- full_write_str(STDERR_FILENO,
- "\n"
- );
- const char* signal_str = strsignal(signal);
- if (!signal_str) {
- signal_str = "unknown reason";
- }
- snprintf(err_buf, sizeof(err_buf),
- "Error information:\n"
- "------------------\n"
- "A signal %d (%s) was received.\n"
- "\n",
- signal, signal_str
- );
- full_write_str(STDERR_FILENO, err_buf);
- full_write_str(STDERR_FILENO,
- "Setting information:\n"
- "--------------------\n");
- Settings_write(CRT_settings, true);
- full_write_str(STDERR_FILENO, "\n\n");
- #ifdef PRINT_BACKTRACE
- full_write_str(STDERR_FILENO,
- "Backtrace information:\n"
- "----------------------\n"
- );
- print_backtrace();
- snprintf(err_buf, sizeof(err_buf),
- "\n"
- "To make the above information more practical to work with, "
- "please also provide a disassembly of your %s binary. "
- "This can usually be done by running the following command:\n"
- "\n",
- program
- );
- full_write_str(STDERR_FILENO, err_buf);
- #ifdef HTOP_DARWIN
- snprintf(err_buf, sizeof(err_buf), " otool -tvV `which %s` > ~/%s.otool\n", program, program);
- #else
- snprintf(err_buf, sizeof(err_buf), " objdump -d -S -w `which %s` > ~/%s.objdump\n", program, program);
- #endif
- full_write_str(STDERR_FILENO, err_buf);
- full_write_str(STDERR_FILENO,
- "\n"
- "Please include the generated file in your report.\n"
- );
- #endif
- snprintf(err_buf, sizeof(err_buf),
- "Running this program with debug symbols or inside a debugger may provide further insights.\n"
- "\n"
- "Thank you for helping to improve %s!\n"
- "\n",
- program
- );
- full_write_str(STDERR_FILENO, err_buf);
- /* Call old sigsegv handler; may be default exit or third party one (e.g. ASAN) */
- if (sigaction(signal, &old_sig_handler[signal], NULL) < 0) {
- /* This avoids an infinite loop in case the handler could not be reset. */
- full_write_str(STDERR_FILENO,
- "!!! Chained handler could not be restored. Forcing exit.\n"
- );
- _exit(1);
- }
- /* Trigger the previous signal handler. */
- raise(signal);
- // Always terminate, even if installed handler returns
- full_write_str(STDERR_FILENO,
- "!!! Chained handler did not exit. Forcing exit.\n"
- );
- _exit(1);
- }
|