(FILECREATED "23-Feb-86 16:20:47" {ERIS}LISPCORE>MANDELBROT.;2 11810 changes to: (VARS MANDELBROTCOMS) (FNS MANDELBROT MANDELBROT.KOUNT MANDELBROT.DORADO.KOUNT) previous date: "21-Aug-85 13:21:38" {ERIS}LISPCORE>MANDELBROT.;1) (* Copyright (c) 1985, 1986 by Xerox Corporation. All rights reserved.) (PRETTYCOMPRINT MANDELBROTCOMS) (RPAQQ MANDELBROTCOMS ((INITVARS (MANDELBROT.WINDOW NIL) (MANDELBROT.LIMIT 32)) (FNS MANDELBROT MANDELBROT.BUTTONEVENTFN MANDELBROT.KOUNT MANDELBROT.DORADO.KOUNT MANDELBROT.COLOR GRADCOLORMAP) (P (COND ((NOT (EQ (MACHINETYPE) (QUOTE DANDELION))) (MOVD (QUOTE MANDELBROT.DORADO.KOUNT) (QUOTE MANDELBROT.KOUNT))))))) (RPAQ? MANDELBROT.WINDOW NIL) (RPAQ? MANDELBROT.LIMIT 32) (DEFINEQ (MANDELBROT (LAMBDA (REGION WINDOW) (* kbr: "23-Feb-86 16:02") (PROG (MAXX MAXY MAXCOLOR RCORNER ICORNER GAP RC IC KOUNT COLOR) (COND ((NULL REGION) (SETQ REGION (create REGION LEFT _ -1.5 BOTTOM _ -1.0 WIDTH _ 3.0 HEIGHT _ 2.0)))) (COND ((NULL WINDOW) (COND ((NULL MANDELBROT.WINDOW) (SETQ MANDELBROT.WINDOW (CREATEW NIL "MANDELBROT")))) (SETQ WINDOW MANDELBROT.WINDOW))) (SETQ MAXX (SUB1 (BITMAPWIDTH WINDOW))) (SETQ MAXY (SUB1 (BITMAPHEIGHT WINDOW))) (SETQ MAXCOLOR (MAXIMUMCOLOR (BITSPERPIXEL WINDOW))) (SETQ RCORNER (fetch (REGION LEFT) of REGION)) (SETQ ICORNER (fetch (REGION BOTTOM) of REGION)) (SETQ GAP (FMAX (FQUOTIENT (fetch (REGION WIDTH) of REGION) MAXX) (FQUOTIENT (fetch (REGION HEIGHT) of REGION) MAXY))) (COND ((WINDOWP WINDOW) (WINDOWPROP WINDOW (QUOTE RCORNER) RCORNER) (WINDOWPROP WINDOW (QUOTE ICORNER) ICORNER) (WINDOWPROP WINDOW (QUOTE GAP) GAP) (WINDOWPROP WINDOW (QUOTE TITLE) (create REGION LEFT _ RCORNER BOTTOM _ ICORNER WIDTH _(FTIMES MAXX GAP) HEIGHT _(FTIMES MAXY GAP))) (WINDOWPROP WINDOW (QUOTE BUTTONEVENTFN) (FUNCTION MANDELBROT.BUTTONEVENTFN)))) (for Y from MAXY to 0 by -1 do (SETQ IC (FPLUS ICORNER (FTIMES Y GAP))) (for X from 0 to MAXX do (SETQ RC (FPLUS RCORNER (FTIMES X GAP))) (SETQ KOUNT (MANDELBROT.KOUNT RC IC)) (SETQ COLOR (MANDELBROT.COLOR KOUNT MAXCOLOR)) (BITMAPBIT WINDOW X Y COLOR)))))) (MANDELBROT.BUTTONEVENTFN (LAMBDA (WINDOW) (* kbr: "27-Jul-85 15:31") (PROG (REGION RCORNER ICORNER GAP NEWRCORNER NEWICORNER NEWREGION) (SETQ REGION (GETREGION)) (SETQ RCORNER (WINDOWPROP WINDOW (QUOTE RCORNER))) (SETQ ICORNER (WINDOWPROP WINDOW (QUOTE ICORNER))) (SETQ GAP (WINDOWPROP WINDOW (QUOTE GAP))) (SETQ NEWRCORNER (FPLUS RCORNER (FTIMES (IDIFFERENCE (fetch (REGION LEFT) of REGION) (DSPXOFFSET NIL WINDOW)) GAP))) (SETQ NEWICORNER (FPLUS ICORNER (FTIMES (IDIFFERENCE (fetch (REGION BOTTOM) of REGION) (DSPYOFFSET NIL WINDOW)) GAP))) (SETQ NEWREGION (create REGION LEFT _ NEWRCORNER BOTTOM _ NEWICORNER WIDTH _ (FTIMES (fetch (REGION WIDTH) of REGION) GAP) HEIGHT _ (FTIMES (fetch (REGION HEIGHT) of REGION) GAP))) (MANDELBROT NEWREGION WINDOW)))) (MANDELBROT.KOUNT (LAMBDA (RC IC) (* kbr: "23-Feb-86 16:13") (* Calculate KOUNT for imaginary number C=RC+ICi. *) (PROG (LOCALRC LOCALIC RZ IZ RZ2 IZ2 NEWRZ KOUNT) (DECLARE (TYPE FLOATP RC IC LOCALRC LOCALIC RZ IZ RZ2 IZ2 NEWRZ)) (* Unbox now instead of in loop. *) (SETQ LOCALRC RC) (SETQ LOCALIC IC) (* Z=RZ+IZ. RZ2=RZ^2. IZ2=IZ^2. Initially, Z=0. *) (SETQ RZ 0.0) (SETQ IZ 0.0) (SETQ RZ2 0.0) (SETQ IZ2 0.0) (* Keep setting Z:=Z^2+C until absolute value of Z exceeds 2.0 KOUNTing number of times this takes. If KOUNT would reach infinity, then C is in the Mandelbrot set. We assume C is in the Mandelbrot set if C reaches MANDELBROT.LIMIT *) (SETQ KOUNT (for KOUNT from 1 to (SUB1 MANDELBROT.LIMIT) do (* AR4125: FMINUS does not compile as UFNEGATE. So we use FDIFFERENCE instead. *) (SETQ NEWRZ (FPLUS (FDIFFERENCE RZ2 IZ2) LOCALRC)) (SETQ IZ (FPLUS (FTIMES 2.0 IZ RZ) LOCALIC)) (SETQ RZ NEWRZ) (SETQ RZ2 (FTIMES RZ RZ)) (SETQ IZ2 (FTIMES IZ IZ)) (COND ((UFGREATERP2 (FPLUS RZ2 IZ2) 4.0) (RETURN KOUNT))) finally (RETURN MANDELBROT.LIMIT))) (RETURN KOUNT)))) (MANDELBROT.DORADO.KOUNT (LAMBDA (RC IC) (* kbr: "23-Feb-86 16:15") (* Calculate KOUNT for imaginary number C=RC+ICi. *) (PROG (LOCALRC LOCALIC RZ IZ RZ2 IZ2 NEWRZ KOUNT) (* Unbox now instead of in loop. *) (SETQ LOCALRC RC) (SETQ LOCALIC IC) (* Z=RZ+IZ. RZ2=RZ^2. IZ2=IZ^2. Initially, Z=0. *) (SETQ RZ 0.0) (SETQ IZ 0.0) (SETQ RZ2 0.0) (SETQ IZ2 0.0) (* Keep setting Z:=Z^2+C until absolute value of Z exceeds 2.0 KOUNTing number of times this takes. If KOUNT would reach infinity, then C is in the Mandelbrot set. We assume C is in the Mandelbrot set if C reaches MANDELBROT.LIMIT *) (SETQ KOUNT (for KOUNT from 1 to (SUB1 MANDELBROT.LIMIT) do (* AR4125: FMINUS does not compile as UFNEGATE. So we use FDIFFERENCE instead. *) (SETQ NEWRZ (FPLUS (FDIFFERENCE RZ2 IZ2) LOCALRC)) (SETQ IZ (FPLUS (FTIMES 2.0 IZ RZ) LOCALIC)) (SETQ RZ NEWRZ) (SETQ RZ2 (FTIMES RZ RZ)) (SETQ IZ2 (FTIMES IZ IZ)) (COND ((FGREATERP (FPLUS RZ2 IZ2) 4.0) (RETURN KOUNT))) finally (RETURN MANDELBROT.LIMIT))) (RETURN KOUNT)))) (MANDELBROT.COLOR (LAMBDA (KOUNT MAXCOLOR) (* kbr: "21-Aug-85 13:14") (* Choose appropriate color for this KOUNT. *) (COND ((EQ KOUNT MANDELBROT.LIMIT) MAXCOLOR) (T (IMOD KOUNT MAXCOLOR))))) (GRADCOLORMAP (LAMBDA (BITSPERPIXEL) (* kbr: "23-Jul-85 19:52") (PROG (MAXCOLOR COLORMAP M V) (SETQ MAXCOLOR (MAXIMUMCOLOR BITSPERPIXEL)) (SETQ COLORMAP (COLORMAPCREATE NIL BITSPERPIXEL)) (SETQ M (IQUOTIENT MAXCOLOR 6)) (for I from 0 to M do (SETQ V (IQUOTIENT (ITIMES 255 I) (SUB1 M))) (SETA COLORMAP I (LIST 0 0 V)) (SETA COLORMAP (IDIFFERENCE (ITIMES 2 M) I) (LIST 0 0 V)) (SETA COLORMAP (IPLUS (ITIMES 2 M) I) (LIST 0 V 0)) (SETA COLORMAP (IDIFFERENCE (ITIMES 4 M) I) (LIST 0 V 0)) (SETA COLORMAP (IPLUS (ITIMES 4 M) I) (LIST V 0 0)) (SETA COLORMAP (IDIFFERENCE (ITIMES 6 M) I) (LIST V 0 0))) (for I from (ADD1 (ITIMES 6 M)) to MAXCOLOR do (SETA COLORMAP I (ELT COLORMAP (ITIMES 6 M)))) (RETURN COLORMAP)))) ) (COND ((NOT (EQ (MACHINETYPE) (QUOTE DANDELION))) (MOVD (QUOTE MANDELBROT.DORADO.KOUNT) (QUOTE MANDELBROT.KOUNT)))) (PUTPROPS MANDELBROT COPYRIGHT ("Xerox Corporation" 1985 1986)) (DECLARE: DONTCOPY (FILEMAP (NIL (1033 11572 (MANDELBROT 1043 . 3622) (MANDELBROT.BUTTONEVENTFN 3624 . 4742) ( MANDELBROT.KOUNT 4744 . 7476) (MANDELBROT.DORADO.KOUNT 7478 . 10081) (MANDELBROT.COLOR 10083 . 10427) (GRADCOLORMAP 10429 . 11570))))) STOP