misc cleanup
[unix-history] / usr / src / bin / sh / bltin / echo.c
CommitLineData
7f473204 1/*-
d1b73048
KB
2 * Copyright (c) 1991, 1993
3 * The Regents of the University of California. All rights reserved.
7f473204
KB
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Kenneth Almquist.
7 *
8 * %sccs.include.redist.c%
9 *
cbfe5a6d 10 * @(#)echo.c 8.2 (Berkeley) %G%
7f473204
KB
11 */
12
13/*
14 * Echo command.
15 */
16
17#define main echocmd
18
19#include "bltin.h"
20
ddba57cd 21/* #define eflag 1 */
7f473204 22
cbfe5a6d
CZ
23int
24main(argc, argv)
25 int argc;
26 char **argv;
27{
ddba57cd 28 register char **ap;
7f473204
KB
29 register char *p;
30 register char c;
31 int count;
32 int nflag = 0;
ddba57cd 33#ifndef eflag
7f473204 34 int eflag = 0;
ddba57cd 35#endif
7f473204 36
ddba57cd
MT
37 ap = argv;
38 if (argc)
39 ap++;
40 if ((p = *ap) != NULL) {
41 if (equal(p, "-n")) {
7f473204 42 nflag++;
ddba57cd
MT
43 ap++;
44 } else if (equal(p, "-e")) {
45#ifndef eflag
7f473204 46 eflag++;
ddba57cd
MT
47#endif
48 ap++;
7f473204 49 }
ddba57cd
MT
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;
7f473204 72 }
7f473204 73 }
ddba57cd 74 putchar(c);
7f473204 75 }
ddba57cd
MT
76 if (*ap)
77 putchar(' ');
7f473204 78 }
ddba57cd 79 if (! nflag)
7f473204
KB
80 putchar('\n');
81 return 0;
82}