А почему бы и не case-ами перебирать? За 25 лет я наоборот мигрировал от меню с указателями на функции обработки к чему-то подобному.
событие evNew генерируется при смене состояния
void fFirmwareVersion(void)
{ switch (event)
{case evNew:
SetLcdPos(4,2);
printf("%s",Firmware);
break;
case evFn:
case evSt:
NEWS(stUserMenu);
break;
}
}