With a little more effort, this one works OK.
[[t]
; *************************************************************************
; -------------------------------------------------------------------------
multiple_instruction MACRO args:VARARG
LOCAL arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg0,cntr,flag
cntr = 1 ;; counter determined which buffer is being written to
flag = 0 ;; flag starts as clear
arg1 equ <>
arg2 equ <>
arg3 equ <>
arg4 equ <>
arg5 equ <>
arg6 equ <>
arg7 equ <>
arg8 equ <>
arg9 equ <>
arg0 equ <>
;; ---------------------------------
FORC char,<args>
IFIDN <char>,<:> ;; test if char is the ":" delimiter
IF flag eq 0
cntr = cntr + 1 ;; only increment the counter if the flag is clear
ENDIF
flag = 1 ;; set the flag so you only get 1 increment of cntr
goto over
ENDIF
flag = 0 ;; clear the flag when the next char is not a space
IF cntr eq 1
arg1 CATSTR arg1,<char> ;;
ELSEIF cntr eq 2
arg2 CATSTR arg2,<char> ;;
ELSEIF cntr eq 3
arg3 CATSTR arg3,<char> ;;
ELSEIF cntr eq 4
arg4 CATSTR arg4,<char> ;;
ELSEIF cntr eq 5
arg5 CATSTR arg5,<char> ;;
ELSEIF cntr eq 6
arg6 CATSTR arg6,<char> ;;
ELSEIF cntr eq 7
arg7 CATSTR arg7,<char> ;;
ELSEIF cntr eq 8
arg8 CATSTR arg8,<char> ;;
ELSEIF cntr eq 9
arg9 CATSTR arg9,<char> ;;
ELSEIF cntr eq 10
arg0 CATSTR arg0,<char> ;;
ELSEIF cntr eq 11
% echo *********************************************
% echo ERROR : too many arguments, 10 argument limit
% echo *********************************************
.err <too many arguments>
goto over
ENDIF
:over
ENDM
;; ---------------------------------
arg1
arg2
arg3
arg4
arg5
arg6
arg7
arg8
arg9
arg0
ENDM
; --------------------------------
mi MACRO args:VARARG
multiple_instruction args
ENDM
; -------------------------------------------------------------------------
; *************************************************************************
[/tt]
Looks like this in use.
mi \
mov rax,1 : add rax,1 : sub rax,3 : xor rax,rax
mi waitkey : fn ExitProcess,0 : ret