diff options
author | Rob Landley <rob@landley.net> | 2007-01-20 21:32:47 -0500 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2007-01-20 21:32:47 -0500 |
commit | 3ec53ce1d4bde7c41db6a9007b15b99e43cd006a (patch) | |
tree | b9a481da0541e3a5d21047d70987320b4d8881cb /toys/echo.c | |
parent | 24d1d45ee901e74b3388e7053543eb16aea09ada (diff) | |
download | toybox-3ec53ce1d4bde7c41db6a9007b15b99e43cd006a.tar.gz |
Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Diffstat (limited to 'toys/echo.c')
-rw-r--r-- | toys/echo.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/toys/echo.c b/toys/echo.c new file mode 100644 index 00000000..93a3dbc0 --- /dev/null +++ b/toys/echo.c @@ -0,0 +1,50 @@ +/* vi: set sw=4 ts=4: */ +/* + * echo.c - echo supporting -n and -e. + */ + +#include "toys.h" + +int 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(' '); + + if (toys.optflags&2) { + int c, j = 0; + for (;;) { + c = arg[j++]; + if (!c) break; + if (c == '\\') { + char *found; + int d = arg[j++]; + + + 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'; + } + // \0123 + } + } + xputc(c); + } + // \\ thingy + } else xprintf("%s", arg); + } + // Output "\n" if no -n + if (!(toys.optflags&1)) xputc('\n'); +done: + xflush(); + return 0; +} |