1 /*- 2 * Copyright (c) 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Kenneth Almquist. 7 * 8 * %sccs.include.redist.c% 9 * 10 * @(#)echo.c 8.2 (Berkeley) 05/04/95 11 */ 12 13 /* 14 * Echo command. 15 */ 16 17 #define main echocmd 18 19 #include "bltin.h" 20 21 /* #define eflag 1 */ 22 23 int 24 main(argc, argv) 25 int argc; 26 char **argv; 27 { 28 register char **ap; 29 register char *p; 30 register char c; 31 int count; 32 int nflag = 0; 33 #ifndef eflag 34 int eflag = 0; 35 #endif 36 37 ap = argv; 38 if (argc) 39 ap++; 40 if ((p = *ap) != NULL) { 41 if (equal(p, "-n")) { 42 nflag++; 43 ap++; 44 } else if (equal(p, "-e")) { 45 #ifndef eflag 46 eflag++; 47 #endif 48 ap++; 49 } 50 } 51 while ((p = *ap++) != NULL) { 52 while ((c = *p++) != '\0') { 53 if (c == '\\' && eflag) { 54 switch (*p++) { 55 case 'b': c = '\b'; break; 56 case 'c': return 0; /* exit */ 57 case 'f': c = '\f'; break; 58 case 'n': c = '\n'; break; 59 case 'r': c = '\r'; break; 60 case 't': c = '\t'; break; 61 case 'v': c = '\v'; break; 62 case '\\': break; /* c = '\\' */ 63 case '0': 64 c = 0; 65 count = 3; 66 while (--count >= 0 && (unsigned)(*p - '0') < 8) 67 c = (c << 3) + (*p++ - '0'); 68 break; 69 default: 70 p--; 71 break; 72 } 73 } 74 putchar(c); 75 } 76 if (*ap) 77 putchar(' '); 78 } 79 if (! nflag) 80 putchar('\n'); 81 return 0; 82 } 83