\ Demonstrate Custom Screen and HAM - Hold and Modify \ This will generate a drawing then pause 4 seconds before \ drawing another \ \ Authors: Phil Burk & Brian Donovan \ Copyright 1986 Delta Research \ \ MOD: PLB 8/6/88 Use more normal window so ?CLOSEBOX can be used. include? newwindow.setup ju:amiga_graph include? ?closebox ju:amiga_events include? newscreen.setup ju:screen_support include? HAM ji:graphics/view.j include? msec ju:msec include? choose ju:random ANEW TASK-DEMO_HAM decimal NewScreen HAMNewScreen NewWindow HAMNewWindow VARIABLE HAMScreen : HAM.OPEN.SCREEN ( -- , screen | NULL) gr.init \ Set to default values. HAMNewScreen NewScreen.Setup HAMNewWindow NewWindow.Setup \ \ Modify defaults for this demo. HAM HAMNewScreen ..! ns_viewmodes ( Change to HAM ) 6 HAMNewScreen ..! ns_depth 190 HAMNewScreen ..! ns_TopEdge ( Start at bottom and scroll up. ) \ \ Open Screen and store pointer in NewWindow structure. HAMNewScreen openscreen() dup HAMScreen ! ( Open screen. ) \ \ Sometimes the Amiga can build a bad COPPER list for screens. \ This can happen if you have Emacs up in INTERLACE mode and open a \ NON-INTERLACE screen. \ The following call will correct this problem (hopefully). RemakeDisplay() ; : HAM.OPEN.WINDOW ( screen -- , window | NULL ) >abs HAMNewWindow ..! nw_screen ( Modify window for this screen. ) \ \ Set up window. CUSTOMSCREEN HAMNewWindow ..! nw_type 0" HAM - JForth - Delta Research" >abs HAMNewWindow ..! nw_Title 0 HAMNewWindow ..! nw_TopEdge 320 HAMNewWindow ..! nw_Width 200 HAMNewWindow ..! nw_Height \ Turn off window depth, set ACTIVATE, keep other defaults. HAMNewWindow ..@ nw_flags WINDOWDEPTH -1 xor AND ACTIVATE | HAMNewWindow ..! nw_flags HAMNewWindow gr.opencurw ; : HAM.CLOSE ( -- , Close screen and window.) HAMScreen @ closescreen() ; : SCREEN.RISEUP ( rel_screen -- , Scroll screen up display. ) 190 0 DO dup 0 -1 MoveScreen() WaitTOF() LOOP drop ; \ HAM Drawing routines. \ Constants for building colors. $ 10 constant HAM_CHANGE_BLUE $ 20 constant HAM_CHANGE_RED $ 30 constant HAM_CHANGE_GREEN : HAM.COLOR! ( RGB new_value -- , Change colors) OR gr.color! ; : HAM.RANDOM.LINES ( N -- ) 0 DO 64 choose gr.color! 320 choose 200 choose gr.draw LOOP ; : HAM.RANDOM.BOXES ( N -- ) 0 DO 64 choose gr.color! 320 choose 320 choose 2sort 200 choose 200 choose 2sort >r swap r> gr.rect LOOP ; : HAM.POP.ART ( -- , Create drawings until key hit. ) BEGIN 100 choose ham.random.boxes 50 choose ham.random.lines 4000 msec ?closebox UNTIL ; : HAM-ART ( -- Run HAM demo. ) ." HAM - JForth - Delta Research" cr ham.open.screen ?dup IF ham.open.window IF 100 choose ham.random.boxes 50 choose ham.random.lines HAMScreen @ screen.riseup ham.pop.art gr.closecurw THEN ham.close ELSE ." Could not open screen!" cr THEN gr.term ; cr ." Enter: HAM-ART for demo." cr cr