? 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;
 }