mp3.mrc — File Browser

mp3.mrcv3.01 / mp3.mrcv3.01 / mp3.mrc

mp3.mrc — 20.44 KB — Download this file

; script  ( mp3.mrc       )
; version ( 3.01a         )
; author  ( erawtic       )
; release ( 10/27/98      )
; file    ( main routines )

; When you start mIRC
on *:start:{ unset %m %m.1 %m.2 %m.3 %m.4 %mp3* }

; When you load the addon
on *:load:{
  if ($version < 5.4) {
    mp3.echo *** You must have mIRC v5.4 or higher to use this addon
    .unload -rs $script
    return
  }
  mp3.echo *** Loading script file (2 of 2)
  .load -rs $scriptdirmp3a.mrc
  write -c $scriptdirmp3.ini
  if ($findfile($left($mircdir,3),*.mp3,0) > 0) mp3.w dir $nofile($findfile($left($mircdir,3),*.mp3,1))
  if ($findfile($left($mircdir,3),Winamp.exe,0) > 0) mp3.w player $findfile($left($mircdir,3),Winamp.exe,1)
  mp3.w show yes
  mp3.w steal no
  mp3.w request no
  mp3.w repeat no
  mp3.w shuffle yes
  if ($mp3.s(dir)) mp3.w prevdir $mp3.s(dir) $+ *.mp3
  if ($mp3.s(dir)) mp3.w last $findfile($mp3.s(dir),*.mp3,1)
  mp3.setup
}

; Echo's important stuff (yeah, right.)
alias mp3.echo {
  if ($left($active,1) == @) echo $colour(info) -si4 $1-
  else { echo $colour(info) -ai4 $1- }
}

; Finds an MP3 in the Playlist.
alias mp3.f {
  if (($window(@MP3聽Playlist) == $null) || ($1 == $null)) return
  set %m 0
  :loop
  inc %m
  if (%m > $line(@MP3聽Playlist,0,1)) return
  if ($line(@MP3聽Playlist,%m,1) == $1-) return %m
  goto loop
}

; Turns length of an MP3 into seconds.
alias mp3.t { return $calc(($gettok($1,1,109) * 60) + $remove($gettok($1,2,109),s)) }

; Checks ID3 tags for wierd characters.
alias mp3.c { if (($chr(7) isin $1-) || ($chr(8) isin $1-) || ($chr(9) isin $1-) || ($chr(10) isin $1-) || ($chr(255) isin $1-)) return $!true | return $!false }

; Reads settings from INI file.
alias mp3.s { if ($1) return $readini -n $scriptdirmp3.ini settings $1 }

; Writes settings to INI file.
alias mp3.w { if ($2) writeini $scriptdirmp3.ini settings $1 $2- }

; Returns a random MP3.
alias mp3.r { return $findfile($mp3.s(dir),*.mp3,$r(1,$findfile($mp3.s(dir),*.mp3,0))) }

; Checks to see if an MP3 contains ID3 tags.
alias mp3.tagged {
  if ($exists($1-) == $false) return
  unset %mp3.tagged
  set %m 0
  :loop
  inc %m
  if (%m > 3) goto end
  bread $shortfn($1-) $calc($lof($1-) - (129 - %m)) 1 &bvar
  set %mp3.tagged %mp3.tagged $+ $chr($bvar(&bvar,1))
  goto loop
  :end
  .timer 1 1 unset %mp3.tagged %m
  if (%mp3.tagged == TAG) return $!true
  return $!false
}

; Returns the song name of an MP3 (if its tagged).
alias mp3.song {
  if ($mp3.tagged($1-) == $false) return
  unset %mp3.song
  set %m.1 0
  :loop
  inc %m.1
  if (%m.1 > 30) goto end
  bread $shortfn($1-) $calc($lof($1-) - (126 - %m.1)) 1 &bvar
  set %mp3.song %mp3.song $+ $iif($chr($bvar(&bvar,1)) == $chr(32),^,$chr($bvar(&bvar,1)))
  goto loop
  :end
  .timer 1 1 unset %mp3.song %m.1
  return $iif($mp3.c(%mp3.song),$!false,$replace(%mp3.song,^,$chr(32),$chr(160),$chr(32),$chr(255),$chr(32)))
}

