// // mkindx.cpp -- make help/news file indexes // // $Id: mkindx.cpp,v 1.2 2000/09/18 08:03:42 sdennis Exp $ // #include "copyright.h" #include "autoconf.h" #include "config.h" #include "help.h" #include "_build.h" #define LINE_SIZE 4096 char line[LINE_SIZE + 1]; int DCL_CDECL main(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) { #ifdef WIN32 #ifdef BETA #if PATCHLEVEL > 0 printf("%s from MUX %s.p%d for Win32 #%s [BETA]\n", argv[0], MUX_VERSION, PATCHLEVEL, MUX_BUILD_NUM); #else // PATCHLEVEL printf("%s from MUX %s for Win32 #%s [BETA]\n", argv[0], MUX_VERSION, MUX_BUILD_NUM); #endif // PATCHLEVEL #else // BETA #if PATCHLEVEL > 0 printf("%s from MUX %s.p%d for Win32 #%s [%s]\n", argv[0], MUX_VERSION, PATCHLEVEL, MUX_BUILD_NUM, MUX_RELEASE_DATE); #else // PATCHLEVEL printf("%s from MUX %s for Win32 #%s [%s]\n", argv[0], MUX_VERSION, MUX_BUILD_NUM, MUX_RELEASE_DATE); #endif // PATCHLEVEL #endif // BETA #else // WIN32 #ifdef BETA #if PATCHLEVEL > 0 printf("%s from MUX %s.p%d #%s [BETA]\n", argv[0], MUX_VERSION, PATCHLEVEL, MUX_BUILD_NUM); #else // PATCHLEVEL printf("%s from MUX %s #%s [BETA]\n", argv[0], MUX_VERSION, MUX_BUILD_NUM); #endif // PATCHLEVEL #else // BETA #if PATCHLEVEL > 0 printf("%s from MUX %s.p%d #%s [%s]\n", argv[0], MUX_VERSION, PATCHLEVEL, MUX_BUILD_NUM, MUX_RELEASE_DATE); #else // PATCHLEVEL printf("%s from MUX %s #%s [%s]\n", argv[0], MUX_VERSION, MUX_BUILD_NUM, MUX_RELEASE_DATE); #endif // PATCHLEVEL #endif // BETA #endif // WIN32 printf("Usage:\tmkindx <file_to_be_indexed> <output_index_filename>\n"); exit(-1); } if ((rfp = fopen(argv[1], "rb")) == NULL) { fprintf(stderr, "can't open %s for reading\n", argv[1]); exit(-1); } if ((wfp = fopen(argv[2], "wb")) == 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); return 0; }