2.11BSD/src/usr.bin/refer/mkey1.c
#if !defined(lint) && defined(DOSCCS)
static char *sccsid = "@(#)mkey1.c 4.1.1 (2.11BSD) 1996/10/23";
#endif
#include <stdio.h>
extern char *comname; /* "/usr/share/misc/eign" */
int wholefile = 0;
int keycount = 100;
int labels = 1;
int minlen = 3;
extern int comcount;
char *iglist = "XYZ#";
main (argc,argv)
char *argv[];
{
/* this program expects as its arguments a list of
* files and generates a set of lines of the form
* filename:byte-add,length (tab) key1 key2 key3
* where the byte addresses give the position within
* the file and the keys are the strings off the lines
* which are alphabetic, first six characters only.
*/
int i;
char *name, qn[200];
char *inlist = 0;
FILE *f, *ff;
while (argc>1 && argv[1][0] == '-')
{
switch(argv[1][1])
{
case 'c':
comname = argv[2];
argv++;
argc--;
break;
case 'w':
wholefile = 1;
break;
case 'f':
inlist = argv[2];
argv++;
argc--;
break;
case 'i':
iglist = argv[2];
argv++;
argc--;
break;
case 'l':
minlen = atoi(argv[1]+2);
if (minlen<=0) minlen=3;
break;
case 'n': /* number of common words to use */
comcount = atoi(argv[1]+2);
break;
case 'k': /* number of keys per file max */
keycount = atoi(argv[1]+2);
break;
case 's': /* suppress labels, search only */
labels = 0;
break;
}
argc--;
argv++;
}
if (inlist)
{
ff = fopen(inlist, "r");
while (fgets(qn, 200, ff))
{
trimnl(qn);
f = fopen (qn, "r");
if (f!=NULL)
dofile(f, qn);
else
fprintf(stderr, "Can't read %s\n",qn);
}
}
else
if (argc<=1)
dofile(stdin, "");
else
for(i=1; i<argc; i++)
{
f = fopen(name=argv[i], "r");
if (f==NULL)
err("No file %s",name);
else
dofile(f, name);
}
exit(0);
}