view calc.tcl @ 72:fd300fe87f59

Renamed laske.tcl to calc.tcl
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 11 Sep 2011 17:54:12 +0300
parents laske.tcl@50cbd24feadf
children fccfbcbb06e4
line wrap: on
line source

##########################################################################
#
# Calc v0.4 by ccr/TNSP <ccr@tnsp.org>
# (C) Copyright 2008-2011 Tecnic Software productions (TNSP) 
#
# A simple calculator for Eggdrop.
#
# This script is freely distributable under GNU GPL (version 2) license.
#
##########################################################################

# Error message for when no arguments given to the command
set calc_err_noargs "Laalis?"

set calc_preferredmsg "PRIVMSG"


##########################################################################
# No need to look below this line
##########################################################################
set calc_message "Laske v0.4 by ccr/TNSP"
#set calc_reps [split "\$|| ||^|**|pi|3.14159265|e|2.71828183" "|"]
set calc_reps [split "\$||\;||^|**|pi|3.141592653589793238|PI|3.141592653589793238|e|2.71828183" "|"]

putlog "$calc_message"
bind pub - !laske calc_pubmsg
bind msg - laske calc_msg


# ------------------------------------------------------------------------
proc calc_smsg {udest umsg} {
  global calc_preferredmsg
  putserv "$calc_preferredmsg $udest :$umsg"
}

# ------------------------------------------------------------------------
proc calc_do {args} {
  global calc_reps

  # This is something rather perverse
  set lasku [join [join [string map $calc_reps $args] ""] ""]

  # Use 'expr' to calculate the result, but catch any exceptions / errors
  if {[catch { set res [expr $lasku] } errmsg]} {
    return $errmsg
  } else {
    return "$lasku = $res"
  }
}

# ------------------------------------------------------------------------
proc calc_pubmsg {nick uhost hand chan args} {
  global calc_err_noargs

  if {$args == {} || $args == ""} {
    calc_smsg $chan "$calc_err_noargs"
    return 1
  }

  set result [calc_do $args]
  calc_smsg $chan "$nick, $result"
  return 1
}

# -------------------------------------------------------------------------  
proc calc_msg {nick uhost hand args} {
  global calc_err_noargs

  if {$args == {} || $args == ""} {
    calc_smsg $nick "$calc_err_noargs"
    return 1
  }
  
  set result [calc_do $args]
  calc_smsg $nick "$result"
  return 1
}

# -------------------------------------------------------------------------