/*
 * main_select.c
 *
 * do the work
 *
 */


#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#ifdef X
#include <X/Xlib.h>
#include <sys/time.h>
#endif

#ifdef X
char *
main_select(buf)
	char	*buf;
{
	extern	char *getline();
	extern	Display *display;
	int	mask;
	int	savemask;
	int	fds;
	int	displaymask;

	/*
	 * if we've already read stuff in, then just return with
	 * the goods.
	 */
	displaymask = 0;
	savemask = 0;
	if (display != 0) {
		XFlush(display);
		while (XPending(display))
			win_events();
		displaymask = 1 << display->fd;
		savemask = displaymask;
	}
	if (stdin->_cnt > 0)
		return getline(buf);
	savemask |= 1 << 0;
	while (1) {
		mask = savemask;
		fds = select(32, &mask, 0, 0, 0);
		if (fds < 0) {
			perror("main select");
			return 0;
		}
		if (fds == 0)
			continue;
		if (mask & displaymask) {
			win_events();
		}
		if (mask & 01) {
			return getline(buf);
		}
	}
	/*NOTREACHED*/
}

#else

char *
main_select(buf)
	char	*buf;
{
	char	*getline();

	return getline(buf);
}
#endif
