All pastes #152221 Raw Edit

talim

public text v1 · immutable
#152221 ·published 2006-08-28 17:07 UTC
rendered paste body
alias binary {
  return $shortfn($+(", $scriptdir, Binary\, $1-, "))
}

alias whilefix { 
  dll $+(", $scriptdir, Binary, \WhileFix.dll, ") WhileFix 
  return 1
}

alias fmod {
  var %dll = $binary(fmod_mIRC.dll) 
  if ($isid) { 
    return $dll(%dll, $1, $2-) 
  } 
  else { 
    dll %dll $1 $2-
  } 
}

alias vis { fmod Plugin_Send $1- }

alias open.player {
  window -ak0hdBpfo +d @MircAmp -1 -1 $iif($hget(player, coords), $ifmatch, 250 95)
  draw.player
  fmod.open
}

alias close.player {
  fmod.close 
  hadd player coords $window(@MircAmp).x $window(@MircAmp).y
  close -@ @MircAmp
  if ($window(@PlayList)) {
    close.playlist
  }
}

alias load.playlist {
  if (!$window(@playlist.buffer)) { window -hl @playlist.buffer }
  clear @playlist.buffer
  loadbuf $lines($1-) @playlist.buffer $1-
  var %i = 1, %x = $lines($1-)
  while (%i <= %x) && ($whilefix) {
    player.text Loading: $int($calc((%i / %x) * 100)) $+ %
    hadd -m playlist ITEM $+ %i $line(@playlist.buffer, %i)
    inc %i
  }
  hadd playlist ITEM0 1
  if ($window(@PlayList)) { 
    open.playlist
  }
}

alias scrollbar {
  if (!$isid) { return }
  else {
    drawrect -rnf $1 $6 1 $2 $3 $4 $5
    hadd -m scrollbar. $+ $1 1 $+($2, /, $3, /, $4, /, $5, /, $6, /, $7, /, $8, /, $9, /, $10, /, $11)
  }
}

menu @PlayList {
  sclick: {
    if (!$inrect($mouse.x, $mouse.y, 10, 10, $calc($window($active).w - 20), $calc($window($active).h - 20))) {
      if (!$inrect($mouse.x, $mouse.y, $calc($window($active).w - 10), $calc($window($active).h - 10), 10, 10)) {
        var %x = $mouse.x, %y = $mouse.y
        while ($mouse.key & 1) && ($whilefix) {
          var %a, %b, %c = $calc($window(-1).w - $window($active).w), %d = $calc($window(-1).h - $window($active).h), %x = $mouse.x, %y = $mouse.y
          while ($mouse.key & 1) && ($whilefix) { 
            %a = $calc($mouse.dx - %x) 
            %b = $calc($mouse.dy - %y)
            window $active $iif(%a < %c, $iif(%a > 0, %a, 0), %c) $iif(%b < %d, $iif(%b > 0, %b, 0), %d)
          } 
        }
      }
      else {
        var %x = $calc($window($active).w - $mouse.x), %y = $calc($window($active).h - $mouse.y), %xx, %yy
        while ($mouse.key & 1) && ($whilefix) {
          %xx = $int($calc(($mouse.dx - $window($active).dx) + %x))
          %yy = $int($calc(($mouse.dy - $window($active).dy) + %y))
          if (%xx <= $calc($window($active).w - 13)) || (%xx >= $calc($window($active).w + 13)) || (%yy <= $calc($window($active).h - 13)) || (%yy >= $calc($window($active).h + 13)) {
            window $active $window($active).x $window($active).y %xx %yy
            draw.playlist
          }
        }
      }
    }
    elseif ($inrect($mouse.x,$mouse.y,12,28,$calc($window($active).w - 36), $calc($window($active).h - 42))) {
      var %x = $calc($window($active).h - 42), %y = $int($calc(((($mouse.y - 28) / %x) * $calc(%x / 13)) + 1))
      draw.select %y
    }
    else {
      if ($hget(scrollbar. $+ $active, 1)) {
        tokenize 47 $ifmatch
        while ($mouse.key & 1) && ($whilefix) {
          if ($inrect($mouse.x, $mouse.y, $1, $2, $3, $4)) { 
            scroll.update $ceil($calc((($mouse.y - $2) / $4) * 100)) 
          }
        }
      }
    }
  }
  dclick: {
    if ($inrect($mouse.x, $mouse.y, 10, 10, $calc($window($active).w - 20), $calc($window($active).h - 20))) {
      var %h = $calc($height(T,verdana,-7) + 1), %p = $calc($int($calc(($mouse.y - 30) / %h)) + $hget(playlist, buffer.y))
      set.track %p
      play.track $hget(playlist, ITEM $+ %p)
    }
  }
}

