Program tinaSaat; {tina Bilgisayar, Selim S. €elik} uses crt,dos,graph; label yeniden; const GRAY50: FILLPATTERNTYPE=($AA,$55,$AA,$55,$AA,$55,$AA,$55); upkey = #200; downkey = #208; pgupkey = #201; pgdnkey = #209; leftkey = #203; inskey = #210; rightkey = #205; delkey = #211; cr = #13; esc = #27; var gd,gm,orx,ory,hx,hy,npx,npy,cx,cy,saatx,saaty,esev,sev : integer; saat,dn,bs,bn,bt,bd,dd,ds : word; x,nx1 : real; ayartus,tus : char; ayar : boolean; max : byte; ays : array [0..2] of integer; sonuc : string; PROCEDURE BUTTONKOY (X,Y : INTEGER; C : STRING; R: BYTE; CH : CHAR; CRN: BYTE); VAR UZ : INTEGER; YER : BYTE; BEGIN UZ:=8*LENGTH (C)+12; SETCOLOR (8); RECTANGLE (X,Y,X+UZ,Y+20); SETFILLSTYLE (1,7); FLOODFILL (X+5,Y+5,8); SETCOLOR (15); MOVETO (X+1,Y+19); LINETO(X+1,Y+1); LINETO (X+UZ-1,Y+1); MOVETO (X+2,Y+18); LINETO (X+2,Y+2); LINETO (X+UZ-2,Y+2); SETCOLOR (8); MOVETO (X+2,Y+19); LINETO (X+UZ-1,Y+19); LINETO (X+UZ-1,Y+2); MOVETO (X+3,Y+18); LINETO (X+UZ-2,Y+18); LINETO (X+UZ-2,Y+3); SETCOLOR (R); OUTTEXTXY (X+7,Y+7,C); YER:=POS (CH,C); IF YER>0 THEN BEGIN SETCOLOR (CRN); OUTTEXTXY (X+(YER*8)-1,Y+7,CH); END; END; function getkey : char; var c : char; begin c := readkey; repeat if c = #0 then begin c := readkey; if ord(c) > 127 then c := #0 else getkey := chr(ord(c) + 128); end else getkey := c; until c <> #0; end; { getkey } PROCEDURE WRITEXY (X,Y : INTEGER; C : STRING; R1,R2: BYTE); VAR UZ : INTEGER; BEGIN UZ:=8*LENGTH (C)+12; SETCOLOR (8); setviewport (x,y,x+uz,y+20,clipon); clearviewport; setviewport (0,0,getmaxx,getmaxy,clipon); RECTANGLE (X,Y,X+UZ,Y+20); SETFILLSTYLE (1,R1); FLOODFILL (X+5,Y+5,8); RECTANGLE (X,Y,X+UZ,Y+20); SETCOLOR (R2); OUTTEXTXY (X+7,Y+7,C); END; {ana k¨s¨m} BEGIN gd:=detect; initgraph (gd,gm,''); saatx:=100; { saatin orijin x koordinati } saaty:=100; { saatin orijin y koordinati } setbkcolor (7); { zemin rengi mat beyaz } yeniden: setcolor (1); setviewport (saatx,saaty,saatx+220,saaty+240,clipon); clearviewport; setviewport (0,0,getmaxx,getmaxy,clipon); rectangle (saatx,saaty,saatx+220,saaty+240); rectangle (saatx+2,saaty+2,saatx+218,saaty+238); line (saatx,saaty+22,saatx+220,saaty+22); setfillstyle (1,15); floodfill (saatx+5,saaty+25,1); line (saatx,saaty+42,saatx+220,saaty+42); setcolor (2); setlinestyle (solidln,0,thickwidth); rectangle (SAATX+4,SAATY+44,SAATX+216,SAATY+236); setlinestyle (solidln,0,normwidth); setcolor (12); outtextxy (saatx+10,saaty+28,'Ayar'); line (saatx+10,saaty+37,saatx+16,saaty+37); orx:=saatx+110; ory:=saaty+140; SETFILLPATTERN (GRAY50,11); FLOODFILL (saatx+15,saaty+5,1); BUTTONKOY (saatx+2,saaty+2,'ž',1,' ',1); WRITEXY ( saatx+55,saaty+2,' (c) TINASOFT ',1,15); putpixel (orx,ory,1); setcolor (9); setfillstyle (1,9); for bs:=0 to 59 do begin { saat kadrani cizildi } x:=124.10+(bs*0.1044); hx:=trunc(orx+75*cos(x)); hy:=trunc(ory+75*sin(x)); putpixel (hx,hy,4); if bs in [0,5,10,15,20,25,30,35,40,45,50,55] then bar (hx-2,hy-2,hx+2,hy+2); { her bes dakikalik dilimler bar ile belirlendi } end; setwritemode (xorput); { cizim modu xorput'a cevrildi} dn:=0; gettime (bt,bd,bs,bn); { sistem saati tespit edildi } setcolor (3); x:=124.10+(bs*0.1044); hx:=trunc(orx+75*cos(x)); hy:=trunc(ory+75*sin(x)); moveto (orx,ory); lineto (hx,hy); setcolor (14); dn:=bs; x:=124.10+(bd*0.1044); hx:=trunc(orx+75*cos(x)); hy:=trunc(ory+75*sin(x)); moveto (hx,hy); nx1:=124.10+((bd+15)*0.1044); npx:=trunc(orx+6*cos(nx1)); npy:=trunc(ory+6*sin(nx1)); lineto (npx,npy); nx1:=124.10+((bd+30)*0.1044); npx:=trunc(orx+18*cos(nx1)); npy:=trunc(ory+18*sin(nx1)); lineto (npx,npy); nx1:=124.10+((bd+45)*0.1044); npx:=trunc(orx+6*cos(nx1)); npy:=trunc(ory+6*sin(nx1)); lineto (npx,npy); lineto (hx,hy); dd:=bd; saat:=bt; ds:=bt; if saat>=12 then saat:=saat-12; saat:=trunc(saat*5); saat:=saat+trunc(bd/12); x:=124.10+(saat*0.1044); hx:=trunc(orx+60*cos(x)); hy:=trunc(ory+60*sin(x)); moveto (hx,hy); nx1:=124.10+((saat+15)*0.1044); npx:=trunc(orx+6*cos(nx1)); npy:=trunc(ory+6*sin(nx1)); lineto (npx,npy); nx1:=124.10+((saat+30)*0.1044); npx:=trunc(orx+15*cos(nx1)); npy:=trunc(ory+15*sin(nx1)); lineto (npx,npy); nx1:=124.10+((saat+45)*0.1044); npx:=trunc(orx+6*cos(nx1)); npy:=trunc(ory+6*sin(nx1)); lineto (npx,npy); lineto (hx,hy); repeat gettime (bt,bd,bs,bn); { her dongude sistem saati belirleniyor } if dn<>bs then begin { saniye son icra edilen saniyeden farkli ise} setcolor (3); x:=124.10+(dn*0.1044); { saniyenin bir onceki pozisyonu tespit edildi } hx:=trunc(orx+75*cos(x)); { saniyenin uc x koordinati belirlendi } hy:=trunc(ory+75*sin(x)); { saniyenin uc y koordinati belirlendi } moveto (orx,ory); { sistem saat orijin noktalarina odaklandi } lineto (hx,hy); { tespit edilen koordinatina gore saniye xor edilerek silindi } x:=124.10+(bs*0.1044); hx:=trunc(orx+75*cos(x)); { bir onceki islemler bu sefer cizim icin tekrarlandi } hy:=trunc(ory+75*sin(x)); moveto (orx,ory); lineto (hx,hy); dn:=bs; setcolor (14); if dd<>bd then begin {yelkovan cizimleri gerceklestirildi } x:=124.10+(dd*0.1044); hx:=trunc(orx+75*cos(x)); hy:=trunc(ory+75*sin(x)); moveto (hx,hy); nx1:=124.10+((dd+15)*0.1044); npx:=trunc(orx+6*cos(nx1)); npy:=trunc(ory+6*sin(nx1)); lineto (npx,npy); nx1:=124.10+((dd+30)*0.1044); npx:=trunc(orx+18*cos(nx1)); npy:=trunc(ory+18*sin(nx1)); lineto (npx,npy); nx1:=124.10+((dd+45)*0.1044); npx:=trunc(orx+6*cos(nx1)); npy:=trunc(ory+6*sin(nx1)); lineto (npx,npy); lineto (hx,hy); x:=124.10+(bd*0.1044); hx:=trunc(orx+75*cos(x)); hy:=trunc(ory+75*sin(x)); moveto (hx,hy); nx1:=124.10+((bd+15)*0.1044); npx:=trunc(orx+6*cos(nx1)); npy:=trunc(ory+6*sin(nx1)); lineto (npx,npy); nx1:=124.10+((bd+30)*0.1044); npx:=trunc(orx+18*cos(nx1)); npy:=trunc(ory+18*sin(nx1)); lineto (npx,npy); nx1:=124.10+((bd+45)*0.1044); npx:=trunc(orx+6*cos(nx1)); npy:=trunc(ory+6*sin(nx1)); lineto (npx,npy); lineto (hx,hy); saat:=ds; if saat>=12 then saat:=saat-12; { akrep ciziliyor } saat:=trunc(saat*5); saat:=saat+trunc(dd/12); x:=124.10+(saat*0.1044); hx:=trunc(orx+60*cos(x)); hy:=trunc(ory+60*sin(x)); moveto (hx,hy); nx1:=124.10+((saat+15)*0.1044); npx:=trunc(orx+6*cos(nx1)); npy:=trunc(ory+6*sin(nx1)); lineto (npx,npy); nx1:=124.10+((saat+30)*0.1044); npx:=trunc(orx+15*cos(nx1)); npy:=trunc(ory+15*sin(nx1)); lineto (npx,npy); nx1:=124.10+((saat+45)*0.1044); npx:=trunc(orx+6*cos(nx1)); npy:=trunc(ory+6*sin(nx1)); lineto (npx,npy); lineto (hx,hy); saat:=bt; if saat>=12 then saat:=saat-12; saat:=trunc(saat*5); saat:=saat+trunc(bd/12); x:=124.10+(saat*0.1044); hx:=trunc(orx+60*cos(x)); hy:=trunc(ory+60*sin(x)); moveto (hx,hy); nx1:=124.10+((saat+15)*0.1044); npx:=trunc(orx+6*cos(nx1)); npy:=trunc(ory+6*sin(nx1)); lineto (npx,npy); nx1:=124.10+((saat+30)*0.1044); npx:=trunc(orx+15*cos(nx1)); npy:=trunc(ory+15*sin(nx1)); lineto (npx,npy); nx1:=124.10+((saat+45)*0.1044); npx:=trunc(orx+6*cos(nx1)); npy:=trunc(ory+6*sin(nx1)); lineto (npx,npy); lineto (hx,hy); ds:=bt; dd:=bd; end; { if dd<>bd } end; { if dn<>bs} if keypressed then begin tus:=getkey; case tus of #27 : begin SETWRITEMODE (COPYPUT); closegraph; exit; end; #158 : begin ayar:=true; setwritemode (copyput); ays[0]:=bt; ays[1]:=bd; ays[2]:=bs; writexy (saatx+4,saaty+22,'Ayar',12,15); setviewport (saatx+3,saaty+44,saatx+100,saaty+70,clipon); clearviewport; setviewport (0,0,getmaxx,getmaxy,clipon); setcolor (8); rectangle (saatx+3,saaty+44,saatx+100,saaty+70); for sev:=0 to 2 do begin str (ays[sev]:2,sonuc); writexy (sev*32+5+saatx,saaty+46,sonuc,7,9); end; sev:=0; str (ays[sev]:2,sonuc); writexy (sev*32+5+saatx,saaty+46,sonuc,15,12); esev:=0; repeat ayartus:=getkey; case ayartus of rightkey : begin esev:=sev; sev :=sev+1; if sev>2 then sev:=0; str (ays[esev]:2,sonuc); writexy (esev*32+5+saatx,saaty+46,sonuc,7,9); str (ays[sev]:2,sonuc); writexy (sev*32+5+saatx,saaty+46,sonuc,15,12); end; leftkey : begin esev:=sev; sev :=sev-1; if sev<0 then sev:=2; str (ays[esev]:2,sonuc); writexy (esev*32+5+saatx,saaty+46,sonuc,7,9); str (ays[sev]:2,sonuc); writexy (sev*32+5+saatx,saaty+46,sonuc,15,12); end; upkey : begin max:=59; if sev=0 then max:=24; ays[sev]:=ays[sev]-1; if ays[sev]<0 then ays[sev]:=max; str (ays[sev]:2,sonuc); writexy (sev*32+5+saatx,saaty+46,sonuc,15,12); end; downkey : begin max:=59; if sev=0 then max:=24; ays[sev]:=ays[sev]+1; if ays[sev]>max then ays[sev]:=0; str (ays[sev]:2,sonuc); writexy (sev*32+5+saatx,saaty+46,sonuc,15,12); end; end; until ayartus in [cr,esc]; if ayartus=cr then settime (ays[0],ays[1],ays[2],0); goto yeniden; end; end; end; until 1=2; END.