#include <string.h>

#define _I_ argc
#define _S_ argv

static char *_N_;

#define SWITCH_OPT \
   {_N_=*_S_;_I_--;_S_++; \
      while(_I_>=1 && (**_S_=='-' || **_S_=='+')) {\
         if (0) {}

#define CASE_OPT(s) \
   else if(!strcmp(CURRENT_OPT,s))

#define CASE_OPT2(s1,s2) \
   else if(!strcmp(CURRENT_OPT,s1) ||\
	   !strcmp(CURRENT_OPT,s2)\
	   )

#define END_OPT \
      _I_--;\
      _S_++;\
   }\
      _I_++;\
      _S_--;\
       *_S_=_N_;\
}

#define ELSE_OPT else

#define RESTORE_OPT *_S_=_N_

#define CURRENT_OPT *_S_

#define ADVANCE_OPT \
   _I_--;\
   if (_I_ <= 0) {\
      (void) fprintf(stderr,"%s option must have one argument.\n",CURRENT_OPT);\
      exit(1);\
   }\
   _S_++;


syntax highlighted by Code2HTML, v. 0.9.1