uses dos,crt,cfont,graph; const no = 16; type info = record name : string; secs : integer; mins : integer; hours : integer; end; var lastno : integer; loop : integer; loop2 : integer; data : array[1..no] of info; gm,gd : integer; co : integer; function lz(w : integer) : String; var s : String; begin Str(w:0,s); if Length(s) = 1 then s := '0' + s; lz := s; end; procedure precalc; var x : integer; begin x := 0; for loop := 1 to no do begin if data[loop].hours > 23 then begin x := data[loop].hours - 24; data[loop].hours := x; end; if data[loop].mins > 59 then begin x := data[loop].mins - 59; data[loop].mins := x; end; if data[loop].secs > 59 then begin x := data[loop].secs - 59; data[loop].secs := x; end; end; end; procedure presetclock; var h,m,s,hund : word; loop : integer; begin GetTime(h,m,s,hund); for loop := 1 to no do begin data[loop].hours := data[loop].hours + h; data[loop].mins := data[loop].mins + m; data[loop].secs := data[loop].secs + s; end; end; procedure showtime; begin delay(710); for loop := 1 to no do begin inc(data[loop].secs); if data[loop].secs > 59 then begin inc(data[loop].mins); data[loop].secs := 0; if data[loop].mins > 59 then begin data[loop].mins := 0; inc(data[loop].hours); if data[loop].hours > 23 then begin data[loop].hours := 0; end; end; end; end; end; begin gd := detect; initgraph(gd,gm,'\turbo\tp'); { change this !! } data[1].name := 'LONDON'; data[1].secs := 0; data[1].mins := 0; data[1].hours := 0; data[2].name := 'PARIS'; data[2].secs := 0; data[2].mins := 0; data[2].hours := 1; data[3].name := 'ATHINS'; data[3].secs := 0; data[3].mins := 0; data[3].hours := 2; data[4].name := 'PEKING'; data[4].secs := 0; data[4].mins := 0; data[4].hours := 8; data[5].name := 'TOKYO'; data[5].secs := 0; data[5].mins := 0; data[5].hours := 9; data[6].name := 'SYDNEY'; data[6].secs := 0; data[6].mins := 0; data[6].hours := 10; data[7].name := 'NEW YORK'; data[7].secs := 0; data[7].mins := 0; data[7].hours := -5; data[8].name := 'MOSCOW'; data[8].secs := 0; data[8].mins := 0; data[8].hours := 3; data[9].name := 'RIO'; data[9].secs := 0; data[9].mins := 0; data[9].hours := -3; data[10].name := 'LOS ANGELES'; data[10].secs := 0; data[10].mins := 0; data[10].hours := -8; data[11].name := 'HONOLULU'; data[11].secs := 0; data[11].mins := 0; data[11].hours := -10; data[12].name := 'HONG KONG'; data[12].secs := 0; data[12].mins := 0; data[12].hours := 8; data[13].name := 'SINGAPORE'; data[13].secs := 0; data[13].mins := 0; data[13].hours := 7; data[14].name := 'NAIROBI'; data[14].secs := 0; data[14].mins := 0; data[14].hours := 3; data[15].name := 'AUCKLAND'; data[15].secs := 0; data[15].mins := 0; data[15].hours := 12; data[16].name := 'MEXICO CITY'; data[16].secs := 0; data[16].mins := 0; data[16].hours := 6; presetclock; precalc; cleardevice; setcolor(lightblue); settextstyle(8,0,3); outtextxy(200,10,'WORLD TIME CLOCK'); outtextxy(200,440,'By Nathan Dawson'); rectangle(1,1,639,479); settextstyle(7,0,1); setcolor(lightgreen); for loop := 1 to 8 do begin outtextxy(10,10+loop*50,data[loop].name); end; co := 50; for loop2 := 9 to no do begin outtextxy(300,loop2+co,data[loop2].name); co := co + 49; end; repeat for loop := 1 to 8 do begin clock(200,10+loop*50,lz(data[loop].secs)); clock(155,10+loop*50,lz(data[loop].mins)); clock(110,10+loop*50,lz(data[loop].hours)); end; co := 40; for loop2 := 9 to no do begin clock(520,10+loop2+co,lz(data[loop2].secs)); clock(475,10+loop2+co,lz(data[loop2].mins)); clock(430,10+loop2+co,lz(data[loop2].hours)); co := co + 49; end; showtime; until keypressed; closegraph; gotoxy(17,1); textcolor(blue); write('Thank you for using the World Time Clock'); gotoxy(17,3); textcolor(cyan); write(' Look out for more software by '); gotoxy(17,5); textcolor(lightcyan); write(' °±² ²±° '); gotoxy(31,5); textcolor(lightred+blink); write('NATHAN DAWSON'); writeln; textcolor(lightgray); end. { CFONT UNIT NEEDED FOR CLOCK.PAS } unit cfont; interface procedure clock(px,y:integer;numbers:string); implementation uses crt,graph; procedure clock; var gm,gd : integer; p1 : integer; p2 : integer; p3 : integer; testno : string; no1 : string[1]; count : integer; posx : integer; posy : integer; function IntToStr(I: Longint): String; var S: string[11]; begin Str(I, S); IntToStr := S; end; procedure resetvars; begin p1 := 0; p2 := 0; p3 := 0; end; procedure section1; begin resetvars; p3 := 3; repeat dec(p3); dec(p2); inc(p1); line(posx+p3,posy+p2,posx+p3,posy+5+p1); until p3 = 0; end; procedure section2; begin resetvars; repeat inc(p3); dec(p2); inc(p1); line(posx+10+p3,posy+p2,posx+10+p3,posy+5+p1); until p3 = 3; end; procedure section3; begin resetvars; p3 := 3; repeat dec(p3); dec(p2); inc(p1); line(posx+p3,posy+14+p2,posx+p3,posy+19+p1); until p3 = 0; end; procedure section4; begin resetvars; repeat inc(p3); dec(p2); inc(p1); line(posx+10+p3,posy+14+p2,posx+10+p3,posy+19+p1); until p3 = 3; end; procedure section5; begin resetvars; p3 := 3; repeat dec(p3); dec(p2); inc(p1); line(posx+5+p2,posy-5+p3,posx+8+p1,posy-5+p3); until p3 = 0; end; procedure section6; begin resetvars; repeat inc(p3); dec(p2); inc(p1); line(posx+5+p2,posy+21+p3,posx+8+p1,posy+21+p3); until p3 = 3; end; procedure section7; begin resetvars; line(posx+4,posy+9,posx+9,posy+9); line(posx+3,posy+10,posx+10,posy+10); line(posx+4,posy+11,posx+9,posy+11); end; procedure on; begin setcolor(lightgreen); { setrgbpalette(lightgreen,0,60,0);} end; procedure off; begin setcolor(green); { setrgbpalette(green,0,20,0); } end; procedure shownumber(x:string); begin if x = '0' then begin on; section1; section2; section3; section4; section5; section6; off; section7; end; if x = '1' then begin off; section1; on; section2; off; section3; on; section4; off; section5; section6; section7; end; if x = '2' then begin off; section1; on; section2; section3; off; section4; on; section5; section6; section7; end; if x = '3' then begin off; section1; on; section2; off; section3; on; section4; section5; section6; section7; end; if x = '4' then begin on; section1; section2; off; section3; on; section4; off; section5; section6; on; section7; end; if x = '5' then begin on; section1; off; section2; section3; on; section4; section5; section6; section7; end; if x = '6' then begin on; section1; off; section2; on; section3; section4; section5; section6; section7; end; if x = '7' then begin off; section1; on; section2; off; section3; on; section4; section5; off; section6; section7; end; if x = '8' then begin on; section1; section2; section3; section4; section5; section6; section7; end; if x = '9' then begin on; section1; section2; off; section3; on; section4; section5; section6; section7; end; end; procedure setup; var loop : integer; begin for loop := 1 to 2 do begin posx := px+loop*20; posy := y; no1 := copy(numbers,loop,loop); shownumber(no1); end; end; begin setcolor(lightgreen); setrgbpalette(lightgreen,0,60,0); setcolor(green); setrgbpalette(green,0,20,0); setup; end; end.