# HG changeset patch # User Rob Landley # Date 1169346767 18000 # Node ID 40103a3ddcb07b236a1ba1858eda81fe56388a6b # Parent a1b464bbef0828e59faca0f36c19824aa6e4ff0c Helps to "hg add" echo.c. Also, implement \0123 escapes for -e. diff -r a1b464bbef08 -r 40103a3ddcb0 toys/echo.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toys/echo.c Sat Jan 20 21:32:47 2007 -0500 @@ -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; +}