aboutsummaryrefslogtreecommitdiffstats
path: root/Meter.h
diff options
context:
space:
mode:
authorDaniel Lange <DLange@git.local>2020-12-07 10:26:01 +0100
committerDaniel Lange <DLange@git.local>2020-12-07 10:26:01 +0100
commit65357c8c46154de4e4eca14075bfe5523bb5fc14 (patch)
tree8f430ee5a0d5de377c4e7c94e47842a27c70d7e8 /Meter.h
parentf80394a20254938142011855f2954b3f63fe5909 (diff)
downloaddebian_htop-65357c8c46154de4e4eca14075bfe5523bb5fc14.tar.gz
debian_htop-65357c8c46154de4e4eca14075bfe5523bb5fc14.tar.bz2
debian_htop-65357c8c46154de4e4eca14075bfe5523bb5fc14.zip
New upstream version 3.0.3upstream/3.0.3
Diffstat (limited to 'Meter.h')
-rw-r--r--Meter.h85
1 files changed, 57 insertions, 28 deletions
diff --git a/Meter.h b/Meter.h
index c4d0039..cb05405 100644
--- a/Meter.h
+++ b/Meter.h
@@ -3,25 +3,57 @@
/*
htop - Meter.h
(C) 2004-2011 Hisham H. Muhammad
-Released under the GNU GPL, see the COPYING file
+Released under the GNU GPLv2, see the COPYING file
in the source distribution for its full text.
*/
-#include "ListItem.h"
+#include "config.h" // IWYU pragma: keep
+
+#include <stdbool.h>
+#include <stdint.h>
#include <sys/time.h>
+#include "ListItem.h"
+#include "Object.h"
+#include "ProcessList.h"
+
+
#define METER_BUFFER_LEN 256
+#define METER_BUFFER_CHECK(buffer, size, written) \
+ do { \
+ if ((written) < 0 || (size_t)(written) >= (size)) { \
+ return; \
+ } \
+ (buffer) += (written); \
+ (size) -= (size_t)(written); \
+ } while (0)
+
+#define METER_BUFFER_APPEND_CHR(buffer, size, c) \
+ do { \
+ if ((size) < 2) { \
+ return; \
+ } \
+ *(buffer)++ = c; \
+ *(buffer) = '\0'; \
+ (size)--; \
+ if ((size) == 0) { \
+ return; \
+ } \
+ } while (0)
+
+
+struct Meter_;
typedef struct Meter_ Meter;
typedef void(*Meter_Init)(Meter*);
typedef void(*Meter_Done)(Meter*);
typedef void(*Meter_UpdateMode)(Meter*, int);
-typedef void(*Meter_UpdateValues)(Meter*, char*, int);
+typedef void(*Meter_UpdateValues)(Meter*, char*, size_t);
typedef void(*Meter_Draw)(Meter*, int, int, int);
typedef struct MeterClass_ {
- ObjectClass super;
+ const ObjectClass super;
const Meter_Init init;
const Meter_Done done;
const Meter_UpdateMode updateMode;
@@ -29,16 +61,15 @@ typedef struct MeterClass_ {
const Meter_UpdateValues updateValues;
const int defaultMode;
const double total;
- const int* attributes;
- const char* name;
- const char* uiName;
- const char* caption;
- const char* description;
- const char maxItems;
- char curItems;
+ const int* const attributes;
+ const char* const name; /* internal name of the meter, must not contain any space */
+ const char* const uiName; /* display name in header setup menu */
+ const char* const caption; /* prefix in the actual header */
+ const char* const description; /* optional meter description in header setup menu */
+ const uint8_t maxItems;
} MeterClass;
-#define As_Meter(this_) ((MeterClass*)((this_)->super.klass))
+#define As_Meter(this_) ((const MeterClass*)((this_)->super.klass))
#define Meter_initFn(this_) As_Meter(this_)->init
#define Meter_init(this_) As_Meter(this_)->init((Meter*)(this_))
#define Meter_done(this_) As_Meter(this_)->done((Meter*)(this_))
@@ -49,12 +80,15 @@ typedef struct MeterClass_ {
#define Meter_updateValues(this_, buf_, sz_) \
As_Meter(this_)->updateValues((Meter*)(this_), buf_, sz_)
#define Meter_defaultMode(this_) As_Meter(this_)->defaultMode
-#define Meter_getItems(this_) As_Meter(this_)->curItems
-#define Meter_setItems(this_, n_) As_Meter(this_)->curItems = (n_)
#define Meter_attributes(this_) As_Meter(this_)->attributes
#define Meter_name(this_) As_Meter(this_)->name
#define Meter_uiName(this_) As_Meter(this_)->uiName
+typedef struct GraphData_ {
+ struct timeval time;
+ double values[METER_BUFFER_LEN];
+} GraphData;
+
struct Meter_ {
Object super;
Meter_Draw draw;
@@ -62,11 +96,13 @@ struct Meter_ {
char* caption;
int mode;
int param;
- void* drawData;
+ GraphData* drawData;
int h;
- struct ProcessList_* pl;
+ const ProcessList* pl;
+ uint8_t curItems;
double* values;
double total;
+ void* meterData;
};
typedef struct MeterMode_ {
@@ -84,16 +120,11 @@ typedef enum {
LAST_METERMODE
} MeterModeId;
-typedef struct GraphData_ {
- struct timeval time;
- double values[METER_BUFFER_LEN];
-} GraphData;
-
-extern MeterClass Meter_class;
+extern const MeterClass Meter_class;
-Meter* Meter_new(struct ProcessList_* pl, int param, MeterClass* type);
+Meter* Meter_new(const ProcessList* pl, int param, const MeterClass* type);
-int Meter_humanUnit(char* buffer, unsigned long int value, int size);
+int Meter_humanUnit(char* buffer, unsigned long int value, size_t size);
void Meter_delete(Object* cast);
@@ -103,10 +134,8 @@ void Meter_setMode(Meter* this, int modeIndex);
ListItem* Meter_toListItem(Meter* this, bool moving);
-extern MeterMode* Meter_modes[];
-
-extern int BlankMeter_attributes[];
+extern const MeterMode* const Meter_modes[];
-extern MeterClass BlankMeter_class;
+extern const MeterClass BlankMeter_class;
#endif

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