gosu 0.15.1 → 1.1.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/COPYING +1 -1
  4. data/dependencies/SDL/include/SDL.h +138 -0
  5. data/dependencies/SDL/include/SDL_assert.h +293 -0
  6. data/dependencies/SDL/include/SDL_atomic.h +295 -0
  7. data/dependencies/SDL/include/SDL_audio.h +859 -0
  8. data/dependencies/SDL/include/SDL_bits.h +121 -0
  9. data/dependencies/SDL/include/SDL_blendmode.h +123 -0
  10. data/dependencies/SDL/include/SDL_clipboard.h +71 -0
  11. data/dependencies/SDL/include/SDL_config.h +55 -0
  12. data/dependencies/SDL/include/SDL_config_android.h +182 -0
  13. data/dependencies/SDL/include/SDL_config_iphoneos.h +207 -0
  14. data/dependencies/SDL/include/SDL_config_macosx.h +266 -0
  15. data/dependencies/SDL/include/SDL_config_minimal.h +85 -0
  16. data/dependencies/SDL/include/SDL_config_os2.h +188 -0
  17. data/dependencies/SDL/include/SDL_config_pandora.h +135 -0
  18. data/dependencies/SDL/include/SDL_config_psp.h +165 -0
  19. data/dependencies/SDL/include/SDL_config_windows.h +288 -0
  20. data/dependencies/SDL/include/SDL_config_winrt.h +243 -0
  21. data/dependencies/SDL/include/SDL_config_wiz.h +149 -0
  22. data/dependencies/SDL/include/SDL_copying.h +20 -0
  23. data/dependencies/SDL/include/SDL_cpuinfo.h +299 -0
  24. data/dependencies/SDL/include/SDL_egl.h +1676 -0
  25. data/dependencies/SDL/include/SDL_endian.h +263 -0
  26. data/dependencies/SDL/include/SDL_error.h +112 -0
  27. data/dependencies/SDL/include/SDL_events.h +827 -0
  28. data/dependencies/SDL/include/SDL_filesystem.h +136 -0
  29. data/dependencies/SDL/include/SDL_gamecontroller.h +541 -0
  30. data/dependencies/SDL/include/SDL_gesture.h +87 -0
  31. data/dependencies/SDL/include/SDL_haptic.h +1247 -0
  32. data/dependencies/SDL/include/SDL_hints.h +1578 -0
  33. data/dependencies/SDL/include/SDL_joystick.h +499 -0
  34. data/dependencies/SDL/include/SDL_keyboard.h +217 -0
  35. data/dependencies/SDL/include/SDL_keycode.h +351 -0
  36. data/dependencies/SDL/include/SDL_loadso.h +81 -0
  37. data/dependencies/SDL/include/SDL_locale.h +101 -0
  38. data/dependencies/SDL/include/SDL_log.h +211 -0
  39. data/dependencies/SDL/include/SDL_main.h +180 -0
  40. data/dependencies/SDL/include/SDL_messagebox.h +146 -0
  41. data/dependencies/SDL/include/SDL_metal.h +117 -0
  42. data/dependencies/SDL/include/SDL_misc.h +75 -0
  43. data/dependencies/SDL/include/SDL_mouse.h +302 -0
  44. data/dependencies/SDL/include/SDL_mutex.h +251 -0
  45. data/dependencies/SDL/include/SDL_name.h +33 -0
  46. data/dependencies/SDL/include/SDL_opengl.h +2183 -0
  47. data/dependencies/SDL/include/SDL_opengl_glext.h +11180 -0
  48. data/dependencies/SDL/include/SDL_opengles.h +39 -0
  49. data/dependencies/SDL/include/SDL_opengles2.h +52 -0
  50. data/dependencies/SDL/include/SDL_opengles2_gl2.h +621 -0
  51. data/dependencies/SDL/include/SDL_opengles2_gl2ext.h +2050 -0
  52. data/dependencies/SDL/include/SDL_opengles2_gl2platform.h +30 -0
  53. data/dependencies/SDL/include/SDL_opengles2_khrplatform.h +282 -0
  54. data/dependencies/SDL/include/SDL_pixels.h +479 -0
  55. data/dependencies/SDL/include/SDL_platform.h +198 -0
  56. data/dependencies/SDL/include/SDL_power.h +75 -0
  57. data/dependencies/SDL/include/SDL_quit.h +58 -0
  58. data/dependencies/SDL/include/SDL_rect.h +174 -0
  59. data/dependencies/SDL/include/SDL_render.h +1158 -0
  60. data/dependencies/SDL/include/SDL_revision.h +2 -0
  61. data/dependencies/SDL/include/SDL_rwops.h +283 -0
  62. data/dependencies/SDL/include/SDL_scancode.h +413 -0
  63. data/dependencies/SDL/include/SDL_sensor.h +267 -0
  64. data/dependencies/SDL/include/SDL_shape.h +144 -0
  65. data/dependencies/SDL/include/SDL_stdinc.h +647 -0
  66. data/dependencies/SDL/include/SDL_surface.h +563 -0
  67. data/dependencies/SDL/include/SDL_system.h +325 -0
  68. data/dependencies/SDL/include/SDL_syswm.h +354 -0
  69. data/dependencies/SDL/include/SDL_test.h +69 -0
  70. data/dependencies/SDL/include/SDL_test_assert.h +105 -0
  71. data/dependencies/SDL/include/SDL_test_common.h +218 -0
  72. data/dependencies/SDL/include/SDL_test_compare.h +69 -0
  73. data/dependencies/SDL/include/SDL_test_crc32.h +124 -0
  74. data/dependencies/SDL/include/SDL_test_font.h +81 -0
  75. data/dependencies/SDL/include/SDL_test_fuzzer.h +384 -0
  76. data/dependencies/SDL/include/SDL_test_harness.h +134 -0
  77. data/dependencies/SDL/include/SDL_test_images.h +78 -0
  78. data/dependencies/SDL/include/SDL_test_log.h +67 -0
  79. data/dependencies/SDL/include/SDL_test_md5.h +129 -0
  80. data/dependencies/SDL/include/SDL_test_memory.h +63 -0
  81. data/dependencies/SDL/include/SDL_test_random.h +115 -0
  82. data/dependencies/SDL/include/SDL_thread.h +366 -0
  83. data/dependencies/SDL/include/SDL_timer.h +115 -0
  84. data/dependencies/SDL/include/SDL_touch.h +102 -0
  85. data/dependencies/SDL/include/SDL_types.h +29 -0
  86. data/dependencies/SDL/include/SDL_version.h +162 -0
  87. data/dependencies/SDL/include/SDL_video.h +1282 -0
  88. data/dependencies/SDL/include/SDL_vulkan.h +276 -0
  89. data/dependencies/SDL/include/begin_code.h +166 -0
  90. data/dependencies/SDL/include/close_code.h +40 -0
  91. data/dependencies/SDL/lib/x64/libSDL2.dll.a +0 -0
  92. data/dependencies/SDL/lib/x86/libSDL2.dll.a +0 -0
  93. data/dependencies/SDL_sound/SDL_sound.c +795 -0
  94. data/dependencies/SDL_sound/SDL_sound.h +725 -0
  95. data/dependencies/SDL_sound/SDL_sound_aiff.c +537 -0
  96. data/dependencies/SDL_sound/SDL_sound_au.c +352 -0
  97. data/dependencies/SDL_sound/SDL_sound_coreaudio.c +747 -0
  98. data/dependencies/SDL_sound/SDL_sound_flac.c +182 -0
  99. data/dependencies/SDL_sound/SDL_sound_internal.h +304 -0
  100. data/dependencies/SDL_sound/SDL_sound_modplug.c +228 -0
  101. data/dependencies/SDL_sound/SDL_sound_mp3.c +184 -0
  102. data/dependencies/SDL_sound/SDL_sound_raw.c +164 -0
  103. data/dependencies/SDL_sound/SDL_sound_shn.c +1309 -0
  104. data/dependencies/SDL_sound/SDL_sound_voc.c +550 -0
  105. data/dependencies/SDL_sound/SDL_sound_vorbis.c +223 -0
  106. data/dependencies/SDL_sound/SDL_sound_wav.c +783 -0
  107. data/dependencies/SDL_sound/dr_flac.h +5906 -0
  108. data/dependencies/SDL_sound/dr_mp3.h +2832 -0
  109. data/dependencies/SDL_sound/libmodplug/fastmix.c +1748 -0
  110. data/dependencies/SDL_sound/libmodplug/libmodplug.h +1001 -0
  111. data/dependencies/SDL_sound/libmodplug/load_669.c +188 -0
  112. data/dependencies/SDL_sound/libmodplug/load_abc.c +4725 -0
  113. data/dependencies/SDL_sound/libmodplug/load_amf.c +403 -0
  114. data/dependencies/SDL_sound/libmodplug/load_ams.c +587 -0
  115. data/dependencies/SDL_sound/libmodplug/load_dbm.c +357 -0
  116. data/dependencies/SDL_sound/libmodplug/load_dmf.c +531 -0
  117. data/dependencies/SDL_sound/libmodplug/load_dsm.c +232 -0
  118. data/dependencies/SDL_sound/libmodplug/load_far.c +253 -0
  119. data/dependencies/SDL_sound/libmodplug/load_it.c +796 -0
  120. data/dependencies/SDL_sound/libmodplug/load_mdl.c +488 -0
  121. data/dependencies/SDL_sound/libmodplug/load_med.c +757 -0
  122. data/dependencies/SDL_sound/libmodplug/load_mid.c +1405 -0
  123. data/dependencies/SDL_sound/libmodplug/load_mod.c +269 -0
  124. data/dependencies/SDL_sound/libmodplug/load_mt2.c +546 -0
  125. data/dependencies/SDL_sound/libmodplug/load_mtm.c +142 -0
  126. data/dependencies/SDL_sound/libmodplug/load_okt.c +192 -0
  127. data/dependencies/SDL_sound/libmodplug/load_pat.c +1143 -0
  128. data/dependencies/SDL_sound/libmodplug/load_pat.h +25 -0
  129. data/dependencies/SDL_sound/libmodplug/load_psm.c +350 -0
  130. data/dependencies/SDL_sound/libmodplug/load_ptm.c +204 -0
  131. data/dependencies/SDL_sound/libmodplug/load_s3m.c +325 -0
  132. data/dependencies/SDL_sound/libmodplug/load_stm.c +180 -0
  133. data/dependencies/SDL_sound/libmodplug/load_ult.c +206 -0
  134. data/dependencies/SDL_sound/libmodplug/load_umx.c +51 -0
  135. data/dependencies/SDL_sound/libmodplug/load_xm.c +554 -0
  136. data/dependencies/SDL_sound/libmodplug/mmcmp.c +382 -0
  137. data/dependencies/SDL_sound/libmodplug/modplug.c +170 -0
  138. data/dependencies/SDL_sound/libmodplug/modplug.h +90 -0
  139. data/dependencies/SDL_sound/libmodplug/snd_dsp.c +301 -0
  140. data/dependencies/SDL_sound/libmodplug/snd_flt.c +63 -0
  141. data/dependencies/SDL_sound/libmodplug/snd_fx.c +2350 -0
  142. data/dependencies/SDL_sound/libmodplug/sndfile.c +1169 -0
  143. data/dependencies/SDL_sound/libmodplug/sndmix.c +1034 -0
  144. data/dependencies/SDL_sound/libmodplug/tables.h +371 -0
  145. data/{src/stb_vorbis.c → dependencies/SDL_sound/stb_vorbis.h} +143 -78
  146. data/dependencies/al_soft/AL/al.h +655 -0
  147. data/dependencies/al_soft/AL/alc.h +270 -0
  148. data/dependencies/al_soft/AL/alext.h +585 -0
  149. data/dependencies/al_soft/AL/efx-creative.h +3 -0
  150. data/dependencies/al_soft/AL/efx-presets.h +402 -0
  151. data/dependencies/al_soft/AL/efx.h +762 -0
  152. data/dependencies/al_soft/x64/libOpenAL32.dll.a +0 -0
  153. data/dependencies/al_soft/x86/libOpenAL32.dll.a +0 -0
  154. data/{src → dependencies/stb}/stb_image.h +330 -127
  155. data/{src → dependencies/stb}/stb_image_write.h +156 -85
  156. data/{src → dependencies/stb}/stb_truetype.h +192 -69
  157. data/{src → dependencies/utf8proc}/utf8proc.c +0 -0
  158. data/{src → dependencies/utf8proc}/utf8proc.h +0 -0
  159. data/{src → dependencies/utf8proc}/utf8proc_data.h +0 -0
  160. data/ext/gosu/extconf.rb +53 -39
  161. data/{Gosu → include/Gosu}/Audio.hpp +6 -8
  162. data/include/Gosu/Bitmap.hpp +100 -0
  163. data/{Gosu → include/Gosu}/Buttons.hpp +104 -44
  164. data/{Gosu → include/Gosu}/Color.hpp +0 -0
  165. data/{Gosu → include/Gosu}/Directories.hpp +0 -0
  166. data/{Gosu → include/Gosu}/Font.hpp +1 -1
  167. data/{Gosu → include/Gosu}/Fwd.hpp +0 -5
  168. data/{Gosu → include/Gosu}/Gosu.hpp +0 -0
  169. data/{Gosu → include/Gosu}/Graphics.hpp +0 -0
  170. data/{Gosu → include/Gosu}/GraphicsBase.hpp +0 -0
  171. data/{Gosu → include/Gosu}/IO.hpp +0 -0
  172. data/{Gosu → include/Gosu}/Image.hpp +7 -6
  173. data/{Gosu → include/Gosu}/ImageData.hpp +0 -0
  174. data/{Gosu → include/Gosu}/Input.hpp +39 -51
  175. data/{Gosu → include/Gosu}/Inspection.hpp +0 -0
  176. data/{Gosu → include/Gosu}/Math.hpp +0 -0
  177. data/{Gosu → include/Gosu}/Platform.hpp +0 -0
  178. data/{Gosu → include/Gosu}/Text.hpp +0 -0
  179. data/{Gosu → include/Gosu}/TextInput.hpp +0 -0
  180. data/{Gosu → include/Gosu}/Timing.hpp +0 -0
  181. data/{Gosu → include/Gosu}/Utility.hpp +15 -4
  182. data/{Gosu → include/Gosu}/Version.hpp +3 -3
  183. data/{Gosu → include/Gosu}/Window.hpp +46 -34
  184. data/lib/OpenAL32.dll +0 -0
  185. data/lib/SDL2.dll +0 -0
  186. data/lib/gosu.rb +0 -3
  187. data/lib/gosu/patches.rb +0 -23
  188. data/lib/gosu/preview.rb +1 -3
  189. data/lib/gosu/swig_patches.rb +6 -8
  190. data/lib64/OpenAL32.dll +0 -0
  191. data/lib64/SDL2.dll +0 -0
  192. data/rdoc/gosu.rb +112 -23
  193. data/src/Audio.cpp +50 -224
  194. data/src/AudioFile.hpp +20 -37
  195. data/src/AudioFileAudioToolbox.cpp +237 -0
  196. data/src/AudioFileSDLSound.cpp +147 -0
  197. data/src/AudioImpl.cpp +3 -12
  198. data/src/AudioImpl.hpp +3 -1
  199. data/src/Bitmap.cpp +85 -83
  200. data/src/BitmapIO.cpp +52 -58
  201. data/src/Font.cpp +4 -1
  202. data/src/Graphics.cpp +7 -4
  203. data/src/Image.cpp +13 -16
  204. data/src/Input.cpp +412 -164
  205. data/src/LargeImageData.cpp +2 -1
  206. data/src/MarkupParser.cpp +2 -1
  207. data/src/Resolution.cpp +8 -8
  208. data/src/RubyGosu.cxx +1184 -352
  209. data/src/RubyGosu.h +3 -2
  210. data/src/TexChunk.cpp +1 -1
  211. data/src/Text.cpp +1 -0
  212. data/src/TextBuilder.cpp +3 -1
  213. data/src/Texture.cpp +1 -1
  214. data/src/TrueTypeFont.cpp +2 -1
  215. data/src/TrueTypeFontWin.cpp +3 -3
  216. data/src/Utility.cpp +11 -7
  217. data/src/Window.cpp +90 -62
  218. data/src/WindowUIKit.cpp +21 -9
  219. metadata +195 -46
  220. data/Gosu/AutoLink.hpp +0 -14
  221. data/Gosu/Bitmap.hpp +0 -113
  222. data/lib/gosu/zen.rb +0 -89
  223. data/src/AudioToolboxFile.hpp +0 -210
  224. data/src/MPEGFile.hpp +0 -90
  225. data/src/OggFile.hpp +0 -92
  226. data/src/SndFile.hpp +0 -174
  227. data/src/WinMain.cpp +0 -64
