I probably some times the simple things are not real, but I learned it can be true!...
Subjecting my brain space trying to figure out how can I make a DEFINE macro recognize from char symbols, words or numbers to apply an alias to.
Some days I came with:
IFNDEF DEFINE
DEFINE MACRO DefName:REQ, defargs:VARARG
LOCAL DEFINEover, DEFINEFORCover
deffnex TEXTEQU <>
deffnex CATSTR deffnex, <&DefName& >
IFB <defargs>
deffnex CATSTR deffnex, <EQU 1>
ELSE
FORC charin,<defargs>
IFB <charin>
GOTO DEFINEFORCover
ELSEIFIDN <charin>, < >
GOTO DEFINEFORCover
ELSEIFIDN <charin>, <_>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <@>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <?>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <A>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <B>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <C>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <D>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <E>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <F>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <G>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <H>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <I>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <J>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <K>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <L>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <M>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <N>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <O>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <P>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <Q>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <R>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <S>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <T>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <U>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <V>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <W>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <X>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <Y>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <Z>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <a>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <b>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <c>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <d>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <e>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <f>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <g>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <h>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <i>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <j>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <k>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <l>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <m>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <n>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <o>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <p>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <q>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <r>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <s>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <t>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <u>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <v>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <w>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <x>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <y>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <z>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <'>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <">
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <0>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <1>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <2>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <3>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <4>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <5>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <6>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <7>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <8>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ELSEIFIDN <charin>, <9>
deffnex CATSTR deffnex, <EQU defargs>
EXITM
ENDIF
:DEFINEFORCover
ENDM
ENDIF
deffnex
ENDM
ENDIF
Some steps debugin my code in minutes I came with:
IFNDEF DEFINE
DEFINE MACRO DefName:REQ, defargs:VARARG
deffnex TEXTEQU <>
deffnex CATSTR deffnex, <&DefName& >
IFB <defargs>
deffnex CATSTR deffnex, <EQU 1>
ELSE
deffnex CATSTR deffnex, <EQU defargs>
ENDIF
deffnex
ENDM
ENDIF
IFNDEF DEFINED
DEFINED MACRO defarg:REQ
LOCAL earg
earg = 0
IFDEF defarg
earg = 1
ENDIF
EXITM <earg GE 1>
ENDM
ENDIF
externdef __m128i_i32_true:__m128i
DEFINE M128I32TRUE, __m128i_i32_true
DEFINE EG4, 0X4
IF DEFINED(M128I32TRUE)
DEFINE MYM128I32TRUE, M128I32TRUE
ENDIF
IF DEFINED(EG4)
DEFINE MYEG4, EG4
ENDIF
Cannot get simpler...
