P702 CEEFAX 702 Sat 16 Apr 17:29/52 |B211212|a35SNAIL108p2:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 1p REM SNAIL 20 REM British Broadcasting Corporate on 1983 30 REM By Keith Anderson/Mike Bostock 40 REM with thanks to Bob Coates and David Tee 50 REM Condensed version/screen only vp MODE7:PROCoff 70 *FX4,1 8p PROCINIT:Z$= CHR$&82+"SNAIL"+CHR$& 87 :PROCintro 90 REM buggy dimensions in mm. 100 fwd=1.418:bf=50:bw=95:bb=90:cw=60: rev=80:screenX=0:screenY=300 110 REM variables 120 M=1:K=0:hitflag=0:turnflag=0:T%=0: garageX=140:garageY=140 130 DIM B$(2p0),BX2p0) 140 VDU23,241,255;255;255;255; 150 ON ERROR IF ERR=17 GOTO160 ELSE|c0
P702 CEEFAX 702 Sat 16 Apr 17:19/10 |B212212|a35SNAIL10802:03/83|i44BBBC316k |p|s÷#1÷e|s÷Z0 REPORT:PRINT" at line ";ESL:END 160 REPEAT 170 MODE 7:PROCoff:PRINT' CHR$&82+"BBC Buggy"+CHR$&87 180 VDU48,7,23,39,10 190 PRINT"1 Enter route into memory" 2p0 PRINT"2 Repeat route in mjmoty" 210 PRINT"3 Exit program" 220 VDU 26 230 PRINTTAB(3,20)"Your choice: ";:A=A SC(FNINPUT(1,1))-48 240 IF A>p AND A<3 MODE4 ELSE IF A<>3 GOTO270 250 PROCoff 260 ON A GOSUB 290,310,320 270 UNTJL0 280 : 290 IF screenX=0 PROCscale 300 PROCsnail#make:RETURN 310 PROCr peat#torte:RETURN s2p MODE7:PROCDBL( CH $&83+"Mission|c0
P702 CEEFAX 7p2 Sat 16 Apr 17:30/27 |B213212|a35SNAIL10802:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 completed"+CHR$&87 ,-1,10):PRINT''''':* FX4 330 END 340 : 350 DEFPROCscale 360 VDU19,1,7,0,0,0:VDU19,0,1,0,0,0:RE M red on white 370 CLS:PRRNTTAB(1,2)"Place Buggy in S /W cornet facing North" 380 PRJNTTAB(1,4)"Centre located at co -ordinate 14,14(cm)"; 390 PRJNTTAB(19,8)"N";TAB(19,20)"S";TA B(7,14)"'";TAB(32,14)"E" 4p0 PRJNTTABX2,22)"0,0" 41p LX=p:LZ=0:HX=1300:HY=700 420 T*=0:BX=140:BY=140 430 scale=.7:REM temporary 440 screenX=(1279-(HX*scale))/2 450 PROCdrawboundary 460 PROCcalcpos:PROCcalcbug:PROCdrawbu g |c0
P702 CJEFAX 7p2 Sat 16 Apr 17:19/4; |B214212|a35SNAIL108p2:03/83|j24BBBC316k |p|s÷#1÷e|s÷Z0 47p VDU48,0,30,39,24:PLOT69,SX,SY 480 PRJNTTAB(1,0)"Enter dimension(cm) West to East ";:w=VAL(FNINPUT(2,3)):w= w*10 490 PRJNTTAB(1,2)"Enter dimension(cm) North to South ";:h=VAL(FNINPUT(2,3)):h= h*10 500 IF w<bw*6 OR h<bw*6 CLS:VDU7:PROCC ENTRE(bBuggy space too cramped",4):PROCS PACE(6):CLS:GOTO480 510 REM calculate scale for each axis 520 ws=INT((1279/w)*1000)/1000:hs=INT( (720/h)*1p00)/1000 530 REM determine greatest scale and u sj it 540 IF ws<=hs scale=ws ELSE scale=hs 550 scale=scale*.9:LX=0:LY=0:HX=w:HY=h 560 sctienX=(1279-(HX*scale))/2:di=20 57p ENDPROC 580 : |c0
P702 CEEFAX 702 Sat 16 Apr 17:20/02 |B215212|a35SNAIL108p4:03/83|r44BBBC316k |p|s÷#1÷e|s÷Z0 590 DEFPROCsnail#make 600 VDU19,1,7,0,0,0:VDU19,0,1,0,0,0:RE M red on white 610 VDU26:CLS:PRJNTTAB(1,1)"Design a r oute for the Buggy to follow" 62p PRRNTTABX1,1)"Design a route for t he Buggy to follow" 630 PROCCENTRE("Buggy commands are: " ,3) 640 PROCCENTRE("F Forwards (cm)",5) 650 PROCCENTRE("B Backwards (cm)",6) 660 PROCCENTRE("R Right (deg)",7) 670 PROCCENTRE("L Left (deg)",8) 680 PROCCJNTRE("W Wait (secs)",9) 690 PROCCENTRE("S Stop ",10 ) |c0
P702 CJEFAX 702 Sat 16 Apr 17:20/29 |B216212|a35SNAIL108p2:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 700 PROCCENTRE("Enter commands: " ,12) 710 PRRNT':VDU 28,5,30,39,13:N=1 720 A$=GET$ 730 IF A$=bF" PRINT "Forward ";:GOTO80 0 740 IF A$="R" PRINT"Rtght ";:GOTO800 750 IF A$="L" PRINT"Left ";:GOTO800 760 IF A$="W" PRRNT"Wait ";:GOTO800 770 IF A$="B" PRINT"Back ";:GOTO800 780 IF A$="S" PRINT"Stop ":GOTO870 790 GOTO720 800 B$(N)=A$:V=VPOS 810 INPUT "" B(N) 82p IF A$="F" OR A$="B" B(N)=B(N)*10 830 IF BXN)=p VDU7:PRJNTTAB(8,V);:GOTO 800 |c0
P702 CEJFAX 7p2 Sat 16 Apr 17:20/36 |B217212|a35SNAIL108p2:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 840 SOUND1,-10,200,4:N=N+1 850 IF N>16 VDU48,24,30,39,13 860 GOTO 720 87p SOUND1,-8,230,8:B$(N)=A$:B(N)=0 880 FOR I=1TO20:NEXTI 890 VDU26:PROCCENTRE("Accept? Y/N ",30 ):A$=FNINPUT(4,1):IF A$="N" OR A$="n" GO TO610 900 ENDPROC 910 DEFPROCripeat#route 920 VDU19,1,4,0,0,0:VDU19,0,7,0,0,0:RE M blue on white 930 CLS 940 IF B$(1)="" PROCCENTRE("No route i n memory",15):PROCSPACE(26):ENDPROC 950 PROCCENTRE("REPEAT ROUTE IN MEMORY ",1) 960 VDU28,0,30,39,24 970 PROCscreen 980 BX>140:BY=140 990 oldSX=BX*scale+scteenX |c0
P702 CEEFAX 702 Sat 16 Apr 17:20/54 |B218212|a35SNAIL108p2:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 1000 oldSY=BY*scale+screenY 1010 PROCdrawboundary:T=0:T%=0:N=0 1020 PROCcalcbug:PROCdrawbug:PROCdiup#d ara 1030 PROCSPACE(5):PRINTTAB(10,5);UPC(19 ) 1040 REPEAT:T=T+1 1050 IF B(T)=p GOTO1140 1060 PROCdisp#data 1070 IF B$(5*=bF" OR B$(T)="B" PRJNTTAB (34,2)UPC(5);TAB(34,2)B$(T);INT(B(T)/10) ELSE PRJNTTAB(34,2)UPC(5);TAB(34,2)B$(T );B(T) 1080 IF B$(T)="F" PROCmf(B(T)) 1090 IF hitflag>1 B$(T)="S":GOTO 1140 1100 IF B$(T)="R" PROCturnright(B(T)) 1110 IF Bd(T*="L" PROCturnlift(B(T*) 112p IF B$(-*="W" PROCwait(B(T*) 1130 IF B$(T)="B" PROCriv(B(T)) 114p UNTIL B$(T)="S" 1150 PROCSPACE(5) |c0
P702 CEEFAX 7p2 Sat 16 Apr 17:21/11 |B21:212|a35SNAIL108p2:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 1160 ENDPROC 1170 : 1180 DEFPROCwaitXB(-*) 1190 N=N+1:LOCAL I 12p0 FORE=1TO 1430*B(T*:NEXTJ 121p ENDPROC 122p : 1230 DEFPROCscreen 1240 VDU28,0,30,39,24:CLS 1250 MOVE 6,1018:DRAW 1270,1018 1260 MOVE 6,280:DRAW 1270,280 1270 MOVE 6,210:DRAW 500,210 1280 MOVE 590,210:DRAW 720,210 1290 MOVE 810,210:DRAW 1010,210 1300 MOVE 6,140:DRAW 1270,140 1310 MOVE 6,1018:DRAW 6,0 1320 MOVE 6,6:DRAW 1270,6 1330 MOVE 1070,210:DRAW 1270,210 1340 MOVE 1270,1018:DRAW 1270,0 1350 MOVE 150,280:DRAW 150,140 1s6p MOVE u0p,28p:DRAW 500,140 |c0
P702 CEEFAX 702 Sat 16 Apr 17:26/29 |B21A212|a35SNAIL108p2:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 1370 MOVE 590,280:DRAW 590,140 1380 MOVE 720,280:DRAW 720,140 1390 MOVE 810,280:DRAW 810,140 1400 MOVE 1010,280:DRAW 1010,140 1410 MOVE 1070,280:DRAW 1070,140 1420 MOVE 1170,280:DRAW 1170,210 1430 PRJNTTAB(1,0)"No";TAB(6,0)"positio n";TAB(19,0)"deg" 1440 PRJNTTAB(26,0)"light";TAB(28,2);"0 " 1450 ENDPROC 1460 : 1470 DEFPROCdisp#data 1480 PROCcalcpos:PROCbug 1490 MOVE oldSX,oldSY 1u0p PLOT6,SX,SY:REM buggy path 1510 oldSX=SX:oldSY=SY 1520 PRINTTAB(1,2);T 15sp IF T*>s60 T%=T%-3v0 1540 IF T%<0 T*=T*+360 15u0 IF T*=360:T*=0 |c0
P702 CEEFAX 702 Sat 16 Apr 17:16/15 |B21B212|a35SNAIL10802:03/83|j44BBBC316k |p|s÷#1÷e|s÷Z0 1u6p PRJNTTAB(19,2);UPC(3);TAB(19,2);T% 157p PRJNTTABX6,2);UPC(9);TABX6,2);INT( (BX/10Q+.5)","INT(XBY/10)+.5) 1580 ENDPROC 1590 : 1600 DEFPROCcalcpos 161p F=RAD T% 1620 BX=BX+K*fwd*SIN F:BY=BY+K*fwd*COS F 1630 SX=BX*scale+screenX:SY=BY*scale+sc reenZ 1640 SY=BY*scale+screenZ:K=0 1650 ENDPROC 1660 : 1670 DEFPROCbug 1680 PROCdrawbzg:PROCcalcbug:PROCdrawbu g 1690 ENDPROC 17p0 : 1710 DEFPROCcalcbug |c0
P702 CEJFAX 7p2 Sat 16 Apr 17:16/34 |B21C212|a35SNAIL1p8p2:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 172p F=RBDT*:F2=RAD(T*-90):F3=RAD(T*+90 ):F4=RAD(T%-180) 1730 frontX=BX+bf*SIN F:ftontY=BY+bf*CO S F 1740 LOX=frontX+bw*SINF2:LOY=frontY+bw* COSF2 1750 ROX=frontXWbw*SIN F3:ROY=frontY+bw *COS F3 1760 FLX=frontX+cw*SIN F2:FLY=ftontY+cw *COS F2 1770 FRX=frontX+cw*SIN F3:FRY=frontY+cw *COS F3 178p backX=BX+bb*SIN F4:backY=BY+bb*COS F4 1790 BLX=backX+cw*SIN F2:BLZ=backZ+cw*C OS F2 18pp BRX=backX+cw*SIN F3:BUY=backY+cw*C OS F3 1810 ENDPROC 182p : 1830 DEFPROCdrawbug |c0
P702 CEEFAX 702 Sat 16 Apr 17:16/52 |B21D212|a35SNAIL10802:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 1840 MOVE XFRX*scale)+scteenX,XFRZ*scal e)+screenZ:PLOT22,(BRX*scale)+screenX,(B RZ*scale)+screenZ:PLOT22,(BLX*scale)+scr jinX,XBLY*scale)+screenZ:PLOT22,(FLX*rca le)+scteenX,(FLY*scale)+scteenY 1850 MOVE (LOX*scale)+scteenX,(LOY*scal e)+screinY:PLOT6,(ROX*scale)+screenX,(RO Z*scale)+screenZ 18vp ENDPROC 1870 : 1880 DEFPROCdrawboundary 1890 MOVE (LX*scale)+screenX,(LY*scale) +screenZ:PLOT5,(HX*scale)+scrienX,(LY*sc ale)+screenZ:PLOT5,(HX*scale)+screenX,(H Y*scale)+screenY:PLOT5,(LX*scale)+screen X,(HYTscale)+scrienY:PLOT5,(LX*scale)+sc reenX,(LY*scale)+screenY 1900 ENDPROC 1910 : 1920 DEFPROCmf(dist) 1930 LOCAL I |c0
P702 CEEFAX 702 Sat 16 Apr 17:23/38 |B21E212|a35SNAIL10802:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 194p *FX15 1950 N=N+1:I=0:K=0:B$(N)="F":hitflag=0 1960 REPEAT:I=I+1:K=K+1 1970 FOR D=1 TO 30:NEXT D 1980 IF K=di PROCdisp#data 1990 IF I>=dist/fwd hitflag=1 2000 UNTIL hitflag 2010 B$(N)="F":B(N)=INT(I*fwd) 2p2p PROCdisp#data 2030 ENDPROC 2p4p : 2050 DEFPROCrev(dist) 2pvp LOCAL I 207p N=N+1:I=0:K=0 2p8p REPEAT:I=I+1:K=K-1 2090 FOR D%=1 TO 65:NEXT 2100 IF K=-di PROCdisp#data 211p UNTIL I>dist/fwd OR I=dist/fwd 212p B$(N)="Bb:BXN)=INT(I*fwd) 213p PROCdisp#data 214p ENDPROC |cp
P702 CEJFAX 7p2 Sat 16 Apr 17:27/25 |B21F212|a35SNAIL1p8p2:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 2150 : 2160 DEFPROCturnleft(deg) 217p LOCAL I 2180 N=N+1:I=0 2190 REPEAT:I=I+1 2200 FOR D%=1 TO 65:NEXT 2210 T%=TJ-1 2220 UNTIL I=deg 22sp B$(N)="L":BXN)=I 2240 turnflag=0:PROCdisp#data 22u0 ENDPROC 2260 : 2270 DEFPROCturnright(deg) 2280 LOCAL I 2290 N=N+1:I=0 2300 REPEAT:I=I+1 2310 FOR D%=1 TO 65:NEXT 2320 T%=T*+1 2330 UNTIL I=deg 234p B$(N)=bR":BXN)=I 2350 PROCdisp#data |c0
P702 CEEFAX 702 Sat 16 Apr 17:27/43 |B221p212|a35SNAIL10802:03/83|i24BBBC316 k|p|s÷#1÷e|s÷Z0 2360 ENDPROC 2370 : 2380 DEFPROCintto 2390 CLS:PROCoff:PROCDBL(" "+Z$,-1,4) 2400 PROCCENTRE("Enter a route using ",8):PROCCJNTTE(" letter/number notation .",10) 2410 PROCCENTRE(" The buggy will foll ow the$,14):PROCCENTRJ(" route and draw a 'SNAIL",16Q:PROCCJNTRE("TRAIL' on the screen. ",18) 2420 PROCSPACE(22) 2430 ENDPROC 2440 : 2450 REM utilities 2460 : 2470 DEF PROCoff VDU23;11,0;0;0;0;:ENDP SOC 2480 DEF PROCon VDU23;11,255;0;0;0;:END PROC 249p : |c0
P702 CEEFAX 7p2 Sat 16 Apr 17:28/00 |B2211212|a35SNAIL10802:03/83|i44BBBC316 k|p|s÷#1÷e|s÷Z0 2u00 DEF FNINPU-XF*,L*) 2510 LOCAL B$ 2u2p PRJNTSTRJNG$(L*,".");STRING$(L*,CH R$(8)); 2530 PROCon:*FX15 2540 REPEAT K%=GET 2550 IF K)=127 AND LEN(B$)>0 B$=LEFT$(B $,LEN(B$)-1):GOTO2580 2um0 IF INSTR(A$(F%),CHR$(K%)) AND LEN( B$)<L% B$=B$+CHR$(K%) ELSE IF K%<>13 K%= 7 257p IF K%=13 AND LEN(B$)<1 K)=7 2580 VDU K):IF K%=127 VDU46,8 2590 UNTILK%=13:PRINT:PROCoff 260p =B$ 261p : 2620 DEF PROCINIT 2630 DIM A$(4) 2640 A$(1)="123":A$(2)="1234567890":A$( 4)="YNyn" 2650 ENDPROC |c0
P702 CEEFAX 7p2 Sat 16 Apr 17:28/17 |B2212212|a35SNAIL1080 :03/83 i 4BBBC316 k|p|s÷#1÷e|s÷Z0 2 : 267 DEFPROCCENTR (E$,Y%) 268 PR NTTAB(FNCENTRE(E$),Y% ;E$; 2 N SOC 270 : 271 DEFPROCDBL(X$,X ,Y ) 2720 IF X*<0 X =FNCENTRE(X$) 27 PRJNTTAB(X%-1,Y%);CHR$(141);X$ 274p P JNTTAB -1, +1 ;CHR (141);X$ 27 0 ENDPROC 2760 : 277 DEFPROCSPACE(Y ) 278 PROCCENTRE("P ss"+CHR$&83+"SP CE" +CHR$ 87 bb r , ) 279 *FX 5 28p PEAT TNT L G T 2 281 ENDPROC 282 : 283 D F FN NT (A$)=20-LEN(A$ /2 |c0