; Returns the artist name of an MP3 (if its tagged).
alias mp3.artist {
  if ($mp3.tagged($1-) == $false) return
  unset %mp3.artist
  set %m.2 0
  :loop
  inc %m.2
  if (%m.2 > 30) goto end
  bread $shortfn($1-) $calc($lof($1-) - (96 - %m.2)) 1 &bvar
  set %mp3.artist %mp3.artist $+ $iif($chr($bvar(&bvar,1)) == $chr(32),^,$chr($bvar(&bvar,1)))
  goto loop
  :end
  .timer 1 1 unset %mp3.artist %m.2
  return $iif($mp3.c(%mp3.artist),$!false,$replace(%mp3.artist,^,$chr(32),$chr(160),$chr(32),$chr(255),$chr(32)))
}

; Returns the album of an MP3 (if its tagged).
alias mp3.album {
  if ($mp3.tagged($1-) == $false) return
  unset %mp3.album
  set %m.3 0
  :loop
  inc %m.3
  if (%m.3 > 30) goto end
  bread $shortfn($1-) $calc($lof($1-) - (66 - %m.3)) 1 &bvar
  set %mp3.album %mp3.album $+ $iif($chr($bvar(&bvar,1)) == $chr(32),^,$chr($bvar(&bvar,1)))
  goto loop
  :end
  .timer 1 1 unset %mp3.album %m.3
  return $iif($mp3.c(%mp3.album),$!false,$replace(%mp3.album,^,$chr(32),$chr(160),$chr(32),$chr(255),$chr(32)))
}

; Returns the year of the album of an MP3 (if its tagged).
alias mp3.year {
  if ($mp3.tagged($1-) == $false) return
  unset %mp3.year
  set %m.4 0
  :loop
  inc %m.4
  if (%m.4 > 4) goto end
  bread $shortfn($1-) $calc($lof($1-) - (36 - %m.4)) 1 &bvar
  set %mp3.year %mp3.year $+ $iif($chr($bvar(&bvar,1)) == $chr(32),^,$chr($bvar(&bvar,1)))
  goto loop
  :end
  .timer 1 1 unset %mp3.year %m.4
  return $iif($mp3.c(%mp3.year),$!false,$replace(%mp3.year,^,$chr(32),$chr(160),$chr(32),$chr(255),$chr(32)))
}

; Finds the bitrate of an MP3.
alias mp3.bitrate {
  if (($1 == $null) || ($exists($1-) == $false)) return 0
  set %mp3.bitrate $read -l1 $1-
  if ($pos(%mp3.bitrate,RIFF,1)) return 128000
  set %mp3.bitrate $asc($mid(%mp3.bitrate,3,1))
  .timer 1 1 unset %mp3.bitrate
  if (%mp3.bitrate == $null) return 128000
  return $mp3.getbr($int($calc(%mp3.bitrate / 16)))
}
alias mp3.getbr {
  goto $iif($1 isnum 1-14,$1,0)
  :0 | return 112000
  :1 | return 32000
  :2 | return 40000
  :3 | return 48000
  :4 | return 56000
  :5 | return 64000
  :6 | return 80000
  :7 | return 92000
  :8 | return 112000
  :9 | return 128000
  :10 | return 160000
  :11 | return 192000
  :12 | return 224000
  :13 | return 256000
  :14 | return 320000
}
alias mp3.br { return $remove($mp3.bitrate($1-),000) $+ kbps }

; Finds the length of an MP3.
alias mp3.len {
  if (($1 == $null) || ($exists($1-) == $false)) return 0m0s
  else { return $mp3.dur($round($calc(($lof($1-) * .008) / $remove($mp3.bitrate($1-),000)),0))) }
}

; Finds the size of an MP3 in MB format.
alias mp3.size { if ($exists($1-)) return $round($calc($lof($1-) / 1048576),2) $+ mb }
alias mp3.size2 { if ($1 isnum) return $round($calc($1 / 1048576),2) $+ mb }

; Just shortens $duration().
alias mp3.dur { return $remove($replace($duration($1),secs,s,mins,m,hrs,h,days,d,wks,w,sec,s,min,m,hr,h,day,d,wk,w),$chr(32)) }
alias mp3.longdur {
  set %mp3.longdur $replace($1,s,sec聽,m,min聽,h,hr聽,d,day聽,w,wk聽)
  .timer 1 1 unset %mp3.longdur
  return $replace(%mp3.longdur,$chr(160),$chr(32))
}

