packages feed

language-Modula2-0.1: examples/Modula-2_Libraries/PMOS/sources/demo/bardemo.mod

MODULE BarDemo;

	(********************************************************)
	(*							*)
	(*		Test of module WGraph			*)
	(*		Draws some bar graphs			*)
	(*							*)
	(*  Programmer:		S.P. Lontis, P. Moylan.		*)
	(*  Last edited:	27 January 1995			*)
	(*  Status:		Working				*)
	(*							*)
	(*	This is a copy of the Lontis version,		*)
	(*	which I'm gradually modifying.			*)
	(*							*)
	(*	See comments inside the code.  This is		*)
	(*	basically working, but I'm still fiddling with	*)
	(*	the details.					*)
	(*							*)
	(********************************************************)

FROM Graphics IMPORT
    (* proc *)	GetScreenShape;

FROM GWindows IMPORT
    (* type *)	Window, BorderType,
    (* proc *)	InitGraphics, WriteString, WriteLn, GString, GStringUp,
		OpenWindow, CloseWindow, ClearWindow;

FROM WGraph IMPORT
    (* type *)	Graph, BarType, GraphType, LineType, MarkType,
    (* proc *)	OpenGraph, DrawXAxis, DrawAxes, BarGraph;

FROM MATHLIB IMPORT
    (* proc *)	Sin, Cos, Log;

FROM Keyboard IMPORT
    (* proc *)	InKey;

FROM Timer IMPORT
    (* proc *)	Sleep;

(************************************************************************)

PROCEDURE Pause;

    VAR t, i: INTEGER;
	dummy: CHAR;

    BEGIN
	Sleep (2000);
	(* dummy := InKey(); *)
(*
	FOR i := 1 TO 1000 DO
	    FOR t := 1 TO 250 DO
	    END (* FOR *);
	END (* FOR *);
*)
    END Pause;

(************************************************************************)

PROCEDURE RunTheDemo;

    VAR G1, G2, G3, G4, G5, G6: Graph;
	i : [0..4];
	w1, comments, w3: Window;
	x, y, z, t: ARRAY [0..4] OF LONGREAL;
	Xmax, Ymax, maxcolour, CharHeight: CARDINAL;
	barwidth: LONGREAL;
	ibw: CARDINAL;

    BEGIN
	GetScreenShape (Xmax, Ymax, maxcolour, CharHeight);

	(* Set up the demonstration data arrays.	*)

	FOR i := 0 TO 4 DO
	    y[i] := -5.0*Sin(6.24*LONGREAL(i))+1.0;
	    x[i] := 5.0*Cos(6.24*LONGREAL(i))+0.5;
	    t[i] := x[i] + LONGREAL(i)*0.6;
	    z[i] := 0.5*LONGREAL(i) + 1.0;
	END (* FOR *);

	(* Opening comments *)

	OpenWindow (comments, 0, 0, Xmax, Ymax DIV 4 - 1, 0, 2, double);
	WriteString (comments,'The Graph application also draws bar charts');
	WriteLn(comments);
	WriteString (comments, '   for example:'); WriteLn(comments);
	WriteString (comments, '           Simple bar graphs');
	Pause;

	(* A simple bar graph - G1 in w1.	*)

	OpenWindow (w1, 0, Ymax DIV 4, Xmax, Ymax, 7, 6, single);
	barwidth := LONGREAL(Xmax-180)/25.0;
	OpenGraph (G1,w1,bar,joined,100,30,Xmax-80,3*Ymax DIV 4 - 20,
				barwidth,0.0,4.0*barwidth,10.0,none);
	DrawAxes (G1, 0.0, 0, 2, TRUE, 1.0, 0, 2, TRUE);
	BarGraph (G1, y, 5, One);

	Pause;

	(* Graph G6 in w3 is another bar graph.	*)

	OpenWindow (w3, Xmax DIV 2, Ymax DIV 2, Xmax, Ymax, 1, 3, double);
	OpenGraph (G6,w3,bar,joined,50,40,Xmax DIV 2 - 30,Ymax DIV 2 - 20,
				10.0,0.0,30.0,10.0,none);
	DrawAxes (G6, 0.0, 0, 2, TRUE, 1.0, 0, 2, TRUE);
	BarGraph (G6,z,5,One);

	Pause;

	WriteString (comments,' - to which you can add labelling');
	WriteLn(comments);
	Pause;

	(* Add some text to G1.	*)

	GStringUp (w1, 20, 3*Ymax DIV 8 - 70, 'RainFall * 100 mm');
	GString (w1, Xmax DIV 2, 5, 'Months');
	GString (w1, Xmax DIV 2 -100, 3*Ymax DIV 4 - 50,
				'GRAPH OF MONTHLY RAINFALL');
	Pause;

	(* And then some text to G6.	*)

	GStringUp (w3, 20, Ymax DIV 4, 'Population');
	GString (w3, Xmax DIV 4, 5, 'Time in Days.');
	Pause;

	(* G2 is a copy of G1, in the same window, but with different	*)
	(* scale and bar pattern.					*)

	WriteString (comments, "           Here's a similar graph, with a different scale for the Y axis");
	WriteLn(comments);
	Pause;
	ibw := CARDINAL(barwidth);
	OpenGraph(G2,w1,bar,joined,100+ibw,30,Xmax-80,3*Ymax DIV 4 - 20,
				barwidth,0.0,4.0*barwidth,2.0,none);
	DrawAxes (G2, 0.0, 0, 2, TRUE, 0.25, 45, 2, TRUE);
	BarGraph (G2,y,5,Two);
	Pause;

	(*  G3, G4, and G5 are plotted on the same axes as G1	*)

	OpenGraph(G3,w1,bar,joined,100+2*ibw,30,Xmax-80,3*Ymax DIV 4 - 20,
				barwidth,0.0,4.0*barwidth,10.0,none);
	WriteString (comments, '           Extra Bars can be added to the existing graph.');
	WriteLn(comments);
	Pause;
	DrawXAxis (G3, 0.0, 0, 2, TRUE);
	BarGraph (G3,x,5,Three);
	Pause;

	OpenGraph(G4,w1,bar,joined,100+3*ibw,30,Xmax-80,3*Ymax DIV 4 - 20,
					barwidth,0.0,4.0*barwidth,10.0,none);
	OpenGraph (G5,w1,bar,joined,100+4*ibw,30,Xmax-80,3*Ymax DIV 4 - 20,
					barwidth,0.0,4.0*barwidth,10.0,none);

	WriteString (comments, '           With five different types of bar patterns.');
	WriteLn(comments);
	Pause;

	DrawXAxis (G4, 0.0, 0, 2, TRUE);
	BarGraph(G4,t,5,Four);
	DrawXAxis (G5, 0.0, 0, 2, TRUE);
	BarGraph(G5,z,5,Five);
	Pause;
	CloseWindow(w1);  Pause;
	CloseWindow(w3);  Pause;
	CloseWindow(comments);

    END RunTheDemo;

(************************************************************************)

BEGIN
    InitGraphics (18);
    RunTheDemo;
END BarDemo.