X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/77949edf212dfa805753ec2d69e3e91181793816..31f496067cd42ce5ff71163efa5921ab6522e4aa:/monop/getinp.c diff --git a/monop/getinp.c b/monop/getinp.c index 5de77f8d..48730f77 100644 --- a/monop/getinp.c +++ b/monop/getinp.c @@ -1,4 +1,4 @@ -/* $NetBSD: getinp.c,v 1.5 1997/03/29 20:42:22 thorpej Exp $ */ +/* $NetBSD: getinp.c,v 1.18 2008/02/24 01:57:34 dholland Exp $ */ /* * Copyright (c) 1980, 1993 @@ -12,11 +12,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -33,58 +29,54 @@ * SUCH DAMAGE. */ +#include #ifndef lint #if 0 static char sccsid[] = "@(#)getinp.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$NetBSD: getinp.c,v 1.5 1997/03/29 20:42:22 thorpej Exp $"; +__RCSID("$NetBSD: getinp.c,v 1.18 2008/02/24 01:57:34 dholland Exp $"); #endif #endif /* not lint */ -# include -# include -# include +#include +#include +#include -# define reg register +#include "monop.h" -# define LINE 70 +#define LINE 70 static char buf[257]; -getinp(prompt, list) -char *prompt, *list[]; { +static int comp(const char *); - reg int i, n_match, match; - char *sp; - int c; - int plen; - static int comp(); +int +getinp(prompt, lst) + const char *prompt, *const lst[]; +{ + int i, n_match, match = 0; + char *sp; for (;;) { -inter: - printf(prompt); - for (sp = buf; (c=getchar()) != '\n'; ) { - *sp = c; - if (c == -1) /* check for interupted system call */ - goto inter; - else if (sp != buf || *sp != ' ') - sp++; + printf("%s", prompt); + fgets(buf, sizeof(buf), stdin); + if (feof(stdin)) { + return 0; } - *sp = c; if (buf[0] == '?' && buf[1] == '\n') { printf("Valid inputs are: "); - for (i = 0, match = 18; list[i]; i++) { - if ((match+=(n_match=strlen(list[i]))) > LINE) { + for (i = 0, match = 18; lst[i]; i++) { + if ((match+=(n_match=strlen(lst[i]))) > LINE) { printf("\n\t"); match = n_match + 8; } - if (*list[i] == '\0') { + if (*lst[i] == '\0') { match += 8; printf(""); } else - printf(list[i]); - if (list[i+1]) + printf("%s", lst[i]); + if (lst[i+1]) printf(", "); else putchar('\n'); @@ -92,31 +84,33 @@ inter: } continue; } - *sp = '\0'; + if ((sp = strchr(buf, '\n')) != NULL) + *sp = '\0'; for (sp = buf; *sp; sp++) - if (isupper(*sp)) - *sp = tolower(*sp); - for (i = n_match = 0; list[i]; i++) - if (comp(list[i])) { + *sp = tolower((unsigned char)*sp); + for (i = n_match = 0; lst[i]; i++) + if (comp(lst[i])) { n_match++; match = i; } if (n_match == 1) return match; else if (buf[0] != '\0') - printf("Illegal response: \"%s\". Use '?' to get list of valid answers\n", buf); + printf("Illegal response: \"%s\". " + "Use '?' to get list of valid answers\n", buf); } } -static +static int comp(s1) -char *s1; { - - reg char *sp, *tsp, c; + const char *s1; +{ + const char *sp, *tsp; + char c; if (buf[0] != '\0') for (sp = buf, tsp = s1; *sp; ) { - c = isupper(*tsp) ? tolower(*tsp) : *tsp; + c = tolower((unsigned char)*tsp); tsp++; if (c != *sp++) return 0;