This makes a popup of all the songs you've ever played. You'll need Winamp 2.91 and the plug-in to make them work together. This is beta quality, as such, be careful using it. You probably won't even want it... Ok, the code: In aliases: Code: pwamp { return $right($gettok($1-,1,58),1) $+ $chr(58) $+ $gettok($1-,2,58) } udur { return $remove($replace($replace($replace($replace($replace($replace($replace($replace($replace($replace($duration($1),secs,s),mins,m),hrs,h),min,m),hrs,h),hr,h),sec,s),days,d),day,d),wks,w),$chr(32)) } dmp3-n { if ($2 == [Connecting] || $2 == prebuffering || $2 == [Buffer: || $1 < 1) { .halt } if (%mp3.lastplay == $2-) { if (%mp3.lastlen != $1) { set %mp3.lastlen $1 .halt } } if (%mp3.lastplay = $2-) { halt } if ($1 < 30) { halt } set %mp3.lastplay $2- set %mp3.lastlen $1 if ($hfind(%mp3.hash,$pwamp($2-)).data = $null) { ; we found no entry, go on and add it hadd %mp3.hash %mp3.num $pwamp($2-) inc %mp3.num } { if ($read(%mp3.recent,s,$pwamp($2-))) { return } var %i = 0 while (%i < $chan(0)) { inc %i if ((#mp3 iswm $chan(%i)) || (#playmp3 iswm $chan(%i)) || (#derfy iswm $chan(%i))) { msg $chan(%i) %derf.front .;: $left($gettok($2-,1,58),$calc($len($gettok($2-,1,58))-1)) :;. L: $+ $udur($1) P: $+ %mp3.played - Type '!mp3info $hfind(%mp3.hash,$pwamp($2-),1).data $+ ' for file info. } } } $addrecent($pwamp($2-)) inc %mp3.played 1 inc %mp3.totaltime $1 } displast { msg $active %derf.front .;: $pwamp(%mp3.lastplay) :;. L: $+ $udur(%mp3.lastlen) P: $+ %mp3.played - Type '!mp3info $hfind(%mp3.hash,$pwamp(%mp3.lastplay),1).data $+ ' for detailed info. } playwmp { if ($1) { run %winamp " $+ $hget(%mp3.hash,$1) $+ " } } createnewalias { write -c %mph menu channel $chr(123) write %mph mp3s set %cna.hashnum 1 set %cna.popmin 1 set %cna.hashmax %cna.hashmaxadd + 1 :loop ; i could only think of using a loop to pull this off! write %mph . $+ %cna.popmin $+ - $+ %cna.hashmax while (%cna.hashnum <= %cna.hashmax) { if (%cna.hashnum > $hget(%mp3.hash,0).item) { break } ; we reached the max item in the hash; abort! if ($exists($hget(%mp3.hash,%cna.hashnum)) == $false) { write %mph .. $+ %cna.hashnum - $chr(32) $+ $chr(58) $+ nothing inc %cna.hashnum continue } write %mph .. $+ %cna.hashnum - $nopath($hget(%mp3.hash,%cna.hashnum)) $+ $chr(58) $+ playwmp %cna.hashnum inc %cna.hashnum } if (%cna.hashnum <= $hget(%mp3.hash,0).item) { ; if there's more data to be gotten... set %cna.hashmax $calc(%cna.hashnum + %cna.hashmaxadd) set %cna.popmin $calc(%cna.popmin + %cna.popminadd) ; set the max to %hashmax more than the current number and... goto loop ; do it better! } write %mph $chr(125) .reload -rs %mph } checkmp3 { if (%SMP3.MDR.0 isin $hget(%mp3.hash,$1)) { return is } if (%SMP3.MDR.1 isin $hget(%mp3.hash,$1)) { return is } if (%SMP3.MDR.2 isin $hget(%mp3.hash,$1)) { return is } if (%SMP3.MDR.3 isin $hget(%mp3.hash,$1)) { return is } return is not } addrecent { if (%mp3.recentcount > 40) { set %mp3.recentcount 1 } write -l $+ %mp3.recentcount %mp3.recent $1- inc %mp3.recentcount } reindex { unset %mp3x.* %mp3x.reindex = 1 %mp3x.orighash = $hget(%mp3.hash,0).item while (%mp3x.reindex <= $hget(%mp3.hash,0).item) { if ($exists($hget(%mp3.hash,%mp3x.reindex)) == $true) { inc %mp3x.reindex continue } else { %mp3x.stepping = %mp3x.reindex while ($exists($hget(%mp3.hash,%mp3x.stepping)) == $false) { inc %mp3x.stepping } hadd %mp3.hash %mp3x.reindex $hget(%mp3.hash,%mp3x.stepping) hdel %mp3.hash %mp3x.stepping } } set %mp3.num $calc(%mp3x.reindex - 1) } In pop-ups: Code: mp3 stuff .Settings ..x - Starting value(x-y) ...5:set %cna.popminadd 5 | set %cna.hashmaxadd $calc(%cna.popminadd - 1) ...10:set %cna.popminadd 10 | set %cna.hashmaxadd $calc(%cna.popminadd - 1) ...20:set %cna.popminadd 20 | set %cna.hashmaxadd $calc(%cna.popminadd - 1) ...30:set %cna.popminadd 30 | set %cna.hashmaxadd $calc(%cna.popminadd - 1) ...?:set %cna.popminadd $$?="Enter value:" | set %cna.hashmaxadd $calc(%cna.popminadd - 1) ;..y - Ending value(x-y) ;...%cna.hashmaxadd:set %cna.hashmaxadd $calc(%cna.popminadd - 1) .- .Recreate mp3 popups:createnewalias ;.- ;.Reload %mph:.reload -rs %mph ;.- ;.Unload %mph:.unload -rs %mph - Reindex %mp3.hash .You sure?:reindex And remotes: Code: on *:text:!mp3info*:#:{ if ($2 && $hget(%mp3.hash,$2)) { .write -c $nick $+ -mp3inforeq.txt .notice $nick Info for file number $2 $+ : .write $nick $+ -mp3inforeq.txt .notice $nick Filename: $hget(%mp3.hash,$2) .write $nick $+ -mp3inforeq.txt .notice $nick Size: $size($file($hget(%mp3.hash,$2)).size) if ($checkmp3($2) = is) { .write $nick $+ -mp3inforeq.txt .notice $nick This file $checkmp3($2) obtainable via SNES. .write $nick $+ -mp3inforeq.txt .notice $nick Type '!SNES $nopath($hget(%mp3.hash,$2)) $+ ' to request it. .play -c $nick $nick $+ -mp3inforeq.txt 2000 return } .write $nick $+ -mp3inforeq.txt .notice $nick This file $checkmp3($2) obtainable via SNES. .write $nick $+ -mp3inforeq.txt .notice $nick Type '/ctcp $me get $2 $+ ' to have me DCC you this file. .play -c $nick $nick $+ -mp3inforeq.txt 2000 } } ctcp *:get:?:{ if ($send(0) >= 2) { ignore -ku10 $wildsite | .notice $nick Max sends reached, try again later. | return } if ($2 && $hget(%mp3.hash,$2)) { if ($checkmp3($2) == is) { .write -c $nick $+ -dccget.txt .notice $nick This file is available via SNES, please use it instead. .write $nick $+ -dccget.txt .notice $nick Type '!SNES $nopath($hget(%mp3.hash,$2)) $+ ' to request it. .play -c $nick $nick $+ -dccget.txt 2000 halt } .notice $nick Sending $hget(%mp3.hash,$2) dcc send $nick " $+ $hget(%mp3.hash,$2) $+ " } }