[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 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 lschen  *)
    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]