X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/f6138c99bc04c12506713ae9badd0552ddfc22e5..679426dc52b7c5ef9223f9ec7065855f81102c78:/monop/getinp.c diff --git a/monop/getinp.c b/monop/getinp.c index 66457448..3d0dc637 100644 --- a/monop/getinp.c +++ b/monop/getinp.c @@ -1,4 +1,4 @@ -/* $NetBSD: getinp.c,v 1.9 2000/07/10 10:19:26 itojun Exp $ */ +/* $NetBSD: getinp.c,v 1.19 2012/06/19 05:35:32 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. * @@ -38,54 +34,48 @@ #if 0 static char sccsid[] = "@(#)getinp.c 8.1 (Berkeley) 5/31/93"; #else -__RCSID("$NetBSD: getinp.c,v 1.9 2000/07/10 10:19:26 itojun Exp $"); +__RCSID("$NetBSD: getinp.c,v 1.19 2012/06/19 05:35:32 dholland Exp $"); #endif #endif /* not lint */ #include #include #include -#include "monop.ext" + +#include "monop.h" #define LINE 70 static char buf[257]; -static int comp __P((const char *)); +static int comp(const char *); int -getinp(prompt, list) - const char *prompt, *const list[]; +getinp(const char *prompt, const char *const lst []) { int i, n_match, match = 0; char *sp; - int c; for (;;) { -inter: printf("%s", 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++; + 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("%s", list[i]); - if (list[i+1]) + printf("%s", lst[i]); + if (lst[i+1]) printf(", "); else putchar('\n'); @@ -93,12 +83,12 @@ 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; } @@ -111,15 +101,14 @@ inter: } static int -comp(s1) - const char *s1; +comp(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;