diff --git a/src/drivers/fb/scrollback.cpp b/src/drivers/fb/scrollback.cpp index 69aa017..625d8e3 100644 --- a/src/drivers/fb/scrollback.cpp +++ b/src/drivers/fb/scrollback.cpp @@ -12,10 +12,6 @@ scrollback::scrollback(unsigned lines, unsigned cols, unsigned margin) : m_margin {margin} { m_data = reinterpret_cast(malloc(lines*cols)); - m_lines = reinterpret_cast(malloc(lines*sizeof(char*))); - for (unsigned i = 0; i < lines; ++i) - m_lines[i] = &m_data[i*cols]; - memset(m_data, ' ', lines*cols); } @@ -27,15 +23,17 @@ scrollback::add_line(const char *line, size_t len) if (len > m_cols) len = m_cols; - memcpy(m_lines[i], line, len); + char *start = m_data + (i * m_cols); + memcpy(start, line, len); if (len < m_cols) - memset(m_lines[i]+len, ' ', m_cols - len); + memset(start + len, ' ', m_cols - len); } char * scrollback::get_line(unsigned i) { - return m_lines[(i+m_count)%m_rows]; + unsigned line = (i + m_count) % m_rows; + return &m_data[line*m_cols]; } void @@ -48,7 +46,7 @@ scrollback::render(screen &scr, font &fnt) const unsigned ystride = (m_margin + fnt.height()); for (unsigned y = 0; y < m_rows; ++y) { - char *line = get_line(y); + char *line = &m_data[y*m_cols]; for (unsigned x = 0; x < m_cols; ++x) { fnt.draw_glyph(scr, line[x], fg, bg, m_margin+x*xstride, m_margin+y*ystride); } diff --git a/src/drivers/fb/scrollback.h b/src/drivers/fb/scrollback.h index 56bfef9..9d97546 100644 --- a/src/drivers/fb/scrollback.h +++ b/src/drivers/fb/scrollback.h @@ -17,7 +17,6 @@ public: private: char *m_data; - char **m_lines; unsigned m_rows, m_cols; unsigned m_start; unsigned m_count;