General purpose preprocessor