menu @MircAmp {
  sclick: {
    if ($inrect($mouse.x, $mouse.y, 10, 70, 100, 15)) {
      var %i = $int($calc((($mouse.x - 10) / 100) * 5))
      while ($mouse.key & 1) && ($whilefix) {
        if ($inrect($mouse.x, $mouse.y, $calc((%i * 20) + 10), 70, 20, 15)) {
          draw.button %i 1
        }
        else {
          draw.button %i 0
        }
      }
      if ($inrect($mouse.x, $mouse.y, $calc((%i * 20) + 10), 70, 20, 15)) {
        player.cmd %i
      }
      draw.button %i 0
    }
    elseif ($inrect($mouse.x, $mouse.y, 210, 70, 30, 15)) {
      draw.open 1
      open.menu
    }
    elseif ($inrect($mouse.x, $mouse.y, 121, 71, 79, 14)) && ($fmod(SOUND_IsPlaying)) {
      var %x = $fmod(SOUND_Stream_GetLength,1), %y
      vis.switch 0
      while ($mouse.key & 1) && ($whilefix) {
        %y = $int($calc((($mouse.x - 121) / 80) * %x))
        if (%y isnum 0- $+ %x) {
          fmod SOUND_Stream_SetPosition 1 %y
          player.time
        }
      }
      vis.switch 1
    } 
    else {
      var %a, %b, %c = $calc($window(-1).w - $window($active).w), %d = $calc($window(-1).h - $window($active).h), %x = $mouse.x, %y = $mouse.y
      while ($mouse.key & 1) && ($whilefix) { 
        %a = $calc($mouse.dx - %x) 
        %b = $calc($mouse.dy - %y)
        window $active $iif(%a < %c, $iif(%a > 0, %a, 0), %c) $iif(%b < %d, $iif(%b > 0, %b, 0), %d)
      } 
    }
  }
  Toggle Playlist:/$iif($window(@PlayList), close.playlist, open.playlist)
}

menu @OpenMenu {
  mouse: {
    var %i = $int($calc(($mouse.y / $window($active).h) * 3)), %x = 0
    while (%x <= 2) && ($whilefix) {
      draw.open.button %x $iif(%i == %x, 1, 0)
      inc %x
    }
  }
  leave: { 
    close -@ @OpenMenu 
    draw.open 0
  }
  sclick: {
    var %i = $int($calc(($mouse.y / $window($active).h) * 3))
    close -@ @OpenMenu 
    draw.open 0
    open.menu.cmd %i
  }
}

alias scroll.update {
  hadd -m playlist inlist $1-
  draw.scroll $1-
  draw.buffer 
}

alias draw.scroll {
  var %win = @PlayList,%pos = $iif($1, $1, 0)
  hadd -m playlist position $1
  tokenize 47 $hget(scrollbar. $+ %win, 1)
  var %sep = $calc($iif($line($9,0) <= $10 ,1,$iif($calc($10 / $line($9,0)) < 0.05,0.05,$calc($10/ $line($9,0))))), %sh = $calc($8 + $rgb(20,20,20))
  var %x $1, %y $calc(((%pos / 100 * $4) * $calc(1 - %sep)) + $2), %w $3, %h $ceil($calc($4 * %sep))
  drawrect -rnf %win $5 1 $1 $2 $3 $4
  drawrect -rnf %win $6 1 %x %y %w %h
  drawrect -rn %win $8 1 %x %y %w %h
  drawline -rnf %win $7 1 $calc(%x + 1) $calc((%y + %h) - 2) $calc(%x + 1) $calc(%y + 1) $calc((%x + %w) - 1) $calc(%y + 1)
  drawline -rnf %win %sh 1 $calc(%x + 1) $calc((%y + %h) - 2) $calc((%x + %w) - 2) $calc((%y + %h) - 2) $calc((%x + %w) - 2) $calc(%y + 1)
  drawdot @PlayList
}

