URI: 
       strings.c - 9base - revived minimalist port of Plan 9 userland to Unix
  HTML git clone git://git.suckless.org/9base
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR 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 in string */
            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, buf);
           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 }