packages feed

language-Modula2-0.1: examples/Modula-2_Libraries/PMOS/sources/tests/ledlite.mod

MODULE LedLite;

	(********************************************************)
	(*							*)
	(*	Test program to display a pattern on the	*)
	(*		    keyboard LEDs			*)
	(*							*)
	(*  Programmer:		P. Moylan			*)
	(*  Last edited:	20 January 1993			*)
	(*  Status:		OK				*)
	(*							*)
	(********************************************************)

FROM KBdriver IMPORT
    (* proc *)	PutLEDs, CheckScanCode, ClearLED;

FROM Timer IMPORT
    (* proc *)	Sleep;

FROM LowLevel IMPORT
    (* proc *)	IAND;

FROM TerminationControl IMPORT
    (* proc *)	SetTerminationProcedure;

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

VAR
    GoingLeft: BOOLEAN;

(************************************************************************)
(*	THIS PROCEDURE DEFINES THE SEQUENCE OF THE PATTERN		*)
(************************************************************************)

PROCEDURE Next (x: CARDINAL): CARDINAL;

    (* Produces the next number in the sequence to be displayed.	*)
    (* Alter this code to change the pattern sequence.			*)

    BEGIN
	IF GoingLeft THEN
	    IF x >= 4 THEN GoingLeft := FALSE END (*IF*)
	ELSE
	    IF x = 1 THEN GoingLeft := TRUE; END (*IF*);
	END (*IF*);
	IF GoingLeft THEN
	    IF x = 0 THEN x := 1 ELSE x := 2*x END (*IF*);
	ELSE
	    x := x DIV 2;
	END (*IF*);
	RETURN x;
    END Next;

(************************************************************************)
(*			     MAIN PROCEDURE				*)
(************************************************************************)

PROCEDURE Display;

    (* Displays a pattern on the keyboard LEDs.  *)

    CONST delay = 400;	(* milliseconds *)
	  EscRelease = BYTE(081H);	(* scan code for Esc key release *)

    VAR x: CARDINAL;

    BEGIN
	x := 1;  GoingLeft := TRUE;
	REPEAT
	    PutLEDs (BYTE(IAND(x,7)));
	    Sleep (delay);
	    x := Next (x);
	UNTIL CheckScanCode() = EscRelease;
    END Display;

(************************************************************************)
(*			     FINAL CLEANUP				*)
(************************************************************************)

PROCEDURE ClearAllLEDs;

    BEGIN
	ClearLED (7);
    END ClearAllLEDs;

(************************************************************************)
(*			     MAIN PROGRAM				*)
(************************************************************************)

BEGIN
    SetTerminationProcedure (ClearAllLEDs);
    Display;
END LedLite.