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 b4a659b6 2004-04-19 devnull #undef isprint
14 b4a659b6 2004-04-19 devnull #define isprint risprint
15 bc7cb1a1 2003-11-23 devnull int isprint(Rune);
16 bc7cb1a1 2003-11-23 devnull
17 bc7cb1a1 2003-11-23 devnull void
18 bc7cb1a1 2003-11-23 devnull main(int argc, char **argv)
19 bc7cb1a1 2003-11-23 devnull {
20 bc7cb1a1 2003-11-23 devnull int i;
21 bc7cb1a1 2003-11-23 devnull
22 bc7cb1a1 2003-11-23 devnull Binit(&fout, 1, OWRITE);
23 bc7cb1a1 2003-11-23 devnull if(argc < 2) {
24 d159da84 2005-11-12 devnull stringit("/dev/stdin");
25 bc7cb1a1 2003-11-23 devnull exits(0);
26 bc7cb1a1 2003-11-23 devnull }
27 bc7cb1a1 2003-11-23 devnull
28 bc7cb1a1 2003-11-23 devnull for(i = 1; i < argc; i++) {
29 bc7cb1a1 2003-11-23 devnull if(argc > 2)
30 bc7cb1a1 2003-11-23 devnull print("%s:\n", argv[i]);
31 bc7cb1a1 2003-11-23 devnull
32 bc7cb1a1 2003-11-23 devnull stringit(argv[i]);
33 bc7cb1a1 2003-11-23 devnull }
34 bc7cb1a1 2003-11-23 devnull
35 bc7cb1a1 2003-11-23 devnull exits(0);
36 bc7cb1a1 2003-11-23 devnull }
37 bc7cb1a1 2003-11-23 devnull
38 bc7cb1a1 2003-11-23 devnull void
39 bc7cb1a1 2003-11-23 devnull stringit(char *str)
40 bc7cb1a1 2003-11-23 devnull {
41 bc7cb1a1 2003-11-23 devnull long posn, start;
42 bc7cb1a1 2003-11-23 devnull int cnt = 0;
43 bc7cb1a1 2003-11-23 devnull long c;
44 bc7cb1a1 2003-11-23 devnull
45 bc7cb1a1 2003-11-23 devnull Rune buf[BUFSIZE];
46 bc7cb1a1 2003-11-23 devnull
47 bc7cb1a1 2003-11-23 devnull if ((fin = Bopen(str, OREAD)) == 0) {
48 bc7cb1a1 2003-11-23 devnull perror("open");
49 bc7cb1a1 2003-11-23 devnull return;
50 bc7cb1a1 2003-11-23 devnull }
51 bc7cb1a1 2003-11-23 devnull
52 bc7cb1a1 2003-11-23 devnull start = 0;
53 bc7cb1a1 2003-11-23 devnull posn = Boffset(fin);
54 bc7cb1a1 2003-11-23 devnull while((c = Bgetrune(fin)) >= 0) {
55 bc7cb1a1 2003-11-23 devnull if(isprint(c)) {
56 bc7cb1a1 2003-11-23 devnull if(start == 0)
57 bc7cb1a1 2003-11-23 devnull start = posn;
58 bc7cb1a1 2003-11-23 devnull buf[cnt++] = c;
59 bc7cb1a1 2003-11-23 devnull if(cnt == BUFSIZE-1) {
60 bc7cb1a1 2003-11-23 devnull buf[cnt] = 0;
61 bc7cb1a1 2003-11-23 devnull Bprint(&fout, "%8ld: %S ...\n", start, buf);
62 bc7cb1a1 2003-11-23 devnull start = 0;
63 bc7cb1a1 2003-11-23 devnull cnt = 0;
64 bc7cb1a1 2003-11-23 devnull }
65 bc7cb1a1 2003-11-23 devnull } else {
66 bc7cb1a1 2003-11-23 devnull if(cnt >= MINSPAN) {
67 bc7cb1a1 2003-11-23 devnull buf[cnt] = 0;
68 bc7cb1a1 2003-11-23 devnull Bprint(&fout, "%8ld: %S\n", start, buf);
69 bc7cb1a1 2003-11-23 devnull }
70 bc7cb1a1 2003-11-23 devnull start = 0;
71 bc7cb1a1 2003-11-23 devnull cnt = 0;
72 fa325e9b 2020-01-10 cross }
73 bc7cb1a1 2003-11-23 devnull posn = Boffset(fin);
74 bc7cb1a1 2003-11-23 devnull }
75 bc7cb1a1 2003-11-23 devnull
76 bc7cb1a1 2003-11-23 devnull if(cnt >= MINSPAN){
77 bc7cb1a1 2003-11-23 devnull buf[cnt] = 0;
78 bc7cb1a1 2003-11-23 devnull Bprint(&fout, "%8ld: %S\n", start, buf);
79 bc7cb1a1 2003-11-23 devnull }
80 bc7cb1a1 2003-11-23 devnull Bterm(fin);
81 bc7cb1a1 2003-11-23 devnull }
82 bc7cb1a1 2003-11-23 devnull
83 bc7cb1a1 2003-11-23 devnull int
84 bc7cb1a1 2003-11-23 devnull isprint(Rune r)
85 bc7cb1a1 2003-11-23 devnull {
86 bc7cb1a1 2003-11-23 devnull if ((r >= ' ' && r <0x7f) || r > 0xA0)
87 bc7cb1a1 2003-11-23 devnull return 1;
88 bc7cb1a1 2003-11-23 devnull else
89 bc7cb1a1 2003-11-23 devnull return 0;
90 bc7cb1a1 2003-11-23 devnull }