Saturday, April 7, 2012
BBC B WELCOME POEM PROGRAM
>VDU2
>LIST
10 REM POEM/Now Press Return
12 REM Program by Andrew Chapman and Jerry Temple-Fry (NETHERHALL SCHOOL) andRichard G Warner:Poem by Roger McGough
14 REM For BBC Model A Microcomputer 16K Minimum
40 ON ERROR GOTO 50
50 MODE7
60 CLS:ON ERROR GOTO 800
100 PROCTITLEPAGE
110 DIM OG%30,C$(4):C$(1)=CHR$&82:C$(2)=CHR$&83:C$(3)=CHR$&86:C$(4)=CHR$&87
115 PROCASS
120 G$=CHR$(&91):B$=CHR$(8):D$=CHR$(10)
140 D%=180
150 A$=STRING$(51," ")
200 PROCENDREAD(4,4)
210 DATA I explain quietly.You,Hear me shouting.You,Try a new tack.I,Feel old wounds re-open.
220 DATA You see both sides.I,See your blinkers.I,Am placatory.You,Sense a new selfishness.
230 DATA I am a dove.You,Recognise the hawk.You,Offer an olive branch.I,Feel the thorns.
240 DATA You bleed.I,See crocodile tears.I,Withdraw.You,Feel the impact.
300 DIM W1$(17),S1(17),W2$(7),W3$(9),GONE(10)
310 FOR Z%=1 TO 17:READ W1$(Z%),S1(Z%):NEXT
320 DATA input,2,cursor,2,output,2,micro,2,interface,3,transducer,3
330 DATA transistor,3,buffer,3,hardware,2,diode,2,COBOL,2,BASIC,2,FORTRAN,2
340 DATA analogue,3,digital,3,parity,3,PASCAL,2
350 FOR Z%=1 TO 7:READ W2$(Z%):NEXT
360 DATA stack,port,PROM,ROM,byte,chip,hex
370 FOR Z%=1 TO 9:READ W3$(Z%):NEXT
380 DATA walk the dog,take a bath,park the Jag,write a letter,levitate
390 DATA meditate,swing the cat,loiter with intent,jog in the park
400 DIM N$(6),LK$(6)
410 FOR Z%=1 TO 6:READ N$(Z%),LK$(Z%):NEXT
420 DATA Hunt,Who sailed down the Thames in a punt
430 DATA Skinner,Who took a gorilla to dinner
440 DATA Cleef,Who swallowed a set of false teef
450 DATA Diana,Who practised each day on the piano
460 DATA Jake,Who said 'There has been a mistake'
470 DATA Fletcher,Who tried to make love on a stretcher
600 PROCRETURN:GOTO 1000
800 IF ERR<>17 THEN REPORT:PRINT" in line ";ERL:END
900 CLS
910 PRINTTAB(5,9);
920 PRINT"Do you want to go on to"
930 PRINT" the next program (Y/N)? ";
940 PROCYESORNO:IF Y%<0 THEN 910
950 IF Y%=0 THEN CLEAR:GOTO 100
970 CHAIN "PHONE"
1000 PROCCLEAR
1010 PROCLINE("Here is a poem for us both to play")
1020 PROCLINE("First let us introduce ourselves.")
1030 PROCLINE("My name is Roger. What's yours?")
1040 PROCLINE("Tell me and then press RETURN.")
1100 PRINTTAB(2,16);:PROCGPI(0,30)
1110 IF A$="" THEN 1100
1120 IF RIGHT$(A$,1)=" " THEN A$=LEFT$(A$,LEN(A$)-1):GOTO1110
1130 IF LEFT$(A$,1)=" " THEN A$=RIGHT$(A$,LEN(A$)-1):GOTO1130
1140 NAME$=A$:IF LEN(A$)<13 THEN 1200
1150 PRINTTAB(2,18);STRING$(36," ")'STRING$(38," ")
1160 PRINTTAB(2,18);"Haven't you a nickname? I'll never"
1170 PRINT" remember all that. Please try again."
1180 PROCWAIT(2):GOTO1100
1200 PROCCLEAR
1210 PROCLINE("Hello "+NAME$+", nice to have your input.")
1220 PROCLINE("Because you have a gentle touch")
1230 PROCLINE("I think I can trust you. I need help.")
1240 PROCLINE("Press RETURN and I'll tell you a secret.")
1250 PROCRETURN
1300 PROCCLEAR
1310 PROCLINE("I don't like the poems they're making me write")
1320 PROCLINE("I really don't like them at all.")
1330 PROCLINE("Heirograffiti I don't understand")
1340 PROCLINE("Scrawled on a silicon wall.")
1350 PROCRETURN
1400 PROCCLEAR
1410 PROCLINE("I feel like a software malfunction")
1420 PROCLINE("I really don't like it one bit.")
1430 PROCLINE("Dictating mysterious messages")
1440 PROCLINE("For this new machine to transmit.")
1450 PROCRETURN
1500 PROCCLEAR
1510 PROCLINE("I don't like the poems they filter through me")
1520 PROCLINE("Using words I never would use,")
1530 PROCRAND1:PROCLINE(A$):IF LEN(A$)<37 THEN PRINT
1540 PROCLINE("I'm enslaved by an alien muse.")
1550 PROCWAIT(.5):PROCRAND1:PROCRANDLINE(A$,13)
1560 PROCRWAIT:IF Y%>0 THEN 1550
1700 PROCCLEAR
1710 PROCLINE("A BBC microcomputer")
1720 PROCLINE("Has me trapped without hope of escape.")
1730 PROCLINE("A poet adrift in a microcosmos")
1740 PROCLINE("Of an endless loop of tape.")
1750 PROCRETURN
1800 PROCCLEAR
1810 PROCLINE("You can do whatever you like")
1820 PROCLINE("When I'm at your beck and call.")
1830 PROCRAND2:PROCLINE(A$):IF LEN(A$)<37 THEN PRINT
1840 PROCLINE("I'm your servant and don't like it at all.")
1850 PROCWAIT(.5):PROCRAND2:PROCRANDLINE(A$,12)
1860 PROCRWAIT:IF Y%>0 THEN 1850
2000 PROCCLEAR
2010 PROCLINE("Sorry, "+NAME$+" about that outburst.")
2020 PROCLINE("I know I shouldn't get emotional")
2030 PROCLINE("However, I'm back in control now.")
2040 PROCLINE("Shall we write a limerick together?")
2050 PRINTTAB(2,17);:PROCYESORNO:IF Y%<0 THEN 2050
2060 IF Y%=1 THEN 2100
2070 PRINTTAB(2,17);"Pity - you missed the best bit."
2080 PROCRETURN:PROCCLEAR:GOTO2700
2100 PROCCLEAR
2110 PROCLINE("There was a young man or lady -")
2120 PROCLINE("You choose and then press RETURN")
2130 PRINTTAB(2,12);:PROCGPI(0,4)
2140 IF FNLEQ(A$,"M")=TRUE THEN P$="man":Q$="his":GOTO2200
2150 IF FNLEQ(A$,"L")=TRUE THEN P$="lady":Q$="her":GOTO2200
2160 GOTO2130
2200 PROCCLEAR
2210 PROCLINE("There was a young "+P$+" called")
2220 A$="":FOR Z%=1 TO 6:A$=A$+N$(Z%)
2230 IF Z%<6 THEN A$=A$+"/"
2240 NEXT:PROCLINE(A$+" - you choose")
2250 PROCLINE("And then press RETURN.")
2260 PRINTTAB(2,15);:PROCGPI(0,8):Y%=1
2270 IF FNLEQ(A$,LEFT$(N$(Y%),1)) THEN 2300
2280 IF Y%=6 THEN 2260
2290 Y%=Y%+1:GOTO2270
2300 PROCCLEAR
2310 PROCLINE("There was a young "+P$+" called "+N$(Y%))
2320 PROCLINE(LK$(Y%))
2330 PROCLINE("But then "+Q$+" computer")
2340 PROCLINE("Took out a six shooter")
2350 PROCLINE("Which erased the young "+P$+" called "+N$(Y%)+".")
2360 PROCWAIT(2):PROCPISTOL:PROCRETURN
2500 PROCCLEAR
2510 PROCLINE("Oh dear. My sincere apologies, "+NAME$)
2520 PROCLINE("I really can't stand violence.")
2530 PROCLINE("I don't know what came over me")
2540 PROCLINE("Perhaps I've been working too hard lately.")
2550 PROCRETURN
2600 PROCCLEAR
2610 PROCLINE("Will you forgive me? - say yes or no")
2620 PRINTTAB(2,10);:PROCYESORNO:IF Y%<0 THEN 2620
2630 PRINTTAB(0,10);
2640 PROCLINE("Thank you. And how typical of you.")
2650 PROCRETURN:PRINTTAB(0,12);
2700 PROCLINE("Here's a poem of mine about two people")
2710 PROCLINE("Who also find it difficult to communicate.")
2720 PROCRETURN
3000 C%=1:FOR V=1 TO 4
3010 PROCENDVERSE(V,V,V,V):NEXT
3100 FOR I=1 TO 4:GONE(I)=FNVNUM(I,I,I,I)
3110 NEXT
3120 FOR I=5 TO 8:GONE(I)=0:NEXT
3130 U=1:LA=4:LB=4:LC=4:LD=4
3140 PROCKCL
3200 A=RND(4):IF A=LA THEN 3200
3210 B=RND(2)*2:IF A MOD 2=1 THEN B=B-1
3220 IF B=LB THEN 3210
3230 C=B
3240 D=RND(4):IF D=LD THEN 3240
3250 J=FNVNUM(A,B,C,D):I=1
3260 IF J=GONE(I) THEN 3200
3270 I=I+1:IF I<9 THEN 3260
3280 IF U MOD 4<>1 THEN 3300
3290 C%=C%+1:IF C%>4 THEN C%=1
3300 PROCENDVERSE(A,B,C,D)
3310 LA=A:LB=B:LC=C:LD=D
3320 GONE(U)=FNVNUM(A,B,C,D)
3330 U=U+1:IF U=9 THEN U=1
3340 IF Y%=0 THEN 3200
4000 PROCCLEAR
4010 PROCLINE("Thank you for playing the poem.")
4020 PROCLINE("Without you I would have drowned")
4030 PROCLINE("In an eternal sea of technology.")
4040 PROCLINE("Going round")
4100 X=13:Y=14:MX=37:NX=2:MY=22:NY=2:I=1
4110 PROCNEXTCHAR:PRINTTAB(X,Y);:IF CH$=" " THEN PRINTC$(C%); ELSE PRINTCH$;
4120 IF X<MX THEN X=X+1:GOTO4110
4130 MX=MX-2
4140 Y=Y+1:IF Y=MY THEN MY=MY-2:GOTO4170
4150 PROCNEXTCHAR:PRINTTAB(X-1,Y);C$(C%);CH$:GOTO4140
4170 PROCNEXTCHAR:IF CH$=" " THEN 4190
4180 PRINTTAB(X-1,Y);C$(C%);CH$
4190 IF X>NX THEN X=X-1:GOTO4170
4200 NX=NX+2:IF NY=12 THEN 4300
4210 Y=Y-1:PRINTTAB(X-1,Y);C$(C%);:IF Y=NY THEN NY=NY+2:GOTO4110
4220 PROCNEXTCHAR:PRINTCH$;CHR$(&87);:GOTO4210
4300 PROCRETURN
4900 PROCCLEAR
4910 PROCLINE("Such is the power of the computer")
4920 PROCLINE("Such is the loneliness of the poet.")
4930 PROCLINE("A plastic daffodil in a Grecian urn")
4940 PROCLINE("Goodbye "+NAME$+". Now press RETURN.")
4950 PROCRETURN:GOTO900
5000 DEFPROCRAND1
5010 A$="Like ":GONE(1)=0:GONE(2)=0
5020 FOR Z%=1 TO 3
5030 Y%=RND(17):IF GONE(1)=Y% OR GONE(2)=Y% THEN 5030
5040 IF Z%<3 THEN 5070
5050 IF S1(Y%)<>2 THEN 5030
5060 A$=A$+W1$(Y%):GOTO5090
5070 GONE(Z%)=Y%
5080 A$=A$+W1$(Y%)+", ":IF S1(Y%)=2 THEN A$=A$+"and "
5090 NEXT:A$=A$+" and "+W2$(RND(7))
5099 ENDPROC
5200 DEFPROCRAND2
5210 Y%=RND(9):Z%=RND(9):IF Y%=Z% THEN 5210
5230 A$="You can "+W3$(Y%)+" or "+W3$(Z%)
5299 ENDPROC
5500 DEFPROCENDVERSE(A,B,C,D)
5520 I=C%:PROCCLEAR:C%=I
5530 PROCENDLINE(A,1)
5540 PROCENDLINE(B,2)
5550 PROCENDLINE(C,3)
5560 PROCENDLINE(D,4)
5570 Y%=INKEY(100):IF Y%<0 THEN Y%=0:GOTO5599
5580 IF Y%<>13 THEN 5570
5599 ENDPROC
5600 DEFPROCENDLINE(S,L)
5610 PROCENDREAD(S,L)
5620 PRINT" ";C$(C%);
5630 FOR I=1 TO LEN(L$)
5640 PRINTMID$(L$,I,1);:PROCWAIT(.01)
5650 IF MID$(L$,I,1)="." THEN PROCWAIT(.6):PRINT" ";
5660 NEXT:PRINT'
5699 ENDPROC
5800 DEFPROCENDREAD(S,L)
5810 RESTORE:FOR I=1 TO S*4+L-4:READL$:NEXT
5899 ENDPROC
5900 DEFFNVNUM(A,B,C,D)
5910 =A*64+B*16+C*4+D
6000 DEFPROCPISTOL
6010 FOR I=1 TO 10:GONE(I)=FALSE:NEXT
6020 FOR I=1 TO 6
6030 REPEAT X=RND(10):UNTIL GONE(X)=FALSE:GONE(X)=TRUE:X=X*3+2
6040 PRINTTAB(X,2);G$;"z";CHR$(255);"5";B$;B$;B$;B$;D$;G$;CHR$(255);".";B$;B$;B$;D$;G$;"5";B$;B$;D$;G$;"5"
6050 PROCC(&FF):PROCC(&EF):PROCA(3,15):FOR J=1 TO 255 STEP 8:PROCF(2,J):NEXT:PROCA(3,0)
6060 FOR J=8 TO 19:PRINTTAB(X-1,J);CHR$(&81);"*";C$(C%):PROCWAIT(0.01)
6070 PRINTTAB(X-1,J);" ":NEXT
6080 FOR J=2 TO 7:PRINTTAB(X,J);" ":NEXT:NEXT
6099 ENDPROC
6800 DEFPROCNEXTCHAR
6810 CH$=MID$(" and round",I,1)
6820 IF I>1 THEN 6840
6830 C%=C%+1:IF C%>4 THEN C%=1
6840 IF I=10 THEN I=1 ELSE I=I+1
6899 ENDPROC
7000 DEFPROCRETURN
7020 PRINTTAB(37,23);:PROCON:PROCKCL
7030 X$=GET$:IF ASC(X$)<>13 THEN 7030
7040 PROCOFF
7099 ENDPROC
7100 DEFPROCCLEAR
7110 CLS:PRINTTAB(0,8);:T%=0:C%=RND(4)
7199 ENDPROC
7200 DEFPROCLINE(L$)
7220 PRINT" ";C$(C%);
7230 IF LEN(L$)>36 THEN 7300
7240 REPEAT UNTIL TIME-T%>D%
7250 PRINTL$:GOTO7390
7300 I=36
7310 IF ASC(MID$(L$,I,1))>64 THEN I=I-1:GOTO7310
7320 IF MID$(L$,I,1)=" " THEN I=I-1
7330 REPEAT UNTIL TIME-T%>D%
7340 PRINTLEFT$(L$,I)
7350 IF MID$(L$,I,1)=" " THEN I=I+1:GOTO7350
7360 PRINTC$(C%);STRING$(35-LEN(L$)+I," ");RIGHT$(L$,LEN(L$)-I)
7390 PRINT:T%=TIME
7399 ENDPROC
7500 DEFPROCRWAIT
7510 PRINTTAB(37,23);:PROCON:T%=TIME
7520 A$=INKEY$(0):IF A$=CHR$(13) THEN Y%=0:GOTO7590
7530 IF TIME-T%<250 THEN 7520
7540 Y%=1
7590 PROCOFF
7599 ENDPROC
7600 DEFPROCRANDLINE(A$,N)
7610 PRINTTAB(2,N);STRING$(78," ");TAB(0,N);CHR$(7);
7620 C%=RND(4):T%=0:PROCLINE(A$)
7699 ENDPROC
7900 DEFFNLEQ(A$,E$)
7910 IF LEFT$(A$,1)=E$ OR LEFT$(A$,1)=CHR$(ASC(E$)+32) THEN =TRUE
7920 =FALSE
7999 ENDPROC
8000 DEFPROCDBL(X$,X,Y)
8010 PRINTTAB(X-1,Y);CHR$(141);X$
8020 PRINTTAB(X-1,Y+1);CHR$(141);X$
8099 ENDPROC
8100 DEFPROCWAIT(X)
8110 LOCAL Z
8120 Z=TIME
8130 REPEAT UNTIL TIME-Z>X*100
8199 ENDPROC
8200 DEFPROCSPACE
8220 PRINTTAB(3,22);"Press the SPACE BAR to continue";:PROCKCL
8240 REPEAT UNTIL GET$=" "
8299 ENDPROC
8300 DEFPROCTITLEPAGE
8310 CLS:PROCDBL("Now press RETURN....",8,8):PROCDBL("a poem by ROGER McGOUGH",6,14)
8399 ENDPROC
8800 DEFPROCKCL
8810 REPEAT UNTIL INKEY(0)=-1
8899 ENDPROC
8900 DEFPROCOFF
8910 VDU23;8202;0;0;0;:ENDPROC
8950 DEFPROCON
8960 VDU23;29194;0;0;0;:ENDPROC
9000 DEFPROCGPI(F2,ML):REM General Purpose Input Routine
9010 LOCALB,B$
9020 A$=""
9030 PRINTSTRING$(ML," ");STRING$(ML+1,CHR$(8));C$(RND(4));:PROCON:PROCKCL
9040 B$=GET$:B=ASC(B$):IF B=13 THEN 9190
9050 IF B=127 AND A$="" THEN 9040
9060 IF B=127 THEN A$=LEFT$(A$,LEN(A$)-1):PRINTB$;:GOTO9040
9070 IF LEN(A$)=ML OR B<32 OR B>126 THEN 9170
9080 IF F2=0 OR B=32 OR (B>=48 AND B<=57) THEN 9180
9170 PRINTCHR$(7);:GOTO9040
9180 PRINTB$;:A$=A$+B$:GOTO9040
9190 PROCOFF
9199 ENDPROC
9200 DEFPROCYESORNO
9210 LOCALB$
9220 PROCGPI(0,3)
9230 B$=LEFT$(A$,1)
9240 Y%=-1
9250 IF B$="Y" OR B$="y" THEN Y%=1
9260 IF B$="N" OR B$="n" THEN Y%=0
9299 ENDPROC
10000DEFPROCASS P%=OG%:[OPT 0:PHP:LDY#&FF:SEI:STY&FE43:STA&FE4F:INY:STY&FE40:LDY#&10:.WAIT DEY:BNE WAIT:LDY#&08:STY&FE40:PLP:RTS:]:ENDPROC
10100DEFPROCC(C%) A%=C%:CALLOG%:ENDPROC
10200DEFPROCA(CH%,AT%) PROCC(&80+CH%*32+31-AT%):ENDPROC
10300DEFPROCF(CH%,FR%) PROCC(&80+CH%*32+(FR%MOD16)):PROCC(FR%/16):ENDPROC
>VDU0
>
No comments:
Post a Comment