Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. struct TEXTBUF
  2. {
  3.         dword p;
  4.         unsigned len;
  5.         unsigned max;
  6.         void drop();
  7.         void extend();
  8.         void set();
  9.         void insert_ch();
  10.         void insert_str();
  11.         void del();
  12. } textbuf;
  13.  
  14. void TEXTBUF::drop()
  15. {
  16.         p = free(p);
  17.         len = max = 0;
  18. }
  19.  
  20. void TEXTBUF::extend(unsigned _size)
  21. {
  22.         max = _size;
  23.         p = realloc(p, max);
  24. }
  25.  
  26. void TEXTBUF::set(dword _p, unsigned _size)
  27. {
  28.         len = _size;
  29.         extend(len + 4096);
  30.         strncpy(p, _p, len);
  31. }
  32.  
  33. void TEXTBUF::insert_ch(unsigned _pos, char _ch)
  34. {
  35.         char str[1];
  36.         str[0] = _ch;
  37.         insert_str(_pos, #str, 1);
  38. }
  39.  
  40. void TEXTBUF::insert_str(unsigned _pos, dword _string, unsigned _sl)
  41. {
  42.         dword i;
  43.         if (len + _sl >= max) {
  44.                 extend(len + _sl + 4096);
  45.         }
  46.         len += _sl;
  47.         for (i=p+len; i>=_pos+_sl; i--) {
  48.                 ESBYTE[i] = ESBYTE[i-_sl];
  49.         }
  50.         memmov(_pos, _string, _sl);
  51. }
  52.  
  53. void TEXTBUF::del(unsigned _start, _end)
  54. {
  55.         if (_start > _end) _end >< _start;
  56.         strcpy(_start, _end);
  57.         len -= _end - _start;
  58. }