; Just shows how to use /mp3.
alias mp3.usage {
  mp3.echo *** /mp3: Invalid parameters. Correct usage:
  mp3.echo     /mp3 <spec|rand|last|stop|list|text|player|setup> [string]
}

; Opens MP3 setup.
alias mp3.setup {
  set %mp3.win @MP3聽Setup
  window -c %mp3.win
  window -hpdf +fn %mp3.win $calc(($window(-1).w / 2) - 200) $calc(($window(-1).h / 2) - 64) 400 128 %mp3.win
  drawfill -r %mp3.win $rgb(face) 15 0 0
  drawbutton %mp3.win 1 280 58 110 25
  drawbutton %mp3.win 1 280 93 110 25
  drawtext -rc %mp3.win $rgb(text) "MS Sans Serif" 15 10 10 999 999 Directory to MP3's:
  drawtextbox %mp3.win 105 5 290 20
  if ($mp3.s(dir)) drawtext -cr %mp3.win $rgb(text) "MS Sans Serif" 15 110 8 999 999 $mp3.s(dir)
  drawtext -rc %mp3.win $rgb(text) "MS Sans Serif" 15 10 30 999 999 Path to Player:
  drawtextbox %mp3.win 105 25 290 20
  if ($mp3.s(player)) drawtext -cr %mp3.win $rgb(text) "MS Sans Serif" 15 110 28 999 999 $mp3.s(player)
  drawcheckbox %mp3.win 10 65 Show MP3's when played
  if ($mp3.s(show) == yes) {
    drawtext -cr %mp3.win $rgb(text) "Terminal" 12 11 65 999 999 没
    set %mp3.checked.1 1
  }
  drawcheckbox %mp3.win 10 85 Allow users to "steal" MP3's
  if ($mp3.s(steal) == yes) {
    drawtext -cr %mp3.win $rgb(text) "Terminal" 12 11 85 999 999 没
    set %mp3.checked.2 1
  }
  drawcheckbox %mp3.win 10 105 If exists, play MP3 on request
  if ($mp3.s(request) == yes) {
    drawtext -cr %mp3.win $rgb(text) "Terminal" 12 11 105 999 999 没
    set %mp3.checked.3 1
  }
  drawtext -orc %mp3.win $rgb(text) "MS Sans Serif" 18 325 63 999 999 OK
  drawtext -orc %mp3.win $rgb(text) "MS Sans Serif" 18 312 98 999 999 Cancel
}

; Opens GUI MP3 Player.
alias mp3.gui {
  set %mp3.win @MP3聽Player
  window -c %mp3.win
  window -hpdf +fn %mp3.win $calc(($window(-1).w / 2) - 200) $calc(($window(-1).h / 2) - 92) 400 185 %mp3.win
  drawfill -r %mp3.win $rgb(face) 15 0 0
  drawbutton %mp3.win 1 10 10 90 25
  drawbutton %mp3.win 1 10 45 90 25
  drawbutton %mp3.win 1 10 80 90 25
  drawbutton %mp3.win 1 10 115 90 25
  drawbutton %mp3.win 1 10 150 90 25
  drawdialog %mp3.win 1 115 10 275 145
  drawcheckbox %mp3.win 185 165 Repeat
  if ($mp3.s(repeat) == yes) drawtext -cr $active $rgb(text) "Terminal" 12 186 165 999 999 没
  drawcheckbox %mp3.win 270 165 Shuffle
  if ($mp3.s(shuffle) == yes) drawtext -cr $active $rgb(text) "Terminal" 12 271 165 999 999 没
  drawtext -orc %mp3.win $rgb(text) "MS Sans Serif" 18 39 15 999 999 Play
  drawtext -orc %mp3.win $rgb(text) "MS Sans Serif" 18 39 50 999 999 Stop
  drawtext -orc %mp3.win $rgb(text) "MS Sans Serif" 18 27 85 999 999 Random
  drawtext -orc %mp3.win $rgb(text) "MS Sans Serif" 18 40 120 999 999 Last
  drawtext -orc %mp3.win $rgb(text) "MS Sans Serif" 18 41 155 999 999 Exit
  if ($timer(mp3player).com == mp3.next) mp3.player $mp3.s(last)
}

