compiler/src/library/misc/crt.Mod
2016-10-15 17:15:05 +01:00

173 lines
4.2 KiB
Modula-2

MODULE crt;
IMPORT VT100, Platform, Out, Strings;
CONST
(* Foreground and background color constants *)
Black* = 0;
Blue* = 1;
Green* = 2;
Cyan* = 3;
Red* = 4;
Magenta* = 5;
Brown* = 6;
LightGray* = 7;
(* Foreground color constants *)
DarkGray* = 8;
LightBlue* = 9;
LightGreen* = 10;
LightCyan* = 11;
LightRed* = 12;
LightMagenta* = 13;
Yellow* = 14;
White* = 15;
(* Add-in for blinking *)
Blink* = 128;
PROCEDURE EraseDisplay*;
BEGIN
VT100.ED(2);
END EraseDisplay;
PROCEDURE ClrScr*;
BEGIN
VT100.ED(2);
END ClrScr;
PROCEDURE ClrEol*;
BEGIN
VT100.EL(0);
END ClrEol;
PROCEDURE cursoroff*;
BEGIN
VT100.DECTCEMl;
END cursoroff;
PROCEDURE cursoron*;
BEGIN
VT100.DECTCEMh;
END cursoron;
PROCEDURE Delay*(ms: INTEGER);
BEGIN Platform.Delay(ms) END Delay;
PROCEDURE GotoXY* (x, y: INTEGER);
BEGIN
VT100.CUP (y, x);
END GotoXY;
PROCEDURE HighVideo*;
VAR tmpstr: ARRAY 5 OF CHAR;
BEGIN
COPY (VT100.CSI, tmpstr);
Strings.Append(VT100.Bold, tmpstr);
Out.String(tmpstr);
END HighVideo;
PROCEDURE DelLine*;
BEGIN
VT100.EL(2);
END DelLine;
PROCEDURE InsLine*;
BEGIN
VT100.SCP;
Out.Ln;
VT100.RCP;
END InsLine;
PROCEDURE LowVideo*;
VAR tmpstr : ARRAY 7 OF CHAR;
BEGIN
COPY (VT100.CSI, tmpstr);
Strings.Append(VT100.ResetBold, tmpstr);
Out.String(tmpstr);
END LowVideo;
PROCEDURE NormVideo*;
VAR tmpstr : ARRAY 7 OF CHAR;
BEGIN
COPY(VT100.CSI, tmpstr);
Strings.Append(VT100.ResetAll, tmpstr);
Out.String(tmpstr);
END NormVideo;
PROCEDURE TextBackground*(color : SHORTINT);
BEGIN
IF color = Black THEN
VT100.SetAttr(VT100.BBlack)
ELSIF color = Blue THEN
VT100.SetAttr(VT100.BBlue)
ELSIF color = Green THEN
VT100.SetAttr(VT100.BGreen)
ELSIF color = Cyan THEN
VT100.SetAttr(VT100.BCyan)
ELSIF color = Red THEN
VT100.SetAttr(VT100.BRed)
ELSIF color = Magenta THEN
VT100.SetAttr(VT100.BMagenta)
ELSIF color = Brown THEN
VT100.SetAttr(VT100.BYellow)
ELSIF color = LightGray THEN
VT100.SetAttr(VT100.BLightGray)
ELSIF color = DarkGray THEN
VT100.SetAttr(VT100.BDarkGray)
ELSIF color = LightBlue THEN
VT100.SetAttr(VT100.BLightBlue)
ELSIF color = LightGreen THEN
VT100.SetAttr(VT100.BLightBlue)
ELSIF color = LightCyan THEN
VT100.SetAttr(VT100.BLightCyan)
ELSIF color = LightRed THEN
VT100.SetAttr(VT100.BLightRed)
ELSIF color = LightMagenta THEN
VT100.SetAttr(VT100.BLightMagenta)
ELSIF color = Yellow THEN
VT100.SetAttr(VT100.BLightYellow)
ELSIF color = White THEN
VT100.SetAttr(VT100.BWhite)
END;
END TextBackground;
PROCEDURE TextColor*(color : SHORTINT);
BEGIN
IF color = Black THEN
VT100.SetAttr(VT100.Black)
ELSIF color = Blue THEN
VT100.SetAttr(VT100.Blue)
ELSIF color = Green THEN
VT100.SetAttr(VT100.Green)
ELSIF color = Cyan THEN
VT100.SetAttr(VT100.Cyan)
ELSIF color = Red THEN
VT100.SetAttr(VT100.Red)
ELSIF color = Magenta THEN
VT100.SetAttr(VT100.Magenta)
ELSIF color = Brown THEN
VT100.SetAttr(VT100.Yellow)
ELSIF color = LightGray THEN
VT100.SetAttr(VT100.LightGray)
ELSIF color = DarkGray THEN
VT100.SetAttr(VT100.DarkGray)
ELSIF color = LightBlue THEN
VT100.SetAttr(VT100.LightBlue)
ELSIF color = LightGreen THEN
VT100.SetAttr(VT100.LightBlue)
ELSIF color = LightCyan THEN
VT100.SetAttr(VT100.LightCyan)
ELSIF color = LightRed THEN
VT100.SetAttr(VT100.LightRed)
ELSIF color = LightMagenta THEN
VT100.SetAttr(VT100.LightMagenta)
ELSIF color = Yellow THEN
VT100.SetAttr(VT100.LightYellow)
ELSIF color = White THEN
VT100.SetAttr(VT100.White)
END;
END TextColor;
END crt.