I’m trying to invoke a macro specifying keyword parameters within another
macro, where the keyword and its value were passed to the outer macro. However,
the assembler is always interpreting keyword=value as a SYSLIST value.
Anyone know how this can be done, or even if it is possible?
The code below shows what I’m trying to do, the “Invoked”d macros never receive
keyword operand values.
CallMAC TITLE 'Test macro invocations'
MACRO
Invoke &Name,&PARMS
.**********************************************************************
.* Invoke passed macro, with the passed parameters *
.**********************************************************************
AIF (T'&PARMS(1) EQ 'O').AAm110
&J SETA INDEX('&PARMS(1)','=')
&lValue1 SETC '&PARMS(1)'(1,&J-1)
&rValue1 SETC '&PARMS(1)'(&J+1,*)
.AAm110 ANOP ,
.*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
AIF (T'&PARMS(2) EQ 'O').AAm120
&J SETA INDEX('&PARMS(2)','=')
&lValue2 SETC '&PARMS(2)'(1,&J-1)
&rValue2 SETC '&PARMS(2)'(&J+1,*)
.AAm120 ANOP ,
.*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
AIF ('&PARMS(2)' NE '').AAm220
AIF ('&PARMS(1)' NE '').AAm210
UNSPLIT0 &Name ,
AGO .AAm300
.AAm210 ANOP ,
UNSPLIT1 &Name &PARMS(1)
AGO .AAm300
.AAm220 ANOP ,
UNSPLIT2 &Name &PARMS(1),&PARMS(2)
.*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
.AAm300 ANOP ,
AIF ('&PARMS(2)' NE '').AAm320
AIF ('&PARMS(1)' NE '').AAm310
SPLIT0 &Name ,
AGO .AAm999
.AAm310 ANOP ,
SPLIT1 &Name &lValue1=&rValue1
SPLIT1A &Name &lValue1.=&rValue1
AGO .AAm999
.AAm320 ANOP ,
SPLIT2 &Name &lValue1=&rValue1,&lValue2=&rValue2
SPLIT2A &Name &lValue1.=&rValue1,&lValue2.=&rValue2
.AAm999 ANOP ,
MEND , -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
MACRO
&Label TestMac1 &T1O1=
.**********************************************************************
.* Macro expecting single parameter *
.**********************************************************************
&P SETA N'&SYSLIST
MNOTE *,'TestMac1 &Label #Parms=&P'
&I SETA 1
.BBm010 ANOP ,
AIF (&I GT &P).BBm020
MNOTE *,' SYSLIST(&I) = /&SYSLIST(&I)/'
&I SETA &I+1
AGO .BBm010
.BBm020 ANOP ,
MNOTE *,' T1O1=/&T1O1/'
MEND , -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
MACRO
&Label TestMac2 &T2O1=,&T2O2=
.**********************************************************************
.* Macro expecting two parameters *
.**********************************************************************
&P SETA N'&SYSLIST
MNOTE *,'TestMac2 &Label #Parms=&P'
&I SETA 1
.CCm010 ANOP ,
AIF (&I GT &P).CCm020
MNOTE *,' SYSLIST(&I) = /&SYSLIST(&I)/'
&I SETA &I+1
AGO .CCm010
.CCm020 ANOP ,
MNOTE *,' T2O1=/&T2O1/,T2O2=/&T2O2/'
MEND , -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EJECT
PRINT MCALL
TestMac1 ,
TestMac1 T1O1=aaa
TestMac2 T2O1=bbb,T2O2=ccc
***********************************************************************
Invoke TestMac1
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
Invoke TestMac1,(T1O1=zzz)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
Invoke TestMac2,(T2O1=yyy,T2O2=xxx)
END
Thanks,
Robert Ngan
DXC Luxsoft