Mercurial > hg > toybox
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 |
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 } |