diff --git a/terminaldisplay.cpp b/terminaldisplay.cpp index f51bc19..ccdee90 100644 --- a/terminaldisplay.cpp +++ b/terminaldisplay.cpp @@ -73,7 +73,9 @@ std::string Display::new_frame( Framebuffer &f ) && (!f.get_row( frame.y )->wrap) && (!initialized || last_frame.get_row( frame.y )->wrap) ) { frame.x = last_x; - last_frame.reset_cell( last_frame.get_cell( frame.y, frame.x ) ); + if ( initialized ) { + last_frame.reset_cell( last_frame.get_cell( frame.y, frame.x ) ); + } snprintf( tmp, 64, "\033[%d;%dH\033[K", frame.y + 1, frame.x + 1 ); frame.append( tmp ); @@ -115,10 +117,9 @@ void Display::put_cell( FrameState &frame, Framebuffer &f ) char tmp[ 64 ]; Cell *cell = f.get_cell( frame.y, frame.x ); - Cell *last_cell = last_frame.get_cell( frame.y, frame.x ); if ( initialized - && ( *cell == *last_cell ) ) { + && ( *cell == *(last_frame.get_cell( frame.y, frame.x )) ) ) { frame.x += cell->width; return; } diff --git a/terminalframebuffer.hpp b/terminalframebuffer.hpp index b94c322..2da879e 100644 --- a/terminalframebuffer.hpp +++ b/terminalframebuffer.hpp @@ -5,6 +5,7 @@ #include #include #include +#include /* Terminal framebuffer */ @@ -171,6 +172,13 @@ namespace Terminal { inline Cell *get_cell( void ) { +#ifdef DEBUG + assert( ds.get_cursor_row() >= 0 ); + assert( ds.get_cursor_col() >= 0 ); + assert( ds.get_cursor_row() < ds.get_height() ); + assert( ds.get_cursor_col() < ds.get_width() ); +#endif + return &rows[ ds.get_cursor_row() ].cells[ ds.get_cursor_col() ]; } @@ -179,6 +187,13 @@ namespace Terminal { if ( row == -1 ) row = ds.get_cursor_row(); if ( col == -1 ) col = ds.get_cursor_col(); +#ifdef DEBUG + assert( row >= 0 ); + assert( col >= 0 ); + assert( row < ds.get_height() ); + assert( col < ds.get_width() ); +#endif + return &rows[ row ].cells[ col ]; }