summaryrefslogtreecommitdiffstats
path: root/RichString.c
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2006-03-04 18:16:49 +0000
committerHisham Muhammad <hisham@gobolinux.org>2006-03-04 18:16:49 +0000
commitd6231bab89d634da5564491196b7c478db038505 (patch)
treebfc0bf00b138763eb41132fd27a8f389a78bf3a4 /RichString.c
Initial import.
Diffstat (limited to 'RichString.c')
-rw-r--r--RichString.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/RichString.c b/RichString.c
new file mode 100644
index 00000000..7a92e081
--- /dev/null
+++ b/RichString.c
@@ -0,0 +1,83 @@
+
+#include "RichString.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <curses.h>
+
+#include "debug.h"
+#include <assert.h>
+
+#define RICHSTRING_MAXLEN 300
+
+/*{
+
+typedef struct RichString_ {
+ int len;
+ chtype chstr[RICHSTRING_MAXLEN+1];
+} RichString;
+
+}*/
+
+#ifndef MIN
+#define MIN(a,b) ((a)<(b)?(a):(b))
+#endif
+
+/* private property */
+WINDOW* workArea = NULL;
+
+RichString RichString_new() {
+ RichString this;
+ this.len = 0;
+ return this;
+}
+
+void RichString_delete(RichString this) {
+}
+
+void RichString_prune(RichString* this) {
+ this->len = 0;
+}
+
+void RichString_write(RichString* this, int attrs, char* data) {
+ this->len = 0;
+ RichString_append(this, attrs, data);
+}
+
+inline void RichString_append(RichString* this, int attrs, char* data) {
+ RichString_appendn(this, attrs, data, strlen(data));
+}
+
+inline void RichString_appendn(RichString* this, int attrs, char* data, int len) {
+ if (!workArea) {
+ workArea = newpad(1, RICHSTRING_MAXLEN);
+ }
+ assert(workArea);
+ wattrset(workArea, attrs);
+ int maxToWrite = (RICHSTRING_MAXLEN - 1) - this->len;
+ int wrote = MIN(maxToWrite, len);
+ mvwaddnstr(workArea, 0, 0, data, maxToWrite);
+ int oldstrlen = this->len;
+ this->len += wrote;
+ mvwinchnstr(workArea, 0, 0, this->chstr + oldstrlen, wrote);
+ wattroff(workArea, attrs);
+}
+
+void RichString_setAttr(RichString *this, int attrs) {
+ for (int i = 0; i < this->len; i++) {
+ char c = this->chstr[i];
+ this->chstr[i] = c | attrs;
+ }
+}
+
+void RichString_applyAttr(RichString *this, int attrs) {
+ for (int i = 0; i < this->len - 1; i++) {
+ this->chstr[i] |= attrs;
+ }
+}
+
+RichString RichString_quickString(int attrs, char* data) {
+ RichString str = RichString_new();
+ RichString_write(&str, attrs, data);
+ return str;
+}

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