? o ? x Index: curses.c =================================================================== RCS file: /cvsroot/src/lib/libcurses/curses.c,v retrieving revision 1.27 diff -u -u -r1.27 curses.c --- curses.c 30 Jan 2017 14:55:58 -0000 1.27 +++ curses.c 30 Jan 2017 18:06:43 -0000 @@ -64,10 +64,10 @@ WINDOW *stdscr; /* Standard screen. */ WINDOW *__virtscr; /* Virtual screen (for doupdate()). */ SCREEN *_cursesi_screen; /* the current screen we are using */ -volatile bool _reentrant; /* If true, some global vars are ro. */ int COLS; /* Columns on the screen. */ int LINES; /* Lines on the screen. */ -int TABSIZE; /* Size of a tab. */ +int TABSIZE = -1; /* Size of a tab. */ +int ESCDELAY = -1; /* Delay betwen keys for esc seq's */ int COLORS; /* Maximum colors on the screen */ int COLOR_PAIRS = 0; /* Maximum color pairs on the screen */ int My_term = 0; /* Use Def_term regardless. */ Index: curses_private.h =================================================================== RCS file: /cvsroot/src/lib/libcurses/curses_private.h,v retrieving revision 1.61 diff -u -u -r1.61 curses_private.h --- curses_private.h 30 Jan 2017 14:55:58 -0000 1.61 +++ curses_private.h 30 Jan 2017 18:06:43 -0000 @@ -314,7 +314,6 @@ extern int My_term; /* Use Def_term regardless. */ extern const char *Def_term; /* Default terminal type. */ extern SCREEN *_cursesi_screen; /* The current screen in use */ -extern volatile bool _reentrant; /* If true, some global vars are ro. */ /* Debugging options/functions. */ #ifdef DEBUG Index: get_wch.c =================================================================== RCS file: /cvsroot/src/lib/libcurses/get_wch.c,v retrieving revision 1.13 diff -u -u -r1.13 get_wch.c --- get_wch.c 30 Jan 2017 14:55:58 -0000 1.13 +++ get_wch.c 30 Jan 2017 18:06:43 -0000 @@ -91,8 +91,7 @@ *working = &_cursesi_screen->cbuf_cur, *end = &_cursesi_screen->cbuf_tail; char *inbuf = &_cursesi_screen->cbuf[ 0 ]; - int escdelay = _reentrant ? - _cursesi_screen->ESCDELAY : ESCDELAY; + int escdelay = _cursesi_screen->ESCDELAY; #ifdef DEBUG __CTRACE(__CTRACE_INPUT, "inkey (%p, %d, %d)\n", wc, to, delay); Index: getch.c =================================================================== RCS file: /cvsroot/src/lib/libcurses/getch.c,v retrieving revision 1.63 diff -u -u -r1.63 getch.c --- getch.c 30 Jan 2017 14:55:58 -0000 1.63 +++ getch.c 30 Jan 2017 18:06:43 -0000 @@ -203,8 +203,6 @@ /* Number of TC entries .... */ static const int num_tcs = (sizeof(tc) / sizeof(struct tcdata)); -int ESCDELAY; /* Delay in ms between keys for esc seq's */ - /* Key buffer */ #define INBUF_SZ 16 /* size of key buffer - must be larger than * longest multi-key sequence */ @@ -550,8 +548,7 @@ int c, mapping; keymap_t *current = _cursesi_screen->base_keymap; FILE *infd = _cursesi_screen->infd; - int escdelay = _reentrant ? - _cursesi_screen->ESCDELAY : ESCDELAY; + int escdelay = _cursesi_screen->ESCDELAY; k = 0; /* XXX gcc -Wuninitialized */ @@ -988,8 +985,10 @@ set_escdelay(int escdelay) { + if (_cursesi_screen == NULL) { + ESCDELAY = escdelay; + return ERR; + } _cursesi_screen->ESCDELAY = escdelay; - _reentrant = true; - ESCDELAY = escdelay; return OK; } Index: ins_wch.c =================================================================== RCS file: /cvsroot/src/lib/libcurses/ins_wch.c,v retrieving revision 1.10 diff -u -u -r1.10 ins_wch.c --- ins_wch.c 30 Jan 2017 14:55:58 -0000 1.10 +++ ins_wch.c 30 Jan 2017 18:06:43 -0000 @@ -146,7 +146,7 @@ } return OK; case L'\t': - tabsize = _reentrant ? win->screen->TABSIZE : TABSIZE; + tabsize = win->screen->TABSIZE; if (wins_nwstr(win, ws, min(win->maxx - x, tabsize - (x % tabsize))) == ERR) return ERR; Index: ins_wstr.c =================================================================== RCS file: /cvsroot/src/lib/libcurses/ins_wstr.c,v retrieving revision 1.10 diff -u -u -r1.10 ins_wstr.c --- ins_wstr.c 30 Jan 2017 14:55:58 -0000 1.10 +++ ins_wstr.c 30 Jan 2017 18:06:43 -0000 @@ -266,8 +266,7 @@ } continue; case L'\t': - tabsize = _reentrant ? - win->screen->TABSIZE : TABSIZE; + tabsize = win->screen->TABSIZE; if (wins_nwstr(win, ws, min(win->maxx - x, tabsize - (x % tabsize))) == ERR) Index: setterm.c =================================================================== RCS file: /cvsroot/src/lib/libcurses/setterm.c,v retrieving revision 1.62 diff -u -u -r1.62 setterm.c --- setterm.c 30 Jan 2017 14:55:58 -0000 1.62 +++ setterm.c 30 Jan 2017 18:06:43 -0000 @@ -136,12 +136,17 @@ } if ((p = getenv("ESCDELAY")) != NULL) screen->ESCDELAY = (int)strtol(p, NULL, 0); + else if (ESCDELAY != -1) + screen->ESCDELAY = ESCDELAY; else screen->ESCDELAY = ESCDELAY_DEFAULT; + if ((p = getenv("TABSIZE")) != NULL) screen->TABSIZE = (int)strtol(p, NULL, 0); else if (t_init_tabs(screen->term) >= 0) screen->TABSIZE = (int)t_init_tabs(screen->term); + else if (TABSIZE != -1) + screen->TABSIZE = TABSIZE; else screen->TABSIZE = TABSIZE_DEFAULT; /* @@ -152,13 +157,11 @@ LINES = screen->LINES - __rippedlines(screen); COLS = screen->COLS; - ESCDELAY = screen->ESCDELAY; - TABSIZE = screen->TABSIZE; #ifdef DEBUG __CTRACE(__CTRACE_INIT, - "setterm: LINES = %d, COLS = %d, TABSIZE = %d\n", - LINES, COLS, TABSIZE); + "setterm: LINES = %d, COLS = %d, TABSIZE = %d ESCDELAY = %d\n", + LINES, COLS, screen->TABSIZE, screen->ESCDELAY); #endif /* @@ -284,8 +287,10 @@ LINES = screen->LINES - __rippedlines(screen); COLS = screen->COLS; - ESCDELAY = screen->ESCDELAY; - TABSIZE = screen->TABSIZE; + if (ESCDELAY != -1) + ESCDELAY = screen->ESCDELAY; + if (TABSIZE != -1) + TABSIZE = screen->TABSIZE; __GT = screen->GT; __noqch = screen->noqch; @@ -402,9 +407,10 @@ int set_tabsize(int tabsize) { - + if (_cursesi_screen == NULL) { + TABSIZE = tabsize; + return ERR; + } _cursesi_screen->TABSIZE = tabsize; - _reentrant = true; - TABSIZE = tabsize; return OK; }