[asterisk-commits] murf: branch 1.4 r83558 - /branches/1.4/pbx/pbx_ael.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Sat Sep 22 11:41:44 CDT 2007


Author: murf
Date: Sat Sep 22 11:41:43 2007
New Revision: 83558

URL: http://svn.digium.com/view/asterisk?view=rev&rev=83558
Log:
This closes issue #10788 -- the 3rd arg in the for statement is now wrapped in Set() only if there's an '=' in that string. Otherwise, if it begins with '&', then a Macro call is generated; otherwise it is made into an app call. A bit more accomodating, keeps the new guys happy, and the guys with ael-1 code should be happy, too

Modified:
    branches/1.4/pbx/pbx_ael.c

Modified: branches/1.4/pbx/pbx_ael.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/pbx/pbx_ael.c?view=diff&rev=83558&r1=83557&r2=83558
==============================================================================
--- branches/1.4/pbx/pbx_ael.c (original)
+++ branches/1.4/pbx/pbx_ael.c Sat Sep 22 11:41:43 2007
@@ -2993,20 +2993,55 @@
 			} else
 				for_init->appargs = strdup(p->u1.for_init);
 
-			for_inc->app = strdup("Set");
 
 			strcpy(buf2,p->u3.for_inc);
 			remove_spaces_before_equals(buf2);
 			strp = strchr(buf2, '=');
-			strp2 = strchr(p->u3.for_inc, '=');
-			if (strp) {
+			if (strp) {  /* there's an = in this part; that means an assignment. set it up */
+				strp2 = strchr(p->u3.for_inc, '=');
 				*(strp+1) = 0;
 				strcat(buf2,"$[");
 				strncat(buf2,strp2+1, sizeof(buf2)-strlen(strp2+1)-2);
 				strcat(buf2,"]");
 				for_inc->appargs = strdup(buf2);
-			} else
-				for_inc->appargs = strdup(p->u3.for_inc);
+				for_inc->app = strdup("Set");
+			} else {
+				strp2 = p->u3.for_inc;
+				while (*strp2 && isspace(*strp2))
+					strp2++;
+				if (*strp2 == '&') { /* itsa macro call */
+					char *strp3 = strp2+1;
+					while (*strp3 && isspace(*strp3))
+						strp3++;
+					strcpy(buf2, strp3);
+					strp3 = strchr(buf2,'(');
+					if (strp3) {
+						*strp3 = '|';
+					}
+					while ((strp3=strchr(buf2,','))) {
+						*strp3 = '|';
+					}
+					strp3 = strrchr(buf2, ')');
+					if (strp3)
+						*strp3 = 0; /* remove the closing paren */
+
+					for_inc->appargs = strdup(buf2);
+
+					for_inc->app = strdup("Macro");
+				} else {  /* must be a regular app call */
+					char *strp3;
+					strcpy(buf2, strp2);
+					strp3 = strchr(buf2,'(');
+					if (strp3) {
+						*strp3 = 0;
+						for_inc->app = strdup(buf2);
+						for_inc->appargs = strdup(strp3+1);
+						strp3 = strrchr(for_inc->appargs, ')');
+						if (strp3)
+							*strp3 = 0; /* remove the closing paren */
+					}
+				}
+			}
 			snprintf(buf1,sizeof(buf1),"$[%s]",p->u2.for_test);
 			for_test->app = 0;
 			for_test->appargs = strdup(buf1);




More information about the asterisk-commits mailing list