; Opens GUI MP3 Playlist.
alias mp3.playlist {
  set %mp3.win @MP3聽Playlist
  window -c %mp3.win
  window -hpdfSl45 +fn %mp3.win $calc(($window(-1).w / 2) - 287) $calc(($window(-1).h / 2) - 90) 150 185 %mp3.win "MS Sans Serif" 15
  drawfill -r %mp3.win $rgb(face) 15 0 0
  drawbutton %mp3.win 1 10 10 127 25
  drawbutton %mp3.win 1 10 45 127 25
  drawbutton %mp3.win 1 10 80 127 25
  drawbutton %mp3.win 1 10 115 127 25
  drawbutton %mp3.win 1 10 150 127 25
  drawtext -orc %mp3.win $rgb(text) "MS Sans Serif" 18 57 15 999 999 Play
  drawtext -orc %mp3.win $rgb(text) "MS Sans Serif" 18 57 50 999 999 Stop
  drawtext -orc %mp3.win $rgb(text) "MS Sans Serif" 18 44 85 999 999 Random
  drawtext -orc %mp3.win $rgb(text) "MS Sans Serif" 18 47 120 999 999 Refresh
  drawtext -orc %mp3.win $rgb(text) "MS Sans Serif" 18 53 155 999 999 Close
  mp3.list
}
alias mp3.list {
  if ($window(@MP3聽Playlist) == $null) return
  .remove $scriptdirmp3.flt
  write -c $scriptdirmp3.bat @ECHO OFF
  write -n $scriptdirmp3.bat $left(%tog.mp3d,2)
  write -n $scriptdirmp3.bat DIR/A-D/S " $+ $mp3.s(dir) $+ " > " $+ $scriptdirmp3a.flt $+ "
  write -n $scriptdirmp3.bat REN " $+ $scriptdirmp3a.flt $+ " mp3.flt
  write -n $scriptdirmp3.bat EXIT
  run -n $scriptdirmp3.bat
  .timermp3list -om 200 50 mp3.list.show
  set %mp3.list.count 1
}
alias mp3.list.show {
  if ($window(@MP3聽Playlist) == $null) return
  if ($exists($scriptdirmp3.flt) == $false) { inc %mp3.list.count | if (%mp3.list.count isnum 0-200) halt }
  window -slh @making.a.list.dont.close
  clear -l @making.a.list.dont.close
  clear -l @MP3聽Playlist
  filter -fw $scriptdirmp3.flt @making.a.list.dont.close *.mp3
  set %mp3.list.inc 0
  :loop
  if (%mp3.list.inc < $line(@making.a.list.dont.close,0)) {
    inc %mp3.list.inc
    aline -l @MP3聽Playlist $gettok($line(@making.a.list.dont.close,%mp3.list.inc),6-,32)
    goto loop
  }
  window -c @making.a.list.dont.close
  .timermp3list off
  .remove $scriptdirmp3.flt
  .remove $scriptdirmp3.bat
  sline -l @MP3聽Playlist 1
}

