12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #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 *);
- 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 != Runeerror)
- if ((r >= ' ' && r < 0x7F) || r > 0xA0)
- return 1;
- return 0;
- }
|