annotate toys/echo.c @ 71:40103a3ddcb0

Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
author Rob Landley <rob@landley.net>
date Sat, 20 Jan 2007 21:32:47 -0500
parents
children 116405f248cb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
71
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
1 /* vi: set sw=4 ts=4: */
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
2 /*
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
3 * echo.c - echo supporting -n and -e.
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
4 */
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
5
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
6 #include "toys.h"
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
7
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
8 int echo_main(void)
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
9 {
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
10 int i = 0;
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
11 char *arg, *from = "\\abfnrtv", *to = "\\\a\b\f\n\r\t\v";
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
12
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
13 for (;;) {
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
14 arg = toys.optargs[i];
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
15 if (!arg) break;
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
16 if (i++) xputc(' ');
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
17
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
18 if (toys.optflags&2) {
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
19 int c, j = 0;
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
20 for (;;) {
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
21 c = arg[j++];
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
22 if (!c) break;
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
23 if (c == '\\') {
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
24 char *found;
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
25 int d = arg[j++];
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
26
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
27
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
28 if (d) {
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
29 found = strchr(from, d);
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
30 if (found) c = to[found-from];
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
31 else if (d == 'c') goto done;
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
32 else if (d == '0') {
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
33 c = 0;
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
34 while (arg[j]>='0' && arg[j]<='7')
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
35 c = (c*8)+arg[j++]-'0';
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
36 }
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
37 // \0123
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
38 }
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
39 }
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
40 xputc(c);
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
41 }
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
42 // \\ thingy
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
43 } else xprintf("%s", arg);
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
44 }
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
45 // Output "\n" if no -n
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
46 if (!(toys.optflags&1)) xputc('\n');
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
47 done:
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
48 xflush();
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
49 return 0;
40103a3ddcb0 Helps to "hg add" echo.c. Also, implement \0123 escapes for -e.
Rob Landley <rob@landley.net>
parents:
diff changeset
50 }