home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
BDSC
/
BDSC-3
/
WC.C
< prev
next >
Wrap
Text File
|
2000-06-30
|
2KB
|
88 lines
/*
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;
}