/* mkindx.c */
/* $Id: mkindx.c,v 1.3 1993/02/25 00:31:59 nils Exp $ */
#include <stdio.h>
#include "externs.h"
#include "config.h"
#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;
char textfile[40], indxfile[40];
if ( argc != 2 ) {
fprintf(stderr, "usage: mkindx <bundlename>\nfor instance: mkindx help\n");
exit(1);
}
sprintf(textfile, "%stext", argv[1]);
sprintf(indxfile, "%sindx", argv[1]);
if ( (rfp = fopen(textfile, "r")) == NULL ) {
fprintf(stderr, "can't open %s for reading\n", HELPTEXT);
exit(1);
}
if ( (wfp = fopen(indxfile, "w")) == NULL ) {
fprintf(stderr, "can't open %s for writing\n", HELPINDX);
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", HELPINDX);
exit(2);
}
}
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", HELPINDX);
exit(1);
}
fclose(rfp);
fclose(wfp);
printf(" created '%s'\n", indxfile);
printf(" %d topics indexed\n", ntopics);
exit(0);
}