|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: */
17:
18: #ifndef lint
19: static char sccsid[] = "@(#)getinp.c 5.2 (Berkeley) 6/18/88";
20: #endif /* not lint */
21:
22: # include <stdio.h>
23: # include <ctype.h>
24:
25: # define reg register
26:
27: # define LINE 70
28:
29: static char buf[257];
30:
31: getinp(prompt, list)
32: char *prompt, *list[]; {
33:
34: reg int i, n_match, match;
35: char *sp;
36: int plen;
37:
38:
39: for (;;) {
40: inter:
41: printf(prompt);
42: for (sp = buf; (*sp=getchar()) != '\n'; )
43: if (*sp == -1) /* check for interupted system call */
44: goto inter;
45: else if (sp != buf || *sp != ' ')
46: sp++;
47: if (buf[0] == '?' && buf[1] == '\n') {
48: printf("Valid inputs are: ");
49: for (i = 0, match = 18; list[i]; i++) {
50: if ((match+=(n_match=strlen(list[i]))) > LINE) {
51: printf("\n\t");
52: match = n_match + 8;
53: }
54: if (*list[i] == '\0') {
55: match += 8;
56: printf("<RETURN>");
57: }
58: else
59: printf(list[i]);
60: if (list[i+1])
61: printf(", ");
62: else
63: putchar('\n');
64: match += 2;
65: }
66: continue;
67: }
68: *sp = '\0';
69: for (sp = buf; *sp; sp++)
70: if (isupper(*sp))
71: *sp = tolower(*sp);
72: for (i = n_match = 0; list[i]; i++)
73: if (comp(list[i])) {
74: n_match++;
75: match = i;
76: }
77: if (n_match == 1)
78: return match;
79: else if (buf[0] != '\0')
80: printf("Illegal response: \"%s\". Use '?' to get list of valid answers\n", buf);
81: }
82: }
83:
84: static
85: comp(s1)
86: char *s1; {
87:
88: reg char *sp, *tsp, c;
89:
90: if (buf[0] != '\0')
91: for (sp = buf, tsp = s1; *sp; ) {
92: c = isupper(*tsp) ? tolower(*tsp) : *tsp;
93: tsp++;
94: if (c != *sp++)
95: return 0;
96: }
97: else if (*s1 != '\0')
98: return 0;
99: return 1;
100: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.