diff --git a/include/ircterm.h b/include/ircterm.h index a8b9932..1608b2c 100644 --- a/include/ircterm.h +++ b/include/ircterm.h @@ -639,6 +639,8 @@ struct term_struct { char *TI_memu; /* mu / memu memory unlock */ char *TI_box1; /* bx / box1 box characters primary set */ /* non termcap/terminfo terminal info (generated by epic) */ + int co; /* current actual number of columns */ + int li; /* current actual number of lines */ char TI_normal[256]; char *TI_sgrstrs[TERM_SGR_MAXVAL]; char *TI_forecolors[16]; diff --git a/source/functions.c b/source/functions.c index ab916e5..67ff0d6 100644 --- a/source/functions.c +++ b/source/functions.c @@ -4209,7 +4209,7 @@ BUILT_IN_FUNCTION(function_channelmode, word) BUILT_IN_FUNCTION(function_geom, words) { /* Erf. CO and LI are ints. (crowman) */ - return m_sprintf("%d %d", current_term->TI_cols, current_term->TI_lines); + return m_sprintf("%d %d", current_term->co, current_term->li); } BUILT_IN_FUNCTION(function_pass, words) diff --git a/source/gtkbitchx.c b/source/gtkbitchx.c index eddd050..e5a4cf0 100644 --- a/source/gtkbitchx.c +++ b/source/gtkbitchx.c @@ -532,7 +532,7 @@ void gtk_label_set_color(GtkWidget *label, int color) /* This may be going away, it replaces code which is currently elsewhere in BitchX */ void gtk_resize(Screen *this_screen) { - co = this_screen->co; li = this_screen->li; + current_term->co = this_screen->co; current_term->li = this_screen->li; /* Recalculate some stuff that was done in input.c previously */ this_screen->input_line = this_screen->li-1; @@ -2179,8 +2179,8 @@ void gui_init(void) { current_term->TI_cols = 80; current_term->TI_lines = 25; - li = current_term->TI_lines; - co = current_term->TI_cols; + current_term->li = current_term->TI_lines; + current_temr->co = current_term->TI_cols; pthread_mutex_init(&evmutex, NULL); pthread_cond_init(&evcond, NULL); @@ -2544,7 +2544,7 @@ void gtk_new_window(Screen *gtknew, Window *win) else zvt_load_font("fixed", gtknew); - gtknew->co = co; gtknew->li = li; + gtknew->co = current_term->co; gtknew->li = current_term->li; zvt_term_set_scrollback((ZvtTerm *)gtknew->viewport, 0); zvt_term_set_blink((ZvtTerm *)gtknew->viewport, TRUE); zvt_term_set_bell((ZvtTerm *)gtknew->viewport, TRUE); diff --git a/source/pmbitchx.c b/source/pmbitchx.c index 9cf5eb5..632a804 100644 --- a/source/pmbitchx.c +++ b/source/pmbitchx.c @@ -447,11 +447,11 @@ MRESULT EXPENTRY FontDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) changescreen->VIO_font_width = fonts[i].lAveCharWidth; changescreen->VIO_font_height = fonts[i].lMaxBaselineExt; - co = changescreen->co; - li = changescreen->li; + current_term->co = changescreen->co; + current_term->li = changescreen->li; - cx = (co - 1) * changescreen->VIO_font_width; - cy = li * changescreen->VIO_font_height; + cx = (changescreen->co - 1) * changescreen->VIO_font_width; + cy = changescreen->li * changescreen->VIO_font_height; maxX = WinQuerySysValue(HWND_DESKTOP, SV_CXSCREEN); maxY = WinQuerySysValue(HWND_DESKTOP, SV_CYSCREEN); @@ -464,8 +464,8 @@ MRESULT EXPENTRY FontDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) changescreen->li = (maxY / changescreen->VIO_font_height) -1; /* Recalculate in case we modified the values */ - cx = (co - 1) * changescreen->VIO_font_width; - cy = li * changescreen->VIO_font_height; + cx = (changescreen->co - 1) * changescreen->VIO_font_width; + cy = changescreen->li * changescreen->VIO_font_height; if(changescreen->nicklist) cx += (changescreen->VIO_font_width * changescreen->nicklist) + cxvs; @@ -937,7 +937,7 @@ void pm_resize(Screen *this_screen) cx = this_screen->co * this_screen->VIO_font_width; cy = this_screen->li * this_screen->VIO_font_height; - co = this_screen->co; li = this_screen->li; + current_term->co = this_screen->co; current_term->li = this_screen->li; /* Recalculate some stuff that was done in input.c previously */ this_screen->input_line = this_screen->li-1; @@ -1765,10 +1765,10 @@ void avio_init() { NULL); hwndMenu=(HWND)NULL; - current_term->TI_cols = co = 81; - current_term->TI_lines = li = 25; - cx = (co+14) * VIO_font_width; - cy = li * VIO_font_height; + current_term->co = current_term->TI_cols = 81; + current_term->li = current_term->TI_lines = 25; + cx = (current_term->co+14) * VIO_font_width; + cy = current_term->li * VIO_font_height; WinSetParent(MDIFrame, HWND_OBJECT, FALSE); /* Setup main window */ @@ -1811,8 +1811,8 @@ void avio_init() { WinSubclassWindow(hwndLeft, FrameWndProc); WinSubclassWindow(hwndRight, FrameWndProc); - WinSendMsg(hwndnickscroll, SBM_SETSCROLLBAR, (MPARAM)0, MPFROM2SHORT(0, li)); - WinSendMsg(hwndnickscroll, SBM_SETTHUMBSIZE, MPFROM2SHORT(li, 0), (MPARAM)NULL); + WinSendMsg(hwndnickscroll, SBM_SETSCROLLBAR, (MPARAM)0, MPFROM2SHORT(0, current_term->li)); + WinSendMsg(hwndnickscroll, SBM_SETTHUMBSIZE, MPFROM2SHORT(current_term->li, 0), (MPARAM)NULL); setmode(guiipc[0], O_BINARY); setmode(guiipc[1], O_BINARY); @@ -2662,8 +2662,8 @@ void gui_init(void) DC_SEM_SHARED, FALSE); - li = 25; - co = 80; + current_term->li = 25; + current_term->co = 80; #ifdef SOUND if(DosLoadModule(NULL, 0, "MCIAPI", &hmod) == NO_ERROR) diff --git a/source/screen.c b/source/screen.c index 5a388cb..e774c04 100644 --- a/source/screen.c +++ b/source/screen.c @@ -1500,8 +1500,8 @@ Screen * BX_create_new_screen(void) new->fdin = fileno(stdin); new->alive = 1; - new->li = current_term->TI_lines; - new->co = current_term->TI_cols; + new->li = current_term->li; + new->co = current_term->co; new->old_li = 0; new->old_co = 0; new->buffer_pos = new->buffer_min_pos = 0; @@ -1651,7 +1651,7 @@ extern Window *BX_create_additional_screen (void) } else if (screen_type == ST_XTERM) { - snprintf(geom, sizeof geom, "%dx%d", current_term->TI_cols, current_term->TI_lines); + snprintf(geom, sizeof geom, "%dx%d", current_term->co, current_term->li); opts = LOCAL_COPY(get_string_var(XTERM_OPTIONS_VAR)); if (!(xterm = getenv("XTERM"))) if (!(xterm = get_string_var(XTERM_VAR))) diff --git a/source/term.c b/source/term.c index 0192dae..8bbc4e4 100644 --- a/source/term.c +++ b/source/term.c @@ -623,8 +623,6 @@ static const int numcaps = sizeof tcaps / sizeof tcaps[0]; int can_color = 0; int need_redraw = 0; static int term_echo_flag = 1; -static int li; -static int co; #if !defined(__EMX__) && !defined(WINNT) && !defined(GUI) #ifndef HAVE_TERMINFO @@ -872,12 +870,13 @@ int term_init (char *term) } } - li = current_term->TI_lines; - co = current_term->TI_cols; - if (!co) - co = 79; - if (!li) - li = 24; + if (!current_term->TI_cols) + current_term->TI_cols = 79; + if (!current_term->TI_lines) + current_term->TI_lines = 24; + + current_term->li = current_term->TI_lines; + current_term->co = current_term->TI_cols; if (!current_term->TI_nel) current_term->TI_nel = "\n"; @@ -901,7 +900,7 @@ int term_init (char *term) } -#else +#else /* !defined(__EMX__) && !defined(WINNT) && !defined(GUI) */ #if defined(WINNT) && !defined(GUI) CONSOLE_SCREEN_BUFFER_INFO scrbuf; @@ -929,13 +928,13 @@ int term_init (char *term) GetConsoleCursorInfo(hinput, &gcursbuf); GetConsoleScreenBufferInfo(ghstdout, &scrbuf); - li = scrbuf.srWindow.Bottom - scrbuf.srWindow.Top + 1; - co = scrbuf.srWindow.Right - scrbuf.srWindow.Left + 1; + current_term->TI_lines = scrbuf.srWindow.Bottom - scrbuf.srWindow.Top + 1; + current_term->TI_cols = scrbuf.srWindow.Right - scrbuf.srWindow.Left + 1; memset(current_term, 0, sizeof(struct term_struct)); - current_term->TI_lines = li; - current_term->TI_cols = co - 1; + current_term->li = current_term->TI_lines; + current_term->co = current_term->TI_cols - 1; #elif defined(GUI) memset(current_term, 0, sizeof(struct term_struct)); @@ -950,8 +949,8 @@ int term_init (char *term) current_term->TI_lines = vmode.row; current_term->TI_cols = vmode.col; - li = current_term->TI_lines; - co = current_term->TI_cols; + current_term->li = current_term->TI_lines; + current_term->co = current_term->TI_cols; #endif current_term->TI_cup = strdup("\e[%i%d;%dH"); @@ -1248,14 +1247,16 @@ void tty_dup(int tty) dup2(tty, tty_des); } +/* These force the default terminal size, and are used when reattached by scr-bx. + They are then used as the fallback by term_resize(). */ void reset_lines(int nlines) { - li = nlines; + current_term->TI_lines = nlines; } void reset_cols(int cols) { - co = cols; + current_term->TI_cols = cols; } /* @@ -1275,40 +1276,40 @@ int term_resize (void) if (ioctl(tty_des, TIOCGWINSZ, &window) < 0) { - current_term->TI_lines = li; - current_term->TI_cols = co; + current_term->li = current_term->TI_lines; + current_term->co = current_term->TI_cols; } else { - if ((current_term->TI_lines = window.ws_row) == 0) - current_term->TI_lines = li; - if ((current_term->TI_cols = (window.ws_col)) == 0) - current_term->TI_cols = co; + if ((current_term->li = window.ws_row) == 0) + current_term->li = current_term->TI_lines; + if ((current_term->co = window.ws_col) == 0) + current_term->co = current_term->TI_cols; } } # else { - current_term->TI_lines = li; - current_term->TI_cols = co; + current_term->li = current_term->TI_lines; + current_term->co = current_term->TI_cols; } # endif #if use_automargins if (!current_term->TI_am || !current_term->TI_rmam) { - current_term->TI_cols--; + current_term->co--; } #else - current_term->TI_cols--; + current_term->co--; #endif - if ((old_li != current_term->TI_lines) || (old_co != current_term->TI_cols)) + if ((old_li != current_term->li) || (old_co != current_term->co)) { - old_li = current_term->TI_lines; - old_co = current_term->TI_cols; + old_li = current_term->li; + old_co = current_term->co; if (main_screen) { - main_screen->li = current_term->TI_lines; - main_screen->co = current_term->TI_cols; + main_screen->li = current_term->li; + main_screen->co = current_term->co; } return (1); } diff --git a/source/winbitchx.c b/source/winbitchx.c index 023f6a0..92ca39c 100644 --- a/source/winbitchx.c +++ b/source/winbitchx.c @@ -3174,8 +3174,8 @@ void winbx_init(void) ShowWindow(HVTWin, SW_SHOWDEFAULT); ChangeCaret(); - current_term->TI_cols = co = 81; - current_term->TI_lines = li = 25; + current_term->co = current_term->TI_cols = 81; + current_term->li = current_term->TI_lines = 25; #if 0 while (GetMessage(&msg,NULL,0,0)) { @@ -3325,7 +3325,7 @@ void gui_resize(Screen *this_screen) /*cx = this_screen->co * this_screen->VIO_font_width; cy = this_screen->li * this_screen->VIO_font_height;*/ - co = this_screen->co; li = this_screen->li; + current_term->co = this_screen->co; current_term->li = this_screen->li; /* Recalculate some stuff that was done in input.c previously */ this_screen->input_line = this_screen->li-1; diff --git a/source/window.c b/source/window.c index 255da32..95ae2c8 100644 --- a/source/window.c +++ b/source/window.c @@ -940,8 +940,8 @@ void BX_recalculate_windows (Screen *screen) if (dumb_mode) return; #ifdef GUI - current_term->TI_lines = screen->li; - current_term->TI_cols = screen->co; + current_term->li = screen->li; + current_term->co = screen->co; #endif if (!screen) /* it's a hidden window. ignore this */ @@ -951,10 +951,10 @@ void BX_recalculate_windows (Screen *screen) */ if (screen && !screen->current_window) { + int display_size = current_term->li - 2 - screen->window_list->double_status; screen->window_list->top = 0; - screen->window_list->display_size = current_term->TI_lines - 2 - screen->window_list->double_status; - screen->window_list->bottom = current_term->TI_lines - 2 - screen->window_list->double_status; - old_li = current_term->TI_lines; + screen->window_list->display_size = display_size; + screen->window_list->bottom = display_size; return; } @@ -974,7 +974,7 @@ void BX_recalculate_windows (Screen *screen) split += tmp->status_lines; } - excess_li = current_term->TI_lines - old_li - split; + excess_li = current_term->li - old_li - split; for (tmp = screen->window_list; tmp; tmp = tmp->next) {