Mercurial > sdl-ios-xcode
comparison src/SDL_assert.c @ 5088:c2539ff054c8
Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 24 Jan 2011 15:46:11 -0800 |
parents | eae20af0b983 |
children | 327f181542f1 |
comparison
equal
deleted
inserted
replaced
5087:e7680e2c9f3c | 5088:c2539ff054c8 |
---|---|
24 #include "SDL_atomic.h" | 24 #include "SDL_atomic.h" |
25 #include "SDL_assert.h" | 25 #include "SDL_assert.h" |
26 #include "SDL_assert_c.h" | 26 #include "SDL_assert_c.h" |
27 #include "video/SDL_sysvideo.h" | 27 #include "video/SDL_sysvideo.h" |
28 | 28 |
29 #ifdef __WINDOWS__ | 29 #ifdef __WIN32__ |
30 #define WIN32_LEAN_AND_MEAN | 30 #define WIN32_LEAN_AND_MEAN |
31 #include <windows.h> | 31 #include <windows.h> |
32 | |
33 #ifndef WS_OVERLAPPEDWINDOW | |
34 #define WS_OVERLAPPEDWINDOW 0 | |
35 #endif | |
36 | |
37 #ifdef UNICODE | |
38 #define WIN_UTF8ToString(S) (WCHAR *)SDL_iconv_string("UCS-2", "UTF-8", (char *)S, SDL_strlen(S)+1) | |
39 #else | |
40 #define WIN_UTF8ToString(S) SDL_iconv_string("ASCII", "UTF-8", (char *)S, SDL_strlen(S)+1) | |
41 #endif | |
32 #else /* fprintf, _exit(), etc. */ | 42 #else /* fprintf, _exit(), etc. */ |
33 #include <stdio.h> | 43 #include <stdio.h> |
34 #include <stdlib.h> | 44 #include <stdlib.h> |
35 #include <unistd.h> | 45 #include <unistd.h> |
36 #endif | 46 #endif |
55 #endif | 65 #endif |
56 | 66 |
57 static void | 67 static void |
58 debug_print(const char *fmt, ...) | 68 debug_print(const char *fmt, ...) |
59 { | 69 { |
60 #ifdef __WINDOWS__ | 70 #ifdef __WIN32__ |
61 /* Format into a buffer for OutputDebugStringA(). */ | 71 /* Format into a buffer for OutputDebugStringA(). */ |
62 char buf[1024]; | 72 char buf[1024]; |
63 char *startptr; | 73 char *startptr; |
64 char *ptr; | 74 char *ptr; |
75 LPTSTR tstr; | |
65 int len; | 76 int len; |
66 va_list ap; | 77 va_list ap; |
67 va_start(ap, fmt); | 78 va_start(ap, fmt); |
68 len = (int) SDL_vsnprintf(buf, sizeof (buf), fmt, ap); | 79 len = (int) SDL_vsnprintf(buf, sizeof (buf), fmt, ap); |
69 va_end(ap); | 80 va_end(ap); |
76 /* Write it, sorting out the Unix newlines... */ | 87 /* Write it, sorting out the Unix newlines... */ |
77 startptr = buf; | 88 startptr = buf; |
78 for (ptr = startptr; *ptr; ptr++) { | 89 for (ptr = startptr; *ptr; ptr++) { |
79 if (*ptr == '\n') { | 90 if (*ptr == '\n') { |
80 *ptr = '\0'; | 91 *ptr = '\0'; |
81 OutputDebugStringA(startptr); | 92 tstr = WIN_UTF8ToString(startptr); |
82 OutputDebugStringA("\r\n"); | 93 OutputDebugString(tstr); |
94 SDL_free(tstr); | |
95 OutputDebugString(TEXT("\r\n")); | |
83 startptr = ptr+1; | 96 startptr = ptr+1; |
84 } | 97 } |
85 } | 98 } |
86 | 99 |
87 /* catch that last piece if it didn't have a newline... */ | 100 /* catch that last piece if it didn't have a newline... */ |
88 if (startptr != ptr) { | 101 if (startptr != ptr) { |
89 OutputDebugStringA(startptr); | 102 tstr = WIN_UTF8ToString(startptr); |
103 OutputDebugString(tstr); | |
104 SDL_free(tstr); | |
90 } | 105 } |
91 #else | 106 #else |
92 /* Unix has it easy. Just dump it to stderr. */ | 107 /* Unix has it easy. Just dump it to stderr. */ |
93 va_list ap; | 108 va_list ap; |
94 va_start(ap, fmt); | 109 va_start(ap, fmt); |
97 fflush(stderr); | 112 fflush(stderr); |
98 #endif | 113 #endif |
99 } | 114 } |
100 | 115 |
101 | 116 |
102 #ifdef __WINDOWS__ | 117 #ifdef __WIN32__ |
103 static SDL_assert_state SDL_Windows_AssertChoice = SDL_ASSERTION_ABORT; | 118 static SDL_assert_state SDL_Windows_AssertChoice = SDL_ASSERTION_ABORT; |
104 static const SDL_assert_data *SDL_Windows_AssertData = NULL; | 119 static const SDL_assert_data *SDL_Windows_AssertData = NULL; |
105 | 120 |
106 static LRESULT CALLBACK | 121 static LRESULT CALLBACK |
107 SDL_Assertion_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) | 122 SDL_Assertion_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) |
111 case WM_CREATE: | 126 case WM_CREATE: |
112 { | 127 { |
113 /* !!! FIXME: all this code stinks. */ | 128 /* !!! FIXME: all this code stinks. */ |
114 const SDL_assert_data *data = SDL_Windows_AssertData; | 129 const SDL_assert_data *data = SDL_Windows_AssertData; |
115 char buf[1024]; | 130 char buf[1024]; |
131 LPTSTR tstr; | |
116 const int w = 100; | 132 const int w = 100; |
117 const int h = 25; | 133 const int h = 25; |
118 const int gap = 10; | 134 const int gap = 10; |
119 int x = gap; | 135 int x = gap; |
120 int y = 50; | 136 int y = 50; |
121 int len; | 137 int len; |
122 int i; | 138 int i; |
123 static const struct { | 139 static const struct { |
124 const char *name; | 140 LPCTSTR name; |
125 SDL_assert_state state; | 141 SDL_assert_state state; |
126 } buttons[] = { | 142 } buttons[] = { |
127 {"Abort", SDL_ASSERTION_ABORT }, | 143 {TEXT("Abort"), SDL_ASSERTION_ABORT }, |
128 {"Break", SDL_ASSERTION_BREAK }, | 144 {TEXT("Break"), SDL_ASSERTION_BREAK }, |
129 {"Retry", SDL_ASSERTION_RETRY }, | 145 {TEXT("Retry"), SDL_ASSERTION_RETRY }, |
130 {"Ignore", SDL_ASSERTION_IGNORE }, | 146 {TEXT("Ignore"), SDL_ASSERTION_IGNORE }, |
131 {"Always Ignore", SDL_ASSERTION_ALWAYS_IGNORE }, | 147 {TEXT("Always Ignore"), SDL_ASSERTION_ALWAYS_IGNORE }, |
132 }; | 148 }; |
133 | 149 |
134 len = (int) SDL_snprintf(buf, sizeof (buf), | 150 len = (int) SDL_snprintf(buf, sizeof (buf), |
135 "Assertion failure at %s (%s:%d), triggered %u time%s:\r\n '%s'", | 151 "Assertion failure at %s (%s:%d), triggered %u time%s:\r\n '%s'", |
136 data->function, data->filename, data->linenum, | 152 data->function, data->filename, data->linenum, |
138 data->condition); | 154 data->condition); |
139 if ((len < 0) || (len >= sizeof (buf))) { | 155 if ((len < 0) || (len >= sizeof (buf))) { |
140 buf[sizeof (buf) - 1] = '\0'; | 156 buf[sizeof (buf) - 1] = '\0'; |
141 } | 157 } |
142 | 158 |
143 CreateWindowA("STATIC", buf, | 159 tstr = WIN_UTF8ToString(buf); |
160 CreateWindow(TEXT("STATIC"), tstr, | |
144 WS_VISIBLE | WS_CHILD | SS_LEFT, | 161 WS_VISIBLE | WS_CHILD | SS_LEFT, |
145 x, y, 550, 100, | 162 x, y, 550, 100, |
146 hwnd, (HMENU) 1, NULL, NULL); | 163 hwnd, (HMENU) 1, NULL, NULL); |
164 SDL_free(tstr); | |
147 y += 110; | 165 y += 110; |
148 | 166 |
149 for (i = 0; i < (sizeof (buttons) / sizeof (buttons[0])); i++) { | 167 for (i = 0; i < (sizeof (buttons) / sizeof (buttons[0])); i++) { |
150 CreateWindowA("BUTTON", buttons[i].name, | 168 CreateWindow(TEXT("BUTTON"), buttons[i].name, |
151 WS_VISIBLE | WS_CHILD, | 169 WS_VISIBLE | WS_CHILD, |
152 x, y, w, h, | 170 x, y, w, h, |
153 hwnd, (HMENU) buttons[i].state, NULL, NULL); | 171 hwnd, (HMENU) buttons[i].state, NULL, NULL); |
154 x += w + gap; | 172 x += w + gap; |
155 } | 173 } |
246 } | 264 } |
247 } | 265 } |
248 | 266 |
249 static void SDL_ExitProcess(int exitcode) | 267 static void SDL_ExitProcess(int exitcode) |
250 { | 268 { |
251 #ifdef __WINDOWS__ | 269 #ifdef __WIN32__ |
252 ExitProcess(42); | 270 ExitProcess(42); |
253 #else | 271 #else |
254 _exit(42); | 272 _exit(42); |
255 #endif | 273 #endif |
256 } | 274 } |
309 } | 327 } |
310 } | 328 } |
311 | 329 |
312 /* platform-specific UI... */ | 330 /* platform-specific UI... */ |
313 | 331 |
314 #ifdef __WINDOWS__ | 332 #ifdef __WIN32__ |
315 state = SDL_PromptAssertion_windows(data); | 333 state = SDL_PromptAssertion_windows(data); |
316 | 334 |
317 #elif __MACOSX__ | 335 #elif __MACOSX__ |
318 /* This has to be done in an Objective-C (*.m) file, so we call out. */ | 336 /* This has to be done in an Objective-C (*.m) file, so we call out. */ |
319 extern SDL_assert_state SDL_PromptAssertion_cocoa(const SDL_assert_data *); | 337 extern SDL_assert_state SDL_PromptAssertion_cocoa(const SDL_assert_data *); |