@todo Consider reentrancy and possibly corrupted strdump buffer.\r
*/\r
\r
-\r
#include <stdio.h>\r
#include <stdarg.h>\r
\r
#include "pa_debugprint.h"\r
\r
+// for OutputDebugStringA\r
+#if defined(_MSC_VER) && defined(PA_ENABLE_MSVC_DEBUG_OUTPUT)\r
+ #define WIN32_LEAN_AND_MEAN // exclude rare headers\r
+ #include "windows.h"\r
+#endif\r
\r
+// User callback\r
+static PaUtilLogCallback userCB = NULL;\r
\r
-static PaUtilLogCallback userCB=0;\r
-\r
-\r
+// Sets user callback\r
void PaUtil_SetDebugPrintFunction(PaUtilLogCallback cb)\r
{\r
userCB = cb;\r
/*\r
If your platform doesn\92t have vsnprintf, you are stuck with a\r
VERY dangerous alternative, vsprintf (with no n)\r
- */\r
-\r
-#if _MSC_VER\r
-/* Some Windows Mobile SDKs don't define vsnprintf but all define _vsnprintf (hopefully).\r
- According to MSDN "vsnprintf is identical to _vsnprintf". So we use _vsnprintf with MSC.\r
*/\r
-#define VSNPRINTF _vsnprintf \r
+#if _MSC_VER\r
+ /* Some Windows Mobile SDKs don't define vsnprintf but all define _vsnprintf (hopefully).\r
+ According to MSDN "vsnprintf is identical to _vsnprintf". So we use _vsnprintf with MSC.\r
+ */\r
+ #define VSNPRINTF _vsnprintf \r
#else\r
-#define VSNPRINTF vsnprintf\r
+ #define VSNPRINTF vsnprintf\r
#endif\r
\r
-#define SIZEDUMP 1024\r
-\r
+#define PA_LOG_BUF_SIZE 2048\r
\r
void PaUtil_DebugPrint( const char *format, ... )\r
{\r
+ // Optional logging into Output console of Visual Studio\r
+#if defined(_MSC_VER) && defined(PA_ENABLE_MSVC_DEBUG_OUTPUT)\r
+ {\r
+ char buf[PA_LOG_BUF_SIZE];\r
+ va_list ap;\r
+ va_start(ap, format);\r
+ VSNPRINTF(buf, sizeof(buf), format, ap);\r
+ buf[sizeof(buf)-1] = 0;\r
+ OutputDebugStringA(buf);\r
+ va_end(ap);\r
+ }\r
+#endif\r
\r
- if (userCB)\r
+ // Output to User-Callback\r
+ if (userCB != NULL)\r
{\r
- char strdump[SIZEDUMP];\r
-\r
+ char strdump[PA_LOG_BUF_SIZE];\r
va_list ap;\r
- va_start( ap, format );\r
- VSNPRINTF( strdump, SIZEDUMP, format, ap );\r
- strdump[SIZEDUMP-1] = 0;\r
+ va_start(ap, format);\r
+ VSNPRINTF(strdump, sizeof(strdump), format, ap);\r
+ strdump[sizeof(strdump)-1] = 0;\r
userCB(strdump);\r
- va_end( ap ); \r
+ va_end(ap);\r
}\r
else\r
+ // Standard output to stderr\r
{\r
va_list ap;\r
- va_start( ap, format );\r
- vfprintf( stderr, format, ap );\r
- va_end( ap );\r
- fflush( stderr );\r
+ va_start(ap, format);\r
+ vfprintf(stderr, format, ap);\r
+ va_end(ap);\r
+ fflush(stderr);\r
}\r
-\r
}\r