diff --git a/CRT.c b/CRT.c index 6ddd8d91..60eeea11 100644 --- a/CRT.c +++ b/CRT.c @@ -123,6 +123,8 @@ int CRT_colors[LAST_COLORELEMENT] = { 0 }; int CRT_cursorX = 0; +int CRT_scrollHAmount = 5; + char* CRT_termType; void *backtraceArray[128]; @@ -173,6 +175,10 @@ void CRT_init(int delay, int colorScheme) { CRT_hasColors = false; } CRT_termType = getenv("TERM"); + if (String_eq(CRT_termType, "linux")) + CRT_scrollHAmount = 20; + else + CRT_scrollHAmount = 5; if (String_eq(CRT_termType, "xterm") || String_eq(CRT_termType, "xterm-color") || String_eq(CRT_termType, "vt220")) { define_key("\033[H", KEY_HOME); define_key("\033[F", KEY_END); diff --git a/CRT.h b/CRT.h index f7d4d723..00141b55 100644 --- a/CRT.h +++ b/CRT.h @@ -109,6 +109,8 @@ extern int CRT_colors[LAST_COLORELEMENT]; extern int CRT_cursorX; +extern int CRT_scrollHAmount; + char* CRT_termType; void *backtraceArray[128]; diff --git a/CheckItem.c b/CheckItem.c index 8c05e38e..ea83e6f3 100644 --- a/CheckItem.c +++ b/CheckItem.c @@ -18,8 +18,8 @@ in the source distribution for its full text. typedef struct CheckItem_ { Object super; char* text; - bool value; bool* ref; + bool value; } CheckItem; }*/ diff --git a/CheckItem.h b/CheckItem.h index 98ed17a1..86d4aa5b 100644 --- a/CheckItem.h +++ b/CheckItem.h @@ -14,8 +14,8 @@ in the source distribution for its full text. typedef struct CheckItem_ { Object super; char* text; - bool value; bool* ref; + bool value; } CheckItem; diff --git a/Header.c b/Header.c index 85a6aeee..571621ea 100644 --- a/Header.c +++ b/Header.c @@ -37,9 +37,9 @@ typedef struct Header_ { Vector* leftMeters; Vector* rightMeters; ProcessList* pl; - bool margin; int height; int pad; + bool margin; } Header; }*/ diff --git a/Header.h b/Header.h index 27187f3f..e7784598 100644 --- a/Header.h +++ b/Header.h @@ -21,9 +21,9 @@ typedef struct Header_ { Vector* leftMeters; Vector* rightMeters; ProcessList* pl; - bool margin; int height; int pad; + bool margin; } Header; diff --git a/Meter.c b/Meter.c index cc2ac4a1..14abd95a 100644 --- a/Meter.c +++ b/Meter.c @@ -143,6 +143,7 @@ MeterClass* Meter_types[] = { &RightCPUsMeter_class, &LeftCPUs2Meter_class, &RightCPUs2Meter_class, + &BlankMeter_class, NULL }; @@ -470,3 +471,33 @@ MeterMode* Meter_modes[] = { &LEDMeterMode, NULL }; + +/* Blank meter */ + +static void BlankMeter_setValues(Meter* this, char* buffer, int size) { + (void) this; (void) buffer; (void) size; +} + +static void BlankMeter_display(Object* cast, RichString* out) { + (void) cast; + RichString_prune(out); +} + +int BlankMeter_attributes[] = { + DEFAULT_COLOR +}; + +MeterClass BlankMeter_class = { + .super = { + .extends = Class(Meter), + .delete = Meter_delete, + .display = BlankMeter_display, + }, + .setValues = BlankMeter_setValues, + .defaultMode = TEXT_METERMODE, + .total = 100.0, + .attributes = BlankMeter_attributes, + .name = "Blank", + .uiName = "Blank", + .caption = "" +}; diff --git a/Meter.h b/Meter.h index a5c30b1e..2f58b8fc 100644 --- a/Meter.h +++ b/Meter.h @@ -123,4 +123,10 @@ ListItem* Meter_toListItem(Meter* this); extern MeterMode* Meter_modes[]; +/* Blank meter */ + +extern int BlankMeter_attributes[]; + +extern MeterClass BlankMeter_class; + #endif diff --git a/OpenFilesScreen.c b/OpenFilesScreen.c index ae511c83..94e2c70e 100644 --- a/OpenFilesScreen.c +++ b/OpenFilesScreen.c @@ -29,9 +29,9 @@ in the source distribution for its full text. #include "FunctionBar.h" typedef struct OpenFiles_ProcessData_ { - char* data[256]; struct OpenFiles_FileData_* files; int error; + char* data[256]; } OpenFiles_ProcessData; typedef struct OpenFiles_FileData_ { diff --git a/OpenFilesScreen.h b/OpenFilesScreen.h index ce15ea34..2956dfda 100644 --- a/OpenFilesScreen.h +++ b/OpenFilesScreen.h @@ -14,9 +14,9 @@ in the source distribution for its full text. #include "FunctionBar.h" typedef struct OpenFiles_ProcessData_ { - char* data[256]; struct OpenFiles_FileData_* files; int error; + char* data[256]; } OpenFiles_ProcessData; typedef struct OpenFiles_FileData_ { diff --git a/Panel.c b/Panel.c index 70e84e20..26b11908 100644 --- a/Panel.c +++ b/Panel.c @@ -53,12 +53,12 @@ struct Panel_ { WINDOW* window; Vector* items; int selected; - int scrollV, scrollH; - int scrollHAmount; int oldSelected; + char* eventHandlerBuffer; + int scrollV; + short scrollH; bool needsRedraw; RichString header; - char* eventHandlerBuffer; }; }*/ @@ -110,10 +110,6 @@ void Panel_init(Panel* this, int x, int y, int w, int h, ObjectClass* type, bool this->oldSelected = 0; this->needsRedraw = true; RichString_beginAllocated(this->header); - if (String_eq(CRT_termType, "linux")) - this->scrollHAmount = 20; - else - this->scrollHAmount = 5; } void Panel_done(Panel* this) { @@ -299,18 +295,16 @@ void Panel_draw(Panel* this, bool focus) { Object_display(itemObj, &item); int itemLen = RichString_sizeVal(item); int amt = MIN(itemLen - scrollH, this->w); - if (i == this->selected) { + bool selected = (i == this->selected); + if (selected) { attrset(highlight); RichString_setAttr(&item, highlight); - mvhline(y + j, x+0, ' ', this->w); - if (amt > 0) - RichString_printoffnVal(item, y+j, x+0, scrollH, amt); - attrset(CRT_colors[RESET_COLOR]); - } else { - mvhline(y+j, x+0, ' ', this->w); - if (amt > 0) - RichString_printoffnVal(item, y+j, x+0, scrollH, amt); } + mvhline(y + j, x, ' ', this->w); + if (amt > 0) + RichString_printoffnVal(item, y+j, x, scrollH, amt); + if (selected) + attrset(CRT_colors[RESET_COLOR]); RichString_end(item); } for (int i = y + (last - first); i < y + this->h; i++) @@ -330,13 +324,13 @@ void Panel_draw(Panel* this, bool focus) { mvhline(y+ this->oldSelected - this->scrollV, x+0, ' ', this->w); if (scrollH < oldLen) RichString_printoffnVal(old, y+this->oldSelected - this->scrollV, x, - this->scrollH, MIN(oldLen - scrollH, this->w)); + scrollH, MIN(oldLen - scrollH, this->w)); attrset(highlight); mvhline(y+this->selected - this->scrollV, x+0, ' ', this->w); RichString_setAttr(&new, highlight); if (scrollH < newLen) RichString_printoffnVal(new, y+this->selected - this->scrollV, x, - this->scrollH, MIN(newLen - scrollH, this->w)); + scrollH, MIN(newLen - scrollH, this->w)); attrset(CRT_colors[RESET_COLOR]); RichString_end(new); RichString_end(old); @@ -383,13 +377,13 @@ bool Panel_onKey(Panel* this, int key) { case KEY_LEFT: case KEY_CTRLB: if (this->scrollH > 0) { - this->scrollH -= 5; + this->scrollH -= CRT_scrollHAmount; this->needsRedraw = true; } return true; case KEY_RIGHT: case KEY_CTRLF: - this->scrollH += 5; + this->scrollH += CRT_scrollHAmount; this->needsRedraw = true; return true; case KEY_PPAGE: diff --git a/Panel.h b/Panel.h index 16f0c2fe..91c0a40c 100644 --- a/Panel.h +++ b/Panel.h @@ -42,12 +42,12 @@ struct Panel_ { WINDOW* window; Vector* items; int selected; - int scrollV, scrollH; - int scrollHAmount; int oldSelected; + char* eventHandlerBuffer; + int scrollV; + short scrollH; bool needsRedraw; RichString header; - char* eventHandlerBuffer; }; diff --git a/Process.c b/Process.c index f154657a..6568bba0 100644 --- a/Process.c +++ b/Process.c @@ -94,7 +94,6 @@ typedef struct Process_ { Object super; struct ProcessList_ *pl; - bool updated; pid_t pid; char* comm; @@ -110,12 +109,12 @@ typedef struct Process_ { pid_t tgid; int tpgid; unsigned long int flags; - #ifdef DEBUG - unsigned long int minflt; - unsigned long int cminflt; - unsigned long int majflt; - unsigned long int cmajflt; - #endif + + uid_t st_uid; + float percent_cpu; + float percent_mem; + char* user; + unsigned long long int utime; unsigned long long int stime; unsigned long long int cutime; @@ -126,7 +125,53 @@ typedef struct Process_ { IOPriority ioPriority; char starttime_show[8]; time_t starttime_ctime; + + #ifdef HAVE_TASKSTATS + unsigned long long io_rchar; + unsigned long long io_wchar; + unsigned long long io_syscr; + unsigned long long io_syscw; + unsigned long long io_read_bytes; + unsigned long long io_write_bytes; + unsigned long long io_cancelled_write_bytes; + double io_rate_read_bps; + unsigned long long io_rate_read_time; + double io_rate_write_bps; + unsigned long long io_rate_write_time; + #endif + + int processor; + int m_size; + int m_resident; + int m_share; + int m_trs; + int m_drs; + int m_lrs; + int m_dt; + + #ifdef HAVE_OPENVZ + unsigned int ctid; + unsigned int vpid; + #endif + #ifdef HAVE_VSERVER + unsigned int vxid; + #endif + + #ifdef HAVE_CGROUP + char* cgroup; + #endif + #ifdef HAVE_OOM + unsigned int oom; + #endif + + int exit_signal; + bool updated; + #ifdef DEBUG + unsigned long int minflt; + unsigned long int cminflt; + unsigned long int majflt; + unsigned long int cmajflt; long int itrealvalue; unsigned long int vsize; long int rss; @@ -144,45 +189,7 @@ typedef struct Process_ { unsigned long int nswap; unsigned long int cnswap; #endif - int exit_signal; - int processor; - int m_size; - int m_resident; - int m_share; - int m_trs; - int m_drs; - int m_lrs; - int m_dt; - uid_t st_uid; - float percent_cpu; - float percent_mem; - char* user; - #ifdef HAVE_OPENVZ - unsigned int ctid; - unsigned int vpid; - #endif - #ifdef HAVE_VSERVER - unsigned int vxid; - #endif - #ifdef HAVE_TASKSTATS - unsigned long long io_rchar; - unsigned long long io_wchar; - unsigned long long io_syscr; - unsigned long long io_syscw; - unsigned long long io_read_bytes; - unsigned long long io_write_bytes; - unsigned long long io_cancelled_write_bytes; - double io_rate_read_bps; - unsigned long long io_rate_read_time; - double io_rate_write_bps; - unsigned long long io_rate_write_time; - #endif - #ifdef HAVE_CGROUP - char* cgroup; - #endif - #ifdef HAVE_OOM - unsigned int oom; - #endif + } Process; }*/ diff --git a/Process.h b/Process.h index d1a39e41..626f1a87 100644 --- a/Process.h +++ b/Process.h @@ -73,7 +73,6 @@ typedef struct Process_ { Object super; struct ProcessList_ *pl; - bool updated; pid_t pid; char* comm; @@ -89,12 +88,12 @@ typedef struct Process_ { pid_t tgid; int tpgid; unsigned long int flags; - #ifdef DEBUG - unsigned long int minflt; - unsigned long int cminflt; - unsigned long int majflt; - unsigned long int cmajflt; - #endif + + uid_t st_uid; + float percent_cpu; + float percent_mem; + char* user; + unsigned long long int utime; unsigned long long int stime; unsigned long long int cutime; @@ -105,7 +104,53 @@ typedef struct Process_ { IOPriority ioPriority; char starttime_show[8]; time_t starttime_ctime; + + #ifdef HAVE_TASKSTATS + unsigned long long io_rchar; + unsigned long long io_wchar; + unsigned long long io_syscr; + unsigned long long io_syscw; + unsigned long long io_read_bytes; + unsigned long long io_write_bytes; + unsigned long long io_cancelled_write_bytes; + double io_rate_read_bps; + unsigned long long io_rate_read_time; + double io_rate_write_bps; + unsigned long long io_rate_write_time; + #endif + + int processor; + int m_size; + int m_resident; + int m_share; + int m_trs; + int m_drs; + int m_lrs; + int m_dt; + + #ifdef HAVE_OPENVZ + unsigned int ctid; + unsigned int vpid; + #endif + #ifdef HAVE_VSERVER + unsigned int vxid; + #endif + + #ifdef HAVE_CGROUP + char* cgroup; + #endif + #ifdef HAVE_OOM + unsigned int oom; + #endif + + int exit_signal; + bool updated; + #ifdef DEBUG + unsigned long int minflt; + unsigned long int cminflt; + unsigned long int majflt; + unsigned long int cmajflt; long int itrealvalue; unsigned long int vsize; long int rss; @@ -123,45 +168,7 @@ typedef struct Process_ { unsigned long int nswap; unsigned long int cnswap; #endif - int exit_signal; - int processor; - int m_size; - int m_resident; - int m_share; - int m_trs; - int m_drs; - int m_lrs; - int m_dt; - uid_t st_uid; - float percent_cpu; - float percent_mem; - char* user; - #ifdef HAVE_OPENVZ - unsigned int ctid; - unsigned int vpid; - #endif - #ifdef HAVE_VSERVER - unsigned int vxid; - #endif - #ifdef HAVE_TASKSTATS - unsigned long long io_rchar; - unsigned long long io_wchar; - unsigned long long io_syscr; - unsigned long long io_syscw; - unsigned long long io_read_bytes; - unsigned long long io_write_bytes; - unsigned long long io_cancelled_write_bytes; - double io_rate_read_bps; - unsigned long long io_rate_read_time; - double io_rate_write_bps; - unsigned long long io_rate_write_time; - #endif - #ifdef HAVE_CGROUP - char* cgroup; - #endif - #ifdef HAVE_OOM - unsigned int oom; - #endif + } Process; @@ -178,6 +185,9 @@ void Process_getMaxPid(); #define ONE_M (ONE_K * ONE_K) #define ONE_G (ONE_M * ONE_K) +#define ONE_DECIMAL_K 1000 +#define ONE_DECIMAL_M (ONE_DECIMAL_K * ONE_DECIMAL_K) + void Process_delete(Object* cast); extern ObjectClass Process_class; diff --git a/ProcessList.c b/ProcessList.c index a5b9568b..4676a264 100644 --- a/ProcessList.c +++ b/ProcessList.c @@ -99,6 +99,7 @@ typedef struct CPUData_ { } CPUData; typedef struct ProcessList_ { + const char **treeStr; Vector* processes; Vector* processes2; Hashtable* processTable; @@ -106,7 +107,6 @@ typedef struct ProcessList_ { Panel* panel; int following; - bool userOnly; uid_t userId; const char* incFilter; Hashtable* pidWhiteList; @@ -151,7 +151,7 @@ typedef struct ProcessList_ { bool countCPUsFromZero; bool updateProcessNames; bool accountGuestInCPUMeter; - const char **treeStr; + bool userOnly; } ProcessList; diff --git a/ProcessList.h b/ProcessList.h index 437c57f4..1f3549ae 100644 --- a/ProcessList.h +++ b/ProcessList.h @@ -79,6 +79,7 @@ typedef struct CPUData_ { } CPUData; typedef struct ProcessList_ { + const char **treeStr; Vector* processes; Vector* processes2; Hashtable* processTable; @@ -86,7 +87,6 @@ typedef struct ProcessList_ { Panel* panel; int following; - bool userOnly; uid_t userId; const char* incFilter; Hashtable* pidWhiteList; @@ -131,7 +131,7 @@ typedef struct ProcessList_ { bool countCPUsFromZero; bool updateProcessNames; bool accountGuestInCPUMeter; - const char **treeStr; + bool userOnly; } ProcessList; diff --git a/RichString.c b/RichString.c index 5b79d8cd..34720c1b 100644 --- a/RichString.c +++ b/RichString.c @@ -154,6 +154,7 @@ void RichString_prune(RichString* this) { free(this->chptr); this->chptr = this->chstr; this->chlen = 0; + RichString_setChar(this, 0, 0); } void RichString_setAttr(RichString* this, int attrs) { diff --git a/Settings.c b/Settings.c index 0a85d584..133a3909 100644 --- a/Settings.c +++ b/Settings.c @@ -27,8 +27,8 @@ typedef struct Settings_ { ProcessList* pl; Header* header; int colorScheme; - bool changed; int delay; + bool changed; } Settings; }*/ diff --git a/Settings.h b/Settings.h index af542229..28fe5520 100644 --- a/Settings.h +++ b/Settings.h @@ -20,8 +20,8 @@ typedef struct Settings_ { ProcessList* pl; Header* header; int colorScheme; - bool changed; int delay; + bool changed; } Settings;