btmux/autom4te.cache/
btmux/doc/.svn/
btmux/event/.svn/
btmux/game/.svn/
btmux/game/bin/.svn/
btmux/game/data/.svn/
btmux/game/logs/.svn/
btmux/game/maps/
btmux/game/maps/.svn/
btmux/game/maps/.svn/prop-base/
btmux/game/maps/.svn/props/
btmux/game/maps/.svn/text-base/
btmux/game/maps/.svn/wcprops/
btmux/game/mechs/
btmux/game/mechs/.svn/
btmux/game/mechs/.svn/prop-base/
btmux/game/mechs/.svn/props/
btmux/game/mechs/.svn/text-base/
btmux/game/mechs/.svn/wcprops/
btmux/game/text/.svn/
btmux/include/.svn/
btmux/misc/
btmux/misc/.svn/
btmux/misc/.svn/prop-base/
btmux/misc/.svn/props/
btmux/misc/.svn/text-base/
btmux/misc/.svn/wcprops/
btmux/python/
btmux/python/.svn/
btmux/python/.svn/prop-base/
btmux/python/.svn/props/
btmux/python/.svn/text-base/
btmux/python/.svn/wcprops/
btmux/src/.svn/prop-base/
btmux/src/.svn/props/
btmux/src/.svn/text-base/
btmux/src/.svn/wcprops/
btmux/src/hcode/.svn/
btmux/src/hcode/btech/
btmux/src/hcode/btech/.svn/
btmux/src/hcode/btech/.svn/prop-base/
btmux/src/hcode/btech/.svn/props/
btmux/src/hcode/btech/.svn/text-base/
btmux/src/hcode/btech/.svn/wcprops/
btmux/src/hcode/include/.svn/
/*
 * mkindx.c -- make help/news file indexes 
 */

/*
 * $Id: mkindx.c,v 1.2 2005/08/08 09:43:07 murrayma Exp $ 
 */

#include "copyright.h"
#include "config.h"

#define MKINDX
#include "help.h"

char line[LINE_SIZE];
int 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);
}