10 REM ******************* 20 REM World Time Clock 30 REM By Robin Nixon 40 REM ******************* 50 REM NC200 Version 60 REM Downloaded from Tim's Amstrad NC Users' Site 70 REM http://www.ncus.org.uk 80 : 90 ON ERROR GOTO 2250 100 DIM Z% &80:VDU 26:CLS 110 PROCassemble:CALL scrn_from_disk:IF ?flag=0 THEN CLS 120 PROCsetup 130 IF ?flag=1 THEN GOTO 200 140 PROCamerica 150 PROCgreenland 160 PROCafrica 170 PROCeurope 180 PROCaustralia 190 CALL scrn_to_disk 200 PROCselect 210 END 220 : 230 DEF PROCsetup 240 zone%=12:home%=12:TIME=0 250 DIM city$(24),gmt%(24),xpos%(24),ypos%(24),week$(7) 260 MOVE 0,0:DRAW 479,0:DRAW 479,63:DRAW 0,63:DRAW 0,0 270 PRINT TAB(4,9);CHR$(17);"World Time Zones";CHR$(18) 280 PRINT TAB(4,14);CHR$(17);"Use Cursor Keys";CHR$(18) 290 xm=0.8:ym=0.8:VDU 29,58;14;:PROCglobe:xm=1.9:ym=1.4:VDU 29,148;0; 300 RESTORE 1510:FOR z%=1 TO 24 310 READ city$(z%),gmt%(z%),xpos%(z%),ypos%(z%) 320 NEXT:FOR d%=1 TO 7:READ week$(d%):NEXT 330 MOVE 0,0:DRAW 182,0:DRAW 182,63:DRAW 0,63:DRAW 0,0 340 ENDPROC 350 : 360 DEF PROCselect 370 PROCshowzone:REPEAT:PROCscankeys:UNTIL FALSE 380 ENDPROC 390 : 400 DEF PROCscankeys 410 i%=INKEY(0):IF i%=242 PROCprevzone:ENDPROC 420 IF i%=243 PROCnextzone:ENDPROC 430 IF i%=13 SOUND 1,1,100,1:PROChomezone:ENDPROC 440 IF TIME>100 THEN TIME=0:PROCzonetime 450 ENDPROC 460 : 470 DEF PROCprevzone 480 PROCcrosshair:zone%=zone%-1:IF zone%=0 zone%=24 490 PROCshowzone 500 ENDPROC 510 : 520 DEF PROCnextzone 530 PROCcrosshair:zone%=zone%+1:IF zone%=25 zone%=1 540 PROCshowzone 550 ENDPROC 560 : 570 DEF PROChomezone 580 PROCcrosshair:home%=zone%:PROCshowzone 590 ENDPROC 600 : 610 DEF PROCshowzone 620 PROCcrosshair 630 IF gmt%(zone%)>0 gmt$="+"+STR$(gmt%(zone%)) ELSE gmt$=STR$(gmt%(zone%)) 640 gmt$="GMT "+gmt$+" Hrs" 650 tzo%=gmt%(zone%)-gmt%(home%) 660 IF tzo%>0 tzo$="+"+STR$(tzo%) ELSE tzo$=STR$(tzo%) 670 IF tzo%<>0 tzo$="Home Time "+tzo$+" Hrs" ELSE tzo$="Home Timezone" 680 PRINT TAB(69-LEN(city$(zone%))/2,9);CHR$(17);city$(zone%);CHR$(18) 690 PRINT TAB(69-LEN(tzo$)/2,12);tzo$ 700 PRINT TAB(69-LEN(gmt$)/2,14);gmt$; 710 PROCzonetime 720 ENDPROC 730 : 740 DEF PROCzonetime 750 day$=LEFT$(TIME$,3) 760 hour%=VAL(MID$(TIME$,17,2)) 770 mins%=VAL(MID$(TIME$,20,2)) 780 secs%=VAL(MID$(TIME$,23,2)) 790 day%=0:REPEAT:day%=day%+1 800 UNTIL week$(day%)=day$ 810 hour%=hour%+gmt%(zone%)-gmt%(home%) 820 IF hour%<0 hour%=24+hour%:day%=FN=1:IF day%=0 day%=7 830 IF hour%>23 hour%=hour%-24:day%=day%+1:IF day%=8 day%=1 840 day$=week$(day%) 850 time$=day$+CHR$(32)+FNnewtime 860 PRINT TAB(69-LEN(time$)/2,10);time$; 870 ENDPROC 880 : 890 DEF FNnewtime 900 h$=STR$(hour%):m$=STR$(mins%):s$=STR$(secs%) 910 h$=STRING$(2-LEN(h$),"0")+h$ 920 m$=STRING$(2-LEN(m$),"0")+m$ 930 s$=STRING$(2-LEN(s$),"0")+s$ 940 time$=h$+":"+m$+":"+s$ 950 =time$ 960 : 970 DEF PROCcrosshair 980 MOVE xpos%(zone%)*xm,0 990 PLOT 6,xpos%(zone%)*xm,48*ym 1000 MOVE 0,ypos%(zone%)*ym 1010 PLOT 6,96*xm,ypos%(zone%)*ym 1020 ENDPROC 1030 : 1040 DEF PROCisland 1050 READ max% 1060 READ x%,y%:MOVE x%*xm,y%*ym 1070 FOR p%=1 TO max% 1080 READ x%,y%:DRAW x%*xm,y%*ym 1090 NEXT:ENDPROC 1100 : 1110 DEF PROCamerica 1120 RESTORE 1780:PROCisland 1130 PLOT 69,1*xm,25*ym 1140 PLOT 69,2*xm,24*ym 1150 ENDPROC 1160 : 1170 DEF PROCafrica 1180 RESTORE 1840:PROCisland 1190 RESTORE 1890:PROCisland 1200 PLOT 69,40*xm,29*ym 1210 ENDPROC 1220 : 1230 DEF PROCeurope 1240 RESTORE 1920:PROCisland 1250 RESTORE 2060:PROCisland 1260 RESTORE 2160:PROCisland 1270 ENDPROC 1280 : 1290 DEF PROCgreenland 1300 RESTORE 2020:PROCisland 1310 ENDPROC 1320 : 1330 DEF PROCaustralia 1340 RESTORE 2090:PROCisland 1350 RESTORE 2130:PROCisland 1360 PLOT 69,95*xm,11*ym 1370 ENDPROC 1380 : 1390 DEF PROCglobe 1400 IF ?flag=1 THEN ENDPROC 1410 RESTORE 2190:PROCisland 1420 RESTORE 2200:PROCisland 1430 RESTORE 2210:PROCisland 1440 MOVE ((SIN(0)*22)+19)*xm,((COS(0)*20)+22)*ym 1450 FOR a=0 TO 2*PI STEP 2*PI/32 1460 DRAW ((SIN(a)*22)+19)*xm,((COS(a)*20)+22)*ym 1470 NEXT 1480 ENDPROC 1490 : 1500 REM Time Zone Data 1510 DATA Midway,-11,1,25 1520 DATA Honolulu,-10,2,24 1530 DATA Anchorage,-9,3,37 1540 DATA Los Angeles,-8,13,27 1550 DATA Denver,-7,16,31 1560 DATA Chicago,-6,20,32 1570 DATA New York,-5,25,30 1580 DATA Caracas,-4,28,20 1590 DATA Rio de Janeiro,-3,35,12 1600 DATA Recife,-2,37,16 1610 DATA Azores,-1,40,29 1620 DATA London,0,48,34 1630 DATA Paris,1,49,32 1640 DATA Cairo,2,58,27 1650 DATA Jeddah,3,60,25 1660 DATA Dubai,4,64,26 1670 DATA Karachi,5,69,26 1680 DATA Dhaka,6,75,26 1690 DATA Bangkok,7,78,23 1700 DATA Hong Kong,8,83,26 1710 DATA Tokyo,9,91,30 1720 DATA Sydney,10,93,7 1730 DATA Noumea,11,95,11 1740 DATA Wellington,12,95,4 1750 REM Week Days 1760 DATA Mon,Tue,Wed,Thu,Fri,Sat,Sun 1770 REM North and South America 1780 DATA 43 1790 DATA 0,39,5,40,7,39,9,41,15,39,23,40,20,36,24,33,26,35,25,37,29,35,31,33 1800 DATA 29,31,27,31,23,28,24,26,22,27,20,27,20,24,24,24,26,21,33,19,33,17 1810 DATA 37,17,38,14,37,12,33,10,32,7,30,6,28,5,28,2,26,2,25,6,27,12,23,17 1820 DATA 24,20,23,23,20,22,18,21,15,24,11,29,10,34,3,37,0,34 1830 REM Africa 1840 DATA 23 1850 DATA 51,29,45,28,45,27,44,27,43,21,45,19,50,20,51,19,51,17,52,15,52,13 1860 DATA54,9,54,7,58,9,60,15,59,17,63,21,60,21,58,27,53,27,54,28,53,26,51,27 1870 DATA 51,29 1880 REM Madagascar 1890 DATA 5 1900 DATA 62,11,63,11,64,14,64,15,62,13,62,11 1910 REM Europe 1920 DATA 85 1930 DATA 45,31,45,29,47,29,48,31,50,31,53,28,53,29,51,31,55,31,56,28,56,29 1940 DATA 57,30,57,31,59,31,60,29,57,29,57,28,58,28,58,27,62,23,65,24,66,25 1950 DATA 63,27,69,26,71,20,73,21,73,22,75,25,81,21,82,22,82,23,80,25,83,26 1960 DATA 85,27,84,30,85,31,87,28,88,29,87,31,88,32,90,32,90,34,89,35,90,36 1970 DATA 92,36,95,37,96,35,95,33,96,32,96,38,91,39,89,38,81,39,83,40,81,42 1980 DATA 75,39,75,37,73,39,66,39,60,37,58,38,60,38,60,39,57,41,53,40,51,38 1990 DATA 49,37,49,35,51,36,52,34,53,36,52,37,55,39,56,38,54,37,55,36,57,36 2000 DATA 54,35,53,33,52,33,51,35,50,35,50,34,47,32,47,31,45,31 2010 REM Greenland 2020 DATA 18 2030 DATA 32,36,33,39,30,41,29,40,28,41,30,43,34,43,38,45,37,44,41,45,40,44 2040 DATA 44,44,42,42,43,41,40,40,42,39,37,38,34,36,32,36 2050 REM Britain 2060 DATA 3 2070 DATA 46,33,48,34,47,36,46,33 2080 REM Australia 2090 DATA 23 2100 DATA84,7,83,8,83,9,82,11,84,12,85,14,86,13,87,15,89,14,88,13,90,12,91,13 2110 DATA 91,14,92,12,94,10,94,8,92,6,90,6,89,8,88,8,87,9,86,9,85,8,84,7 2120 REM New Zealand 2130 DATA 4 2140 DATA 96,7,95,4,92,2,92,1,96,4 2150 REM Japan 2160 DATA 6 2170 DATA 91,31,91,30,89,29,89,28,92,30,92,31,91,31 2180 REM Globe 2190 DATA 5,4,8,6,15,8,16,5,21,5,23,0,29 2200 DATA 3,6,36,11,36,15,37,16,40 2210 DATA 28,29,37,24,31,25,29,28,31,30,31,32,30,30,29,28,29,24,28,20,25,19 2220 DATA 20,21,17,25,16,26,15,27,12,26,9,26,5,29,6,32,9,35,16,35,20,36,24,35 2230 DATA 23,33,25,32,28,35,25,36,28,35,30,38,28 2240 : 2250 ON ERROR GOTO 2270 2260 VDU 26:CLS:IF ERR=17 THEN *QUIT 2270 REPORT:PRINT" at line ";ERL 2280 PRINT:PRINT"Press [Function][X] for Notepad Main Menu" 2290 END 2300 : 2310 DEF PROCassemble 2320 fopenout=&B8A5 2330 fopenin=&B8A2 2340 foutblock=&B8AB 2350 finblock=&B896 2360 fclose=&B890 2370 : 2380 FOR PASS = 0 TO 2 STEP 2 2390 P%=Z% 2400 [ 2410 OPT PASS 2420 : 2430 .scrn_to_disk 2440 : 2450 CALL map_scrn_in 2460 LD HL,&F000 2470 LD DE,&8000 2480 LD BC,&1000 2490 LDIR 2500 CALL map_scrn_out 2510 LD HL,filename 2520 CALL fopenout 2530 RET NC 2540 LD HL,&8000 2550 LD BC,&1000 2560 CALL foutblock 2570 JP fclose 2580 : 2590 .scrn_from_disk 2600 : 2610 LD HL,filename 2620 CALL fopenin 2630 JR C,from1 2640 LD HL,flag 2650 LD (HL),0 2660 RET 2670 : 2680 .from1 2690 : 2700 LD HL,&8000 2710 LD BC,&1000 2720 CALL finblock 2730 CALL fclose 2740 CALL map_scrn_in 2750 LD HL,&8000 2760 LD DE,&F000 2770 LD BC,&1000 2780 LDIR 2790 CALL map_scrn_out 2800 LD HL,flag 2810 LD (HL),1 2820 RET 2830 : 2840 .map_scrn_in 2850 : 2860 LD A,(&B003) 2870 LD (state),A 2880 LD A,67 2890 LD (&B003),A 2900 OUT (&13),A 2910 RET 2920 : 2930 .map_scrn_out 2940 : 2950 LD A,(state) 2960 LD (&B003),A 2970 OUT (&13),A 2980 RET 2990 : 3000 .filename 3010 : 3020 OPT FNequs("TIMEZONE.SCN"):OPT FNequb(0) 3030 : 3040 .flag 3050 : 3060 OPT FNequb(0) 3070 : 3080 .state 3090 : 3100 OPT FNequb(0) 3110 ] 3120 NEXT 3130 ENDPROC 3140 : 3150 DEF FNequs(string$) 3160 $P%=string$ 3170 P%=P%+LEN(string$) 3180 =PASS 3190 : 3200 DEF FNequb(byte) 3210 ?P%=byte 3220 P%=P%+1 3230 =PASS