earlw@pesnta.UUCP (Earl Wallace) (06/26/85)
This program is used to determine how readable a file is and remove the file if it doesn't meet a specified readable percentage. I use it to blow away binaries of Edition VII on XELOS; since the binary won't load and execute, why keep it around? Line feeds, carriage returns, formfeeds, etc. are taken into account. -earlw static char *sccsid="@(#)hrt.c 2.1 11/7/84 19:32:51 [pesnta]"; /************************************************************************ * CopyWrong 1984 Earl Wallace, Perkin-Elmer Corp., Santa Clara, Calif. * * All Rights Reserved for Table 6 at Swanks. * * No part of this file may be used in a product for bucks but may be * * given away if the person has a last name that begins with a letter * ************************************************************************/ /* * hrt (Human Readable Text) - examines a file to see if it is readable. * The return code is the percentage readable. If the -rn is specified, * the file is removed if it is less than n% readable and no message is * displayed. Zero-length files will always be removed with the -rn. */ #include <stdio.h> #include <ctype.h> #include <sys/types.h> #include <sys/stat.h> main(argc, argv) int argc; char *argv[]; { FILE *fp; char **cp; register int c, cnt, ok; int percent, r; struct stat buf; if (argc < 2) { fprintf(stderr,"Usage: [-rn] hrt file\n"); exit(0); } if (argv[1][0] == '-' && argv[1][1] == 'r') { if (argv[1][2] == 0) { fprintf(stderr,"The -rn option needs 'n' to be a "); fprintf(stderr,"number in the range 10-100\n"); exit(100); } r = atoi(&argv[1][2]); if (r < 10 || r > 100) { fprintf(stderr,"out of range (10-100) for -rn\n"); exit(100); } cp = &argv[1]; } else cp = &argv[0]; while(*++cp) { cnt = ok = 0; if(fp=fopen(*cp, "r")) { while( (c=getc(fp)) != EOF) { cnt++; if(isprint(c) || isspace(c) || c == 010) ok++; } if(cnt == 0) { if (r) { if (fstat(fileno(fp), &buf) == 0 && (buf.st_mode&S_IFMT) == S_IFREG) { unlink(*cp); } } else printf("%s is empty.\n", *cp); } else { percent = ok*100 / cnt; if (r) { if (percent < r && fstat(fileno(fp), &buf) == 0 && (buf.st_mode&S_IFMT) == S_IFREG) { unlink(*cp); } } else printf("%s is %d%% readable.\n", *cp, percent); } fclose(fp); } else fprintf(stderr,"can't open %s\n", *cp); } exit(percent); /* last guy */ }