mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 22:42:24 +00:00
first colored messasges in OPM using vt100, 'f' option added to disable
it
This commit is contained in:
parent
4943886b64
commit
338c3f47e8
29 changed files with 753 additions and 132 deletions
|
|
@ -109,86 +109,78 @@ VAR tmpstr : ARRAY 23 OF CHAR;
|
|||
Strings.Append(vt100.ResetAll, tmpstr);
|
||||
Console.String(tmpstr);
|
||||
END NormVideo;
|
||||
|
||||
PROCEDURE SetAttr(attr : ARRAY OF CHAR);
|
||||
VAR tmpstr : ARRAY 16 OF CHAR;
|
||||
BEGIN
|
||||
COPY(vt100.CSI, tmpstr);
|
||||
Strings.Append(attr, tmpstr);
|
||||
Console.String(tmpstr);
|
||||
END SetAttr;
|
||||
|
||||
PROCEDURE TextBackground*(color : SHORTINT);
|
||||
BEGIN
|
||||
IF color = Black THEN
|
||||
SetAttr(vt100.BBlack)
|
||||
vt100.SetAttr(vt100.BBlack)
|
||||
ELSIF color = Blue THEN
|
||||
SetAttr(vt100.BBlue)
|
||||
vt100.SetAttr(vt100.BBlue)
|
||||
ELSIF color = Green THEN
|
||||
SetAttr(vt100.BGreen)
|
||||
vt100.SetAttr(vt100.BGreen)
|
||||
ELSIF color = Cyan THEN
|
||||
SetAttr(vt100.BCyan)
|
||||
vt100.SetAttr(vt100.BCyan)
|
||||
ELSIF color = Red THEN
|
||||
SetAttr(vt100.BRed)
|
||||
vt100.SetAttr(vt100.BRed)
|
||||
ELSIF color = Magenta THEN
|
||||
SetAttr(vt100.BMagenta)
|
||||
vt100.SetAttr(vt100.BMagenta)
|
||||
ELSIF color = Brown THEN
|
||||
SetAttr(vt100.BYellow)
|
||||
vt100.SetAttr(vt100.BYellow)
|
||||
ELSIF color = LightGray THEN
|
||||
SetAttr(vt100.BLightGray)
|
||||
vt100.SetAttr(vt100.BLightGray)
|
||||
ELSIF color = DarkGray THEN
|
||||
SetAttr(vt100.BDarkGray)
|
||||
vt100.SetAttr(vt100.BDarkGray)
|
||||
ELSIF color = LightBlue THEN
|
||||
SetAttr(vt100.BLightBlue)
|
||||
vt100.SetAttr(vt100.BLightBlue)
|
||||
ELSIF color = LightGreen THEN
|
||||
SetAttr(vt100.BLightBlue)
|
||||
vt100.SetAttr(vt100.BLightBlue)
|
||||
ELSIF color = LightCyan THEN
|
||||
SetAttr(vt100.BLightCyan)
|
||||
vt100.SetAttr(vt100.BLightCyan)
|
||||
ELSIF color = LightRed THEN
|
||||
SetAttr(vt100.BLightRed)
|
||||
vt100.SetAttr(vt100.BLightRed)
|
||||
ELSIF color = LightMagenta THEN
|
||||
SetAttr(vt100.BLightMagenta)
|
||||
vt100.SetAttr(vt100.BLightMagenta)
|
||||
ELSIF color = Yellow THEN
|
||||
SetAttr(vt100.BLightYellow)
|
||||
vt100.SetAttr(vt100.BLightYellow)
|
||||
ELSIF color = White THEN
|
||||
SetAttr(vt100.BWhite)
|
||||
vt100.SetAttr(vt100.BWhite)
|
||||
END;
|
||||
END TextBackground;
|
||||
|
||||
PROCEDURE TextColor*(color : SHORTINT);
|
||||
BEGIN
|
||||
IF color = Black THEN
|
||||
SetAttr(vt100.Black)
|
||||
vt100.SetAttr(vt100.Black)
|
||||
ELSIF color = Blue THEN
|
||||
SetAttr(vt100.Blue)
|
||||
vt100.SetAttr(vt100.Blue)
|
||||
ELSIF color = Green THEN
|
||||
SetAttr(vt100.Green)
|
||||
vt100.SetAttr(vt100.Green)
|
||||
ELSIF color = Cyan THEN
|
||||
SetAttr(vt100.Cyan)
|
||||
vt100.SetAttr(vt100.Cyan)
|
||||
ELSIF color = Red THEN
|
||||
SetAttr(vt100.Red)
|
||||
vt100.SetAttr(vt100.Red)
|
||||
ELSIF color = Magenta THEN
|
||||
SetAttr(vt100.Magenta)
|
||||
vt100.SetAttr(vt100.Magenta)
|
||||
ELSIF color = Brown THEN
|
||||
SetAttr(vt100.Yellow)
|
||||
vt100.SetAttr(vt100.Yellow)
|
||||
ELSIF color = LightGray THEN
|
||||
SetAttr(vt100.LightGray)
|
||||
vt100.SetAttr(vt100.LightGray)
|
||||
ELSIF color = DarkGray THEN
|
||||
SetAttr(vt100.DarkGray)
|
||||
vt100.SetAttr(vt100.DarkGray)
|
||||
ELSIF color = LightBlue THEN
|
||||
SetAttr(vt100.LightBlue)
|
||||
vt100.SetAttr(vt100.LightBlue)
|
||||
ELSIF color = LightGreen THEN
|
||||
SetAttr(vt100.LightBlue)
|
||||
vt100.SetAttr(vt100.LightBlue)
|
||||
ELSIF color = LightCyan THEN
|
||||
SetAttr(vt100.LightCyan)
|
||||
vt100.SetAttr(vt100.LightCyan)
|
||||
ELSIF color = LightRed THEN
|
||||
SetAttr(vt100.LightRed)
|
||||
vt100.SetAttr(vt100.LightRed)
|
||||
ELSIF color = LightMagenta THEN
|
||||
SetAttr(vt100.LightMagenta)
|
||||
vt100.SetAttr(vt100.LightMagenta)
|
||||
ELSIF color = Yellow THEN
|
||||
SetAttr(vt100.LightYellow)
|
||||
vt100.SetAttr(vt100.LightYellow)
|
||||
ELSIF color = White THEN
|
||||
SetAttr(vt100.White)
|
||||
vt100.SetAttr(vt100.White)
|
||||
END;
|
||||
END TextColor;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
MODULE vt100;
|
||||
|
||||
IMPORT Console, Strings, IntStr := oocIntStr;
|
||||
IMPORT Console, Strings;
|
||||
(* reference http://en.wikipedia.org/wiki/ANSI_escape_code
|
||||
& http://misc.flogisoft.com/bash/tip_colors_and_formatting
|
||||
*)
|
||||
|
|
@ -69,6 +69,58 @@ CONST
|
|||
CSI* : ARRAY 5 OF CHAR;
|
||||
tmpstr : ARRAY 32 OF CHAR;
|
||||
|
||||
(* IntToStr routine taken from
|
||||
https://github.com/romiras/Oberon-F-components/blob/master/Ott/Mod/IntStr.cp
|
||||
and modified to work on 64bit system,
|
||||
in order to avoid using oocIntStr, which has many dependencies *)
|
||||
PROCEDURE Reverse0 (VAR str : ARRAY OF CHAR; start, end : INTEGER);
|
||||
(* Reverses order of characters in the interval [start..end]. *)
|
||||
VAR
|
||||
h : CHAR;
|
||||
BEGIN
|
||||
WHILE start < end DO
|
||||
h := str[start]; str[start] := str[end]; str[end] := h;
|
||||
INC(start); DEC(end)
|
||||
END
|
||||
END Reverse0;
|
||||
|
||||
PROCEDURE IntToStr*(int: LONGINT; VAR str: ARRAY OF CHAR);
|
||||
(* Converts the value of `int' to string form and copies the possibly truncated
|
||||
result to `str'. *)
|
||||
VAR
|
||||
b : ARRAY 21 OF CHAR;
|
||||
s, e: INTEGER;
|
||||
maxLength : SHORTINT; (* maximum number of digits representing a LONGINT value *)
|
||||
BEGIN
|
||||
IF SIZE(LONGINT) = 4 THEN maxLength := 11 END;
|
||||
IF SIZE(LONGINT) = 8 THEN maxLength := 20 END;
|
||||
(* build representation in string 'b' *)
|
||||
IF int = MIN(LONGINT) THEN (* smallest LONGINT, -int is an overflow *)
|
||||
IF SIZE(LONGINT) = 4 THEN
|
||||
b := "-2147483648";
|
||||
e := 11
|
||||
ELSE (* SIZE(LONGINT) = 8 *)
|
||||
b := "-9223372036854775808";
|
||||
e := 20
|
||||
END
|
||||
ELSE
|
||||
IF int < 0 THEN (* negative sign *)
|
||||
b[0] := "-"; int := -int; s := 1
|
||||
ELSE (* no sign *)
|
||||
s := 0
|
||||
END;
|
||||
e := s; (* 's' holds starting position of string *)
|
||||
REPEAT
|
||||
b[e] := CHR(int MOD 10+ORD("0"));
|
||||
int := int DIV 10;
|
||||
INC(e)
|
||||
UNTIL int = 0;
|
||||
b[e] := 0X;
|
||||
Reverse0(b, s, e-1);
|
||||
END;
|
||||
COPY(b, str) (* truncate output if necessary *)
|
||||
END IntToStr;
|
||||
|
||||
PROCEDURE EscSeq0 (letter : ARRAY OF CHAR);
|
||||
VAR
|
||||
cmd : ARRAY 9 OF CHAR;
|
||||
|
|
@ -82,7 +134,7 @@ CONST
|
|||
VAR nstr : ARRAY 2 OF CHAR;
|
||||
cmd : ARRAY 7 OF CHAR;
|
||||
BEGIN
|
||||
IntStr.IntToStr (n, nstr);
|
||||
IntToStr (n, nstr);
|
||||
COPY(CSI, cmd);
|
||||
Strings.Append (nstr, cmd);
|
||||
Strings.Append (letter, cmd);
|
||||
|
|
@ -93,7 +145,7 @@ CONST
|
|||
VAR nstr : ARRAY 2 OF CHAR;
|
||||
cmd : ARRAY 7 OF CHAR;
|
||||
BEGIN
|
||||
IntStr.IntToStr (n, nstr);
|
||||
IntToStr (n, nstr);
|
||||
COPY(CSI, cmd);
|
||||
Strings.Append (letter, cmd);
|
||||
Strings.Append (nstr, cmd);
|
||||
|
|
@ -104,8 +156,8 @@ CONST
|
|||
VAR nstr, mstr : ARRAY 5 OF CHAR;
|
||||
cmd : ARRAY 12 OF CHAR;
|
||||
BEGIN
|
||||
IntStr.IntToStr(n, nstr);
|
||||
IntStr.IntToStr(m, mstr);
|
||||
IntToStr(n, nstr);
|
||||
IntToStr(m, mstr);
|
||||
|
||||
COPY (CSI, cmd);
|
||||
Strings.Append (nstr, cmd);
|
||||
|
|
@ -267,6 +319,14 @@ CONST
|
|||
EscSeq0("?25h")
|
||||
END DECTCEMh;
|
||||
|
||||
PROCEDURE SetAttr*(attr : ARRAY OF CHAR);
|
||||
VAR tmpstr : ARRAY 16 OF CHAR;
|
||||
BEGIN
|
||||
COPY(CSI, tmpstr);
|
||||
Strings.Append(attr, tmpstr);
|
||||
Console.String(tmpstr);
|
||||
END SetAttr;
|
||||
|
||||
BEGIN
|
||||
(* init CSI sequence *)
|
||||
COPY(Escape, CSI);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue