#by wiebe @ QuakeNet
#requires base64.tcl and uuencode.tcl



#help decode msg
bind msgm fvlomn|fvlomn "help decode" c_decode:help:msg

proc c_decode:help:msg { nick uhost handle text } {
  c_decode:msg $nick $uhost $handle ""
  putcmdlog "($nick!$uhost) !$handle! $text"
}



#decode msg
bind msg fvlomn|fvlomn decode c_decode:msg

proc c_decode:msg { nick uhost handle text } {
  set decode $text
  if { ![string equal $decode ""] } {
    set methode [lindex [split $text] 3]
    if { [string match \$decode(?*) $decode] } {
      set decode [string range $decode 8 end-1]
      if { [string match -nocase *?,m $decode] } {
        set methode m
        set decode [string range $decode 0 end-2]
      } else {
        set methode u
        set decode [string range $decode 0 end-2]
      }
    }
    if { ![string equal -nocase $methode m] } { set methode u }
    if { [string equal -nocase $methode u] } {
      if { [catch {set result [::uuencode::decode [string range $decode 1 end]]} error] } {
        putlog "ERROR using uuencode.tcl, perhaps you have not loaded it?"
        error $error
      }
      lappend output "Decoded using uuencode: $result"
    } else {
      if { [catch {set result [::base64::decode $decode]} error] } {
        putlog "ERROR using base64.tcl, perhaps you have not loaded it?"
        error $error
      }
      lappend output "Decoded using mime: $result"
    }
  } else {
    lappend output "usage: decode <\$decode(...)>  -  as given in mIRC"
    lappend output "usage: decode <string> \[u|m\]  -  u=uuencode (default), m=mime"
  }
  if { [catch {set x [cnotice $nick $output]} error] || !$x } {
    foreach t $output { puthelp "NOTICE $nick :$t" }
  }
  return 1
}



#decode dcc
bind dcc - decode c_decode:dcc

proc c_decode:dcc { handle idx text } {
  set decode $text
  if { ![string equal $decode ""] } {
    set methode [lindex [split $text] 3]
    if { [string match \$decode(?*) $decode] } {
      set decode [string range $decode 8 end-1]
      if { [string match -nocase *?,m $decode] } {
        set methode m
        set decode [string range $decode 0 end-2]
      } else {
        set methode u
        set decode [string range $decode 0 end-2]
      }
    }
    if { ![string equal -nocase $methode m] } { set methode u }
    if { [string equal -nocase $methode u] } {
      if { [catch {set result [::uuencode::decode [string range $decode 1 end]]} error] } {
        putlog "ERROR using uuencode.tcl, perhaps you have not loaded it?"
        error $error
      }
      putidx $idx "Decoded using uuencode: $result"
    } else {
      if { [catch {set result [::base64::decode $decode]} error] } {
        putlog "ERROR using base64.tcl, perhaps you have not loaded it?"
        error $error
      }
      putidx $idx "Decoded using mime: $result"
    }
  } else {
    putidx $idx "usage: decode <\$decode(...)>  -  as given in mIRC"
    putidx $idx "usage: decode <string> \[u|m\]  -  u=uuencode (default), m=mime"
  }
  return 1
}

