/* mkindx.c -- make help/news file indexes */

#include "autoconf.h"
#include "copyright.h"
#ifndef	lint
static char *RCSid = "$Id: mkindx.c,v 1.7 1995/03/21 00:00:44 ambar Exp $";
USE(RCSid);
#endif

#include  "help.h"

char line[LINE_SIZE + 1];
void 
main(argc, argv)
    int argc;
    char *argv[];
{
    long pos;
    int i, n, lineno, ntopics;
    char *s, *topic;
    help_indx entry;
    FILE *rfp, *wfp;

    if (argc < 2 || argc > 3) {
	printf("Usage:\tmkindx <file_to_be_indexed> <output_index_filename>\n");
	exit(-1);
    }
    if ((rfp = fopen(argv[1], "r")) == NULL) {
	fprintf(stderr, "can't open %s for reading\n", argv[1]);
	exit(-1);
    }
    if ((wfp = fopen(argv[2], "w")) == NULL) {
	fprintf(stderr, "can't open %s for writing\n", argv[2]);
	exit(-1);
    }
    pos = 0L;
    lineno = 0;
    ntopics = 0;
    while (fgets(line, LINE_SIZE, rfp) != NULL) {
	++lineno;

	n = strlen(line);
	if (line[n - 1] != '\n') {
	    fprintf(stderr, "line %d: line too long\n", lineno);
	}
	if (line[0] == '&') {
	    ++ntopics;

	    if (ntopics > 1) {
		entry.len = (int) (pos - entry.pos);
		if (fwrite(&entry, sizeof(help_indx), 1, wfp) < 1) {
		    fprintf(stderr, "error writing %s\n", argv[2]);
		    exit(-1);
		}
	    }
	    for (topic = &line[1];
	      (*topic == ' ' || *topic == '\t') && *topic != '\0'; topic++);
	    for (i = -1, s = topic; *s != '\n' && *s != '\0'; s++) {
		if (i >= TOPIC_NAME_LEN - 1)
		    break;
		if (*s != ' ' || entry.topic[i] != ' ')
		    entry.topic[++i] = *s;
	    }
	    entry.topic[++i] = '\0';
	    entry.pos = pos + (long) n;
	}
	pos += n;
    }
    entry.len = (int) (pos - entry.pos);
    if (fwrite(&entry, sizeof(help_indx), 1, wfp) < 1) {
	fprintf(stderr, "error writing %s\n", argv[2]);
	exit(-1);
    }
    fclose(rfp);
    fclose(wfp);

    printf("%d topics indexed\n", ntopics);
    exit(0);
}
