Mercurial > hg > toybox
annotate toys/catv.c @ 185:29e2051296fd
Add loopfiles() function, make catv use it.
author | Rob Landley <rob@landley.net> |
---|---|
date | Thu, 29 Nov 2007 17:49:50 -0600 |
parents | 6c7836dbc16e |
children | 25447caf1b4b |
rev | line source |
---|---|
35 | 1 /* vi: set sw=4 ts=4: */ |
2 /* | |
3 * cat -v implementation for toybox | |
4 * | |
5 * Copyright (C) 2006 Rob Landley <rob@landley.net> | |
6 */ | |
7 | |
8 /* See "Cat -v considered harmful" at | |
9 * http://cm.bell-labs.com/cm/cs/doc/84/kp.ps.gz */ | |
10 | |
11 #include "toys.h" | |
12 | |
185
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
13 // Callback function for loopfiles() |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
14 |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
15 void do_catv(int fd, char *name) |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
16 { |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
17 for(;;) { |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
18 int i, len; |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
19 |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
20 len = read(fd, toybuf, sizeof(toybuf)); |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
21 if (len < 0) toys.exitval = EXIT_FAILURE; |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
22 if (len < 1) break; |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
23 for (i=0; i<len; i++) { |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
24 char c=toybuf[i]; |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
25 |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
26 if (c > 126 && (toys.optflags & 4)) { |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
27 if (c == 127) { |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
28 printf("^?"); |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
29 continue; |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
30 } else { |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
31 printf("M-"); |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
32 c -= 128; |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
33 } |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
34 } |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
35 if (c < 32) { |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
36 if (c == 10) { |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
37 if (toys.optflags & 1) putchar('$'); |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
38 } else if (toys.optflags & (c==9 ? 2 : 4)) { |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
39 printf("^%c", c+'@'); |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
40 continue; |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
41 } |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
42 } |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
43 putchar(c); |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
44 } |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
45 } |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
46 } |
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
47 |
35 | 48 int catv_main(void) |
49 { | |
50 toys.optflags^=4; | |
185
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
51 loopfiles(toys.optargs, do_catv); |
35 | 52 |
185
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
155
diff
changeset
|
53 return toys.exitval; |
35 | 54 } |