--- /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