alias bget { bread $shortfn($$1) $$2 $$3 &bget | if ($prop == text) return $ascii(&bget,1,$bvar(&bget,0)).bvar | else return $bvar(&bget,1,$bvar(&bget,0)) }
alias id3v2 {
if ($bvar(&return,0)) bunset &return
var %file = $$1-,%check = $bget($shortfn(%file),0,10)
if (73 68 51 3 0 0* iswm %check) {
if ($gettok($gettok(%check,9-10,32),1,32)) var %size2 = $calc((128 * $gettok($gettok(%check,9-10,32),1,32)) + 10 + $gettok($gettok(%check,9-10,32),2,32))
else var %size2 = $calc($gettok($gettok(%check,9-10,32),1,32) + 10)
var %x = 10
if (!$hget(id3v2)) || ($hget(id3v2,filename) != %file) {
if (!$hget(id3v2)) hmake id3v2
else { hfree id3v2 | hmake id3v2 }
hadd id3v2 filename $$1-
while (%x <= %size2) {
bread $shortfn(%file) %x 8192 &id3v2
if ($bvar(&id3v2,1,4) != 0 0 0 0) {
var %x = $calc(%x + (($bvar(&id3v2,6,1) * 255 * 255) + ($bvar(&id3v2,7,1) * 255) + $bvar(&id3v2,8,1)) + 10)
bcopy &frame 1 &id3v2 12 $calc(($bvar(&id3v2,6,1) * 255 * 255) + ($bvar(&id3v2,7,1) * 255) + $bvar(&id3v2,8,1))
hadd -b id3v2 $bvar(&id3v2,1,4).text &frame
bunset &id3v2 &frame
bread $shortfn($$1) %x 8192 &id3v2
}
else var %x = $calc(%size2 + 1)
} }
;album/track/#/artist
if ($prop = album) var %temp = $hget(id3v2,TALB,&return)
elseif ($prop = track) var %temp = $hget(id3v2,,&return)
elseif ($prop = artist) var %temp = $hget(id3v2,TPE1,&return)
elseif ($prop = title) var %temp = $hget(id3v2,TIT2,&return)
.timerid3v2unset 1 5 /hfree id3v2
if ($bvar(&return,0) > 1) return $ascii(&return)
else return $null
} }