1 /* 2 * Copyright (c) 1981 Regents of the University of California. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. All advertising materials mentioning features or use of this software 14 * must display the following acknowledgement: 15 * This product includes software developed by the University of 16 * California, Berkeley and its contributors. 17 * 4. Neither the name of the University nor the names of its contributors 18 * may be used to endorse or promote products derived from this software 19 * without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 */ 33 34 #ifndef lint 35 /*static char sccsid[] = "from: @(#)scanw.c 5.10 (Berkeley) 8/31/92";*/ 36 static char rcsid[] = "$Id: scanw.c,v 1.3 1993/08/07 05:49:05 mycroft Exp $"; 37 #endif /* not lint */ 38 39 /* 40 * scanw and friends. 41 */ 42 43 #include <curses.h> 44 45 #if __STDC__ 46 #include <stdarg.h> 47 #else 48 #include <varargs.h> 49 #endif 50 51 static int __sscans __P((WINDOW *, const char *, va_list)); 52 53 /* 54 * scanw -- 55 * Implement a scanf on the standard screen. 56 */ 57 int 58 #if __STDC__ 59 scanw(const char *fmt, ...) 60 #else 61 scanw(fmt, va_alist) 62 char *fmt; 63 va_dcl 64 #endif 65 { 66 va_list ap; 67 int ret; 68 69 #if __STDC__ 70 va_start(ap, fmt); 71 #else 72 va_start(ap); 73 #endif 74 ret = __sscans(stdscr, fmt, ap); 75 va_end(ap); 76 return (ret); 77 } 78 79 /* 80 * wscanw -- 81 * Implements a scanf on the given window. 82 */ 83 int 84 #if __STDC__ 85 wscanw(WINDOW *win, const char *fmt, ...) 86 #else 87 wscanw(win, fmt, va_alist) 88 WINDOW *win; 89 char *fmt; 90 va_dcl 91 #endif 92 { 93 va_list ap; 94 int ret; 95 96 #if __STDC__ 97 va_start(ap, fmt); 98 #else 99 va_start(ap); 100 #endif 101 ret = __sscans(win, fmt, ap); 102 va_end(ap); 103 return (ret); 104 } 105 106 /* 107 * mvscanw, mvwscanw -- 108 * Implement the mvscanw commands. Due to the variable number of 109 * arguments, they cannot be macros. Another sigh.... 110 */ 111 int 112 #if __STDC__ 113 mvscanw(register int y, register int x, const char *fmt,...) 114 #else 115 mvscanw(y, x, fmt, va_alist) 116 register int y, x; 117 char *fmt; 118 va_dcl 119 #endif 120 { 121 va_list ap; 122 int ret; 123 124 if (move(y, x) != OK) 125 return (ERR); 126 #if __STDC__ 127 va_start(ap, fmt); 128 #else 129 va_start(ap); 130 #endif 131 ret = __sscans(stdscr, fmt, ap); 132 va_end(ap); 133 return (ret); 134 } 135 136 int 137 #if __STDC__ 138 mvwscanw(register WINDOW * win, register int y, register int x, 139 const char *fmt, ...) 140 #else 141 mvwscanw(win, y, x, fmt, va_alist) 142 register WINDOW *win; 143 register int y, x; 144 char *fmt; 145 va_dcl 146 #endif 147 { 148 va_list ap; 149 int ret; 150 151 if (move(y, x) != OK) 152 return (ERR); 153 #if __STDC__ 154 va_start(ap, fmt); 155 #else 156 va_start(ap); 157 #endif 158 ret = __sscans(win, fmt, ap); 159 va_end(ap); 160 return (ret); 161 } 162 163 /* 164 * __sscans -- 165 * This routine actually executes the scanf from the window. 166 * THIS SHOULD BE RENAMED vwscanw AND EXPORTED 167 */ 168 static int 169 __sscans(win, fmt, ap) 170 WINDOW *win; 171 const char *fmt; 172 va_list ap; 173 { 174 175 char buf[1024]; 176 177 return (wgetstr(win, buf) == OK ? vsscanf(buf, fmt, ap) : ERR); 178 } 179