{ Updated ANSI.SWG on May 26, 1995 } { (*===================================================================*) (* ANSI.PAS *) (* Die Unit stellt ein Inferface zum ANSI-Treiber zur Verfgung *) (*===================================================================*) UNIT ANSI; INTERFACE VAR CON: Text; (* šberprfung, ob ein ANSI-Treiber installiert ist *) FUNCTION AnsiSys: BOOLEAN; (* šbergabe von beliebigen Werten an den ANSI-Treiber *) PROCEDURE AnsiOut(s: SHORTINT); (* ANSI-Farbeinschaltung: Attribut 7 = grau *) PROCEDURE AnsiGray; (* ANSI-Farbeinschaltung: Attribut 15 = weiá *) PROCEDURE AnsiWhite; (* ANSI-Farbeinschaltung: Attribut 14 = gelb *) PROCEDURE AnsiYellow; IMPLEMENTATION USES Crt; CONST ESC = #27; ansiinstalled: BOOLEAN = FALSE; FUNCTION AnsiSys: BOOLEAN; (* Test ob ANSI.SYS installiert ist; da alle Ausgaben ber die *) (* Standard-Ausgabe gehen, mssen die Bildschirmfarben ber ANSI-Se- *) (* quenzen gesteuert werden. Ist ANSI.SYS nicht installiert, werden *) (* keine ANSI-Steuerbefehle vom Programm ausgegeben. *) VAR posold, posnew : BYTE; BEGIN AnsiSys := FALSE; posold := WhereX; (* Spalte merken *) Write(CON, Chr(27), '[2m'); (* ANSI-Sequenz *) posnew := WhereX; (* neue Position *) IF posnew = posold THEN AnsiSys := TRUE;(*Sequenz wurde verarbeitet*) GotoXY(1, WhereY); (* evtl. vorhandene *) ClrEoL; (* Zeichen l”schen *) END; (*-------------------------------------------------------------------*) PROCEDURE AnsiOut(s: SHORTINT); BEGIN Write(CON, ESC + '[' , s , 'm'); END; (*-------------------------------------------------------------------*) PROCEDURE AnsiGray; BEGIN IF ansiinstalled THEN AnsiOut(0); END; (*-------------------------------------------------------------------*) PROCEDURE AnsiWhite; BEGIN IF ansiinstalled THEN BEGIN AnsiOut(0); AnsiOut(1); END; END; (*-------------------------------------------------------------------*) PROCEDURE AnsiYellow; BEGIN IF ansiinstalled THEN AnsiOut(33); END; VAR OldExitProc: Pointer; {$F+} PROCEDURE ANSIExitProc; VAR ExitProc: POINTER; BEGIN Close(CON); ExitProc := OldExitProc; END; {$F-} (*-------------------------------------------------------------------*) BEGIN Assign(CON, ''); Append(CON); ansiinstalled := AnsiSys; OldExitProc := ExitProc; ExitProc := @ANSIExitProc; END. (*===================================================================*) { And a Example: } program test_ansi; uses crt, ansi; begin writeln(con,'[); readln; end.