1/*
2 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
3 * Use is subject to license terms.
4 */
5
6/*	Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T	*/
7/*	  All Rights Reserved  	*/
8
9/*
10 * Copyright (c) 1980 Regents of the University of California.
11 * All rights reserved.  The Berkeley software License Agreement
12 * specifies the terms and conditions for redistribution.
13 */
14
15#pragma ident	"%Z%%M%	%I%	%E% SMI"
16
17/*LINTLIBRARY*/
18
19#ifndef lint
20static char
21sccsid[] = "@(#)scanw.c 1.8 88/02/08 SMI"; /* from UCB 5.1 85/06/07 */
22#endif	/* not lint */
23
24#include	<stdarg.h>
25#include	<string.h>
26
27/*
28 * scanw and friends
29 */
30
31#include	"curses.ext"
32
33/*
34 *	This routine implements a scanf on the standard screen.
35 */
36
37int
38scanw(char *fmt, ...)
39{	int j;
40	va_list ap;
41
42	va_start(ap, fmt);
43	j = _sscans(stdscr, fmt, ap);
44	va_end(ap);
45	return (j);
46}
47
48/*
49 *	This routine implements a scanf on the given window.
50 */
51
52int
53wscanw(WINDOW *win, char *fmt, ...)
54{
55	va_list ap;
56	int j;
57
58	va_start(ap, fmt);
59	j = _sscans(win, fmt, ap);
60	va_end(ap);
61	return (j);
62}
63/*
64 *	This routine actually executes the scanf from the window.
65 *
66 *	This is really a modified version of "sscanf".  As such,
67 * it assumes that sscanf interfaces with the other scanf functions
68 * in a certain way.  If this is not how your system works, you
69 * will have to modify this routine to use the interface that your
70 * "sscanf" uses.
71 */
72
73int
74_sscans(WINDOW *win, char *fmt, va_list	ap)
75{
76	char	buf[100];
77	FILE	junk;
78
79	junk._flag = _IOREAD|_IOWRT;
80	junk._base = junk._ptr = (unsigned char *)buf;
81	if (wgetstr(win, buf) == ERR)
82		return (ERR);
83	junk._cnt = (ssize_t)strlen(buf);
84	return (_doscan(&junk, fmt, ap));
85}
86