{
 Here is something that you can play with ...

 Shine FX - by Christopher J. C.
 inspired by lotsa product out there that use this kind of FX

 This code is public domain.  Do whatever you want with it.

 A credit line for me would be nice  ;^p
}

uses crt;

const MaxRow=25;MaxColumn=80;

var Buffer:array[1..MaxRow] of byte;
    XTable:array[1..MaxRow] of shortint;

procedure Init_XTable;
var cnt:byte;
begin for cnt:=0 to MaxRow-1 do XTable[cnt+1]:=-cnt; end;

procedure Shine(sx,sy,ex,ey:integer;c:byte);
var x,y:integer;
    num,cnt:word;
begin
 cnt:=0;
 for x:=sx to ex+ey-sy do
 begin
  for y:=sy to ey do
   if (XTable[y-sy+1]+x > sx-1) and (XTable[y-sy+1]+x < ex+1) then
   begin
    num:=(y-1)*160+(XTable[y-sy+1]+(x-1))*2+1;
    Buffer[y]:=mem[$b800:num];                    {save background attr.}
    mem[$b800:num]:=c+Buffer[y] and 240;          {highlight the spot}
   end;
  asm                                             {retrace}
   mov dx,3dah;
   @r1: in al,dx; test al,8; jnz @r1
   @r2: in al,dx; test al,8; jz @r2
  end;
 for y:=sy to ey do
  if (XTable[y-sy+1]+x > sx-1) and (XTable[y-sy+1]+x < ex+1) then
  begin                                           {restore background attr.}
   mem[$b800:(y-1)*160+(XTable[y-sy+1]+(x-1))*2+1]:=Buffer[y];
  end;
 end;
end;

procedure ShowImage;

var cnt:word;
begin
 textbackground(0);window(25,7,55,18);clrscr;inc(windmax);
 for cnt:=1 to 7 do
 begin
  gotoxy(1,cnt+1);textcolor(11);write('Û');
  gotoxy(31,cnt+4);textcolor(9);write('Û');
 end;
 textcolor(11);
 gotoxy(1,1);write('ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ');
 textcolor(3);write('Ü');
 gotoxy(1,12);write('ß');
 textcolor(9);write('ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß');
 textbackground(3);gotoxy(1,9);textcolor(11);write('²');
 gotoxy(1,10);write('±');gotoxy(1,11);write('°');
 gotoxy(31,4);textcolor(9);write('²');
 gotoxy(31,3);write('±');gotoxy(31,2);write('°');
 window(26,8,54,17);clrscr;
 textcolor(11);gotoxy(9,2);write('Shine FX Test');
 textcolor(8);gotoxy(6,3);write('ÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄ');
 textcolor(12);gotoxy(12,4);write('Code by');
 textcolor(1);gotoxy(7,5);write('Christopher J. C.');
 textcolor(8);gotoxy(6,6);write('ÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄ');
 textcolor(11);gotoxy(3,7);write('Add a little shine to the');
 gotoxy(5,8);write('usually boring screen');
 textcolor(12);gotoxy(12,9);write('Enjoy!!');
 window(1,1,80,25);
end;

begin
 Init_XTable;
 ShowImage;
 Shine(25,7,55,18,15);
 repeat until keypressed;
end.