; Makes a list of your MP3's in a text file.
alias mp3.makelist {
  set %mp3.list.ticks $ticks
  write -c $scriptdir $+ $me-list.txt
  .remove $scriptdirmp3.flt
  write -c $scriptdirmp3.bat @ECHO OFF
  write -n $scriptdirmp3.bat DIR/A-D/S " $+ $mp3.s(dir) $+ " > " $+ $scriptdirmp3a.flt $+ "
  write -n $scriptdirmp3.bat REN " $+ $scriptdirmp3a.flt $+ " mp3.flt
  write -n $scriptdirmp3.bat EXIT
  run -n $scriptdirmp3.bat
  .timermp3list -om 200 50 mp3.list.write
  set %mp3.list.count 1
}
alias mp3.list.write {
  if ($exists($scriptdirmp3.flt) == $false) { inc %mp3.list.count | if (%listmp3.count < 201) return }
  .timermp3list off
  window -hl @making.a.list.dont.close
  window -slh @dont.close.this.one.either
  clear -l @making.a.list.dont.close
  clear @dont.close.this.one.either
  filter -fw $scriptdirmp3.flt @making.a.list.dont.close *.mp3
  set %mp3.list.tsize 0
  set %mp3.list.inc 0
  :loop
  inc %mp3.list.inc
  if (%mp3.list.inc > $line(@making.a.list.dont.close,0)) goto next
  aline @dont.close.this.one.either $gettok($line(@making.a.list.dont.close,%mp3.list.inc),6-,32) $str($calc(70 - $len($gettok($line(@making.a.list.dont.close,%mp3.list.inc),6-,32))),聽) $+ $mp3.size2($remove($gettok($line(@making.a.list.dont.close,%mp3.list.inc),3,32),$chr(44)))
  set %mp3.list.tsize $calc(%mp3.list.tsize + $remove($gettok($line(@making.a.list.dont.close,%mp3.list.inc),3,32),$chr(44)))
  goto loop
  :next
  set %mp3.file $scriptdir $+ $me-list.txt
  savebuf @dont.close.this.one.either %mp3.file
  window -c @making.a.list.dont.close
  window -c @dont.close.this.one.either
  write -il1 %mp3.file , $+ $str(75,-) $+ ,
  set %mp3.temp $me's MP3 list as of $adate
  write -il2 %mp3.file $chr(124) %mp3.temp $+ $str($calc(73 - $len(%mp3.temp)),聽) $chr(124)
  set %mp3.temp Total MP3's to date: $findfile($mp3.s(dir),*.mp3,0)
  write -il3 %mp3.file $chr(124) %mp3.temp $+ $str($calc(73 - $len(%mp3.temp)),聽) $chr(124)
  set %mp3.temp Size of all MP3's: $mp3.size2(%mp3.list.tsize)
  write -il4 %mp3.file $chr(124) %mp3.temp $+ $str($calc(73 - $len(%mp3.temp)),聽) $chr(124)
  write -il5 %mp3.file $chr(124) $str(73,聽) $chr(124)
  write -il6 %mp3.file $chr(124) Filename $+ $str(61,聽) $+ Size $chr(124)
  write -il7 %mp3.file ' $+ $str(75,-) $+ '
  write -n %mp3.file $str(77,-)
  write -n %mp3.file MP3 list made by: mp3.mrc/3.0 by erawtic
  write -n %mp3.file URL: dimensional.org/~erawtic/mp3.html
  .timermp3list off
  .remove $scriptdirmp3.bat
  .remove $scriptdirmp3.flt
  mp3.echo *** MP3 list ( $+ %mp3.file $+ ) made in $round($calc(($ticks - %mp3.list.ticks) / 1000),3) second(s)
  unset %mp3.list.*
}

; Shows played MP3 in the GUI MP3 Player.
alias mp3.player {
  if (($window(@MP3聽Player) == $null) || ($1 == $null)) return
  set %mp3.win @MP3聽Player
  mp3.clear
  drawtext -rc %mp3.win $rgb(0,0,200) "MS Sans Serif" 15 120 20 265 999 $nopath($1-)
  drawtext -rc %mp3.win $rgb(text) "MS Sans Serif" 15 120 45 265 999 $iif($mp3.tagged($1-) && $mp3.artist($1-),$mp3.artist($1-),-)
  drawtext -rc %mp3.win $rgb(text) "MS Sans Serif" 15 120 60 265 999 $iif($mp3.tagged($1-) && $mp3.song($1-),$mp3.song($1-),-)
  drawtext -rc %mp3.win $rgb(text) "MS Sans Serif" 15 120 75 265 999 $iif($mp3.tagged($1-) && $mp3.album($1-),$mp3.album($1-),-)
  drawtext -rc %mp3.win $rgb(text) "MS Sans Serif" 15 120 90 265 999 $iif($mp3.tagged($1-) && $mp3.year($1-),$mp3.year($1-),-)
  drawtext -rc %mp3.win $rgb(text) "MS Sans Serif" 15 120 115 265 999 $mp3.longdur($mp3.len($1-))
  drawtext -rc %mp3.win $rgb(text) "MS Sans Serif" 15 120 130 265 999 $mp3.br($1-)
}

; Stops an MP3
alias mp3.stop { if ($mp3.s(player)) run -n $mp3.s(player) Stopped }

