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*35135Smarcint 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