|
|
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.