From ed73b2568d16197d327c7d00d3116ae72caffa67 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Mon, 22 Mar 1993 22:44:49 +0000 Subject: [PATCH] Modified to use cookie.el --- lisp/play/spook.el | 78 ++++++---------------------------------------- lisp/play/yow.el | 48 +++++++++------------------- 2 files changed, 24 insertions(+), 102 deletions(-) diff --git a/lisp/play/spook.el b/lisp/play/spook.el index 1ba0b2dabb6..1b4bce46a8b 100644 --- a/lisp/play/spook.el +++ b/lisp/play/spook.el @@ -24,17 +24,11 @@ ;;; Commentary: -; Steve Strassmann (straz@media-lab.media.mit.edu) didn't write +; Steve Strassmann didn't write ; this, and even if he did, he really didn't mean for you to use it ; in an anarchistic way. ; ; To use this: -; Make sure you have the variable SPOOK-PHRASES-FILE pointing to -; a valid phrase file. Phrase files are in the same format as -; zippy's yow.lines (ITS-style LINS format). -; Strings are terminated by ascii 0 characters. Leading whitespace ignored. -; Everything up to the first \000 is a comment. -; ; Just before sending mail, do M-x spook. ; A number of phrases will be inserted into your buffer, to help ; give your message that extra bit of attractiveness for automated @@ -42,6 +36,8 @@ ;;; Code: +(require 'cookie) + ; Variables (defvar spook-phrases-file (concat data-directory "spook.lines") "Keep your favorite phrases here.") @@ -49,71 +45,17 @@ (defvar spook-phrase-default-count 15 "Default number of phrases to insert") -(defvar spook-vector nil - "Important phrases for NSA mail-watchers") - -; Randomize the seed in the random number generator. -(random t) - -; Call this with M-x spook. ;;;###autoload (defun spook () "Adds that special touch of class to your outgoing mail." (interactive) - (if (null spook-vector) - (setq spook-vector (snarf-spooks))) - (shuffle-vector spook-vector) - (let ((start (point))) - (insert ?\n) - (spook1 (min (- (length spook-vector) 1) spook-phrase-default-count)) - (insert ?\n) - (fill-region-as-paragraph start (point) nil))) + (cookie-insert + spook-phrases-file + spook-phrase-default-count + "Checking authorization" + "Checking authorization...Approved")) -(defun spook1 (arg) - "Inserts a spook phrase ARG times." - (cond ((zerop arg) t) - (t (insert (aref spook-vector arg)) - (insert " ") - (spook1 (1- arg))))) - -(defun snarf-spooks () - "Reads in the phrase file" - (message "Checking authorization...") - (save-excursion - (let ((buf (generate-new-buffer "*spook*")) - (result '())) - (set-buffer buf) - (insert-file-contents (expand-file-name spook-phrases-file)) - (search-forward "\0") - (while (progn (skip-chars-forward " \t\n\r\f") (not (eobp))) - (let ((beg (point))) - (search-forward "\0") - (setq result (cons (buffer-substring beg (1- (point))) - result)))) - (kill-buffer buf) - (message "Checking authorization... Approved.") - (setq spook-vector (apply 'vector result))))) - -(defun pick-random (n) - "Returns a random number from 0 to N-1 inclusive." - (% (logand 0777777 (random)) n)) - -; Thanks to Ian G Batten -; [of the University of Birmingham Computer Science Department] -; for the iterative version of this shuffle. -; -(defun shuffle-vector (vector) - "Randomly permute the elements of VECTOR (all permutations equally likely)" - (let ((i 0) - j - temp - (len (length vector))) - (while (< i len) - (setq j (+ i (pick-random (- len i)))) - (setq temp (aref vector i)) - (aset vector i (aref vector j)) - (aset vector j temp) - (setq i (1+ i)))) - vector) +;; Note: the implementation that used to take up most of this file has +;; been cleaned up and generalized and now resides in cookie.el. ;;; spook.el ends here diff --git a/lisp/play/yow.el b/lisp/play/yow.el index e226f74db2a..006cf992edd 100644 --- a/lisp/play/yow.el +++ b/lisp/play/yow.el @@ -1,6 +1,6 @@ ;;; yow.el --- generate random zippyisms -;; Copyright (C) 1985, 1987 Free Software Foundation, Inc. +;; Copyright (C) 1993 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: games @@ -24,25 +24,24 @@ ;;; Commentary: ;; Important pinheaddery for GNU Emacs. -;; Expects file emacs/etc/yow.lines to be in ITS-style LINS format -;; (ie strings terminated by ascii 0 characters. Leading whitespace ignored) -;; Everything up to the first \000 is a comment. +;; +;; See cookie.el for implementation. Note --- the `n' argument of yow +;; from the 18.xx implementation is no longer; we only support *random* +;; random access now. ;;; Code: -; Randomize the seed in the random number generator. -(random t) +(require 'cookie) + +(defvar yow-file (concat data-directory "yow.lines") + "Pertinent pinhead phrases.") ;;;###autoload -(defun yow (&optional n interactive) - "Return or display a Zippy quotation." - (interactive "P\np") - (if (null yow-vector) - (setq yow-vector (snarf-yows))) - (cond (n (setq n (prefix-numeric-value n))) - ((>= (setq n (random (length yow-vector))) 0)) - (t (setq n (- n)))) - (let ((yow (aref yow-vector n))) +(defun yow (&optional interactive) + "Return or display a random Zippy quotation." + (interactive "P") + (let ((yow (cookie + yow-file "Am I CONSING yet?..." "I have SEEN the CONSING!!"))) (cond ((not interactive) yow) ((not (string-match "\n" yow)) @@ -53,25 +52,6 @@ (with-output-to-temp-buffer "*Help*" (princ yow)))))) -(defvar yow-vector nil "Pertinent pinhead statements") -(defun snarf-yows (&optional file) - (save-excursion - (let ((buf (generate-new-buffer " yow")) - (result '()) - (cursor-in-echo-area t)) - (message "Am I CONSING yet?...") - (set-buffer buf) - (insert-file-contents (or file - (expand-file-name "yow.lines" data-directory))) - (search-forward "\0") - (while (progn (skip-chars-forward " \t\n\r\f") (not (eobp))) - (let ((beg (point))) - (search-forward "\0") - (setq result (cons (buffer-substring beg (1- (point))) - result)))) - (kill-buffer buf) - (message "I have SEEN the CONSING!!" (length result)) - (apply 'vector (nreverse result))))) ; Yowza!! Feed zippy quotes to the doctor. Watch results. ; fun, fun, fun. Entertainment for hours...