54 lines
		
	
	
	
		
			839 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			839 B
		
	
	
	
		
			C
		
	
	
	
	
	
#include "kernel/types.h"
 | 
						|
#include "kernel/stat.h"
 | 
						|
#include "user/user.h"
 | 
						|
 | 
						|
char buf[512];
 | 
						|
 | 
						|
void
 | 
						|
wc(int fd, char *name)
 | 
						|
{
 | 
						|
  int i, n;
 | 
						|
  int l, w, c, inword;
 | 
						|
 | 
						|
  l = w = c = 0;
 | 
						|
  inword = 0;
 | 
						|
  while((n = read(fd, buf, sizeof(buf))) > 0){
 | 
						|
    for(i=0; i<n; i++){
 | 
						|
      c++;
 | 
						|
      if(buf[i] == '\n')
 | 
						|
        l++;
 | 
						|
      if(strchr(" \r\t\n\v", buf[i]))
 | 
						|
        inword = 0;
 | 
						|
      else if(!inword){
 | 
						|
        w++;
 | 
						|
        inword = 1;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  if(n < 0){
 | 
						|
    printf(1, "wc: read error\n");
 | 
						|
    exit();
 | 
						|
  }
 | 
						|
  printf(1, "%d %d %d %s\n", l, w, c, name);
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
main(int argc, char *argv[])
 | 
						|
{
 | 
						|
  int fd, i;
 | 
						|
 | 
						|
  if(argc <= 1){
 | 
						|
    wc(0, "");
 | 
						|
    exit();
 | 
						|
  }
 | 
						|
 | 
						|
  for(i = 1; i < argc; i++){
 | 
						|
    if((fd = open(argv[i], 0)) < 0){
 | 
						|
      printf(1, "wc: cannot open %s\n", argv[i]);
 | 
						|
      exit();
 | 
						|
    }
 | 
						|
    wc(fd, argv[i]);
 | 
						|
    close(fd);
 | 
						|
  }
 | 
						|
  exit();
 | 
						|
}
 |