1 /* 2 * Copyright (c) 1981 Regents of the University of California. 3 * All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 */ 7 8 #ifndef lint 9 static char sccsid[] = "@(#)scanw.c 5.10 (Berkeley) 08/31/92"; 10 #endif /* not lint */ 11 12 /* 13 * scanw and friends. 14 */ 15 16 #include <curses.h> 17 18 #if __STDC__ 19 #include <stdarg.h> 20 #else 21 #include <varargs.h> 22 #endif 23 24 static int __sscans __P((WINDOW *, const char *, va_list)); 25 26 /* 27 * scanw -- 28 * Implement a scanf on the standard screen. 29 */ 30 int 31 #if __STDC__ 32 scanw(const char *fmt, ...) 33 #else 34 scanw(fmt, va_alist) 35 char *fmt; 36 va_dcl 37 #endif 38 { 39 va_list ap; 40 int ret; 41 42 #if __STDC__ 43 va_start(ap, fmt); 44 #else 45 va_start(ap); 46 #endif 47 ret = __sscans(stdscr, fmt, ap); 48 va_end(ap); 49 return (ret); 50 } 51 52 /* 53 * wscanw -- 54 * Implements a scanf on the given window. 55 */ 56 int 57 #if __STDC__ 58 wscanw(WINDOW *win, const char *fmt, ...) 59 #else 60 wscanw(win, fmt, va_alist) 61 WINDOW *win; 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(win, fmt, ap); 75 va_end(ap); 76 return (ret); 77 } 78 79 /* 80 * mvscanw, mvwscanw -- 81 * Implement the mvscanw commands. Due to the variable number of 82 * arguments, they cannot be macros. Another sigh.... 83 */ 84 int 85 #if __STDC__ 86 mvscanw(register int y, register int x, const char *fmt,...) 87 #else 88 mvscanw(y, x, fmt, va_alist) 89 register int y, x; 90 char *fmt; 91 va_dcl 92 #endif 93 { 94 va_list ap; 95 int ret; 96 97 if (move(y, x) != OK) 98 return (ERR); 99 #if __STDC__ 100 va_start(ap, fmt); 101 #else 102 va_start(ap); 103 #endif 104 ret = __sscans(stdscr, fmt, ap); 105 va_end(ap); 106 return (ret); 107 } 108 109 int 110 #if __STDC__ 111 mvwscanw(register WINDOW * win, register int y, register int x, 112 const char *fmt, ...) 113 #else 114 mvwscanw(win, y, x, fmt, va_alist) 115 register WINDOW *win; 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(win, fmt, ap); 132 va_end(ap); 133 return (ret); 134 } 135 136 /* 137 * __sscans -- 138 * This routine actually executes the scanf from the window. 139 * THIS SHOULD BE RENAMED vwscanw AND EXPORTED 140 */ 141 static int 142 __sscans(win, fmt, ap) 143 WINDOW *win; 144 const char *fmt; 145 va_list ap; 146 { 147 148 char buf[1024]; 149 150 return (wgetstr(win, buf) == OK ? vsscanf(buf, fmt, ap) : ERR); 151 } 152