[Back to ANSI SWAG index]  [Back to Main SWAG index]  [Original]


{ Updated ANSI.SWG on May 26, 1995 }

{
(*===================================================================*)
(*                              ANSI.PAS                             *)
(*    Die Unit stellt ein Inferface zum ANSI-Treiber zur Verfgung   *)
(*===================================================================*)

UNIT ANSI;

INTERFACE

VAR
  CON: Text;

(*   šberprfung, 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, mssen 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.



[Back to ANSI SWAG index]  [Back to Main SWAG index]  [Original]