4.4BSD snapshot (revision 8.1)
[unix-history] / usr / src / bin / sh / bltin / echo.c
CommitLineData
7f473204
KB
1/*-
2 * Copyright (c) 1991 The Regents of the University of California.
3 * 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 *
ddba57cd 10 * @(#)echo.c 5.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
ddba57cd
MT
23main(argc, argv) char **argv; {
24 register char **ap;
7f473204
KB
25 register char *p;
26 register char c;
27 int count;
28 int nflag = 0;
ddba57cd 29#ifndef eflag
7f473204 30 int eflag = 0;
ddba57cd 31#endif
7f473204 32
ddba57cd
MT
33 ap = argv;
34 if (argc)
35 ap++;
36 if ((p = *ap) != NULL) {
37 if (equal(p, "-n")) {
7f473204 38 nflag++;
ddba57cd
MT
39 ap++;
40 } else if (equal(p, "-e")) {
41#ifndef eflag
7f473204 42 eflag++;
ddba57cd
MT
43#endif
44 ap++;
7f473204 45 }
ddba57cd
MT
46 }
47 while ((p = *ap++) != NULL) {
48 while ((c = *p++) != '\0') {
49 if (c == '\\' && eflag) {
50 switch (*p++) {
51 case 'b': c = '\b'; break;
52 case 'c': return 0; /* exit */
53 case 'f': c = '\f'; break;
54 case 'n': c = '\n'; break;
55 case 'r': c = '\r'; break;
56 case 't': c = '\t'; break;
57 case 'v': c = '\v'; break;
58 case '\\': break; /* c = '\\' */
59 case '0':
60 c = 0;
61 count = 3;
62 while (--count >= 0 && (unsigned)(*p - '0') < 8)
63 c = (c << 3) + (*p++ - '0');
64 break;
65 default:
66 p--;
67 break;
7f473204 68 }
7f473204 69 }
ddba57cd 70 putchar(c);
7f473204 71 }
ddba57cd
MT
72 if (*ap)
73 putchar(' ');
7f473204 74 }
ddba57cd 75 if (! nflag)
7f473204
KB
76 putchar('\n');
77 return 0;
78}