10 REM > Example20 20 :: 30 REM © 2000 Martin Penny 40 :: 50 ON ERROR GOTO 990 60 :: 70 MODE 12 80 OFF 90 COLOUR 0, 4 100 COLOUR 7, 3 110 DIM A% 255 120 DIM B% 255 130 DIM D% 4095 140 L% = D% + 4096 150 FOR T% = 0 TO 1 160 OPT% = 8 + T% * 3 170 IF OPT% AND 1 THEN VDU 14 180 IF OPT% AND 1 THEN PRINT 190 P% = D% 200 [OPT OPT% 210 : 220 .Code% 230 STMFD R13!, {R8 - R12, R14} 240 SWI "OS_NewLine" 250 ADR R0, Request% 260 SWI "OS_Write0" 270 LDR R0, InputBuffer% 280 ORR R0, R0, #(1 << 31) 290 MOV R1, #256 300 MOV R2, #32 310 MOV R3, #126 320 MOV R4, #ASC("*") 330 SWI "OS_ReadLine" 340 BCS Escape% 350 CMPS R1, #0 360 ADREQ R0, EmptyString% 370 BEQ Print% 380 LDR R2, InputBuffer% 390 LDR R3, OutputBuffer% 400 MOV R0, #0 410 STRB R0, [R3, R1] 420 .Loop% 430 SUBS R1, R1, #1 440 LDRB R0, [R2], #1 450 STRB R0, [R3, R1] 460 BNE Loop% 470 LDR R0, OutputBuffer% 480 .Print% 490 SWI "OS_NewLine" 500 SWI "OS_Write0" 510 SWI "OS_NewLine" 520 SWI "OS_NewLine" 530 .Exit% 540 LDMFD R13!, {R8 - R12, R15} 550 : 560 .Escape% 570 SWI "OS_NewLine" 580 MOV R0, #126 590 SWI "OS_Byte" 600 ADR R0, EscapeBlock% 610 SWI "OS_GenerateError" 620 : 630 .EscapeBlock% 640 EQUD 17 650 EQUS "Escape" 660 EQUB 0 670 ALIGN 680 : 690 .Request% 700 EQUS "Please enter some text: " 710 EQUB 0 720 ALIGN 730 : 740 .EmptyString% 750 EQUS "Please type something in!" 760 EQUB 0 770 ALIGN 780 : 790 .InputBuffer% 800 EQUD A% 810 : 820 .OutputBuffer% 830 EQUD B% 840 : 850 .End% 860 : 870 ] 880 IF OPT% AND 1 THEN PRINT 890 IF OPT% AND 1 THEN VDU 15 900 NEXT T% 910 PRINT 920 PRINT "-- Press ENTER to continue --" 930 REPEAT UNTIL GET = 13 940 CLS 950 ON 960 CALL Code% 970 END 980 :: 990 VDU 15 1000 PRINT REPORT$; " at line "; ERL 1010 ON 1020 END