Program SACHY;

uses crt, graph, Mys, Ovladac;

var grDriver     : Integer;
    grMode       : Integer;
    ErrCode      : Integer;
    pal          : palettetype;
    zmena, konec : boolean;
    KX, KY       : integer;

procedure Inicializace;
begin
  grDriver := Detect;
  RegisterBGIDriver(@CGAOvladac);
  RegisterBGIDriver(@EGAVGAOvladac);
  RegisterBGIFont(@TripFont);
  InitGraph(grDriver,grMode,'');
  ErrCode := GraphResult;
  if ErrCode <> grOk then
  begin
    WriteLn('Graphics error:',GraphErrorMsg(ErrCode));
    CloseGraph;
    Halt(1);
  end;
end;

procedure Pozadi(clr1, clr2, clr3, clr4: word);
var c1, c2, c3, c4: word;
begin
  c1 := clr1;
  c2 := clr2;
  c3 := clr3;
  c4 := clr4;
  setcolor(c1);
  setfillstyle(solidfill,c1);
  bar(0,0,639,479);                   { pozadi }
  setcolor(c2);
  setfillstyle(solidfill,c2);
  bar(0,0,2,479);                     { okrajove listy }
  bar(637,0,639,479);
  bar(0,0,639,22);
  bar(0,477,639,479);
  setcolor(c3);
  rectangle(0,0,639,479);      { vnejsi obdelnik }
  rectangle(3,3,636,476);      { vnitrni obdelnik }
  rectangle(3,3,636,22);       { horni radek }
  line(20,0,20,3);      { levy horni roh }
  line(0,20,3,20);
  line(619,0,619,3);    { pravy horni roh }
  line(636,20,639,20);
  line(0,459,3,459);    { levy dolni roh }
  line(20,476,20,479);
  line(619,476,619,479);{ pravy dolni roh }
  line(636,459,639,459);
  setcolor(7);  { dolni radek }
  setfillstyle(solidfill,7);
  bar(6,454,633,473);
  setcolor(white);
  line(6,454,633,454);
  line(6,454,6,473);
  setcolor(black);
  line(6,473,633,473);
  line(633,454,633,473);
  line(8,456,200,456);  { dolni radek - vnitrni okenko }
  line(8,456,8,471);
  setcolor(white);
  line(8,471,200,471);
  line(200,471,200,456);
  setcolor(c4);
  settextstyle(defaultfont,0,1);
  outtextxy(305,9,'Chess');
  outtextxy(280,461,'Beta version   Copyright 2000 David Padrta');
end;

procedure Sachovnice;
var i, j: integer;
    z: boolean;
begin
  for i:=0 to 8 do
  begin
    setcolor(black);
    line(50+5*i,370-35*i,410-5*i,370-35*i); { vodorovne cary }
    line(50+45*i,370,90+35*i,90);           { svisle cary }
  end;
  for i:=0 to 7 do
    rectangle(50+45*i,370,95+45*i,375);
  z := true;
end;

procedure Tlacitko(rx, ry: integer; clc: boolean; txt: string);
var delka, l, mx, my: integer;
    click: boolean;
    text: string;
begin
  mx := rx; my := ry; click := clc; text := txt;
  delka := 70;
  l := length(text);
  if ((l+1)*8) > delka then delka := (l+1)*8;
  if (delka=70) then
  begin
    setcolor(lightgray);
    setfillstyle(solidfill,lightgray);
    bar(mx-1, my-1, mx+delka+1, my+20);
    if (clc = true) then
    begin
      setcolor(white);
      line(mx, my, mx, my+19);
      line(mx, my, mx+delka, my);
      setcolor(black);
      line(mx+delka, my, mx+delka, my+19);
      line(mx, my+19, mx+delka, my+19);
      settextstyle(defaultfont,0,1);
      outtextxy(mx+(35-((length(text)*8)div 2)), my+6, text);
    end
    else begin
      setcolor(white);
      line(mx+delka, my, mx+delka, my+19);
      line(mx, my+19, mx+delka, my+19);
      setcolor(black);
      line(mx, my, mx, my+19);
      line(mx, my, mx+delka, my);
      settextstyle(defaultfont,0,1);
      outtextxy(mx+(36-((length(text)*8)div 2)), my+7, text);
    end;
  end;
  if (delka>70) then
  begin
    setcolor(lightgray);
    setfillstyle(solidfill,lightgray);
    bar(mx-1, my-1, mx+delka+1, my+20);
    if (clc = true) then
    begin
      setcolor(white);
      line(mx, my, mx, my+19);
      line(mx, my, mx+delka, my);
      setcolor(black);
      line(mx+delka, my, mx+delka, my+19);
      line(mx, my+19, mx+delka, my+19);
      settextstyle(defaultfont,0,1);
      outtextxy(mx+((delka div 2)-((length(text)*8)div 2)), my+6, text);
    end
    else begin
      setcolor(white);
      line(mx+delka, my, mx+delka, my+19);
      line(mx, my+19, mx+delka, my+19);
      setcolor(black);
      line(mx, my, mx, my+19);
      line(mx, my, mx+delka, my);
      settextstyle(defaultfont,0,1);
      outtextxy(mx+(((delka div 2)+1)-((length(text)*8)div 2)), my+7, text);
    end;
  end;
