Commit | Line | Data |
---|---|---|
3f62363f KB |
1 | /* |
2 | * Copyright (c) 1988 Regents of the University of California. | |
3 | * All rights reserved. | |
4 | * | |
dbf0c423 | 5 | * %sccs.include.redist.c% |
3f62363f | 6 | * |
dbf0c423 | 7 | * @(#)gets.c 7.5 (Berkeley) %G% |
3f62363f KB |
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': | |
ebfc8f7c | 23 | case '\177': |
3f62363f KB |
24 | if (lp > buf) { |
25 | lp--; | |
26 | putchar('\b'); | |
27 | putchar(' '); | |
28 | putchar('\b'); | |
29 | } | |
30 | break; | |
31 | case '#': | |
3f62363f KB |
32 | if (lp > buf) |
33 | --lp; | |
34 | break; | |
efd2fb19 KB |
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 | } | |
3f62363f KB |
43 | case '@': |
44 | case 'u'&037: | |
efd2fb19 | 45 | case 'w'&037: |
3f62363f KB |
46 | lp = buf; |
47 | putchar('\n'); | |
48 | break; | |
49 | default: | |
50 | *lp++ = c; | |
51 | } | |
52 | /*NOTREACHED*/ | |
53 | } |