10 REM SWITCH 20 REM Mike Bostock 30 REM (c) CET 1983 Published by BBC Publications 40 REM version 2.0 50 : 60 ?&FE62 = 15 : REM 00001111 (lines 0-3 output/ lines 4-7 input) 70 port = &FE60 : REM user port location 80 PROCmotors_on 90 : 100 ON ERROR IF ERR=17 THEN CLS : PROCend : END ELSE CLS : REPORT : PRINT " at line " ERL :END 110 : 120 speedfactor = 6 130 : 140 PROCsetup 150 : 160 MODE7 170 PROCoff : REM Cursor off 180 PROCtitle1 (8) 190 PROCmanual 200 PROCend 210 CLS 220 END 230 : 240 DEF FNcentre (x$) = 19-LEN(x$) DIV 2 250 DEF PROCdelay (count) 260 FOR delay = 1 TO count : NEXT delay 270 ENDPROC 280 : 290 DEF PROCdouble (text$,X,Y) 300 IF X<0 THEN X=FNcentre (text$) 310 PRINT TAB(X-1,Y ) CHR$ 141 text$ 320 PRINT TAB(X-1,Y+1) CHR$ 141 text$ 330 ENDPROC 340 : 350 DEF PROCmanual 360 REPEAT 370 I$ = FNwait 380 IF INKEY (uparrow) THEN PROCmove (forward,uparrow) 390 IF INKEY (downarrow) THEN PROCmove (backward,downarrow) 400 IF INKEY (leftarrow) THEN PROCmove (left,leftarrow) 410 IF INKEY (rightarrow) THEN PROCmove (right,rightarrow) 420 UNTIL FALSE 430 ENDPROC 440 : 450 DEF PROCend 460 REM Switches motors off, resets cursor, EDIT & ESCAPE keys, buffers, and PRINT format 470 PROCmotors_off 480 PROCon 490 *FX 4 500 *FX 229 510 *FX 15 520 @% = 10 530 ENDPROC 540 : 550 DEF PROCmotors_off 560 ?port = 8 570 ENDPROC 580 : 590 DEF PROCmotors_on 600 ?port = 0 610 ENDPROC 620 : 630 DEF PROCmove (direction,key) 640 pulse = (direction OR 2) 650 REPEAT 660 ?port = direction : PROCdelay (speedfactor) 670 ?port = pulse : PROCdelay (2) 680 UNTIL INKEY (key) = FALSE 690 PROCdelay(50) 700 ENDPROC 710 : 720 DEF PROCsetup 730 REM Detect arrow keys 740 *FX 4,1 750 REM keyboard INKEY values 760 uparrow = -58 : forward = 0 770 downarrow = -42 : backward = 5 780 leftarrow = -26 : left = 4 790 rightarrow = -122: right = 1 800 ENDPROC 810 : 820 DEF PROCtitle1 (line%) 830 PROCdouble (CHR$ 130 + "SWITCH" + CHR$ 135,-1,line%) 840 PRINT TAB(0,22) "Use the arrow keys to control the Buggy" ; TAB(9,24) ; "Press ESCAPE to end"; 850 ENDPROC 860 : 870 DEF PROCoff VDU23;11,0;0;0;0; : ENDPROC 880 DEF PROCon VDU23;11,255;0;0;0; : ENDPROC 890 : 900 DEF FNwait 910 LOCAL I$ 920 *FX 4,1 930 REPEAT 940 I$=INKEY$(10000) 950 IF I$="" THEN PROCmotors_off ELSE PROCmotors_on 960 UNTIL I$<>"" 970 *FX 4 980 =I$ 990 :