From dde31d42273aa7c128b11cc65175359a5067f31f Mon Sep 17 00:00:00 2001 From: gdr Date: Tue, 21 Jan 1997 15:34:02 +0000 Subject: [PATCH] Initial checkin for mkso(8), a util for making the required .so "links" for man pages. --- build.tools/makefile.mk | 15 +++++ build.tools/mkso.c | 133 ++++++++++++++++++++++++++++++++++++++++ sbin/mkso/mkso.c | 133 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 281 insertions(+) create mode 100644 build.tools/makefile.mk create mode 100644 build.tools/mkso.c create mode 100644 sbin/mkso/mkso.c diff --git a/build.tools/makefile.mk b/build.tools/makefile.mk new file mode 100644 index 0000000..6c96987 --- /dev/null +++ b/build.tools/makefile.mk @@ -0,0 +1,15 @@ +# +# $Id: makefile.mk,v 1.1 1997/01/21 15:34:02 gdr Exp $ +# + +TARGETS = mkso +OBJS = mkso.o mkso.root +CFLAGS += + +default: mkso + +mkso: mkso.o + $(CC) -o $@ $(LDFLAGS) $< $(LDLIBS) + +clean clobber: + $(RM) -f $(TARGETS) $(OBJS) diff --git a/build.tools/mkso.c b/build.tools/mkso.c new file mode 100644 index 0000000..8123451 --- /dev/null +++ b/build.tools/mkso.c @@ -0,0 +1,133 @@ +/* + * $Id: mkso.c,v 1.1 1997/01/21 15:34:02 gdr Exp $ + * + * Devin Reade, 1997. + */ + +#include +#include +#include +#include +#include + +#define BUFFERSIZE 1024 +#define DELIM " \t" + +char *progname = NULL; +int deleteFiles = 0; +int verbose = 0; + +void +usage (void) { + printf("This program is part of the GNO installation package.\n"); + printf("It creates .so (nroff source files) for the man package\n\n"); + printf("Usage: %s [-dhv] datafile\n", progname); + printf("\t-h\tprint usage information\n"); + printf("\t-d\tdelete instead of create files (safe)\n"); + printf("\t-v\tverbose operation\n"); + exit(1); +} + +int main(int argc, char **argv) { + static char dataBuffer[BUFFERSIZE]; + static char magicBuffer[BUFFERSIZE]; + FILE *fp, *outfp; + char *p, *file, *new, *org; + int line = 0; + int c; + char *magic = ".\\\" This file is auto-generated by mkso.\n"; + + progname = argv[0]; + while ((c = getopt(argc, argv, "dhv")) != EOF) { + switch (c) { + case 'd': + deleteFiles = 1; + break; + + case 'v': + verbose = 1; + break; + + case 'h': + default: + usage(); + } + } + if (argc - optind != 1) { + usage(); + } else { + file = argv[optind]; + } + + if ((fp = fopen(file, "r")) == NULL) { + perror("couldn't open data file"); + exit(1); + } + + while (fgets(dataBuffer, BUFFERSIZE, fp) != NULL) { + line++; + + /* eliminate comments and newlines -- get file names */ + if ((p = strchr(dataBuffer, '#')) != NULL || + (p = strchr(dataBuffer, '\n')) != NULL) { + *p = '\0'; + } + if ((org = strtok(dataBuffer, DELIM)) == NULL) { + continue; + } + if ((new = strtok(NULL, DELIM)) == NULL) { + fprintf(stderr, "missing new file name at line %d of %s", line, file); + continue; + } + + if (deleteFiles) { + if ((outfp = fopen(new, "r")) == NULL) { + /* file doesn't exist -- doesn't need deleting */ + continue; + } + + /* look for magic string on second line */ + if (fgets(magicBuffer, BUFFERSIZE, outfp) == NULL || + fgets(magicBuffer, BUFFERSIZE, outfp) == NULL || + strcmp(magicBuffer, magic)) { + printf("bad magic for %s -- not deleted\n", new); + } else { + if (verbose) { + printf("rm -f %s\n", new); + } + unlink(new); + } + } else { + + if (access(new, F_OK) == 0) { + if (verbose) { + printf("file %s already exists -- skipping\n", new); + } + continue; + } + + if (verbose) { + printf("linking %s to %s\n", new, org); + } + + + if ((outfp = fopen(new, "w")) == NULL) { + fprintf(stderr, + "couldn't open \"%s\" from line %d: %s: file skipped\n", + new, line, strerror(errno)); + continue; + } + fprintf(outfp, ".so %s\n", org); + fprintf(outfp, magic); + fclose(outfp); + } + } + + if (ferror(fp)) { + perror("error on reading data file"); + exit(1); + } + + fclose(fp); + return 0; +} diff --git a/sbin/mkso/mkso.c b/sbin/mkso/mkso.c new file mode 100644 index 0000000..8123451 --- /dev/null +++ b/sbin/mkso/mkso.c @@ -0,0 +1,133 @@ +/* + * $Id: mkso.c,v 1.1 1997/01/21 15:34:02 gdr Exp $ + * + * Devin Reade, 1997. + */ + +#include +#include +#include +#include +#include + +#define BUFFERSIZE 1024 +#define DELIM " \t" + +char *progname = NULL; +int deleteFiles = 0; +int verbose = 0; + +void +usage (void) { + printf("This program is part of the GNO installation package.\n"); + printf("It creates .so (nroff source files) for the man package\n\n"); + printf("Usage: %s [-dhv] datafile\n", progname); + printf("\t-h\tprint usage information\n"); + printf("\t-d\tdelete instead of create files (safe)\n"); + printf("\t-v\tverbose operation\n"); + exit(1); +} + +int main(int argc, char **argv) { + static char dataBuffer[BUFFERSIZE]; + static char magicBuffer[BUFFERSIZE]; + FILE *fp, *outfp; + char *p, *file, *new, *org; + int line = 0; + int c; + char *magic = ".\\\" This file is auto-generated by mkso.\n"; + + progname = argv[0]; + while ((c = getopt(argc, argv, "dhv")) != EOF) { + switch (c) { + case 'd': + deleteFiles = 1; + break; + + case 'v': + verbose = 1; + break; + + case 'h': + default: + usage(); + } + } + if (argc - optind != 1) { + usage(); + } else { + file = argv[optind]; + } + + if ((fp = fopen(file, "r")) == NULL) { + perror("couldn't open data file"); + exit(1); + } + + while (fgets(dataBuffer, BUFFERSIZE, fp) != NULL) { + line++; + + /* eliminate comments and newlines -- get file names */ + if ((p = strchr(dataBuffer, '#')) != NULL || + (p = strchr(dataBuffer, '\n')) != NULL) { + *p = '\0'; + } + if ((org = strtok(dataBuffer, DELIM)) == NULL) { + continue; + } + if ((new = strtok(NULL, DELIM)) == NULL) { + fprintf(stderr, "missing new file name at line %d of %s", line, file); + continue; + } + + if (deleteFiles) { + if ((outfp = fopen(new, "r")) == NULL) { + /* file doesn't exist -- doesn't need deleting */ + continue; + } + + /* look for magic string on second line */ + if (fgets(magicBuffer, BUFFERSIZE, outfp) == NULL || + fgets(magicBuffer, BUFFERSIZE, outfp) == NULL || + strcmp(magicBuffer, magic)) { + printf("bad magic for %s -- not deleted\n", new); + } else { + if (verbose) { + printf("rm -f %s\n", new); + } + unlink(new); + } + } else { + + if (access(new, F_OK) == 0) { + if (verbose) { + printf("file %s already exists -- skipping\n", new); + } + continue; + } + + if (verbose) { + printf("linking %s to %s\n", new, org); + } + + + if ((outfp = fopen(new, "w")) == NULL) { + fprintf(stderr, + "couldn't open \"%s\" from line %d: %s: file skipped\n", + new, line, strerror(errno)); + continue; + } + fprintf(outfp, ".so %s\n", org); + fprintf(outfp, magic); + fclose(outfp); + } + } + + if (ferror(fp)) { + perror("error on reading data file"); + exit(1); + } + + fclose(fp); + return 0; +}