1 bc7cb1a1 2003-11-23 devnull #include <u.h>
2 bc7cb1a1 2003-11-23 devnull #include <libc.h>
3 bc7cb1a1 2003-11-23 devnull #include <bio.h>
5 bc7cb1a1 2003-11-23 devnull Biobuf *fin;
6 bc7cb1a1 2003-11-23 devnull Biobuf fout;
8 bc7cb1a1 2003-11-23 devnull #define MINSPAN 6 /* Min characters in string */
10 bc7cb1a1 2003-11-23 devnull #define BUFSIZE 70
12 bc7cb1a1 2003-11-23 devnull void stringit(char *);
13 bc7cb1a1 2003-11-23 devnull int isprint(Rune);
16 bc7cb1a1 2003-11-23 devnull main(int argc, char **argv)
20 bc7cb1a1 2003-11-23 devnull Binit(&fout, 1, OWRITE);
21 bc7cb1a1 2003-11-23 devnull if(argc < 2) {
22 bc7cb1a1 2003-11-23 devnull stringit("/fd/0");
23 bc7cb1a1 2003-11-23 devnull exits(0);
26 bc7cb1a1 2003-11-23 devnull for(i = 1; i < argc; i++) {
27 bc7cb1a1 2003-11-23 devnull if(argc > 2)
28 bc7cb1a1 2003-11-23 devnull print("%s:\n", argv[i]);
30 bc7cb1a1 2003-11-23 devnull stringit(argv[i]);
33 bc7cb1a1 2003-11-23 devnull exits(0);
37 bc7cb1a1 2003-11-23 devnull stringit(char *str)
39 bc7cb1a1 2003-11-23 devnull long posn, start;
40 bc7cb1a1 2003-11-23 devnull int cnt = 0;
43 bc7cb1a1 2003-11-23 devnull Rune buf[BUFSIZE];
45 bc7cb1a1 2003-11-23 devnull if ((fin = Bopen(str, OREAD)) == 0) {
46 bc7cb1a1 2003-11-23 devnull perror("open");
50 bc7cb1a1 2003-11-23 devnull start = 0;
51 bc7cb1a1 2003-11-23 devnull posn = Boffset(fin);
52 bc7cb1a1 2003-11-23 devnull while((c = Bgetrune(fin)) >= 0) {
53 bc7cb1a1 2003-11-23 devnull if(isprint(c)) {
54 bc7cb1a1 2003-11-23 devnull if(start == 0)
55 bc7cb1a1 2003-11-23 devnull start = posn;
56 bc7cb1a1 2003-11-23 devnull buf[cnt++] = c;
57 bc7cb1a1 2003-11-23 devnull if(cnt == BUFSIZE-1) {
58 bc7cb1a1 2003-11-23 devnull buf[cnt] = 0;
59 bc7cb1a1 2003-11-23 devnull Bprint(&fout, "%8ld: %S ...\n", start, buf);
60 bc7cb1a1 2003-11-23 devnull start = 0;
64 bc7cb1a1 2003-11-23 devnull if(cnt >= MINSPAN) {
65 bc7cb1a1 2003-11-23 devnull buf[cnt] = 0;
66 bc7cb1a1 2003-11-23 devnull Bprint(&fout, "%8ld: %S\n", start, buf);
68 bc7cb1a1 2003-11-23 devnull start = 0;
71 bc7cb1a1 2003-11-23 devnull posn = Boffset(fin);
74 bc7cb1a1 2003-11-23 devnull if(cnt >= MINSPAN){
75 bc7cb1a1 2003-11-23 devnull buf[cnt] = 0;
76 bc7cb1a1 2003-11-23 devnull Bprint(&fout, "%8ld: %S\n", start, buf);
78 bc7cb1a1 2003-11-23 devnull Bterm(fin);
82 bc7cb1a1 2003-11-23 devnull isprint(Rune r)
84 bc7cb1a1 2003-11-23 devnull if ((r >= ' ' && r <0x7f) || r > 0xA0)
85 bc7cb1a1 2003-11-23 devnull return 1;
87 bc7cb1a1 2003-11-23 devnull return 0;