From b10402463746f9077c4d11028a84ec69c684e4c6 Mon Sep 17 00:00:00 2001 From: Ali Gholami Rudi Date: Thu, 9 Jul 2009 15:02:33 +0430 Subject: [PATCH] fbpterm: move ctrl char handling to fbpterm.c --- fbpterm.c | 42 +++++++++++++++++++++++++++++++++++++++++- pad.c | 43 ------------------------------------------- pad.h | 3 +-- 3 files changed, 42 insertions(+), 46 deletions(-) diff --git a/fbpterm.c b/fbpterm.c index c7d5547..244ec91 100644 --- a/fbpterm.c +++ b/fbpterm.c @@ -54,6 +54,45 @@ static int readchar(void) return -1; } +static void advance(int ch) +{ + int r = pad_row(); + int c = pad_col(); + switch (ch) { + case '\n': + r++; + c = 0; + break; + case '\t': + c = (c / 8 + 1) * 8; + break; + case '\b': + if (c) + c--; + break; + case '\r': + c = 0; + break; + case '\a': + case '\f': + case '\v': + break; + default: + c++; + } + if (c >= pad_cols()) { + r++; + c = 0; + } + if (r >= pad_rows()) { + int n = pad_rows() - r - 1; + int nr = r + n; + r = pad_rows() - 1; + pad_scroll(-n, nr, n); + } + pad_move(r, c); +} + static void writechar(int c) { unsigned char b = (unsigned char) c; @@ -62,7 +101,8 @@ static void writechar(int c) static void writepty(int c) { - pad_add(c); + pad_put(c, pad_row(), pad_col()); + advance(c); } static void setmode(int m) diff --git a/pad.c b/pad.c index ce6012d..c16796e 100644 --- a/pad.c +++ b/pad.c @@ -121,49 +121,6 @@ void pad_scroll(int sr, int nr, int n) pad_show(row, col, 1); } -static void advance(int c) -{ - switch (c) { - case '\n': - row++; - col = 0; - break; - case '\t': - col = (col / 8 + 1) * 8; - break; - case '\b': - if (col) - col--; - break; - case '\r': - col = 0; - break; - case '\a': - case '\f': - case '\v': - break; - default: - col++; - } - if (col >= cols) { - row++; - col = 0; - } - if (row >= rows) { - int n = rows - row - 1; - int nr = rows + n; - row = rows - 1; - pad_scroll(-n, nr, n); - } -} - -void pad_add(int c) -{ - pad_put(c, row, col); - advance(c); - pad_show(row, col, 1); -} - void pad_blank(void) { fb_box(0, 0, fb_rows(), fb_cols(), color2fb(bg)); diff --git a/pad.h b/pad.h index 8d32fbd..e87b881 100644 --- a/pad.h +++ b/pad.h @@ -2,8 +2,7 @@ void pad_init(void); void pad_free(void); void pad_fg(int fg); void pad_bg(int bg); -void pad_add(int c); -void pad_put(int c, int x, int y); +void pad_put(int ch, int r, int c); void pad_blank(); void pad_move(int r, int c); int pad_row(void); -- 2.11.4.GIT