Blame


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>
4 bc7cb1a1 2003-11-23 devnull
5 bc7cb1a1 2003-11-23 devnull Biobuf *fin;
6 bc7cb1a1 2003-11-23 devnull Biobuf fout;
7 bc7cb1a1 2003-11-23 devnull
8 bc7cb1a1 2003-11-23 devnull #define MINSPAN 6 /* Min characters in string */
9 bc7cb1a1 2003-11-23 devnull
10 bc7cb1a1 2003-11-23 devnull #define BUFSIZE 70
11 bc7cb1a1 2003-11-23 devnull
12 bc7cb1a1 2003-11-23 devnull void stringit(char *);
13 bc7cb1a1 2003-11-23 devnull int isprint(Rune);
14 bc7cb1a1 2003-11-23 devnull
15 bc7cb1a1 2003-11-23 devnull void
16 bc7cb1a1 2003-11-23 devnull main(int argc, char **argv)
17 bc7cb1a1 2003-11-23 devnull {
18 bc7cb1a1 2003-11-23 devnull int i;
19 bc7cb1a1 2003-11-23 devnull
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);
24 bc7cb1a1 2003-11-23 devnull }
25 bc7cb1a1 2003-11-23 devnull
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]);
29 bc7cb1a1 2003-11-23 devnull
30 bc7cb1a1 2003-11-23 devnull stringit(argv[i]);
31 bc7cb1a1 2003-11-23 devnull }
32 bc7cb1a1 2003-11-23 devnull
33 bc7cb1a1 2003-11-23 devnull exits(0);
34 bc7cb1a1 2003-11-23 devnull }
35 bc7cb1a1 2003-11-23 devnull
36 bc7cb1a1 2003-11-23 devnull void
37 bc7cb1a1 2003-11-23 devnull stringit(char *str)
38 bc7cb1a1 2003-11-23 devnull {
39 bc7cb1a1 2003-11-23 devnull long posn, start;
40 bc7cb1a1 2003-11-23 devnull int cnt = 0;
41 bc7cb1a1 2003-11-23 devnull long c;
42 bc7cb1a1 2003-11-23 devnull
43 bc7cb1a1 2003-11-23 devnull Rune buf[BUFSIZE];
44 bc7cb1a1 2003-11-23 devnull
45 bc7cb1a1 2003-11-23 devnull if ((fin = Bopen(str, OREAD)) == 0) {
46 bc7cb1a1 2003-11-23 devnull perror("open");
47 bc7cb1a1 2003-11-23 devnull return;
48 bc7cb1a1 2003-11-23 devnull }
49 bc7cb1a1 2003-11-23 devnull
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;
61 bc7cb1a1 2003-11-23 devnull cnt = 0;
62 bc7cb1a1 2003-11-23 devnull }
63 bc7cb1a1 2003-11-23 devnull } else {
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);
67 bc7cb1a1 2003-11-23 devnull }
68 bc7cb1a1 2003-11-23 devnull start = 0;
69 bc7cb1a1 2003-11-23 devnull cnt = 0;
70 bc7cb1a1 2003-11-23 devnull }
71 bc7cb1a1 2003-11-23 devnull posn = Boffset(fin);
72 bc7cb1a1 2003-11-23 devnull }
73 bc7cb1a1 2003-11-23 devnull
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);
77 bc7cb1a1 2003-11-23 devnull }
78 bc7cb1a1 2003-11-23 devnull Bterm(fin);
79 bc7cb1a1 2003-11-23 devnull }
80 bc7cb1a1 2003-11-23 devnull
81 bc7cb1a1 2003-11-23 devnull int
82 bc7cb1a1 2003-11-23 devnull isprint(Rune r)
83 bc7cb1a1 2003-11-23 devnull {
84 bc7cb1a1 2003-11-23 devnull if ((r >= ' ' && r <0x7f) || r > 0xA0)
85 bc7cb1a1 2003-11-23 devnull return 1;
86 bc7cb1a1 2003-11-23 devnull else
87 bc7cb1a1 2003-11-23 devnull return 0;
88 bc7cb1a1 2003-11-23 devnull }