#include <u.h> | |
#include <libc.h> | |
#include <bio.h> | |
Biobuf *fin; | |
Biobuf fout; | |
#define MINSPAN 6 /* Min characters in string */ | |
#define BUFSIZE 70 | |
void stringit(char *); | |
#undef isprint | |
#define isprint risprint | |
int isprint(Rune); | |
void | |
main(int argc, char **argv) | |
{ | |
int i; | |
Binit(&fout, 1, OWRITE); | |
if(argc < 2) { | |
stringit("/fd/0"); | |
exits(0); | |
} | |
for(i = 1; i < argc; i++) { | |
if(argc > 2) | |
print("%s:\n", argv[i]); | |
stringit(argv[i]); | |
} | |
exits(0); | |
} | |
void | |
stringit(char *str) | |
{ | |
long posn, start; | |
int cnt = 0; | |
long c; | |
Rune buf[BUFSIZE]; | |
if ((fin = Bopen(str, OREAD)) == 0) { | |
perror("open"); | |
return; | |
} | |
start = 0; | |
posn = Boffset(fin); | |
while((c = Bgetrune(fin)) >= 0) { | |
if(isprint(c)) { | |
if(start == 0) | |
start = posn; | |
buf[cnt++] = c; | |
if(cnt == BUFSIZE-1) { | |
buf[cnt] = 0; | |
Bprint(&fout, "%8ld: %S ...\n", start, buf); | |
start = 0; | |
cnt = 0; | |
} | |
} else { | |
if(cnt >= MINSPAN) { | |
buf[cnt] = 0; | |
Bprint(&fout, "%8ld: %S\n", start, buf); | |
} | |
start = 0; | |
cnt = 0; | |
} | |
posn = Boffset(fin); | |
} | |
if(cnt >= MINSPAN){ | |
buf[cnt] = 0; | |
Bprint(&fout, "%8ld: %S\n", start, buf); | |
} | |
Bterm(fin); | |
} | |
int | |
isprint(Rune r) | |
{ | |
if ((r >= ' ' && r <0x7f) || r > 0xA0) | |
return 1; | |
else | |
return 0; | |
} |