small wineconsole/curses fixes

Eric Pouech pouech-eric at wanadoo.fr
Sun Sep 21 11:29:19 CDT 2003


-- 
Eric Pouech
-------------- next part --------------
Name:          wc_wsz
ChangeLog:     
- win32 console's window cannot be larger than curses' stdscr
- correctly manage backspace
- various cleanup
License:       X11
GenDate:       2003/09/21 16:20:26 UTC
ModifiedFiles: programs/wineconsole/curses.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/programs/wineconsole/curses.c,v
retrieving revision 1.14
diff -u -u -r1.14 curses.c
--- programs/wineconsole/curses.c	7 Sep 2003 05:08:14 -0000	1.14
+++ programs/wineconsole/curses.c	21 Sep 2003 15:06:30 -0000
@@ -112,11 +112,6 @@
 
 /**********************************************************************/
 
-typedef struct {
-    LPVOID lpCallback;
-    LPVOID lpContext;
-} DirectDrawEnumerateProcData;
-
 static BOOL WCCURSES_bind_libcurses(void)
 {
 #ifdef HAVE_NCURSES_H
@@ -240,8 +235,6 @@
     int scr_width;
     int scr_height;
 
-    getmaxyx(stdscr, scr_height, scr_width);
-
     if (data->curcfg.cursor_visible &&
         data->cursor.Y >= data->curcfg.win_pos.Y &&
         data->cursor.Y < data->curcfg.win_pos.Y + data->curcfg.win_height &&
@@ -255,10 +248,12 @@
     {
         curs_set(0);
     }
-
+    getmaxyx(stdscr, scr_height, scr_width); 
     prefresh(PRIVATE(data)->pad,
              data->curcfg.win_pos.Y, data->curcfg.win_pos.X,
-             0, 0, scr_height, scr_width);
+             0, 0, 
+             min(scr_height, data->curcfg.win_height) - 1, 
+             min(scr_width, data->curcfg.win_width) - 1);
 }
 
 /******************************************************************
@@ -281,6 +276,21 @@
  */
 void	WCCURSES_ComputePositions(struct inner_data* data)
 {
+    int         x, y;
+
+    getmaxyx(stdscr, y, x);
+    if ((data->curcfg.win_height && y < data->curcfg.win_height) ||
+        (data->curcfg.win_width && x < data->curcfg.win_width))
+    {
+        SMALL_RECT  pos;
+
+        WINE_WARN("Window too large (%dx%d), adjusting to curses' size (%dx%d)\n",
+                  data->curcfg.win_width, data->curcfg.win_height, x, y);
+        pos.Left = pos.Top = 0;
+        pos.Right = x - 1; pos.Bottom = y - 1;
+        SetConsoleWindowInfo(data->hConOut, FALSE, &pos);
+        return; /* we'll get called again upon event for new window size */
+    }
     if (PRIVATE(data)->pad) WCCURSES_PosCursor(data);
 }
 
@@ -611,7 +621,7 @@
         numEvent = WCCURSES_FillComplexChar(ir, 0x47, 0x24, 0);
         break;
     case KEY_BACKSPACE:
-        numEvent = WCCURSES_FillSimpleChar(ir, '\b');
+        numEvent = WCCURSES_FillSimpleChar(ir, 127);
         break;
         
     case KEY_F0: /* up to F63 */
@@ -898,7 +908,7 @@
      * For the time being, setting this to 1 will allow scrolling up/down 
      * on buffer with F11/F12.
      */
-    /* data->allow_scroll = 1; */
+    /* PRIVATE(data)->allow_scroll = 1; */
 
     initscr();
 


More information about the wine-patches mailing list