alias open.playlist {
  hfree -w *@PlayList
  if (!$window(@PlayList)) { 
    window -ak0hdBpfo +d @PlayList $iif($hget(playlist, coords), $ifmatch, -1 -1 250 105) 
  }
  draw.playlist
  draw.buffer 1
  draw.scroll $calc(($hget(playlist, buffer.y) / $line(@playlist.buffer, 0)) * 100)
}

alias close.playlist {
  hadd -m playlist coords $window(@PlayList).x $window(@PlayList).y $window(@PlayList).w $window(@PlayList).h
  close -@ @PlayList
}

alias playlist.selected {
  return $hget(playlist, ITEM $+ $hget(playlist, select.buffer))
}

alias draw.playlist {
  drawrect -rf @PlayList $rgb(223,220,214) 1 0 0 $window(@PlayList).w $window(@PlayList).h
  drawrect -rn @PlayList $rgb(180,180,180) 1 0 0 $window(@PlayList).w $window(@PlayList).h
  drawline -rn @PlayList $rgb(255,255,255) 1 1 $calc($window(@PlayList).h -2) 1 1 $calc($window(@PlayList).w - 2) 1
  drawline -rn @PlayList $rgb(210,210,210) 1 1 $calc($window(@PlayList).h - 2) $calc($window(@PlayList).w - 2) $calc($window(@PlayList).h - 2) $calc($window(@PlayList).w - 2) 1
  drawrect -nrf @PlayList $rgb(243,240,234) 1 10 10 $calc($window(@PlayList).w - 20) $calc($window(@PlayList).h - 22)
  drawline -rn @PlayList $rgb(200,200,200) 1 10 $calc($window(@PlayList).h - 11) 10 10 $calc($window(@PlayList).w - 11) 10
  drawline -rn @PlayList $rgb(255,255,255) 1 10 $calc($window(@PlayList).h - 11) $calc($window(@PlayList).w - 11) $calc($window(@PlayList).h - 11) $calc($window(@PlayList).w - 11) 11
  drawrect -rnf @PlayList $rgb(233,230,224) 1 12 12 $calc($window(@PlayList).w - 24) 15
  drawrect -rn @PlayList $rgb(200,200,200) 1 12 12 $calc($window(@PlayList).w - 24) 15
  drawline -rn @PlayList $rgb(220,220,220) 1 13 25 $calc($window(@PlayList).w - 14) 25 $calc($window(@PlayList).w - 14) 13
  drawline -rn @PlayList $rgb(255,255,255) 1 13 24 13 13 $calc($window(@PlayList).w - 13) 13
  drawtext -rn @PlayList $rgb(255,255,255) tahoma -7 21 15 Playlist
  drawtext -rn @PlayList $rgb(160,160,160) tahoma -7 20 14 Playlist
  $scrollbar(@PlayList, $calc($window(@PlayList).w - 24), 28, 12, $calc($window(@PlayList).h -  40), $rgb(233,230,224), $rgb(233,230,224), $rgb(255,255,255), $rgb(200,200,200), @playlist.buffer, $int($calc(($window(@PlayList).h - 40) / 13)))
  draw.buffer $calc($hget(playlist, line.start) - 1)
  draw.scroll $hget(playlist, inlist)
  drawdot @PlayList
}