end;

procedure Stisk_Tlacitka(px, py: integer; t: string);
begin
  Kurzor_off;
  Tlacitko(px,py,zmena,t);
  Kurzor_on;
  zmena := not(zmena);
  delay(250);
  Kurzor_off;
  Tlacitko(px,py,zmena,t);
  Kurzor_on;
  zmena := not(zmena);
  KX := Kurzor_X;
  KY := Kurzor_Y;
  delay(100);
end;

procedure Intro;
var i: integer;
begin
  for i:=0 to 21 do
  begin
    setrgbpalette(62,3*i,0,0);
    setcolor(62);
    settextstyle(triplexfont,horizdir,10);
    outtextxy(130,100,'CHESS');
    settextstyle(triplexfont,horizdir,4);
    outtextxy(70,250,'Copyright (c)2000  David Padrta');
    outtextxy(160,300,'All rights reserved.');
    delay(50);
  end;
  delay(1000);
  for i:=21 downto 0 do
  begin
    setrgbpalette(62,3*i,0,0);
    setcolor(62);
    settextstyle(triplexfont,horizdir,10);
    outtextxy(130,100,'CHESS');
    settextstyle(triplexfont,horizdir,4);
    outtextxy(70,250,'Copyright (c)2000  David Padrta');
    outtextxy(160,300,'All rights reserved.');
    delay(50);
  end;
end;

BEGIN
  zmena := false; konec := false;
  KX := -1; KY := -1;
  Inicializace;
  Intro;
  Pozadi(7,2,0,15);{pozadi,ram,linie ramu,pismo}
  Sachovnice;
  Tlacitko(550,50,true,'OK');
  Tlacitko(550,75,true,'Zrusit');
  Tlacitko(550,100,true,'Pomoc');
  Tlacitko(550,125,true,'Konec');
  Mys_start;
  Kurzor_on;
  repeat
    Stav_Mysi;
    if ((KX <> Kurzor_X) or (KY <> Kurzor_Y)) then
    begin
      if ((Kurzor_X >= 550) and (Kurzor_X <= 620)) and
         ((Kurzor_Y >= 50) and (Kurzor_Y <= 70)) and
         (Tlacitko_Leve = true) then Stisk_tlacitka(550,50,'OK');
      if ((Kurzor_X >= 550) and (Kurzor_X <= 620)) and
         ((Kurzor_Y >= 75) and (Kurzor_Y <= 95)) and
         (Tlacitko_Leve = true) then Stisk_tlacitka(550,75,'Zrusit');
      if ((Kurzor_X >= 550) and (Kurzor_X <= 620)) and
         ((Kurzor_Y >= 100) and (Kurzor_Y <= 120)) and
         (Tlacitko_Leve = true) then Stisk_tlacitka(550,100,'Pomoc');
      if ((Kurzor_X >= 550) and (Kurzor_X <= 620)) and
         ((Kurzor_Y >= 125) and (Kurzor_Y <= 145)) and
         (Tlacitko_Leve = true) then
	   begin
	     Stisk_tlacitka(550,125,'Konec');
             konec := true;
           end;
    end;
  until (konec = true);
  cleardevice;
  CloseGraph;
  clrscr;
END.