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

    {
    The following Functions provide a way to determine if the machine
    the your application is running on has ANSI installed.

    if your Program is written using the Crt Unit the Function may return
    the result as False even if ANSI is present, unless you successfully
    use a 'work around' method to ensure all Writes go through Dos.

    I find it's easier just to not use Crt if my Program is working With
    ANSI - since there is not much that you use the Crt Unit For that can't
    be done in some other way.

    The Dos-based alternatives to ReadKey and KeyPressed are included since
    they are needed For the AnsiDetect Function.
    }

    Uses
      Dos;

    Function KeyPressed : Boolean;
      { Detects whether a key is pressed. Key remains in kbd buffer}
    Var
      r: Registers;
    begin
      r.AH := $0B;
      MsDos(r);
      KeyPressed := (r.AL = $FF)
    end;

    Function ReadKey : Char;
    Var
      r: Registers;
    begin
      r.AH := $08;
      MsDos(r);
      ReadKey := Chr(r.AL)
    end;

    Function AnsiDetected: Boolean;
    { Detects whether ANSI is installed }
    Var
      dummy: Char;
    begin
      Write(#27'[6n');               { Ask For cursor position report via }
      if not KeyPressed              { the ANSI driver. }
      then
        AnsiDetected := False
      else
      begin
        AnsiDetected := True;
        { empty the keyboard buffer }
        Repeat Dummy := ReadKey Until not KeyPressed
      end
    end;

    begin
    end.

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