The following module is a demonstration of some simple aspects of the GraphPaper library.
MODULE TestGraph; (* by Joel Schwartz 1998 06 12 to test GraphPaper revised 1998 07 11 by R. Sutcliffe. *) FROM GraphPaper IMPORT AngleType, CoordSystem, SetCoordSystem, SetAngleType, SetLabels, SetScale, ShowAxes, ShowLabels, PlotPoint, PolarPlotPoint, TurnTo, LineBy, LineTo, MoveTo, Turn, Home; FROM RealMath IMPORT pi, sin; VAR counter : INTEGER; x, y : REAL; PROCEDURE DrawSquare (side : INTEGER); (* draws a square of the given side length starting at the current angle; concludes with the same position and angle as it started *) VAR Count : CARDINAL; BEGIN SetAngleType (rad); FOR Count := 1 TO 4 DO LineBy (side); Turn (pi/2.0); END; SetAngleType (deg); END DrawSquare; BEGIN (* Set up the axes *) SetCoordSystem (standard); (* use mathematical system *) SetLabels ('X', 'Y'); SetScale (1); (* one dot per division *) ShowAxes; ShowLabels; (* Test the scaled point plotting routines *) (* Sine curve *) FOR counter := -4000 TO 4000 DO x := FLOAT (counter)/100.0; y := sin (x); PlotPoint (x, y); END; (* Circle of radius 5 units with a point at every unit degree angle *) FOR counter := 1 TO 360 DO PolarPlotPoint (5.0, FLOAT (counter)); END; (* Angled line *) FOR counter := 1 TO 300 DO PolarPlotPoint (FLOAT (counter)/10.0 ,10.0); END; (* Test the pixel plotting routines *) Home; TurnTo (30.0); LineBy (200); LineTo (200, -100); LineBy (100); (* Make a square *) TurnTo (0.0); DrawSquare (75); SetCoordSystem (MacWin); (* use Mac system *) MoveTo (0, 0); TurnTo (60.0); LineBy (250); (* should come from top left corner *) SetCoordSystem (bearing); (* use bearing system *) MoveTo (-60, -60); Turn (225.0); LineBy (150); (* should be in bottom left quadrant *) END TestGraph.
The reader should verify the correctness of each routine in the following (much reduced) screen shot of the output.