PERFORCE change 154664 for review
Ed Schouten
ed at FreeBSD.org
Sun Dec 14 13:48:47 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=154664
Change 154664 by ed at 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);
More information about the p4-projects
mailing list