]> granicus.if.org Git - nethack/commitdiff
fix H2488 - wide and/or tall screens don't work
authorkeni <keni>
Sun, 4 Dec 2011 20:06:00 +0000 (20:06 +0000)
committerkeni <keni>
Sun, 4 Dec 2011 20:06:00 +0000 (20:06 +0000)
Make windows with more than 255 rows or columns work.  Touches
some very old magic involving the constant 10.

include/wintty.h
win/tty/wintty.c

index 1b08c900728910d7d76ad6684c099a7e99a7b831..a38383bba013437490d19444749d7f41fa4a644f 100644 (file)
@@ -28,7 +28,7 @@ struct WinDesc {
     int flags;                 /* window flags */
     xchar type;                        /* type of window */
     boolean active;            /* true if window is active */
-    uchar offx, offy;          /* offset from topleft of display */
+    short offx, offy;          /* offset from topleft of display */
     short rows, cols;          /* dimensions */
     short curx, cury;          /* current cursor position */
     short maxrow, maxcol;      /* the maximum size used -- for MENU wins */
@@ -53,8 +53,8 @@ struct WinDesc {
 
 /* descriptor for tty-based displays -- all the per-display data */
 struct DisplayDesc {
-    uchar rows, cols;          /* width and height of tty display */
-    uchar curx, cury;          /* current cursor position on the screen */
+    short rows, cols;          /* width and height of tty display */
+    short curx, cury;          /* current cursor position on the screen */
 #ifdef TEXTCOLOR
     int color;                 /* current color */
 #endif
index 3baba362e502624f025bb8bb7ce2eaf714b519a3..18b04dcad2cfd586b913e3d913047408c6e7672c 100644 (file)
@@ -1714,7 +1714,7 @@ struct WinDesc *cw;
            n = 0;
        }
        tty_curs(window, 1, n++);
-       if (cw->offx) cl_end();
+       cl_end();
        if (cw->data[i]) {
            attr = cw->data[i][0] - 1;
            if (cw->offx) {
@@ -1738,6 +1738,10 @@ struct WinDesc *cw;
        }
     }
     if (i == cw->maxrow) {
+       if(cw->type == NHW_TEXT){
+           tty_curs(BASE_WINDOW, 0, (int)ttyDisplay->cury+1);
+           cl_eos();
+       }
        tty_curs(BASE_WINDOW, (int)cw->offx + 1,
                 (cw->type == NHW_TEXT) ? (int) ttyDisplay->rows - 1 : n);
        cl_end();
@@ -1789,14 +1793,14 @@ tty_display_nhwindow(window, blocking)
        /*FALLTHRU*/
     case NHW_MENU:
        cw->active = 1;
-       /* avoid converting to uchar before calculations are finished */
-       cw->offx = (uchar) (int)
-           max((int) 10, (int) (ttyDisplay->cols - cw->maxcol - 1));
+       cw->offx = (cw->type==NHW_TEXT)
+               ? 0
+               : min(10, ttyDisplay->cols - cw->maxcol - 1);
        if(cw->type == NHW_MENU)
            cw->offy = 0;
        if(ttyDisplay->toplin == 1)
            tty_display_nhwindow(WIN_MESSAGE, TRUE);
-       if(cw->offx == 10 || cw->maxrow >= (int) ttyDisplay->rows) {
+       if(cw->maxrow >= (int) ttyDisplay->rows) {
            cw->offx = 0;
            if(cw->offy) {
                tty_curs(window, 1, 0);
@@ -2540,7 +2544,7 @@ tty_end_menu(window, prompt)
     }
 
     if (len > (int)ttyDisplay->cols) {
-       /* truncate the prompt if its too long for the screen */
+       /* truncate the prompt if it's too long for the screen */
        if (cw->npages <= 1)    /* only str in single page case */
            cw->morestr[ttyDisplay->cols] = 0;
        len = ttyDisplay->cols;