alias _fserv {
  if ($1 == on) { .enable #_fserv }
  if ($1 == off) { .disable #_fserv }
  if ($1 == setup) { dialog -m _fserv _fserv }
  else { return }
}


alias -l _trigger { return $readini " $+ $scriptdirfserv.ini $+ " Settings trigger }
alias -l _mgets.u { return $readini " $+ $scriptdirfserv.ini $+ " Settings mgets.u }
alias -l _msends.u { return $readini " $+ $scriptdirfserv.ini $+ " Settings msends.u }
alias -l _mgets.t { return $readini " $+ $scriptdirfserv.ini $+ " Settings mgets.t }
alias -l _msends.t { return $readini " $+ $scriptdirfserv.ini $+ " Settings msends.t }
alias -l _mcps.u { return $readini " $+ $scriptdirfserv.ini $+ " Settings mcps.u }
alias -l _homedir { return $readini " $+ $scriptdirfserv.ini $+ " Settings homedir }
alias -l _welcomemsg { return $readini " $+ $scriptdirfserv.ini $+ " Settings welcomemsg }


alias -l _fsave {
  if ($did(_fserv,20).text != $null) { writeini " $+ $scriptdirfserv.ini $+ " Settings trigger $did(_fserv,20).text }
  if ($did(_fserv,21).text != $null) { writeini " $+ $scriptdirfserv.ini $+ " Settings mgets.u $did(_fserv,21).text }
  if ($did(_fserv,22).text != $null) { writeini " $+ $scriptdirfserv.ini $+ " Settings msends.u $did(_fserv,22).text }
  if ($did(_fserv,23).text != $null) { writeini " $+ $scriptdirfserv.ini $+ " Settings mgets.t $did(_fserv,23).text }
  if ($did(_fserv,24).text != $null) { writeini " $+ $scriptdirfserv.ini $+ " Settings msends.t $did(_fserv,24).text }
  if ($did(_fserv,25).text != $null) { writeini " $+ $scriptdirfserv.ini $+ " Settings mcps.u $did(_fserv,25).text }
  if ($did(_fserv,26).text) { writeini " $+ $scriptdirfserv.ini $+ " Settings homedir $did(_fserv,26).text }
  if ($did(_fserv,27).text) { writeini " $+ $scriptdirfserv.ini $+ " Settings welcomemsg $did(_fserv,27).text }
}

alias -l _fload {
  if ($_trigger != $null) { _do 20 1 $_trigger }
  else { did -o _fserv 20 1 Not Yet Set }
  if ($_mgets.u != $null) { _do 21 1 $_mgets.u }
  else { did -o _fserv 21 1 Not Yet Set }
  if ($_msends.u != $null) { _do 22 1 $_msends.u }
  else { did -o _fserv 22 1 Not Yet Set }
  if ($_mgets.t != $null) { _do 23 1 $_mgets.t }
  else { did -o _fserv 23 1 Not Yet Set }
  if ($_msends.t != $null) { _do 24 1 $_msends.t }
  else { did -o _fserv 24 1 Not Yet Set }
  if ($_mcps.u != $null) { _do 25 1 $_mcps.u }
  else { did -o _fserv 25 1 Not Yet Set }
  if ($_homedir) { _do 26 1 $_homedir }
  else { did -o _fserv 26 1 Not Yet Set }
  if ($_welcomemsg) { _do 27 1 $_welcomemsg }
  else { did -o _fserv 27 1 Not Yet Set }
}

alias -l _homedir.browse { _do 26 1 $$sdir="Choose a Home Directory:" c:\ | dialog -v _fserv }
alias -l _welcomemsg.browse { _do 27 1 $$dir="Choose a Welcome Message File:" c:\ | dialog -v _fserv }

alias -l _do { did -o _fserv $1- }

dialog _fserv {
  title "File Server Settings"
  size -1 -1 200 150
  option dbu
  text "Trigger:" , 10 , 5 20 50 10 , right
  text "Max Gets / User:" , 11 , 5 30 50 10 , right
  text "Max Sends / User:" , 12 , 5 40 50 10 , right
  text "Max Gets / Total:" , 13 , 5 50 50 10 , right
  text "Max Sends / Total:" , 14 , 5 60 50 10 , right
  text "Max Cps / User:" , 15 , 5 70 50 10 , right
  text "Home Directory:" , 16 , 5 80 50 10 , right
  text "Welcome Msg:" , 17 , 5 90 50 10 , right

  edit "" , 20 , 60 19 70 10 , left autohs
  edit "" , 21 , 60 29 70 10 , left autohs
  edit "" , 22 , 60 39 70 10 , left autohs
  edit "" , 23 , 60 49 70 10 , left autohs
  edit "" , 24 , 60 59 70 10 , left autohs
  edit "" , 25 , 60 69 70 10 , left autohs
  edit "" , 26 , 60 79 105 10 , left autohs
  edit "" , 27 , 60 89 105 10 , left autohs

  button "Browse" , 30 , 170 79 25 10 , default
  button "Browse" , 31 , 170 89 25 10 , default

  menu "File" , 40
  item "Enable File Server" , 41
  item "Disable File Server" , 42
  item break , 43
  item "Save Settings" , 44
  item "Reset Settings" , 45
  item break , 46
  item "Close && Save" , 47
  item "Close w/o Save" , 48

  edit "File Server Notes..." , 50 , 5 105 190 10 , left read autohs

  button "&Ok" , 100 , 165 120 30 15 , ok
}

on *:dialog:_fserv:init:*: { _fload }

on *:dialog:_fserv:sclick:*: {
  if ($did == 30) { .timer 1 0 _homedir.browse }
  if ($did == 31) { .timer 1 0 _welcomemsg.browse }
  if ($did == 100) { _fsave }
}


on *:dialog:_fserv:menu:*: {
  if ($did == 41) { .enable #_fserv | _do 50 1 File Server has been activated... }
  if ($did == 42) { .disable #_fserv | _do 50 1 File Server has been deactivated... }
  if ($did == 44) { _fsave | _do 50 1 File Server settings saved... }
  if ($did == 45) { _fload | _do 50 1 File Server settings reset... }
  if ($did == 47) { _fsave | dialog -x $dname }
  if ($did == 48) { dialog -x $dname }
}

#_fserv off

on *:text:$( $+ $_trigger $+ *):#: {
  if ($fserv($nick) == $null) {
    if ($send(0) >= $_mgets.t) { notice $nick Sorry, max uploads have been reached, try agian later. | return }
    else {
      notice $nick Attempting to fserve you...
      if ($_welcomemsg) { fserve $nick $_mgets.u $_homedir $_welcomemsg }
      else { fserve $nick $_msends.u $_homedir }
    }
  }
  else { notice $nick Sorry, fileserver busy, you already have a file server session open. | return }
}

on *:serv:*: {
  if ($1 != dir && $1 != help && $1 != get && $1 != cd && $1 != ls && $1 != read && $1 != exit && $1 != bye && $1 != s ) {
    msg =$nick [[ $+ $chr(3) $+ 12 $+ $1 $+ $chr(3) $+ ]] Unknown Command | haltdef
  }
  else {
    if ($1 == get) {
      var %_file = " $+ $fserv($nick).cd $+ \ $+ $2- $+ " , %_fileb = $file(%_file).size
      if ($2 == $null) { msg =$nick Please specify a filename... | haltdef | return }
      if ($exists(%_file) && %_fileb > 0 && $chr(92) !isin $2-) {
        if ($send($nick,0) >= $_mgets.u || $send(0) >= $_mgets.t) { msg =$nick Sorry, max sends have been reached... | haltdef | return }
        msg =$nick Sending you $2- $+ ...
        if ($_mcps.u) { dcc send -l [ $+ [ $_mcps.u ] ] $nick %_file | haltdef }
        else { return }
      }
      else { msg =$nick Sorry, [[ $+ $chr(3) $+ 12 $+ $2- $+ $chr(3) $+ ]] is not a valid file, check your spelling... | haltdef }
    }
    if ($1 == exit || $1 == bye) { msg =$nick Good Bye! Come back soon! | close -f $nick }
  }
}

ctcp *:dcc send*:?: {
  if ($3) { 
    if ($get($nick,0) >= $_msends.u || $get(0) >= $_msends.t) {
      notice $nick Sorry, my max get's allowed have been reached...
      close -g [ $+ [ $get($nick,0) ] ] $nick
      haltdef
    }
  }
}

on *:filercvd:*: { .notice $nick Thank you for sending me $nopath($filename) $+ ... }
on *:filesent:*: { .notice $nick Successfully sent you $nopath($filename) $+ ... }
on *:sendfail:*: { .notice $nick Send of $nopath($filename) incomplete... }
on *:getfail:*: { .notice $nick Get of $nopath($filename) incomplete... }

#_fserv end