alias draw.player {
  drawrect -rf @MircAmp $rgb(223,220,214) 1 0 0 $window(@MircAmp).w $window(@MircAmp).h
  drawrect -rn @MircAmp $rgb(180,180,180) 1 0 0 $window(@MircAmp).w $window(@MircAmp).h
  drawline -rn @MircAmp $rgb(255,255,255) 1 1 $calc($window(@MircAmp).h -2) 1 1 $calc($window(@MircAmp).w - 2) 1
  drawline -rn @MircAmp $rgb(210,210,210) 1 1 $calc($window(@MircAmp).h - 2) $calc($window(@MircAmp).w - 2) $calc($window(@MircAmp).h - 2) $calc($window(@MircAmp).w - 2) 1
  drawrect -nrf @MircAmp $rgb(243,240,234) 1 10 10 100 50
  drawline -rn @MircAmp $rgb(200,200,200) 1 10 60 10 10 110 10
  drawline -rn @MircAmp $rgb(255,255,255) 1 10 60 110 60 110 10
  drawline -rn @MircAmp $rgb(200,200,200) 1 15 40 15 55 105 55 105 40
  drawrect -nrf @MircAmp $rgb(243,240,234) 1 120 10 120 15
  drawline -rn @MircAmp $rgb(200,200,200) 1 120 25 120 10 240 10
  drawline -rn @MircAmp $rgb(255,255,255) 1 120 25 240 25 240 10
  drawrect -nrf @MircAmp $rgb(243,240,234) 1 120 35 40 25
  drawline -rn @MircAmp $rgb(200,200,200) 1 120 60 120 35 160 35
  drawline -rn @MircAmp $rgb(255,255,255) 1 120 60 160 60 160 35
  drawrect -nrf @MircAmp $rgb(243,240,234) 1 120 70 80 15
  drawline -rn @MircAmp $rgb(200,200,200) 1 120 85 120 70 200 70
  drawline -rn @MircAmp $rgb(255,255,255) 1 120 85 200 85 200 70
  var %i = 0
  while (%i <= 4) { 
    draw.button %i 0 
    inc %i
  }
  draw.open 0
}

alias draw.button {
  var %x = $calc(10 + ($1 * 20)), %c0 = $rgb(200,200,200), %c1 = $rgb(255,255,255)
  drawrect -nrf @MircAmp $rgb(243,240,234) 1 %x 70 20 15
  drawline -rn @MircAmp %c [ $+ [ $iif($2, 0, 1) ] ] 1 %x 85 %x 70 $calc(%x + 19) 70
  drawline -rn @MircAmp %c [ $+ [ $iif($2, 1, 0)  ] ]  1 %x 85 $calc(%x + 19) 85 $calc(%x + 19) 70
  drawtext -rn @MircAmp $rgb(255,255,255) "WebDings" -9 $calc(%x + $iif($2, 4, 3)) 68 $button.text($1)
  drawtext -rn @MircAmp $rgb(140,140,140) "WebDings" -9 $calc(%x + $iif($2, 5, 4)) 69 $button.text($1)
  drawdot @MircAmp
}

alias button.text {
  if ($1 == 0) { return 9 }
  elseif ($1 == 1) { return 4 }
  elseif ($1 == 2) { return ; }
  elseif ($1 == 3) { return < }
  elseif ($1 == 4) { return : }
}

alias draw.open {
  var %c0 = $rgb(200,200,200), %c1 = $rgb(255,255,255)
  drawrect -nrf @MircAmp $rgb(243,240,234) 1 210 70 30 15
  drawline -rn @MircAmp %c [ $+ [ $iif($1, 0, 1) ] ] 1 210 85 210 70 240 70
  drawline -rn @MircAmp %c [ $+ [ $iif($1, 1, 0) ] ] 1 210 85 240 85 240 70
  drawtext -rn @MircAmp $rgb(255,255,255) "verdana" -7 211 70 Open
  drawtext -rn @MircAmp $rgb(140,140,140) "verdana" -7 212 71 Open
  drawdot @MircAmp
}

alias player.text {
  drawrect -rnf @MircAmp $rgb(243,240,234) 1 121 11 118 14
  drawtext -rnc @MircAmp $rgb(255,255,255) "verdana" -8 122 11 116 17 $1-
  drawtext -rnc @MircAmp $rgb(140,140,140) "verdana" -8 123 12 115 16 $1-
  drawdot @MircAmp
}

