10 CLS:PROCA:PROCB:REPEAT:PROCC(_%):REPEAT:REPEAT:`%=INKEY-58:a%=INKEY-42:b%=INKEY-26:c%=INKEY-122:d%=INKEY-72:e%=INKEY-56:f%=INKEY-82:g%=INKEY-113:UNTIL`%EORa%EORb%EORc%EORg%EORd%EORe%EORf%:REPEATUNTILNOTINKEY-58ANDNOTINKEY-42ANDNOTINKEY-122ANDNOTINKEY-26ANDNOTINKEY-113ANDNOTINKEY-72ANDNOTINKEY-56ANDNOTINKEY-82:h%=_%:IF`%_%=1 20 IFa%_%=i% 30 IFb%AND_%>1THEN_%=_%-1 40 IFc%AND_%_%ORg%:UNTILg%:CLOSE#j%:*FX21 90 CHAIN"$.PDmenu":END 100 DEFPROCA:*FX229 110 *FX4,2 120 ENDPROC 130 DEFPROCF:*FX229 140 *FX4 150 ENDPROC 160 DEFPROCB:ONERRORPROCG:END 170 DIMk%16,l%1024,A$(23,1):FORm%=0TO22:FORn%=0TO1:A$(m%,n%)=STRING$(38," "):NEXT:NEXT:*LOAD CATCODE A00 180 j%=OPENIN"CATALOG":A$=FNB(j%):i%=VAL(FNB(j%)):CLOSE#j%:DIMA%(i%):j%=OPENIN"CATDATA":FORo%=1TOi%:INPUT#j%,A%(o%):NEXT:CLOSE#j%:j%=OPENIN"CATALOG":_%=1:ENDPROC 190 DEFPROCG:IFERR=17CLOSE#j%:VDU3:OSCLI"DRIVE0":OSCLI"EXEC $.!BOOT":END 200 CLS:REPORT:PRINT" at line ";ERL:PROCF:ENDPROC 210 DEFFNC:LOCALA%,B$:A%=135:B$=STR$~USR&FFF4:=VAL(MID$(B$,3,2)) 220 DEFFNB(j%):LOCALC$,p%:REPEAT:p%=BGET#j%:IFp%>=32THENC$=C$+CHR$p% 230 UNTILp%=13OREOF#j%:=C$ 240 DEFFND:!&70=q%:!&72=l%:!&74=0:CALL&A00:q%=!&74:=$&900 250 DEFPROCH(r%):IFr%VDU28,2,30,40,6ELSEVDU28,1,30,39,6 260 ENDPROC 270 DEFPROCC(s%):LOCALD$,C$,E$:PROCI(s%,j%):q%=0:D$=FNE(FND):CLS:VDU26:COLOUR128:COLOUR1:IFFNC=0PRINTTAB(77-LEN(" Disc "+D$),3);" Disc ";D$ELSEPRINTTAB(38-LEN(" Disc "+D$),3);" Disc ";D$ 280 PROCH(FNC=0):COLOUR129:COLOUR0:REPEAT:C$=FND:IFLEFT$(C$,1)<>"~"PRINTC$ 290 UNTILLEFT$(C$,1)="~":PRINTTAB(0,23);"USER RATING: ";FNF(MID$(C$,2)):E$=FND:PRINTTAB(0,21);"DISCS: A=";FNG(E$,1);" B=";FNG(E$,2);" C=";FNG(E$,3);" D=";FNG(E$,4);" E=";FNG(E$,5);" F=";FNG(E$,6);" G=";FNG(E$,7):ENDPROC 300 DEFFNG(E$,i%):LOCALF$:F$=MID$(E$,i%,1):IFF$="0"THEN="/" 310 =F$ 320 DEFFNA(t%):LOCALF$:CLS:COLOUR128:COLOUR1:VDU26:IFFNC=0PRINTTAB(68,3);SPC10;ELSEPRINTTAB(28,3);SPC10; 330 PROCH(FNC=0):COLOUR129:COLOUR0:PRINT"Enter the number of the disc you wish"'"to go to. If the disc is split up"'"into an (a) and a (b) part, you do not"'"have to enter the letter part unless"'"you want to."''"Pressing RETURN will go back to the"'"disc contents "; 340 PRINT"shown before @ was"'"pressed."''"Disc number: ";:F$=FNH(5,0):=FNI(F$,t%) 350 DEFFNI(F$,t%):LOCALu%,v%,f%,G$,H$:u%=VALF$:IFu%=0ANDLENF$<>1THEN=t% 360 IFu%>i%ORu%<0THEN=t% 370 v%=-1:FORf%=u%TOi%:PTR#j%=A%(f%):G$=FNB(j%):IFVALG$=u%v%=f%:f%=i%+1 380 NEXT:IFv%=-1THEN=t% 390 H$=RIGHT$(F$,1):IFASCH$>=65ANDASCH$<=90THENH$=CHR$(ASCH$+32) 400 IFH$<"a"ORH$>"z"THEN=v% 410 FORf%=v%TOi%:PTR#j%=A%(f%):G$=FNB(j%):IFRIGHT$(G$,1)=H$v%=f%:f%=i%+1ELSEIFH$>RIGHT$(G$,1)ANDLEFT$(F$,LENF$-1)=LEFT$(G$,LENG$-1)v%=f%ELSEIFFNJ(F$,G$)v%=f%:f%=i%+1 420 NEXT:=v% 430 DEFFNJ(F$,G$):H$=RIGHT$(F$,1):IFASCH$>=65ANDASCH$<=90THENH$=CHR$(ASCH$+32) 440 IFLEFT$(F$,LENF$-1)=G$ANDH$>="a"ANDH$<="z"THEN=TRUE 450 =FALSE 460 DEFFNH(w%,x%):LOCALI$,y%:I$="":REPEAT:REPEAT:*FX21,0 470 y%=GET:UNTILy%=13ORy%=127OR(y%>=32ANDy%<=126):IFy%=127ANDLENI$=0PROCJ 480 IFy%<>127ANDy%<>13ANDLENI$=w%PROCJ 490 IFy%<>127ANDy%<>13ANDLENI$0VDU8,32,8:I$=LEFT$(I$,LENI$-1) 510 UNTILy%=13ANDLENI$>=x%:=I$ 520 DEFPROCJ:SOUND3,-10,101,5:ENDPROC 530 DEFFNE(C$):REPEAT:IFRIGHT$(C$,1)=CHR$0THENC$=LEFT$(C$,LENC$-1) 540 UNTILRIGHT$(C$,1)<>CHR$0:=C$ 550 DEFPROCD:LOCALJ$,e%,C$,z%,E$:CLS:VDU26:COLOUR128:COLOUR1:IFFNC=0PRINTTAB(68,3);SPC10;ELSEPRINTTAB(28,3);SPC10; 560 PROCH(FNC=0):COLOUR129:COLOUR0:IFNOTFNKPRINT"The printer is off-line or not"'"connected."''"Press SPACE to continue...":PROCK:ENDPROC 570 PRINT"Do you want to print just this item?":REPEAT:J$=CHR$(GETAND&DF):UNTILJ$="Y"ORJ$="N":IFJ$="Y"PRINT"Yes":`%=_%:a%=_%ELSEPRINT"No" 580 IFJ$="N"`%=FNL:IF`%=-1ENDPROC 590 IFJ$="N"a%=FNM:IFa%=-1ORa%<`%ENDPROC 600 IFJ$="N"IFFNNPROCL(`%,a%):ENDPROC 610 PROCM("BBC PD Catalogue: "+A$+CHR$13+CHR$13):FORe%=`%TOa%:PROCI(e%,j%):q%=0:D$=FND:PROCM("Disc "+D$+CHR$13+CHR$13):REPEAT:C$=FND:IFLEFT$(C$,1)<>"~"PROCM(C$+CHR$13) 620 UNTILLEFT$(C$,1)="~":z%=VAL(MID$(C$,2)):PROCM(CHR$13+"USER RATING: "):IFz%=0PROCM("unrated"+CHR$13)ELSEPROCM(FNF(MID$(C$,2))+CHR$13) 630 E$=FND:PROCM(CHR$13+"DISCS: A="+FNG(E$,1)+" B="+FNG(E$,2)+" C="+FNG(E$,3)+" D="+FNG(E$,4)+" E="+FNG(E$,5)+" F="+FNG(E$,6)+" G="+FNG(E$,7)+CHR$13+CHR$13):NEXT:ENDPROC 640 DEFFNL:LOCALK$,`%:PRINT'"Please enter the disc number of the"'"first item to be printed. Just press"'"RETURN for the first item."''"First item: ";:K$=FNH(5,0):IFK$=""`%=1ELSE`%=FNI(K$,-1) 650 =`% 660 DEFFNM:LOCALL$,a%:PRINT''"Please enter the disc number of the"'"last item to be printed. Just press"'"RETURN for the last item."''"Last item: ";:L$=FNH(5,0):IFRIGHT$(L$,1)>="0"ANDRIGHT$(L$,1)<="9"L$=L$+"z" 670 IFL$=""a%=i%ELSEa%=FNI(L$,-1) 680 =a% 690 DEFPROCM(C$):LOCALAA%:VDU2:FORAA%=1TOLENC$:VDU1,ASC(MID$(C$,AA%,1)):NEXT:VDU3:ENDPROC 700 DEFFNK:LOCALBA%,CA%:BA%=ADVAL-4:VDU2,1,0,1,0,1,0,1,0,1,0,3:CA%=TIME:REPEATUNTILTIME-CA%>=10:IFADVAL-40ORLEFT$(C$,1)="~":IFINSTR(C$,N$)<>0THENv%=f%:f%=i%+1 810 NEXT:IFv%=-1PRINT''"That string could not be found."''"Press SPACE to continue...":PROCK:ENDPROC 820 _%=v%:ENDPROC 830 DEFFNO(O$):LOCALAA%,P$,EA%:FORAA%=1TOLENO$:EA%=ASC(MID$(O$,AA%,1)):IFEA%>=97ANDEA%<=122THENEA%=EA%-32 840 P$=P$+CHR$EA%:NEXT:=P$ 850 DEFFNN:LOCALJ$:PRINT''"Do you want to print using two"'"columns? ";:REPEAT:*FX21 860 J$=CHR$(GETAND&DF):UNTILJ$="Y"ORJ$="N":IFJ$="Y"PRINT"Yes":=TRUE 870 PRINT"No":=FALSE 880 DEFPROCL(`%,a%):LOCALe%,FA%:e%=`%:FORGA%=1TOINT(((a%-`%+1)/4)+0.999999999):PROCM(CHR$13+CHR$13+"BBC PD Catalogue: "+A$+CHR$13+CHR$13+CHR$13):FORFA%=0TO2STEP2:IFFA%=2PROCM(CHR$13+CHR$13+CHR$13+CHR$13) 890 IFFA%+e%=22PROCM(CHR$13) 970 NEXT:ENDPROC 980 DEFPROCO(i%):LOCALHA%,IA%,M$,E$,e%:FORHA%=0TO23:A$(HA%,0)="":NEXT:PROCI(i%,j%):q%=0:IA%=-1:REPEAT:IA%=IA%+1:IFIA%=24THENIA%=23 990 A$(IA%,0)=FND:IFIA%=0THENA$(IA%,0)="Disc "+A$(IA%,0) 1000 UNTILLEFT$(A$(IA%,0),1)="~":M$=MID$(A$(IA%,0),2):A$(IA%,0)="":A$(22,0)="USER RATING: "+FNF(M$):E$=FND:A$(23,0)="DISCS: A="+FNG(E$,1)+" B="+FNG(E$,2)+" C="+FNG(E$,3)+" D="+FNG(E$,4)+" E="+FNG(E$,5)+" F="+FNG(E$,6)+" G="+FNG(E$,7):FORe%=0TO23:PROCM(A$(e%,0)+CHR$13) 1010 IFe%=0ORe%>=22PROCM(CHR$13) 1020 NEXT:ENDPROC