/* word count program which also calculates column centimetres of magazine (or newspaper) copy for would-be contributors. Set up for Helvetica Medium phototype which is the body copy used in Your Computer magazine, but can be easily changed for others. Original structure taken from `The C Programming Language', and substantially modified since then by Les Bell and Matt Whelan... Version 1.02, 20/7/82 */ #include #define YES 1 #define NO 0 #define EOF 0x1a #define ERROR -1 #define MASK 0x7f char toupper(); main(argc,argv) /* count lines, words, chars in input file */ char **argv; { int c, nl, nw, nc, inword, fd, m; char buf[BUFSIZ]; if(argc != 2) { printf("Usage: wc filename\n"); exit(); } if((fd = fopen(argv[1],buf)) == ERROR) { printf("cannot open: %s\n",argv[1]); exit(); } inword = NO; nl = nw = nc = 0; while ((c = (getc(buf) & MASK)) != EOF) { ++nc; if (c == '\n') ++nl; if (c == ' ' || c == '\n' || c == '\t' || c == 0x0d) inword = NO; else if (inword == NO) { inword = YES; ++nw; } } menu(); while (m != "5") { /* the m!=5 is irrelevant, but at least sets up the loop */ printf("\n\nWhich would you like? : "); m = getchar(); switch (toupper(m)) { case '1': printf("\n\n\n"); printf("\t\tnumber of chars = %d\n",nc); printf("\t\tnumber of lines = %d\n",nl); printf("\t\tnumber of words = %d\n",nw); printf("\t\tcolumn centimetres = %d\n",nw/20); break; case '2': printf("\n\n\n"); printf("\t\tnumber of chars = %d\n",nc); printf("\t\tnumber of lines = %d\n",nl); printf("\t\tnumber of words = %d\n",nw); printf("\t\tcolumn centimetres = %d\n",nw/24); break; case '3': printf("\n\n\n"); printf("\t\tnumber of chars = %d\n",nc); printf("\t\tnumber of lines = %d\n",nl); printf("\t\tnumber of words = %d\n",nw); printf("\t\tcolumn centimetres = %d\n",nw/12); break; case '4': printf("\n\n\n"); printf("\t\tnumber of chars = %d\n",nc); printf("\t\tnumber of lines = %d\n",nl); printf("\t\tnumber of words = %d\n",nw); printf("\t\tcolumn centimetres = %d\n",nw/28); break; case 'X': printf("\n\n\n"); printf("\t\tnumber of chars = %d\n",nc); printf("\t\tnumber of lines = %d\n",nl); printf("\t\tnumber of words = %d\n",nw); printf("\n\nbibi\n"); exit(); case 'M': menu(); break; default: putch(7); printf("\n\nEnter 1-4 for measure, M for menu"); break; } } } menu() { printf(CLEARS); /* Hope you have screen-clear defined in bdscio.h */ printf("\n\n\n\n"); printf("\t\tSELECT:\n"); printf("\n\n"); printf("\t\t<1> ---> 9/10 x 13 1/2 ems\n"); /*9point type, 1point leading - the standard 3-column type used in the magazine */ printf("\t\t<2> ---> 8/9 x 13 1/2 ems\n"); /*slightly smaller type over same column with - used for copy with "pocket programs"*/ printf("\t\t<3> ---> 9/10 x 9 1/2 ems\n"); /*normal type size, narrow column width for news and "clinic" pages */ printf("\t\t<4> ---> 9/10 x 20 1/2 ems\n"); /* 2-column (1/2-page) width*/ printf("\t\t ---> ++ eXit ++\n"); }