summaryrefslogtreecommitdiffstats
path: root/lib/libncurses/lib_initscr.c
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>1997-08-25 07:41:15 +0000
committerache <ache@FreeBSD.org>1997-08-25 07:41:15 +0000
commit55ba1a93b942a8056a8829883d191508e4a69dd6 (patch)
tree4cf8660ed14428df6fd32c7453a3283f2b26d63a /lib/libncurses/lib_initscr.c
parente779aaeea32924e0708694dde350540711b5f05e (diff)
downloadFreeBSD-src-55ba1a93b942a8056a8829883d191508e4a69dd6.zip
FreeBSD-src-55ba1a93b942a8056a8829883d191508e4a69dd6.tar.gz
Fix saving/restoring tty modes, allow initscr be called twice,
from ncurses 4.1
Diffstat (limited to 'lib/libncurses/lib_initscr.c')
-rw-r--r--lib/libncurses/lib_initscr.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/libncurses/lib_initscr.c b/lib/libncurses/lib_initscr.c
index 5c9dfc3..1c2d9e3 100644
--- a/lib/libncurses/lib_initscr.c
+++ b/lib/libncurses/lib_initscr.c
@@ -15,17 +15,26 @@
WINDOW *initscr()
{
+static bool initialized = FALSE;
+char *name;
#ifdef TRACE
_init_trace();
T(("initscr() called"));
#endif
- if (newterm(getenv("TERM"), stdout, stdin) == NULL)
- return NULL;
- else {
- def_shell_mode();
+ /* Portable applications must not call initscr() more than once */
+ if (!initialized) {
+ initialized = TRUE;
+
+ if ((name = getenv("TERM")) == 0)
+ name = "unknown";
+ if (newterm(name, stdout, stdin) == 0) {
+ fprintf(stderr, "Error opening terminal: %s.\n", name);
+ exit(1);
+ }
+ /* def_shell_mode - done in newterm */
def_prog_mode();
- return(stdscr);
}
+ return(stdscr);
}
OpenPOWER on IntegriCloud