Annotation of 43BSDReno/contrib/emacs-18.55/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:   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.