58 lines
947 B
C
58 lines
947 B
C
|
struct TEXTBUF
|
||
|
{
|
||
|
dword p;
|
||
|
unsigned len;
|
||
|
unsigned max;
|
||
|
void drop();
|
||
|
void extend();
|
||
|
void set();
|
||
|
void insert_ch();
|
||
|
void insert_str();
|
||
|
void del();
|
||
|
} textbuf;
|
||
|
|
||
|
void TEXTBUF::drop()
|
||
|
{
|
||
|
p = free(p);
|
||
|
len = max = 0;
|
||
|
}
|
||
|
|
||
|
void TEXTBUF::extend(unsigned _size)
|
||
|
{
|
||
|
max = _size;
|
||
|
p = realloc(p, max);
|
||
|
}
|
||
|
|
||
|
void TEXTBUF::set(dword _p, unsigned _size)
|
||
|
{
|
||
|
len = _size;
|
||
|
extend(len + 4096);
|
||
|
strncpy(p, _p, len);
|
||
|
}
|
||
|
|
||
|
void TEXTBUF::insert_ch(unsigned _pos, char _ch)
|
||
|
{
|
||
|
char str[1];
|
||
|
str[0] = _ch;
|
||
|
insert_str(_pos, #str, 1);
|
||
|
}
|
||
|
|
||
|
void TEXTBUF::insert_str(unsigned _pos, dword _string, unsigned _sl)
|
||
|
{
|
||
|
dword i;
|
||
|
if (len + _sl >= max) {
|
||
|
extend(len + _sl + 4096);
|
||
|
}
|
||
|
len += _sl;
|
||
|
for (i=p+len; i>=_pos+_sl; i--) {
|
||
|
ESBYTE[i] = ESBYTE[i-_sl];
|
||
|
}
|
||
|
memmov(_pos, _string, _sl);
|
||
|
}
|
||
|
|
||
|
void TEXTBUF::del(unsigned _start, _end)
|
||
|
{
|
||
|
if (_start > _end) _end >< _start;
|
||
|
strcpy(_start, _end);
|
||
|
len -= _end - _start;
|
||
|
}
|