Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 Dec 2008 21:48:46 GMT
From:      Ed Schouten <ed@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 154664 for review
Message-ID:  <200812142148.mBELmk8P030477@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812142148.mBELmk8P030477>