Index: doc/README.variables =================================================================== RCS file: /usr/cvsroot/asterisk/doc/README.variables,v retrieving revision 1.47 diff -u -r1.47 README.variables --- doc/README.variables 17 Jun 2005 00:33:00 -0000 1.47 +++ doc/README.variables 21 Jun 2005 20:51:13 -0000 @@ -321,7 +335,7 @@ CONDITIONALS --------------------------- -There is one conditional operator - the conditional goto : +There is one conditional application - the conditional goto : exten => 1,2,gotoif(condition?label1:label2) @@ -504,6 +518,73 @@ ** match anywhere in the string. The only diff with the ':' is that ** match doesn't have to be anchored to the beginning of the string. +-------------------------------------------------------- +DEBUGGING HINTS FOR $[ ] EXPRESSIONS +-------------------------------------------------------- + +** THE FOLLOWING UTILITIES ARE PROVIDED ONLY FOR SYSTEMS THAT +** HAVE FLEX-2.5.31 OR GREATER, AND USE THE UPGRADED LEXER!!! +** +** There are two utilities you can build to help debug the $[ ] in +** your extensions.conf file. +** +** The first, and most simplistic, is to issue the command: +** +** make testexpr2 +** +** in the top level asterisk source directory. This will build +** a small executable, that is able to take the first command line +** argument, and run it thru the expression parser. No variable +** substitutions will be performed. It might be safest to wrap +** the expression in single quotes... +** +** testexpr2 '2*2+2/2' +** +** is an example. +** +** And, in the utils directory, you can say: +** +** make check_expr +** +** and a small program will be built, that will check the file +** mentioned in the first command line argument, for any expressions +** that might be have problems when you move to flex-2.5.31. +** It was originally designed to help spot possible incompatibilities +** when moving from the pre-2.5.31 world to the upgraded version of +** the lexer. +** +** But one more capability has been added to check_expr, that might +** make it more generally useful. It now does a simple minded evaluation of +** all variables, and then passes the $[] exprs to the parser. If there are +** any parse errors, they will be reported in the log file. You can use +** check_expr to do a quick sanity check of the expressions in your +** extensions.conf file, to see if they pass a crude syntax check. +** +** The "simple-minded" variable substitution replaces ${varname} variable +** references with '555'. You can override the 555 for variable values, +** by entering in var=val arguments after the filename on the command line. +** So... +** +** check_expr /etc/asterisk/extensions.conf CALLERIDNUM=3075551212 DIALSTATUS=TORTURE EXTEN=121 +** +** will substitute any ${CALLERIDNUM} variable references with 3075551212, any ${DIALSTATUS} +** variable references with 'TORTURE', and any ${EXTEN} references with '121'. +** If there is any fancy stuff going on in the reference, like ${EXTEN:2}, then the +** override will not work. Everything in the ${...} has to match. So, to substitute +** #{EXTEN:2} references, you'd best say: +** +** check_expr /etc/asterisk/extensions.conf CALLERIDNUM=3075551212 DIALSTATUS=TORTURE EXTEN:2=121 +** +** on stdout, you will see something like: +** +** OK -- $[ "${DIALSTATUS}" = "TORTURE" | "${DIALSTATUS}" = "DONTCALL" ] at line 416 +** +** In the expr2_log file that is generated, you will see: +** +** line 416, evaluation of $[ "TORTURE" = "TORTURE" | "TORTURE" = "DONTCALL" ] result: 1 +** +** check_expr is a very simplistic algorithm, and it is far from being guaranteed +** to work in all cases, but it is hoped that it will be useful. --------------------------------------------------------- Asterisk standard channel variables