Does €ASM support using lists as args? For example,
fake %MACRO arg1,arg2,arg3
____blah, blah, blah
____%ENDMACRO
fake <1,2,3>,<4,5,6>,<7,8,9>
Lists as Args
- vitsoft
- Site Admin
- Posts: 49
- Joined: 04 Nov 2017 20:08
- Location: Vítkov, The Czech Republic
- Contact:
Re: Lists as Args
The list of macro arguments is available in %MACRO..%ENDMACRO body as automatic variable %*.
You cannot use automatic variable outside the macro but its contents (the whole list) may be copied to standard user-defined %variable and then used anywhere below the macro.
fake %MACRO arg1,arg2,arg3
%fakeList %SET %*
____blah, blah, blah
____%ENDMACRO
fake 1,2,3
; Variable %fakeList now contains 1,2,3 (five characters including commas).
Ooops, you prabably want to group some arguments and treat them as one ...?
I would make a quoted string from the group, then it will be treated as one argument encapsulated in quotes.
Getting rid of those quotes (first and last character) is trivial. €ASM syntax would be
fake %MACRO arg1,arg2,arg3
%Group1 %SET %arg1[2..%&-1] ; Remove the first and last character (quote).
%Group2 %SET %arg2[2..%&-1]
%Group3 %SET %arg3[2..%&-1]
%arg1ofGroup1 %SET %Group1{1}
%arg2ofGroup1 %SET %Group1{2}
%arg3ofGroup1 %SET %Group1{3}
%arg1ofGroup2 %SET %Group2{1}
%arg2ofGroup2 %SET %Group2{2}
%arg3ofGroup2 %SET %Group2{3}
%arg1ofGroup3 %SET %Group3{1}
%arg2ofGroup3 %SET %Group3{2}
%arg3ofGroup3 %SET %Group3{3}
; Do something with %argXofGroupY
; or use directly %GroupY{X} (and you won't need the previous nine lines).
%ENDMACRO
fake "1,2,3", "4,5,6", "7,8,9" ; Macro fake is expanded with three ordinal operands.
;The digit 1 is now in %arg1ofGroup1 alias %Group1{1},
;the digit 4 is now in %arg1ofGroup2 alias %Group2{1}
;the digit 9 is now in %arg3ofGroup3 alias %Group3{3} and so on.
You cannot use automatic variable outside the macro but its contents (the whole list) may be copied to standard user-defined %variable and then used anywhere below the macro.
fake %MACRO arg1,arg2,arg3
%fakeList %SET %*
____blah, blah, blah
____%ENDMACRO
fake 1,2,3
; Variable %fakeList now contains 1,2,3 (five characters including commas).
Ooops, you prabably want to group some arguments and treat them as one ...?
I would make a quoted string from the group, then it will be treated as one argument encapsulated in quotes.
Getting rid of those quotes (first and last character) is trivial. €ASM syntax would be
fake %MACRO arg1,arg2,arg3
%Group1 %SET %arg1[2..%&-1] ; Remove the first and last character (quote).
%Group2 %SET %arg2[2..%&-1]
%Group3 %SET %arg3[2..%&-1]
%arg1ofGroup1 %SET %Group1{1}
%arg2ofGroup1 %SET %Group1{2}
%arg3ofGroup1 %SET %Group1{3}
%arg1ofGroup2 %SET %Group2{1}
%arg2ofGroup2 %SET %Group2{2}
%arg3ofGroup2 %SET %Group2{3}
%arg1ofGroup3 %SET %Group3{1}
%arg2ofGroup3 %SET %Group3{2}
%arg3ofGroup3 %SET %Group3{3}
; Do something with %argXofGroupY
; or use directly %GroupY{X} (and you won't need the previous nine lines).
%ENDMACRO
fake "1,2,3", "4,5,6", "7,8,9" ; Macro fake is expanded with three ordinal operands.
;The digit 1 is now in %arg1ofGroup1 alias %Group1{1},
;the digit 4 is now in %arg1ofGroup2 alias %Group2{1}
;the digit 9 is now in %arg3ofGroup3 alias %Group3{3} and so on.
Re: Lists as Args
Perfect!
Who is online
Users browsing this forum: No registered users and 0 guests