; Shows an MP3 to the active window if its on.
alias mp3.show {
  if (($1 == $null) || ($exists($1-) == $false)) return
  if (($left($active,1) == @) || ($replace($active,$chr(32),!) == Status!Window)) set %mp3.com echo -si4
  else { set %mp3.com say }
  if ($mp3.tagged($1-)) {
    if (($mp3.song($1-)) && ($mp3.artist($1-))) set %mp3.show $mp3.artist($1-) - $mp3.song($1-)
    else { goto next }
    if (($mp3.album($1-)) && ($mp3.year($1-))) set %mp3.show %mp3.show ( $+ $mp3.album($1-) - $mp3.year($1-) $+ )
  }
  else {
    :next
    set %mp3.show $nopath($1-)
  }
  set %mp3.show mp3, %mp3.show .. $+ $mp3.len($1-) $+ @ $+ $mp3.br($1-) [ $+ $mp3.size($1-) $+ ]
  .timer 1 1 unset %mp3.com %mp3.show
  %mp3.com %mp3.show
}

; Clears MP3 Player when you play another song.
alias mp3.clear { if ($window(@MP3聽Player)) drawrect -rf @MP3聽Player $rgb(face) 1 117 12 270 140 }

; For shuffle or repeat, opens another song.
alias mp3.next {
  if ($window(@MP3聽Player) == $null) return
  if ($mp3.s(repeat) == yes) set %mp3.play $mp3.s(last)
  elseif ($mp3.s(shuffle) == yes) set %mp3.play $mp3.r
  run -n $mp3.s(player) " $+ %mp3.play $+ "
  mp3.player %mp3.play
  mp3.w last %mp3.play
  .timermp3player 1 $mp3.t($mp3.len(%mp3.play)) mp3.next
}

