/*
       WC.C
       Written by Leor Zolman, 3/16/82

       Text analysis utility. Given a list of text files, WC prints
       out total number of characters, words and lines in each file
       and in all files together. "Words", here, are simply delimited
       by blanks, tabs or newlines.

       Maximum number of words and lines are each 65535, but the char
       count is virtually unlimited.

       compile & link by:
               cc1 wc.c -e2000 -o
               {clink | l2}  wc wildexp
*/

#include "bdscio.h"

unsigned lo_totchars, hi_totchars, totwords, totlines;
char ibuf[BUFSIZ];

main(argc,argv)
char **argv;
{
       wildexp(&argc,&argv);
       if (argc == 1) exit(puts("Usage: wc <list of files>\n"));

       lo_totchars = hi_totchars = totwords = totlines = 0;

       puts("\n\t\tchars\twords\tlines\n");
       while (--argc) dofile(*++argv);
       puts("\nTotals:");
       if (hi_totchars) printf("\t\t%d%04d",hi_totchars,lo_totchars);
       else printf("\t\t%d",lo_totchars);
       printf("\t%u\t%u\n",totwords,totlines);
}

dofile(name)
char *name;
{
       char inword;
       int c;
       unsigned  lo_tch, hi_tch, twords, tlines;

       if (fopen(name,ibuf) == ERROR)
               return printf("Can't open %s\n",name);

       printf("%s:\t",name);
       if (strlen(name) < 7)
               putchar('\t');

       inword = lo_tch = hi_tch = twords = tlines = 0;

       while ((c = getc(ibuf)) != EOF && c != CPMEOF) {

               if (++lo_tch == 10000) {
                       lo_tch = 0;
                       hi_tch++;
               }

               if (isspace(c)) {
                       if (inword) {
                               inword = 0;
                               twords++;
                       }
               } else
                       if (!inword)
                               inword = 1;

               if (c == '\n')
                       tlines++;
       }
       fabort(ibuf->_fd);

       if (hi_tch) printf("%d%04d",hi_tch,lo_tch);
       else printf("%d",lo_tch);
       printf("\t%u\t%u\n",twords,tlines);

       if ((lo_totchars += lo_tch) >= 10000) {
               lo_totchars -= 10000;
               hi_totchars++;
       }
       hi_totchars += hi_tch;
       totwords += twords;
       totlines += tlines;
}