[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]