X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fwidechar%2Flib_get_wstr.c;h=695b5263946ab32569e2e76bae8a189fdf3ab474;hp=bf39aa1a188bf26f801c2c4a2e4dbd28636c5e98;hb=a6ff7e087fd944fd0035075d0bb528e95e498d81;hpb=55ccd2b959766810cf7db8d1c4462f338ce0afc8 diff --git a/ncurses/widechar/lib_get_wstr.c b/ncurses/widechar/lib_get_wstr.c index bf39aa1a..695b5263 100644 --- a/ncurses/widechar/lib_get_wstr.c +++ b/ncurses/widechar/lib_get_wstr.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 2002-2003,2004 Free Software Foundation, Inc. * + * Copyright 2018,2020 Thomas E. Dickey * + * Copyright 2002-2009,2011 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -38,9 +39,8 @@ */ #include -#include -MODULE_ID("$Id: lib_get_wstr.c,v 1.8 2004/10/16 21:55:36 tom Exp $") +MODULE_ID("$Id: lib_get_wstr.c,v 1.16 2020/02/02 23:34:34 tom Exp $") static int wadd_wint(WINDOW *win, wint_t *src) @@ -48,9 +48,9 @@ wadd_wint(WINDOW *win, wint_t *src) cchar_t tmp; wchar_t wch[2]; - wch[0] = *src; + wch[0] = (wchar_t) (*src); wch[1] = 0; - setcchar(&tmp, wch, A_NORMAL, 0, NULL); + setcchar(&tmp, wch, A_NORMAL, (short) 0, NULL); return wadd_wch(win, &tmp); } @@ -59,7 +59,7 @@ wadd_wint(WINDOW *win, wint_t *src) * or other character, and handles reverse wraparound. */ static wint_t * -WipeOut(WINDOW *win, int y, int x, wint_t *first, wint_t *last, bool echoed) +WipeOut(WINDOW *win, int y, int x, wint_t *first, wint_t *last, int echoed) { if (last > first) { *--last = '\0'; @@ -86,6 +86,7 @@ WipeOut(WINDOW *win, int y, int x, wint_t *first, wint_t *last, bool echoed) NCURSES_EXPORT(int) wgetn_wstr(WINDOW *win, wint_t *str, int maxlen) { + SCREEN *sp = _nc_screen_of(win); TTY buf; bool oldnl, oldecho, oldraw, oldcbreak; wint_t erasec; @@ -95,24 +96,26 @@ wgetn_wstr(WINDOW *win, wint_t *str, int maxlen) wint_t ch; int y, x, code; - T((T_CALLED("wgetn_wstr(%p,%p, %d)"), win, str, maxlen)); + T((T_CALLED("wgetn_wstr(%p,%p, %d)"), (void *) win, (void *) str, maxlen)); if (!win) returnCode(ERR); + maxlen = _nc_getstr_limit(maxlen); + _nc_get_tty_mode(&buf); - oldnl = SP->_nl; - oldecho = SP->_echo; - oldraw = SP->_raw; - oldcbreak = SP->_cbreak; + oldnl = sp->_nl; + oldecho = sp->_echo; + oldraw = sp->_raw; + oldcbreak = sp->_cbreak; nl(); noecho(); noraw(); cbreak(); - erasec = erasechar(); - killc = killchar(); + erasec = (wint_t) erasechar(); + killc = (wint_t) killchar(); getyx(win, y, x); @@ -164,7 +167,7 @@ wgetn_wstr(WINDOW *win, wint_t *str, int maxlen) } else { beep(); } - } else if (maxlen >= 0 && tmpstr - oldstr >= maxlen) { + } else if (tmpstr - oldstr >= maxlen) { beep(); } else { *tmpstr++ = ch; @@ -209,10 +212,10 @@ wgetn_wstr(WINDOW *win, wint_t *str, int maxlen) /* 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->_nl = oldnl; + sp->_echo = oldecho; + sp->_raw = oldraw; + sp->_cbreak = oldcbreak; (void) _nc_set_tty_mode(&buf);