xref: /csrg-svn/local/toolchest/ksh/sh/echo.c (revision 35135)
1*35135Smarc /*
2*35135Smarc 
3*35135Smarc  *      Copyright (c) 1984, 1985, 1986 AT&T
4*35135Smarc  *      All Rights Reserved
5*35135Smarc 
6*35135Smarc  *      THIS IS UNPUBLISHED PROPRIETARY SOURCE
7*35135Smarc  *      CODE OF AT&T.
8*35135Smarc  *      The copyright notice above does not
9*35135Smarc  *      evidence any actual or intended
10*35135Smarc  *      publication of such source code.
11*35135Smarc 
12*35135Smarc  */
13*35135Smarc /* @(#)echo.c	1.1 */
14*35135Smarc 
15*35135Smarc #ifdef KSHELL
16*35135Smarc #include	"defs.h"
17*35135Smarc #include	"brkincr.h"
18*35135Smarc #else
19*35135Smarc #include	<stdio.h>
20*35135Smarc #endif	/* KSHELL */
21*35135Smarc 
22*35135Smarc /*
23*35135Smarc  * echo the argument list on stream fd
24*35135Smarc  * if raw is non-zero then \ is not a special character.
25*35135Smarc  * returns 0 for \c otherwise 1.
26*35135Smarc  */
27*35135Smarc 
28*35135Smarc #ifdef KSHELL
29*35135Smarc extern void	exitsh();
30*35135Smarc #endif	/* KSHELL */
31*35135Smarc 
echo_list(raw,com,fd)32*35135Smarc int echo_list(raw,com,fd)
33*35135Smarc int raw;
34*35135Smarc char *com[];
35*35135Smarc register FILE *fd;
36*35135Smarc {
37*35135Smarc 	register int outc;
38*35135Smarc 	register char *cp;
39*35135Smarc 	while(cp= *com++)
40*35135Smarc 	{
41*35135Smarc 		for(; *cp; cp++)
42*35135Smarc 		{
43*35135Smarc 			outc = *cp;
44*35135Smarc 			if(*cp == '\\' && raw==0)
45*35135Smarc 			{
46*35135Smarc 				switch(*++cp)
47*35135Smarc 				{
48*35135Smarc 					case 'b':
49*35135Smarc 						outc = '\b';
50*35135Smarc 						break;
51*35135Smarc 					case 'c':
52*35135Smarc 						return(0);
53*35135Smarc 					case 'f':
54*35135Smarc 						outc = '\f';
55*35135Smarc 						break;
56*35135Smarc 					case 'n':
57*35135Smarc 						outc = '\n';
58*35135Smarc 						break;
59*35135Smarc 					case 'r':
60*35135Smarc 						outc = '\r';
61*35135Smarc 						break;
62*35135Smarc 					case 'v':
63*35135Smarc 						outc = '\v';
64*35135Smarc 						break;
65*35135Smarc 					case 't':
66*35135Smarc 						outc = '\t';
67*35135Smarc 						break;
68*35135Smarc 					case '\\':
69*35135Smarc 						outc = '\\';
70*35135Smarc 						break;
71*35135Smarc 					case '0':
72*35135Smarc 					{
73*35135Smarc 						register char *cpmax;
74*35135Smarc 						outc = 0;
75*35135Smarc 						cpmax = cp + 4;
76*35135Smarc 						while(++cp<cpmax && *cp>='0' &&
77*35135Smarc 							*cp<='7')
78*35135Smarc 						{
79*35135Smarc 							outc <<= 3;
80*35135Smarc 							outc |= (*cp-'0');
81*35135Smarc 						}
82*35135Smarc 						cp--;
83*35135Smarc 						break;
84*35135Smarc 					}
85*35135Smarc 					default:
86*35135Smarc 					cp--;
87*35135Smarc 				}
88*35135Smarc 			}
89*35135Smarc 			putc (outc, fd);
90*35135Smarc 		}
91*35135Smarc 		if(*com)
92*35135Smarc 			putc(' ',fd);
93*35135Smarc #ifdef KSHELL
94*35135Smarc 		if(trapnote&SIGSET)
95*35135Smarc 			exitsh(SIGFAIL);
96*35135Smarc #endif	/* KSHELL */
97*35135Smarc 	}
98*35135Smarc 	return(1);
99*35135Smarc }
100*35135Smarc 
101