You may not like it, but this is what peak programming looks like
#define CURRPOS currpos
#define gettoken() gettoken(CURRPOS)
#define advpos(tok) advpos(&CURRPOS, &tok)
#define nexttoken(tok) \
do { \
tok = gettoken(); \
advpos(tok); \
} while ( 0 )
Maintainability be damned, I can make better macro soup than you
Obligatory /s