packages feed

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

MODULE LLTest;

	(********************************************************)
	(*							*)
	(*	Test of some functions in module LowLevel	*)
	(*							*)
	(*  Programmer:		P. Moylan			*)
	(*  Last edited:	11 March 1995			*)
	(*  Status:		OK				*)
	(*	All results appear to be correct for the	*)
	(*	Small memory model (which, for now, is the	*)
	(*	only one that I need to check).			*)
	(*							*)
	(********************************************************)

FROM SYSTEM IMPORT
    (* type *)	ADDRESS,
    (* proc *)	ADR;

FROM Types IMPORT
    (* type *)	FarPointer;

FROM LowLevel IMPORT
    (* proc *)	Far, SEGMENT, FarSEGMENT, OFFSET, MakePointer, Physical,
		Virtual, AddOffset, SubtractOffset, FarAddOffset,
		FarSubtractOffset, Copy, FarCopy;

VAR G: CARDINAL;

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

PROCEDURE BasicTest;

    VAR L, seg, off: CARDINAL;  phys: LONGCARD;
	p: ADDRESS;  fp: FarPointer;

    BEGIN
	p := ADR(L);
	fp := Far(p);
	seg := SEGMENT(p);
	off := OFFSET (p);
	fp := MakePointer (seg, off);
	seg := FarSEGMENT(fp);
	phys := Physical(p);
	fp := Virtual(phys);
	p := AddOffset (p, 1);
	p := SubtractOffset (p, 1);
	fp := FarAddOffset (fp, 1);
	fp := FarSubtractOffset (fp, 1);
    END BasicTest;

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

PROCEDURE CopyTest;

    VAR src, dst: ARRAY [0..15] OF CHAR;
	j: CARDINAL;

    BEGIN
	FOR j := 0 TO 15 DO src[j] := CHR(j+ORD('A')); END (*FOR*);
	Copy (ADR(src), ADR(dst), 16);
	FOR j := 0 TO 15 DO src[j] := CHR(j+ORD('a')); END (*FOR*);
	FarCopy (Far(ADR(src)), Far(ADR(dst)), 16);
    END CopyTest;

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

BEGIN
    BasicTest;
    CopyTest;
END LLTest.