From: keni Date: Sun, 4 Dec 2011 20:06:00 +0000 (+0000) Subject: fix H2488 - wide and/or tall screens don't work X-Git-Tag: MOVE2GIT~146 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eef41ba4a83b7b291e0785899c2f9ab24f1c088d;p=nethack fix H2488 - wide and/or tall screens don't work Make windows with more than 255 rows or columns work. Touches some very old magic involving the constant 10. --- diff --git a/include/wintty.h b/include/wintty.h index 1b08c9007..a38383bba 100644 --- a/include/wintty.h +++ b/include/wintty.h @@ -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 diff --git a/win/tty/wintty.c b/win/tty/wintty.c index 3baba362e..18b04dcad 100644 --- a/win/tty/wintty.c +++ b/win/tty/wintty.c @@ -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;