Add ABS() absolute value function to the expression parser.
authorTilghman Lesher <tilghman@meg.abyt.es>
Mon, 16 Jan 2012 19:49:50 +0000 (19:49 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Mon, 16 Jan 2012 19:49:50 +0000 (19:49 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@351079 65c4cc65-6c06-0410-ace0-fbb531ad65f3

CHANGES
main/ast_expr2.c
main/ast_expr2.y

diff --git a/CHANGES b/CHANGES
index 034320a..a03f5b7 100644 (file)
--- a/CHANGES
+++ b/CHANGES
 --- Functionality changes from Asterisk 10 to Asterisk 11 --------------------
 ------------------------------------------------------------------------------
 
+Core
+----
+ * The expression parser now recognizes the ABS() absolute value function,
+   which will convert negative floating point values to positive values.
+
 ConfBridge
 -------------------
  * Added menu action admin_toggle_mute_participants.  This will mute / unmute
index fe93c35..83caad4 100644 (file)
@@ -3036,6 +3036,15 @@ static struct val *op_func(struct val *funcname, struct expr_node *arglist, stru
                                return make_number(0.0);
                        }
 #endif
+               } else if (strcmp(funcname->u.s, "ABS") == 0) {
+                       if (arglist && !arglist->right && arglist->val) {
+                               to_number(arglist->val);
+                               result = make_number(arglist->val->u.i < 0 ? arglist->val->u.i * -1 : arglist->val->u.i);
+                               return result;
+                       } else {
+                               ast_log(LOG_WARNING, "Wrong args to %s() function\n", funcname->u.s);
+                               return make_number(0.0);
+                       }
                } else {
                        /* is this a custom function we should execute and collect the results of? */
 #if !defined(STANDALONE) && !defined(STANDALONE2)
index aabca8a..bf1237a 100644 (file)
@@ -1029,6 +1029,15 @@ static struct val *op_func(struct val *funcname, struct expr_node *arglist, stru
                                return make_number(0.0);
                        }
 #endif
+               } else if (strcmp(funcname->u.s, "ABS") == 0) {
+                       if (arglist && !arglist->right && arglist->val) {
+                               to_number(arglist->val);
+                               result = make_number(arglist->val->u.i < 0 ? arglist->val->u.i * -1 : arglist->val->u.i);
+                               return result;
+                       } else {
+                               ast_log(LOG_WARNING, "Wrong args to %s() function\n", funcname->u.s);
+                               return make_number(0.0);
+                       }
                } else {
                        /* is this a custom function we should execute and collect the results of? */
 #if !defined(STANDALONE) && !defined(STANDALONE2)