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

    {
     JB> myself as a test and it wouldn't  detect ANSI for me either.  So I
     JB> tried that other SWAG method of just spewing the #27[6n out and waiting
     JB> for the code to return and trap it using a  keypressed type of thing,
     JB> but that failed.  All I saw was the raw ESC[6n on the screen itself

    It works here! Try this tested code. }

    USES  Dos;
    VAR
       reg : registers;
       ANSI: Boolean;

    PROCEDURE ClearBuffer;
    begin
    repeat
       reg.ah := $6;                            { flush keyboard buffer }
       reg.dl := $ff;
       intr($21,reg)
    until reg.flags and fzero <> 0;
    end;

    Procedure Help;
    begin
    writeln;
    writeln(' ANSIHERE    - Check to see if ANSI is loaded and display message.
    ');writeln('               Exit with errorlevel = 1 if ANSI is loaded, 0 if
    not. ');writeln;
    writeln(' SYNTAX:     - ANSIHERE [S] ');
    writeln('               The ''S'' parameter will suppress output of the status
    ');writeln('               message when ANSIHERE is used in batch files. ');
    writeln;
    writeln(' This program checks for ANSI by writing the ANSI Device Status
    Report ');writeln(' (DSR) sequence to the display.  If ANSI is loaded, it will
    output a ');writeln(' Cursor Position Report (CPR) to the standard input
    device (the keyboard). ');writeln(' Therefore, if you issue a DSR and find
    anything in the keyboard buffer, ');writeln(' you can assume it''s a CPR and
    that ANSI is loaded.  Conversely, if the ');writeln(' keyboard buffer is
    empty, then ANSI is not loaded. ');writeln;
    end;

    FUNCTION UpString(S:String):String;
    var
      Index:byte;
    begin
      For Index:=1 to Length(S) do
        S[index]:=UpCase(S[Index]);
      UpString:=S;
    end; { UpString }

    begin
    if (ParamStr(1) = '/?') or (ParamStr(1) = '-?') then Help;
    clearbuffer;
    write(#27,'[6n');                         {ask ANSI for cursor report}
    reg.ah :=$b;                              {check for char in keyboard buffer}
    intr($21,reg);
    if reg.al = $ff then ANSI := True else ANSI := False;
    clearbuffer;
    write(#13,#32,#32,#32,#32,#13);               { errase screen }

    if (UpString(ParamStr(1)) <> 'S') and (ANSI = True) then
         writeln(' ANSIHERE');                 { if al= FFh then yes, al = 0  no}
    if (UpString(ParamStr(1)) <> 'S') and (ANSI = False) then
       writeln(' ANSI not here ');

    if ANSI then Halt(1);
    end.

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