give pseudo prototypes instead of macro definitions for better clarity