Here's all I know about macro substitution.
If I have
#define abc xyz
and I have a name abc in my program, it will be changed to xyz.
But I want to do something else. If I have a name abcXdef in my program, I want to use
#define X Y
and have abcXdef changed to abcYdef.
Is there a way to do this that isn't so obtuse that only an insane person could understand it?