From 3f018a9c777ea796d53410721a27740a6af28b63 Mon Sep 17 00:00:00 2001 From: rlar Date: Sun, 3 Jul 2011 09:46:39 +0000 Subject: [PATCH] upgrade ngmakeidx to support build in a sparate directory --- ChangeLog | 5 ++++ src/Makefile.am | 4 +-- src/makeidx.c | 72 ++++++++++++++++++++++++++++++------------------- 3 files changed, 51 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index 897750fe1..ce44209db 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2011-07-03 Robert Larice + * src/Makefile.am , + * src/makeidx.c : + upgrade ngmakeidx to support build in a sparate directory + 2011-07-02 Robert Larice * src/main.c : main.c, a series of cleanups concerning SETJMP processing diff --git a/src/Makefile.am b/src/Makefile.am index 8106e185c..6c4cb325b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -275,8 +275,8 @@ ngmakeidx_SOURCES = makeidx.c ## create index for online help: -ngspice.idx: ngmakeidx$(EXEEXT) - ./ngmakeidx$(EXEEXT) $(srcdir)/ngspice.txt +ngspice.idx: ngmakeidx$(EXEEXT) $(srcdir)/ngspice.txt + ./ngmakeidx$(EXEEXT) -o ngspice.idx $(srcdir)/ngspice.txt endif !WINDOWS diff --git a/src/makeidx.c b/src/makeidx.c index 677d6ba28..f23cc1e0a 100644 --- a/src/makeidx.c +++ b/src/makeidx.c @@ -13,46 +13,62 @@ Copyright 1990 Regents of the University of California. All rights reserved. #define BSIZE_SP 512 -int -main(int argc, char **argv) -{ +static void +makeidx(const char *dst, const char *src) +{ FILE *fp; FILE *wfp; char buf[BSIZE_SP]; long fpos; char subject[BSIZE_SP]; struct hlp_index indexitem; - char *pos; + if (!(fp = fopen(src, "r"))) { + perror(src); + return; + } - while (--argc) { - if (!(fp = fopen(argv[argc], "r"))) { - perror(argv[argc]); - continue; - } - strcpy(buf, argv[argc]); - if (((pos =strrchr(buf, '.')) == 0) || - strcmp(pos, ".txt")) { - fprintf(stderr, "%s does not end in .txt\n", buf); - continue; - } - *++pos = 'i'; *++pos = 'd'; *++pos = 'x'; - if (!(wfp = fopen(buf, "wb"))) { - perror(buf); - continue; - } - fpos = 0; - while (fgets(buf, sizeof(buf), fp)) { + if (!(wfp = fopen(dst, "wb"))) { + perror(dst); + return; + } + + fpos = 0; + while (fgets(buf, sizeof(buf), fp)) { if (!strncmp(buf, "SUBJECT: ", 9)) { - strcpy(subject, &buf[9]); - subject[strlen(subject) - 1] = '\0'; /* get rid of '\n' */ - strncpy(indexitem.subject, subject, 64); /* zero out end */ - indexitem.fpos = fpos; - fwrite(&indexitem, sizeof(struct hlp_index), 1, wfp); + strcpy(subject, &buf[9]); + subject[strlen(subject) - 1] = '\0'; /* get rid of '\n' */ + strncpy(indexitem.subject, subject, 64); /* zero out end */ + indexitem.fpos = fpos; + fwrite(&indexitem, sizeof(struct hlp_index), 1, wfp); } fpos = ftell(fp); - } } +} + + +int +main(int argc, char **argv) +{ + if(argc == 4 && !strcmp(argv[1], "-o")) { + makeidx(argv[2], argv[3]); + exit(0); + } + + while (--argc) { + + char buf[BSIZE_SP]; + char *pos; + + strcpy(buf, argv[argc]); + if (!(pos = strrchr(buf, '.')) || strcmp(pos, ".txt")) { + fprintf(stderr, "%s does not end in .txt\n", buf); + continue; + } + *++pos = 'i'; *++pos = 'd'; *++pos = 'x'; + makeidx(buf, argv[argc]); + } + exit(0); }