mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-15 11:20:03 +00:00
90 lines
1.2 KiB
C
90 lines
1.2 KiB
C
#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;
|
|
}
|