Annotation of 43BSDReno/contrib/emacs-18.55/etc/yow.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include <ctype.h>
                      3: #include "../src/paths.h"
                      4: 
                      5: /* zippy.c
                      6:  * 
                      7:  * Print a quotation from Zippy the Pinhead.
                      8:  * Qux <Kaufman-David@Yale> March 6, 1986
                      9:  * 
                     10:  */
                     11: 
                     12: #define BUFSIZE  2000
                     13: #define SEP      '\0'
                     14: #define YOW_FILE "yow.lines"
                     15: 
                     16: main (argc, argv)
                     17:      int argc;
                     18:      char *argv[];
                     19: {
                     20:   FILE *fp;
                     21:   char file[BUFSIZ];
                     22:   void yow();
                     23: 
                     24:   if (argc > 2 && !strcmp (argv[1], "-f"))
                     25:     strcpy (file, argv[2]);
                     26:   else
                     27: #ifdef vms
                     28:     sprintf (file, "%s%s", PATH_EXEC, YOW_FILE);
                     29: #else
                     30:     sprintf (file, "%s/%s", PATH_EXEC, YOW_FILE);
                     31: #endif
                     32: 
                     33:   if ((fp = fopen(file, "r")) == NULL) {
                     34:     perror(file);
                     35:     exit(1);
                     36:   }
                     37: 
                     38:   /* initialize random seed */
                     39:   srand((int) (getpid() + time((long *) 0)));
                     40: 
                     41:   yow(fp);
                     42:   fclose(fp);
                     43:   exit(0);
                     44: }
                     45: 
                     46: void
                     47: yow (fp)
                     48:      FILE *fp;
                     49: {
                     50:   static long len = -1;
                     51:   long offset;
                     52:   int c, i = 0;
                     53:   char buf[BUFSIZE];
                     54: 
                     55:   /* Get length of file, go to a random place in it */
                     56:   if (len == -1) {
                     57:     if (fseek(fp, 0, 2) == -1) {
                     58:       perror("fseek 1");
                     59:       exit(1);
                     60:     }
                     61:     len = ftell(fp);
                     62:   }
                     63:   offset = rand() % len;
                     64:   if (fseek(fp, offset, 0) == -1) {
                     65:     perror("fseek 2");
                     66:     exit(1);
                     67:   }
                     68: 
                     69:   /* Read until SEP, read next line, print it.
                     70:      (Note that we will never print anything before the first seperator.)
                     71:      If we hit EOF looking for the first SEP, just recurse. */
                     72:   while ((c = getc(fp)) != SEP)
                     73:     if (c == EOF) {
                     74:       yow(fp);
                     75:       return;
                     76:     }
                     77: 
                     78:   /* Skip leading whitespace, then read in a quotation.
                     79:      If we hit EOF before we find a non-whitespace char, recurse. */
                     80:   while (isspace(c = getc(fp)))
                     81:     ;
                     82:   if (c == EOF) {
                     83:     yow(fp);
                     84:     return;
                     85:   }
                     86:   buf[i++] = c;
                     87:   while ((c = getc(fp)) != SEP && c != EOF) {
                     88:     buf[i++] = c;
                     89: 
                     90:     if (i == BUFSIZ-1)
                     91:       /* Yow! Is this quotation too long yet? */
                     92:       break;
                     93:   }
                     94:   buf[i++] = 0;
                     95:   printf("%s\n", buf);
                     96: }
                     97: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.