#include "RichString.h" #include #include #include #include "debug.h" #include #define RICHSTRING_MAXLEN 300 /*{ #define RichString_init(this) (this)->len = 0 #define RichString_initVal(this) (this).len = 0 typedef struct RichString_ { int len; chtype chstr[RICHSTRING_MAXLEN+1]; } RichString; }*/ #ifndef MIN #define MIN(a,b) ((a)<(b)?(a):(b)) #endif void RichString_write(RichString* this, int attrs, char* data) { RichString_init(this); 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) { int last = MIN(RICHSTRING_MAXLEN - 1, len + this->len); for (int i = this->len, j = 0; i < last; i++, j++) this->chstr[i] = data[j] | attrs; this->chstr[last] = 0; this->len = last; } void RichString_setAttr(RichString *this, int attrs) { chtype* ch = this->chstr; for (int i = 0; i < this->len; i++) { *ch = (*ch & 0xff) | attrs; ch++; } } void RichString_applyAttr(RichString *this, int attrs) { chtype* ch = this->chstr; for (int i = 0; i < this->len; i++) { *ch |= attrs; ch++; } } RichString RichString_quickString(int attrs, char* data) { RichString str; RichString_initVal(str); RichString_write(&str, attrs, data); return str; }