; /mp3 alias (main routine)
; /mp3 <spec|rand|last|stop|list|text|player|setup> [string]
alias mp3 {
  if ($1 == $null) mp3.usage
  elseif ($1 == setup) mp3.setup
  elseif ($left($1,4) == spec) {
    if ($2) {
      set %mp3.find $iif( * isin $2-,$replace($2-,$chr(32),*), [ [ * ] $+ [ $replace($2-,$chr(32),*) ] $+ [ * ] ] )
      if ($findfile($mp3.s(dir),%mp3.find,1) == 0) mp3.echo *** No files found matching %mp3.find
      else {
        set %mp3.play $findfile($mp3.s(dir),%mp3.find,1)
        .timermp3player off
        run -n $mp3.s(player) " $+ %mp3.play $+ "
        if ($mp3.s(show) == yes) mp3.show %mp3.play
        if ($window(@MP3聽Player)) mp3.player %mp3.play
        mp3.w last %mp3.play
        unset %mp3.find %mp3.play
      }
    }
    else {
      set %mp3.play $$dir="Select MP3 to play" $mp3.s(prevdir)
      .timermp3player off
      run -n $mp3.s(player) " $+ %mp3.play $+ "
      if ($mp3.s(show) == yes) mp3.show %mp3.play
      if ($window(@MP3聽Player)) mp3.player %mp3.play
      mp3.w last %mp3.play
      mp3.w prevdir $nofile(%mp3.play) $+ *.mp3
      unset %mp3.play
    }
  }
  elseif ($left($1,3) == ran) {
    .timermp3player off
    set %mp3.play $mp3.r
    run -n $mp3.s(player) " $+ %mp3.play $+ "
    if ($mp3.s(show) == yes) mp3.show %mp3.play
    if ($window(@MP3聽Player)) mp3.player %mp3.play
    mp3.w last %mp3.play
    unset %mp3.play
  }
  elseif ($left($1,4) == last) {
    if ($exists($mp3.s(last)) == $false) mp3.echo *** Error playing last file (doesn't exist)
    else {
      .timermp3player off
      run -n $mp3.s(player) " $+ $mp3.s(last) $+ "
      if ($mp3.s(show) == yes) mp3.show $mp3.s(last)
      if ($window(@MP3聽Player)) mp3.player %mp3.play
    }
  }
  elseif ($left($1,4) == stop) mp3.stop
  elseif (($left($1,4) == play) || ($left($1,3) == gui)) mp3.gui
  elseif (($left($1,4) == list) || ($left($1,4) == show)) mp3.playlist
  elseif (($left($1,4) == make) || ($left($1,3) == txt) || ($left($1,4) == text)) mp3.makelist
  elseif ($left($1,4) == help) mp3.help
  else { mp3.usage }
}

; GUI stuff for making things easier (yes, i'm lazy).
; You can use this crap if you want.

;/drawbutton @win <thick> <x y w h>
alias drawbutton {  
  drawrect -r $1 $rgb(face) $2 $calc($3 + 1) $calc($4 + 1) $5-6
  drawrect -r $1 $rgb(shadow) $2-4 $calc($5 - 1) $calc($6 - 1)
  drawrect -r $1 $rgb(hilight) $2 $3-6 
  drawline $1 1 $2 $calc($3 + $2) $calc($4 + $6) $calc($3 + $5) $calc($4 + $6)
  drawline $1 1 $2 $calc($3 + $5) $calc($4 + $6) $calc($3 + $5) $calc($4 + $iif($2 == 1,0,$2))
}

;/drawbuttondown @win <thick> <x y w h>
alias drawbuttondown {
  drawrect -r $1 $rgb(hilight) $2-4 $5 $6
  drawrect -r $1 $rgb(face) $2-4 $calc($5 - 1) $calc($6 - 1)
  drawline $1 1 $2 $3 $4 $3 $calc($4 + $6) $3 $4 $calc($3 + $5) $4
  drawline -r $1 $rgb(shadow) $2 $calc($3 + $2) $calc($4 + $2) $calc($3 + $2) $calc(($4 + $6) - $2) $calc($3 + $2) $calc($4 + $2) $calc(($3 + $5) - $2) $calc($4 + $2)
}

;/drawtextbox @win <x y w h>
alias drawtextbox {
  drawrect -f $1 0 1 $2-5
  drawline $1 1 1 $2 $3 $2 $calc($3 + $5) $2 $3 $calc($2 + $4) $3
  drawline -r $1 $rgb(face) 1 $2 $calc(($5 + $3) - 1) $calc(($4 + $2) - 1) $calc(($5 + $3) - 1) $calc(($4 + $2) - 1) $calc($3 + 1) $calc(($4 + $2) - 1) $calc(($5 + $3) - 1)
}

;/drawdialog @win <thick> <x y w h>
alias drawdialog {
  drawrect -r $1 $rgb(hilight) $2-6 
  drawrect -r $1 $rgb(shadow) $2 $calc($3 - $2) $calc($4 - $2) $5 $6 
}

;/drawcheckbox @win <x y> [text]
alias drawcheckbox {
  drawrect -f $1 0 1 $2 $3 10 10
  drawline $1 1 1 $2 $3 $2 $calc($3 + 10) $2 $3 $calc($2 + 10) $3
  drawline -r $1 $rgb(face) 1 $2 $calc((10 + $3) - 1) $calc((10 + $2) - 1) $calc((10 + $3) - 1) $calc((10 + $2) - 1) $calc($3 + 1) $calc((10 + $2) - 1) $calc((10 + $3) - 1)
  if ($4) drawtext -cr $1 $rgb(text) "MS Sans Serif" 15 $calc($2 + 15) $calc($3 - 1) 999 999 $strip($4-)
}

; When someone attempts to get an MP3 from you (if on).
on *:TEXT:*:#:{
  if ($mp3.s(steal) == no) return
  set %mp3.temp ! $+ $me
  if ((($1 == $left($me,$len($1))) || ($1 == %mp3.temp)) && (*mp3 iswm $2-) && ($findfile($mp3.s(dir),$2-,0) > 0)))) {
    dcc send $nick $findfile($mp3.s(dir),$2-,1)
    .notice $nick Sending $findfile($mp3.s(dir),$2-,1) ( $+ $mp3.size($findfile($mp3.s(dir),$2-,1)) $+ ) as requested. Enjoy.
  }
}

; When someone plays an MP3 you have and request is on,
; it will play (if on).
ctcp *:*:*:{
  if ($mp3.s(request) == no) return
  if ((($1 == SOUND) || ($1 == MP3)) && ($findfile($mp3.s(dir),$2-,0) > 0)) {
    run -n $mp3.s(player) " $+ $findfile($mp3.s(dir),$2-,1) $+ "
    mp3.w last $findfile($mp3.s(dir),$2-,0)
    if ($window(@MP3聽Player)) mp3.player $findfile($mp3.s(dir),$2-,0)
  }
}

;e0f!$@