Ren-Ren's Fileserver — File Browser

Ren-RensFileserverv1.2 / Ren-RensFileserverv1.2 / rfs-fsrv.mrc

rfs-fsrv.mrc — 29.88 KB — Download this file

; Ren-Ren's Fileserver v1.2
; Copyright© 2001-2003 by Adrian Au. All rights reserved.
; http://adrian.saxtus.gr
; http://www.geocities.com/renx2
; renx2@yahoo.com
;
on 1:unload:{
  var %~rfsu = $rfs-def(win)
  if (%_rfsunload != 1) unset %rfs*
  hfree -w rfs*
  if ($dialog(%~rfsu) != $null) dialog -x %~rfsu
}
; <fs>
alias rfs-fson {
  if ($hget(rfs-fs,$1) != $null) goto End
  if ($readini $rfs-def(ini) fs- $+ $1 ad == $null) { rfs-log $rfs-opt(log,fserror)  $+ $rfs-opt(color2) $+ Error:  $+ $rfs-opt(color3) $+ Cannot initiate Fserve $1 $+ . No ad specified. | goto End }
  var %~rfson3 = $readini $rfs-def(ini) fs- $+ $1 chan
  if (%~rfson3 == $null) { rfs-log $rfs-opt(log,fserror)  $+ $rfs-opt(color2) $+ Error:  $+ $rfs-opt(color3) $+ Cannot initiate Fserve $1 $+ . No target channel(s) specified. | goto End }
  var %~rfson2 = $numtok(%~rfson3,32)
  unset %~rfson4
  while (%~rfson2 > 0) {
    if ($timer(rfsad [ $+ [ $1 ] $+ [ $gettok(%~rfson3,%~rfson2,32) ] ] ) != $null) var %~rfson4 = $addtok(%~rfson4,$gettok(%~rfson3,%~rfson2,32),32)
    dec %~rfson2 1
  }
  .timerrfsad $+ $1 $+ * off
  if ($hget(rfs-fs) == $null) hmake rfs-fs 5
  hadd rfs-fs $1 $readini $rfs-def(ini) fs $1
  var %~rfson = $readini $rfs-def(ini) fs- $+ $1 adtimer
  var %~rfson2 = $numtok(%~rfson3,32)
  while (%~rfson2 > 0) {
    if ($gettok(%~rfson,%~rfson2,32) >= $rfs-opt(minadtimer)) {
      .timerrfsad $+ $1 $+ $gettok(%~rfson3,%~rfson2,32) 0 $gettok(%~rfson,%~rfson2,32) rfs-adtimer $1 $gettok(%~rfson3,%~rfson2,32)
      if ($findtok(%~rfson4,$gettok(%~rfson3,%~rfson2,32),1,32) == $null) && ($me ison $gettok(%~rfson3,%~rfson2,32)) msg $gettok(%~rfson3,%~rfson2,32) $rfs-ad($1)
    }
    dec %~rfson2 1
  }
  rfs-sched $1 off
  :End
}
; <fs>
alias rfs-qchk {
  if ($window(@rfs-q- [ $+ [ $1 ] ] ) == $null) window -h @rfs-q- $+ $1
  if ($line(@rfs-q- [ $+ [ $1 ] ] ,0) < 1) && ($exists( [ [ $rfs-opt(dir) ] $+ ] rfs-q- [ $+ [ $1 ] $+ ] .rfs) == $true) loadbuf @rfs-q- $+ $1 " $+ $rfs-opt(dir) $+ rfs-q- $+ $1 $+ .rfs"
}
; <nick> <chan>
alias rfs-list {
  if ($hget(rfs-fs) == $null) goto End
  var %~rfslist = $hget(rfs-fs,0).item
  :A
  if (%~rfslist < 1) goto End
  var %~rfslist2 = $readini $rfs-def(ini) fs- $+ $hget(rfs-fs,%~rfslist).item chan
  if ($findtok(%~rfslist2,$2,1,32) != $null) {
    var %~rfslist2 = $readini $rfs-def(ini) fs- $+ $hget(rfs-fs,%~rfslist).item access
    if (r isin %~rfslist2) || ((o isin %~rfslist2) && ($1 isop $2)) || ((v isin %~rfslist2) && ($1 isvoice $2)) || ((h isin %~rfslist2) && ($1 ishop $2)) {
      var %~rfslist3 = $rfs-ad($hget(rfs-fs,%~rfslist).item)
      if (%~rfslist3 != $null) rfs-notice $1 %~rfslist3
    }
  }
  dec %~rfslist 1
  goto A
  :End
}
; <fs> <txt>
alias rfs-msgchan {
  var %~rfsmsgchan = $readini $rfs-def(ini) fs- $+ $1 chan
  if (%~rfsmsgchan == all) amsg $2-
  else {
    var %~rfsmsgchan2 = $numtok(%~rfsmsgchan,32)
    while (%~rfsmsgchan2 > 0) {
      if ($me ison $gettok(%~rfsmsgchan,%~rfsmsgchan2,32)) msg $gettok(%~rfsmsgchan,%~rfsmsgchan2,32) $2-
      dec %~rfsmsgchan2 1
    }
  }
}
; <fs>
alias rfs-ad {
  var %~rfsad = $readini $rfs-def(ini) fs- $+ $1 ad
  if (%~rfsad == $null) return
  var %~rfsad3 = $readini $rfs-def(ini) fs- $+ $1 trigsep
  if (%~rfsad3 == $null) var %~rfsad3 = $rfs-def(trigsep)
  var %~rfsad2 = $replace($readini $rfs-def(ini) fs $1,<ctcp>,/ctcp $me,<action>,/me,$chr(160), [ [ $chr(160) ] $+ [ %~rfsad3 ] $+ [ $chr(160) ] ] )
  var %~rfsad2 = $replace(%~rfsad2,$chr(160),$chr(32))
  var %~rfsad = $replace(%~rfsad,<trigger>,%~rfsad2)
  var %~rfsad2 = $1 $readini $rfs-def(ini) fs- $+ $1 prop
  if ($numtok(%~rfsad2,32) < 2) var %~rfsad2 = $1 $rfs-opt(prop)
  var %~rfsad = $replace(%~rfsad,<maxq>,$rfs-opt(fs,maxq,%~rfsad2),<maxsend>,$rfs-opt(fs,maxsend,%~rfsad2),<maxq-i>,$rfs-opt(fs,maxq-i,%~rfsad2),<maxsend-i>,$rfs-opt(fs,maxsend-i,%~rfsad2),<maxonline>,$rfs-opt(fs,maxonline,%~rfsad2),<mincps>,$rfs-opt(fs,mincps,%~rfsad2),<maxcps>,$rfs-opt(fs,maxcps,%~rfsad2))
  rfs-qchk $1
  var %~rfsad = $replace(%~rfsad,<queue>,$line(@rfs-q- [ $+ [ $1 ] ] ,0),<freeq>,$calc($rfs-opt(fs,maxq,%~rfsad2) - $line(@rfs-q- [ $+ [ $1 ] ] ,0)))
  var %~rfsad3 = $rfs-sendcnt($1,$rfs-opt(fs,maxsend,%~rfsad2),1)
  var %~rfsad = $replace(%~rfsad,<send>,$calc($rfs-opt(fs,maxsend,%~rfsad2) - %~rfsad3),<freesend>,%~rfsad3)
  var %~rfsad3 = $rfs-onlinecnt($1,$rfs-opt(fs,maxonline,%~rfsad2),1)
  var %~rfsad = $replace(%~rfsad,<online>,$calc($rfs-opt(fs,maxonline,%~rfsad2) - %~rfsad3),<freeonline>,%~rfsad3)
  var %~rfsad = $replace(%~rfsad,<created>,$rfs-stat($1,1))
  var %~rfsad = $replace(%~rfsad,<access>,$rfs-stat($1,access))
  var %~rfsad = $replace(%~rfsad,<sent>,$rfs-stat($1,sent))
  var %~rfsad = $replace(%~rfsad,<sentb>,$rfs-stat($1,sentb))
  var %~rfsad = $replace(%~rfsad,<fail>,$rfs-stat($1,fail))
  var %~rfsad = $replace(%~rfsad,<failb>,$rfs-stat($1,failb))
  var %~rfsad = $replace(%~rfsad,<recordcps>,$rfs-stat($1,cps))
  var %~rfsad = $replace(%~rfsad,<fson>,$rfs-statfsonoff($1,on),<fsoff>,$rfs-statfsonoff($1,off))
  var %~rfsad = $replace(%~rfsad,<r>,,<u>,,<b>,,<c>,)
  if ($rfs-opt(ad) == 1) return %~rfsad 15» Using $rfs-def(scripts) «
  else return %~rfsad
}
; <fs> <channel>
alias rfs-adtimer {
  if ($me !ison $2) && ($2 != all) goto End
  var %~rfsadtimer = $rfs-ad($1)
  if (%~rfsadtimer != $null) {
    if ($2 == all) amsg %~rfsadtimer
    else msg $2 %~rfsadtimer
  }
  :End
}
; <nick> <chan or 0> <1 for skip address chk> <trigger>
alias rfs-fs {
  if ($hget(rfs-fs) == $null) goto End
  var %~rfsfs = $hget(rfs-fs,0).item
  :A
  if (%~rfsfs < 1) goto End
  var %~rfsfs5 = $findtok($hget(rfs-fs,$hget(rfs-fs,%~rfsfs).item),$4-,1,160)
  if (%~rfsfs5 == $null) { dec %~rfsfs 1 | goto A }
  if ($3 == 0) && ($address($1,5) == $null) {
    rfs-whois $1 rfs-fs $1-2 1 $4-
    goto End
  }
  if ($address($1,5) != $null) {
    var %~rfsfs8 = $address($1,5)
    %rfs-whois> [ $+ [ $rfs-network ] $+ [ $1 ] ] = %~rfsfs8
  }
  else var %~rfsfs8 = %rfs-whois> [ $+ [ $rfs-network ] $+ [ $1 ] ]
  if (%~rfsfs8 != $null) && ($exists($rfs-def(banfile)) == $true) && ($read -s $+ $mask(%~rfsfs8,3) $rfs-def(banfile) != $null) {
    if ($rfs-opt(msg,ban) == 1) rfs-notice $1 You are banned from this Fserve.
    goto End
  }
  var %~rfsfs2 = 1
  :D
  while ($ial($mask(%~rfsfs8,2),%~rfsfs2) != $null) {
    if ($fserv($ial($mask(%~rfsfs8,2),%~rfsfs2).nick) != $null) && ($ial($mask(%~rfsfs8,2),%~rfsfs2).nick != $1) {
      if ($rfs-opt(msg,clone) == 1) rfs-notice $1 Clone detected.
      goto End
    }
    inc %~rfsfs2 1
  }
  var %~rfsfs = $hget(rfs-fs,%~rfsfs).item
  var %~rfsfs4 = $gettok($readini $rfs-def(ini) fs- [ $+ [ %~rfsfs ] ] access,%~rfsfs5,32)
  if ($2 != 0) && ($rfs-access($2,$1,%~rfsfs4) == n) goto End
  if ($2 == 0) {
    var %~rfsfs6 = $readini $rfs-def(ini) fs- $+ %~rfsfs chan
    if (%~rfsfs6 == all) {
      var %~rfsfs7 = 1
      unset %~rfsfs6
      while ($chan(%~rfsfs7) != $null) {
        var %~rfsfs6 = $addtok(%~rfsfs6,$chan(%~rfsfs7),32)
        inc %~rfsfs7 1
      }
    }
    var %~rfsfs7 = $numtok(%~rfsfs6,32)
    :B
    while (%~rfsfs7 > 0) {
      if ($rfs-access($gettok(%~rfsfs6,%~rfsfs7,32),$1,%~rfsfs4) != n) goto C
      dec %~rfsfs7 1
    }
    goto End
  }
  :C
  var %~rfsfs4 = %~rfsfs $readini $rfs-def(ini) fs- $+ %~rfsfs prop
  if ($numtok(%~rfsfs4,32) < 2) var %~rfsfs4 = %~rfsfs $rfs-opt(prop)
  if ($rfs-onlinecnt(%~rfsfs,$rfs-opt(fs,maxonline,%~rfsfs4)) < 1) { rfs-notice $1 Fserve ($replace($4-,<ctcp>,/ctcp me,<action>,/me) is currently full. Please try again later. | goto End }
  if ($rfs-opt(onchan) == 0) {
    var %~rfsfs2 = $rfs-onchan(%~rfsfs,$1,$2)
    if ($numtok(%~rfsfs2,32) > 1) {
      if ($rfs-opt(msg,onchanaccess) == 1) rfs-notice $1 You must be on one of these channels to access Fserve ($4-): %~rfsfs2
      goto End
    }
  }
  var %~rfsfs2 = $readini $rfs-def(ini) fs- $+ %~rfsfs dir $+ %~rfsfs5
  if (%~rfsfs2 == $null) || ($exists(%~rfsfs2) != $true) {
    rfs-log $rfs-opt(log,fserror)  $+ $rfs-opt(color2) $+ Error:  $+ $rfs-opt(color3) $+ Fserve failed. %~rfsfs2 does not exist.
    goto End
  }
  if ($file(%~rfsfs2) != $null) {
    if ($rfs-opt(fs,ipsend,%~rfsfs4) == 1) rfs-sendonly $gettok(%~rfsfs4,1-10,32) $gettok($mask(%~rfsfs8,2),2,64) $1 %~rfsfs2
    else rfs-sendonly $gettok(%~rfsfs4,1-10,32) 0 $1 %~rfsfs2
    goto End
  }
  var %~rfsfs3 = $readini $rfs-def(ini) fs- $+ %~rfsfs welcome $+ %~rfsfs5
  if ($exists(%~rfsfs3) != $true) unset %~rfsfs3
  else %~rfsfs3 = " $+ %~rfsfs3 $+ "
  var %~rfsfs6 = $gettok($readini $rfs-def(ini) fs- [ $+ [ %~rfsfs ] ] maxsize,%~rfsfs5,32)
  if (%~rfsfs6 == $null) var %~rfsfs6 = 0
  %rfs-fs- [ $+ [ $1 ] ] = %~rfsfs4 %~rfsfs6
  fserve $1 $rfs-opt(fs,maxsend-i,$1) " $+ %~rfsfs2 $+ " %~rfsfs3
  :End
}
; <fs> <maxq> <maxsend> <maxq-i> <maxsend-i> <maxonline> <mincps> <maxcps> <autoresume> <ratio> <ip> <nick> <path and file>
alias rfs-sendonly {
  if ($rfs-sendcnt($1,$3) < 1) || ($rfs-sendcnti($12,$5) < 1) {
    rfs-qchk $1
    if ($window(@rfs-q- [ $+ [ $1 ] ] ) == $null) window -h @rfs-q- $+ $1
    if ($fline(@rfs-q- [ $+ [ $1 ] ] ,$12 *,0) >= $4) { rfs-notice $12 Sorry. Your queue is full. | goto End }
    if ($line(@rfs-q- [ $+ [ $1 ] ] ,0) >= $2) { rfs-notice $12 Sorry. The fserve's queue is full. | goto End }
    aline @rfs-q- $+ $1 $12 $5 $+ . $+ $7 $+ . $+ $8 $+ . $+ $9 $11 $13-
    savebuf @rfs-q- $+ $1 " $+ $rfs-opt(dir) $+ rfs-q- $+ $1 $+ .rfs"
    rfs-notice $12 Queued $nopath($13-) into slot $line(@rfs-q- [ $+ [ $1 ] ] ,0)
  }
  else {
    if ($rfs-opt(onchan) == 0) var %~rfssendonly = $rfs-onchan($1,$12,0)
    else %~rfssendonly = 0
    if ($numtok(%~rfssendonly,32) > 1) rfs-notice $12 You must be on one of these channels to have access to files: %~rfssendonly
    else {
      rfs-notice $12 Sending $nopath($13-)
      %~rfs-send- [ $+ [ $12 ] ] = $readini $rfs-def(ini) fs- $+ $1 chan
      rfs-send $1 $5 $7-9 $11-
    }
  }
  :End
}
; <nick>
alias rfs-welcome {
  if ($rfs-opt(ratio) == 1) msg = $+ $1  $+ $rfs-opt(color1) $+ « Max Queue:  $+ $rfs-opt(color3) $+ $rfs-opt(fs,maxq-i,$1)  $+ $rfs-opt(color1) $+ »« Max Send:  $+ $rfs-opt(color3) $+ $rfs-opt(fs,maxsend-i,$1)  $+ $rfs-opt(color1) $+ »« UL/DL Ratio:  $+ $rfs-opt(color3) $+ 1: $+ $rfs-opt(fs,ratio,$1)  $+ $rfs-opt(color1) $+ »
  else msg = $+ $1  $+ $rfs-opt(color1) $+ « Max Queue:  $+ $rfs-opt(color3) $+ $rfs-opt(fs,maxq-i,$1)  $+ $rfs-opt(color1) $+ »« Max Send:  $+ $rfs-opt(color3) $+ $rfs-opt(fs,maxsend-i,$1)  $+ $rfs-opt(color1) $+ »
  if ($rfs-opt(fs,autoresume,$1) > 0) {
    if ($remove($rfs-opt(autoresumeb),$chr(37)) > 0) {
      if ($chr(37) isin $rfs-opt(autoresumeb)) var %~rfswelcome = $rfs-opt(fs,autoresume,$1) times (if less than $rfs-opt(autoresumeb) remaining)
      else var %~rfswelcome = $rfs-opt(fs,autoresume,$1) times (if less than $rfs-opt(autoresumeb) Kb remaining)
    }
    else var %~rfswelcome = $rfs-opt(fs,autoresume,$1) times
  }
  else var %~rfswelcome = none
  if ($rfs-opt(fs,maxcps,$1) == 0) msg = $+ $1  $+ $rfs-opt(color1) $+ « Min CPS:  $+ $rfs-opt(color3) $+ $rfs-opt(fs,mincps,$1) Kb/s  $+ $rfs-opt(color1) $+ »« Max CPS:  $+ $rfs-opt(color3) $+ n/a  $+ $rfs-opt(color1) $+ »« Autoresume Tries:  $+ $rfs-opt(color3) $+ %~rfswelcome  $+ $rfs-opt(color1) $+ »
  else msg = $+ $1  $+ $rfs-opt(color1) $+ « Min CPS:  $+ $rfs-opt(color3) $+ $rfs-opt(fs,mincps,$1) Kb/s  $+ $rfs-opt(color1) $+ »« Max CPS:  $+ $rfs-opt(color3) $+ $rfs-opt(fs,maxcps,$1) Kb/s  $+ $rfs-opt(color1) $+ »« Autoresume Tries:  $+ $rfs-opt(color3) $+ %~rfswelcome  $+ $rfs-opt(color1) $+ »
  if ($rfs-statfsonoff($rfs-opt(fs,fs,$1),off) != N/A) msg = $+ $1  $+ $rfs-opt(color1) $+ « The Fserve will close in  $+ $rfs-opt(color3) $rfs-statfsonoff($rfs-opt(fs,fs,$1),off)  $+ $rfs-opt(color1) $+ »
}
; <nick> <command>
alias rfs-lastcom {
  if ($findtok(get.clr_queues.dir.ls,$2,46) == $null) && ($calc($uptime(mirc) - $gettok($rfs-opt(fs,lastcom,$1),1,46)) > 60) && ($gettok($rfs-opt(fs,lastcom,$1),3-,46) == $2-) {
    var %~rfslastcom = $calc($gettok($rfs-opt(fs,lastcom,$1),2,46) + 1)
    if (%~rfslastcom > $rfs-opt(antiidle)) && ($rfs-opt(antiidle) > 0) {
      close -f $1
      rfs-notice $1 No camping on the Fserve.
    }
    if ($fserv($1).status == active) msg = $+ $1  $+ $rfs-opt(color2) $+ You've typed the same command $calc(%~rfslastcom + 1) times.
  }
  else var %~rfslastcom = 0
  if ($numtok(%rfs-fs- [ $+ [ $1 ] ],32) < 13) %rfs-fs- [ $+ [ $1 ] ] = $instok(%rfs-fs- [ $+ [ $1 ] ], [ [ $uptime(mirc) ] $+ ] . [ $+ [ %~rfslastcom ] $+ ] . [ $+ [ $2- ] ] ,13,32)
  else %rfs-fs- [ $+ [ $1 ] ] = $puttok(%rfs-fs- [ $+ [ $1 ] ], [ [ $uptime(mirc) ] $+ ] . [ $+ [ %~rfslastcom ] $+ ] . [ $+ [ $2- ] ] ,13,32)
}
; <fs> <maxsend-i> <mincps> <maxcps> <autoresume> <ip> <nick> <path and file>
alias rfs-send {
  if ($timer(rfscps) == $null) .timerrfscps 0 $rfs-opt(cpschk) rfs-cps
  %rfs-send- [ $+ [ $7 ] $+ [ $chr(160) ] $+ [ $replace($8-,$chr(32),$chr(95)) ] ] = $1-6 %~rfs-send- [ $+ [ $7 ] ]
  unset %~rfs-send- [ $+ [ $7 ] ]
  if ($6 == 0) dcc send -cl $+ $4 $7 " $+ $8- $+ "
  else dcc send -cl $+ $4 $6 $+ : $+ $rfs-opt(ipsendport) " $+ $8- $+ "
}
; <fs>
alias rfs-qsend {
  if ($findtok(%rfs-q,$1,1,32) != $null) goto End
  var %~rfsqsend3 = $1 $readini $rfs-def(ini) fs- $+ $1 prop
  if ($numtok(%~rfsqsend3,32) < 2) var %~rfsqsend3 = $1 $rfs-opt(prop)
  var %~rfsqsend4 = $rfs-sendcnt($1,$rfs-opt(fs,maxsend,%~rfsqsend3))
  if (%~rfsqsend4 < 1) goto End
  rfs-qchk $1
  var %~rfsqsend2 = 1
  while (%~rfsqsend4 > 0) {
    :A
    var %~rfsqsend = $line(@rfs-q- [ $+ [ $1 ] ] ,%~rfsqsend2)
    if (%~rfsqsend == $null) {
      if (%~rfsqsend2 > 1) savebuf @rfs-q- $+ $1 " $+ $rfs-opt(dir) $+ rfs-q- $+ $1 $+ .rfs"
      else {
        .remove " $+ $rfs-opt(dir) $+ rfs-q- $+ $1 $+ .rfs"
        if (%~rfsqsend4 == 1) && ($rfs-opt(fsopt,slot,$readini $rfs-def(ini) fs- [ $+ [ $1 ] ] fsopt) == 1) rfs-msgchan $1  $+ $rfs-opt(color1) $+ A send slot has opened on my Fserve.
      }
      goto End
    }
    if ($rfs-sendcnti($gettok(%~rfsqsend,1,32),$gettok($gettok(%~rfsqsend,2,32),1,46)) < 1) {
      inc %~rfsqsend2 1
      goto A
    }
    if ($file($gettok(%~rfsqsend,4-,32)) == $null) {
      rfs-log $rfs-opt(log,fserror)  $+ $rfs-opt(color2) $+ Error:  $+ $rfs-opt(color3) $+ Send fail ( $+ $gettok(%~rfsqsend,1,32) $+ ). File $gettok(%~rfsqsend,4-,32) does not exist.
      dline @rfs-q- $+ $1 %~rfsqsend2
      goto A
    }
    if ($rfs-opt(onchan) == 0) {
      var %~rfsqsend5 = $rfs-onchan($1,$gettok(%~rfsqsend,1,32),0)
      if ($numtok(%~rfsqsend5,32) > 1) {
        if ($rfs-opt(msg,onchanfail) == 1) rfs-notice $gettok(%~rfsqsend,1,32) Send of $nopath($gettok(%~rfsqsend,4-,32)) was removed from queue. You were not on any of these channels of the Fserve: %~rfsqsend5
        dline @rfs-q- $+ $1 %~rfsqsend2
        goto A
      }
    }
    %~rfs-send- [ $+ [ $gettok(%~rfsqsend,1,32) ] ] = $readini $rfs-def(ini) fs- $+ $1 chan
    var %~rfsqsend5 = $gettok(%~rfsqsend,2,32)
    if ($rfs-opt(fs,ipsend,%~rfsqsend3) == 1) rfs-send $1 $replace($gettok(%~rfsqsend5,1-4,46),$chr(46),$chr(32)) $gettok(%~rfsqsend,3,32) $gettok(%~rfsqsend,1,32) $gettok(%~rfsqsend,4-,32)
    else rfs-send $1 $replace($gettok(%~rfsqsend5,1-4,46),$chr(46),$chr(32)) 0 $gettok(%~rfsqsend,1,32) $gettok(%~rfsqsend,4-,32)
    dline @rfs-q- $+ $1 %~rfsqsend2
    dec %~rfsqsend4 1
  }
  var %~rfsqsend = $rfs-opt(dir) $+ rfs-q- $+ $1 $+ .rfs
  savebuf @rfs-q- $+ $1 " $+ %~rfsqsend $+ "
  if ($file(%~rfsqsend).size < 1) .remove " $+ %~rfsqsend $+ "
  :End
}
; <fs>
alias rfs-filecache {
  .remove " $+ $rfs-opt(dir) $+ fs- $+ $1 $+ .fsc"
  var %~rfscache = 1
  :A
  var %~rfscache2 = $readini $rfs-def(ini) fs- $+ $1 dir $+ %~rfscache
  if (%~rfscache2 == $null) goto End
  if ($exists(%~rfscache2) != $true) { inc %~rfscache 1 | goto A }
  if ($file(%~rfscache2) != $null) {
    write " $+ $rfs-opt(dir) $+ fs- $+ $1 $+ .fsc" <file> %~rfscache2
    inc %~rfscache 1 | goto A
  }
  var %~rfscache4 = 1
  :B
  var %~rfscache3 = $finddir(%~rfscache2,*,%~rfscache4)
  if (%~rfscache3 == $null) && (%~rfscache4 == 1) var %~rfscache3 = %~rfscache2
  if (%~rfscache3 != $null) {
    var %~rfscache6 = 1
    :C
    var %~rfscache5 = $findfile(%~rfscache3,*,%~rfscache6,1)
    if (%~rfscache5 != $null) { write " $+ $rfs-opt(dir) $+ fs- $+ $1 $+ .fsc" $nopath(%~rfscache5) | inc %~rfscache6 1 | goto C }
    write " $+ $rfs-opt(dir) $+ fs- $+ $1 $+ .fsc" <path> %~rfscache3
    inc %~rfscache4 1 | goto B
  }
  inc %~rfscache 1 | goto A
  :End
  rfs-alert 0 Built cache to $rfs-opt(dir) $+ fs- $+ $1 $+ .fsc
}
; <fs> <nick> <findnum> <trigger> <path> <text>
alias rfs-cachefind {
  unset %~rfscachef
  var %~rfscachef3 = 1
  var %~rfscachef2 = $read -l $+ %~rfscachef3 -s<path> " $+ $rfs-opt(dir) $+ fs- $+ $1 $+ .fsc"
  if (%~rfscachef2 != $null) {
    if ($left(%~rfscachef2,$len($5)) == $5) { var %~rfscachef = %~rfscachef3 | var %~rfscachef3 = $readn }
  }
  if (%~rfscachef == $null) return $3
  var %~rfscachef4 = $3
  :A
  var %~rfscachef2 = $read -l $+ %~rfscachef -w"* $+ $6- $+ *" " $+ $rfs-opt(dir) $+ fs- $+ $1 $+ .fsc"
  if (%~rfscachef2 != $null) {
    var %~rfscachef = $readn
    if ($left(%~rfscachef2,6) == <path>) {
      var %~rfscachef2 = $remove($mid(%~rfscachef2,7),$5)
      if ($6- !isin %~rfscachef2) { inc %~rfscachef 1 | goto A }
    }
    elseif ($left(%~rfscachef2,6) == <file>) {
      var %~rfscachef2 = $nopath($mid(%~rfscachef2,7))
      if ($6- !isin %~rfscachef2) { inc %~rfscachef 1 | goto A }
    }
    else {
      var %~rfscachef3 = $read -l $+ %~rfscachef -s<path> " $+ $rfs-opt(dir) $+ fs- $+ $1 $+ .fsc"
      var %~rfscachef2 = $remove(%~rfscachef3,$5) $+ \ $+ %~rfscachef2
    }
    inc %~rfscachef4 1
    rfs-msg $2  $+ $rfs-opt(color1) $+ Match %~rfscachef4 (for $6- $+ ):  $+ $rfs-opt(color3) %~rfscachef2 ( $+ $4 $+ )
    if (%~rfscachef4 >= $rfs-opt(findmax)) { rfs-msg $2  $+ $rfs-opt(color1) $+ Too many matches to display. Use " quotes around phrases to refine search. | return }
    inc %~rfscachef 1 | goto A
  }
  return %~rfscachef4
}
; <nick> <chan> <text>
alias rfs-find {
  if ($hget(rfs-find) != $null) hfree rfs-find
  hmake rfs-find 10
  var %~rfsfind = 1
  while ($gettok($3-,%~rfsfind,32) != $null) {
    var %~rfsfind10 = $gettok($3-,%~rfsfind,32)
    if ($left($gettok($3-,%~rfsfind,32),1) == $chr(34)) { var %~rfsfind2 = 1 | var %~rfsfind10 = $right(%~rfsfind10,$calc($len(%~rfsfind10) - 1)) }
    if ($right($gettok($3-,%~rfsfind,32),1) == $chr(34)) { unset %~rfsfind2 | var %~rfsfind10 = %~rfsfind9 $left(%~rfsfind10,$calc($len(%~rfsfind10) - 1)) }
    if (%~rfsfind2 == 1) var %~rfsfind9 = %~rfsfind9 %~rfsfind10
    else { unset %~rfsfind9 | var %~rfsfind8 = $addtok(%~rfsfind8,%~rfsfind10,160) }
    inc %~rfsfind 1
  }
  if (%~rfsfind9 != $null) var %~rfsfind8 = $addtok(%~rfsfind8,%~rfsfind9,160)
  var %~rfsfind = $ini($rfs-def(ini),fs,0)
  while (%~rfsfind > 0) {
    var %~rfsfind3 = $ini($rfs-def(ini),fs,%~rfsfind)
    if ($hget(rfs-fs,%~rfsfind3) != $null) && ($exists( [ [ $rfs-opt(dir) ] $+ ] fs- [ $+ [ %~rfsfind3 ] $+ ] .fsc) == $true) {
      var %~rfsfind4 = $rfs-opt(fsopt,find,$readini $rfs-def(ini) fs- [ $+ [ %~rfsfind3 ] ] fsopt)
      if (%~rfsfind4 == 1) {
        var %~rfsfind2 = $readini $rfs-def(ini) fs- $+ %~rfsfind3 chan
        if ($findtok(%~rfsfind2,$2,1,32) != $null) {
          var %~rfsfind4 = $readini $rfs-def(ini) fs %~rfsfind3
          var %~rfsfind6 = $numtok(%~rfsfind4,160)
          while (%~rfsfind6 > 0) {
            hadd rfs-find %~rfsfind3 $+ . $+ %~rfsfind6 $readini $rfs-def(ini) fs- $+ %~rfsfind3 dir $+ %~rfsfind6
            dec %~rfsfind6 1
          }
        }
      }
    }
    dec %~rfsfind 1
  }
  unset %~rfsfind6
  var %~rfsfind7 = 0
  :B
  var %~rfsfind2 = 1
  while ($gettok(%~rfsfind8,%~rfsfind2,160) != $null) {
    var %~rfsfind = $hget(rfs-find,0).item
    while (%~rfsfind > 0) {
      var %~rfsfind5 = $gettok($readini $rfs-def(ini) fs $gettok($hget(rfs-find,%~rfsfind).item,1,46),$gettok($hget(rfs-find,%~rfsfind).item,2,46),160)
      var %~rfsfind5 = $replace(%~rfsfind5,<ctcp>,/ctcp $me,<action>,/me)
      var %~rfsfind10 = $gettok($hget(rfs-find,%~rfsfind).item,1,46)
      var %~rfsfind7 = $rfs-cachefind(%~rfsfind10,$1,%~rfsfind7,%~rfsfind5,$hget(rfs-find,$hget(rfs-find,%~rfsfind).item),$gettok(%~rfsfind8,%~rfsfind2,160))
      if (%~rfsfind7 == $null) goto End
      dec %~rfsfind 1
    }
    inc %~rfsfind2 1
  }
  if (%~rfsfind6 == $null) && ($chr(32) isin %~rfsfind8) {
    var %~rfsfind8 = $replace(%~rfsfind8,$chr(32),$chr(95))
    var %~rfsfind6 = 1
    goto B
  }
  if (%~rfsfind7 == 1) rfs-msg $1  $+ $rfs-opt(color1) $+ Total 1 match found. You can use " quotes around phrases to refine search.
  elseif (%~rfsfind7 > 1) rfs-msg $1  $+ $rfs-opt(color1) $+ Total %~rfsfind7 matches found. You can use " quotes around phrases to refine search.
  :End
  if ($hget(rfs-find) != $null) hfree rfs-find
}
alias rfs-cps {
  if ($send(0) < 1) .timerrfscps off
  var %~rfscps = 1
  while ($send(%~rfscps) != $null) {
    var %~rfscps3 = $send(%~rfscps) $+ $chr(160) $+ $replace($send(%~rfscps).path,$chr(32),$chr(95)) $+ $replace($send(%~rfscps).file,$chr(32),$chr(95))
    var %~rfscps2 = %rfs-send- [ $+ [ %~rfscps3 ] ]
    if (%~rfscps2 != $null) {
      if (%rfs-stat-cps- [ $+ [ $gettok(%~rfscps2,1,32) ] ] == $null) %rfs-stat-cps- [ $+ [ $gettok(%~rfscps2,1,32) ] ] = $rfs-stat($gettok(%~rfscps2,1,32),cps)
      var %~rfscps4 = $remove($bytes($send(%~rfscps).cps,k),$chr(44))
      if (%~rfscps4 > $gettok(%rfs-stat-cps- [ $+ [ $gettok(%~rfscps2,1,32) ] ],1,32)) || (%rfs-stat-cps- [ $+ [ $gettok(%~rfscps2,1,32) ] ] == $null) writeini -n $rfs-def(ini) stat- $+ $gettok(%~rfscps2,1,32) cps %~rfscps4 Kb/s by $send(%~rfscps)
      if ($rfs-opt(cpschk) > 0) && (%~rfscps4 < $gettok(%~rfscps2,3,32)) {
        if ($rfs-opt(msg,cps) == 1) rfs-notice $send(%~rfscps) Your send was cancelled because the CPS fell below the minimum allowed: $gettok(%~rfscps2,3,32) Kb/s
        rfs-qsend $gettok(%~rfscps2,1,32)
      }
    }
    inc %~rfscps 1
  }
}
; <fs>
alias rfs-pauseq {
  if ($1 == $null) did -o $rfs-def(win) 48 1 Pause Sel. Q&ueue(s)
  elseif ($findtok(%rfs-q,$1,1,32) == $null) did -o $rfs-def(win) 48 1 Pause Sel. Q&ueue(s)
  else did -o $rfs-def(win) 48 1 Start Sel. Q&ueue(s)
}
; <nick> <chan> <path and file>
alias rfs-part {
  var %~rfspartb = $numtok($2,160)
  while (%~rfspartb > 0) {
    if ($nick ison $gettok($2,%~rfspartb,160)) goto End
    dec %~rfspartb 1
  }
  var %~rfspartb = $send($nick,0)
  while (%~rfspartb > 0) {
    if ($send($nick,%~rfspartb).path $+ $send($nick,%~rfspartb).file == $3-) { close -s $+ %~rfspartb $nick | goto End }
    dec %~rfspartb 1
  }
  :End
}
alias rfs-quit {
  if ($comchan($1,0) < 1) close -s $1
}
alias rfs-timeclose {
  rfs-log $rfs-opt(log,fsopen)  $+ $rfs-opt(color2) $+ $2-  $+ $rfs-opt(color3) $+ $1 $rfs-address($1,5) %~rfsopen3
  close -f $1
}
alias rfs-timelimit {
  if ($fserv($1).status == active) {
    msg = $+ $1  $+ $rfs-opt(color2) $+ Fserve time limit approaching. Connection will be closed in 30 seconds.
    .timerrfs-fstl- $+ $1 1 30 rfs-timeclose $1 Fserve time limit reached:
  }
}
alias rfs-timeout {
  if ($fserv($1).status == active) {
    msg = $+ $1  $+ $rfs-opt(color2) $+ Please do not camp! Otherwise, connection will be closed in 30 seconds.
    .timerrfs-fs- $+ $1 1 30 rfs-timeclose $1 Possible camping:
  }
}
alias rfs-timeout0 {
  .timerrfs-fs- $+ $1 1 $rfs-opt(fstimeout) rfs-timeout $1
}
; <fs> <path and file>
alias rfs-filerec {
  var %~rfsfilerec = $readini $rfs-opt(dir) $+ rfs-file $+ $1 $+ .ini File $replace($2-,$chr(32),$chr(160))
  inc %~rfsfilerec 1
  writeini -n " $+ $rfs-opt(dir) $+ rfs-file $+ $1 $+ .ini" File $replace($2-,$chr(32),$chr(160)) %~rfsfilerec
  writeini -n " $+ $rfs-opt(dir) $+ rfs-file $+ $1 $+ .ini" Top $replace($2-,$chr(32),$chr(160)) %~rfsfilerec
  var %~rfsfilerec = $ini( [ [ $rfs-opt(dir) ] $+ ] rfs-file [ $+ [ $1 ] $+ ] .ini,Top,0)
  if (%~rfsfilerec > 10) {
    while (%~rfsfilerec > 0) {
      var %~rfsfilerec2 = $ini( [ [ $rfs-opt(dir) ] $+ ] rfs-file [ $+ [ $1 ] $+ ] .ini,Top,%~rfsfilerec)
      var %~rfsfilerec3 = $readini $rfs-opt(dir) $+ rfs-file $+ $1 $+ .ini Top %~rfsfilerec2
      if (%~rfsfilerec4 == $null) || (%~rfsfilerec3 <= $gettok(%~rfsfilerec4,1,32)) var %~rfsfilerec4 = %~rfsfilerec3 %~rfsfilerec2
      dec %~rfsfilerec 1
    }
    remini -n " $+ $rfs-opt(dir) $+ rfs-file $+ $1 $+ .ini" Top $gettok(%~rfsfilerec4,2,32)
  }
}
; <fs> <nick> <path>
alias rfs-filerecshow {
  var %~rfsfilerecs = $ini( [ [ $rfs-opt(dir) ] $+ ] rfs-file [ $+ [ $1 ] $+ ] .ini,Top,0)
  while (%~rfsfilerecs > 0) {
    var %~rfsfilerecs3 = $ini( [ [ $rfs-opt(dir) ] $+ ] rfs-file [ $+ [ $1 ] $+ ] .ini,Top,%~rfsfilerecs)
    var %~rfsfilerecs2 = $readini $rfs-opt(dir) $+ rfs-file $+ $1 $+ .ini Top %~rfsfilerecs3
    var %~rfsfilerecs-a [ $+ [ %~rfsfilerecs ] ] %~rfsfilerecs2
    var %~rfsfilerecs-b [ $+ [ %~rfsfilerecs ] ] $replace(%~rfsfilerecs3,$chr(160),$chr(32))
    var %~rfsfilerecs4 = $addtok(%~rfsfilerecs4, [ [ %~rfsfilerecs2 ] $+ ] . [ $+ [ %~rfsfilerecs ] ] ,32)
    dec %~rfsfilerecs 1
  }
  var %~rfsfilerecs4 = $sorttok(%~rfsfilerecs4,32,nr)
  if ($fserv($2) != $null) var %~rfsfilerecs5 = msg = $+ $2 | else var %~rfsfilerecs5 = msg $2
  %~rfsfilerecs5  $+ $rfs-opt(color1) $+ Most popular files:
  var %~rfsfilerecs2 = 1
  while (%~rfsfilerecs2 < 11) {
    var %~rfsfilerecs3 = $gettok(%~rfsfilerecs4,%~rfsfilerecs2,32)
    if ($3- == $null) %~rfsfilerecs5  $+ $rfs-opt(color1) %~rfsfilerecs2 $+ )  $+ $rfs-opt(color3) $+ $nopath(%~rfsfilerecs-b [ $+ [ $gettok(%~rfsfilerecs3,2,46) ] ]) ( $+ %~rfsfilerecs-a [ $+ [ $gettok(%~rfsfilerecs3,2,46) ] ] times)
    else %~rfsfilerecs5  $+ $rfs-opt(color1) %~rfsfilerecs2 $+ )  $+ $rfs-opt(color3) $+ $remove(%~rfsfilerecs-b [ $+ [ $gettok(%~rfsfilerecs3,2,46) ] ],$3-) ( $+ %~rfsfilerecs-a [ $+ [ $gettok(%~rfsfilerecs3,2,46) ] ] times)
    inc %~rfsfilerecs2 1
  }
}
; <fs> <0 for off/1 for on> <time>
alias rfs-fstimer {
  var %~rfsfstimer = $ctime($asctime(mmm dd yyyy) $3) - $ctime
  if (%~rfsfstimer < 60) inc %~rfsfstimer 86400
  .timerrfsoff $+ $1 1 %~rfsfstimer rfs-fsoff $1
}
; <fs> <0 or null>
alias rfs-fsoff {
  if ($hget(rfs-fs,$1) == $null) goto End
  hdel rfs-fs $1
  .timerrfsad $+ $1 $+ * off
  if ($timer(rfsoff [ $+ [ $1 ] ] ) != $null) .timerrfsoff $+ $1 off
  if ($2 != 0) rfs-sched $1 on
  elseif ($timer(rfson [ $+ [ $1 ] ] ) != $null) .timerrfson $+ $1 off
  if ($rfs-opt(fsoffstopq) == 1) %rfs-q = $addtok(%rfs-q,$1,32)
  if ($rfs-opt(msg,fsoff) == 1) {
    if ($timer(rfson [ $+ [ $1 ] ] ) != $null) var %~rfsoff3 = (scheduled to be online in $duration($timer(rfson [ $+ [ $1 ] ] ).secs) $+ )
    rfs-msgchan $1  $+ $rfs-opt(color1) $+ My Fserve is now offline %~rfsoff3
  }
  if ($hget(rfs-fs) != $null) && ($hget(rfs-fs,0).item < 1) hfree rfs-fs
  :End
}
; <fs> <on/off>
alias rfs-sched {
  if ($timer(rfson [ $+ [ $1 ] ] ) != $null) .timerrfson $+ $1 off
  if ($timer(rfsoff [ $+ [ $1 ] ] ) != $null) .timerrfsoff $+ $1 off
  var %~rfssched = $readini $rfs-def(ini) sched- $+ $1 $2
  var %~rfssched2 = $numtok(%~rfssched,32)
  var %~rfssched7 = $ctime + 10
  while (%~rfssched2 > 0) {
    var %~rfssched3 = $gettok(%~rfssched,%~rfssched2,32)
    var %~rfssched6 = $ctime($asctime(mmm dd yyyy) $gettok(%~rfssched3,1,62))
    var %~rfssched5 = $gettok(%~rfssched3,2,62)
    if (%~rfssched5 != $null) {
      var %~rfssched4 = $rfs-dayconv($ctime(dddd))
      if (%~rfssched5 < %~rfssched4) || ((%~rfssched5 == %~rfssched4) && (%~rfssched6 < %~rfssched7)) inc %~rfssched5 7
      var %~rfssched5 = $calc((%~rfssched5 - %~rfssched4) * 86400)
    }
    else var %~rfssched5 = 0
    var %~rfssched4 = %~rfssched6 - %~rfssched7
    inc %~rfssched4 %~rfssched5
    if (%~rfssched4 < 0) inc %~rfssched4 86400
    if (%~rfssched4 < %~rfssched8) || (%~rfssched8 == $null) var %~rfssched8 = %~rfssched4
    dec %~rfssched2 1
  }
  if (%~rfssched8 != $null) .timerrfs $+ $2 $+ $1 1 %~rfssched8 rfs-fs $+ $2 $1
}
; <fs>
alias rfs-savesched {
  var %~rfssaves = 1
  while ($did(RFSS- [ $+ [ $rfs-network ] ] ,9,%~rfssaves) != $null) {
    var %~rfssaves4 = $rfs-dayconv($gettok($did(RFSS- [ $+ [ $rfs-network ] ] ,9,%~rfssaves),2,32))
    var %~rfssaves4 = $gettok($did(RFSS- [ $+ [ $rfs-network ] ] ,9,%~rfssaves),3,32) $+ > $+ %~rfssaves4
    if ($gettok($did(RFSS- [ $+ [ $rfs-network ] ] ,9,%~rfssaves),4,32) == on) var %~rfssaves2 = $addtok(%~rfssaves2,%~rfssaves4,32)
    else var %~rfssaves3 = $addtok(%~rfssaves3,%~rfssaves4,32)
    inc %~rfssaves 1
  }
  if (%~rfssaves2 != $null) writeini -n $rfs-def(ini) sched- $+ $1 on %~rfssaves2
  else remini -n $rfs-def(ini) sched- $+ $1 on
  if (%~rfssaves3 != $null) writeini -n $rfs-def(ini) sched- $+ $1 off %~rfssaves3
  else remini -n $rfs-def(ini) sched- $+ $1 off
  if ($ini($rfs-def(ini),sched- [ $+ [ $1 ] ] ,0) < 1) remini -n $rfs-def(ini) sched- $+ $1
  if ($hget(rfs-fs,$1) == $null) rfs-sched $1 on
  else rfs-sched $1 off
  rfs-alert 0 Schedule has been saved for Fserve $1
}
alias rfs-resumecps {
  if (%rfs-maxcps == $null) goto A
  var %~rfsrescps = 1
  while ($get(%~rfsrescps) != $null) {
    if ($get(%~rfsrescps).status == active) goto A
    inc %~rfsrescps 1
  }
  .dcc maxcps %rfs-maxcps
  unset %rfs-maxcps
  :A
  var %~rfsrescps = $numtok(%rfs-maxcpsq,32)
  while (%~rfsrescps > 0) {
    %rfs-q = $remtok(%rfs-q,$gettok(%rfs-maxcpsq,%~rfsrescps,32),1,32)
    rfs-qsend $gettok(%rfs-maxcpsq,%~rfsrescps,32)
    dec %~rfsrescps 1
  }
  unset %rfs-maxcpsq
}
; <fs>
alias rfs-saveprof {
  remini -n $rfs-def(ini) profile- $+ $1
  var %~rfssaveprof = 1
  while ($did(RFSP- [ $+ [ $rfs-network ] ] ,1,%~rfssaveprof) != $null) {
    writeini -n $rfs-def(ini) profile- $+ $1 %~rfssaveprof $replace($did(RFSP- [ $+ [ $rfs-network ] ] ,1,%~rfssaveprof),$str($chr(160),3),$chr(32))
    inc %~rfssaveprof 1
  }
}
; End of script