home *** CD-ROM | disk | FTP | other *** search
/ RBBS in a Box Volume 1 #3.1 / RBBSIABOX31.cdr / apit / ansi.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-09-29  |  7.0 KB  |  267 lines

  1. Const
  2.   FF = #12;
  3.   ESC = #27;
  4. Var Ch : Char;
  5.  C : CHar;
  6.  i ,FGcolor,BGcolor, CursorX, CursorY : Integer;
  7.         escape_mode: boolean;
  8.         escape_number: byte;
  9.         escape_register: array [1..50] of byte;
  10.         escape_str: string[80];
  11. AnsiFile : Text;
  12. (****************************************************************************)
  13. (*                             PROCESS ESCAPE                               *)
  14. (****************************************************************************)
  15. Procedure
  16.       wrt( c : char );
  17.    begin
  18.  
  19.       Case c of
  20.            FF :  clrscr;
  21.           else   Write(c);
  22.       end;
  23.    end;
  24.  
  25.  Procedure
  26.       set_graphics;
  27.    var
  28.       i     : integer;
  29.       FG,BG : integer;
  30.    begin
  31.       FG := FGcolor;
  32.       BG := BGcolor;
  33.       for i:=1 to escape_number do begin
  34.          case escape_register[i] of
  35.             0 : lowvideo;
  36.             1 : normvideo;
  37.             5 : FG := FG + blink;
  38.             7 : begin
  39.                    FG := BG;
  40.                    BG := FG;
  41.                 end;
  42.            30 : FG := black;
  43.            31 : FG := red;
  44.            32 : FG := green;
  45.            33 : FG := yellow;
  46.            34 : FG := blue;
  47.            35 : FG := magenta;
  48.            36 : FG := cyan;
  49.            37 : FG := white;
  50.            40 : BG := black;
  51.            41 : BG := red;
  52.            42 : BG := green;
  53.            43 : BG := yellow;
  54.            44 : BG := blue;
  55.            45 : BG := magenta;
  56.            46 : BG := cyan;
  57.            47 : BG := white;
  58.          else
  59.             ;
  60.          end;
  61.       end;
  62.       textcolor( FG );
  63.       textbackground( BG );
  64.       escape_mode := false;
  65.    end;
  66.  
  67.    Procedure MoveUp;
  68.    Begin
  69.      GotoXY(Wherex, WhereY + Escape_Register[1]);
  70.    End;
  71.  
  72.    Procedure MoveDown;
  73.    Begin
  74.      GotoXY(Wherex,whereY - (Escape_Register[1]));
  75.    End;
  76.  
  77.    Procedure MoveForeward;
  78.    Begin
  79.      GotoXY(WhereX + (Escape_Register[1]),WhereY);
  80.    End;
  81.  
  82.    Procedure MoveBackward;
  83.    Begin
  84.      GotoXY(WhereX - (Escape_Register[1]),WhereY);
  85.    End;
  86.  
  87.  
  88.    Procedure SaveCursorPos;
  89.    Begin
  90.       CursorX := WhereX;
  91.       CursorY := WhereY;
  92.    end;
  93.  
  94.    Procedure RestoreCursorPos;
  95.    Begin
  96.       GoToXY(CursorX,CursorY);
  97.    End;
  98.  
  99.    procedure
  100.       addr_cursor;
  101.    begin
  102.       case escape_number of
  103.          0 : begin
  104.                 escape_register[1]:=1;
  105.                 escape_register[2]:=1;
  106.              end;
  107.          1 : escape_register[2]:=1;
  108.       else
  109.          ;
  110.       end;
  111.       if escape_register[1]=25 then
  112.          gotoxy(escape_register[2],24)
  113.       else
  114.          gotoxy(escape_register[2],escape_register[1]);
  115.       escape_mode := false;
  116.    end;
  117.  
  118.    procedure
  119.       clear_scr;
  120.    begin
  121.       if ( escape_number = 1 )  and  ( escape_register[1] = 2 ) then
  122.          clrscr;
  123.       escape_mode := false;
  124.    end;
  125.  
  126.    procedure
  127.       clear_line;
  128.    begin
  129.       if ( escape_number = 1 )  and  ( escape_register[1] = 0 ) then
  130.          clreol;
  131.       escape_mode := false;
  132.    end;
  133.  
  134.    procedure
  135.       process_escape( c : char );
  136.    var
  137.       i    : integer;
  138.       ch   : char;
  139.    begin
  140.       c := Upcase(c);
  141.       case c of
  142.           '['
  143.              : exit;
  144.          'F','H'
  145.              : begin
  146.                   addr_cursor;
  147.                   Escape_mode := False;
  148.                   exit;
  149.                end;
  150.          'J' : begin
  151.                   clear_scr;
  152.                   Escape_mode := False;
  153.                   exit;
  154.                end;
  155.          'K' : begin
  156.                   clear_line;
  157.                   Escape_mode := False;
  158.                   exit;
  159.                end;
  160.          'M' : begin
  161.                   set_graphics;
  162.                   Escape_mode := False;
  163.                   exit;
  164.  
  165.                end;
  166.          'S' : Begin
  167.                  SaveCursorPos;
  168.                   Escape_mode := False;
  169.                  Exit;
  170.                end;
  171.  
  172.          'U' : Begin
  173.                  RestoreCursorPos;
  174.                  Escape_Mode := False;
  175.                  Exit;
  176.                End;
  177.  
  178.          'A' : Begin
  179.                  MoveUp;
  180.                  Escape_mode := False;
  181.                  Exit;
  182.                end;
  183.  
  184.  
  185.  
  186.          'B' : Begin
  187.                  MoveDown;
  188.                  Escape_mode := False;
  189.                  Exit;
  190.                end;
  191.  
  192.          'C' : Begin
  193.                 MoveForeward;
  194.                  Escape_mode := False;
  195.                 Exit;
  196.                end;
  197.  
  198.  
  199.          'D' : Begin
  200.                 MoveBackward;
  201.                  Escape_mode := False;
  202.                 Exit;
  203.                end;
  204.  
  205.  
  206.       end;
  207.       ch := upcase( c );
  208.       escape_str := escape_str + ch;
  209.       if ch in [ 'A'..'G','L'..'P' ] then exit;
  210.       if ch in [ '0'..'9' ] then begin
  211.          escape_register[escape_number] := (escape_register[escape_number] * 10) + ord( ch ) - ord( '0' );
  212.          exit;
  213.       end;
  214.       case ch of
  215.          ';', ',' : begin
  216.                        escape_number := escape_number + 1;
  217.                        escape_register[escape_number] := 0;
  218.                     end;
  219.          'T',  '#', '+', '-', '>', '<', '.'
  220.                   : ;
  221.       else
  222.          escape_mode := false;
  223.          for i:=1 to length( escape_str ) do
  224.             wrt( escape_str[i] );
  225.       end;
  226.    end;
  227.  
  228. (****************************************************************************)
  229. (*                             SCREEN HANDLER                               *)
  230. (****************************************************************************)
  231.    procedure
  232.       scrwrite( c : char );
  233.    var
  234.       i  : integer;
  235.    begin
  236.       if c = ESC then begin
  237.          if escape_mode then begin
  238.             for i:=1 to length( escape_str ) do
  239.                wrt( escape_str[i] );
  240.          end;
  241.          escape_str := '';
  242.          escape_number := 1;
  243.          escape_register[escape_number] := 0;
  244.          escape_mode := true;
  245.       end
  246.       else
  247.          if escape_mode then
  248.             process_escape(c)
  249.          else
  250.             wrt( c );
  251.    end;
  252.  
  253.  
  254. Begin
  255. Escape_Str := '';
  256. FGColor := White;BGColor:=BLACK;
  257. Escape_Mode := True;
  258. ClrScr;
  259. Assign(AnsiFile,'\bbs\gen\Welcomeg');
  260. Reset(AnsiFile);
  261. While not EOF(AnsiFile) do Begin
  262.   Read(AnsiFile,ch);
  263.   ScrWrite(Ch);
  264. end;
  265.  
  266.  
  267. End.δ`o█│?'^¥5╓ü%aå`.≡Ωbδ[á≤N∩(^BLPcYÿaå`.≡Ωbδ╣∩⌠>▒[W ╗Ö╦d5╧br╨╘µ»■!╢╛«⌡Y┴√Vb»■!╢⌡╢=√=ü}δw⌡rm÷F`Φë&å Vb»■!╢⌡╢=√s