By: David Turgeon
Re: Ansi Unit - Free right here! :-)
------------------------------------------------------------
{
howdy again

just to thank you all for your service, i give you my Ansi unit... it's for
having the Ansi special characters!

PLEASE tell me how you like it!

thanx!

salutations de quebec
<d  y  n  a  m  i  x>
}


{----------------------------------------------------------------------}
{    A N S I . P A S   unit   -   1991, David Turgeon                  }
{----------------------------------------------------------------------}
{    Unit for ANSI chars display with NO range-checking                }
{    For any questions or simply to reach me,                          }
{     David Turgeon, CP 66, Lac-Beauport, Qc, Canada, G0A 2C0          }
{----------------------------------------------------------------------}

unit Ansi;

interface

type
  MoveEn = (up, down, right, left);  { type for the AnsiMove function }
  OnOff = (on, off);                 { type for the AnsiWrap function }

const
  AnsiInit = #27'[';               { the same old ANSI init string }
  AnsiSave = AnsiInit + 's';       { constant for saving the character }
  AnsiRestore = AnsiInit + 'u';    { constant for restoring the char ^ }
  AnsiCls = AnsiInit + '2J';       { constant for clearing screen }
  AnsiEraseLine = AnsiInit + 'K';  { constant for erasing lines }

var
  Input: text;   { for ANSI DOS input and output
  Output: text;    if you have to use Crt }

function AnsiColor(TPColor: integer): string;
  { returns an ANSI color string (TPColor in [0 .. 15]) }
function AnsiBack(TPBack: integer): string;
  { returns an ANSI background string (TPBack in [0 .. 7]) }
function AnsiLocate(x, y: integer): string;
  { returns an ANSI locate string }
function AnsiMove(Move: MoveEn; Number: integer): string;
  { returns an ANSI move string }
function AnsiWrap(Status: OnOff): string;
  { returns an ANSI wrap string }
    { Wrap ON = char wrap after the 80th column (default with ANSI.SYS) }
    { Wrap OFF = NO char wrap (especially annonying) }

implementation

function AnsiWrap(Status: OnOff): string;
  begin
    case Status of
      on:  AnsiWrap := AnsiInit + '=7h';
      off: AnsiWrap := AnsiInit + '=7l';
    end;
  end;

function AnsiMove(Move: MoveEn; Number: integer): string;
  var
    Stri: string;
    Final: string;
  begin
    Final := AnsiInit;
    Str(Number, Stri);
    if Number > 1 then
      Final := Final + Stri;
    if Move = up then
      Final := Final + 'A'
    else if Move = down then
      Final := Final + 'B'
    else if Move = right then
      Final := Final + 'C'
    else if Move = left then
      Final := Final + 'D';
    AnsiMove := Final;
  end;

function AnsiLocate(x, y: integer): string;
  var
    Stri: string;
    Final: string;
  begin
    Final := AnsiInit;
    Str(x, Stri);
    Final := Final + Stri + ';';
    Str(y, Stri);
    Final := Final + Stri + 'H';
    AnsiLocate := Final;
  end;

function AnsiColor(TPColor: integer): string;
  var
    St: string;
  begin
    St := AnsiInit;
    case TPColor of
      0: St := St + '0;30m';
      1: St := St + '0;34m';
      2: St := St + '0;32m';
      3: St := St + '0;36m';
      4: St := St + '0;31m';
      5: St := St + '0;35m';
      6: St := St + '0;33m';
      7: St := St + '0m';
      8: St := St + '1;30m';
      9: St := St + '1;34m';
      10:St := St + '1;32m';
      11:St := St + '1;36m';
      12:St := St + '1;31m';
      13:St := St + '1;35m';
      14:St := St + '1;33m';
      15:St := St + '1;37m';
    end;
    AnsiColor := St;
  end;

function AnsiBack(TPBack: integer): string;
  var
    St: string;
  begin
    St := AnsiInit;
    case TPBack of
      0: St := St + '40m';
      1: St := St + '44m';
      2: St := St + '42m';
      3: St := St + '46m';
      4: St := St + '41m';
      5: St := St + '45m';
      6: St := St + '43m';
      7: St := St + '47m';
    end;
    AnsiBack := St;
  end;

begin
  Assign(Input, '');
  Reset(Input);
  Assign(Output, '');
  Rewrite(Output);
end.
