From ae232491de2be2074ff231c86686d6abfa61684c Mon Sep 17 00:00:00 2001 From: "Dwayne M. Hubbard" <dwayne.hubbard@gmail.com> Date: Thu, 28 Jun 2007 20:52:22 +0000 Subject: [PATCH] Added AND, OR, and XOR bitwise operations to MATH for issue 9891, thanks jcmoore git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@72524 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- funcs/func_math.c | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/funcs/func_math.c b/funcs/func_math.c index ad42d190de..70882d1f1a 100644 --- a/funcs/func_math.c +++ b/funcs/func_math.c @@ -53,6 +53,9 @@ enum TypeOfFunctions { POWFUNCTION, SHLEFTFUNCTION, SHRIGHTFUNCTION, + BITWISEANDFUNCTION, + BITWISEXORFUNCTION, + BITWISEORFUNCTION, GTFUNCTION, LTFUNCTION, GTEFUNCTION, @@ -114,6 +117,18 @@ static int math(struct ast_channel *chan, const char *cmd, char *parse, } else if ((op = strchr(mvalue1, '^'))) { iaction = POWFUNCTION; *op = '\0'; + } else if ((op = strstr(mvalue1, "AND"))) { + iaction = BITWISEANDFUNCTION; + op += 3; + *op = '\0'; + } else if ((op = strstr(mvalue1, "XOR"))) { + iaction = BITWISEXORFUNCTION; + op += 3; + *op = '\0'; + } else if ((op = strstr(mvalue1, "OR"))) { + iaction = BITWISEORFUNCTION; + op += 2; + *op = '\0'; } else if ((op = strchr(mvalue1, '>'))) { iaction = GTFUNCTION; *op = '\0'; @@ -237,6 +252,27 @@ static int math(struct ast_channel *chan, const char *cmd, char *parse, ftmp = (inum1 >> inum2); break; } + case BITWISEANDFUNCTION: + { + int inum1 = fnum1; + int inum2 = fnum2; + ftmp = (inum1 & inum2); + break; + } + case BITWISEXORFUNCTION: + { + int inum1 = fnum1; + int inum2 = fnum2; + ftmp = (inum1 ^ inum2); + break; + } + case BITWISEORFUNCTION: + { + int inum1 = fnum1; + int inum2 = fnum2; + ftmp = (inum1 | inum2); + break; + } case GTFUNCTION: ast_copy_string(buf, (fnum1 > fnum2) ? "TRUE" : "FALSE", len); break; @@ -278,7 +314,7 @@ static struct ast_custom_function math_function = { .synopsis = "Performs Mathematical Functions", .syntax = "MATH(<number1><op><number2>[,<type_of_result>])", .desc = "Perform calculation on number1 to number2. Valid ops are: \n" - " +,-,/,*,%,<<,>>,^,<,>,>=,<=,==\n" + " +,-,/,*,%,<<,>>,^,AND,OR,XOR,<,>,>=,<=,==\n" "and behave as their C equivalents.\n" "<type_of_result> - wanted type of result:\n" " f, float - float(default)\n" -- GitLab