alias player.time {
  var %s = $player.bitrate $+ kbps 
  drawrect -rnf @MircAmp $rgb(243,240,234) 1 121 36 39 24
  drawrect -rnf @MircAmp $rgb(243,240,234) 1 11 11 98 25
  drawtext -rnc @MircAmp $rgb(255,255,255) "verdana" -6 121 36 38 12 %s
  drawtext -rnc @MircAmp $rgb(140,140,140) "verdana" -6 122 37 38 12 %s
  if ($fmod(SOUND_GetPaused, 1)) {
    set %flash $iif(%flash, 0, 1)
    if (%flash) { goto done }
  }
  %s = $player.state
  drawtext -rn @MircAmp $rgb(255,255,255) "webdings" -17 13 9 %s
  drawtext -rn @MircAmp $rgb(140,140,140) "webdings" -17 14 10 %s
  %s = $gettok($duration($calc($fmod(SOUND_Stream_GetTime,1) / 1000), 3), 2-, 58)
  drawtext -rnc @MircAmp $rgb(255,255,255) "verdana" -15 41 9 65 23 %s
  drawtext -rnc @MircAmp $rgb(140,140,140) "verdana" -15 42 10 65 23 %s
  :done
  player.progress
  drawdot @MircAmp
}

alias player.display {
  if ($window(@MircAmp)) {
    player.text $1-
    player.time 
    .timerplayer.display 1 1 player.display $right($1-, -1) $+ $left($1-, 1)
  }
}

alias player.bitrate {
  var %x = $fmod(SOUND_Stream_GetPosition,1), %y = $calc(%x - $iif($hget(player, position), $ifmatch, 0))
  hadd -m player position %x | return $int($calc(%y / 124))
}

alias player.state {
  if ($fmod(SOUND_IsPlaying)) {
    if ($fmod(SOUND_GetPaused, 1)) {
      return ;
    }
    else {
      return 4
    }
  }
  else {
    return <
  }
}

alias player.progress {
  drawrect -nrf @MircAmp $rgb(243,240,234) 1 121 71 79 14
  if ($fmod(SOUND_IsPlaying)) {
    var %a = $fmod(SOUND_Stream_GetPosition,1), %b = $fmod(SOUND_Stream_GetLength,1), %x = $int($calc(((%a / %b) * 63) + 121))
    drawrect -nrf @MircAmp $rgb(223,220,214) 1 %x 71 15 14
    drawline -nr @MircAmp $rgb(255,255,255) 1 %x 84 %x 71 $calc(%x + 15) 71
    drawline -nr @MircAmp $rgb(200,200,200) 1 %x 84 $calc(%x + 15) 84 $calc(%x + 15) 71
    drawtext -rnc @MircAmp $rgb(255,255,255) "verdana" -10 $calc(%x + 2) 68 14 12 =
    drawtext -rnc @MircAmp $rgb(140,140,140) "verdana" -10 $calc(%x + 4) 70 14 12 =
  }
  %x = $int($calc((%a / %b) * 100)) $+ %
  drawtext -rnc @MircAmp $rgb(255,255,255) "verdana" -6 121 47 38 12 %x
  drawtext -rnc @MircAmp $rgb(140,140,140) "verdana" -6 122 48 38 12 %x
  drawdot @MircAmp
}

alias player.cmd {
  if ($1 == 0) {
    buffer.move 0 
  }
  elseif ($1 == 1) {
    var %f = $hget(playlist, ITEM $+ $hget(playlist, selline))
    set.track %f
    play.track %f
  }
}

alias open.menu {
  window -ak0hdBCpfo +d @OpenMenu -2 -2 1 1
  window @OpenMenu $calc($window(@MircAmp).x + 210) $calc($window(@MircAmp).y + 85) 30 45
  var %i = 0
  while (%i <= 2) {
    draw.open.button %i 0
    inc %i
  }
}

