50 ON ERROR 70
60 CALL LINK("STOPSN")
70 ON ERROR STOP
100 CALL CLEAR
110 PRINT "LOADING PLAYER..."
120 CALL INIT
130 CALL LOAD("DSK1.TISNONLY")
135 CALL LINK("STOPSN")
140 PRINT "LOADING MUSIC..."
150 CALL LOAD("DSK1.GUILE")
160 PRINT "FINDING ADDRESS OF MUSIC..."
170 GOSUB 10000
175 CALL PEEK(A,N1,N2)
176 AD=N1*256+N2
180 PRINT "-> GOT";A;"->";AD
190 PRINT "FINDING ADDRESS OF ACTIVE.."
200 GOSUB 11000
210 PRINT "-> GOT";ACTIVE
220 PRINT "FINDING SONG INDEX PATCH..."
230 GOSUB 12000
240 PRINT "-> GOT";N;":";
250 CALL PEEK(N,N1,N2)
260 IF N1=0 AND N2=0 THEN PRINT "OK" ELSE PRINT "NOT ZERO"
270 PRINT : :
500 IF ACTIVE=0 THEN 160
505 PRINT "PRESS:"
510 PRINT "1) TO PLAY"
520 PRINT "2) TO STOP"
530 PRINT : :"FEEL FREE TO PRESS FCTN-4"
540 PRINT "AND LOOK AROUND THE PROGRAM"
550 PRINT "(MUSIC WILL CONTINUE!)"
560 PRINT "USE 'RUN 500' TO GET BACK"
570 PRINT
575 CALL PEEK(ACTIVE,A)
580 DISPLAY AT(24,1):"SONG ACTIVE:";A
590 CALL KEY(0,K,S)
600 IF K=49 THEN CALL LINK("SONGGO")
610 IF K=50 THEN CALL LINK("STOPSN")
620 GOTO 575

10000 REM FIND ADDRESS OF MUSIC TAG AND RETURN IN 'A'
10010 CALL PEEK(8196,N1,N2)::REM GET TOP OF FREE RAM
10020 N=N1*256+N2
10030 REM SEARCH TOP DOWN
10040 FOR PTR=16376 TO N STEP -8
10050 CALL PEEK(PTR,N1,N2,N3,N4,N5,N6)::REM CHECK NAME MUSIC (LOWERCASE/UPPERCASE)
10055 IF N1=109 AND N2=117 AND N3=115 AND N4=105 AND N5=99 AND N6=32 THEN 10070
10060 IF N1<>77 OR N2<>85 OR N3<>83 OR N4<>73 OR N5<>67 OR N6<>32 THEN 10100
10070 A=PTR+6::REM REPLACED THE CALL LOAD WITH THIS
10080 PTR=0
10100 NEXT PTR
10110 RETURN
11000 REM FIND ADDRESS OF SONGACTIVE, SET IT IN 'ACTIVE'
11005 REM THEN USE CALL PEEK(ACTIVE,A) AND CHECK A
11010 CALL PEEK(8196,N1,N2)::REM GET TOP OF FREE RAM
11020 N=N1*256+N2
11030 REM SEARCH TOP DOWN
11040 FOR PTR=16376 TO N STEP -8
11050 CALL PEEK(PTR,N1,N2,N3,N4,N5,N6)::REM CHECK NAME SONGGO (LOWERCASE/UPPERCASE)
11055 IF N1=115 AND N2=111 AND N3=110 AND N4=103 AND N5=103 AND N6=111 THEN 11070
11060 IF N1<>83 OR N2<>79 OR N3<>78 OR N4<>71 OR N5<>71 OR N6<>79 THEN 11100
11070 CALL PEEK(PTR+6,N1,N2)
11080 ACTIVE=N1*256+N2-7
11090 PTR=0
11100 NEXT PTR
11110 RETURN
12000 REM PATCH SONGGO WITH INDEX IN 'I' (first song is 0)
12010 CALL PEEK(8196,N1,N2)::REM GET TOP OF FREE RAM
12020 N=N1*256+N2
12030 REM SEARCH TOP DOWN
12040 FOR PTR=16376 TO N STEP -8
12050 CALL PEEK(PTR,N1,N2,N3,N4,N5,N6)::REM CHECK NAME SONGGO (LOWERCASE/UPPERCASE)
12055 IF N1=115 AND N2=111 AND N3=110 AND N4=103 AND N5=103 AND N6=111 THEN 12070
12060 IF N1<>83 OR N2<>79 OR N3<>78 OR N4<>71 OR N5<>71 OR N6<>79 THEN 12100
12070 CALL PEEK(PTR+6,N1,N2)
12080 N=N1*256+N2+84
12090 REM REMOVED CALL LOAD, WE JUST WANT TO READ IT
12095 PTR=0
12100 NEXT PTR
12110 RETURN

