10 REM > Example19 20 :: 30 REM © 2000 Martin Penny 40 :: 50 ON ERROR GOTO 1630 60 :: 70 MODE 12 80 OFF 90 COLOUR 0, 4 100 COLOUR 7, 3 110 DIM D% 4095 120 L% = D% + 4096 130 FOR T% = 0 TO 1 140 OPT% = 8 + T% * 3 150 IF OPT% AND 1 THEN VDU 14 160 IF OPT% AND 1 THEN PRINT 170 P% = D% 180 [OPT OPT% 190 : 200 .Code% 210 STMFD R13!, {R8 - R12, R14} 220 SWI "OS_NewLine" 230 ADR R0, Request% 240 SWI "OS_Write0" 250 SWI "OS_ReadC" 260 BCS Error% 270 SWI "OS_NewLine" 280 SWI "OS_NewLine" 290 CMPS R0, #ASC(" ") - 1 300 TEQS R0, #127 310 ADRLS R0, Control% 320 BLS Print% 330 SUB R0, R0, #ASC("0") 340 CMPS R0, #9 350 ADRHI R0, Unknown% 360 BHI Print% 370 ADR R2, Table% 380 LDR R0, [R2, R0, LSL #2] 390 .Print% 400 SWI "OS_Write0" 410 SWI "OS_NewLine" 420 SWI "OS_NewLine" 430 .Exit% 440 LDMFD R13!, {R8 - R12, R15} 450 : 460 .Error% 470 SWI "OS_NewLine" 480 SWI "OS_ReadEscapeState" 490 BLCS Acknowledge% 500 ADRCS R0, EscapeBlock% 510 ADRCC R0, ErrorBlock% 520 SWI "OS_GenerateError" 530 .Acknowledge% 540 MOV R0, #126 550 SWI "OS_Byte" 560 MOV R0, #(1 << 31) 570 ADDS R0, R0, R0 580 MOV R15, R14 590 : 600 .EscapeBlock% 610 EQUD 17 620 EQUS "Escape" 630 EQUB 0 640 ALIGN 650 : 660 .ErrorBlock% 670 EQUD 0 680 EQUS "Error" 690 EQUB 0 700 ALIGN 710 : 720 .Request% 730 EQUS "Please press a key: " 740 EQUB 0 750 ALIGN 760 : 770 .Control% 780 EQUS "That was a control character." 790 EQUB 0 800 ALIGN 810 : 820 .Unknown% 830 EQUS "I don't recognise that character!" 840 EQUB 0 850 ALIGN 860 : 870 .Table% 880 EQUD Zero% 890 EQUD One% 900 EQUD Two% 910 EQUD Three% 920 EQUD Four% 930 EQUD Five% 940 EQUD Six% 950 EQUD Seven% 960 EQUD Eight% 970 EQUD Nine% 980 : 990 .Zero% 1000 EQUS "You pressed ""0""." 1010 EQUB 0 1020 ALIGN 1030 : 1040 .One% 1050 EQUS "You pressed ""1""." 1060 EQUB 0 1070 ALIGN 1080 : 1090 .Two% 1100 EQUS "You pressed ""2""." 1110 EQUB 0 1120 ALIGN 1130 : 1140 .Three% 1150 EQUS "You pressed ""3""." 1160 EQUB 0 1170 ALIGN 1180 : 1190 .Four% 1200 EQUS "You pressed ""4""." 1210 EQUB 0 1220 ALIGN 1230 : 1240 .Five% 1250 EQUS "You pressed ""5""." 1260 EQUB 0 1270 ALIGN 1280 : 1290 .Six% 1300 EQUS "You pressed ""6""." 1310 EQUB 0 1320 ALIGN 1330 : 1340 .Seven% 1350 EQUS "You pressed ""7""." 1360 EQUB 0 1370 ALIGN 1380 : 1390 .Eight% 1400 EQUS "You pressed ""8""." 1410 EQUB 0 1420 ALIGN 1430 : 1440 .Nine% 1450 EQUS "You pressed ""9""." 1460 EQUB 0 1470 ALIGN 1480 : 1490 .End% 1500 : 1510 ] 1520 IF OPT% AND 1 THEN PRINT 1530 IF OPT% AND 1 THEN VDU 15 1540 NEXT T% 1550 PRINT 1560 PRINT "-- Press ENTER to continue --" 1570 REPEAT UNTIL GET = 13 1580 CLS 1590 ON 1600 CALL Code% 1610 END 1620 :: 1630 VDU 15 1640 PRINT REPORT$; " at line "; ERL 1650 ON 1660 END