1 /**************************************************************************** 2 * Copyright 2018-2019,2020 Thomas E. Dickey * 3 * Copyright 1998-2009,2011 Free Software Foundation, Inc. * 4 * * 5 * Permission is hereby granted, free of charge, to any person obtaining a * 6 * copy of this software and associated documentation files (the * 7 * "Software"), to deal in the Software without restriction, including * 8 * without limitation the rights to use, copy, modify, merge, publish, * 9 * distribute, distribute with modifications, sublicense, and/or sell * 10 * copies of the Software, and to permit persons to whom the Software is * 11 * furnished to do so, subject to the following conditions: * 12 * * 13 * The above copyright notice and this permission notice shall be included * 14 * in all copies or substantial portions of the Software. * 15 * * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * 17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * 19 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * 20 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * 21 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * 22 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * 23 * * 24 * Except as contained in this notice, the name(s) of the above copyright * 25 * holders shall not be used in advertising or otherwise to promote the * 26 * sale, use or other dealings in this Software without prior written * 27 * authorization. * 28 ****************************************************************************/ 29 30 /**************************************************************************** 31 * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 * 32 * and: Eric S. Raymond <esr@snark.thyrsus.com> * 33 ****************************************************************************/ 34 35 /* 36 ** lib_scanw.c 37 ** 38 ** The routines scanw(), wscanw() and friends. 39 ** 40 */ 41 42 #include <curses.priv.h> 43 44 MODULE_ID("$Id: lib_scanw.c,v 1.19 2020/02/02 23:34:34 tom Exp $") 45 46 NCURSES_EXPORT(int) 47 vwscanw(WINDOW *win, const char *fmt, va_list argp) 48 { 49 char buf[BUFSIZ]; 50 int code = ERR; 51 52 if (wgetnstr(win, buf, (int) sizeof(buf) - 1) != ERR) { 53 if ((code = vsscanf(buf, fmt, argp)) == EOF) { 54 code = ERR; 55 } 56 } 57 58 return code; 59 } 60 61 NCURSES_EXPORT(int) 62 vw_scanw(WINDOW *win, const char *fmt, va_list argp) 63 { 64 char buf[BUFSIZ]; 65 int code = ERR; 66 67 if (wgetnstr(win, buf, (int) sizeof(buf) - 1) != ERR) { 68 if ((code = vsscanf(buf, fmt, argp)) == EOF) { 69 code = ERR; 70 } 71 } 72 73 return code; 74 } 75 76 NCURSES_EXPORT(int) 77 scanw(const char *fmt, ...) 78 { 79 int code; 80 va_list ap; 81 82 T(("scanw(\"%s\",...) called", fmt)); 83 84 va_start(ap, fmt); 85 code = vw_scanw(stdscr, fmt, ap); 86 va_end(ap); 87 return (code); 88 } 89 90 NCURSES_EXPORT(int) 91 wscanw(WINDOW *win, const char *fmt, ...) 92 { 93 int code; 94 va_list ap; 95 96 T(("wscanw(%p,\"%s\",...) called", (void *) win, fmt)); 97 98 va_start(ap, fmt); 99 code = vw_scanw(win, fmt, ap); 100 va_end(ap); 101 return (code); 102 } 103 104 NCURSES_EXPORT(int) 105 mvscanw(int y, int x, const char *fmt, ...) 106 { 107 int code; 108 va_list ap; 109 110 va_start(ap, fmt); 111 code = (move(y, x) == OK) ? vw_scanw(stdscr, fmt, ap) : ERR; 112 va_end(ap); 113 return (code); 114 } 115 116 NCURSES_EXPORT(int) 117 mvwscanw(WINDOW *win, int y, int x, const char *fmt, ...) 118 { 119 int code; 120 va_list ap; 121 122 va_start(ap, fmt); 123 code = (wmove(win, y, x) == OK) ? vw_scanw(win, fmt, ap) : ERR; 124 va_end(ap); 125 return (code); 126 } 127