10 REM ************** 20 REM Music Star 30 REM By Tim Surtell 40 REM ************** 50 REM NC200 Version 2 : 12/96 60 REM Downloaded from Tim's NC Users' Site 70 REM http://www.ncus.org.uk 80 REM Programming by Timothy Surtell 90 CLS 100 DIMinfo(7,200),indtit$(200),indart$(200),tit$(100),art$(100),f$(4):f$(1)="CD_IND.MS":f$(2)="TAP_IND.MS":f$(3)="RECS_IND.MS":f$(4)="RECA_IND.MS" 110 PRINTTAB(0,1);:VDU27,14:PRINTTAB(2,1)CHR$17"Music Star"CHR$18 120 MOVE0,108:DRAW479,108:MOVE80,108:DRAW80,127 130 PRINTTAB(0,4)CHR$14" Track/Album title Artiste(s) Format Single/Album Side/Track "CHR$15:MOVE0,95:DRAW0,7:DRAW479,7:DRAW479,95 140 MOVE189,8:PLOT6,189,95:MOVE285,8:PLOT6,285,95:MOVE327,8:PLOT6,327,95:MOVE405,8:PLOT6,405,95 150 PRINTTAB(15,1)"Version 2":TIME=0:REPEATUNTILTIME>75:PRINTTAB(15,1)"Programmed by Tim Surtell":TIME=0:REPEATUNTILTIME>75 160 PRINTTAB(15,1)SPC30TAB(15,1)"Checking files..." 170 ONERRORGOTO210 180 N=0:I=1 190 K=OPENIN(f$(I)):dummy=BGET#K:CLOSE#K 200 N=N+1 210 I=I+1:IF I<5 GOTO190 220 IF N=0 PRINTTAB(15,1)"Creating new files...":FORI=1 TO 4:K=OPENOUT(f$(I)):CLOSE#K:NEXT 230 PRINTTAB(15,1)"OPTIONS : (S)each the index (A)dd to the index (Q)uit " 240 ONERRORPROCERROR 250 G$=GET$ 260 IFG$="S"PROCsearch:GOTO230 270 IFG$="A"PROCadd:GOTO230 280 IFG$="Q"CLS:PRINT"Thanks for using MUSICSTAR..."':END 290 GOTO250 300 DEF PROCformat 310 PRINTTAB(15,1)"SEARCH FOR : (C)D's (T)ape (R)ecord (S)ingles (A)lbums " 320 G$=GET$ 330 IFG$="C"serfor=1:file$="1":ENDPROC 340 IFG$="T"serfor=2:file$="2":ENDPROC 350 IFG$="R"serfor=4:file$="34":ENDPROC 360 IFG$="S"serfor=32:PROCfile:ENDPROC 370 IFG$="A"serfor=64:PROCfile:ENDPROC 380 GOTO320 390 DEF PROCfile 400 PRINTTAB(15,1)"SEARCH IN : (C)D's (T)apes (R)ecords (A)ll " 410 G$=GET$ 420 IFG$="C"file$="1":ENDPROC 430 IFG$="T"file$="2":ENDPROC 440 IFG$="R"ANDserfor=32 file$="3":ENDPROC 450 IFG$="R"ANDserfor=64 file$="4":ENDPROC 460 IFG$="R"ANDserfor=0 file$="34":ENDPROC 470 IFG$="A"ANDserfor=32 file$="123":ENDPROC 480 IFG$="A"ANDserfor=64 file$="124":ENDPROC 490 IFG$="A"ANDserfor=0 file$="1234":ENDPROC 500 GOTO410 510 DEF PROCscroll1 520 n=5 530 FORI=sy TOsy+9 540 IFI>INFO PRINTTAB(1,n)SPC30TAB(32,n)SPC15TAB(48,n)SPC6TAB(55,n)SPC6TAB(68,n)SPC6:GOTO640 550 PRINTTAB(1,n)SPC30 560 IFshow=FALSE ANDLEN(indtit$(I))>30PRINTTAB(1,n)LEFT$(indtit$(I),28);" ";:VDU27,16ELSEIFshow=FALSE PRINTTAB(1,n)indtit$(I) 570 IFshow=TRUE ANDLEN(indtit$(I))>30 PRINTTAB(1,n);:VDU27,17:PRINT" ";RIGHT$(indtit$(I),28)ELSEIFshow=TRUE PRINTTAB(1,n)indtit$(I) 580 PRINTTAB(32,n)SPC15 590 IFshow=FALSE ANDLEN(indart$(I))>15PRINTTAB(32,n)LEFT$(indart$(I),13);" ";:VDU27,16ELSEIFshow=FALSE PRINTTAB(32,n)indart$(I) 600 IFshow=TRUE ANDLEN(indart$(I))>15PRINTTAB(32,n);:VDU27,17:PRINT" ";RIGHT$(indart$(I),13)ELSEIFshow=TRUE PRINTTAB(32,n)indart$(I) 610 IFinfo(1,I)AND1PRINTTAB(48,n)"CD "ELSEIFinfo(1,I)AND2PRINTTAB(48,n)"TAPE "ELSEPRINTTAB(48,n)"RECORD" 620 IFinfo(1,I)AND64PRINTTAB(55,n)"Album "ELSEPRINTTAB(55,n)"Single" 630 IFinfo(6,I)=0PRINTTAB(68,n)SPC10TAB(68,n)CHR$17;info(2,I)*info(3,I)CHR$18 ELSE PRINTTAB(68,n)SPC10TAB(68,n);info(6,I)" / ";info(7,I) 640 n=n+1 650 NEXT 660 ENDPROC 670 DEF PROCscroll2 680 n=5 690 FORI=sy TOsy+9 700 PRINTTAB(1,n)SPC30TAB(32,n)SPC15TAB(48,n)SPC6TAB(55,n)SPC6TAB(68,n)SPC10 710 IFI>trklist GOTO820 720 IFINSTR(tit$(I),sertit$)ORINSTR(art$(I),serart$)VDU17 730 IFshow=FALSE ANDLEN(tit$(I))>30PRINTTAB(1,n)LEFT$(tit$(I),28);" ";:VDU27,16ELSEIFshow=FALSE PRINTTAB(1,n)tit$(I) 740 IFshow=TRUE ANDLEN(tit$(I))>30PRINTTAB(1,n);:VDU27,17:PRINT" ";RIGHT$(tit$(I),28)ELSEIFshow=TRUE PRINTTAB(1,n)tit$(I) 750 PRINTTAB(32,n)SPC15 760 IFshow=FALSE ANDLEN(art$(I))>15PRINTTAB(32,n)LEFT$(art$(I),13);" ";:VDU27,16ELSEIFshow=FALSE PRINTTAB(32,n)art$(I) 770 IFshow=TRUE ANDLEN(art$(I))>15PRINTTAB(32,n);:VDU27,17:PRINT" ";RIGHT$(art$(I),13)ELSEIFshow=TRUE PRINTTAB(32,n)art$(I) 780 IFinfo(1,musnum)AND1PRINTTAB(48,n)"CD "ELSEIFinfo(1,musnum)AND2PRINTTAB(48,n)"TAPE "ELSEPRINTTAB(48,n)"RECORD" 790 IFinfo(1,musnum)AND64PRINTTAB(55,n)"Album "ELSEPRINTTAB(55,n)"Single" 800 PRINTTAB(68,n)SPC10TAB(68,n);((I-1)DIVinfo(3,musnum))+1;" / ";((I-1)MODinfo(3,musnum))+1 810 IFINSTR(tit$(I),sertit$)ORINSTR(art$(I),serart$)VDU18 820 n=n+1 830 NEXT 840 ENDPROC 850 DEF PROCsearch 860 PRINTTAB(15,1)"SEARCH BY : (T)itle (A)rtist (F)ormat (Q)uit " 870 sertit$="":serart$="":serfor=0 880 G$=GET$ 890 IFG$="T"PRINTTAB(15,1)SPC65TAB(15,1)"SEARCH BY TITLE FOR ";:INPUTLINEsertit$:PROCfile:GOTO940 900 IFG$="A"PRINTTAB(15,1)SPC65TAB(15,1)"SEARCH BY ARTIST FOR ";:INPUTLINEserart$:PROCfile:GOTO940 910 IFG$="F"PROCformat:GOTO940 920 IFG$="Q"GOTO230 930 GOTO880 940 INFO=1 950 PRINTTAB(1,3)SPC65TAB(1,3)"Searching for ";CHR$17; 960 IFserfor=1PRINT"CD's";ELSEIFserfor=2PRINT"Tapes";ELSEIFserfor=4PRINT"Records";ELSEIFserfor=32PRINT"Singles";ELSEIFserfor=64PRINT"Albums"; 970 IFsertit$<>""PRINTsertit$;ELSE IFserart$<>""PRINTserart$; 980 PRINTCHR$18;"..." 990 PRINTTAB(50,3)"Searching...":FORI=1TO200:info(6,I)=0:NEXT 1000 fpos=1 1010 REPEAT 1020 K=OPENIN(f$(VAL(MID$(file$,fpos,1)))) 1030 IF EOF#K GOTO1160 1040 PRINTTAB(50,3)f$(VAL(MID$(file$,fpos,1)));" " 1050 REPEAT 1060 info(1,INFO)=BGET#K:info(2,INFO)=BGET#K:info(3,INFO)=BGET#K 1070 info(4,INFO)=PTR#K:info(5,INFO)=VAL(MID$(file$,fpos,1)) 1080 loop=info(2,INFO)*info(3,INFO) 1090 IF sertit$<>"" OR serart$<>"" PROCsertitart:GOTO1140 1100 IFinfo(1,INFO)AND32PROCsingle 1110 IFinfo(1,INFO)AND64PROCalbum 1120 FORI=1TOloop:INPUT#K,dummy$:NEXT 1130 IFinfo(1,INFO)ANDserfor INFO=INFO+1 1140 MOVE403,99:PLOT102,405,101:PRINTTAB(68,3)SPC12TAB(68,3)"Matched ";CHR$17;INFO-1;CHR$18 1150 UNTILEOF#K 1160 CLOSE#0 1170 fpos=fpos+1 1180 UNTILfpos=LEN(file$)+1 1190 INFO=INFO-1 1200 tottrk=0:FORI=1TOINFO:tottrk=tottrk+(info(2,I)*info(3,I)):NEXT 1210 IFINFO=0PRINTTAB(1,3)SPC65:ENDPROC 1220 trklist=0:musnum=0:ay=1:sy=1:gy=80 1230 IFtrklist=0PRINTTAB(15,1)"OPTIONS : (Up/Down) scroll (ENTER) track list (S)ort (Q)uit ":PRINTTAB(1,3)SPC67TAB(1,3);CHR$17;:GOTO1270 1240 PRINTTAB(15,1)"OPTIONS : (Up/Down) scroll (ENTER) return to list (Q)uit ":PRINTTAB(1,3)SPC67TAB(1,3)"Track list : '"CHR$17; 1250 IFinfo(1,musnum)AND64PRINTatit$CHR$18"'"ELSEPRINTindtit$(musnum)CHR$18"'" 1260 GOTO1310 1270 IFserfor=1PRINT"CD";ELSEIFserfor=2PRINT"Tape";ELSEIFserfor=4PRINT"Record";ELSEIFserfor=32PRINT"Singles";ELSEIFserfor=64PRINT"Albums"; 1280 IFserfor>0PRINTCHR$18" catalogue :"; 1290 IFsertit$<>""PRINTCHR$18"Items matching '";CHR$17sertit$CHR$18;"'";ELSEIFserart$<>""PRINTCHR$18"Items matching '";CHR$17serart$CHR$18;"'"; 1300 IFserfor>0PRINT;" (";tottrk;" tracks)" 1310 show=FALSE:IFtrklist=0PROCscroll1 ELSEay=1:sy=1:gy=80:PROCscroll2 1320 MOVE1,gy:PLOT102,478,gy+7 1330 G=GET 1340 MOVE1,gy:PLOT102,478,gy+7 1350 IFtrklist=0ANDG=240ANDgy<80ay=ay-1:gy=gy+8:GOTO1590 1360 IFtrklist=0ANDG=241ANDgy>8ANDay1sy=sy-1:ay=ay-1:PROCscroll1:GOTO1590 1380 IFtrklist=0ANDG=241ANDgy=8ANDay0ANDG=240ANDgy<80ay=ay-1:gy=gy+8:GOTO1590 1400 IFtrklist>0ANDG=241ANDgy>8ANDay0ANDG=240ANDgy=80ANDay>1sy=sy-1:ay=ay-1:PROCscroll2:GOTO1590 1420 IFtrklist>0ANDG=241ANDgy=8ANDay10sy=sy-10:ay=ay-10:PROCscroll1:GOTO1590 1440 IFtrklist=0ANDG=248ANDsy<10sy=1:ay=1:gy=80:PROCscroll1:GOTO1590 1450 IFtrklist=0ANDG=249ANDsy+10=INFO sy=INFO:ay=INFO:gy=80:PROCscroll1:GOTO1590 1470 IFtrklist>0ANDG=248ANDsy>10sy=sy-10:ay=ay-10:PROCscroll2:GOTO1590 1480 IFtrklist>0ANDG=248ANDsy<10sy=1:ay=1:gy=80:PROCscroll2:GOTO1590 1490 IFtrklist>0ANDG=249ANDsy+100ANDG=249ANDsy+10>=trklist sy=trklist:ay=trklist:gy=80:PROCscroll2:GOTO1590 1510 IFG=81ENDPROC 1520 IFG=13ANDtrklist=0ANDay<=INFO day=ay:dsy=sy:dgy=gy:trklist=info(2,ay)*info(3,ay):musnum=ay:PROCload:GOTO1230 1530 IFG=13ANDtrklist>0ay=day:sy=dsy:gy=dgy:trklist=0:GOTO1230 1540 IFG=242ANDtrklist=0show=FALSE:PROCscroll1 1550 IFG=242ANDtrklist>0show=FALSE:PROCscroll2 1560 IFG=243ANDtrklist=0show=TRUE:PROCscroll1 1570 IFG=243ANDtrklist>0show=TRUE:PROCscroll2 1580 IFG=83ANDtrklist=0PROCsort:PROCscroll1:GOTO1590 1590 GOTO1320 1600 END 1610 DEF PROCsingle 1620 info(6,INFO)=1:info(7,INFO)=1 1630 IFinfo(1,INFO)AND8INPUT#K,indart$(INFO),indtit$(INFO):loop=loop-1:ENDPROC 1640 INPUT#K,indtit$(INFO),indart$(INFO):loop=loop*2-1:ENDPROC 1650 DEF PROCalbum 1660 IFinfo(1,INFO)AND8INPUT#K,indtit$(INFO),indart$(INFO):ENDPROC 1670 INPUT#K,indtit$(INFO):indart$(INFO)="Various":loop=loop*2:ENDPROC 1680 DEF PROCsertitart 1690 indart$(INFO)="":indtit$(INFO)="" 1700 IFinfo(1,INFO)AND32GOTO1730 1710 IFinfo(1,INFO)AND8INPUT#K,indtit$(INFO),indart$(INFO):GOTO1740 1720 IFinfo(1,INFO)AND16INPUT#K,indtit$(INFO):indart$(INFO)="Various":GOTO1740 1730 IFinfo(1,INFO)AND8INPUT#K,indart$(INFO) 1740 art$=indart$(INFO) 1750 IFINSTR(indtit$(INFO),sertit$)INFO=INFO+1:FORJ=1TO5:info(J,INFO)=info(J,INFO-1):NEXT 1760 IFsertit$<>""GOTO1790 1770 IFinfo(1,INFO)AND8IFinfo(1,INFO)AND32GOTO1790 1780 IFINSTR(indart$(INFO),serart$)INFO=INFO+1:FORJ=1TO5:info(J,INFO)=info(J,INFO-1):NEXT:GOTO1870 1790 FORI=1TOinfo(2,INFO) 1800 FORA=1TOinfo(3,INFO) 1810 IFinfo(1,INFO)AND8INPUT#K,indtit$(INFO):indart$(INFO)=art$ ELSEINPUT#K,indtit$(INFO),indart$(INFO) 1820 IFINSTR(indtit$(INFO),sertit$)info(6,INFO)=I:info(7,INFO)=A:INFO=INFO+1:FORJ=1 TO 5:info(J,INFO)=info(J,INFO-1):NEXT 1830 IFINSTR(indart$(INFO),serart$)info(6,INFO)=I:info(7,INFO)=A:INFO=INFO+1:FORJ=1 TO 5:info(J,INFO)=info(J,INFO-1):NEXT 1840 NEXT 1850 NEXT 1860 ENDPROC 1870 IFinfo(1,INFO-1)AND16loop=loop*2 1880 FORI=1TOloop:INPUT#K,dummy$:NEXT 1890 ENDPROC 1900 DEF PROCsinalb 1910 DEF PROCload 1920 PRINTTAB(50,3)"Loading..." 1930 K=OPENIN(f$(info(5,musnum))) 1940 PTR#K=info(4,musnum) 1950 IFinfo(1,musnum)AND32GOTO1970 1960 INPUT#K,atit$ 1970 IFinfo(1,musnum)AND8INPUT#K,dummy$ 1980 FORI=1TOtrklist 1990 IFinfo(1,musnum)AND16INPUT#K,tit$(I),art$(I)ELSEINPUT#K,tit$(I):art$(I)=indart$(musnum) 2000 NEXT 2010 CLOSE#0 2020 PRINTTAB(50,3)SPC10 2030 ENDPROC 2040 DEF PROCsort 2050 PRINTTAB(15,1)"SORT BY : (T)itle (A)rtist (Q)uit " 2060 G$=GET$ 2070 IFG$="A"titart=1:GOTO2110 2080 IFG$="T"titart=2:GOTO2110 2090 IFG$="Q"ENDPROC 2100 GOTO2060 2110 PRINTTAB(50,3)"Sorting..." 2120 E%=LOG(INFO)/LOG(2) 2130 F%=2^E% 2140 FORG%=1TOE% 2150 F%=F%/2:M%=INFO-F% 2160 REPEAT:C%=0 2170 FORN%=1TOM% 2180 IFtitart=1ANDASC(LEFT$(indart$(N%),1))>ASC(LEFT$(indart$(N%+F%),1))PROCswop:C%=1 2190 IFtitart=2ANDASC(LEFT$(indtit$(N%),1))>ASC(LEFT$(indtit$(N%+F%),1))PROCswop:C%=1 2200 NEXT 2210 M%=M%-1 2220 UNTILC%=0 2230 NEXT 2240 PRINTTAB(50,3)SPC10 2250 ENDPROC 2260 DEF PROCswop 2270 FORI=1TO7:info(I,0)=info(I,N%):info(I,N%)=info(I,N%+F%):info(I,N%+F%)=info(I,0):NEXT 2280 tit$=indtit$(N%):indtit$(N%)=indtit$(N%+F%):indtit$(N%+F%)=tit$ 2290 art$=indart$(N%):indart$(N%)=indart$(N%+F%):indart$(N%+F%)=art$ 2300 ENDPROC 2310 DEF PROCadd 2320 INFO=1 2330 info(1,0)=0:PRINTTAB(15,1)"FORMAT/FILE : (C)D (T)ape (S)ingle record (A)lbum record" 2340 G$=GET$ 2350 IFG$="C"info(1,0)=info(1,0)+1:file=1:GOTO2400 2360 IFG$="T"info(1,0)=info(1,0)+2:file=2:GOTO2400 2370 IFG$="S"info(1,0)=info(1,0)+4:file=3:GOTO2400 2380 IFG$="A"info(1,0)=info(1,0)+4:file=4:GOTO2400 2390 GOTO2340 2400 PRINTTAB(15,1)"TYPE : (A)lbum (S)ingle " 2410 G$=GET$ 2420 IFG$="A"info(1,0)=info(1,0)+64:GOTO2450 2430 IFG$="S"info(1,0)=info(1,0)+32:GOTO2450 2440 GOTO2410 2450 PRINTTAB(15,1)"ARTISTS : (O)ne artist (C)ompilation " 2460 G$=GET$ 2470 IFG$="O"info(1,0)=info(1,0)+8:GOTO2500 2480 IFG$="C"info(1,0)=info(1,0)+16:GOTO2500 2490 GOTO2460 2500 PRINTTAB(15,1)SPC65TAB(15,1)"NUMBER OF SIDES ";:INPUTinfo(2,0) 2510 PRINTTAB(15,1)SPC65TAB(15,1)"NUMBER OF TRACKS PER SIDE ";:INPUTinfo(3,0) 2520 IFinfo(1,0)AND64PRINTTAB(15,1)SPC65TAB(15,1)"Album name ";:INPUTLINEindtit$(0) 2530 IFinfo(1,0)AND8PRINTTAB(15,1)SPC65TAB(15,1)"Artiste's name ";:INPUTLINEindart$(0) 2540 FORI=1TOinfo(2,0) 2550 FORA=1TOinfo(3,0) 2560 PRINTTAB(15,1)SPC65TAB(15,1)"Side ";I;"/Track ";A;" Title ";:INPUTLINEindtit$(INFO) 2570 PRINTTAB(0,2)SPC80:MOVE0,108:DRAW479,108:MOVE80,108:DRAW80,127 2580 IFinfo(1,0)AND16PRINTTAB(15,1)SPC65TAB(15,1)"Side ";I;"/Track ";A;" Artiste ";:INPUTLINEindart$(INFO) 2590 INFO=INFO+1 2600 NEXT 2610 NEXT 2620 INFO=1 2630 PRINTTAB(50,3)"Saving index..." 2640 ONERRORCLOSE#0:K=OPENOUT(f$(file)):GOTO2680 2650 K=OPENUP(f$(file)) 2660 IF EOF#K GOTO2680 2670 REPEAT:dummy=BGET#K:UNTILEOF#K 2680 ONERRORCLOSE#0:END 2690 BPUT#K,info(1,0):BPUT#K,info(2,0):BPUT#K,info(3,0) 2700 IFinfo(1,0)AND64PRINT#K,indtit$(0) 2710 IFinfo(1,0)AND8PRINT#K,indart$(0) 2720 FORA=1TOinfo(2,0) 2730 FORJ=1TOinfo(3,0) 2740 PRINT#K,indtit$(INFO) 2750 IFinfo(1,0)AND16PRINT#K,indart$(INFO) 2760 INFO=INFO+1 2770 NEXT 2780 NEXT 2790 CLOSE#0 2800 PRINTTAB(50,3)SPC15 2810 ENDPROC 2820 DEF PROCERROR 2830 IFERR<>222 CLS:PRINT"An error has occured...Program aborted."''"* Type RUN and press ENTER to re-start the program...":END 2840 CLS:PRINT"The file '";f$(VAL(MID$(file$,fpos,1)));"' is not in the memory."''"Either load this file from disk now and re-run the program (press FUNCTION-L),"'"or press any other key to re-run the program...":G=GET:RUN