buf: memmove, memcpy, memset buf: scroll back buffer (deque?) buf: transfer color data to dsp: bufstate.underline_fg --> display buf: bufstate color api? (set_fg, set_bg, ...) (emu: direct bufstate access?) bug: resize bug: mc ctrl-O --> show saved buffer bug: cat + last character before wrap does not shows under cursor bug: valgrind: display fill rectangle bug bug: overkill unusable (key input) build system -> api: static inline + no implicit func redeclaration warnings dsp & buf & emu: underline + attrs dsp & buf& emu: cursors types (none/underline/half/block/..) dsp: minmal amount of drawing (eg no background rectangle if cell was empty), skip on fast input dsp: select (shift insert + ctrl insert) (no mouse->emu (kills mc)) dsp: underline, halfbright dsp: select / paste dsp: scroll lock emu: palette --> buf/dsp interfacing emu: spec char transmition api (dsp key press -> control seq) emu: dec private modes policy? io/pty: fix build warnings test: stress tests / benchmarks + profile (separate troughput test of the modules) unicode: char -> emu -> unicode -> buf (16bit char in cell?) -> dsp (codepage / font ?) ==== build system plan: module/ common_data.h --> typedef struct data_t data_t; ... // typedefed structs common_func.h --> data_t *mod_create(); ... // function api impl/ impl.h --> commmon_data.h struct definitions impl.c --> function implementation vterm.h: #include "mod1/common_data.h" #include "mod2/common_data.h" ... // every data is declared here #include "mod1/common_func.h" #include "mod1/common_func.h" ... // every function is declared here (static) // not needed! MOD1 MOD2 ... impl.h: #include "vterm.h" ...