   10 REM *********************************************
   20 REM National Lottery Number Recorder and Selector
   30 REM               By Peter Hopkins
   40 REM *********************************************
   50 :
   60 REM NC200 Version : 09/07/02
   70 REM Downloaded from Tim's Amstrad NC Users' Site
   80 REM http:\\www.ncus.org.uk 
   90 :
  100 ON ERROR PROCeror
  110 CLS
  120 mes1$=CHR$14+" Press The ENTER key "+CHR$15
  130 DIMfreq_balls(49)
  140 DIMlast_balls(7)
  150 DIMsort2(49,2)
  160 DIMmonths$(12)
  170 DIMhigh1(6)
  180 DIMhigh2(6)
  190 DIMhigh3(6)
  200 DIMyes(7)
  210 PROCdate
  220 flag1=0
  230 flag2=0
  240 IF flag1<>1 PROCload_data
  250 REPEAT
  260   mes2$=CHR$14+" Last Draw Was On "+last_date$+" "+CHR$15
  270   PROCmenu
  280 UNTIL0
  290 END
  300 :
  310 DEFPROCload_data
  320 PROCloading
  330 X=OPENIN"Lottnums.Dat"
  340 FOR I%=0TO49
  350   INPUT#X, freq_balls(I%)
  360 NEXT
  370 :
  380 FOR I%=1TO49
  390   INPUT# X,sort2(I%,1),sort2(I%,2)
  400 NEXT
  410 :
  420 INPUT#X, last_date$
  430 :
  440 FOR I%=1TO7:INPUT#X, last_balls(I%):NEXT
  450 :
  460 CLOSE# X
  470 date$=LEFT$(TIME$,15)
  480 flag1=1:flag2=0
  490 ENDPROC
  500 :
  510 DEFPROCsave_data
  520 PROCconfirm
  530 IF ans$<>"Y" ENDPROC
  540 PROCsaving
  550 X=OPENOUT"Lottnums.Dat"
  560 FOR I%=0TO49
  570   PRINT# X, freq_balls(I%)
  580 NEXT
  590 :
  600 FOR I%=1TO49
  610   PRINT# X,sort2(I%,1),sort2(I%,2)
  620 NEXT
  630 :
  640 PRINT#X, last_date$
  650 FOR I%=1TO7:PRINT#X, last_balls(I%):NEXT
  660 :
  670 CLOSE# X
  680 flag2=0
  690 ENDPROC
  700 :
  710 DEFPROCget_data
  720 PROCdate
  730 PROCborder
  740 Z%=@%:@%=4
  750 PRINTTAB(40-(LENdate$/2),14)date$
  760 PRINTTAB(1,1);last_date$;SPC(2);
  770 FOR I%=1TO7
  780   PRINTlast_balls(I%);SPC(0);
  790 NEXT
  800 @%=Z%
  810 IF LEFT$(TIME$,3)="Sat" last_date$="Saturday "+dayt$:GOTO1000
  820 IF LEFT$(TIME$,3)="Wed" last_date$="Wednesday "+dayt$:GOTO1000
  830 REPEAT
  840   PRINTTAB(1,3)STRING$(78," ")
  850   PRINTTAB(1,3);"Please Enter Draw Day : 1 = Saturday   2 = Wednesday"
  860   INPUTTAB(54,3)ans$
  870 UNTIL ans$="1" OR ans$="2" OR ans$=""
  880 IF ans$="" ENDPROC
  890 IF ans$="1" last_date$="Saturday" ELSE last_date$="Wednesday"
  900 PRINTTAB(54,3);CHR$14;" ";last_date$;" ";CHR$15
  910 INPUTTAB(1,5)"Draw Date : "ans$
  920 IF ans$="" ENDPROC
  930 ans$=LEFT$(ans$,2)
  940 IF LEN(ans$)=1 ans$="0"+ans$
  950 mon$=STR$(month%)
  960 IF LEN(mon$)=1 mon$="0"+mon$
  970 last_date$=last_date$+" "+ans$+"/"+mon$+"/"+MID$(TIME$,14,2)
  980 PRINTTAB(1,3)STRING$(78," ")
  990 PRINTTAB(1,5)STRING$(78," ")
 1000 PRINTTAB(1,3);"Draw Date Is ";last_date$
 1010 FOR I%=1TO7
 1020   PRINTTAB(1,(I%+4))"Enter Ball ";I%;" : "
 1030   INPUTTAB(17,I%+4)ans%
 1040   IF ans%=0 RUN
 1050   last_balls(I%)=ans%
 1060 NEXT
 1070 PROCentries_ok
 1080 PROCsd1
 1090 flag2=1
 1100 ENDPROC
 1110 :
 1120 DEFPROCborder
 1130 CLS
 1140 MOVE0,0:DRAW 0,127:DRAW 479,127:DRAW 479,0:DRAW 0,0
 1150 MOVE 2,2:DRAW 2,125:DRAW 477,125:DRAW 477,2:DRAW 2,2
 1160 ENDPROC
 1170 :
 1180 DEFPROCsd1
 1190 PROCborder
 1200 PRINTTAB(30,7)"Updating The Numbers"
 1210 PRINTTAB(35,9)"Please Wait"
 1220 FOR I%=1TO7:FOR J%=1TO49
 1230     IF last_balls(I%)=J% freq_balls(J%)=freq_balls(J%)+1
 1240   NEXT
 1250 NEXT
 1260 PROCsort2
 1270 ENDPROC
 1280 :
 1290 DEFPROCscale
 1300 maxx=0:minn=900
 1310 yoffset=27
 1320 xoffset=30
 1330 FOR I%=1TO49
 1340   IF freq_balls(I%)>maxx maxx=freq_balls(I%)
 1350   IF freq_balls(I%)<minn minn=freq_balls(I%)
 1360 NEXT
 1370 medd=INT(((maxx-minn)/2)+minn)
 1380 ratio=99/(maxx-minn)
 1390 ENDPROC
 1400 :
 1410 DEFPROCgraph
 1420 PROCscale
 1430 CLS
 1440 count=0
 1450 FOR I%=1TO49
 1460   count=count+9
 1470   MOVE count+xoffset,20:DRAW count+xoffset,25
 1480 NEXT
 1490 count=0
 1500 FOR I%=1TO49
 1510   count=count+9
 1520   IF I%=1 OR I%=5 OR I%=10 OR I%=15 OR I%=20 OR I%=25 OR I%=30 OR I%=35 OR I%=40 OR I%=45 OR I%=49 PROCdouble
 1530 NEXT
 1540 count=0
 1550 FOR I%=1TO49
 1560   count=count+9
 1570   MOVE count+xoffset,25
 1580   PLOT22, count+xoffset,(yoffset+(ratio*(freq_balls(I%)-minn)))
 1590 NEXT
 1600 MOVE 30,20:DRAW 30,125
 1610 MOVE 25,25:DRAW 475,25
 1620 PRINTTAB(6,14)"1"
 1630 PRINTTAB(12,14)"5"
 1640 PRINTTAB(19,14)"10"
 1650 PRINTTAB(26,14)"15"
 1660 PRINTTAB(34,14)"20"
 1670 PRINTTAB(42,14)"25"
 1680 PRINTTAB(49,14)"30"
 1690 PRINTTAB(57,14)"35"
 1700 PRINTTAB(64,14)"40"
 1710 PRINTTAB(72,14)"45"
 1720 PRINTTAB(77,14)"49"
 1730 PRINTTAB(1,0)maxx
 1740 PRINTTAB(1,12);minn
 1750 PRINTTAB(1,6);medd
 1760 MOVE 9+xoffset,(yoffset+(ratio*(freq_balls(1)-minn)))
 1770 count=9
 1780 FOR I%=2TO49
 1790   count=count+9
 1800   DRAW count+xoffset,(yoffset+(ratio*(freq_balls(I%)-minn)))
 1810 NEXT
 1820 PROCpause
 1830 ENDPROC
 1840 :
 1850 DEFPROCdouble
 1860 MOVE (count+1)+xoffset,20:DRAW (count+1)+xoffset,25
 1870 ENDPROC
 1880 :
 1890 DEFPROCpause
 1900 count%=0
 1910 REPEAT
 1920   A%=INKEY(0)
 1930 UNTIL A%=32 OR A%=13 OR A%=83
 1940 ENDPROC
 1950 :
 1960 DEFPROCmenu
 1970 PROCtotal_draws
 1980 PROCborder
 1990 PRINTTAB(78-(LENdate$),1)date$
 2000 RESTORE 2220
 2010 count%=-1
 2020 FOR I%=1TO6
 2030   count%=count%+2
 2040   READ menu$
 2050   PRINTTAB(22,(count%+1));"(";I%;") ";menu$
 2060 NEXT
 2070 PRINTTAB(40-(LENmes2$/2),14)mes2$
 2080 IF flag2=1 PRINTTAB(26,2);CHR$14;" Save Data ";CHR$15
 2090 REPEAT
 2100   PRINTTAB(1,1)RIGHT$(TIME$,8)
 2110   A%=INKEY(1)
 2120 UNTIL A%>47 AND A%<55 OR A%=172 OR A%=81 OR A%=113
 2130 IF A%=48 PROCload_data
 2140 IF A%=49 PROCsave_data
 2150 IF A%=50 PROCget_data
 2160 IF A%=51 PROCguess
 2170 IF A%=54PROCguess2
 2180 IF A%=52 PROCgraph
 2190 IF A%=53 PROCList_balls
 2200 IF A%=172 CLS:END
 2210 IF A%=81 OR A%=113 PROCend_prog
 2220 DATASave Data,Enter Draw
 2230 DATA3 Guesses,Graph Of Frequency Of Balls Drawn
 2240 DATASpool Balls Data To Disc,Show All Balls
 2250 ENDPROC
 2260 :
 2270 DEFPROCloading
 2280 PROCborder
 2290 PRINTTAB(28,7)CHR$14;" Loading LottNums.Dat ";CHR$15
 2300 ENDPROC
 2310 :
 2320 DEFPROCsaving
 2330 PROCborder
 2340 PRINTTAB(28,7)CHR$14;" Saving LottNums.Dat ";CHR$15
 2350 ENDPROC
 2360 :
 2370 DEFPROCdate
 2380 day$=MID$(TIME$,5,2)
 2390 year$=MID$(TIME$,14,2)
 2400 RESTORE 2480
 2410 FOR Z%=1TO12
 2420   READ info$
 2430   IF info$=MID$(TIME$,8,3)month%=Z%
 2440 NEXT
 2450 IF month%<10 month$="0"+STR$(month%) ELSE month$=STR$(month%)
 2460 dayt$=day$+"/"+month$+"/"+year$
 2470 ENDPROC
 2480 DATAJan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
 2490 :
 2500 DEFPROCconfirm
 2510 PROCborder
 2520 VDU7
 2530 PRINTTAB(27,7)"Enter ";CHR$17;"Y";CHR$18;" To Save The Data :"
 2540 INPUTTAB(54,7)ans$
 2550 ENDPROC
 2560 :
 2570 DEFPROCsort2
 2580 FOR I%=1TO49:sort2(I%,1)=0:sort2(I%,2)=0:NEXT
 2590 count1%=0
 2600 PROCscale
 2610 FOR J%=minn TO maxx
 2620   FOR I%=1TO49
 2630     IF freq_balls(I%)=J% count1%=count1%+1:sort2(count1%,1)=I%:sort2(count1%,2)=J%
 2640   NEXT
 2650 NEXT
 2660 ENDPROC
 2670 :
 2680 DEFPROCList_balls
 2690 PROCborder
 2700 VDU7
 2710 INPUTTAB(15,7)"Enter Y To Spool Numbers To  Lottnums.Txt  : ";ans$
 2720 IF ans$<>"Y" ENDPROC
 2730 Z%=@%:@%=4
 2740 CLS
 2750 *SPOOL Lottnums.Txt
 2760 PRINT">";STRING$(15,"-");"!";STRING$(18,"-");"!";STRING$(43,"-");"R"
 2770 count1%=count1%+1
 2780 PRINT"The last draw was on ";last_date$;SPC(2);
 2790 FOR I%=1TO7
 2800   PRINT last_balls(I%);SPC(0);
 2810 NEXT
 2820 @%=Z%:Z%=1
 2830 PRINTCHR$13
 2840 PRINT
 2850 PRINTSPC(0);"Ball Number";CHR$9;"Frequency Drawn";CHR$9;"Percentage Drawn"
 2860 FOR I%=1TO49
 2870   td=sort2(I%,2)/total_balls*100
 2880   td$=STR$(td)
 2890   dec%=INSTR(td$,".")
 2900   int$=LEFT$(td$,(dec%-1))
 2910   frac$=MID$(td$,(dec%+1),2)
 2920   td$=int$+"."+frac$+" %"
 2930   PRINTSPC(0);sort2(I%,1);CHR$9;sort2(I%,2);CHR$9;td$
 2940 NEXT
 2950 PRINT
 2960 PRINT"Total Number Of Draws is : ";Total_draws
 2970 PRINT"Total Number Of Balls Drawn Is : ";total_balls
 2980 *SPOOL
 2990 ENDPROC
 3000 :
 3010 DEFPROCguess
 3020 PROCborder
 3030 PRINTTAB(30,1)"My 3 Guesses Are :-"
 3040 PRINTTAB(1,4)CHR$17;"1st";CHR$18
 3050 PRINTTAB(1,8)CHR$17;"2nd";CHR$18
 3060 PRINTTAB(1,12);CHR$17;"3rd";CHR$18
 3070 count1=4:count2=1
 3080 FOR I%=1TO18
 3090   PRINTTAB(count2*11,count1);sort2(49-I%+1,1)
 3100   count2=count2+1
 3110   IF count2>6 count1=count1+4:count2=1
 3120 NEXT
 3130 PROCpause
 3140 ENDPROC
 3150 :
 3160 DEFPROCcheck
 3170 PROCborder:PRINT:PRINT
 3180 FOR I%=1TO7:yes(I%)=0:NEXT
 3190 :
 3200 FOR I%=1TO6:high1(I%)=sort2(I%+43,1):NEXT
 3210 FOR I%=1TO6:high2(I%)=sort2(I%+37,1):NEXT
 3220 FOR I%=1TO6:high3(I%)=sort2(I%+31,1):NEXT
 3230 :
 3240 PRINTTAB(2,2);"1) ";
 3250 FOR J%=1TO6
 3260   FOR I%=1TO7
 3270     IF last_balls(I%)=high1(J%) yes(I%)=1:PRINThigh1(J%);
 3280   NEXT
 3290 NEXT
 3300 :
 3310 PRINTTAB(2,4);"2) ";
 3320 FOR J%=1TO6
 3330   FOR I%=1TO7
 3340     IF last_balls(I%)=high2(J%) yes(I%)=1:PRINThigh2(J%);
 3350   NEXT
 3360 NEXT
 3370 :
 3380 PRINTTAB(2,6);"3) ";
 3390 FOR J%=1TO6
 3400   FOR I%=1TO7
 3410     IF last_balls(I%)=high3(J%) yes(I%)=1:PRINThigh3(J%);
 3420   NEXT
 3430 NEXT
 3440 PRINT
 3450 :
 3460 yes%=0:FOR I%=1TO7:yes%=yes%+yes(I%):NEXT
 3470 IF yes%>0 VDU7:PRINTTAB(27,14)"These Numbers Have Matched":PROCpause
 3480 PROCborder
 3490 ENDPROC
 3500 :
 3510 DEFPROCeror
 3520 CLOSE# 0
 3530 IF ERR=17 RUN
 3540 CLS
 3550 PRINTTAB(0,3)"At Line ";ERL;" The Error Was ";:REPORT
 3560 PRINT
 3570 END
 3580 :
 3590 DEFPROCend_prog
 3600 IF flag2=1 PROCsave_data
 3610 CHAIN"Auto"
 3620 :
 3630 DEFPROCentries_ok
 3640 PROCborder
 3650 FOR I%=1TO7
 3660   PRINTTAB((I%*10),3);last_balls(I%)
 3670 NEXT
 3680 REPEAT
 3690   PRINTTAB(23,6)"Are These Entries Correct Y/N :"
 3700   INPUTTAB(55,6)ans$
 3710 UNTIL ans$="y" OR ans$="Y" OR ans$="N" OR ans$="n"
 3720 IF ans$="N" OR ans$="n" RUN
 3730 PROCcheck
 3740 ENDPROC
 3750 :
 3760 DEFPROCtotal_draws
 3770 Z%=0
 3780 FOR I%=1TO49
 3790   Z%=Z%+freq_balls(I%)
 3800   total_balls=Z%
 3810 NEXT
 3820 Total_draws=Z%/7
 3830 ENDPROC
 3840 :
 3850 DEFPROCguess2
 3860 PROCborder
 3870 count1=3:count2=1
 3880 FOR I%=1TO49
 3890   PRINTTAB(count2*11,count1);sort2(49-I%+1,1)
 3900   count2=count2+1
 3910   IF count2>6 count1=count1+1:count2=1
 3920 NEXT
 3930 PROCpause
 3940 ENDPROC
