X-Git-Url: http://ncurses.scripts.mit.edu/?a=blobdiff_plain;ds=sidebyside;f=ncurses%2Fbase%2Flib_getstr.c;fp=ncurses%2Fbase%2Flib_getstr.c;h=cac21fc85bd9fa9402aa74c0b0e591cd061e6bdb;hb=6fd6dd99d32385a01ca639d1d56b90b13e9c1d33;hp=8ddf7651a6719b110cf50f00ad717f252f8f44ff;hpb=7723dd6799ab10b32047ec73b14df9f107bafe99;p=ncurses.git diff --git a/ncurses/base/lib_getstr.c b/ncurses/base/lib_getstr.c index 8ddf7651..cac21fc8 100644 --- a/ncurses/base/lib_getstr.c +++ b/ncurses/base/lib_getstr.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2018-2020,2021 Thomas E. Dickey * + * Copyright 2018-2021,2023 Thomas E. Dickey * * Copyright 1998-2011,2017 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * @@ -42,7 +42,7 @@ #define NEED_KEY_EVENT #include -MODULE_ID("$Id: lib_getstr.c,v 1.38 2021/10/23 19:02:39 tom Exp $") +MODULE_ID("$Id: lib_getstr.c,v 1.39 2023/04/29 19:00:17 tom Exp $") /* * This wipes out the last character, no matter whether it was a tab, control @@ -78,7 +78,7 @@ wgetnstr_events(WINDOW *win, { SCREEN *sp = _nc_screen_of(win); TTY buf; - bool oldnl, oldecho, oldraw, oldcbreak; + TTY_FLAGS save_flags; char erasec; char killc; char *oldstr; @@ -94,13 +94,11 @@ wgetnstr_events(WINDOW *win, NCURSES_SP_NAME(_nc_get_tty_mode) (NCURSES_SP_ARGx &buf); - oldnl = sp->_nl; - oldecho = sp->_echo; - oldraw = sp->_raw; - oldcbreak = sp->_cbreak; + save_flags = sp->_tty_flags; NCURSES_SP_NAME(nl) (NCURSES_SP_ARG); NCURSES_SP_NAME(noecho) (NCURSES_SP_ARG); - NCURSES_SP_NAME(raw) (NCURSES_SP_ARG); + if (!save_flags._raw) + NCURSES_SP_NAME(cbreak) (NCURSES_SP_ARG); erasec = NCURSES_SP_NAME(erasechar) (NCURSES_SP_ARG); killc = NCURSES_SP_NAME(killchar) (NCURSES_SP_ARG); @@ -122,7 +120,7 @@ wgetnstr_events(WINDOW *win, || ch == '\r' || ch == KEY_DOWN || ch == KEY_ENTER) { - if (oldecho == TRUE + if (save_flags._echo == TRUE && win->_cury == win->_maxy && win->_scroll) wechochar(win, (chtype) '\n'); @@ -138,18 +136,18 @@ wgetnstr_events(WINDOW *win, #endif if (ch == erasec || ch == KEY_LEFT || ch == KEY_BACKSPACE) { if (str > oldstr) { - str = WipeOut(win, y, x, oldstr, str, oldecho); + str = WipeOut(win, y, x, oldstr, str, save_flags._echo); } } else if (ch == killc) { while (str > oldstr) { - str = WipeOut(win, y, x, oldstr, str, oldecho); + str = WipeOut(win, y, x, oldstr, str, save_flags._echo); } } else if (ch >= KEY_MIN || (str - oldstr >= maxlen)) { NCURSES_SP_NAME(beep) (NCURSES_SP_ARG); } else { *str++ = (char) ch; - if (oldecho == TRUE) { + if (save_flags._echo == TRUE) { int oldy = win->_cury; if (waddch(win, (chtype) ch) == ERR) { /* @@ -159,7 +157,7 @@ wgetnstr_events(WINDOW *win, */ win->_flags &= ~_WRAPPED; waddch(win, (chtype) ' '); - str = WipeOut(win, y, x, oldstr, str, oldecho); + str = WipeOut(win, y, x, oldstr, str, save_flags._echo); continue; } else if (IS_WRAPPED(win)) { /* @@ -190,11 +188,7 @@ wgetnstr_events(WINDOW *win, /* Restore with a single I/O call, to fix minor asymmetry between * raw/noraw, etc. */ - sp->_nl = oldnl; - sp->_echo = oldecho; - sp->_raw = oldraw; - sp->_cbreak = oldcbreak; - + sp->_tty_flags = save_flags; NCURSES_SP_NAME(_nc_set_tty_mode) (NCURSES_SP_ARGx &buf); *str = '\0';