@@ -1,174 +0,0 @@
1
- #pragma once
2
-
3
- #include <Gosu/Audio.hpp>
4
- #include <Gosu/Platform.hpp>
5
- #include <Gosu/Utility.hpp>
6
- #include <sndfile.h>
7
-
8
- #ifdef GOSU_IS_WIN
9
- #define NOMINMAX
10
- #include <windows.h>
11
- #endif
12
-
13
- namespace Gosu
14
- {
15
- class SndFile : public AudioFile
16
- {
17
- SNDFILE* file;
18
- SF_INFO info;
19
- Reader reader;
20
- Buffer buffer;
21
-
22
- // /DELAYLOAD doesn't work with libsndfile.dll (is this still true?); manually lazy-load it.
23
- #ifdef GOSU_IS_WIN
24
- static HMODULE dll()
25
- {
26
- static HMODULE dll = LoadLibrary(L"libsndfile.dll");
27
- if (!dll) throw std::runtime_error("Cannot find libsndfile.dll");
28
- return dll;
29
- }
30
-
31
- #define CREATE_STUB(NAME, RETURN, PARAMS, NAMES) \
32
- static RETURN NAME PARAMS \
33
- { \
34
- typedef RETURN (__cdecl *NAME##_ptr) PARAMS; \
35
- static NAME##_ptr f = (NAME##_ptr)GetProcAddress(dll(), #NAME); \
36
- if (!f) { \
37
- throw std::runtime_error("Cannot find " ## #NAME); \
38
- } \
39
- return f NAMES; \
40
- }
41
- CREATE_STUB(sf_open_virtual, SNDFILE*,
42
- (SF_VIRTUAL_IO* sfvirtual, int mode, SF_INFO* sfinfo, void* user_data),
43
- (sfvirtual, mode, sfinfo, user_data))
44
- CREATE_STUB(sf_close, int,
45
- (SNDFILE* sndfile),
46
- (sndfile))
47
- CREATE_STUB(sf_readf_short, sf_count_t,
48
- (SNDFILE* sndfile, short* ptr, sf_count_t items),
49
- (sndfile, ptr, items))
50
- CREATE_STUB(sf_seek, sf_count_t,
51
- (SNDFILE* sndfile, sf_count_t frames, int whence),
52
- (sndfile, frames, whence))
53
- CREATE_STUB(sf_strerror, const char*,
54
- (SNDFILE* sndfile),
55
- (sndfile))
56
- #undef CREATE_STUB
57
- #endif
58
-
59
- static sf_count_t get_filelen(SndFile* self)
60
- {
61
- return self->buffer.size();
62
- }
63
-
64
- static sf_count_t seek(sf_count_t offset, int whence, SndFile* self)
65
- {
66
- switch (whence) {
67
- case SEEK_SET:
68
- self->reader.set_position(offset);
69
- break;
70
- case SEEK_CUR:
71
- self->reader.seek(offset);
72
- break;
73
- case SEEK_END:
74
- self->reader.set_position(self->buffer.size() - offset);
75
- break;
76
- }
77
-
78
- if (self->reader.position() > self->buffer.size()) {
79
- self->reader.set_position(self->buffer.size());
80
- }
81
-
82
- return 0;
83
- }
84
-
85
- static sf_count_t read(void* ptr, sf_count_t count, SndFile* self)
86
- {
87
- sf_count_t avail = self->buffer.size() - self->reader.position();
88
- count = std::min(avail, count);
89
- self->reader.read(ptr, count);
90
- return count;
91
- }
92
-
93
- static sf_count_t tell(SndFile* self)
94
- {
95
- return self->reader.position();
96
- }
97
-
98
- static SF_VIRTUAL_IO* io_interface()
99
- {
100
- static SF_VIRTUAL_IO io;
101
- io.get_filelen = (sf_vio_get_filelen)&get_filelen;
102
- io.seek = (sf_vio_seek)&seek;
103
- io.read = (sf_vio_read)&read;
104
- io.tell = (sf_vio_tell)&tell;
105
- io.write = nullptr;
106
- return &io;
107
- }
108
-
109
- public:
110
- SndFile(Reader reader)
111
- : file(nullptr), reader(buffer.front_reader())
112
- {
113
- info.format = 0;
114
- buffer.resize(reader.resource().size() - reader.position());
115
- reader.read(buffer.data(), buffer.size());
116
- file = sf_open_virtual(io_interface(), SFM_READ, &info, this);
117
- if (!file) {
118
- throw std::runtime_error(sf_strerror(nullptr));
119
- }
120
- }
121
-
122
- SndFile(const std::string& filename)
123
- : file(nullptr), reader(buffer.front_reader())
124
- {
125
- info.format = 0;
126
- // TODO: Not sure if this is still necessary.
127
- // Can libsndfile open UTF-8 filenames on Windows?
128
- #ifdef GOSU_IS_WIN
129
- load_file(buffer, filename);
130
- file = sf_open_virtual(io_interface(), SFM_READ, &info, this);
131
- #else
132
- file = sf_open(filename.c_str(), SFM_READ, &info);
133
- #endif
134
- if (!file) {
135
- throw std::runtime_error(sf_strerror(nullptr));
136
- }
137
- }
138
-
139
- ~SndFile() override
140
- {
141
- if (file) {
142
- sf_close(file);
143
- }
144
- }
145
-
146
- ALenum format() const override
147
- {
148
- switch (info.channels) {
149
- case 1:
150
- return AL_FORMAT_MONO16;
151
- case 2:
152
- return AL_FORMAT_STEREO16;
153
- default:
154
- throw std::runtime_error("Too many channels in audio file");
155
- };
156
- }
157
-
158
- ALuint sample_rate() const override
159
- {
160
- return info.samplerate;
161
- }
162
-
163
- std::size_t read_data(void* dest, std::size_t length) override
164
- {
165
- int frame_size = sizeof(short) * info.channels;
166
- return sf_readf_short(file, (short*)dest, length / frame_size) * frame_size;
167
- }
168
-
169
- void rewind() override
170
- {
171
- sf_seek(file, 0, SEEK_SET);
172
- }
173
- };
174
- }
@@ -1,64 +0,0 @@
1
- #include <Gosu/Platform.hpp>
2
- #if defined(GOSU_IS_WIN)
3
-
4
- #include <exception>
5
- #include <string>
6
- #include <vector>
7
- #include <windows.h>
8
- using namespace std;
9
-
10
- vector<string> split_cmd_line()
11
- {
12
- vector<string> result;
13
-
14
- const char* cmd_line = ::GetCommandLineA();
15
-
16
- const char* arg_begin = nullptr;
17
- bool is_quoted_arg = false;
18
-
19
- while (*cmd_line) {
20
- if (*cmd_line == '"') {
21
- if (arg_begin == nullptr) {
22
- arg_begin = cmd_line + 1;
23
- is_quoted_arg = true;
24
- }
25
- else if (is_quoted_arg) {
26
- result.push_back(string(arg_begin, cmd_line));
27
- arg_begin = nullptr;
28
- }
29
- }
30
- else if (!isspace((unsigned char)*cmd_line) && arg_begin == nullptr) {
31
- arg_begin = cmd_line;
32
- is_quoted_arg = false;
33
- }
34
- else if (isspace((unsigned char)*cmd_line) && arg_begin != nullptr && !is_quoted_arg) {
35
- result.push_back(string(arg_begin, cmd_line + 1));
36
- arg_begin = nullptr;
37
- }
38
- ++cmd_line;
39
- }
40
-
41
- if (arg_begin != 0) result.push_back(arg_begin);
42
-
43
- return result;
44
- }
45
-
46
- int main(int argc, char* argv[]);
47
-
48
- int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
49
- {
50
- try {
51
- vector<string> arguments = split_cmd_line();
52
- vector<char*> argv(arguments.size());
53
- for (unsigned i = 0; i < argv.size(); ++i) {
54
- argv[i] = const_cast<char*>(arguments[i].c_str());
55
- }
56
- return main(argv.size(), &argv[0]);
57
- }
58
- catch (const exception& e) {
59
- ::MessageBoxA(0, e.what(), "Uncaught Exception", MB_OK | MB_ICONERROR);
60
- return EXIT_FAILURE;
61
- }
62
- }
63
-
64
- #endif