+++ /dev/null
-(*\r
- DEMO07 - Hardware scrolling\r
- Copyright (c) 1994 Alessandro Scotti\r
-*)\r
-uses Crt, Modex;\r
-\r
-const\r
- (* Change this if scrolling seems jerky (this simple program does *)\r
- (* not handle vertical retrace/display very well) *)\r
- STEPS = 5;\r
-\r
-procedure Check( Cond: boolean; var Coord, DeltaC: integer; NewCoord, Sign: integer );\r
-begin\r
- if( Cond ) then begin\r
- Coord := NewCoord;\r
- DeltaC := Sign*(Random(3)+2);\r
- end;\r
-end;\r
-\r
-var\r
- I, X, Y, DX, DY: integer;\r
-begin\r
- (* Initialize library and graphics mode *)\r
- mxInit;\r
- mxSetMode( MX_320x200 );\r
- (* Set a 640x400 virtual screen *)\r
- mxSetVirtualScreen( 640, 400 );\r
- mxSetClip( TRUE );\r
-\r
- X := 0;\r
- Y := 0;\r
- DX := 1;\r
- DY := 1;\r
-\r
- (* Main loop: draw lines, circles, points and rectangles in separate *)\r
- (* 320x200 windows, while smoothly panning virtual screen *)\r
- while( not KeyPressed ) do begin\r
- (* Points *)\r
- mxSetClipRegion( 0, 0, 320, 200 );\r
- for I:=1 to STEPS do\r
- mxPutPixel( Random(320), Random(200), Random(16) );\r
- (* Lines *)\r
- mxSetClipRegion( 0, 200, 320, 200 );\r
- for I:=1 to STEPS do\r
- mxLine( Random(320), Random(200)+200, Random(320), Random(200)+200, Random(16), OP_SET );\r
- (* Circles *)\r
- mxSetClipRegion( 320, 0, 320, 200 );\r
- for I:=1 to STEPS do\r
- mxCircle( Random(320)+320, Random(200), Random(100), Random(16) );\r
- (* Boxes *)\r
- mxSetClipRegion( 320, 200, 320, 200 );\r
- for I:=1 to STEPS do\r
- mxFillBox( Random(320)+320, Random(200)+200, Random(100)+1, Random(100)+1, Random(16), OP_SET );\r
- (* Pan *)\r
- Inc( X, DX );\r
- Check( X+320 >= 639, X, DX, 319, -1 );\r
- Check( X < 0, X, DX, 0, +1 );\r
- Inc( Y, DY );\r
- Check( Y+200 >= 399, Y, DY, 199, -1 );\r
- Check( Y < 0, Y, DY, 0, +1 );\r
- mxPan( X, Y );\r
- mxWaitRetrace;\r
- end;\r
-\r
- (* Shutdown *)\r
- mxSetMode( MX_TEXT );\r
- mxTerm;\r
-end.\r