File Server v1.1 — File Browser

FileServerv1.1 / FileServerv1.1 / fserv.mrc

fserv.mrc — 27.58 KB — Download this file

on 1:load:fserve.init
#Ratio off
#Ratio end
#Custom off
#Custom end
on 1:connect: {
  .disable #offer
}
alias fserve.init {
  if %color1 == $null || %color2 == $null || %color3 == $null || %color4 == $null {
    set %color1 12 | set %color2 2 | set %color3 10 | set %color4 14
  }
  .events on
  .ctcps on
  if $exists($mircdirdata) == $false run command.com /c md $mircdirdata
  if $exists($mircdircredits) == $false run command.com /c md $mircdircredits
  if %ratio == $null set %ratio 2
  if %maxgets == $null set %maxgets 5
  if %maxsends == $null set %maxsends 5
  if %free.credits == $null set %free.credits 300000
  if %validfiles == $null set %validfiles wav, mid, zip, jpg, txt, exe, gif
  if %characters == $null set %characters !@
  if %max.top == $null set %max.top 10
  if %joinad == $null set %joinad off
  if %ad.time == $null set %ad.time 180
  if $findfile($mircdir,fserv2.mrc,1) != $null .timer 1 10 .load -rs $findfile($mircdir,fserv2.mrc,1)
  echo %color2 -s Successfully loaded $+ %color3 File Server v1.1 by Hawkee
  echo %color2 -s You may now press $+ %color1 F3 $+ %color2 to set up the script.
}
alias F3 {
  if $chat($me).status == $null {
    if $window(@Fserve Setup).state == normal window -c @Fserve Setup
    else setup
  }
  else closeemail
}
on 1:text:%command:*:{
  if %command == ! $+ $me && $2 != $null {
    if $2 == $nopath(%offer.file) && $remove($1,!) == $me { 
      dcc send $nick %offer.file 
      .notice $nick  $+ %color2 $+ Sending: $+ %color1 $nopath(%offer.file)  $+ %color2 $+ Size: $+ %color3 $lof(%offer.file)  $+ %color2 $+ bytes
    } 
    else notice $nick 4Error: $+ %color2 Invalid filename, current file being offered: $+ %color3 $nopath(%offer.file)
  }
  elseif $group(#fserve).status == on && $fserv($nick) == $null {
    set %host $readini $mircdircredits\ $+ $convert($nick) $+ .ini Host Address
    if %host == $null { writeini $mircdircredits\ $+ $convert($nick) $+ .ini Host Address $mask($fulladdress,4) | set %host $mask($fulladdress,4) }
    if %host != $mask($fulladdress,4) {
      .notice $nick  $+ %color2 Sorry, [ $+ %color1 $+ %host $+  $+ %color2 $+ ] has already taken that nickname
      .notice $nick  $+ %color2 Please choose a new nickname for access.
      halt
    }
    else {
      if $exists(%welcome) == $true fserve $nick 100 %directory %welcome
      else fserve $nick 100 %directory
    }
  }
}
on 1:text:!list:#:.notice $nick You may enter my file server by typing: $+ %color3 %command  $+ %color2 $+ Ratio: $+ %color3 1: $+ %ratio
#fserve on
#fserve end
#offer off
on 1:text:!*:*:{
  if $2 == $nopath(%offer.file) && $remove($1,!) == $me { 
    dcc send $nick %offer.file 
    .notice $nick  $+ %color2 $+ Sending: $+ %color1 $nopath(%offer.file)  $+ %color2 $+ Size: $+ %color3 $lof(%offer.file)  $+ %color2 $+ bytes
  } 
  elseif $remove($1,!) == $me .notice $nick 4Error: $+ %color2 Invalid filename, current file being offered: $+ %color3 $nopath(%offer.file)
  halt
}
alias free {
  set %files $findfile(%offer.directory,*.*,0)
  if %files != $null {
    set %offer.file $findfile(%offer.directory,*.*,$r(1,%files))
    msg %offer.chan  $+ %color2 $+ To get a free random file, you may type $+ %color3 ! $+ $me $nopath(%offer.file)  $+ %color2 $+ to receive a copy.  File size $+ %color1 $lof(%offer.file)  $+ %color2 $+ bytes 
  }
  else { 
    echo 4 -a Error $+ %color2 No files found in directory
    .disable #offer
  }
}
#offer end
on 1:text:%command:?:.notice $nick Sorry %command is shut down at the moment.
on 1:sendfail:*.*: {
  if $group(#ratio).status == on {
    if $readini $mircdircredits\ $+ $nick $+ .ini Files $filename == bought {
      remini $mircdircredits\ $+ $nick $+ .ini Files $filename
      if $fserv($nick).status == active {
        msg = $+ $nick  $+ %color2 $+ File: $+ %color1 $nopath($filename)  $+ %color2 $+ did not complete. 
        msg = $+ $nick  $+ %color1 $+ [ $+ $lof($filename) $+ ] $+ %color2 credits have been reimbursed to your account. 
      }
      else {
        .notice $nick  $+ %color2 $+ File: $+ %color1 $nopath($filename)  $+ %color2 $+ did not complete. 
        .notice $nick  $+ %color1 $+ [ $+ $lof($filename) $+ ] $+ %color2 credits have been reimbursed to your account. 
      }
      add $nick $lof($filename)
    }
  }
}
alias mget {
  set %file $findfile($2,$3-,%loop)
  if $2 $+ \ $+ $nopath(%file) == %file || $2 $+ $nopath(%file) == %file {
    if $group(#ratio).status == off || $byte.credits($1) == Unlimited && $gets($1) < %maxgets {
      dcc send $1 %file
      msg = $+ $1  $+ %color2 $+ Sending [ $+ %color1 $+ $nopath(%file) $+  $+ %color2 $+ ]
    }
    elseif $byte.credits($1) >= $lof(%file) && $gets($1) < %maxgets && %file != $null { 
      dcc send $1 %file 
      del $1 $lof(%file)
      writeini $mircdircredits\ $+ $convert($1) $+ .ini Files %file bought
      msg = $+ $1  $+ %color2 $+ Sending [ $+ %color1 $+ $nopath(%file) $+  $+ %color2 $+ ] Credits remaining: $+ %color1 $byte.credits($1)
    }
    else {
      if $gets($1) >= %maxgets msg = $+ $1  $+ %color2 $+ File transfer limit of $+ %color1 %maxgets  $+ %color2 $+ files has been reached.
      elseif $byte.credits($1) <= $lof(%file) msg = $+ $1  $+ %color2 $+ Sorry, credit limit has been reached.  You have $+ %color1 $byte.credits($1)  $+ %color2 $+ credit(s) remaining
      halt
    }
  }
  if ( %loop == %files && %files >= 2 ) || ( $2 $+ \ $+ $nopath(%file) != %file && $2 $+ $nopath(%file) != %file ) || %file == $null { msg = $+ $1  $+ %color2 $+ End of listing for [ $+ %color1 $+ $3- $+  $+ %color2 $+ ] | halt } 
}
on 1:serv:*: {
  if $byte.credits($nick) == banned {
    msg = $+ $nick  $+ %color2 $+ Sorry, you have been banned from this fserve
    close -f $nick
    halt
  }
  if $1 == get {
    unset %file
    set %files $findfile($fserv($nick).cd,$2-,0)
    if %files == 0 || $2- == $null { .msg = $+ $nick  $+ %color2 $+ No file(s) found.  Use form < $+ %color1 $+ get filename.ext $+ %color2 $+ > or < $+ %color1 $+ get file*.ex* $+ %color2 $+ > | halt }
    else for 1 %files mget $nick $cd $2-
    halt
  }
  elseif $1 == dir || $1 == ls {
    if $group(#ratio).status == on msg = $+ $nick  $+ %color2 $+ Credit status: $+ %color3 $byte.credits($nick)
    msg = $+ $nick  $+ %color2 $+ Type $+ %color1 Help $+ %color2 for Commands
    if $group(#custom).status == on {
      msg = $+ $nick  $+ %color2 $+ Directory listing for: $+ %color1 $remove($cd,$left(%directory,3))
      set %loop 1
      :loop
      if %loop > $readini $mircdirdata\cat.ini directories total goto done
      set %directory.check $readini $mircdirdata\cat.ini directories %loop
      if %directory.check == $remove($cd,$left(%directory,3)) directory $nick
      elseif $remove($cd,$left(%directory,3)) isin %directory.check {
        set %directory.check %directory.check $+ \
        set %slashes $count(%directory.check,$chr(92))
        set %directory.check $gettok(%directory.check,%slashes,92)
        set %length $len(%directory.check)
        set %distance 20 - %length
        set %check $cd $+ \ $+ %directory.check
        if ($exists(%check)) msg = $+ $nick  $+ %color2 %directory.check $str(%distance,$chr(160))  $+ %color1 <DIR>
      }
      inc %loop
      goto loop
      :done
      set %total $readini $mircdirdata\cat.ini $remove($cd,$left(%directory,3)) files
      if %total == $null set %total 0
      msg = $+ $nick  $+ %color2 $+ End of list for: $+ %color1 $remove($cd,$left(%directory,3))  $+ %color2 $+ with $+ %color1 %total  $+ %color2 $+ file(s)
      unset % $+ $nick $+ ~ $+ *
      halt
    }
  }
  elseif $1 == help {
    msg = $+ $nick  $+ %color2 $+ File serving commands:
    msg = $+ $nick  $+ %color1 $+ Dir, ls: $+ %color2 Displays the directory listing
    msg = $+ $nick  $+ %color1 $+ Get: $+ %color2 Gets a file or mutiple files
    msg = $+ $nick  $+ %color2 $+ Syntax: < $+ %color1 $+ get *.mid $+ %color2 $+ > < $+ %color1 $+ get song.mid $+ %color2 $+ > < $+ %color1 $+ get s*.* $+ %color2 $+ > etc.
    msg = $+ $nick  $+ %color1 $+ Read: $+ %color2 Reads the contents of a file
    msg = $+ $nick  $+ %color1 $+ Cd: $+ %color2 Change directory, similar syntax to Dos
    msg = $+ $nick  $+ %color1 $+ Stats: $+ %color2 Use Stats < $+ %color1 $+ Filename.ext $+  $+ %color2 $+ > for number of downloads
    msg = $+ $nick  $+ %color1 $+ Stats: $+ %color2 Displays your credit and ratio status
    msg = $+ $nick  $+ %color1 $+ Top: $+ %color2 Top %max.top downloaded files
    halt
  }
  elseif $1- == cd {
    msg = $+ $nick  $+ %color2 $+ Current Directory $+ %color1 $cd
  }
  elseif $1 == top { 
    if $2 == $0 {
      msg = $+ $nick  $+ %color2 $+ Top $+ %color1 %max.top  $+ %color2 $+ downloaded files
      for 1 %max.top top.downloads $nick
      msg = $+ $nick  $+ %color2 $+ Type $+ %color1 Top $+ %color2 < $+ %color1 $+ Number $+ %color2 $+ > to download file
      halt
    }
    set %stat $read -l $+ $2 $mircdirdata\top.ini
    set %file $gettok(%stat,1,32)
    if $2 !isnum || $2 > %max.top || $2 < 1 {
      msg = $+ $nick 4Error: $+ %color2 Invalid input, please select a number $+ %color1 1- $+ %max.top
      halt
    }
    if $exists(%file) {
      set %dir $nofile(%file)
      set %file $nopath(%file)
      set %files 1 | set %loop 1
      mget $nick %dir %file  
    }
    else { 
      msg = $+ $nick  $+ %color2 $+ [ $+ %color1 $+ %file $+  $+ %color2 $+ ] could not be found in that location
    }
    halt
  }
  elseif $1 == stats {
    if $2 == $0 { 
      msg = $+ $nick  $+ %color2 $+ Current ratio: $+ %color1 1: $+ %ratio
      msg = $+ $nick  $+ %color2 $+ You have $+ %color1 $byte.credits($nick)  $+ %color2 $+ credit(s).
      msg = $+ $nick  $+ %color2 $+ Files sent to you: $+ %color1 $downloads($nick)
      msg = $+ $nick  $+ %color2 $+ Files received from you: $+ %color1 $uploads($nick)  
      set %nick $readini $mircdirdata\address.ini Users $fserv($nick).ip
      if  %nick != $nick && $byte.credits($nick) == 0 msg = $+ $nick  $+ %color2 $+ You have $+ %color1 $byte.credits(%nick)  $+ %Color2 $+ credits under this nick: $+ %color1 %nick
      halt
    }
    set %file $cd $+ \ $+ $2  
    set %downloads $readini $mircdirdata\download.ini Files %file
    if %downloads == $0 msg = $+ $nick  $+ %color2 $+ No record found for: $+ %color1 $2
    else msg = $+ $nick  $+ %color2 $+ [ $+ %color1 $+ $2 $+  $+ %color2 $+ ] has been downloaded $+ %color1 %downloads  $+ %color2 $+ Time(s).
    halt
  }
  elseif $1 != cd && $1 != cd.. && $1 != exit && $1 != bye && $1 != quit && $1 != read && $1 != s && $1 != c halt
}
on 1:filesent:*.*: {
  newfile $nick download
  if $readini $mircdircredits\ $+ $convert($nick) $+ .ini Files $filename == bought remini $mircdircredits\ $+ $convert($nick) $+ .ini Files $filename
  flushini $mircdircredits\ $+ $convert($nick) $+ .ini
  increment $filename
}
on 1:filercvd:*.*: {
  if $group(#ratio).status == on {
    %temp = %ratio * $lof($filename) 
    add $nick %temp
    if $fserv($nick).status == active {
      msg = $+ $nick  $+ %color2 $+ Upload of $+ %color1 $nopath($filename)  $+ %color2 $+ complete: Credit(s) earned: $+ %color1 %temp  $+ %color2 $+ Total Credits: $+ %color1 $byte.credits($nick)  $+ %color2 $+ credit(s)
    }
    else .notice $nick  $+ %color2 $+ Upload of $+ %color1 $nopath($filename)  $+ %color2 $+ complete: Credit(s) earned: $+ %color1 %temp  $+ %color2 $+ Total Credits: $+ %color1 $byte.credits($nick)  $+ %color2 $+ credit(s)
  }
  newfile $convert($nick) uploads
  write $mircdirupload.log Received $filename from $nick 
}
on 1:servclose:unset % $+ $nick $+ cd
alias h2 return  $+ $$1 $+  $+ %color2 $+ H14a $+ %color3 $+ w14k $+ %color3 $+ e $+ $$1 $+ e Pro
alias v return  $+ $$1 $+ v2.5 $+ $$2
alias check.custom {
  if $group(#custom) == on {
    set %check %number.of.files + 1
    if $findfile(%directory,*.*,%check) != $null || $findfile(%directory,*.*,%number.of.files) == $null {
      echo %color2 -a Directory structure of $+ %color1 Custom Fserve $+ %color2 has changed
      echo %color2 -a Please type $+ %color1 /compile $+ %color2 to re-compile
      echo %color2 -a Press $+ %color1 F3 $+ %color2 and switch to $+ %color1 Normal $+ %color2 mode to avoid this message.
    }
    unset %check
  }
}
on 1:servopen: {
  check.custom
  if $group(#custom).status != on  msg = $+ $nick $h2(%color2) $v(4,%color1)
  else msg = $+ $nick $h2(%color2) $v(4,%color1) Custom File-Serve Mode
  msg = $+ $nick  $+ %color2 $+ Available at: $+ %color1 http://www.hawkee.com
  msg = $+ $nick  $+ %color2 $+ Type $+ %color1 Help $+ %color2 for Commands
  if $group(#custom).status == on {
    set %directory.letters $len(%directory)
    dec %directory.letters 3
    set %current.directory $right(%directory,%directory.letters)
    dec %directory.letters
    set %current.directory $left(%current.directory,%directory.letters)
    set % $+ $nick $+ cd %current.directory 
  }
  if $group(#ratio).status == on {
    set %check $readini $mircdirdata\address.ini Users $fserv($nick).ip
    if %check == $0 && $byte.credits($nick) == 0 {    
      writeini $mircdirdata\address.ini Users $fserv($nick).ip $convert($nick)
      writeini $mircdircredits\ $+ $convert($nick) $+ .ini Credits Credits %free.credits
    }
    elseif %check != $convert($nick) && %check != $null {
      msg = $+ $nick  $+ %color2 $+ Free credits denied, your record lies under this nick: $+ %color1 %check
      .remove $mircdircredits\ $+ $convert($nick) $+ .ini
      halt
    }
  }
}
alias newfile incini credits $1 Transfer $2 1
alias uploads return $check($1,Transfer,uploads)
alias downloads return $check($1,Transfer,download)
alias check {
  set %number $readini $mircdircredits\ $+ $convert($1) $+ .ini $2 $3
  if %number == $null {
    return 0
    goto end
  }
  return %number
  :end
}
alias incini {
  set %credits $readini $mircdir $+ $1 $+ \ $+ $convert($2) $+ .ini $3 $4
  if %credits == $null || $5 == Unlimited || $5 == Banned {
    writeini $mircdir $+ $1 $+ \ $+ $convert($2) $+ .ini $3 $4 $5
    goto end
  }
  inc %credits $5
  writeini $mircdir $+ $1 $+ \ $+ $convert($2) $+ .ini $3 $4 %credits
  :end
}
alias add incini Credits $1 Credits Credits $2
alias byte.credits return $check($1,Credits,Credits)
alias del {
  set %credits $readini $mircdircredits\ $+ $convert($1) $+ .ini Credits Credits
  if %credits == $null {
    writeini $mircdircredits\ $+ $convert($1) $+ .ini Credits Credits 0
    goto end
  }
  dec %credits $2
  if %credits < 0 set %credits 0
  writeini $mircdircredits\ $+ $convert($1) $+ .ini Credits Credits %credits
  :end
}
alias delete {
  remini $mircdircredits\ $+ $convert($1) $+ .ini Credits
}
alias convert {
  set %nickname $left($1,8)
  set %nickname $replace(%nickname,[,_)
  set %nickname $replace(%nickname,],_)
  set %nickname $replace(%nickname,|,_)
  set %nickname $replace(%nickname,^,_)
  set %nickname $replace(%nickname,\,_)
  set %nickname $replace(%nickname,-,_)
  return %nickname
}
alias increment {
  incini data download Files $1 1
  set %downloads $readini $mircdirdata\download.ini Files $1
  add.file $1 %downloads
}
alias add.file for 1 %max.top insert $1 $2
alias insert {
  if ($exists($mircdirdata\top.ini)) set %file.check $read -l $+ %loop $mircdirdata\top.ini
  if %file.check == $null set %file.check None 0
  if $gettok(%file.check,1,32) == $1 { write -l $+ %loop $mircdirdata\top.ini $1 $2 | set %loop %max.top | if $window(@Top Downloads).state == normal display.top | goto done }
  elseif $gettok(%file.check,2,32) < $2 {
    write -ds $+ $1 $mircdirdata\top.ini
    write -il $+ %loop $mircdirdata\top.ini $1 $2
    set %limit %max.top + 1
    write -dl $+ %limit $mircdirdata\top.ini
    set %loop %max.top
    if $window(@Top Downloads).state == normal display.top
    goto done
  }
  :done
  unset %file.check
}
alias top.downloads {
  unset %stat
  if ($exists($mircdirdata\top.ini)) set %stat $read -l $+ %loop $mircdirdata\top.ini
  if %stat ==  $null msg = $+ $1  $+ %color1 $+ [ $+ %loop $+ ] $+ %color2 None
  else {
    set %filename $gettok(%stat,1,32)
    set %downloads $gettok(%stat,2,32)
    if %downloads > 1 msg = $+ $1  $+ %color1 $+ [ $+ %loop $+ ] $+ %color3 $nopath(%filename)  $+ %color2 $+ with $+ %color1 %downloads  $+ %color2 $+ downloads
    else msg = $+ $1  $+ %color1 $+ [ $+ %loop $+ ] $+ %color3 $nopath(%filename)  $+ %color2 $+ with $+ %color1 %downloads  $+ %color2 $+ download
  }
}
alias des {
  set %file.for.description $$dir="Please Select a file for new description" %directory
  set %des $$?="Enter description for selected file"
  writeini $mircdirdata\describe.ini Files %file.for.description %des
  echo %color2 -s Added [ $+ %color1 $+ %des $+  $+ %color2 $+ ] as description for $+ %color1 $nopath(%file.for.description)
  unset %file.for.description
  unset %des
}
alias directory {
  set %directory.loop 1
  :start
  if %directory.loop > $readini $mircdirdata\cat.ini $remove($fserv($1).cd,$left(%directory,3)) files goto end
  set %file $readini $mircdirdata\cat.ini $remove($fserv($1).cd,$left(%directory,3)) %directory.loop 
  set %length $gettok(%file,2,32)
  set %file $gettok(%file,1,32)
  set %size $len(%file)
  set %distance 15 - %size
  set %fullpath $fserv($1).cd $+ \ $+ %file
  set %path $fserv($1).cd $+ $chr(92) $+ %file
  set %description $readini $mircdirdata\describe.ini Files %fullpath
  if $exists(%path) {
    if %description != $null .msg = $+ $1  $+ %color2 %file $str(%distance,$chr(160))  $+ %color3 %length bytes  $+ %color4 %description
    else .msg = $+ $1  $+ %color2 %file $str(%distance,$chr(160))  $+ %color3 %length bytes
  }
  inc %directory.loop
  goto start
  :end
}
;################## Required for the Compilation of the File Serving Directory Structure ##################
alias compile {
  echo %color2 -a Compiling directory structure of: $+ %color1 %directory
  flushini $mircdirdata\cat.ini
  .remove $mircdirdata\cat.ini
  set %number.of.files $findfile(%directory,*.*,0)
  unset %current.directory
  if %number.of.files < 200 {
    set %incrementation $round($calc(200 / %number.of.files),0)
    if %incrementation > 1 dec %incrementation
    set %newloop %incrementation
  }
  else {
    set %incrementation $round($calc(%number.of.files / 200),0)
    set %newloop 0
    set %spot 0
  }
  for 1 %number.of.files writefile
  rline %window 2  $+ %color1 $+ [ $+ %directory $+ ] $+ %color2 has been successfully compiled 
}
menu @Progress Meter {
  dclick window -c @Progress Meter
}
alias progress {
  set %window @Progress Meter
  if $window(%window).state != normal {
    window %window 95 120 430 70 %window Arial bold 12
    for 1 4 aline %window 0-
    set %loop 1
  }
  rline %window 1  $+ %color2 $+ Creating directory structure for [ $+ %color1 $+ %directory $+  $+ %color2 $+ ]
  rline %window 2  $+ %color2 $+ Files complete: $+ %color1 %loop  $+ %color2 $+ of $+ %color1 %number.of.files
  if %number.of.files < 200 {  
    inc %newloop %incrementation
    set %string 1,1|
    set %position $line(%window,0)
    rline %window %position $str(%newloop,%string)
    dec %position
    rline %window %position $str(%newloop,%string)
  }
  else {
    if %newloop > %incrementation {
      set %string 1,1|
      set %position $line(%window,0)
      inc %spot
      rline %window %position $str(%spot,%string)
      dec %position
      rline %window %position $str(%spot,%string)
      set %newloop 0
    }
    inc %newloop
  }
}
alias writefile {
  set %current.file $findfile(%directory,*.*,%loop)
  set %slash.count $count(%current.file,$chr(92))
  if %slash.count > 2 set %slash.count 2- [ $+ [ %slash.count ] ]
  if %current.directory != $gettok(%current.file,%slash.count,92) newdirectory $gettok(%current.file,%slash.count,92)
  set %current.directory $gettok(%current.file,%slash.count,92)
  addfile $gettok(%current.file,%slash.count,92)
  set %file.number $readini $mircdirdata\cat.ini %current.directory files
  writeini $mircdirdata\cat.ini %current.directory %file.number $nopath(%current.file) $lof(%current.file)
  progress
}
alias addfile incini data cat $1 files 1
alias newdirectory {
  set %directories $readini $mircdirdata\cat.ini directories total
  if %directories == $null {
    writeini $mircdirdata\cat.ini directories total 1
    writeini $mircdirdata\cat.ini directories 1 $1
    goto end
  }
  inc %directories
  writeini $mircdirdata\cat.ini directories total %directories
  writeini $mircdirdata\cat.ini directories %directories $1
  :end
}
;############################## Initialize Custom F-Serve Mode ##############################
alias custom {
  set %window @Important
  window -c %window
  window %window 120 30 400 305 @Important Arial bold 12
  if $line(%window,0) == 0  for 1 7 aline -c0 %window -
  echo %window  $+ %color2 $+ The Custom Fserve will allow you to utilize a more professional looking Fserve while at the same time giving descriptions to any of the files within your Fserve.  This is not recommended for newer users who may not know how an Fserve works.  This will first need to compile the directory structure of your Fserve directory to text so that it can be displayed to users.  This process could take several minutes on slower computers.  If you tend to change around the files within your fserve, this may not be a good idea to 
  echo %window  $+ %color2 $+ use, for it will require you to re-compile the directory structure every time you add or delete files to your File Serving directory.  If you wish to activate this feature, you will need to double click on this window.  If not, you may simply close this window.  Upon confirmation, your fserve directory will be compiled, so please be aware that a long pause may take place.
  rline %window 6  $+ %color2 $+ Custom File Server 4(Please Read)
  rline %window 7  $+ %color3 $+ ===========================================================
  aline %window  $+ %color3 $+ ================== $+ %color4 $+ Double click to Proceed  $+ %color3 $+ ===================
}
alias activatecustom {
  window -c @Important
  if $right(%directory,1) != $chr(92) set %directory %directory $+ $chr(92)
  .disable #custom
  compile
  .enable #custom
  set %description.popup File descriptions
}
menu @Important {
  dclick activatecustom
  Activate:activatecustom
  Cancel:window -c @Important
}
;############################### Menus and Settings ###################################
menu query {
  -
  Info Center:info $1
}
menu nicklist {
  -
  Info Center:info $1
}
menu menubar {
  File Serving
  .Fserve Settings:setup
  .Top Downloads:display.top
}
menu status {
  File Serving
  .Fserve Settings:setup
  .Top Downloads:display.top
}
on 1:part:#: {
  if $nick == $me {
    close.timer ad $chan
    if %offer.chan == $chan {
      .disable #offer
      .timer50 off
      unset %offer.chan
    }
  }
}
alias close.timer {
  unset %timer
  for 1 $timer(0) find.timer $1-
  if %timer != $null  .timer $+ %timer off
}
alias find.timer {
  unset %timer
  if $timer(%loop).com == $1- { set %timer $timer(%loop) | set %loop $timer(0) }
}
menu channel {
  File Serving
  .Fserve Settings (F3):F3
  .-
  .Advertise Fserve
  ..Activate Ad: {
    if $group(#fserve) == off { echo -a 4Error: $+ %color2 Fserve is not active, please press $+ %color1 F3 $+ %color2 if you wish to activate it | halt }
    unset %timer    
    for 1 $timer(0) find.timer ad #
    if %timer != $null { echo %color2 -a Advertisement already running in: $+ %color1 # | halt } 
    ad #
    .timer 0 %ad.time ad #
    echo %color2 -a Advertisement activated in: $+ %color1 #
  }
  ..Deactivate Ad: {
    unset %timer
    for 1 $timer(0) find.timer ad #
    if %timer == $null { echo %color2 -a No advertisement running in: $+ %color1 # | halt }
    else {
      echo %color2 -a Advertisement deactivated in: $+ %color1 #
      .timer $+ %timer off
    }
    halt
  }
  ..-
  ..Information:echo %color1 -a Channel Ad: $+ %color2 This will run a timed advertisement for your fserve in any channel from which this is activated, advertisements will run in4 5 $+ %color2 minute intervals.
  .Random File Offer
  ..Activate Offer: {
    set %offer.directory $$?="What directory would you like to offer from?"
    :back
    if ($exists(%offer.directory)) set %offer.chan #
    else { set %offer.directory $$?="Invalid directory, please reenter" | goto back }
    set %time $$?="How many seconds between each new file?"
    .enable #offer
    free
    if %files != $null .timer50 0 %time free
    unset %files
  }
  ..Deactivate Offer: {
    .disable #offer
    .timer50 off
    echo %color2 -a Deactivated free file offer to $+ %color1 %offer.chan
    unset %offer.chan
    halt
  }
  ..-
  ..Information:echo %color1 -a File offer: $+ %color2 This will pick a random file from the directory you specify and offer it to the channel for free 4Note: $+ %color2 You may only offer to one channel at any given time. 
}
alias setup {
  if $findfile($mircdir,fserv2.mrc,1) != $null .load -rs $findfile($mircdir,fserv2.mrc,1)
  else {
    echo 4 -s Error: $+ %color2 fserv2.mrc was not found in $mircdir
    echo %color2 -s Please make sure you copy that file into the appropriate directory and re-install.
  }
  set %window @Fserve Setup
  if $window(%window).state == $null window %window 160 55 310 253 %window Arial bold 12
  else window %window $window(%window).x $window(%window).y 310 253 %window Arial bold 12
  if $line(%window,0) == 0  for 1 14 aline -c0 %window -
  rline %window 1  $+ %color3 ============== $+ %color4 Fserve Setup $+ %color3 ==============
  if %command != $null  rline %window 2  $+ %color2 Fserve Trigger command: $+ %color1 %command   $+ %color2 Active: $+ %color1 $group(#fserve)
  else   rline %window 2  $+ %color2 Fserve Trigger command: $+ %color1 None   $+ %color2 Active: $+ %color1 $group(#fserve)
  if $group(#custom).status == on  rline %window 3  $+ %color2 Fserve Mode: $+ %color1 Custom 
  else rline %window 3  $+ %color2 Fserve Mode: $+ %color1 Normal
  if %directory != $null rline %window 4  $+ %color2 Serving directory: $+ %color1 %directory 
  else rline %window 4  $+ %color2 Serving directory: $+ %color1 None
  if %welcome == $null  rline %window 5  $+ %color2 Fserve welcome file: $+ %color1 None
  else  rline %window 5  $+ %color2 Fserve welcome file: $+ %color1 %welcome
  rline %window 6  $+ %color2 Ratio: $+ %color1 1: $+ %ratio $chr(160)  $+ %color2 $+ Ratio status: $+ %color1 $group(#ratio).status
  rline %window 7  $+ %color2 Join Notice: $+ %color1 %joinad
  rline %window 8  $+ %color2 Max outgoing transferrs to each user: $+ %color1 %maxgets
  rline %window 9  $+ %color2 Max incoming transferrs per user: $+ %color1 %maxsends
  rline %window 10  $+ %color2 Starting credits for new users: $+ %color1 %free.credits
  rline %window 11  $+ %color2 Acceptable file types: $+ %color1 %validfiles
  rline %window 12  $+ %color2 Deny files starting with: $+ %color1 %characters
  rline %window 13  $+ %color2 Record top $+ %color1 %max.top  $+ %color2 $+ downloaded file(s) for fserve
  rline %window 14  $+ %color3 ======== $+ %color4 $+ Right click to change settings $+ %color3 $+ ========
}
alias for {
  set %loop $1
  :loop
  if %loop > $2 goto end
  $3-
  inc %loop
  goto loop
  :end
}
alias ad {
  msg #  $+ %color2 $+ To get into my file server, you may type: $+ %color1 %command  $+ %color2 $+ Ratio: $+ %color3 1: $+ %ratio
}