10 REM > Example12 20 :: 30 REM © 2000 Martin Penny 40 :: 50 ON ERROR GOTO 1020 60 :: 70 MODE 12 80 OFF 90 COLOUR 0, 4 100 COLOUR 7, 3 110 DIM B% 255 120 DIM D% 4095 130 L% = D% + 4096 140 FOR T% = 0 TO 1 150 OPT% = 8 + T% * 3 160 IF OPT% AND 1 THEN VDU 14 170 IF OPT% AND 1 THEN PRINT 180 P% = D% 190 [OPT OPT% 200 : 210 .Code% 220 STMFD R13!, {R8 - R12, R14} 230 CMPS R10, #1 240 ADRLO R0, NoParams% 250 ADRHI R0, TooManyParams% 260 BNE Print% 270 LDR R0, [R9, #4] 280 CMPS R0, #&80 290 ADRNE R0, NotAString% 300 BNE Print% 310 LDR R0, [R9, #0] 320 LDRB R1, [R0, #4] 330 CMPS R1, #0 340 ADREQ R0, EmptyString% 350 BEQ Print% 360 LDRB R2, [R0, #0] 370 LDRB R3, [R0, #1] 380 ORR R2, R2, R3, LSL #8 390 LDRB R3, [R0, #2] 400 ORR R2, R2, R3, LSL #16 410 LDRB R3, [R0, #3] 420 ORR R2, R2, R3, LSL #24 430 LDR R3, Buffer% 440 MOV R0, #0 450 STRB R0, [R3, R1] 460 .Loop% 470 SUBS R1, R1, #1 480 LDRMI R0, Buffer% 490 BMI Print% 500 LDRB R0, [R2], #1 510 STRB R0, [R3, R1] 520 B Loop% 530 .Print% 540 SWI "OS_Write0" 550 SWI "OS_NewLine" 560 .Exit% 570 LDMFD R13!, {R8 - R12, R15} 580 : 590 .NoParams% 600 EQUS "Please give me a string!" 610 EQUB 0 620 ALIGN 630 : 640 .TooManyParams% 650 EQUS "Too much, too much!" 660 EQUB 0 670 ALIGN 680 : 690 .NotAString% 700 EQUS "I don't understand that!" 710 EQUB 0 720 ALIGN 730 : 740 .EmptyString% 750 EQUS "Please type something in!" 760 EQUB 0 770 ALIGN 780 : 790 .Buffer% 800 EQUD B% 810 : 820 .End% 830 : 840 ] 850 IF OPT% AND 1 THEN PRINT 860 IF OPT% AND 1 THEN VDU 15 870 NEXT T% 880 PRINT 890 PRINT "-- Press ENTER to continue --" 900 REPEAT UNTIL GET = 13 910 CLS 920 PRINT 930 ON 940 INPUT "Please enter some text: " A$ 950 OFF 960 PRINT 970 CALL Code%, A$ 980 PRINT 990 ON 1000 END 1010 :: 1020 VDU 15 1030 PRINT REPORT$; " at line "; ERL 1040 ON 1050 END