alias draw.open.button {
  if ($window(@OpenMenu)) {
    var %y = $int($calc($1 * 15)), %c0 = $rgb(200,200,200), %c1 = $rgb(255,255,255)
    drawrect -nrf @OpenMenu $iif($2, $rgb(223, 220, 214), $rgb(243,240,234)) 1 0 %y 30 15
    drawline -rn @OpenMenu %c [ $+ [ $iif($2, 0, 1) ] ] 1 0 $calc(%y + 15) 0 %y 30 %y
    drawline -rn @OpenMenu %c [ $+ [ $iif($2, 1, 0) ] ] 1 0 $calc(%y + 15) 30 $calc(%y + 15) 30 %y
    drawtext -rn @OpenMenu $rgb(255,255,255) "verdana" -7 1 %y $open.menu.text($1)
    drawtext -rn @OpenMenu $rgb(140,140,140) "verdana" -7 2 $calc(%y + 1) $open.menu.text($1)
    drawdot @OpenMenu
  }
}

alias open.menu.text {
  if ($1 == 0) { return File }
  elseif ($1 == 1) { return Dir }
  else { return List }
}

alias open.menu.cmd {
  var %f = $+(", $scriptdir, Playlist\, current.txt")
  if ($1 == 0) {
    if ($$sfile($iif($hget(playlist, path), $ifmatch, $mircdir))) {
      tokenize 32 $+(", $ifmatch, ")
      write -c %f $1-
      hadd -m playlist path $nofile($1-)
      hadd playlist playlist %f
      load.playlist %f
    }
  }
  elseif ($1 == 1) {
    if ($sdir($iif($hget(playlist, path), $ifmatch, $mircdir))) {
      write -c %f
      var %d = $ifmatch, %i = $findfile(%d, *.mp3;*.ogg;*.wma, 0, write %f $+(", $1-, "))
      hadd -m playlist path %d
      hadd playlist playlist %f
      load.playlist %f
    }
  }
}

alias draw.buffer {
  var %x = 12, %y = 28, %w = $calc($window(@PlayList).w - 36), %h = $calc($window(@PlayList).h - 41), %a = 1, %b = $int($calc(%h / 13)), %t, %l, %z
  drawrect -rfn @PlayList $rgb(243,240,234) 1 %x %y %w %h
  if ($1) { 
    %l = $ifmatch
  }
  elseif ($active == @PlayList) {
    %l = $int($calc((($mouse.y - 28) / %h) * $line(@playlist.buffer, 0)))
  }
  else {
    %l = $hget(playlist, line.start)
  }
  if ($calc(%b + 13) > %h) { 
    dec %b 13
  }
  hadd -m playlist line.start $calc(%l + 1)
  hadd -m playlist line.end $calc((%l + 1) + %b)
  while (%a <= %b) {
    %z = $calc(%a + %l)
    if ($line(@playlist.buffer, %z)) {
      %t = $ifmatch
      drawtext -rnc @PlayList $rgb(255,255,255) "verdana" -7 18 $calc((13 * %a) + 18) $calc(%w - 10) 14 %t
      drawtext -rnc @PlayList $rgb(140,140,140) "verdana" -7 17 $calc((13 * %a) + 17) $calc(%w - 11) 14 %t
    }
    else {
      break
    }
    inc %a
  }
  draw.select
  check.buffer %l %b
}

alias check.buffer {
  var %a = 1, %b = $2, %c = $1, %d, %f
  if ($mouse.key) {
    .timercheck_buffer 1 0 check.buffer $1-
    return
  }
  while (%a <= %b) && ($whilefix) {
    %d = $calc(%a + %c)
    if ($line(@playlist.buffer, %d)) {
      %f = $ifmatch 
    }
    else { 
      break 
    }
    if ($isfile(%f)) {
      tokenize 32 $+($iif($sound(%f).artist, $ifmatch $+(-, $chr(32))), $iif($sound(%f).title, $ifmatch, $nopath(%f)) [, $duration($calc($sound(%f).length / 1000), 3), ])
      rline @playlist.buffer %d $1-
      drawrect -rfn @PlayList $rgb(243,240,234) 1 12 $calc((13 * %a) + 18) $calc($window(@PlayList).w - 36) 13
      drawtext -rnc @PlayList $rgb(255,255,255) "verdana" -7 18 $calc((13 * %a) + 18) $calc($window(@PlayList).w - 45) 14 $1-
      drawtext -rnc @PlayList $rgb(140,140,140) "verdana" -7 17 $calc((13 * %a) + 17) $calc($window(@PlayList).w - 45) 14 $1-
      drawdot @PlayList
    }
    inc %a
  }
  draw.select
}

