DEFINITION MODULE Ansi; (* ANSI escape sequences per docs/VT100-3.txt, docs/VT100.txt. Modern terminal superset: CSI cursor/erase/SGR/colors, DOS screen modes ESC[=, private modes ESC[?, print. Pure emitter, same pattern as VT100/VT52, plus Unbuffered/Buffered input-mode helpers (termios). *) TYPE Attr = (ResetA, BoldA, DimA, ItalicA, UnderlineA, BlinkA, InverseA, HiddenA, StrikeA); Color = (Black, Red, Green, Yellow, Blue, Magenta, Cyan, White, Default, BrightBlack, BrightRed, BrightGreen, BrightYellow, BrightBlue, BrightMagenta, BrightCyan, BrightWhite); (* Cursor *) PROCEDURE Home; (* ESC[H *) PROCEDURE Position(line, col : CARDINAL); (* ESC[line;colH *) PROCEDURE HVPosition(line, col : CARDINAL); (* ESC[line;colf *) PROCEDURE Up(n : CARDINAL); (* ESC[nA *) PROCEDURE Down(n : CARDINAL); (* ESC[nB *) PROCEDURE Right(n : CARDINAL); (* ESC[nC *) PROCEDURE Left(n : CARDINAL); (* ESC[nD *) PROCEDURE NextLine(n : CARDINAL); (* ESC[nE *) PROCEDURE PrevLine(n : CARDINAL); (* ESC[nF *) PROCEDURE ToColumn(n : CARDINAL); (* ESC[nG *) PROCEDURE CursorUpScroll; (* ESC M *) PROCEDURE SaveDEC; (* ESC 7 *) PROCEDURE RestoreDEC; (* ESC 8 *) PROCEDURE SaveSCO; (* ESC[s *) PROCEDURE RestoreSCO; (* ESC[u *) PROCEDURE RequestPosition; (* ESC[6n *) (* Erase *) PROCEDURE EraseDown; (* ESC[J / ESC[0J *) PROCEDURE EraseUp; (* ESC[1J *) PROCEDURE EraseScreen; (* ESC[2J *) PROCEDURE EraseSavedLines; (* ESC[3J *) PROCEDURE EraseLineRight; (* ESC[K / ESC[0K *) PROCEDURE EraseLineLeft; (* ESC[1K *) PROCEDURE EraseLine; (* ESC[2K *) (* SGR attributes *) PROCEDURE SGR(a : Attr); PROCEDURE SGRReset; (* ESC[0m *) PROCEDURE SGRResetBoldDim; (* ESC[22m *) PROCEDURE SGRResetItalic; (* ESC[23m *) PROCEDURE SGRResetUnderline;(* ESC[24m *) PROCEDURE SGRResetBlink; (* ESC[25m *) PROCEDURE SGRResetInverse; (* ESC[27m *) PROCEDURE SGRResetHidden; (* ESC[28m *) PROCEDURE SGRResetStrike; (* ESC[29m *) PROCEDURE SetAttr(a : Attr; fg, bg : Color); (* ESC[a;fg;bgm *) (* Colors *) PROCEDURE FG(c : Color); (* ESC[30..37/90..97/39m *) PROCEDURE BG(c : Color); (* ESC[40..47/100..107/49m *) PROCEDURE FG256(id : CARDINAL); (* ESC[38;5;IDm *) PROCEDURE BG256(id : CARDINAL); (* ESC[48;5;IDm *) PROCEDURE FGRGB(r, g, b : CARDINAL); (* ESC[38;2;r;g;bm *) PROCEDURE BGRGB(r, g, b : CARDINAL); (* ESC[48;2;r;g;bm *) (* DOS screen modes ESC[= *) PROCEDURE DosMode(v : CARDINAL); (* ESC[=vh, 0..7,13..19 *) PROCEDURE DosModeReset(v : CARDINAL); (* ESC[=vl *) PROCEDURE WrapOn; (* ESC[=7h *) PROCEDURE WrapOff; (* ESC[=7l, spec exception *) (* Private modes ESC[? *) PROCEDURE CursorInvisible; (* ESC[?25l *) PROCEDURE CursorVisible; (* ESC[?25h *) PROCEDURE ScreenSave; (* ESC[?47h *) PROCEDURE ScreenRestore; (* ESC[?47l *) PROCEDURE AltBufferOn; (* ESC[?1049h *) PROCEDURE AltBufferOff; (* ESC[?1049l *) (* Print *) PROCEDURE PrintScreen; (* ESC[i *) PROCEDURE PrintLine; (* ESC[1i *) PROCEDURE StopLog; (* ESC[4i *) PROCEDURE StartLog; (* ESC[5i *) (* Control chars *) PROCEDURE Bell; (* BEL 07 *) PROCEDURE Backspace; (* BS 08 *) PROCEDURE HTab; (* HT 09 *) PROCEDURE LineFeed; (* LF 10 *) PROCEDURE VTab; (* VT 11 *) PROCEDURE FormFeed; (* FF 12 *) PROCEDURE CarriageReturn; (* CR 13 *) (* Terminal input mode: call Unbuffered before reading device replies (e.g. CPR) so no RETURN key is needed; call Buffered afterwards to restore the saved state. *) PROCEDURE Unbuffered; PROCEDURE Buffered; END Ansi.