]> code.delx.au - gnu-emacs/blobdiff - lib-src/yow.c
(Program Modes): Replace inforef to emacs-xtra by conditional xref's, depending
[gnu-emacs] / lib-src / yow.c
index 0f289a19358cc8ae75bede7671d9266250cbf217..18f0f7b2e13440058365e88c1c6a6d2b2e2fe085 100644 (file)
@@ -1,15 +1,35 @@
 /*
  * yow.c
- * 
+ *
  * Print a quotation from Zippy the Pinhead.
  * Qux <Kaufman-David@Yale> 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.
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <stdio.h>
 #include <ctype.h>
-#include <../src/paths.h>      /* For PATH_DATA.  */
+#ifdef TIME_WITH_SYS_TIME
+#include <sys/time.h>
+#include <time.h>
+#else
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#else
+#include <time.h>
+#endif
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include "epaths.h"            /* For PATH_DATA.  */
 
 #define BUFSIZE  80
 #define SEP      '\0'
     &res;})
 #endif
 
+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]);
@@ -48,17 +71,18 @@ main (argc, argv)
 #endif
 
   if ((fp = fopen(file, "r")) == NULL) {
+    fprintf(stderr, "yow: ");
     perror(file);
-    exit(1);
+    exit(EXIT_FAILURE);
   }
 
   /* initialize random seed */
-  srand((int) (getpid() + time((long *) 0)));
+  srand((int) (getpid() + time((time_t *) 0)));
 
   setup_yow(fp);
   yow(fp);
   fclose(fp);
-  exit(0);
+  return EXIT_SUCCESS;
 }
 
 static long len = -1;
@@ -79,17 +103,17 @@ setup_yow(fp)
    * we explicitly skip that. */
   while ((c = getc(fp)) != SEP) {
     if (c == EOF) {
-      fprintf(stderr, "File contains no separators.\n");
-      exit(2);
+      fprintf(stderr, "yow: file contains no separators\n");
+      exit(EXIT_FAILURE);
     }
   }
   header_len = ftell(fp);
   if (header_len > AVG_LEN)
     header_len -= AVG_LEN;     /* allow the first quotation to appear */
-       
+
   if (fseek(fp, 0L, 2) == -1) {
-    perror("fseek 1");
-    exit(1);
+    perror("yow");
+    exit(EXIT_FAILURE);
   }
   len = ftell(fp) - header_len;
 }
@@ -104,12 +128,11 @@ 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");
-    exit(1);
+    perror("yow");
+    exit(EXIT_FAILURE);
   }
 
   /* Read until SEP, read next line, print it.
@@ -131,27 +154,32 @@ yow (fp)
   }
 
   bufsize = BUFSIZE;
-  buf = malloc(bufsize);
+  buf = (char *) malloc(bufsize);
   if (buf == (char *)0) {
-    fprintf(stderr, "can't allocate any memory\n");
-    exit (3);
+    fprintf(stderr, "yow: virtual memory exhausted\n");
+    exit (EXIT_FAILURE);
   }
 
   buf[i++] = c;
   while ((c = getc(fp)) != SEP && c != EOF) {
     buf[i++] = c;
-       
+
     if (i == bufsize-1) {
       /* Yow! Is this quotation too long yet? */
       bufsize *= 2;
-      buf = realloc(buf, bufsize);
+      buf = (char *) realloc(buf, bufsize);
       if (buf == (char *)0) {
-       fprintf(stderr, "can't allocate more memory\n");
-       exit (3);
+       fprintf(stderr, "yow: virtual memory exhausted\n");
+       exit (EXIT_FAILURE);
       }
     }
   }
   buf[i++] = 0;
   printf("%s\n", buf);
+  free (buf);
 }
 
+/* arch-tag: e40fc0df-bafb-4001-af24-5c883d1c685e
+   (do not change this comment) */
+
+/* yow.c ends here */