Introduction
Introduction Statistics Contact Development Disclaimer Help
strings.c - 9base - revived minimalist port of Plan 9 userland to Unix
git clone git://git.suckless.org/9base
Log
Files
Refs
README
LICENSE
---
strings.c (1261B)
---
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4
5 Biobuf *fin;
6 Biobuf fout;
7
8 #define MINSPAN 6 /* Min characters…
9
10 #define BUFSIZE 70
11
12 void stringit(char *);
13 #undef isprint
14 #define isprint risprint
15 int isprint(Rune);
16
17 void
18 main(int argc, char **argv)
19 {
20 int i;
21
22 Binit(&fout, 1, OWRITE);
23 if(argc < 2) {
24 stringit("/dev/stdin");
25 exits(0);
26 }
27
28 for(i = 1; i < argc; i++) {
29 if(argc > 2)
30 print("%s:\n", argv[i]);
31
32 stringit(argv[i]);
33 }
34
35 exits(0);
36 }
37
38 void
39 stringit(char *str)
40 {
41 long posn, start;
42 int cnt = 0;
43 long c;
44
45 Rune buf[BUFSIZE];
46
47 if ((fin = Bopen(str, OREAD)) == 0) {
48 perror("open");
49 return;
50 }
51
52 start = 0;
53 posn = Boffset(fin);
54 while((c = Bgetrune(fin)) >= 0) {
55 if(isprint(c)) {
56 if(start == 0)
57 start = posn;
58 buf[cnt++] = c;
59 if(cnt == BUFSIZE-1) {
60 buf[cnt] = 0;
61 Bprint(&fout, "%8ld: %S ...\n", start, b…
62 start = 0;
63 cnt = 0;
64 }
65 } else {
66 if(cnt >= MINSPAN) {
67 buf[cnt] = 0;
68 Bprint(&fout, "%8ld: %S\n", start, buf);
69 }
70 start = 0;
71 cnt = 0;
72 }
73 posn = Boffset(fin);
74 }
75
76 if(cnt >= MINSPAN){
77 buf[cnt] = 0;
78 Bprint(&fout, "%8ld: %S\n", start, buf);
79 }
80 Bterm(fin);
81 }
82
83 int
84 isprint(Rune r)
85 {
86 if ((r >= ' ' && r <0x7f) || r > 0xA0)
87 return 1;
88 else
89 return 0;
90 }
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.