From owner-p4-projects@FreeBSD.ORG Sun Dec 14 21:48:46 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id BE5A61065672; Sun, 14 Dec 2008 21:48:46 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 82C75106564A for ; Sun, 14 Dec 2008 21:48:46 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 70BE88FC16 for ; Sun, 14 Dec 2008 21:48:46 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id mBELmkwb030479 for ; Sun, 14 Dec 2008 21:48:46 GMT (envelope-from ed@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id mBELmk8P030477 for perforce@freebsd.org; Sun, 14 Dec 2008 21:48:46 GMT (envelope-from ed@FreeBSD.org) Date: Sun, 14 Dec 2008 21:48:46 GMT Message-Id: <200812142148.mBELmk8P030477@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to ed@FreeBSD.org using -f From: Ed Schouten To: Perforce Change Reviews Cc: Subject: PERFORCE change 154664 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Dec 2008 21:48:47 -0000 http://perforce.freebsd.org/chv.cgi?CH=154664 Change 154664 by ed@ed_dull on 2008/12/14 21:48:29 Misc. fixes for libteken: - Use BLANK instead of ' ' throughout the source code. - Fix CBT (Cursor Backward Tabulation). - Remove assertions that weren't valid and fix signedness for certain calculations. Affected files ... .. //depot/projects/mpsafetty/sys/dev/syscons/teken/teken.c#6 edit .. //depot/projects/mpsafetty/sys/dev/syscons/teken/teken_subr.h#11 edit Differences ... ==== //depot/projects/mpsafetty/sys/dev/syscons/teken/teken.c#6 (text+ko) ==== @@ -69,6 +69,9 @@ #define TS_ORIGIN 0x08 /* Origin mode. */ #define TS_WRAPPED 0x10 /* Next character should be printed on col 0. */ +/* Character that blanks a cell. */ +#define BLANK ' ' + static teken_state_t teken_state_init; static const teken_attr_t teken_defattr = { @@ -222,7 +225,7 @@ teken_subr_carriage_return(t); break; case '\t': - teken_subr_cursor_forward_tabulation(t, 1); + teken_subr_horizontal_tab(t); break; default: t->t_nextstate(t, c); @@ -307,7 +310,7 @@ tr.tr_begin.tp_row = 0; tr.tr_begin.tp_col = 0; tr.tr_end = t->t_winsize; - teken_funcs_fill(t, &tr, ' ', &teken_defattr); + teken_funcs_fill(t, &tr, BLANK, &teken_defattr); } /* ==== //depot/projects/mpsafetty/sys/dev/syscons/teken/teken_subr.h#11 (text+ko) ==== @@ -109,7 +109,7 @@ tr.tr_begin.tp_col = 0; tr.tr_end.tp_row = t->t_scrollreg.ts_end; tr.tr_end.tp_col = t->t_winsize.tp_col; - teken_funcs_fill(t, &tr, ' ', &t->t_curattr); + teken_funcs_fill(t, &tr, BLANK, &t->t_curattr); } else { /* Scroll up. */ amount = -amount; @@ -130,7 +130,7 @@ tr.tr_begin.tp_col = 0; tr.tr_end.tp_row = t->t_scrollreg.ts_begin + amount; tr.tr_end.tp_col = t->t_winsize.tp_col; - teken_funcs_fill(t, &tr, ' ', &t->t_curattr); + teken_funcs_fill(t, &tr, BLANK, &t->t_curattr); } } @@ -233,7 +233,20 @@ teken_subr_cursor_backward_tabulation(teken_t *t, unsigned int ntabs) { - teken_printf("CBT???\n"); + if (ntabs == 0) + ntabs = 1; + + do { + /* Stop when we've reached the beginning of the line. */ + if (t->t_cursor.tp_col == 0) + break; + + t->t_cursor.tp_col--; + + /* Tab marker set. */ + if (teken_tab_isset(t, t->t_cursor.tp_col)) + ntabs--; + } while (ntabs > 0); } static void @@ -278,7 +291,7 @@ if (t->t_cursor.tp_col == t->t_winsize.tp_col - 1) break; - teken_subr_regular_character(t, ' '); + t->t_cursor.tp_col++; /* Tab marker set. */ if (teken_tab_isset(t, t->t_cursor.tp_col)) @@ -333,9 +346,7 @@ if (nrows == 0) nrows = 1; - /* XXX: does this assertion hold? */ - teken_assert(t->t_cursor.tp_row >= t->t_scrollreg.ts_begin); - if (nrows > (t->t_cursor.tp_row - t->t_scrollreg.ts_begin)) + if (nrows > ((int)t->t_cursor.tp_row - t->t_scrollreg.ts_begin)) t->t_cursor.tp_row = t->t_scrollreg.ts_begin; else t->t_cursor.tp_row -= nrows; @@ -366,7 +377,7 @@ } /* Blank trailing columns. */ - teken_funcs_fill(t, &tr, ' ', &t->t_curattr); + teken_funcs_fill(t, &tr, BLANK, &t->t_curattr); } static void @@ -374,9 +385,6 @@ { teken_rect_t tr; - /* XXX: does this assertion hold? */ - teken_assert(t->t_cursor.tp_row >= t->t_scrollreg.ts_begin); - if (nrows == 0) nrows = 1; @@ -384,7 +392,7 @@ tr.tr_end.tp_row = t->t_scrollreg.ts_end; tr.tr_end.tp_col = t->t_winsize.tp_col; - if (nrows < (t->t_scrollreg.ts_end - t->t_cursor.tp_row)) { + if (nrows < ((int)t->t_scrollreg.ts_end - t->t_cursor.tp_row)) { /* Copy rows up. */ tr.tr_begin.tp_row = t->t_cursor.tp_row + nrows; teken_funcs_copy(t, &tr, &t->t_cursor); @@ -395,7 +403,7 @@ } /* Blank trailing rows. */ - teken_funcs_fill(t, &tr, ' ', &t->t_curattr); + teken_funcs_fill(t, &tr, BLANK, &t->t_curattr); } static void @@ -448,7 +456,7 @@ else tr.tr_end.tp_col = t->t_winsize.tp_col - 1; - teken_funcs_fill(t, &tr, ' ', &t->t_curattr); + teken_funcs_fill(t, &tr, BLANK, &t->t_curattr); } static void @@ -484,7 +492,7 @@ break; } - teken_funcs_fill(t, &r, ' ', &t->t_curattr); + teken_funcs_fill(t, &r, BLANK, &t->t_curattr); } static void @@ -510,7 +518,7 @@ break; } - teken_funcs_fill(t, &r, ' ', &t->t_curattr); + teken_funcs_fill(t, &r, BLANK, &t->t_curattr); } static void @@ -523,6 +531,23 @@ } static void +teken_subr_horizontal_tab(teken_t *t) +{ + teken_rect_t tr; + + tr.tr_begin = t->t_cursor; + tr.tr_end.tp_row = tr.tr_begin.tp_row + 1; + + teken_subr_cursor_forward_tabulation(t, 1); + + /* Blank region that we skipped. */ + if (t->t_cursor.tp_col > tr.tr_begin.tp_col) { + tr.tr_end.tp_col = t->t_cursor.tp_col; + teken_funcs_fill(t, &tr, BLANK, &t->t_curattr); + } +} + +static void teken_subr_horizontal_tab_set(teken_t *t) { @@ -568,7 +593,7 @@ } /* Blank current location. */ - teken_funcs_fill(t, &tr, ' ', &t->t_curattr); + teken_funcs_fill(t, &tr, BLANK, &t->t_curattr); } static void @@ -579,14 +604,11 @@ if (nrows == 0) nrows = 1; - /* XXX: does this assertion hold? */ - teken_assert(t->t_cursor.tp_row >= t->t_scrollreg.ts_begin); - tr.tr_begin.tp_row = t->t_cursor.tp_row; tr.tr_begin.tp_col = 0; tr.tr_end.tp_col = t->t_winsize.tp_col; - if (nrows < (t->t_scrollreg.ts_end - t->t_cursor.tp_row)) { + if (nrows < ((int)t->t_scrollreg.ts_end - t->t_cursor.tp_row)) { teken_pos_t tp; /* Copy lines down. */ @@ -601,7 +623,7 @@ } /* Blank current location. */ - teken_funcs_fill(t, &tr, ' ', &t->t_curattr); + teken_funcs_fill(t, &tr, BLANK, &t->t_curattr); } static void @@ -792,7 +814,6 @@ break; case 47: /* Switch to alternate buffer. */ teken_printf("Switch to alternate buffer\n"); - /* XXX: unsupported. */ break; default: teken_printf("Unknown DECRST: %u\n", cmd); @@ -847,8 +868,6 @@ teken_subr_reverse_index(teken_t *t) { - /* XXX: does this assertion hold? */ - teken_assert(t->t_cursor.tp_row >= t->t_scrollreg.ts_begin); if (t->t_cursor.tp_row > t->t_scrollreg.ts_begin) { t->t_cursor.tp_row--; t->t_stateflags &= ~TS_WRAPPED; @@ -927,7 +946,7 @@ teken_printf("DECSET reverse wraparound\n"); break; case 47: /* Switch to alternate buffer. */ - /* XXX: unsupported. */ + teken_printf("Switch away from alternate buffer\n"); break; default: teken_printf("Unknown DECSET: %u\n", cmd);