Modified to use cookie.el

This commit is contained in:
Eric S. Raymond 1993-03-22 22:44:49 +00:00
parent c91c4e6d7f
commit ed73b2568d
2 changed files with 24 additions and 102 deletions

View file

@ -24,17 +24,11 @@
;;; Commentary:
; Steve Strassmann (straz@media-lab.media.mit.edu) didn't write
; Steve Strassmann <straz@media-lab.media.mit.edu> 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 <BattenIG@CS.BHAM.AC.UK>
; [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

View file

@ -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...