Annotation of 43BSD/contrib/emacs/etc/yow.c, revision 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:   sprintf(file, "%s/%s", PATH_EXEC, YOW_FILE);
        !            25: 
        !            26:   if ((fp = fopen(file, "r")) == NULL) {
        !            27:     perror(file);
        !            28:     exit(1);
        !            29:   }
        !            30: 
        !            31:   /* initialize random seed */
        !            32:   srand((int) (getpid() + time((long *) 0)));
        !            33: 
        !            34:   yow(fp);
        !            35:   fclose(fp);
        !            36:   exit(0);
        !            37: }
        !            38: 
        !            39: void yow (fp)
        !            40:      FILE *fp;
        !            41: {
        !            42:   static long len = -1;
        !            43:   long offset;
        !            44:   int c, i = 0;
        !            45:   char buf[BUFSIZE];
        !            46: 
        !            47:   /* Get length of file, go to a random place in it */
        !            48:   if (len == -1) {
        !            49:     if (fseek(fp, 0, 2) == -1) {
        !            50:       perror("fseek 1");
        !            51:       exit(1);
        !            52:     }
        !            53:     len = ftell(fp);
        !            54:   }
        !            55:   offset = rand() % len;
        !            56:   if (fseek(fp, offset, 0) == -1) {
        !            57:     perror("fseek 2");
        !            58:     exit(1);
        !            59:   }
        !            60: 
        !            61:   /* Read until SEP, read next line, print it.
        !            62:      (Note that we will never print anything before the first seperator.)
        !            63:      If we hit EOF looking for the first SEP, just recurse. */
        !            64:   while ((c = getc(fp)) != SEP)
        !            65:     if (c == EOF) {
        !            66:       yow(fp);
        !            67:       return;
        !            68:     }
        !            69: 
        !            70:   /* Skip leading whitespace, then read in a quotation.
        !            71:      If we hit EOF before we find a non-whitespace char, recurse. */
        !            72:   while (isspace(c = getc(fp)))
        !            73:     ;
        !            74:   if (c == EOF) {
        !            75:     yow(fp);
        !            76:     return;
        !            77:   }
        !            78:   buf[i++] = c;
        !            79:   while ((c = getc(fp)) != SEP && c != EOF) {
        !            80:     buf[i++] = c;
        !            81: 
        !            82:     if (i == BUFSIZ-1)
        !            83:       /* Yow! Is this quotation too long yet? */
        !            84:       break;
        !            85:   }
        !            86:   buf[i++] = 0;
        !            87:   printf("%s\n", buf);
        !            88: }
        !            89: 

unix.superglobalmegacorp.com

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