(FILECREATED "21-Jan-85 18:50:08" {PHYLUM}<PEDERSEN>LISP>SPINBLT.;2 4229   

      changes to:  (FNS BMSTUFF SPINBLT)

      previous date: "14-Jan-85 16:13:02" {FLOPPY}<STEPHEN% PETERS>SPINBLT.;1)


(PRETTYCOMPRINT SPINBLTCOMS)

(RPAQQ SPINBLTCOMS ((FNS BMSTUFF ONSPHERE SCATTER SPIN SPINBLT)))
(DEFINEQ

(BMSTUFF
  [LAMBDA (XYZ BMSTACK BMZ)                                  (* jop: "21-Jan-85 16:26")

          (* * comment)


    (PROG ((X (CAR XYZ))
	   (Y (CADR XYZ))
	   (Z (CADDR XYZ)))
          (RETURN (for BZ in BMZ as BM in BMSTACK do (if (FLESSP Z BZ)
							 then (BITMAPBIT BM (FIX X)
									 (FIX Y)
									 1)
							      (RETURN T])

(ONSPHERE
  [LAMBDA (RADIUS CENTER)                                    (* SCP "14-Jan-85 12:58")

          (* * comment)


    (PROG ((X (FLOAT (RAND -1000 1000)))
	   (Y (FLOAT (RAND -1000 1000)))
	   (Z (FLOAT (RAND -1000 1000)))
	   LENGTH)
          [SETQ LENGTH (SQRT (FPLUS (FTIMES X X)
				    (FTIMES Y Y)
				    (FTIMES Z Z]
          (RETURN (LIST (FPLUS (CAR CENTER)
			       (FTIMES RADIUS (FQUOTIENT X LENGTH)))
			(FPLUS (CADR CENTER)
			       (FTIMES RADIUS (FQUOTIENT Y LENGTH)))
			(FPLUS (CADDR CENTER)
			       (FTIMES RADIUS (FQUOTIENT Z LENGTH])

(SCATTER
  [LAMBDA (BITMAP XYZ)                                       (* SCP "11-Jan-85 15:00")

          (* * comment)


    (PROG [(COSTHETA (COS (FTIMES (FLOAT LASTMOUSEX)
				  .18)))
	   (SINTHETA (SIN (FTIMES (FLOAT LASTMOUSEX)
				  .18]
          (for POINT in XYZ do (BITMAPBIT BITMAP [IPLUS 200 (FIX (FPLUS (FTIMES COSTHETA
										(CAR POINT))
									(FTIMES SINTHETA
										(CADDR POINT]
					  (IPLUS 200 (FIX (CADR POINT)))
					  1])

(SPIN
  [LAMBDA NIL                                                (* SCP "11-Jan-85 15:01")

          (* * comment)


    (PROG ((W (CREATEW (CREATEREGION 0 0 400 400)))
	   (B (BITMAPCREATE 400 400 1))
	   (XYZ NIL))
          [for I from -150 to 150 by 100
	     do (for J from -150 to 150 by 100 do (for K from -150 to -50 by 100
						     do (push XYZ (LIST (FLOAT I)
									(FLOAT J)
									(FLOAT K]
          (while T
	     do (SCATTER B XYZ)
		(BITBLT B 0 0 W 0 0 400 400 (QUOTE INPUT)
			(QUOTE REPLACE)
			NIL NIL)
		(BITBLT B 0 0 B 0 0 400 400 (QUOTE INPUT)
			(QUOTE INVERT)
			NIL NIL)
		(BLOCK])

(SPINBLT
  [LAMBDA (ARG)                                              (* jop: "21-Jan-85 17:04")

          (* * comment)


    (LET* ((W (CREATEW))
       (WWIDTH (WINDOWPROP W (QUOTE WIDTH)))
       (WHEIGHT (WINDOWPROP W (QUOTE HEIGHT)))
       (WBACK (BITMAPCREATE WWIDTH WHEIGHT))
       (BMSTACK (for I from 1 to 8 collect (BITMAPCREATE WWIDTH WHEIGHT)))
       (WRADIUS (QUOTIENT (MIN WWIDTH WHEIGHT)
			  2.0))
       (BMZ (for Z from (MINUS WRADIUS) to WRADIUS by (QUOTIENT WRADIUS 3.5) collect Z)))
      (for I from 1 to ARG do (BMSTUFF (ONSPHERE (QUOTIENT WRADIUS 1.3)
						 (LIST (QUOTIENT WWIDTH 2.0)
						       (QUOTIENT WHEIGHT 2.0)
						       0.0))
				       BMSTACK BMZ))
      (while T
	 do [SETQ TANTHETA (SIN (FLOAT (QUOTIENT LASTMOUSEX 15]
	    [SETQ TANPHI (SIN (FLOAT (QUOTIENT LASTMOUSEY 15]
	    (for BM in BMSTACK as Z in BMZ do (BITBLT BM 0 0 WBACK (FIX (FTIMES Z TANTHETA))
						      (FIX (FTIMES Z TANPHI))
						      WWIDTH WHEIGHT (QUOTE INPUT)
						      (QUOTE PAINT)))
	    (BITBLT WBACK 0 0 W 0 0 WWIDTH WHEIGHT (QUOTE INPUT)
		    (QUOTE REPLACE))
	    (BITBLT WBACK 0 0 WBACK 0 0 WWIDTH WHEIGHT (QUOTE INPUT)
		    (QUOTE INVERT))
	    (BLOCK])
)
(DECLARE: DONTCOPY
  (FILEMAP (NIL (306 4207 (BMSTUFF 316 . 746) (ONSPHERE 748 . 1439) (SCATTER 1441 . 1993) (SPIN 1995 . 
2759) (SPINBLT 2761 . 4205)))))
STOP