+static int macroif_exec(struct ast_channel *chan, void *data)
+{
+ char *expr = NULL, *label_a = NULL, *label_b = NULL;
+ int res = 0;
+
+ if((expr = ast_strdupa((char *) data))) {
+ if ((label_a = strchr(expr, '?'))) {
+ *label_a = '\0';
+ label_a++;
+ if ((label_b = strchr(label_a, ':'))) {
+ *label_b = '\0';
+ label_b++;
+ }
+ if (ast_true(expr))
+ macro_exec(chan, label_a);
+ else if (label_b)
+ macro_exec(chan, label_b);
+
+ } else
+ ast_log(LOG_WARNING, "Invalid Syntax.\n");
+ } else
+ ast_log(LOG_ERROR, "Out of Memory!\n");
+ return res;
+}
+