Hex dump
The Hex dump program below was originally published to the EPROM User group. It is of note as it provides a worked example of the in-line assembler abilities of the BBC Basic application.
10 REM ********************************** 20 REM Hexdump (C) Danny Langton * 30 REM Aware Technology, DECEMBER 1988 * 40 REM TO BE TREATED AS PUBLIC DOMAIN * 50 REM I.E. COPY AND USE BUT DON'T SELL * 60 REM ********************************** 70 PROCassemble 80 REPEAT 90 CLS:REPEATINPUT''"Name of file to dump : "'"(Use [ESCAPE] to quit)"SPC10""D$:UNTILLEND$ 100 X=OPENIN D$:IFX=0PRINT'"That file does not exist":GOTO90 110 PRINT"Use UP and DOWN cursor keys to move through file"'"a line at a time,"'"[SHIFT] and cursor keys for a page at a time"'"and [DEL] to quit":TIME=0:REPEATUNTILTIME>300 120 L%=0 130 CLS 140 REPEAT 150 PROCdump(L%) 160 CALL flush 170 G%=GET:IFG%=0 G%=GET 180 L%=L%+(G%=255)*16+(G%=251)*112-(G%=254)*16-(G%=250)*112 190 IF G%=246 L%=EXT#X-96-(EXT#X)MOD16 200 IF L%<0 OR L%>EXT#X OR G%=247L%=0 210 UNTILG%=127 220 UNTIL0 230 : 240 DEFPROCdump(L%) 250 CLS 260 PTR#X=L% 270 IFEXT#X-L%<112 F%=EXT#X-L% ELSE F%=112 280 R%=0:C%=0 290 PRINTTAB(0,0)STRING$(8-LENSTR$~L%,"0")STR$~L% 300 FOR M%=L% TO L%+F%-1 310 IFR%=7GOTO360 320 N%=BGET#X:N$=STR$~N%:IF LEN N$=1 N$="0"+N$ 330 PRINTTAB(12+C%*3,R%)N$TAB(64+C%,R%); 340 IFN%>31 AND N%<127 PRINTCHR$N%; ELSE PRINT"."; 350 C%=C%+1:IFC%=16 C%=0:R%=R%+1:IFR%<7PRINTTAB(0,R%)STRING$(8-LENSTR$~(L%+R%*16),"0")+STR$~(L%+R%*16) 360 NEXT 370 ENDPROC 380 : 390 DEFPROCassemble 400 DIMflush 50 410 FORpass=0TO2STEP2 420 P%=flush 430 [OPT pass 440 LD HL,0:ADD HL,SP:LD SP,(&1FFE):PUSH HL:CALL main:POP HL:LD SP,HL:RET 450 .main 460 RST &20 470 DEFB &33 480 RET 490 ] 500 NEXT 510 ENDPROC 520 :
Yahtzee
The popular dice game.
10 *NAME YAHTZEE V4.5 20 REM BY I D HUNNABLE (1850) 30 ON ERROR GOTO2270 40 PROCinit:CLS:VDU1,ASC"B":PRINTTAB(39,1)"YAHTZEE":VDU1,ASC"B":PRINTTAB(30,3)"HOW MANY PLAYERS? 1 OR 2":PRINTTAB(42,5);:REPEAT:A%=INKEY(0):UNTILA%=49ORA%=50 50 IFA%=49PROCpatience:ELSE PROCgame 60 CLS:PRINTCHR$1+"2+C":END 70 DEFPROCgame 80 REPEAT:CLS:VDU1,ASC"B":PRINTTAB(39,1)"YAHTZEE":VDU1,ASC"B":PRINTTAB(39,3)"NAMES?":INPUTTAB(39,5)P$(1):INPUTTAB(39,6)P$(2):UNTILLEN(P$(1))<6ANDLEN(P$(2))<6 90 PRINTCHR$1,"2-C" 100 GC%=1:PROCscreen:REPEAT:FORPLR%=1TO2:PROCgo(PLR%):NEXT:GC%=GC%+1:UNTILGC%=14:PROCendgame:IFAA$="Y"ORAA$="y" PROCclear:GOTO100 110 ENDPROC 120 DEFPROCpatience 130 PRINTTAB(30,3)SPC(35):PRINTTAB(39,3)"YOUR NAME ";:INPUTP$(1) 140 PRINTCHR$1+"2-C" 150 GC%=1:PROCscreen:FORGC%=1TO13:PROCgo(1):NEXT 160 FORX%=2TO4:PRINTTAB(36,X%);SPC(20):NEXT 170 PRINTTAB(41,3)CHR$1+"2+B"+"GO AGAIN?"+CHR$1+"2-B":PROCans("Y","y","N","n"):IFAA$="Y"THENPROCclear:GOTO150 180 ENDPROC 190 DEFPROCinit 200 DIMD$(6),T%(5,1),SC%(17,4),SB$(14),P$(2),HOLD$(2):t1$=CHR$1+"2+T":t2$=CHR$1+"2-T":TH%=1:@%=&00000904 210 SB$(1)=t1$+"ONES"+t2$:SB$(2)=t1$+"TWOS"+t2$:SB$(3)=t1$+"THREES"+t2$:SB$(4)=t1$+"FOURS"+t2$:SB$(5)=t1$+"FIVES"+t2$:SB$(6)=t1$+"SIXES"+t2$:SB$(7)=t1$+"BONUS"+t2$ 220 SB$(8)=t1$+"3 OF A KIND"+t2$:SB$(9)=t1$+"4 OF A KIND"+t2$:SB$(10)=t1$+"FULL HOUSE"+t2$:SB$(11)=t1$+"LOW STRAIGHT"+t2$:SB$(12)=t1$+"HIGH STRAIGHT"+t2$:SB$(13)=t1$+"YAHTZEE"+t2$:SB$(14)=t1$+"CHANCE"+t2$ 230 TAG1=0:TAG2=0:TAG3=0 240 L$=CHR$1+CHR$244:R$=CHR$1+CHR$245:D$=CHR$1+CHR$246:U$=CHR$1+CHR$247 250 HOLD$(2)=CHR$1+CHR$243:HOLD$(1)=" " 260 VDU1,138,61,65,128,128,159,160,160,173,173,160 270 VDU1,138,61,66,128,128,190,129,129,173,173,129 280 VDU1,138,61,67,160,173,173,160,160,159,128,128 290 VDU1,138,61,68,129,173,173,129,129,190,128,128 300 VDU1,138,61,69,128,128,159,160,160,172,172,161 310 VDU1,138,61,70,128,128,190,129,129,141,141,161 320 VDU1,138,61,71,161,172,172,160,160,159,128,128 330 VDU1,138,61,72,161,141,141,129,129,190,128,128 340 VDU1,138,61,73,128,128,159,160,160,166,166,160 350 VDU1,138,61,74,128,128,190,129,129,153,153,129 360 VDU1,138,61,75,160,166,166,160,160,159,128,128 370 VDU1,138,61,76,129,153,153,129,129,190,128,128 380 VDU1,138,61,77,128,128,159,160,160,160,160,161 390 VDU1,138,61,78,128,128,190,129,141,141,129,161 400 VDU1,138,61,79,161,160,172,172,160,159,128,128 410 VDU1,138,61,80,161,129,129,129,129,190,128,128 420 VDU1,138,61,81,128,128,159,160,160,166,166,160 430 VDU1,138,61,82,128,128,190,129,129,129,129,129 440 VDU1,138,61,83,160,160,160,160,160,159,128,128 450 VDU1,138,61,84,129,153,153,129,129,190,128,128 460 VDU1,138,61,85,128,128,159,160,160,160,160,161 470 VDU1,138,61,86,128,128,190,129,129,129,129,161 480 VDU1,138,61,87,161,129,129,129,129,190,128,128 490 VDU1,138,61,88,161,160,160,160,160,159,128,128 500 VDU1,138,61,89,129,129,130,130,132,148,136,128 510 VDU1,138,61,90,191,160,175,168,168,168,168,168 520 VDU1,138,61,91,191,128,191,128,128,128,128,128 530 VDU1,138,61,92,191,129,189,133,133,133,133,133 540 VDU1,138,61,93,133,133,133,133,133,133,133,133 550 VDU1,138,61,94,168,168,168,168,168,175,160,191 560 VDU1,138,61,95,128,128,128,128,128,191,128,191 570 VDU1,138,61,96,133,133,133,133,133,189,129,191 580 VDU1,138,61,97,168,168,168,168,168,168,168,168 590 CH$=CHR$1+CHR$130+"?":TL$=CH$+CHR$90:TR$=CH$+CHR$92:RS$=CH$+CHR$93:BL$=CH$+CHR$94:B$=CH$+CHR$95:BR$=CH$+CHR$96:LS$=CH$+CHR$97:Top$=CH$+CHR$91:BSD$=CHR$8+CHR$10:BS$=CHR$8:CU$=CHR$8+CHR$11 600 TROW$=TL$+STRING$(20,Top$)+TR$:RU$=RS$+BSD$+RS$+BSD$+RS$+BSD$+RS$:BROW$=BL$+STRING$(20,B$)+BR$:LU$=LS$+BSD$+LS$+BSD$+LS$+BSD$+LS$ 610 CH$=CHR$1+CHR$130+"?":BS2$=CHR$8+CHR$8+CHR$10 620 D$(6)=CH$+"A"+CH$+"B"+BS2$+CH$+"C"+CH$+"D" 630 D$(5)=CH$+"E"+CH$+"F"+BS2$+CH$+"G"+CH$+"H" 640 D$(4)=CH$+"I"+CH$+"J"+BS2$+CH$+"K"+CH$+"L" 650 D$(3)=CH$+"M"+CH$+"N"+BS2$+CH$+"O"+CH$+"P" 660 D$(2)=CH$+"Q"+CH$+"R"+BS2$+CH$+"S"+CH$+"T" 670 D$(1)=CH$+"U"+CH$+"V"+BS2$+CH$+"X"+CH$+"W" 680 TICK$=CH$+"Y" 690 PROCclear 700 ENDPROC 710 DEFPROCgo(P%) 720 FORN=1TO5:T%(N,0)=0:NEXT 730 PRINTTAB(40,4)SPC(15);TAB(54,0)"1 " 740 PRINTTAB(44,0);GC%;TAB(55+(19*(P%=2)),3)" ";TAB(55+(19*(P%=1)),3);CHR$1+CHR$(245+(P%=1));:PROCflush:REPEAT:Z$=GET$:UNTILZ$=" " 750 TH%=0:REPEAT:TH%=TH%+1:PRINTTAB(54,0);TH%;" "; 760 TIME=0:REPEAT:WD%=RND(5):IFT%(WD%,0)<>1T%(WD%,1)=RND(6):PRINTTAB(36+(3*WD%),2)D$(T%(WD%,1)) 770 UNTILTIME>=500:VDU7:PRINTTAB(55,0)TICK$;:IFTH%=3THEN820 780 PROCflush 790 REPEAT:REPEAT:H%=GET-48:UNTIL(H%>0ANDH%<6)ORH%+48=32ORH%+48=83:IFH%+48<>32ANDH%+48<>83T%(H%,0)=ABS(T%(H%,0)=0):PRINTTAB(36+(H%*3),4)HOLD$(2+(T%(H%,0)=0)); 800 UNTILH%+48=32ORH%+48=83 810 IFH%+48=83TH%=3:VDU7 820 UNTILTH%=3 830 PROCscore(P%):PROCtotal(P%):PROCshowscore(P%):IFP%=1PROCmover:ELSE IFGC%<>13PROCmovel 840 ENDPROC 850 DEFPROCscore(P%) 860 AS%=0:ST%=0:TS%=0:VDU1,ASC"R":VDU1,ASC"T":PRINTTAB(36,4)"SCORE AGAINST WHAT ?":VDU1,ASC"T":VDU1,ASC"R" 870 PROCflush 880 REPEAT:A$=GET$:UNTILA$="1"ORA$="2"ORA$="3"ORA$="4"ORA$="5"ORA$="6"ORA$="T"ORA$="F"ORA$="H"ORA$="L"ORA$="S"ORA$="Y"ORA$="C" 890 IFA$="1"ORA$="2"ORA$="3"ORA$="4"ORA$="5"ORA$="6"PROCcalcN(P%,VAL(A$)) 900 IFA$="T"PROCcalcK(P%,9) 910 IFA$="F"PROCcalcK(P%,10) 920 IFA$="H"PROCcalcF(P%) 930 IFA$="L"PROCcalcL(P%) 940 IFA$="S"PROCcalcH(P%) 950 IFA$="Y"PROCcalcY(P%) 960 IFA$="C"PROCcalcC(P%) 970 IFAS%=1ORST%=0VDU7:GOTO860 980 PRINTTAB(36,4)SPC(20) 990 ENDPROC 1000 DEFPROCcalcN(P%,N%):IFSC%(N%,P%+2)=127AS%=1 1010 FORX%=1TO5:IFT%(X%,1)=N%TS%=TS%+N% 1020 NEXT 1030 PROCoke(P%,SB$(N%),60+(60*(P%=1)),N%-1):IFST%=1:SC%(N%,P%)=TS%:SC%(N%,P%+2)=127 1040 IFSC%(1,P%+2)=127ANDSC%(2,P%+2)=127ANDSC%(3,P%+2)=127ANDSC%(4,P%+2)=127ANDSC%(5,P%+2)=127ANDSC%(6,P%+2)=127SC%(7,P%+2)=127 1050 PROCchb(P%) 1060 ENDPROC 1070 DEFPROCcalcK(P%,N%):IFSC%(N%,P%+2)=127AS%=1 1080 A%=0:B%=0:C%=0:D%=0:E%=0:F%=0:G%=0:IFN%=9K%=3 ELSE K%=4 1090 FORX%=1TO5 1100 IFT%(X%,1)=1A%=A%+1:IFA%=K%F%=1 1110 IFT%(X%,1)=2B%=B%+1:IFB%=K%F%=1 1120 IFT%(X%,1)=3C%=C%+1:IFC%=K%F%=1 1130 IFT%(X%,1)=4D%=D%+1:IFD%=K%F%=1 1140 IFT%(X%,1)=5 E%=E%+1:IFE%=K%F%=1 1150 IFT%(X%,1)=6G%=G%+1:IFG%=K%F%=1 1160 NEXT 1170 IFF%=1FORX%=1TO5:TS%=TS%+T%(X%,1):NEXT:ELSE TS%=0 1180 PROCoke(P%,SB$(5+K%),75+(60*(P%=1)),K%-3):IFST%=1SC%(N%,P%)=TS%:SC%(N%,P%+2)=127 1190 ENDPROC 1200 DEFPROCcalcF(P%):IFSC%(11,P%+2)=127AS%=1 1210 A%=0:B%=0:C%=0:D%=0:E%=0:F%=0:FORX%=1TO5 1220 IFT%(X%,1)=1A%=A%+1 1230 IFT%(X%,1)=2B%=B%+1 1240 IFT%(X%,1)=3C%=C%+1 1250 IFT%(X%,1)=4D%=D%+1 1260 IFT%(X%,1)=5 E%=E%+1 1270 IFT%(X%,1)=6 F%=F%+1 1280 NEXT 1290 FORX%=1TO5:TWO=0:THR=0 1300 IFA%=3THR=1:ELSE IFA%=2TWO=1 1310 IFB%=3THR=1:ELSE IFB%=2TWO=1 1320 IFC%=3THR=1:ELSE IFC%=2TWO=1 1330 IFD%=3THR=1:ELSE IFD%=2TWO=1 1340 IFE%=3THR=1:ELSE IFE%=2TWO=1 1350 IFF%=3THR=1:ELSE IFF%=2TWO=1 1360 NEXT 1370 IFTHR=1ANDTWO=1TS%=25:ELSE TS%=0 1380 PROCoke(P%,SB$(10),75+(60*(P%=1)),2):IFST%=1SC%(11,P%)=TS%:SC%(11,P%+2)=127 1390 ENDPROC 1400 DEFPROCcalcL(P%):PASS%=0:IFSC%(12,P%+2)=127AS%=1 1410 F%=0:PROCsort:S$=STR$(T%(1,1))+STR$(T%(2,1))+STR$(T%(3,1))+STR$(T%(4,1))+STR$(T%(5,1)) 1420 IFMID$(S$,1,4)="1234"ORMID$(S$,1,4)="2345"ORMID$(S$,1,4)="3456"ORMID$(S$,2,4)="1234"ORMID$(S$,2,4)="2345"ORMID$(S$,2,4)="3456"F%=1 1430 IFF%=1ORPASS%=1GOTO1480 1440 PASS%=1:FORX%=2TO3 1450 IFT%(X%,1)=T%(X%+1,1) T%(X%+1,1)=0:X%=3 1460 NEXT 1470 GOTO1410 1480 IFF%=1TS%=30:ELSE TS%=0 1490 PROCoke(P%,SB$(11),75+(60*(P%=1)),3):IFST%=1SC%(12,P%)=TS%:SC%(12,P%+2)=127 1500 ENDPROC 1510 DEFPROCcalcH(P%):IFSC%(13,P%+2)=127AS%=1 1520 PROCsort:S$=STR$(T%(1,1))+STR$(T%(2,1))+STR$(T%(3,1))+STR$(T%(4,1))+STR$(T%(5,1)) 1530 IFMID$(S$,1,5)="12345"ORMID$(S$,1,5)="23456"ORMID$(S$,2,5)="12345"ORMID$(S$,2,5)="23456"TS%=40:ELSE TS%=0 1540 PROCoke(P%,SB$(12),75+(60*(P%=1)),4):IFST%=1SC%(13,P%)=TS%:SC%(13,P%+2)=127 1550 ENDPROC 1560 DEFPROCcalcY(P%):Types=1:IFSC%(14,P%+2)=127AS%=1 1570 IFT%(2,1)<>T%(1,1)Types=Types+1 1580 IFT%(3,1)<>T%(1,1)Types=Types+1 1590 IFT%(4,1)<>T%(1,1)Types=Types+1 1600 IFT%(5,1)<>T%(1,1)Types=Types+1 1610 IFTypes=1TS%=50:ELSE TS%=0 1620 PROCoke(P%,SB$(13),75+(60*(P%=1)),5):IFST%=1SC%(14,P%)=TS%:SC%(14,P%+2)=127 1630 ENDPROC 1640 DEFPROCcalcC(P%):IFSC%(15,P%+2)=127AS%=1 1650 FORX%=1TO5:TS%=TS%+T%(X%,1):NEXT:PROCoke(P%,SB$(14),75+(60*(P%=1)),6):IFST%=1SC%(15,P%)=TS%:SC%(15,P%+2)=127 1660 ENDPROC 1670 DEFPROCtotal(P%):SC%(8,P%)=0:SC%(16,P%)=0 1680 FORX%=1TO6:SC%(8,P%)=SC%(8,P%)+SC%(X%,P%):NEXT 1690 IFSC%(8,P%)>=63SC%(7,P%)=35:SC%(7,P%+2)=127 1700 SC%(8,P%)=SC%(8,P%)+SC%(7,P%) 1710 FORX%=9TO15:SC%(16,P%)=SC%(16,P%)+SC%(X%,P%):NEXT 1720 SC%(17,P%)=SC%(8,P%)+SC%(16,P%) 1730 ENDPROC 1740 DEFPROCshowscore(P%):X1%=68+(60*(P%=1)):X2%=88+(60*(P%=1)) 1750 PRINTTAB(X1%,0),SC%(1,P%);TAB(X1%,1),SC%(2,P%);TAB(X1%,2),SC%(3,P%);TAB(X1%,3),SC%(4,P%); 1760 PRINTTAB(X1%,4),SC%(5,P%);TAB(X1%,5),SC%(6,P%);TAB(X1%,6),SC%(7,P%);TAB(X1%,7),SC%(8,P%); 1770 PRINTTAB(X2%,0),SC%(9,P%);TAB(X2%,1),SC%(10,P%);TAB(X2%,2),SC%(11,P%);TAB(X2%,3),SC%(12,P%); 1780 PRINTTAB(X2%,4),SC%(13,P%);TAB(X2%,5),SC%(14,P%);TAB(X2%,6),SC%(15,P%);TAB(X2%,7),SC%(16,P%);TAB(40,7),SC%(17,1);TAB(54,7),SC%(17,2); 1790 FORX%=0TO6:PRINTTAB(12,X%);CHR$(SC%(X%+1,3));TAB(72,X%);CHR$(SC%(X%+1,4));:NEXT:FORX%=9TO15:PRINTTAB(32,X%-9);CHR$(SC%(X%,3));TAB(92,X%-9);CHR$(SC%(X%,4));:NEXT 1800 ENDPROC 1810 DEFPROCscreen 1820 CLS:FORPSC%=1TO7:PRINTTAB(0,PSC%-1)SB$(PSC%);TAB(60,PSC%-1)SB$(PSC%);:NEXT 1830 PRINTCHR$1+"2+T";TAB(0,7);"TOTAL";TAB(60,7)"TOTAL";CHR$1+"2-T";:FORPSC%=8TO14:PRINTTAB(15,PSC%-8)SB$(PSC%);TAB(75,PSC%-8)SB$(PSC%);:NEXT 1840 PRINTCHR$1+"2+T";TAB(15,7);"TOTAL";TAB(75,7)"TOTAL";CHR$1+"2-T"; 1850 PROCshowscore(1):PRINTTAB(0,0):PROCshowscore(2) 1860 PRINTTAB(36,0)"ELEMENT 1 THROW 1";TAB(34,7);P$(1);TAB(48,7)P$(2); 1870 C=0:FORN=39TO51STEP3:C=C+1:D%=RND(6):PRINTTAB(N,2)D$(D%):T%(C,0)=0:NEXT 1880 PRINTTAB(35,1)TROW$;TAB(35,2)LU$;TAB(56,2)RU$;TAB(35,5)BROW$; 1890 ENDPROC 1900 DEFPROCclear:FORX%=1TO17:FORY%=1TO2:SC%(X%,Y%)=0:NEXT:NEXT:FORX%=1TO7:SC%(X%,3)=32:SC%(X%,4)=32:NEXT:FORX%=9TO15:SC%(X%,3)=32:SC%(X%,4)=32:NEXT:ENDPROC 1910 DEFPROCsort 1920 FORI%=1TO4:FORJ%=I%+1TO5:IFT%(J%,1)<T%(I%,1)T%(0,1)=T%(J%,1):T%(J%,1)=T%(I%,1):T%(I%,1)=T%(0,1) 1930 NEXT:NEXT 1940 ENDPROC 1950 DEFPROCmovel 1960 LOCAL I%:I%=15 1970 PRINTTAB(55,3)R$:PROCw(150) 1980 PRINTTAB(55,3)D$:PROCw(I%):PRINTTAB(55,3)" ":PRINTTAB(55,4)D$ 1990 PROCw(I%):PRINTTAB(55,4)" ":FORMAL%=53TO37 STEP -2:PRINTTAB(MAL%,4)L$:PROCw(I%):PRINTTAB(MAL%,4)" ":NEXT:PRINTTAB(36,3)U$:PROCw(I%) 2000 ENDPROC 2010 DEFPROCmover 2020 LOCAL I%:I%=15 2030 PROCw(150) 2040 PRINTTAB(36,3)D$:PROCw(I%):PRINTTAB(36,3)" ":PRINTTAB(36,4)D$ 2050 PROCw(I%):PRINTTAB(36,4)" ":FORMAR%=38 TO 54 STEP 2:PRINTTAB(MAR%,4)R$:PROCw(I%):PRINTTAB(MAR%,4)" ":NEXT:PRINTTAB(55,3)U$ 2060 ENDPROC 2070 DEFPROCchb(P%) 2080 SSF%=0:HSP%=0:FORN=1TO6:IFSC%(N,P%+2)<>127 HSP%=HSP%+(N*5) 2090 IFSC%(N,P%+2)=127SSF%=SSF%+SC%(N,P%) 2100 NEXT 2110 IFHSP%+SSF%<63SC%(7,P%+2)=127 2120 ENDPROC 2130 DEFPROCendgame:FORX%=2TO4:PRINTTAB(36,X%);SPC(20):NEXT 2140 IFSC%(17,1)>SC%(17,2)VDU1,ASC"B":PRINTTAB(41,2)P$(1);" WINS":VDU1,ASC"B":ELSE IF SC%(17,2)>SC%(17,1)VDU1,ASC"B":PRINTTAB(41,2)P$(2);" WINS":VDU1,ASC"B":ELSE IF SC%(17,1)=SC%(17,2)VDU1,ASC"B":PRINTTAB(42,2)"GAME DRAWN":VDU1,ASC"B" 2150 VDU1,ASC"B":PRINTTAB(37,4)"ANOTHER GAME? Y/N":VDU1,ASC"B":PROCans("Y","y","N","n") 2160 ENDPROC 2170 DEFPROCoke(P%,E$,Q%,R%):PRINTCHR$1+"2+R":PRINTTAB(Q%,R%)E$;:PRINTCHR$1+"2-R"; 2180 IFAS%=1PROCmes:GOTO2210 2190 PRINTCHR$1+"4+T+R":PRINTTAB(36,4)SPC(20);TAB(38,4)"SCORES ";TS%;" OK? Y/N";:PRINTCHR$1+"4-T-R":PROCans("Y","y","N","n") 2200 IFAA$="Y"ORAA$="y"ST%=1 2210 PRINTTAB(Q%,R%)E$; 2220 ENDPROC 2230 DEFPROCans(Q$,R$,S$,T$):REPEAT:AA$=GET$:UNTILAA$=Q$ORAA$=R$ORAA$=S$ORAA$=T$:ENDPROC 2240 DEFPROCflush:REPEAT:FL%=INKEY(0):UNTILFL%=-1:ENDPROC 2250 DEFPROCw(TT%):TIME=0:REPEAT:UNTILTIME>=TT%:ENDPROC 2260 DEFPROCmes:VDU1,ASC"T":VDU1,ASC"R":PRINTTAB(36,4)" YOU'VE SCORED THAT ":VDU1,ASC"R":VDU1,ASC"T":PROCw(250):ENDPROC 2270 REPORT:PRINT" at line ";ERL:PRINTCHR$1+"2+C"