changeset 12948:052c1dfa4efa

(abs): Function definition deleted. (goto-beginning-of-buffer): Macro deleted. Use goto-char. (goto-end-of-buffer): Macro deleted. Use goto-char. (maxint): Macro deleted. (life-increment): Renamed from increment. (life-initialized): New variable. (life): Do (random t) only once and only when `life' is called.
author Richard M. Stallman <rms@gnu.org>
date Sat, 26 Aug 1995 20:31:16 +0000
parents c465c82e09ff
children f6e5a73b96e4
files lisp/play/life.el
diffstat 1 files changed, 20 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/play/life.el	Sat Aug 26 20:25:23 1995 +0000
+++ b/lisp/play/life.el	Sat Aug 26 20:31:16 1995 +0000
@@ -74,14 +74,7 @@
 (defmacro life-void-string () (char-to-string (life-void-char)))
 (defmacro life-not-void-regexp () (concat "[^" (life-void-string) "\n]"))
 
-;; try to optimize the (goto-char (point-min)) & (goto-char (point-max))
-;; idioms.  This depends on goto-char's not griping if we undershoot
-;; or overshoot beginning or end of buffer.
-(defmacro goto-beginning-of-buffer () '(goto-char 1))
-(defmacro maxint () (lsh (lsh (lognot 0) 1) -1))
-(defmacro goto-end-of-buffer () '(goto-char (maxint)))
-
-(defmacro increment (variable) (list 'setq variable (list '1+ variable)))
+(defmacro life-increment (variable) (list 'setq variable (list '1+ variable)))
 
 
 ;; list of numbers that tell how many characters to move to get to
@@ -97,7 +90,8 @@
 ;; Sadly, mode-line-format won't display numbers.
 (defconst life-generation-string nil)
 
-(defun abs (n) (if (< n 0) (- n) n))
+(defvar life-initialized nil
+  "Non-nil if `life' has been run at least once.")
 
 ;;;###autoload
 (defun life (&optional sleeptime)
@@ -106,6 +100,9 @@
 arg non-nil from a program) is the number of seconds to sleep between
 generations (this defaults to 1)."
   (interactive "p")
+  (or life-initialized
+      (random t))
+  (setq life-initialized t)
   (or sleeptime (setq sleeptime 1))
   (life-setup)
   (life-display-generation sleeptime)
@@ -120,8 +117,6 @@
 (defalias 'life-mode 'life)
 (put 'life-mode 'mode-class 'special)
 
-(random t)
-
 (defun life-setup ()
   (let (n)
     (switch-to-buffer (get-buffer-create "*Life*") t)
@@ -141,11 +136,11 @@
     ;; stuff in the random pattern
     (life-insert-random-pattern)
     ;; make sure (life-life-char) is used throughout
-    (goto-beginning-of-buffer)
+    (goto-char (point-min))
     (while (re-search-forward (life-not-void-regexp) nil t)
       (replace-match (life-life-string) t t))
     ;; center the pattern horizontally
-    (goto-beginning-of-buffer)
+    (goto-char (point-min))
     (setq n (/ (- fill-column (save-excursion (end-of-line) (point))) 2))
     (while (not (eobp))
       (indent-to n)
@@ -154,12 +149,12 @@
     (setq n (/ (- (1- (window-height))
 		  (count-lines (point-min) (point-max)))
 	       2))
-    (goto-beginning-of-buffer)
+    (goto-char (point-min))
     (newline n)
-    (goto-end-of-buffer)
+    (goto-char (point-max))
     (newline n)
     ;; pad lines out to fill-column
-    (goto-beginning-of-buffer)
+    (goto-char (point-min))
     (while (not (eobp))
       (end-of-line)
       (indent-to fill-column)
@@ -186,14 +181,14 @@
   (insert ?\n))
 
 (defun life-increment-generation ()
-  (increment life-current-generation)
+  (life-increment life-current-generation)
   (setq life-generation-string (int-to-string life-current-generation)))
 
 (defun life-grim-reaper ()
   ;; Clear the match information.  Later we check to see if it
   ;; is still clear, if so then all the cells have died.
   (store-match-data nil)
-  (goto-beginning-of-buffer)
+  (goto-char (point-min))
   ;; For speed declare all local variable outside the loop.
   (let (point char pivot living-neighbors list)
     (while (search-forward (life-life-string) nil t)
@@ -211,7 +206,7 @@
 	      ((< char 9)
 	       (subst-char-in-region point (1+ point) char 9 t))
 	      ((>= char (life-life-char))
-	       (increment living-neighbors)))
+	       (life-increment living-neighbors)))
 	(setq list (cdr list)))
       (if (memq living-neighbors '(2 3))
 	  ()
@@ -227,13 +222,13 @@
 
 (defun life-expand-plane-if-needed ()
   (catch 'done
-    (goto-beginning-of-buffer)
+    (goto-char (point-min))
     (while (not (eobp))
       ;; check for life at beginning or end of line.  If found at
       ;; either end, expand at both ends,
       (cond ((or (eq (following-char) (life-life-char))
 		 (eq (progn (end-of-line) (preceding-char)) (life-life-char)))
-	     (goto-beginning-of-buffer)
+	     (goto-char (point-min))
 	     (while (not (eobp))
 	       (insert (life-void-char))
 	       (end-of-line)
@@ -244,23 +239,23 @@
 	   (life-compute-neighbor-deltas)
 	   (throw 'done t)))
       (forward-line)))
-  (goto-beginning-of-buffer)
+  (goto-char (point-min))
   ;; check for life within the first two lines of the buffer.
   ;; If present insert two lifeless lines at the beginning..
   (cond ((search-forward (life-life-string)
 			 (+ (point) fill-column fill-column 2) t)
-	 (goto-beginning-of-buffer)
+	 (goto-char (point-min))
 	 (insert-char (life-void-char) fill-column)
 	 (insert ?\n)
 	 (insert-char (life-void-char) fill-column)
 	 (insert ?\n)
 	 (setq life-window-start (+ life-window-start fill-column 1))))
-  (goto-end-of-buffer)
+  (goto-char (point-max))
   ;; check for life within the last two lines of the buffer.
   ;; If present insert two lifeless lines at the end.
   (cond ((search-backward (life-life-string)
 			  (- (point) fill-column fill-column 2) t)
-	 (goto-end-of-buffer)
+	 (goto-char (point-max))
 	 (insert-char (life-void-char) fill-column)
 	 (insert ?\n)
 	 (insert-char (life-void-char) fill-column)