Mercurial > hg > toybox
view toys/echo.c @ 233:d4176f3f3835
Zap toys/Config.in and instead create generated/Config.in from contents of
toys/*.c. Move relevant info into comment at the top of each toys/*.c. Also
convert more of Makefile into a thin wrapper around shell scripts that actually
do the work. (Makefile is only still there for the user interface.)
author | Rob Landley <rob@landley.net> |
---|---|
date | Sat, 19 Jan 2008 17:08:39 -0600 |
parents | 3227c5316260 |
children | 163498bf547b |
line wrap: on
line source
/* vi: set sw=4 ts=4: * * echo.c - echo supporting -n and -e. * * Copyright 2007 Rob Landley <rob@landley.net> * * See http://www.opengroup.org/onlinepubs/009695399/utilities/echo.html config ECHO bool "echo" default y help usage: echo [-ne] [args...] Write each argument to stdout, with one space between each, followed by a newline. -n No trailing newline. -e Process the following escape sequences: \\ backslash \a alert (beep/flash) \b backspace \c Stop output here (avoids trailing newline) \f form feed \n newline \r carriage return \t horizontal tab \v vertical tab */ #include "toys.h" void echo_main(void) { int i = 0; char *arg, *from = "\\abfnrtv", *to = "\\\a\b\f\n\r\t\v"; for (;;) { arg = toys.optargs[i]; if (!arg) break; if (i++) xputc(' '); // Handle -e if (toys.optflags&2) { int c, j = 0; for (;;) { c = arg[j++]; if (!c) break; if (c == '\\') { char *found; int d = arg[j++]; // handle \escapes if (d) { found = strchr(from, d); if (found) c = to[found-from]; else if (d == 'c') goto done; else if (d == '0') { c = 0; while (arg[j]>='0' && arg[j]<='7') c = (c*8)+arg[j++]-'0'; } } } xputc(c); } } else xprintf("%s", arg); } // Output "\n" if no -n if (!(toys.optflags&1)) xputc('\n'); done: xflush(); }