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 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);
18 bc7cb1a1 2003-11-23 devnull main(int argc, char **argv)
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);
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]);
32 bc7cb1a1 2003-11-23 devnull stringit(argv[i]);
35 bc7cb1a1 2003-11-23 devnull exits(0);
39 bc7cb1a1 2003-11-23 devnull stringit(char *str)
41 bc7cb1a1 2003-11-23 devnull long posn, start;
42 bc7cb1a1 2003-11-23 devnull int cnt = 0;
45 bc7cb1a1 2003-11-23 devnull Rune buf[BUFSIZE];
47 bc7cb1a1 2003-11-23 devnull if ((fin = Bopen(str, OREAD)) == 0) {
48 bc7cb1a1 2003-11-23 devnull perror("open");
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;
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);
70 bc7cb1a1 2003-11-23 devnull start = 0;
73 bc7cb1a1 2003-11-23 devnull posn = Boffset(fin);
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);
80 bc7cb1a1 2003-11-23 devnull Bterm(fin);
84 bc7cb1a1 2003-11-23 devnull isprint(Rune r)
86 bc7cb1a1 2003-11-23 devnull if ((r >= ' ' && r <0x7f) || r > 0xA0)
87 bc7cb1a1 2003-11-23 devnull return 1;
89 bc7cb1a1 2003-11-23 devnull return 0;