home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / dirs / powerlogo_377.lzh / PowerLOGO / Examples / Mandelbrot < prev    next >
Text File  |  1990-10-10  |  19KB  |  558 lines

  1. ; *********************************************************************
  2.  
  3. ;     A set of procedures for making images of the Mandelbrot set. When
  4. ;  loaded, this file adds a menu to the command window. Just select the
  5. ;  type of image you wish to make.
  6. ;     Each of these procedures opens its own screen, sets up its default
  7. ;  settings, then calls the procedure "pixelmap" to render the image.
  8. ;  "pixelmap" takes a procedure definition list as its input which is used
  9. ;  to find the color for each pixel in the image.
  10.  
  11. ;  "pixelmap" includes the following menu options: 
  12.  
  13. ;  Project
  14. ;     Load
  15. ;     Save
  16. ;     Stop
  17. ;     Quit
  18. ;  New Image
  19. ;     New Region
  20. ;     Edit Specs
  21. ;     Import Region
  22. ;  Tools
  23. ;     Palette
  24. ;     Mouse
  25. ;        Select Region
  26. ;        Title Bar
  27. ;     No First Pass
  28.  
  29. ; *********************************************************************
  30.  
  31. make "mandelbrot [
  32.    procedure [ [ ] [ :xoff :yoff :mag :limit :curve ]
  33.                [  :save-list
  34.                   :i :zx :zy :tx :xx :yy ] ]
  35.    recycle
  36.    make "pixel-screen ( openscreen 3 4 [ \ Mandelbrot z^2+c ] )
  37.    make "pixel-window ( openwindow :pixel-screen ( + 32 64 128 ) )
  38.    make "i 1 
  39.    repeat 15
  40.    [  setrgb :pixel-screen - 16 :i ( se 15 :i :i )
  41.       make "i + :i 1 ]
  42.    setrgb :pixel-screen 0 [ 0  0  0 ]
  43.    if listp :xoff [ make "xoff 0 ] [ ]
  44.    if listp :yoff [ make "yoff 0 ] [ ]
  45.    if listp :mag [ make "mag 0.5 ] [ ]
  46.    if listp :limit [ make "limit 40 ] [ ]
  47.    if listp :curve [ make "curve 0.6 ] [ ]
  48.    make "save-list [    xoff yoff mag limit curve
  49.                         color
  50.                         sx1 sy1 sx2 sy2 x xmag ymag ]
  51.    pixelmap [
  52.       procedure [ ]
  53.       make "zx 0 
  54.       make "zy 0 
  55.       make "xx 0
  56.       make "yy 0
  57.       make "i 0 
  58.       while [ < + :xx :yy 4 ]
  59.       [  make "tx + - :xx :yy :x
  60.          make "zy + ( * 2 :zx :zy ) :y
  61.          make "zx :tx 
  62.          make "xx * :zx :zx
  63.          make "yy * :zy :zy
  64.          if < :i :limit [ ] [ output 0 ]
  65.          make "i + :i 1 ]
  66.       if = 1 :i 
  67.       [  output 0 ] 
  68.       [  output - 15 * 14 power / :i :limit :curve ] ] ]
  69.  
  70. ; *********************************************************************
  71.  
  72. make "epsilon-cross [
  73.    procedure [ [ ] [ :xoff :yoff :mag :limit :epsilon ]
  74.                [  :save-list
  75.                   :i :zx :zy :tx :xx :yy ] ]
  76.    recycle
  77.    make  "pixel-screen
  78.          ( openscreen 3 2 [ \ Mandelbrot z^2+c Epsilon Cross ] )
  79.    make "pixel-window ( openwindow :pixel-screen ( + 32 64 128 ) )
  80.    setrgb :pixel-screen 1 [ 15 15  0 ]
  81.    setrgb :pixel-screen 2 [ 15  0  15 ]
  82.    setrgb :pixel-screen 3 [ 5  5  5 ]
  83.    setrgb :pixel-screen 0 [ 0  0  0 ]
  84.    if listp :xoff [ make "xoff 0 ] [ ]
  85.    if listp :yoff [ make "yoff 0 ] [ ]
  86.    if listp :mag [ make "mag 0.5 ] [ ]
  87.    if listp :limit [ make "limit 40 ] [ ]
  88.    if listp :epsilon [ make "epsilon 0.01 ] [ ]
  89.    make "save-list [    xoff yoff mag limit epsilon
  90.                         color
  91.                         sx1 sy1 sx2 sy2 x xmag ymag ]
  92.    pixelmap [
  93.       procedure [ ]
  94.       make "zx 0 
  95.       make "zy 0 
  96.       make "xx 0
  97.       make "yy 0
  98.       make "i 0 
  99.       while [ < + :xx :yy 4 ]
  100.       [  make "tx + :x - :xx :yy
  101.          make "zy + :y ( * 2 :zx :zy )
  102.          make "zx :tx 
  103.          make "xx * :zx :zx
  104.          make "yy * :zy :zy
  105.          if < abs :zx :epsilon [ output 2 ] [ ]
  106.          if < abs :zy :epsilon [ output 1 ] [ ]
  107.          if < :i :limit [ ] [ output 0 ]
  108.          make "i + :i 1 ]
  109.       output 3 ] ]
  110.  
  111. ; *********************************************************************
  112.  
  113. make "level-curve [
  114.    procedure [ [ ] [ :xoff :yoff :mag :limit :levels ]
  115.                [  :save-list
  116.                   :i :zx :zy :tx :xx :yy :small :size ] ]
  117.    recycle
  118.    make  "pixel-screen
  119.          ( openscreen 3 2 [ \ Mandelbrot z^2+c Level Curve ] )
  120.    make "pixel-window ( openwindow :pixel-screen ( + 32 64 128 ) )
  121.    setrgb :pixel-screen 0 [ 0  0  0 ]
  122.    setrgb :pixel-screen 1 [ 15 15 15 ]
  123.    setrgb :pixel-screen 2 [ 5  5  5 ]
  124.    setrgb :pixel-screen 3 [ 15 15 0 ]
  125.    if listp :xoff [ make "xoff 0 ] [ ]
  126.    if listp :yoff [ make "yoff 0 ] [ ]
  127.    if listp :mag [ make "mag 0.5 ] [ ]
  128.    if listp :limit [ make "limit 40 ] [ ]
  129.    if listp :levels [ make "levels 40 ] [ ]
  130.    make "save-list [    xoff yoff mag limit levels
  131.                         color
  132.                         sx1 sy1 sx2 sy2 x xmag ymag ]
  133.    pixelmap [
  134.       procedure [ ]
  135.       make "zx 0 
  136.       make "zy 0 
  137.       make "xx 0
  138.       make "yy 0
  139.       make "size 0
  140.       make "small 100
  141.       make "i 0 
  142.       while [ < + :xx :yy 4 ]
  143.       [  make "tx + :x - :xx :yy 
  144.          make "zy + :y ( * 2 :zx :zy ) 
  145.          make "zx :tx 
  146.          make "xx * :zx :zx 
  147.          make "yy * :zy :zy
  148.          make "size + :xx :yy
  149.          if < :size :small [ make "small :size ] [ ]
  150.          if < :i :limit
  151.          [ ]
  152.          [  output remainder int * :levels sqrt :small  2 ]
  153.          make "i + :i 1 ]
  154.       output 2 ] ]
  155.  
  156. ; *********************************************************************
  157.  
  158. make "z^3+z(c-1)-c [
  159.    procedure [ [ ] [ :xoff :yoff :mag :limit :curve ]
  160.                [  :save-list
  161.                   :i :zx :zy :tx :xx :yy ] ]
  162.    recycle
  163.    make "pixel-screen ( openscreen 3 4 [ \ z^3+z(c-1)-c ] )
  164.    make "pixel-window ( openwindow :pixel-screen ( + 32 64 128 ) )
  165.    make "i 1 
  166.    repeat 15
  167.    [  setrgb :pixel-screen - 16 :i ( se 15 :i :i )
  168.       make "i + :i 1 ]
  169.    setrgb :pixel-screen 0 [ 0  0  0 ]
  170.    if listp :xoff [ make "xoff 0 ] [ ]
  171.    if listp :yoff [ make "yoff 0 ] [ ]
  172.    if listp :mag [ make "mag 0.6 ] [ ]
  173.    if listp :limit [ make "limit 40 ] [ ]
  174.    if listp :curve [ make "curve 0.6 ] [ ]
  175.    make "save-list [    xoff yoff mag limit curve
  176.                         color
  177.                         sx1 sy1 sx2 sy2 x xmag ymag ]
  178.    pixelmap [
  179.       procedure [ ] 
  180.       make "zx 0 
  181.       make "zy 0 
  182.       make "xx 0 
  183.       make "yy 0 
  184.       make "i 0 
  185.       while [ < + :xx :yy 4 ] 
  186.       [  make "tx (  -  *  :zx 
  187.                            (  -  +  :xx :x 
  188.                                  *  3 :yy 
  189.                                  1  ) 
  190.                         *  :y :zy 
  191.                         :x ) 
  192.          make "zy    -  +  *  :y :zx 
  193.                            *  :zy 
  194.                               -  (  +  :yy 
  195.                                        :x 
  196.                                        *  3 :xx ) 
  197.                                  1 
  198.                         :y 
  199.          make "zx :tx 
  200.          make "xx * :zx :zx 
  201.          make "yy * :zy :zy 
  202.          if < :i :limit [ ] [ output 0 ] 
  203.          make "i + :i 1 ] 
  204.       if = 1 :i 
  205.       [  output 0 ] 
  206.       [  output - 15 * 14 power / :i :limit :curve ] ] ]
  207.  
  208. ; *********************************************************************
  209.  
  210. make "z^3-epsilon-cross [
  211.    procedure [ [ ] [ :xoff :yoff :mag :limit :epsilon ]
  212.                [  :save-list
  213.                   :i :zx :zy :tx :xx :yy ] ]
  214.    recycle
  215.    make "pixel-screen ( openscreen 3 2 [ \ z^3+z(c-1)-c Epsilon Cross ] )
  216.    make "pixel-window ( openwindow :pixel-screen ( + 32 64 128 ) )
  217.    setrgb :pixel-screen 1 [ 15 15  0 ]
  218.    setrgb :pixel-screen 2 [ 15  0  15 ]
  219.    setrgb :pixel-screen 3 [ 5  5  5 ]
  220.    setrgb :pixel-screen 0 [ 0  0  0 ]
  221.    if listp :xoff [ make "xoff 0 ] [ ]
  222.    if listp :yoff [ make "yoff 0 ] [ ]
  223.    if listp :mag [ make "mag 0.5 ] [ ]
  224.    if listp :limit [ make "limit 40 ] [ ]
  225.    if listp :epsilon [ make "epsilon 0.01 ] [ ]
  226.    make "save-list [    xoff yoff mag limit epsilon
  227.                         color
  228.                         sx1 sy1 sx2 sy2 x xmag ymag ]
  229.    pixelmap [
  230.       procedure [ ]
  231.       make "zx 0 
  232.       make "zy 0 
  233.       make "xx 0
  234.       make "yy 0
  235.       make "i 0 
  236.       while [ < + :xx :yy 4 ]
  237.       [  make "tx (  -  *  :zx 
  238.                            (  -  +  :xx :x 
  239.                                  *  3 :yy 
  240.                                  1  ) 
  241.                         *  :y :zy 
  242.                         :x ) 
  243.          make "zy    -  +  *  :y :zx 
  244.                            *  :zy 
  245.                               -  (  +  :yy 
  246.                                        :x 
  247.                                        *  3 :xx ) 
  248.                                  1 
  249.                         :y 
  250.          make "zx :tx 
  251.          make "xx * :zx :zx
  252.          make "yy * :zy :zy
  253.          if < abs :zx :epsilon [ output 2 ] [ ]
  254.          if < abs :zy :epsilon [ output 1 ] [ ]
  255.          if < :i :limit [ ] [ output 0 ]
  256.          make "i + :i 1 ]
  257.       output 3 ] ]
  258.  
  259. ; *********************************************************************
  260.  
  261. make "z^3-level-curve [
  262.    procedure [ [ ] [ :xoff :yoff :mag :limit :levels ]
  263.                [  :save-list
  264.                   :i :zx :zy :tx :xx :yy :small :size ] ]
  265.    recycle
  266.    make "pixel-screen ( openscreen 3 2 [ \ z^2+z(c-1)-c Level Curve ] )
  267.    make "pixel-window ( openwindow :pixel-screen ( + 32 64 128 ) )
  268.    setrgb :pixel-screen 0 [ 0  0  0 ]
  269.    setrgb :pixel-screen 1 [ 15 15 15 ]
  270.    setrgb :pixel-screen 2 [ 5  5  5 ]
  271.    setrgb :pixel-screen 3 [ 15 15 0 ]
  272.    if listp :xoff [ make "xoff 0 ] [ ]
  273.    if listp :yoff [ make "yoff 0 ] [ ]
  274.    if listp :mag [ make "mag 0.5 ] [ ]
  275.    if listp :limit [ make "limit 40 ] [ ]
  276.    if listp :levels [ make "levels 40 ] [ ]
  277.    make "save-list [    xoff yoff mag limit levels
  278.                         color
  279.                         sx1 sy1 sx2 sy2 x xmag ymag ]
  280.    pixelmap [
  281.       procedure [ ]
  282.       make "zx 0 
  283.       make "zy 0 
  284.       make "xx 0
  285.       make "yy 0
  286.       make "size 0
  287.       make "small 100
  288.       make "i 0 
  289.       while [ < + :xx :yy 4 ]
  290.       [  make "tx (  -  *  :zx 
  291.                            (  -  +  :xx :x 
  292.                                  *  3 :yy 
  293.                                  1  ) 
  294.                         *  :y :zy 
  295.                         :x ) 
  296.          make "zy    -  +  *  :y :zx 
  297.                            *  :zy 
  298.                               -  (  +  :yy 
  299.                                        :x 
  300.                                        *  3 :xx ) 
  301.                                  1 
  302.                         :y 
  303.          make "zx :tx 
  304.          make "xx * :zx :zx 
  305.          make "yy * :zy :zy
  306.          make "size + :xx :yy
  307.          if < :size :small [ make "small :size ] [ ]
  308.          if < :i :limit
  309.          [ ]
  310.          [  output remainder int * :levels sqrt :small  2 ]
  311.          make "i + :i 1 ]
  312.       output 2 ] ]
  313.  
  314. ; *********************************************************************
  315. ;  pixelmap          procedure-definition-list
  316.  
  317. make "pixelmap [
  318.    procedure [ [  :color ] [ ]
  319.                [  :sx1 :sy1 :sx2 :sy2 :x :y :xmag :ymag
  320.                   :menu-list :menu :mitem :sub :window-menus :pixel-menus
  321.                   :title :mb :rx :ry :rsize :rsizeold :tdemon :rdemon ] ]
  322.  
  323.    make "tdemon [
  324.       if if and namep "pixel-window namep "title
  325.          [  = :pixel-window first getmouse ]
  326.          [  whenmouse [ ] false ]
  327.       [  ( intuition 7 :pixel-screen if :title [ 0 ] [ 1 ] )
  328.          make "title not :title ]
  329.       [ ] ]
  330.    make "rdemon [
  331.       if if and namep "pixel-window namep "title
  332.          [  make "mb getmouse  = :pixel-window first :mb ]
  333.          [  whenmouse [ ] false ]
  334.       [  make "rx item 2 :mb
  335.          make "ry item 3 :mb
  336.          make "rsize 1
  337.          make "rsizeold 1
  338.          setdrmode :pixel-window 2
  339.          markrect :rx :ry :rsize
  340.          dowhile
  341.          [  make "mb mouse :pixel-window
  342.             make "rsize if >  abs - :rx first :mb
  343.                               int * 1.6 abs - :ry item 2 :mb
  344.                         [  abs - :rx first :mb ]
  345.                         [  int * 1.6 abs - :ry item 2 :mb ]
  346.             if > 1 :rsize [ make "rsize 1 ] [ ]
  347.             if = :rsize :rsizeold
  348.             [ ]
  349.             [  markrect :rx :ry :rsizeold
  350.                markrect :rx :ry :rsize
  351.                make "rsizeold :rsize ] ]
  352.          [ = 1 item 3 :mb ]
  353.          markrect :rx :ry :rsize
  354.          setdrmode :pixel-window 0
  355.          ( intuition 4 :pixel-window 2 1 0 ) ]
  356.       [ ] ]
  357.    make "title true
  358.    whenmouse :tdemon 
  359.  
  360.    setmenu :pixel-window [
  361.             \ \ \ Project\ \ \   
  362.                [ \ \ Load\  ]
  363.                [ \ \ Save ]
  364.                [ \ \ Stop ]
  365.                [ \ \ Quit ]
  366.             \ \ \ New\ Image\ \ \  
  367.                [ \ \ New\ Region ]
  368.                [ \ \ Edit\ Specs ]
  369.                [ \ \ Import\ Region ]
  370.             \ \ \ Tools\ \ \   
  371.                [ \ \ Palette ]
  372.                [ \ \ Mouse 
  373.                   [ \ \ Select\ Region ]
  374.                   [ \ \ Title\ Bar ] ]
  375.                [ \ \ No\ First\ Pass ] ]
  376.    ( intuition 3 :pixel-window 2 1 0 )
  377.    ( intuition 3 :pixel-window 3 2 2 )
  378.  
  379.    make "window-menus [
  380.       procedure [ [ :scr-menu ] ]
  381.       if = :pixel-window first :scr-menu
  382.       [  make "menu-list :scr-menu ]
  383.       [ ] ]
  384.  
  385.    make "pixel-menus [
  386.       if = :pixel-window first :menu-list
  387.       [  make "mitem item 3 :menu-list
  388.          make "sub item 4 :menu-list
  389.          make "menu item 2 :menu-list
  390.          cond
  391.          [  [ = 1 :menu ]
  392.             [  cond
  393.                [  [ = 1 :mitem ]
  394.                   [  recycle
  395.                      make "menu ( filerequest "Load\ Image\ \ -\  )
  396.                      intuition 6 :pixel-screen
  397.                      if emptyp :menu
  398.                      [ ]
  399.                      [  ( intuition 7 :pixel-screen 0 )
  400.                         ( intuition 3 :pixel-window 2 1 0 )
  401.                         loadimage :pixel-window :menu
  402.                         if :title [ ( intuition 7 :pixel-screen 1 ) ] [ ]
  403.                         load word :menu ".specs ] ]
  404.                   [ = 2 :mitem ]
  405.                   [  recycle
  406.                      make "menu ( filerequest "Save\ Image\ \ -\  )
  407.                      intuition 6 :pixel-screen
  408.                      if emptyp :menu
  409.                      [ ]
  410.                      [  ( intuition 7 :pixel-screen 0 )
  411.                         saveimage :pixel-window :menu
  412.                         if :title [ ( intuition 7 :pixel-screen 1 ) ] [ ]
  413.                         save word :menu ".specs :save-list ] ]
  414.                   [ = 3 :mitem ] [ stop ]
  415.                   [ = 4 :mitem ]
  416.                   [  closescreen :pixel-screen
  417.                      erase [ pixel-window pixel-screen ]
  418.                      whenmouse [ ]
  419.                      stop ] ] ]
  420.             [ = 2 :menu ]
  421.             [  cond
  422.                [  [ = 1 :mitem ]
  423.                   [  make "xoff + :xoff / - :rx 320 :xmag 
  424.                      make "yoff + :yoff / - 200 :ry :ymag 
  425.                      make "mag * :mag / 320 :rsize ]
  426.                   [ = 2 :mitem ]
  427.                   [  intuition 6 @0
  428.                      recycle
  429.                      edit :save-list
  430.                      intuition 6 :pixel-screen ]
  431.                   [ = 3 :mitem ]
  432.                   [  make "menu ( filerequest "Load\ File\ \ -\  )
  433.                      intuition 6 :pixel-screen
  434.                      if emptyp :menu
  435.                      [ ]
  436.                      [  make "menu openold word :menu ".specs
  437.                         repeat 6 [ run freadlist :menu ]
  438.                         close :menu ] ] ]
  439.                ( intuition 3 :pixel-window 2 1 0 )
  440.                setpen :pixel-window 0
  441.                ( setpen :pixel-window 0 2 )
  442.                rectfill :pixel-window 0 0 639 399
  443.                make "xmag * :mag 320
  444.                make "ymag * 0.88 :xmag
  445.                make "sx1 -8 
  446.                make "sy1 700
  447.                make "sx2 -1 
  448.                make "sy2 700 ]
  449.             [ = 3 :menu ]
  450.             [  cond
  451.                [  [ = 1 :mitem ]
  452.                   [  recycle
  453.                      make "menu openold "Extras\ 1.3:Tools/Palette
  454.                      close :menu
  455.                      ( intuition 6 :pixel-screen )
  456.                      doscommand [ "Extras\ 1.3:Tools/Palette" ] ]
  457.                   [ = 2 :mitem ]
  458.                   [  if = :sub 1
  459.                      [  ( intuition 3 :pixel-window 3 2 1 )
  460.                         ( intuition 4 :pixel-window 3 2 2 )
  461.                         whenmouse :rdemon ]
  462.                      [  ( intuition 3 :pixel-window 3 2 2 )
  463.                         ( intuition 4 :pixel-window 3 2 1 )
  464.                         whenmouse :tdemon ] ]
  465.                   [ = 3 :mitem ]
  466.                   [  make "sx1 700
  467.                      make "sy1 700 ] ] ] ] ]
  468.       [ ]
  469.       make "menu-list [ ] ]
  470.  
  471.    make "xmag * :mag 320
  472.    make "ymag * 0.88 :xmag
  473.    make "sx1 0 
  474.    make "sy1 0
  475.    make "sx2 0 
  476.    make "sy2 700
  477.    while [ true ]
  478.    [  while [ or < :sx1 640 < :sx2 640 ]
  479.       [  if >= :sy1 700 [ make "sy1 0 ] [ ]
  480.          if <0 :sx1 [ make "sx1 0 ] [ ]
  481.          while [ < :sx1 640 ]
  482.          [  make "x + :xoff / - :sx1 320 :xmag 
  483.             while [ < :sy1 400 ]
  484.             [  make "y + :yoff / - 200 :sy1 :ymag 
  485.                setpen :pixel-window color
  486.                ( setpen :pixel-window color 2 )
  487.                rectfill :pixel-window :sx1 :sy1 + :sx1 7 + :sy1 3
  488.                if emptyp :menu-list [ ] :pixel-menus
  489.                make "sy1 + 4 :sy1 ]
  490.             make "sy1 0 
  491.             make "sx1 + 8 :sx1 ]
  492.          make "sy1 700
  493.          if >= :sy2 700 [ make "sy2 0 ] [ ]
  494.          if <0 :sx2 [ make "sx2 0 ] [ ]
  495.          while [ and < :sx2 640 >= :sx1 640 ]
  496.          [  make "x + :xoff / - :sx2 320 :xmag 
  497.             while [ < :sy2 400 ]
  498.             [  make "y + :yoff / - 200 :sy2 :ymag 
  499.                setpen :pixel-window color
  500.                writepixel :pixel-window :sx2 :sy2
  501.                if emptyp :menu-list [ ] :pixel-menus
  502.                make "sy2 + 1 :sy2 ] 
  503.             make "sy2 0 
  504.             make "sx2 + 1 :sx2 ]
  505.          make "sy2 700 ]
  506.       make "sy1 700
  507.       make "sy2 700
  508.       sleep
  509.       if emptyp :menu-list [ ] :pixel-menus ] ]
  510.  
  511. make "markrect [
  512.    procedure [ [ :rx :ry :rsize ] [ ] [ :px :py :mx :my ] ]
  513.    make "px + :rx :rsize
  514.    make "mx - :rx :rsize
  515.    make "py + :ry * 0.625 :rsize
  516.    make "my - :ry * 0.625 :rsize
  517.    move :pixel-window :px :py
  518.    draw :pixel-window :mx :py
  519.    draw :pixel-window :mx :my
  520.    draw :pixel-window :px :my
  521.    draw :pixel-window :px :py
  522.    make "px + :px 1
  523.    make "mx - :mx 1
  524.    make "py + :py 1
  525.    make "my - :my 1
  526.    move :pixel-window :px :py
  527.    draw :pixel-window :mx :py
  528.    draw :pixel-window :mx :my
  529.    draw :pixel-window :px :my
  530.    draw :pixel-window :px :py ]
  531.  
  532. ; *********************************************************************
  533.  
  534. setmenu @0 se :com-menu [ \ \ Mandelbrot\ \ \ 
  535.                               [ \ z^2+c ]
  536.                               [ \ z^2+c\ Epsilon\ Cross ]
  537.                               [ \ z^2+c\ Level\ Curve ]
  538.                               [ \ z^3+z(c-1)-c ]
  539.                               [ \ z^3+z(c-1)-c\ Epsilon\ Cross ]
  540.                               [ \ z^3+z(c-1)-c\ Level\ Curve ] ]
  541.  
  542. make "more-menus [
  543.    procedure [ [ :menu-list ] ]
  544.    if = 2 item 2 :menu-list
  545.    [  ( intuition 3 @0 2 0 0 )
  546.       system 11
  547.       make "menu-list item 3 :menu-list
  548.       cond
  549.       [  [ = :menu-list 1 ] [ mandelbrot ]
  550.          [ = :menu-list 2 ] [ epsilon-cross ]
  551.          [ = :menu-list 3 ] [ level-curve ]
  552.          [ = :menu-list 4 ] [ z^3+z(c-1)-c ]
  553.          [ = :menu-list 5 ] [ z^3-epsilon-cross ]
  554.          [ = :menu-list 6 ] [ z^3-level-curve ] ]
  555.       ( intuition 4 @0 2 0 0 ) ]
  556.    [ ] ]
  557.  
  558.