uses crt,graph,dos;

var i,gd,gm,ex,ey,mx,my:integer;
    rat:integer; k,k1:char;  ki:array[1..9]of char;
    h,m,sa,ms,s1:word;page,cl:boolean{:=false};
   s:record
     x,y,z,a,b,c:real;
   end;

function r(g:real):real;
begin
r:=g*pi/180;
end;
function g(r:real):real;
begin
g:=r*180/pi;
end;

function artg(s,c:real):real;
begin
if c=0 then artg:=90 else artg:=g(arctan(s/c));
end;
Procedure LinP(c:char;x,y,z,l:integer);
var x1,x2,y1,y2:integer;
begin
s.x:=cos(r(90-s.c-artg(x,y)))*sqrt(x*x+y*y);
s.y:=sin(r(90-s.c-artg(x,y)))*sqrt(x*x+y*y);

s.x:=cos(r(90-s.b-artg(s.x,z)))*sqrt(s.x*s.x+z*z);
s.z:=sin(r(90-s.b-artg(s.x,z)))*sqrt(s.x*s.x+z*z);

s.y:=cos(r(90-s.a-artg(s.y,s.z)))*sqrt(s.y*s.y+s.z*s.z);
s.z:=sin(r(90-s.a-artg(s.y,s.z)))*sqrt(s.y*s.y+s.z*s.z);

 x1:=round(s.x)+ex;
 y1:=round(s.y)+ey;
   case c of
'x','X':begin
x:=x+l;
s.x:=cos(r(90-s.c-artg(x,y)))*sqrt(x*x+y*y);
s.y:=sin(r(90-s.c-artg(x,y)))*sqrt(x*x+y*y);
s.x:=cos(r(90-s.b-artg(s.x,z)))*sqrt(s.x*s.x+z*z);
s.z:=sin(r(90-s.b-artg(s.x,z)))*sqrt(s.x*s.x+z*z);
s.y:=cos(r(90-s.a-artg(s.y,s.z)))*sqrt(s.y*s.y+s.z*s.z);
s.z:=sin(r(90-s.a-artg(s.y,s.z)))*sqrt(s.y*s.y+s.z*s.z);
x2:=round(s.x)+ex;y2:=round(s.y)+ey;
end;

'y','Y':begin
y:=y+l;
s.x:=cos(r(90-s.c-artg(x,y)))*sqrt(x*x+y*y);
s.y:=sin(r(90-s.c-artg(x,y)))*sqrt(x*x+y*y);
s.x:=cos(r(90-s.b-artg(s.x,z)))*sqrt(s.x*s.x+z*z);
s.z:=sin(r(90-s.b-artg(s.x,z)))*sqrt(s.x*s.x+z*z);
s.y:=cos(r(90-s.a-artg(s.y,s.z)))*sqrt(s.y*s.y+s.z*s.z);
s.z:=sin(r(90-s.a-artg(s.y,s.z)))*sqrt(s.y*s.y+s.z*s.z);
x2:=round(s.x)+ex;y2:=round(s.y)+ey;
end;

'z','Z':begin
z:=z+l;
s.x:=cos(r(90-s.c-artg(x,y)))*sqrt(x*x+y*y);
s.y:=sin(r(90-s.c-artg(x,y)))*sqrt(x*x+y*y);
s.x:=cos(r(90-s.b-artg(s.x,z)))*sqrt(s.x*s.x+z*z);
s.z:=sin(r(90-s.b-artg(s.x,z)))*sqrt(s.x*s.x+z*z);
s.y:=cos(r(90-s.a-artg(s.y,s.z)))*sqrt(s.y*s.y+s.z*s.z);
s.z:=sin(r(90-s.a-artg(s.y,s.z)))*sqrt(s.y*s.y+s.z*s.z);
x2:=round(s.x)+ex;y2:=round(s.y)+ey;
end;
   end;
line(x1,y1,x2,y2);
end;


