#by wiebe @ QuakeNet



#help chr pub
bind pubm fvlomn|fvlomn "% ${botnet-nick} help chr" c_chr:help:pub

proc c_chr:help:pub { nick uhost handle chan text } {
  lappend output "Usage: chr <number1> \[<number2> .. <number10>\] (range 0-255)"
  if { [catch {set x [cnotice $nick $output]} error] || !$x } {
    foreach t $output { puthelp "NOTICE $nick :$t" }
  }
  putloglev c $chan "[lindex [split $text] 1]: $nick $uhost $handle $chan [join [lrange [split $text] 2 end]]"
}



#help chr msg
bind msgm fvlomn|fvlomn "help chr" c_chr:help:msg

proc c_chr:help:msg { nick uhost handle text } {
  lappend output "Usage: chr <number1> \[<number2> .. <number10>\] (range 0-255)"
  if { [catch {set x [cnotice $nick $output]} error] || !$x } {
    foreach t $output { puthelp "NOTICE $nick :$t" }
  }
  putcmdlog "($nick!$uhost) !$handle! $text"
}



#chr pub
bind pubm fvlomn|fvlomn "% ${botnet-nick} chr" c_chr:pub
bind pubm fvlomn|fvlomn "% ${botnet-nick} chr *" c_chr:pub

proc c_chr:pub { nick uhost handle chan text } {
  set chrs [join [lrange [split $text] 2 11]]
  set result ""
  foreach chr [split $chrs] {
    set r [c_chr:chr2asc $chr]
    if { [string equal $r ""] } { set r invalid }
    lappend result "  $chr\017 = $r  "
  }
  if { [string equal $result ""] } {
    lappend output "Usage: chr <number1> \[<number2> .. <number10>\] (range 0-255)"
    if { [catch {set x [cnotice $nick $output]} error] || !$x } {
      foreach t $output { puthelp "NOTICE $nick :$t" }
    }
  } else {
    puthelp "PRIVMSG $chan :CHR for: [join $result]"
  }
  putloglev c $chan "[lindex [split $text] 1]: $nick $uhost $handle $chan [join [lrange [split $text] 2 end]]"
}



#chr msg
bind msg fvlomn|fvlomn chr c_chr:msg

proc c_chr:msg { nick uhost handle text } {
  set chrs [join [lrange [split $text] 0 9]
  set result ""
  foreach chr [split $chrs] {
    set r [c_chr:chr2asc $chr]
    if { [string equal $r ""] } { set r invalid }
    lappend result "  $chr\017 = $r  "
  }
  if { [string equal $result ""] } {
    lappend output "Usage: chr <number1> \[<number2> .. <number10>\] (range 0-255)"
  } else {
    lappend output "CHR for: [join $result]"
  }
  if { [catch {set x [cnotice $nick $output]} error] || !$x } {
    foreach t $output { puthelp "NOTICE $nick :$t" }
  }
  return 1
}



#chr dcc
bind dcc -|- chr c_chr:dcc

proc c_chr:dcc { handle idx text } {
  set chrs [join [lrange [split $text] 0 9]]
  set result ""
  foreach chr [split $chrs] {
    set r [c_chr:chr2asc $chr]
    if { [string equal $r ""] } { set r invalid }
    lappend result "  $chr\017 = $r  "
  }
  if { [string equal $result ""] } {
    putidx $idx "Usage: chr <number1> \[<number2> .. <number10>\] (range 0-255)"
  } else {
    putidx $idx "CHR for: [join $result]"
  }
  return 1
}



#proc to go from chr to asc
proc c_chr:chr2asc { chr } {
  if { [string equal $chr ""] } { return }
  if { ![string is digit $chr] } { return }
  if { $chr > 255 || $chr < 0 } { return }
  set _chr(0) "\$null"
  set _chr(1) "ctcp"
  set _chr(2) "bold"
  set _chr(3) "color"
  set _chr(9) "tab"
  set _chr(10) "lf"
  set _chr(13) "cr"
  set _chr(15) "end"
  set _chr(22) "reverse"
  set _chr(31) "underline"
  set _chr(32) "space"
  set _chr(160) "hard space"  
  if { [info exists _chr($chr)] } { set result $_chr($chr) } else { set result [format %c $chr] }
  return $result
}

