home *** CD-ROM | disk | FTP | other *** search
- \ Copyright 1989 NerveWare
- \ No portion of this code may used for commercial purposes,
- \ nor may any executable version of this code be disributed for
- \ commercial purposes without the author's express written permission.
- \ This code is shareware, all rights reserved.
-
- \ Nick Didkovsky
- \ 2/9/89
- \ open a screen with variable parameters
- \ Ultimately used by Mandelbrot generator.
-
- \ MOD: close.mandelscreen safe, checks window and screen first 2/17/89
- \ MOD: color cycle takes mandel-num-colors into account 2/17/89
- \ MOD: cycle-speed used to pause in cycle.colors.once 2/18/89
- \ MOD: fixed sneaky bug in shift.colors.once that clobbered dictionary 2/18/89
-
- getmodule includes
-
- include? ..! ju:c_struct
- include? value ju:value
- include? msec ju:msec
- include? newwindow.setup ju:amiga_graph
- include? ?closebox ju:amiga_events
- include? newscreen.setup ju:screen_support
- include? HIRES ji:graphics/view.j
-
- anew task-vari_screen
-
- decimal
-
- NewScreen MandelScreen
- NewWindow MandelWindow
- Colormap MandelColorMap
-
- \ next four vars determine screen resolution and number of colors
-
- VARIABLE mandel-width
- VARIABLE mandel-height
- VARIABLE mandel-depth
- VARIABLE mandel-num-colors
-
- VARIABLE mandel-view-flags
- VARIABLE mandel-variables-inited?
- VARIABLE cycle-speed
-
- mandel-variables-inited? off
-
- VARIABLE Mscreen-ptr
- VARIABLE SavedColorTable 64 allot
-
- CREATE MandelColorTable
- $ 000 w, $ f00 w, $ f10 w, $ f20 w,
- $ f30 w, $ f40 w, $ f50 w, $ f60 w,
- $ f70 w, $ f80 w, $ f90 w, $ fa0 w,
- $ fb0 w, $ fc0 w, $ fd0 w, $ fe0 w,
- $ ff0 w, $ 00f w, $ 10f w, $ 20f w,
- $ 30f w, $ 40f w, $ 50f w, $ 60f w,
- $ 70f w, $ 80f w, $ 90f w, $ a0f w,
- $ b0f w, $ c0f w, $ d0f w, $ e0f w,
-
- MandelColorTable SavedColorTable 64 MOVE
-
- : BUILD.COLOR.MAP
- mandel-num-colors @ MandelColorMap ..! cm_count
- MandelColorTable >abs MandelColorMap ..! cm_colortable
- ;
-
-
- \ Call LoadRGB4 to set custom color map!
- : SET.COLOR.MAP
- \ get current viewport ptr
- gr-curwindow @ >abs call intuition_lib ViewPortAddress
- \ MandelColorMap >abs over ( -- vp Colortable vp )
- \ ..! vp_ColorMap ( -- vp)
- MandelColorTable >abs ( use my new colors)
- mandel-num-colors @ ( variable number of new pens)
- callvoid graphics_lib LoadRGB4
- ;
-
- \ color table is always a 64 MOVE, even if we only use the first half in hires
- : RESTORE.COLOR.TABLE
- SavedColorTable MandelColorTable 64 move
- set.color.map
- ;
-
- : SET.320x200 ( -- )
- 320 mandel-width !
- 200 mandel-height !
- 5 mandel-depth !
- 32 mandel-num-colors !
- NULL mandel-view-flags !
- mandel-variables-inited? on
- ;
-
- : SET.640x400 ( -- )
- 640 mandel-width !
- 400 mandel-height !
- 4 mandel-depth !
- 16 mandel-num-colors !
- HIRES LACE | mandel-view-flags !
- mandel-variables-inited? on
- ;
-
- : SET.320x400 ( -- )
- 320 mandel-width !
- 400 mandel-height !
- 5 mandel-depth !
- 32 mandel-num-colors !
- LACE mandel-view-flags !
- mandel-variables-inited? on
- ;
-
- : OPEN.MANDELSCREEN ( -- )
- mandel-variables-inited? @ not
- IF cr ." RESOLUTION DEFAULTING TO LORES" cr set.320x200 THEN
- gr.init
- \ Set to default values.
- MandelScreen NewScreen.Setup
- MandelWindow NewWindow.Setup
- \
- \ Modify defaults
- mandel-view-flags @ MandelScreen ..! ns_viewmodes
- mandel-depth @ MandelScreen ..! ns_depth
- 0" Didkovsky's Mandelbrot Generator" >abs
- MandelScreen ..! ns_DefaultTitle
- mandel-width @ MandelScreen ..! ns_Width
- mandel-height @ MandelScreen ..! ns_Height
- \
- \ Open Screen and store pointer in NewWindow structure.
- MandelScreen openscreen() dup Mscreen-ptr ! ( Open screen. )
- >abs MandelWindow ..! nw_screen ( Modify window for this screen. )
- \
- \ Set up Backdrop window.
- CUSTOMSCREEN MandelWindow ..! nw_type
- 0 MandelWindow ..! nw_TopEdge
- 0 MandelWindow ..! nw_LeftEdge
- mandel-width @ MandelWindow ..! nw_Width
- mandel-height @ MandelWindow ..! nw_Height
- 0" " >abs
- MandelWindow ..! nw_title ( no title PLEASE!)
- REPORTMOUSE BACKDROP | BORDERLESS | ACTIVATE |
- MandelWindow ..! nw_flags
- CLOSEWINDOW MENUPICK | MOUSEBUTTONS | MOUSEMOVE |
- MandelWindow ..! nw_IDCMPFlags
- MandelWindow gr.openwindow gr.set.curwindow
- \ load new color map
- build.color.map
- set.color.map
-
- RemakeDisplay()
- ;
-
- : CLOSE.MANDELSCREEN ( -- , Close screen and window.)
- gr-curwindow @ IF gr.closecurw THEN
- Mscreen-ptr @ ?dup
- IF closescreen() Mscreen-ptr off
- THEN
- ;
-
- : CLEAR.MANDELSCREEN
- gr-currport @
- 0 ( background color)
- call graphics_lib SetRast
- drop ( don't need return value)
- ;
-
-
- VARIABLE temp-color ( hold color #31)
-
- : PRINT.COLOR.TABLE
- MandelColorTable
- 32 0 do
- dup i 2* + w@ . cr
- loop
- drop
- ;
-
- : SHIFT.COLORS.ONCE ( -- )
- MandelColorTable >r ( -r- color_table_addr)
- r@ mandel-num-colors @ 1- 2* + w@ ( -- color-31 | 15)
- r@ 2+ dup 2+ mandel-num-colors @ 2- 2* move ( -- color-31 | 15)
- r> 2+ w!
- ;
-
- : CYCLE.COLORS.ONCE
- shift.colors.once
- set.color.map
- cycle-speed @ msec
- ;
-
- \ ********************************** TESTS ********************************
-
- : TEST.COLOR.MAP
- gr-curwindow @ >abs call intuition_lib ViewPortAddress ( get current viewport ptr)
- ..@ vp_ColorMap ..@ cm_ColorTable
- ;
-
- \ test color map
-
- : ALLDRAW
- mandel-height @ 0 do
- 0 i gr.move
- i mandel-num-colors @ mod gr.color!
- mandel-width @ i gr.draw
- loop
- ;
-
- : ALLDRAW2
- mandel-width @ 0 do
- i 0 gr.move
- i mandel-num-colors @ mod gr.color!
- i mandel-height @ gr.draw
- loop
- ;
-
- : RECT.TEST
- mandel-width @ 10 / 0 do
- i gr.color!
- i 10 * 0 gr.move
- i 10 * 0 i 10 * 10 + mandel-height @ gr.rect
- loop
- ;
-
- : TEST.SCREEN
- 0 cycle-speed !
- open.MandelScreen
- 200 msec
- mscreen-ptr @ false showtitle()
- clear.mandelscreen
- alldraw
- 128 0 do
- Cycle.Colors.Once
- 1 msec
- loop
- restore.color.table
- 500 msec
- alldraw2
- 256 0 do
- Cycle.Colors.Once
- 1 msec
- loop
- restore.color.table
- 500 msec
- rect.test
- 500 msec
- 128 0 do
- Cycle.Colors.Once
- 1 msec
- loop
- restore.color.table
- Close.MandelScreen
- ;
-
- : TEST.ALL.RESOLUTIONS ( -- )
- set.320x200
- test.screen
- set.320x400
- test.screen
- set.640x400
- 10 cycle-speed !
- test.screen
- ;
-
-