#ifdef DEBUG #ifdef K32 const char UnimpMessage[] = "Unimplemented API %s"; const char AttentionMessage[] = "ATTENTION !!! API stub might corrupt the stack"; enum {DEB_FATAL, DEB_ERR, DEB_WARN, DEB_TRACE }; int apiLevel = DEB_WARN; VOID KERNENTRY vDebugOut(int level, const char *pfmt, ...); #define DebugOut(args) vDebugOut args #define UNIMP_MESSAGE DebugOut((apiLevel, UnimpMessage, api_string)); #define DEBUG_OOPS DebugOut((DEB_ERR, UnimpMessage, api_string)); \ #else const char UnimpMessage[] = "Unimplemented API %s\r\n"; const char AttentionMessage[] = "ATTENTION !!! API stub might corrupt the stack\r\n"; #define UNIMP_MESSAGE DebugPrintf(UnimpMessage, api_string); #define DEBUG_OOPS DebugPrintf(UnimpMessage, api_string); _asm { int 3 }; #endif #endif /* * Macros for unimplemented APIs stubs. * */ #define API_name(api_name) api_name #define API_decl(api_name) long APIENTRY API_name(api_name) #ifdef DEBUG #define API_body(api_name, return_value) \ const char api_string[] = #api_name; \ UNIMP_MESSAGE \ SetLastError(ERROR_CALL_NOT_IMPLEMENTED); \ return(return_value); #else #define API_body(api_name, return_value) \ SetLastError(ERROR_CALL_NOT_IMPLEMENTED); \ return(return_value); #endif #ifdef DEBUG #define APISTUB_(api_name, return_value) \ API_decl(api_name) (VOID) \ { \ const char api_string[] = #api_name; \ DebugPrintf(AttentionMessage); \ DEBUG_OOPS \ SetLastError(ERROR_CALL_NOT_IMPLEMENTED); \ return(return_value); \ } #else #define APISTUB_(api_name, return_value) \ API_decl(api_name) (VOID) \ { \ SetLastError(ERROR_CALL_NOT_IMPLEMENTED); \ return(return_value); \ } #endif #define APISTUB_0(api_name, return_value) \ API_decl(api_name) (VOID) \ { \ API_body(api_name, return_value) \ } #define APISTUB_1(api_name, return_value) \ API_decl(api_name) ( \ int p1 \ ) \ { \ API_body(api_name, return_value) \ p1; \ } #define APISTUB_2(api_name, return_value) \ API_decl(api_name) ( \ int p1, \ int p2 \ ) \ { \ API_body(api_name, return_value) \ p1; \ p2; \ } #define APISTUB_3(api_name, return_value) \ API_decl(api_name) ( \ int p1, \ int p2, \ int p3 \ ) \ { \ API_body(api_name, return_value) \ p1; \ p2; \ p3; \ } #define APISTUB_4(api_name, return_value) \ API_decl(api_name) ( \ int p1, \ int p2, \ int p3, \ int p4 \ ) \ { \ API_body(api_name, return_value) \ p1; \ p2; \ p3; \ p4; \ } #define APISTUB_5(api_name, return_value) \ API_decl(api_name) ( \ int p1, \ int p2, \ int p3, \ int p4, \ int p5 \ ) \ { \ API_body(api_name, return_value) \ p1; \ p2; \ p3; \ p4; \ p5; \ } #define APISTUB_6(api_name, return_value) \ API_decl(api_name) ( \ int p1, \ int p2, \ int p3, \ int p4, \ int p5, \ int p6 \ ) \ { \ API_body(api_name, return_value) \ p1; \ p2; \ p3; \ p4; \ p5; \ p6; \ } #define APISTUB_7(api_name, return_value) \ API_decl(api_name) ( \ int p1, \ int p2, \ int p3, \ int p4, \ int p5, \ int p6, \ int p7 \ ) \ { \ API_body(api_name, return_value) \ p1; \ p2; \ p3; \ p4; \ p5; \ p6; \ p7; \ } #define APISTUB_8(api_name, return_value) \ API_decl(api_name) ( \ int p1, \ int p2, \ int p3, \ int p4, \ int p5, \ int p6, \ int p7, \ int p8 \ ) \ { \ API_body(api_name, return_value) \ p1; \ p2; \ p3; \ p4; \ p5; \ p6; \ p7; \ p8; \ } #define APISTUB_9(api_name, return_value) \ API_decl(api_name) ( \ int p1, \ int p2, \ int p3, \ int p4, \ int p5, \ int p6, \ int p7, \ int p8, \ int p9 \ ) \ { \ API_body(api_name, return_value) \ p1; \ p2; \ p3; \ p4; \ p5; \ p6; \ p7; \ p8; \ p9; \ } #define APISTUB_10(api_name, return_value) \ API_decl(api_name) ( \ int p1, \ int p2, \ int p3, \ int p4, \ int p5, \ int p6, \ int p7, \ int p8, \ int p9, \ int p10 \ ) \ { \ API_body(api_name, return_value) \ p1; \ p2; \ p3; \ p4; \ p5; \ p6; \ p7; \ p8; \ p9; \ p10; \ } #define APISTUB_11(api_name, return_value) \ API_decl(api_name) ( \ int p1, \ int p2, \ int p3, \ int p4, \ int p5, \ int p6, \ int p7, \ int p8, \ int p9, \ int p10, \ int p11 \ ) \ { \ API_body(api_name, return_value) \ p1; \ p2; \ p3; \ p4; \ p5; \ p6; \ p7; \ p8; \ p9; \ p10; \ p11; \ } #define APISTUB_12(api_name, return_value) \ API_decl(api_name) ( \ int p1, \ int p2, \ int p3, \ int p4, \ int p5, \ int p6, \ int p7, \ int p8, \ int p9, \ int p10, \ int p11, \ int p12 \ ) \ { \ API_body(api_name, return_value) \ p1; \ p2; \ p3; \ p4; \ p5; \ p6; \ p7; \ p8; \ p9; \ p10; \ p11; \ p12; \ } #define APISTUB_13(api_name, return_value) \ API_decl(api_name) ( \ int p1, \ int p2, \ int p3, \ int p4, \ int p5, \ int p6, \ int p7, \ int p8, \ int p9, \ int p10, \ int p11, \ int p12, \ int p13 \ ) \ { \ API_body(api_name, return_value) \ p1; \ p2; \ p3; \ p4; \ p5; \ p6; \ p7; \ p8; \ p9; \ p10; \ p11; \ p12; \ p13; \ } #define APISTUB_14(api_name, return_value) \ API_decl(api_name) ( \ int p1, \ int p2, \ int p3, \ int p4, \ int p5, \ int p6, \ int p7, \ int p8, \ int p9, \ int p10, \ int p11, \ int p12, \ int p13, \ int p14 \ ) \ { \ API_body(api_name, return_value) \ p1; \ p2; \ p3; \ p4; \ p5; \ p6; \ p7; \ p8; \ p9; \ p10; \ p11; \ p12; \ p13; \ p14; \ } /* * Miscelaneous declarations needed for the APIs */ extern void _cdecl DebugPrintf();