;-*- Mode:LISP; Package:HACKS; Base:8; Readtable:ZL -*-
;	** (c) Copyright 1980 Massachusetts Institute of Technology **

;TRY THIS WITH ARGUMENTS OF 20. AND 500.
;(DEFUN MARV (&OPTIONAL (MARV-E 259.) (N 200.) (X 50.) (Y 0))
;  (PROG NIL 
;    A   ;(AS-2 1. TV-BUFFER (+ X 200.) (+ Y 200.))
;        (FUNCALL TERMINAL-IO ':DRAW-POINT (+ X 200.) (+ Y 200.) TV:ALU-XOR)
;        (AND (ZEROP (SETQ N (1- N)))
;             (RETURN T))
;        (SETQ X (- X (TRUNCATE (* MARV-E Y) 1000.))
;              Y (+ Y (TRUNCATE (* MARV-E X) 1000.)))
;        (GO A)))


;;INPUT CHARACTER WITH DDT STYLE ECHOING
;(DEFUN CARPET-TYI (&AUX CH)			;
;  (SETQ CH (FUNCALL TERMINAL-IO ':TYI))
;  (AND (< CH 200)
;       (FUNCALL TERMINAL-IO ':TYO CH))
;  CH)

;;BAG THE BYTE OR WORD
;(DEFUN CARPET-BAG (LOC NUM BYTEP)
;  (COND ((NOT BYTEP)
;	 (%UNIBUS-WRITE LOC NUM))
;	(T
;	 (SETQ BYTEP (COND ((= 0 (LOGAND 1 LOC)) 0010)
;			   (T 1010)))
;	 (%UNIBUS-WRITE LOC (DPB NUM BYTEP (%UNIBUS-READ LOC))))))

;;UNIBUS OCTAL DEBUGGER
;(DEFUN CARPET ()
;  (PROG ((LOC 0) OPENP (BYTEP NIL) NUM SOME CH (CLOC 0))
;TOP  (TERPRI)
;     (PRINC '/!)
;     (SETQ OPENP NIL)
;READ (SETQ NUM 0 SOME NIL)
;RNUM (SETQ CH (CARPET-TYI))
;     (COND ((= CH #\BACKSPACE)
;	    (SEND TERMINAL-IO ':BACKWARD-CHAR)
;	    (SEND TERMINAL-IO ':CLEAR-CHAR)
;	    (SETQ NUM (TRUNCATE NUM 8))
;	    (GO RNUM))
;	   ((NOT (AND (>= CH 60) (<= CH 71)))
;	    (GO CMD)))
;     (SETQ NUM (+ (* NUM 8) (- CH 60)))
;     (SETQ SOME T)
;     (GO RNUM)

;CMD  (COND ((= CH #//)
;	    (SETQ BYTEP NIL LOC (LOGAND 777776 NUM) OPENP T)
;	    (GO OPN1))
;	   ((= CH #\ABORT)
;	    (RETURN T))
;	   ((= CH #/.)
;	    (SETQ SOME T
;		  NUM LOC)
;	    (GO RNUM))
;	   ((= CH #/\)
;	    (SETQ BYTEP T LOC NUM OPENP T)
;	    (GO OPN1))
;	   ((= CH #\SPACE)
;	    (GO READ))
;	   ((= CH #\CR)
;	    (AND OPENP SOME (CARPET-BAG LOC NUM BYTEP))
;	    (GO TOP))
;	   ((= CH #\LF)
;	    (AND OPENP SOME (CARPET-BAG LOC NUM BYTEP))
;	    (SETQ LOC (+ LOC (COND (BYTEP 1) (T 2)))))
;	   ((= CH #/^)
;	    (AND OPENP SOME (CARPET-BAG LOC NUM BYTEP))
;	    (SETQ LOC (- LOC (COND (BYTEP 1) (T 2)))))
;	   ((= CH #\TAB)
;	    (AND OPENP SOME (CARPET-BAG LOC NUM BYTEP))
;	    (SETQ LOC (COND (SOME NUM) (T CLOC))))
;	   (T (PRINC "??  ")
;	      (GO READ)))
;     (TERPRI)
;     (PRIN1 (SETQ LOC (LOGAND 777777 LOC)))
;     (PRINC (COND (BYTEP '\) (T '//)))
;OPN1 (PRINC " ")
;     (PRIN1 (SETQ CLOC (LDB (COND ((NULL BYTEP) 0020)
;				   ((= 0 (LOGAND 1 LOC)) 0010)
;				   (T 1010))
;			     (%UNIBUS-READ LOC))))
;     (PRINC "   ")
;     (SETQ OPENP T)
;     (GO READ)
;))

;(LOCAL-DECLARE ((SPECIAL SR-SHEET SR-SIZE
;			 X-ORG Y-ORG
;			 COLOR CHAR-ORIGIN CURRENT-SWITCHES FONTS:TOG))
;(DEFUN CREATE-SWITCH-REGISTER (SR-SHEET SR-SIZE X-ORG Y-ORG
;			       &OPTIONAL LIGHTSP (COLOR 7070707)
;			       &AUX CHAR-ORIGIN CURRENT-SWITCHES)
;  (IF (NOT (BOUNDP 'FONTS:TOG))
;      (LOAD "lmfont;tog" "fonts"))
;  (IF (NULL Y-ORG) (SETQ Y-ORG (- (TRUNCATE (TV:SHEET-INSIDE-HEIGHT SR-SHEET) 2) 15.)))
;  (IF (NULL X-ORG) (SETQ X-ORG (- (TRUNCATE (TV:SHEET-INSIDE-WIDTH SR-SHEET) 2)
;				  (TRUNCATE (* 23. SR-SIZE) 2))))
;  (SETQ CHAR-ORIGIN (COND (LIGHTSP 101) (T 60)))
;  (CLOSURE '(SR-SHEET SR-SIZE X-ORG Y-ORG
;	     COLOR CHAR-ORIGIN CURRENT-SWITCHES)
;     #'(LAMBDA (ARG &AUX NUM)
;	 (if (eq arg ':get-window)
;	     sr-sheet
;	   (SETQ NUM (IF (NUMBERP ARG) ARG 0))
;	   (DO ((M (- 1 SR-SIZE) (1+ M))
;		(X X-ORG (+ X 23.)))
;	       ((> M 0) NIL)
;	     (IF (OR (NULL ARG)
;		     (BIT-TEST 1 (LSH (LOGXOR NUM CURRENT-SWITCHES) M)))
;		 (SHEET-PLUNK-CHAR SR-SHEET FONTS:TOG 
;				   (+ CHAR-ORIGIN
;				      (+ (* 2 (LOGAND 1 (LSH COLOR M)))
;					 (LOGAND 1 (LSH NUM M))))
;				   X Y-ORG)))
;	   (SETQ CURRENT-SWITCHES NUM))))))


(DEFUN SHEET-PLUNK-CHAR (SHEET FONT CHAR X-BITPOS Y-BITPOS
			 &AUX TEM (FIT (FONT-INDEXING-TABLE FONT)))
  (TV:PREPARE-SHEET (SHEET)
    (SETQ X-BITPOS (+ X-BITPOS (TV:SHEET-INSIDE-LEFT SHEET))
	  Y-BITPOS (+ Y-BITPOS (TV:SHEET-INSIDE-TOP SHEET)))
    (TV:%DRAW-RECTANGLE
       (COND ((SETQ TEM (FONT-CHAR-WIDTH-TABLE FONT)) (AREF TEM CHAR))
	     (T (FONT-CHAR-WIDTH FONT)))
       (FONT-CHAR-HEIGHT FONT)
       X-BITPOS Y-BITPOS
       (TV:SHEET-ERASE-ALUF SHEET)
       SHEET)
    (IF (NULL FIT)
	(TV:%DRAW-CHAR FONT CHAR X-BITPOS Y-BITPOS (TV:SHEET-CHAR-ALUF SHEET) SHEET)
	;;Wide character, draw in segments
	(DO ((CH (AREF FIT CHAR) (1+ CH))
	     (LIM (AREF FIT (1+ CHAR)))
	     (BPP (TV:SHEET-BITS-PER-PIXEL SHEET))
	     (X X-BITPOS (+ X (TRUNCATE (FONT-RASTER-WIDTH FONT) BPP))))
	    ((= CH LIM))
	  (TV:%DRAW-CHAR FONT CH X Y-BITPOS  (TV:SHEET-CHAR-ALUF SHEET) SHEET)))))

     
; A 3RD ARG OF 0 STARTS AT THE BEGINNING, WHICH IS A LITTLE MECHANICAL.
; A 3RD ARG OF 571565 STARTS YOU OUT IN THE MIDDLE OF AN INTERESTING PART.
; N IS THE MAGIC CONSTANT, M IS SLOWNESS, A IS STARTING POINT.
; WHEN STOPPED THIS HACK RETURNS THE LAST VALUE OF A.

(DEFUN MUNCHING-TUNES (&OPTIONAL (N 1001) (A 0) (M 30000) (O 3))
  "Plays a tune on the keyboard.  Plays an interesting tune with m = 571565. Any char stops."
 (WITH-REAL-TIME
  (DO ((ACC (REMAINDER A 1000000) (REMAINDER (+ ACC N) 1000000))
       (FREQ (LOGXOR (\ A 1000)
		     (TRUNCATE A 1000))
	     (LOGXOR (\ ACC 1000)
		     (TRUNCATE ACC 1000))))
      ((FUNCALL TERMINAL-IO ':TYI-NO-HANG)
       ACC)
    (SI:%BEEP (LSH FREQ O) M))))

(DEFDEMO "Munching Tunes" "Computer-composed music, based on the Munching Squares algorithm."
  "Munching Tunes"
  ("From the beginning" "Play the whole thing from the beginning." (MUNCHING-TUNES 1001 0))
  ("Interesting" "Start in the middle at an interesting point." (MUNCHING-TUNES 1001 571565)))

(PROCLAIM '(SPECIAL LIVE-BOUNCE-LL))

(DEFUN LIVE-BOUNCE (&OPTIONAL (DELAY 0) &aux window)
 (WITH-REAL-TIME
  (OR (BOUNDP 'LIVE-BOUNCE-LL)
      (SETQ LIVE-BOUNCE-LL (CREATE-SWITCH-REGISTER
			     (make-instance 'tv:window
					    :edges '(122 40 1035 100)
					    :blinker-p nil
					    :borders nil
					    :label nil
					    :save-bits t)
			     20. 1 1 T)))
  (setq window (send live-bounce-ll :get-window))
  (send window :expose)
  (FUNCALL LIVE-BOUNCE-LL NIL)
  (DO ((NB 1)
       (DNB 1)
       (DIR 1)
       (LT 1)
       (COMP 0))
      ((send window :TYI-NO-HANG))
    (FUNCALL LIVE-BOUNCE-LL (LOGXOR LT COMP))
    (SETQ LT (LSH LT DIR))
    (COND ((= 1 (LOGAND LT 1))
           (SETQ DIR 1)
           (SETQ NB (+ NB DNB))
           (COND ((ZEROP NB)
                  (SETQ NB 1
                        DNB 1))
                 ((= NB 25)
                  (SETQ NB 1
                        COMP (LOGXOR -1 COMP)
                        DNB 1)))
           (SETQ LT (1- (LSH 1 NB))))
          ((NEQ 0 (LOGAND #o4000000 LT))
           (SETQ DIR -1)
           (SETQ NB (+ NB DNB))
           (COND ((ZEROP NB)
                  (SETQ NB 1
                        DNB 1))
                 ((= NB 25)
                  (SETQ NB 1
                        COMP (LOGXOR -1 COMP)
                        DNB 1)))
           (SETQ LT (LSH (1- (LSH 1 NB)) (- 25 NB)))))
    (DO ((I DELAY (1- I)))
	((= I 0))))
  (send window :deselect)))

(DEFDEMO "Live Bounce" "A light-hack based on a program for the late SIPB PDP8/S."
  (LIVE-BOUNCE))

(DEFUN GREEN-HORNET (&OPTIONAL (WINDOW TERMINAL-IO) (SEPARATION 40))
  (WITH-REAL-TIME
    (SEND WINDOW :CLEAR-WINDOW)
    (SEND WINDOW :HOME-DOWN)
    (MULTIPLE-VALUE-BIND (IW IH)
	(FUNCALL WINDOW ':INSIDE-SIZE)
      (LET ((CENTER-X1 (- (TRUNCATE IW 2) (TRUNCATE SEPARATION 2)))
	    (CENTER-X2 (+ (TRUNCATE IW 2) (TRUNCATE SEPARATION 2)))
	    (CENTER-Y (TRUNCATE IH 2)))
	(DO ((I (- (MIN CENTER-Y CENTER-X1) 10.) (1- I)))
	    (( I 5))
	  (SEND WINDOW
		:DRAW-CIRCLE (IF (BIT-TEST 20 I) CENTER-X1 CENTER-X2)
			     CENTER-Y I))))
    (SEND WINDOW :TYI)
    T))

(DEFUN CIRCLES (&OPTIONAL (WINDOW *TERMINAL-IO*))
  (WITH-REAL-TIME
    (SEND WINDOW :CLEAR-WINDOW)
    (SEND WINDOW :HOME-DOWN)
    (MULTIPLE-VALUE-BIND (IW IH)
	(SEND WINDOW :INSIDE-SIZE)
      (LET ((CENTER-X (// IW 2))
	    (CENTER-Y (// IH 2)))
	(DO ((I (- (MIN CENTER-X CENTER-Y) 40) (- I 5)))
	    (( I 5))
	  (SEND WINDOW :DRAW-CIRCLE CENTER-X CENTER-Y I))))
    (SEND WINDOW :TYI)
    T))

;;; The following are so boring that they should not show up on the menu. - DLW
;; ;These are here to demonstrate how absurdly slow the :DRAW-CIRCLE message is
;; ;Also the hornet isn't green any more, it's white
;(DEFDEMO "Green Hornet" (GREEN-HORNET))
;(DEFDEMO "Circles" (CIRCLES))

(DEFCONST *LEXIPHAGE-INITIAL-DELAY* 50000.)	; Initial delay to read string.
(DEFCONST *LEXIPHAGE-PERIOD* 2000.)		; Slowness of the phage.
(DEFCONST *LEXIPHAGE-MOUTH-X* 40.)		; Width of the whole mouth.
(DEFCONST *LEXIPHAGE-MOUTH-Y* 4.)		; Width of one jaw at right end.
(DEFCONST *LEXIPHAGE-TOOTH-Y* 10.)		; Width of tooth at right end.

(DEFUN LEXIPHAGE (&OPTIONAL (STRING "LEXIPHAGE"))
  (OR (BOUNDP 'FONTS:43VXMS)
      (LOAD "SYS: FONTS; 43VXMS" :PACKAGE 'FONTS))
  (LET ((WINDOW (MAKE-INSTANCE 'TV:WINDOW
			       :BOTTOM 300.
			       :FONT-MAP (LIST FONTS:43VXMS)
			       :BLINKER-P NIL
			       :MORE-P NIL
			       :SAVE-BITS T
			       :LABEL NIL)))
    (MULTIPLE-VALUE-BIND (WIDTH HEIGHT)
	(SEND WINDOW :INSIDE-SIZE)
      (LET* ((STRING-WIDTH (SEND WINDOW :STRING-LENGTH STRING))
	     (CENTER-Y (TRUNCATE HEIGHT 2))
	     (HALF-STRING-HEIGHT 30)
	     (LEFT-EDGE (MAX 0 (TRUNCATE (- WIDTH STRING-WIDTH) 2)))
	     (TOP-EDGE (MAX 0 (- CENTER-Y HALF-STRING-HEIGHT)))
	     (CHAR-ALUF (TV:SHEET-CHAR-ALUF WINDOW))
	     (ERASE-ALUF (TV:SHEET-ERASE-ALUF WINDOW)))
	(TV:SHEET-FORCE-ACCESS (WINDOW)
	   (SEND WINDOW :CLEAR-WINDOW)
	   (SEND WINDOW :SET-CURSORPOS LEFT-EDGE TOP-EDGE)
	   (SEND WINDOW :STRING-OUT STRING))
	(TV:WINDOW-CALL (WINDOW :DEACTIVATE)
	  (WITH-REAL-TIME
	    ;; Initial delay, so user can read the string.
	    (DOTIMES (I *LEXIPHAGE-INITIAL-DELAY*))
	    (DO ((X (- LEFT-EDGE 100) (1+ X))
		 (DY 0)
		 (END-X (- (+ LEFT-EDGE STRING-WIDTH 30)	; Fudge by 30
			   *LEXIPHAGE-MOUTH-X*)))
		(( X END-X))
	      (SETQ DY (IF (ZEROP DY) HALF-STRING-HEIGHT (1- DY)))
	      (SEND WINDOW ':DRAW-TRIANGLE
		       X CENTER-Y
		       (+ X *LEXIPHAGE-MOUTH-X*) (+ CENTER-Y DY)
		       (+ X *LEXIPHAGE-MOUTH-X*) (+ CENTER-Y (- DY *LEXIPHAGE-MOUTH-Y*))
		       CHAR-ALUF)
	      (SEND WINDOW ':DRAW-TRIANGLE
		       X CENTER-Y
		       (+ X *LEXIPHAGE-MOUTH-X*) (- CENTER-Y DY)
		       (+ X *LEXIPHAGE-MOUTH-X*) (- CENTER-Y (- DY *LEXIPHAGE-MOUTH-Y*))
		       CHAR-ALUF)
	      (SEND WINDOW ':DRAW-TRIANGLE
		       (+ X *LEXIPHAGE-MOUTH-X*) (+ CENTER-Y (- DY *LEXIPHAGE-MOUTH-Y*))
		       (+ X *LEXIPHAGE-MOUTH-X*) (+ CENTER-Y (- DY *LEXIPHAGE-TOOTH-Y*))
		       (+ X (FIX (* 0.9S0 *LEXIPHAGE-MOUTH-X*)))
		       (+ CENTER-Y (FIX (* 0.9S0 (- DY *LEXIPHAGE-MOUTH-Y*))))
		       CHAR-ALUF)
	      (SEND WINDOW ':DRAW-TRIANGLE
		       (+ X *LEXIPHAGE-MOUTH-X*) (- CENTER-Y (- DY *LEXIPHAGE-MOUTH-Y*))
		       (+ X *LEXIPHAGE-MOUTH-X*) (- CENTER-Y (- DY *LEXIPHAGE-TOOTH-Y*))
		       (+ X (FIX (* 0.9S0 *LEXIPHAGE-MOUTH-X*)))
		       (- CENTER-Y (FIX (* 0.9S0 (- DY *LEXIPHAGE-MOUTH-Y*))))
		       CHAR-ALUF)
	      (DOTIMES (I *LEXIPHAGE-PERIOD*))
	      (SEND WINDOW ':DRAW-TRIANGLE
		       X CENTER-Y
		       (+ X *LEXIPHAGE-MOUTH-X*) (+ CENTER-Y DY)
		       (+ X *LEXIPHAGE-MOUTH-X*) (+ CENTER-Y (- DY *LEXIPHAGE-MOUTH-Y*))
		       ERASE-ALUF)
	      (SEND WINDOW ':DRAW-TRIANGLE
		       X CENTER-Y
		       (+ X *LEXIPHAGE-MOUTH-X*) (+ CENTER-Y DY)
		       X (+ CENTER-Y DY)
		       ERASE-ALUF)
	      (SEND WINDOW ':DRAW-TRIANGLE
		       (+ X *LEXIPHAGE-MOUTH-X*) (+ CENTER-Y (- DY *LEXIPHAGE-MOUTH-Y*))
		       (+ X *LEXIPHAGE-MOUTH-X*) (+ CENTER-Y (- DY *LEXIPHAGE-TOOTH-Y*))
		       (+ X (FIX (* 0.8S0 *LEXIPHAGE-MOUTH-X*)))
		       (+ CENTER-Y (FIX (* 0.8S0 (- DY *LEXIPHAGE-MOUTH-Y*))))
		       ERASE-ALUF)
	      (SEND WINDOW ':DRAW-TRIANGLE
		       (+ X *LEXIPHAGE-MOUTH-X*) (- CENTER-Y (- DY *LEXIPHAGE-MOUTH-Y*))
		       (+ X *LEXIPHAGE-MOUTH-X*) (- CENTER-Y (- DY *LEXIPHAGE-TOOTH-Y*))
		       (+ X (FIX (* 0.8S0 *LEXIPHAGE-MOUTH-X*)))
		       (- CENTER-Y (FIX (* 0.8S0 (- DY *LEXIPHAGE-MOUTH-Y*))))
		       ERASE-ALUF)
	      (SEND WINDOW ':DRAW-TRIANGLE
		       X CENTER-Y
		       (+ X *LEXIPHAGE-MOUTH-X*) (- CENTER-Y DY)
		       (+ X *LEXIPHAGE-MOUTH-X*) (- CENTER-Y (- DY *LEXIPHAGE-MOUTH-Y*))
		       ERASE-ALUF)
	      (SEND WINDOW ':DRAW-TRIANGLE
		       X CENTER-Y
		       (+ X *LEXIPHAGE-MOUTH-X*) (- CENTER-Y DY)
		       X (- CENTER-Y DY)
		       ERASE-ALUF)))))))
  "Lexiphage!")

(DEFDEMO "Lexiphage" "The word eater, based on a hack by John Doty." (LEXIPHAGE))

;(DECLARE (SPECIAL MF10-HACK5-BAR))

;(DEFUN MF10-HACK5 (&OPTIONAL (ZAP 1000) (13357ALIAS 13357))
; (WITH-REAL-TIME
;  (SEND *TERMINAL-IO* :CLEAR-WINDOW)
;  (SEND *TERMINAL-IO* :HOME-DOWN)
;  (OR (BOUNDP 'MF10-HACK5-BAR)
;      (SETQ MF10-HACK5-BAR (CREATE-SWITCH-REGISTER *TERMINAL-IO* 20 100 20 T)))
;  (SEND MF10-HACK5-BAR NIL)
;  (DO ((I 13357ALIAS (ROT I 1)))
;      ((SEND *TERMINAL-IO* :TYI-NO-HANG))
;    (SEND MF10-HACK5-BAR I)
;    (DO ((J 0 (+ J 1)))
;	((= J ZAP))))))

;(DEFVAR PRINT-BIG-PREVIOUS NIL)

;(DEFUN PRINT-BIG (&OPTIONAL (FONT PRINT-BIG-PREVIOUS))
;   (TERPRI)
;   (COND ((NULL FONT) (SETQ FONT FONTS:BIGFNT)))
;   (SETQ PRINT-BIG-PREVIOUS (TV:SHEET-CURRENT-FONT TERMINAL-IO))
;   (SEND *TERMINAL-IO* :SET-FONT-MAP (LIST FONT))
;   (SEND *TERMINAL-IO* :SET-CURRENT-FONT FONT))

;(DEFUN PRINT-SMALL ()
;   (TERPRI)
;   (SEND *TERMINAL-IO* :SET-FONT-MAP (LIST FONTS:CPTFONT))
;   (SEND *TERMINAL-IO* :SET-CURRENT-FONT FONTS:CPTFONT))


;(DECLARE (SPECIAL FEFS ADL-QS ADL-VARS NAME-QS FREE-QS TOTAL-BOXED-LENGTH 
;		 TOTAL-LENGTH))

;(DEFUN COMPUTE-FEF-STATS NIL
;  (PROG ((FEFS 0) (ADL-QS 0) (ADL-VARS 0) (NAME-QS 0) (FREE-QS 0) (TOTAL-BOXED-LENGTH 0) 
;         (TOTAL-LENGTH 0))
;        (MAPATOMS-ALL (FUNCTION (LAMBDA (X &AUX FEFP TEM)
;                              (COND ((AND
;                                      (FBOUNDP X)
;                                      (=
;                                       (%P-DATA-TYPE (SETQ FEFP (FUNCTION-CELL-LOCATION X)))
;                                       DTP-FEF-POINTER))
;                                     (SETQ FEFP (CDR FEFP))
;                                     (SETQ FEFS (1+ FEFS))
;                                     (SETQ
;                                      ADL-VARS
;                                      (+ ADL-VARS
;                                         (%P-LDB-OFFSET SI:%%FEFHI-MS-BIND-DESC-LENGTH
;                                                        FEFP
;                                                        SI:%FEFHI-MISC)))
;                                     (SETQ
;                                      TOTAL-BOXED-LENGTH
;                                      (+ TOTAL-BOXED-LENGTH
;                                         (TRUNCATE (%P-LDB-OFFSET SI:%%FEFH-PC FEFP SI:%FEFHI-IPC) 2)))
;                                     (SETQ
;                                      TOTAL-LENGTH
;                                      (+ TOTAL-LENGTH
;                                         (%P-CONTENTS-OFFSET FEFP SI:%FEFHI-STORAGE-LENGTH)))
;                                     (PROG ((LST (SI:GET-MACRO-ARG-DESC-POINTER FEFP)) 
;                                            VAR-DESC)
;                                           (SETQ ADL-QS (+ ADL-QS (LENGTH LST)))
;                                      L    (COND ((NULL LST)
;                                                  (RETURN NIL)))
;                                           (SETQ VAR-DESC (CAR LST))
;                                           (COND ((NOT
;                                                   (ZEROP (LOGAND VAR-DESC
;                                                                  SI:%FEF-NAME-PRESENT)))
;                                                  (SETQ LST (CDR LST))
;                                                  (SETQ NAME-QS (1+ NAME-QS))))
;                                           (COND ((= (MASK-FIELD SI:%%FEF-ARG-SYNTAX
;								 VAR-DESC)
;                                                     SI:FEF-ARG-FREE)
;                                                  (SETQ FREE-QS (1+ FREE-QS))))
;                                           (COND ((OR
;                                                   (= (SETQ TEM (LDB SI:%%FEF-INIT-OPTION
;								     VAR-DESC))
;                                                      SI:FEF-INI-PNTR)
;                                                   (= TEM SI:FEF-INI-C-PNTR)
;                                                   (= TEM SI:FEF-INI-OPT-SA)
;                                                   (= TEM SI:FEF-INI-EFF-ADR))
;                                                  (SETQ LST (CDR LST))))
;                                           (SETQ LST (CDR LST))
;                                           (GO L)))))))
;        (FORMAT STANDARD-OUTPUT
;                       "~%FEFS ~D, TOTAL LENGTH ~D, BOXED LENGTH ~D, ADL-VARS ~D,/
;ADL-QS ~D, LOCAL NAME QS ~D, FREE-VARIABLE-ADL-QS ~D,"
;                       FEFS
;                       TOTAL-LENGTH
;                       TOTAL-BOXED-LENGTH
;                       ADL-VARS
;                       ADL-QS
;                       NAME-QS
;                       FREE-QS)))


;(DEFUN DISPLAY-MOUSE-REGS NIL
;  (DISPLAY-UNIBUS-LOCATION TV:MOUSE-REG1 TV:MOUSE-REG2))

;(DEFUN DISPLAY-UNIBUS-LOCATION (&REST ADDRESS-LIST)
;  (LEXPR-FUNCALL 'DISPLAY-LOCATION '%UNIBUS-READ 16. ADDRESS-LIST))

;(DEFUN DISPLAY-CC-KEYBOARD-REGS NIL
;  (DISPLAY-CC-UNIBUS-LOCATION 764112 764102 764100))

;(DEFUN DISPLAY-CC-MOUSE-REGS NIL
;  (DISPLAY-CC-UNIBUS-LOCATION TV:MOUSE-REG1 TV:MOUSE-REG2))

;(DEFUN DISPLAY-CC-UNIBUS-LOCATION (&REST ADDRESS-LIST)
;  (LEXPR-FUNCALL 'DISPLAY-LOCATION 'CADR:DBG-READ 16. ADDRESS-LIST))

;(DEFUN DISPLAY-XBUS-LOCATION (&REST ADDRESS-LIST)
;  (LEXPR-FUNCALL 'DISPLAY-LOCATION '%XBUS-READ 32. ADDRESS-LIST))

;(DEFUN DISPLAY-LOCATION (FCTN BITS &REST ADDRESS-LIST)
;  (LET* ((N (LENGTH ADDRESS-LIST))
;	 (LITES (MAKE-ARRAY N)))
;    (DOTIMES (I N)
;      (AS-1 (CREATE-SWITCH-REGISTER *TERMINAL-IO* BITS NIL  (+ (* I 44) 40) T)
;	    LITES
;	    I))
;    (SEND TERMINAL-IO :CLEAR-WINDOW)
;    (DOTIMES (I N)
;      (SEND (AR-1 LITES I) NIL))
;    (DO NIL ((EQ 203 (SEND TERMINAL-IO ':TYI-NO-HANG)))
;      (DO ((I 0 (1+ I))
;	   (L ADDRESS-LIST (CDR L)))
;	  ((>= I N))
;	(SEND (AR-1 LITES I)
;		 (SEND FCTN (CAR L)))))))

;(DEFUN RANDOM-TEST (&OPTIONAL (WINDOW *TERMINAL-IO*) &AUX TEM)
;    (SEND WINDOW ':CLEAR-WINDOW)
;    (DO () (())
;      (SETQ TEM (RANDOM))
;      (AND (SEND TERMINAL-IO ':TYI-NO-HANG) (RETURN NIL))
;      (SEND WINDOW ':DRAW-POINT (LDB 2010 TEM) (LDB 1010 TEM))))

;(defun dance (&optional (WINDOW *TERMINAL-IO*)
;			(mina 100) (maxa 456) (minb 200) (maxb 565)
;                        (minc 60) (maxc 1076) (mind 300) (maxd 1100))
; (WITH-REAL-TIME
;       (SEND WINDOW ':DRAW-LINE mina minb maxc maxd tv:alu-xor)
;       (do ((a mina)
;            (b minb)
;            (c maxc)
;            (d maxd)
;            (oa)(ob)(oc)(od)
;            (da 1)
;            (db 1)
;            (dc -1)
;            (dd -1))
;         ((send *terminal-io* :tyi-no-hang)
;	  (SEND WINDOW :draw-line a b c d tv:alu-xor))
;       (setq oa a ob b oc c od d)
;       (setq a (+ a da))
;       (cond ((= da 1)
;	      (cond (( a maxa)
;		     (setq da -1))))
;	     (( a mina)
;	      (setq da 1)))
;       (setq b (+ b db))
;       (cond ((= db 1)
;	      (cond (( b maxb)
;		     (setq db -1))))
;	     (( b minb)
;	      (setq db 1)))
;       (setq c (+ c dc))
;       (cond ((= dc 1)
;	      (cond (( c maxc)
;		     (setq dc -1))))
;	     (( c minc)
;	      (setq dc 1)))
;       (setq d (+ d dd))
;       (cond ((= dd 1)
;	      (cond (( d maxd)
;		     (setq dd -1))))
;	     (( d mind)
;	      (setq dd 1)))
;       (SEND WINDOW :draw-line a b c d tv:alu-xor)
;       (SEND WINDOW :draw-line oa ob oc od tv:alu-xor))))

;(defun spazz (&OPTIONAL (WINDOW TERMINAL-IO))
;  (MULTIPLE-VALUE-BIND (X2 Y2)
;      (SEND WINDOW ':INSIDE-SIZE)
;    (LET* ((mina (random x2))
;	   (minc (random x2))
;	   (minb (random y2))
;	   (mind (random y2))
;	   (awid (random (- x2 mina)))
;	   (cwid (random (- x2 minc)))
;	   (bwid (random (- y2 minb)))
;	   (dwid (random (- y2 mind))))
;      (dance WINDOW
;	     mina (+ mina awid) minb (+ minb bwid) minc (+ minc cwid) mind (+ mind dwid)))))

;(COMMENT ;This is not really very interesting by today's standards.
;(DEFDEMO "Dance" "An animated line moving around on the screen." "Dance"
;	 ("Normal" "" (DANCE))
;	 ("Spastic" "" (SPAZZ)))
;)

