diff options
author | ache <ache@FreeBSD.org> | 1997-08-25 07:41:15 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 1997-08-25 07:41:15 +0000 |
commit | 55ba1a93b942a8056a8829883d191508e4a69dd6 (patch) | |
tree | 4cf8660ed14428df6fd32c7453a3283f2b26d63a /lib/libncurses/lib_initscr.c | |
parent | e779aaeea32924e0708694dde350540711b5f05e (diff) | |
download | FreeBSD-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.c | 19 |
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); } |