xref: /original-bsd/sys/stand/gets.c (revision 3705696b)
1 /*-
2  * Copyright (c) 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  *
7  *	@(#)gets.c	8.1 (Berkeley) 06/11/93
8  */
9 
10 gets(buf)
11 	char *buf;
12 {
13 	register int c;
14 	register char *lp;
15 
16 	for (lp = buf;;)
17 		switch (c = getchar() & 0177) {
18 		case '\n':
19 		case '\r':
20 			*lp = '\0';
21 			return;
22 		case '\b':
23 		case '\177':
24 			if (lp > buf) {
25 				lp--;
26 				putchar('\b');
27 				putchar(' ');
28 				putchar('\b');
29 			}
30 			break;
31 		case '#':
32 			if (lp > buf)
33 				--lp;
34 			break;
35 		case 'r'&037: {
36 			register char *p;
37 
38 			putchar('\n');
39 			for (p = buf; p < lp; ++p)
40 				putchar(*p);
41 			break;
42 		}
43 		case '@':
44 		case 'u'&037:
45 		case 'w'&037:
46 			lp = buf;
47 			putchar('\n');
48 			break;
49 		default:
50 			*lp++ = c;
51 		}
52 	/*NOTREACHED*/
53 }
54