#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();