{procedure SPlt;
begin
for i:=1 to 254 do SetRGBPalette(i,i div 5+random($ffffff)+$ff,random($aaaaaa),i div 2+random($ffffff)+$ffff);
end;}
function hour:string;
var sh,sm,ss:string;
begin
str(h:0,sh);str(m:0,sm);str(sa:0,ss);
if length(sh)=1 then sh:='0'+sh;
if length(sm)=1 then sm:='0'+sm;
if length(ss)=1 then ss:='0'+ss;
hour:=sh+':'+sm+':'+ss;
end;

{procedure ChangePage;
begin
  if Page then begin
    SetActivePage(0);
    SetVisualPage(1,true);
    Page:=false;
  end else begin
    SetActivePage(1);
    SetVisualPage(0,true);
    Page:=true;
  end;
  ClearPage;
   OutTextXY(mx div 2-textwidth(hour)div 2, 1, hour);


end;}

begin
{SetSVGAMode(640, 480, 8, LfbOrBanked);
  OutTextXY(270, 230, 'Please wait...');
  SPlt;
  SetRGBPalette(255, 63, 63, 63);
drawborder:=false;}
initgraph(gd,gm,'d:\pas\bp\bgi');
mx:=getmaxx;my:=getmaxy;
ex:=mx div 2;ey:=my div 2;
rat:=56;s1:=0;
s.a:=0;s.b:=0;
ki[1]:='1';ki[2]:='2';ki[3]:='3';ki[4]:='4';ki[5]:='5';
ki[6]:='6';ki[7]:='7';ki[8]:='8';ki[9]:='9';k1:='3';
randomize;
repeat
{changepage;}
delay(1000);
cleardevice;
linp('x',-3*rat,-rat,3*rat,2*rat);linp('x',-3*rat,rat,3*rat,2*rat);
linp('x',rat,-rat,3*rat,2*rat);linp('x',rat,rat,3*rat,2*rat);
linp('x',-rat,-3*rat,3*rat,2*rat);linp('x',-rat,3*rat,3*rat,2*rat);
linp('y',-rat,rat,3*rat,2*rat);linp('y',rat,rat,3*rat,2*rat);
linp('y',-3*rat,-rat,3*rat,2*rat);linp('y',3*rat,-rat,3*rat,2*rat);
linp('y',-rat,-3*rat,3*rat,2*rat);linp('y',rat,-3*rat,3*rat,2*rat);

linp('x',-3*rat,-rat,-3*rat,2*rat);linp('x',-3*rat,rat,-3*rat,2*rat);
linp('x',rat,-rat,-3*rat,2*rat);linp('x',rat,rat,-3*rat,2*rat);
linp('x',-rat,-3*rat,-3*rat,2*rat);linp('x',-rat,3*rat,-3*rat,2*rat);
linp('y',-rat,rat,-3*rat,2*rat);linp('y',rat,rat,-3*rat,2*rat);
linp('y',-3*rat,-rat,-3*rat,2*rat);linp('y',3*rat,-rat,-3*rat,2*rat);
linp('y',-rat,-3*rat,-3*rat,2*rat);linp('y',rat,-3*rat,-3*rat,2*rat);

linp('z',3*rat,-rat,-3*rat,2*rat);linp('z',3*rat,rat,-3*rat,2*rat);
linp('z',3*rat,-rat,rat,2*rat);linp('z',3*rat,rat,rat,2*rat);
linp('z',3*rat,-3*rat,-rat,2*rat);linp('z',3*rat,3*rat,-rat,2*rat);
linp('y',3*rat,rat,-rat,2*rat);linp('y',3*rat,rat,rat,2*rat);
linp('y',3*rat,-3*rat,-rat,2*rat);linp('y',3*rat,-3*rat,rat,2*rat);

