From 880234af7eb36a86d6adfa775327ccec592d519d Mon Sep 17 00:00:00 2001 From: dsl Date: Thu, 10 Jul 2003 12:50:18 +0000 Subject: [PATCH] Stop def_prog_mode() saving incorrect termio settings. Make set_prog_mode() set the correct settings. I'm not certain how much restoration set_prog_mode() should do, but it definitely doesn't want to do all of __restartwin(). Maybe __restartwin() should be calling set_prog_mode()? --- lib/libcurses/tstp.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/libcurses/tstp.c b/lib/libcurses/tstp.c index f1bb8d91865f8..4f4812a51560e 100644 --- a/lib/libcurses/tstp.c +++ b/lib/libcurses/tstp.c @@ -1,4 +1,4 @@ -/* $NetBSD: tstp.c,v 1.28 2003/05/28 20:19:42 dsl Exp $ */ +/* $NetBSD: tstp.c,v 1.29 2003/07/10 12:50:18 dsl Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)tstp.c 8.3 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: tstp.c,v 1.28 2003/05/28 20:19:42 dsl Exp $"); +__RCSID("$NetBSD: tstp.c,v 1.29 2003/07/10 12:50:18 dsl Exp $"); #endif #endif /* not lint */ @@ -145,8 +145,8 @@ __stopwin(void) _cursesi_screen->endwin = 1; - return (tcsetattr(fileno(_cursesi_screen->infd), __tcaction ? - TCSASOFT | TCSADRAIN : TCSADRAIN, + return (tcsetattr(fileno(_cursesi_screen->infd), + __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, &_cursesi_screen->orig_termios) ? ERR : OK); } @@ -166,8 +166,7 @@ __restartwin(void) /* Reset the terminal state to the mode just before we stopped. */ (void) tcsetattr(fileno(_cursesi_screen->infd), - __tcaction ? - TCSASOFT | TCSADRAIN : TCSADRAIN, + __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, &_cursesi_screen->save_termios); /* Restore colours */ @@ -189,6 +188,9 @@ __restartwin(void) int def_prog_mode(void) { + if (_cursesi_screen->endwin) + return ERR; + return (tcgetattr(fileno(_cursesi_screen->infd), &_cursesi_screen->save_termios) ? ERR : OK); } @@ -196,8 +198,10 @@ def_prog_mode(void) int reset_prog_mode(void) { - __restartwin(); - return(OK); + + return tcsetattr(fileno(_cursesi_screen->infd), + __tcaction ? TCSASOFT | TCSADRAIN : TCSADRAIN, + &_cursesi_screen->save_termios) ? ERR : OK; } int