176f09d7dSrsc #include "types.h"
276f09d7dSrsc #include "stat.h"
376f09d7dSrsc #include "user.h"
476f09d7dSrsc
576f09d7dSrsc char buf[512];
676f09d7dSrsc
776f09d7dSrsc void
wc(int fd,char * name)876f09d7dSrsc wc(int fd, char *name)
976f09d7dSrsc {
1076f09d7dSrsc int i, n;
1176f09d7dSrsc int l, w, c, inword;
1276f09d7dSrsc
1376f09d7dSrsc l = w = c = 0;
1476f09d7dSrsc inword = 0;
1576f09d7dSrsc while((n = read(fd, buf, sizeof(buf))) > 0){
1676f09d7dSrsc for(i=0; i<n; i++){
1776f09d7dSrsc c++;
1876f09d7dSrsc if(buf[i] == '\n')
1976f09d7dSrsc l++;
2076f09d7dSrsc if(strchr(" \r\t\n\v", buf[i]))
2176f09d7dSrsc inword = 0;
2276f09d7dSrsc else if(!inword){
2376f09d7dSrsc w++;
2476f09d7dSrsc inword = 1;
2576f09d7dSrsc }
2676f09d7dSrsc }
2776f09d7dSrsc }
2876f09d7dSrsc if(n < 0){
2976f09d7dSrsc printf(1, "wc: read error\n");
3076f09d7dSrsc exit();
3176f09d7dSrsc }
3276f09d7dSrsc printf(1, "%d %d %d %s\n", l, w, c, name);
3376f09d7dSrsc }
3476f09d7dSrsc
3576f09d7dSrsc int
main(int argc,char * argv[])3676f09d7dSrsc main(int argc, char *argv[])
3776f09d7dSrsc {
3876f09d7dSrsc int fd, i;
3976f09d7dSrsc
4076f09d7dSrsc if(argc <= 1){
4176f09d7dSrsc wc(0, "");
4276f09d7dSrsc exit();
4376f09d7dSrsc }
4476f09d7dSrsc
4576f09d7dSrsc for(i = 1; i < argc; i++){
4676f09d7dSrsc if((fd = open(argv[i], 0)) < 0){
47*8960f60bSRobert Morris printf(1, "wc: cannot open %s\n", argv[i]);
4876f09d7dSrsc exit();
4976f09d7dSrsc }
5076f09d7dSrsc wc(fd, argv[i]);
5176f09d7dSrsc close(fd);
5276f09d7dSrsc }
5376f09d7dSrsc exit();
5476f09d7dSrsc }
55