diff options
Diffstat (limited to 'echo.c')
-rw-r--r-- | echo.c | 28 |
1 files changed, 5 insertions, 23 deletions
@@ -40,7 +40,7 @@ extern int | |||
40 | echo_main(int argc, char** argv) | 40 | echo_main(int argc, char** argv) |
41 | { | 41 | { |
42 | register char **ap; | 42 | register char **ap; |
43 | register char *p; | 43 | char *p; |
44 | register char c; | 44 | register char c; |
45 | int nflag = 0; | 45 | int nflag = 0; |
46 | int eflag = 0; | 46 | int eflag = 0; |
@@ -65,28 +65,10 @@ echo_main(int argc, char** argv) | |||
65 | while ((p = *ap++) != NULL) { | 65 | while ((p = *ap++) != NULL) { |
66 | while ((c = *p++) != '\0') { | 66 | while ((c = *p++) != '\0') { |
67 | if (c == '\\' && eflag) { | 67 | if (c == '\\' && eflag) { |
68 | switch (c = *p++) { | 68 | if (*p == 'c') |
69 | case 'a': c = '\007'; break; | 69 | exit(0); |
70 | case 'b': c = '\b'; break; | 70 | else |
71 | case 'c': exit( 0); /* exit */ | 71 | c = process_escape_sequence(&p); |
72 | case 'f': c = '\f'; break; | ||
73 | case 'n': c = '\n'; break; | ||
74 | case 'r': c = '\r'; break; | ||
75 | case 't': c = '\t'; break; | ||
76 | case 'v': c = '\v'; break; | ||
77 | case '\\': break; /* c = '\\' */ | ||
78 | case '0': case '1': case '2': case '3': | ||
79 | case '4': case '5': case '6': case '7': | ||
80 | c -= '0'; | ||
81 | if (*p >= '0' && *p <= '7') | ||
82 | c = c * 8 + (*p++ - '0'); | ||
83 | if (*p >= '0' && *p <= '7') | ||
84 | c = c * 8 + (*p++ - '0'); | ||
85 | break; | ||
86 | default: | ||
87 | p--; | ||
88 | break; | ||
89 | } | ||
90 | } | 72 | } |
91 | putchar(c); | 73 | putchar(c); |
92 | } | 74 | } |