xv6

port of xv6 to x86-64
git clone http://frotz.net/git/xv6.git
Log | Files | Refs | README | LICENSE

wc.c (820B)


      1 #include "types.h"
      2 #include "stat.h"
      3 #include "user.h"
      4 
      5 char buf[512];
      6 
      7 void
      8 wc(int fd, char *name)
      9 {
     10   int i, n;
     11   int l, w, c, inword;
     12 
     13   l = w = c = 0;
     14   inword = 0;
     15   while((n = read(fd, buf, sizeof(buf))) > 0){
     16     for(i=0; i<n; i++){
     17       c++;
     18       if(buf[i] == '\n')
     19         l++;
     20       if(strchr(" \r\t\n\v", buf[i]))
     21         inword = 0;
     22       else if(!inword){
     23         w++;
     24         inword = 1;
     25       }
     26     }
     27   }
     28   if(n < 0){
     29     printf(1, "wc: read error\n");
     30     exit();
     31   }
     32   printf(1, "%d %d %d %s\n", l, w, c, name);
     33 }
     34 
     35 int
     36 main(int argc, char *argv[])
     37 {
     38   int fd, i;
     39 
     40   if(argc <= 1){
     41     wc(0, "");
     42     exit();
     43   }
     44 
     45   for(i = 1; i < argc; i++){
     46     if((fd = open(argv[i], 0)) < 0){
     47       printf(1, "wc: cannot open %s\n", argv[i]);
     48       exit();
     49     }
     50     wc(fd, argv[i]);
     51     close(fd);
     52   }
     53   exit();
     54 }