aboutsummaryrefslogtreecommitdiffstats
path: root/RichString.c
diff options
context:
space:
mode:
authorDaniel Lange <DLange@git.local>2021-01-11 20:43:27 +0100
committerDaniel Lange <DLange@git.local>2021-01-11 20:43:27 +0100
commitc55320e9e2a8916e911bcd39ab37b79e3a7d03b2 (patch)
treed6be9a09fdf7d6dc155de3429a70697ee2bb43b0 /RichString.c
parent65357c8c46154de4e4eca14075bfe5523bb5fc14 (diff)
downloaddebian_htop-c55320e9e2a8916e911bcd39ab37b79e3a7d03b2.tar.gz
debian_htop-c55320e9e2a8916e911bcd39ab37b79e3a7d03b2.tar.bz2
debian_htop-c55320e9e2a8916e911bcd39ab37b79e3a7d03b2.zip
New upstream version 3.0.5upstream/3.0.5
Diffstat (limited to 'RichString.c')
-rw-r--r--RichString.c73
1 files changed, 50 insertions, 23 deletions
diff --git a/RichString.c b/RichString.c
index 790c15a..0130580 100644
--- a/RichString.c
+++ b/RichString.c
@@ -7,6 +7,7 @@ in the source distribution for its full text.
#include "RichString.h"
+#include <ctype.h>
#include <stdlib.h>
#include <string.h>
@@ -47,25 +48,35 @@ static void RichString_setLen(RichString* this, int len) {
#ifdef HAVE_LIBNCURSESW
-static inline void RichString_writeFrom(RichString* this, int attrs, const char* data_c, int from, int len) {
+static inline int RichString_writeFromWide(RichString* this, int attrs, const char* data_c, int from, int len) {
wchar_t data[len + 1];
len = mbstowcs(data, data_c, len);
- if (len < 0)
- return;
+ if (len <= 0)
+ return 0;
int newLen = from + len;
RichString_setLen(this, newLen);
for (int i = from, j = 0; i < newLen; i++, j++) {
this->chptr[i] = (CharType) { .attr = attrs & 0xffffff, .chars = { (iswprint(data[j]) ? data[j] : '?') } };
}
+
+ return wcswidth(data, len);
}
-inline void RichString_setAttrn(RichString* this, int attrs, int start, int finish) {
- cchar_t* ch = this->chptr + start;
- finish = CLAMP(finish, 0, this->chlen - 1);
- for (int i = start; i <= finish; i++) {
- ch->attr = attrs;
- ch++;
+static inline int RichString_writeFromAscii(RichString* this, int attrs, const char* data, int from, int len) {
+ int newLen = from + len;
+ RichString_setLen(this, newLen);
+ for (int i = from, j = 0; i < newLen; i++, j++) {
+ this->chptr[i] = (CharType) { .attr = attrs & 0xffffff, .chars = { (isprint(data[j]) ? data[j] : '?') } };
+ }
+
+ return len;
+}
+
+inline void RichString_setAttrn(RichString* this, int attrs, int start, int charcount) {
+ int end = CLAMP(start + charcount, 0, this->chlen);
+ for (int i = start; i < end; i++) {
+ this->chptr[i].attr = attrs;
}
}
@@ -82,21 +93,25 @@ int RichString_findChar(RichString* this, char c, int start) {
#else /* HAVE_LIBNCURSESW */
-static inline void RichString_writeFrom(RichString* this, int attrs, const char* data_c, int from, int len) {
+static inline int RichString_writeFromWide(RichString* this, int attrs, const char* data_c, int from, int len) {
int newLen = from + len;
RichString_setLen(this, newLen);
for (int i = from, j = 0; i < newLen; i++, j++) {
this->chptr[i] = (((unsigned char)data_c[j]) >= 32 ? ((unsigned char)data_c[j]) : '?') | attrs;
}
this->chptr[newLen] = 0;
+
+ return len;
}
-void RichString_setAttrn(RichString* this, int attrs, int start, int finish) {
- chtype* ch = this->chptr + start;
- finish = CLAMP(finish, 0, this->chlen - 1);
- for (int i = start; i <= finish; i++) {
- *ch = (*ch & 0xff) | attrs;
- ch++;
+static inline int RichString_writeFromAscii(RichString* this, int attrs, const char* data_c, int from, int len) {
+ return RichString_writeFromWide(this, attrs, data_c, from, len);
+}
+
+void RichString_setAttrn(RichString* this, int attrs, int start, int charcount) {
+ int end = CLAMP(start + charcount, 0, this->chlen);
+ for (int i = start; i < end; i++) {
+ this->chptr[i] = (this->chptr[i] & 0xff) | attrs;
}
}
@@ -129,17 +144,29 @@ void RichString_appendChr(RichString* this, char c, int count) {
}
void RichString_setAttr(RichString* this, int attrs) {
- RichString_setAttrn(this, attrs, 0, this->chlen - 1);
+ RichString_setAttrn(this, attrs, 0, this->chlen);
+}
+
+int RichString_appendWide(RichString* this, int attrs, const char* data) {
+ return RichString_writeFromWide(this, attrs, data, this->chlen, strlen(data));
+}
+
+int RichString_appendnWide(RichString* this, int attrs, const char* data, int len) {
+ return RichString_writeFromWide(this, attrs, data, this->chlen, len);
+}
+
+int RichString_writeWide(RichString* this, int attrs, const char* data) {
+ return RichString_writeFromWide(this, attrs, data, 0, strlen(data));
}
-void RichString_append(RichString* this, int attrs, const char* data) {
- RichString_writeFrom(this, attrs, data, this->chlen, strlen(data));
+int RichString_appendAscii(RichString* this, int attrs, const char* data) {
+ return RichString_writeFromAscii(this, attrs, data, this->chlen, strlen(data));
}
-void RichString_appendn(RichString* this, int attrs, const char* data, int len) {
- RichString_writeFrom(this, attrs, data, this->chlen, len);
+int RichString_appendnAscii(RichString* this, int attrs, const char* data, int len) {
+ return RichString_writeFromAscii(this, attrs, data, this->chlen, len);
}
-void RichString_write(RichString* this, int attrs, const char* data) {
- RichString_writeFrom(this, attrs, data, 0, strlen(data));
+int RichString_writeAscii(RichString* this, int attrs, const char* data) {
+ return RichString_writeFromAscii(this, attrs, data, 0, strlen(data));
}

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