X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/701570d7d6b2239163cd22150e8709dbf53fcaf1..dddcbf00213d4f1c6866abfb8d9132636839a3a1:/lib-src/yow.c diff --git a/lib-src/yow.c b/lib-src/yow.c index bfff0e7d3e..4efe815341 100644 --- a/lib-src/yow.c +++ b/lib-src/yow.c @@ -3,13 +3,16 @@ * * Print a quotation from Zippy the Pinhead. * Qux March 6, 1986 + * + * This file is in the public domain because the author published it + * with no copyright notice before the US signed the Bern Convention. * * With dynamic memory allocation. */ #include #include -#include "../src/paths.h" /* For PATH_EXEC. */ +#include <../src/epaths.h> /* For PATH_DATA. */ #define BUFSIZE 80 #define SEP '\0' @@ -18,24 +21,42 @@ #define YOW_FILE "yow.lines" #endif +#ifdef MSDOS +#define rootrelativepath(rel) \ +({\ + static char res[BUFSIZE], *p;\ + strcpy (res, argv[0]);\ + p = res + strlen (res);\ + while (p != res && *p != '/' && *p != '\\' && *p != ':') p--;\ + strcpy (p + 1, "../");\ + strcpy (p + 4, rel);\ + &res;}) +#endif + +char *malloc(), *realloc(); + +void yow(); +void setup_yow(); + +int main (argc, argv) int argc; char *argv[]; { FILE *fp; char file[BUFSIZ]; - void yow(), setup_yow(); if (argc > 2 && !strcmp (argv[1], "-f")) strcpy (file, argv[2]); else #ifdef vms - sprintf (file, "%s%s", PATH_EXEC, YOW_FILE); + sprintf (file, "%s%s", PATH_DATA, YOW_FILE); #else - sprintf (file, "%s/%s", PATH_EXEC, YOW_FILE); + sprintf (file, "%s/%s", PATH_DATA, YOW_FILE); #endif if ((fp = fopen(file, "r")) == NULL) { + fprintf(stderr, "yow: "); perror(file); exit(1); } @@ -46,7 +67,7 @@ main (argc, argv) setup_yow(fp); yow(fp); fclose(fp); - exit(0); + return 0; } static long len = -1; @@ -67,7 +88,7 @@ setup_yow(fp) * we explicitly skip that. */ while ((c = getc(fp)) != SEP) { if (c == EOF) { - fprintf(stderr, "File contains no separators.\n"); + fprintf(stderr, "yow: file contains no separators\n"); exit(2); } } @@ -76,7 +97,7 @@ setup_yow(fp) header_len -= AVG_LEN; /* allow the first quotation to appear */ if (fseek(fp, 0L, 2) == -1) { - perror("fseek 1"); + perror("yow"); exit(1); } len = ftell(fp) - header_len; @@ -92,16 +113,15 @@ yow (fp) int c, i = 0; char *buf; unsigned int bufsize; - char *malloc(), *realloc(); offset = rand() % len + header_len; if (fseek(fp, offset, 0) == -1) { - perror("fseek 2"); + perror("yow"); exit(1); } /* Read until SEP, read next line, print it. - (Note that we will never print anything before the first seperator.) + (Note that we will never print anything before the first separator.) If we hit EOF looking for the first SEP, just recurse. */ while ((c = getc(fp)) != SEP) if (c == EOF) { @@ -121,7 +141,7 @@ yow (fp) bufsize = BUFSIZE; buf = malloc(bufsize); if (buf == (char *)0) { - fprintf(stderr, "can't allocate any memory\n"); + fprintf(stderr, "yow: virtual memory exhausted\n"); exit (3); } @@ -134,7 +154,7 @@ yow (fp) bufsize *= 2; buf = realloc(buf, bufsize); if (buf == (char *)0) { - fprintf(stderr, "can't allocate more memory\n"); + fprintf(stderr, "yow: virtual memory exhausted\n"); exit (3); } }