/*
	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;
}