linp('z',-3*rat,-rat,-3*rat,2*rat);linp('z',-3*rat,rat,-3*rat,2*rat);
linp('z',-3*rat,-rat,rat,2*rat);linp('z',-3*rat,rat,rat,2*rat);
linp('z',-3*rat,-3*rat,-rat,2*rat);linp('z',-3*rat,3*rat,-rat,2*rat);
linp('y',-3*rat,rat,-rat,2*rat);linp('y',-3*rat,rat,rat,2*rat);
linp('y',-3*rat,-3*rat,-rat,2*rat);linp('y',-3*rat,-3*rat,rat,2*rat);

linp('x',-3*rat,3*rat,-rat,2*rat);linp('x',-3*rat,3*rat,rat,2*rat);
linp('x',rat,3*rat,-rat,2*rat);linp('x',rat,3*rat,rat,2*rat);
linp('z',-rat,3*rat,rat,2*rat);linp('z',rat,3*rat,rat,2*rat);
linp('z',-rat,3*rat,-3*rat,2*rat);linp('z',rat,3*rat,-3*rat,2*rat);

linp('x',-3*rat,-3*rat,-rat,2*rat);linp('x',-3*rat,-3*rat,rat,2*rat);
linp('x',rat,-3*rat,-rat,2*rat);linp('x',rat,-3*rat,rat,2*rat);
linp('z',-rat,-3*rat,rat,2*rat);linp('z',rat,-3*rat,rat,2*rat);
linp('z',-rat,-3*rat,-3*rat,2*rat);linp('z',rat,-3*rat,-3*rat,2*rat);

linp('x',rat,rat,rat,2*rat);linp('x',-rat,rat,rat,-2*rat);
linp('x',rat,-rat,rat,2*rat);linp('x',-rat,-rat,rat,-2*rat);
linp('x',rat,rat,-rat,2*rat);linp('x',-rat,rat,-rat,-2*rat);
linp('x',rat,-rat,-rat,2*rat);linp('x',-rat,-rat,-rat,-2*rat);

linp('y',rat,rat,rat,2*rat);linp('y',rat,-rat,rat,-2*rat);
linp('y',-rat,rat,rat,2*rat);linp('y',-rat,-rat,rat,-2*rat);
linp('y',rat,rat,-rat,2*rat);linp('y',rat,-rat,-rat,-2*rat);
linp('y',-rat,rat,-rat,2*rat);linp('y',-rat,-rat,-rat,-2*rat);

linp('z',rat,rat,rat,2*rat);linp('z',rat,rat,-rat,-2*rat);
linp('z',-rat,rat,rat,2*rat);linp('z',-rat,rat,-rat,-2*rat);
linp('z',rat,-rat,rat,2*rat);linp('z',rat,-rat,-rat,-2*rat);
linp('z',-rat,-rat,rat,2*rat);linp('z',-rat,-rat,-rat,-2*rat);

putpixel(ex,ey,6);

gettime(h,m,sa,ms);
if (sa=s1+5)or(sa>s1+5) then begin k1:=ki[random(9)+1];s1:=sa;{SPlt};end;
if sa=0 then s1:=sa;
if cl then {SPlt};
case k1 of
'8':s.b:=s.b+1;'2':s.b:=s.b-1;
'4':s.a:=s.a+1;'6':s.a:=s.a-1;
'7':begin s.b:=s.b+1;s.a:=s.a+1;end;
'9':begin s.b:=s.b+1;s.a:=s.a-1;end;
'3':begin s.b:=s.b-1;s.a:=s.a-1;end;
'1':begin s.b:=s.b-1;s.a:=s.a+1;end;
'5':begin k1:=ki[random(9)+1];cl:=not cl;end;
end;
if keypressed then  begin
k:=readkey;
case k of
'+':rat:=rat+1;'-':rat:=rat-1;#27:halt(1);
#72:ey:=ey-1;#75:ex:=ex-1;#77:ex:=ex+1;#80:ey:=ey+1;
'5':{SPlt};
'1'..'9':k1:=k;
end;end;
until   k=#27;
closegraph;
end.