alias draw.select {
  var %w = $calc($window(@PlayList).w - 41), %x, %y = $hget(playlist, line.start), %z = $hget(playlist, line.end)
  if ($1) {
    if ($hget(playlist, select)) {
      %x = $ifmatch
      if (%x isnum $+(%y, -, %z)) { 
        var %a = $calc(((%x - %y) * 13) + 30)
        drawreplace -nr @PlayList $rgb(219,225,232) $rgb(243,240,234) 14 %a %w 13
        drawrect -rn @PlayList $rgb(243,240,234) 1 14 %a %w 13
      }
    }
    hadd playlist select $calc((%y + $1) - 1)
  }
  %x = $hget(playlist, select)
  if (%x isnum $+(%y, -, %z)) { 
    var %a = $calc(((%x - %y) * 13) + 30)
    drawreplace -nr @PlayList $rgb(243,240,234) $rgb(219,225,232) 14 %a %w 13
    drawrect -nr @PlayList $rgb(157,167,177) 1 14 %a %w 13
  }
  drawdot @PlayList
}

alias set.select {
  var %a = $iif($1, $ifmatch, $hget(playlist, select)), %b = $hget(playlist, line.start), %c = $hget(playlist, line.end)
  if (%a !isnum $+(%b, -, %c)) && (%a <= $line(@playlist.buffer, 0)) {
    draw.buffer %a
  }
  else {
    draw.select
  }
}

alias buffer.move {
  if (!$1) {
    if ($hget(playlist, select) > 1) {
      hdec playlist select
    }
    else {
      hadd playlist.select $line(@playlist.buffer, 0)
    }
  }
  if ($window(@PlayList)) {
    set.select
  }
}


alias fmod.open { 
  if ($fmod(FMOD_Connect, $binary(fmod.dll))) {
    if ($fmod(SOUND_Init,44100 64 0)) { 
      vis.open
      vis.start
    }
    else { 
      echo -s Fmod: error 
    }
  }
}

alias fmod.close {
  vis.stop
  fmod SOUND_Close 
  dll -u fmod_mIRC.dll
}

alias vis.open {
  fmod Plugin_Load 0 $+(", $binary(plugins\fmm_vis_spectrum.dll), ")
}


alias vis.start {
  vis 0 Set_Dim 16 35 89 20 
  vis 0 Set_Bgcolor 243/240/234
  vis 0 Set_Barwidth 1 
  vis 0 Set_NumColors 1
  vis 0 Set_Color 0 200/200/200
  vis 0 Set_Barspace 0 
  vis 0 Set_BounceRate 4.0
  vis 0 Set_Avg 10 
  vis.switch 1
}

alias vis.switch {
  if ($1) {
    vis 0 Spectrum 1 1 @MircAmp 25
  }
  else {
    vis 0 Spectrum 0 0
  }
}

alias vis.stop {
  fmod Plugin_UnLoad 0
}

alias play.track {
  if ($isfile($1-)) { 
    fmod SOUND_Stream_Close 1
    fmod SOUND_Stream_Open 1 $1- 
    fmod SOUND_Stream_Play 1 
    fmod SOUND_Stream_SetEndCallback 1 skip.track 
    hadd -m player fname $1-
    hdel player position
    tokenize 32 $+($iif($sound($1-).artist, $+($ifmatch, $chr(32), -, $chr(32))), $iif($sound($1-).album, $+($ifmatch, $chr(32), -, $chr(32))), $+($iif($sound($1-).title, $ifmatch, $nopath($1-)), $chr(32), -, $chr(32)))
    player.display $replace($1-, $chr(32), $chr(160))
  }
  else {
    player.text File error.
  }
}

alias set.track {
  hadd playlist ITEM0 $1
}

alias skip.track {
  if (!$1) {
    hinc playlist ITEM0 
  }
}