XMesaProcsImpl:
PROGRAM
IMPORTS OSOps
EXPORTS XMesaProcs =
BEGIN
Checkforpos:
PUBLIC
PROCEDURE [
var1: CHAR, testnum: LONG CARDINAL, testname: LONG STRING] = {
IF LOOPHOLE[var1, INTEGER] < 0 THEN PutFailMessage[testnum, testname];};
Isequal:
PUBLIC
PROCEDURE [
var1: INTEGER, var2: INTEGER, testnum: LONG CARDINAL, testname: LONG STRING] = {
IF var1 # var2 THEN PutFailMessage[testnum, testname];};
IsCardequal:
PUBLIC
PROCEDURE [
var1: CARDINAL, var2: CARDINAL, testnum: LONG CARDINAL,
testname: LONG STRING] = {
IF var1 # var2 THEN PutFailMessage[testnum, testname];};
IsLongCardEqual:
PUBLIC
PROCEDURE [
var1, var2: LONG CARDINAL, testnum: LONG CARDINAL, testname: LONG STRING] = {
IF var1 # var2 THEN PutFailMessage[testnum, testname];};
Isnotequal:
PUBLIC
PROCEDURE [
var1: INTEGER, var2: INTEGER, testnum: LONG CARDINAL, testname: LONG STRING] = {
IF var1 = var2 THEN PutFailMessage[testnum, testname];};
Isboolequal:
PUBLIC
PROCEDURE [
var1: BOOLEAN, var2: BOOLEAN, testnum: LONG CARDINAL, testname: LONG STRING] = {
IF var1 # var2 THEN PutFailMessage[testnum, testname];};
Ischarequal:
PUBLIC
PROCEDURE [
var1, var2: CHAR, testnum: LONG CARDINAL, testname: LONG STRING] = {
IF var1 # var2 THEN PutFailMessage[testnum, testname];};
Islongequal:
PUBLIC
PROCEDURE [
var1, var2: LONG INTEGER, testnum: LONG CARDINAL, testname: LONG STRING] = {
IF var1 # var2 THEN PutFailMessage[testnum, testname];};
Isrealequal:
PUBLIC
PROCEDURE [
var1, var2: REAL, testnum: LONG CARDINAL, testname: LONG STRING] = {
IF AlmostEqual[var1, var2, -10] THEN RETURN
ELSE PutFailMessage[testnum, testname];};
Ispointerequal:
PUBLIC
PROCEDURE [
var1, var2: LONG POINTER TO UNSPECIFIED, testnum: LONG CARDINAL,
testname: LONG STRING] = {
IF var1 # var2 THEN PutFailMessage[testnum, testname];};
Isnotptrequal:
PUBLIC
PROCEDURE [
var1, var2: LONG POINTER TO UNSPECIFIED, testnum: LONG CARDINAL,
testname: LONG STRING] = {
IF var1 = var2 THEN PutFailMessage[testnum, testname];};
Isnotcharequal:
PUBLIC
PROCEDURE [
var1, var2: CHAR, testnum: LONG CARDINAL, testname: LONG STRING] = {
IF var1 = var2 THEN PutFailMessage[testnum, testname];};
Isnotboolequal:
PUBLIC
PROCEDURE [
var1, var2: BOOLEAN, testnum: LONG CARDINAL, testname: LONG STRING] = {
IF var1 = var2 THEN PutFailMessage[testnum, testname];};
PrintCR:
PUBLIC
PROCEDURE = {
Char[12C]};
PutFailMessage:
PUBLIC
PROCEDURE [x:
LONG
CARDINAL, modname:
LONG
STRING] = {
PrintS["Test "];
PrintLongDecimal[x];
PrintS[" in module "];
PrintS[modname];
PrintS[" failed; "L];
PrintCR[];};
PutPassMessage:
PUBLIC
PROCEDURE [x:
LONG
CARDINAL, modname:
LONG
STRING] = {
PrintS["Test "];
PrintLongDecimal[x];
PrintS[" in module "];
PrintS[modname];
PrintS[" passed; "L];
PrintCR[];};
PrintLongDecimal:
PUBLIC
PROCEDURE [n:
LONG
INTEGER] = {
s: LONG STRING ¬ [34];
AppendLongNumber[s, n, 10];
FormatNumber[s: s];};
AppendLongNumber:
PROCEDURE [
s: LONG STRING, n: LONG UNSPECIFIED, radix: CARDINAL] = {
ps: POINTER TO LONG STRING = @s;
xn:
PROCEDURE [n:
LONG
CARDINAL] =
BEGIN
lr: LONG CARDINAL ¬ n MOD radix;
r: CARDINAL;
n ¬ n/radix;
IF n # 0 THEN xn[n];
IF (r ¬ CARDINAL[lr]) > 9 THEN r ¬ r + 'A - '0 - 10;
AppendChar[s, r + '0];
END;
xn[n];}; --AppendLongNumber--
FormatNumber:
PROCEDURE [
s: LONG STRING] = {
neg: BOOLEAN ¬ FALSE;
l: CARDINAL;
fill: LONG STRING ¬ [8];
fillChar: CHARACTER ¬ ' ;
FOR i: CARDINAL IN [0..8) DO fill[i] ¬ fillChar; ENDLOOP;
IF neg THEN l ¬ s.length + 1 ELSE l ¬ s.length;
IF l < 4
THEN
BEGIN
fillChars: CARDINAL ¬ 4 - l;
THROUGH [0..fillChars/8)
DO
PrintS[fill];
ENDLOOP;
IF neg THEN Char['-];
END
ELSE IF neg THEN Char['-];
PrintS[s];};
AppendChar:
PROCEDURE [s:
LONG
STRING, c:
CHARACTER] = {
s[s.length] ¬ c;
s.length ¬ s.length + 1;
RETURN};
PrintS:
PUBLIC
PROCEDURE [s:
LONG
STRING] = {
FOR i:
CARDINAL
IN [0..s.length)
DO
Char[s[i]];
ENDLOOP;
};
PrintD:
PUBLIC
PROCEDURE [i:
INT] = {
OSOps.PutD[i];
};
AlmostEqual:
PUBLIC
PROC [y, x:
REAL, distance:
INTEGER [-126..0]]
RETURNS [BOOLEAN] = {RETURN[x = y];};
Char: PROCEDURE [ch: CHAR] = {OSOps.PutChar[ch];};
GetSystemUZone:
PUBLIC
PROCEDURE
RETURNS [
UNCOUNTED
ZONE] = {
RETURN[OSOps.GetSystemUZone[]];};
END..