#module
#defcfunc ppeke int pal1
t=""
poke t,0,pal1
return t
#global
#module
#defcfunc getmp3tag str fn,int pal2
sdim tt,1025
exist fn
ss=strsize
if strsize=-1:return ""
if getpath(fn,2)!".mp3":return ""
bload ""+fn,tt,1024,0
A=(peek (tt,0)=255&peek (tt,1)=16*15+11)
B=(""+ppeke (peek (tt,0))+""+ppeke (peek (tt,1))+""+ppeke (peek (tt,2))+""="ID3")
C=(""+ppeke (peek (tt,9))+""+ppeke (peek (tt,10))+""+ppeke (peek (tt,11))+""+ppeke (peek (tt,12))+""+ppeke (peek (tt,13))+""="vTIT2")
if pal2=0{
if ((A|B)!C){
gosub *footerload
return a
}
if B&C=1{
a=""
st=peek (tt,17)
s=peek (tt,21)
s2=peek (tt,22)
if s>224&s2>224:gosub *footerload:return a
repeat st-1
a+=ppeke (peek (tt,21+cnt))
loop
return a
}
}
if pal2=1{
repeat 1020
if ppeke (peek (tt,cnt))="T"{
c=cnt
ff=""+ppeke (peek (tt,c))+""+ppeke (peek (tt,c+1))+""+ppeke (peek (tt,c+2))+""+ppeke (peek (tt,c+3))+""
if ff="TPE1"{
a=""
st=peek (tt,c+7)
repeat st-1
a+=ppeke (peek (tt,c+11+cnt))
loop
break
}
}
loop
return a
}
return ""
*footerload
bload ""+fn,tt,1024,ss-1024
breakf=0
repeat 1024
if ppeke (peek (tt,cnt))="T"{
if ppeke (peek (tt,cnt+1))="A"&ppeke (peek (tt,cnt+2))="G"{
P=cnt+3
repeat 1000
f=(peek (tt,p+cnt)=' ' & peek (tt,p+cnt+1)=' ' & peek (tt,p+cnt+2)=' ')
if peek (tt,p+cnt)=0|f=1{
a=""
repeat cnt
a+=ppeke (peek (tt,P+cnt))
loop
breakf=1
break
}
loop
}
}
if breakf=1:break
if cnt=1023 :a="":break
loop
return
#global