This fixes subwindows in curses so that they draw and refresh correctly.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Index: libpayload/curses/tinycurses.c
===================================================================
--- libpayload.orig/curses/tinycurses.c	2008-05-12 16:21:46.000000000 -0600
+++ libpayload/curses/tinycurses.c	2008-05-13 13:38:19.000000000 -0600
@@ -66,7 +66,7 @@
 static int window_count = 1;
 
 // struct ldat foo;
-static struct ldat ldat_list[3];
+static struct ldat ldat_list[MAX_WINDOWS][SCREEN_Y];
 static int ldat_count = 0;
 
 /* One item bigger than SCREEN_X to reverse place for a NUL byte. */
@@ -306,7 +306,7 @@
 	win->_begx = begx;
 	// win->_yoffset = SP->_topstolen;
 
-	win->_line = &ldat_list[ldat_count++];
+	win->_line = ldat_list[ldat_count++];
 
 	/* FIXME: Is this right? Should the window attributes be normal? */
 	win->_color = PAIR_NUMBER(0);
@@ -491,8 +491,8 @@
 int werase(WINDOW *win)
 {
 	int x, y;
-	for (y = 0; y < win->_maxy; y++) {
-		for (x = 0; x < win->_maxx; x++) {
+	for (y = 0; y <= win->_maxy; y++) {
+		for (x = 0; x <= win->_maxx; x++) {
 			win->_line[y].text[x].chars[0] = ' ';
 			win->_line[y].text[x].attr = WINDOW_ATTRS(win);
 		}
@@ -559,8 +559,8 @@
 	// FIXME.
 	int x, y;
 
-	for (y = 0; y < win->_maxy; y++) {
-		for (x = 0; x < win->_maxx; x++) {
+	for (y = 0; y <= win->_maxy; y++) {
+		for (x = 0; x <= win->_maxx; x++) {
 			if (curses_flags & F_ENABLE_SERIAL)
 				serial_putchar(win->_line[y].text[x].chars[0]);
 
@@ -587,7 +587,7 @@
 				 * but this will break wide characters!
 				 */
 				c |= (chtype) (win->_line[y].text[x].chars[0] & 0xff);
-				video_console_putc(y, x, c);
+				video_console_putc(win->_begy + y, win->_begx + x, c);
 			}
 		}
 	}

-- 
Jordan Crouse
Systems Software Development Engineer 
Advanced Micro Devices, Inc.



