Add MessageBox error output on Windows
authorAndreas Eversberg <jolly@eversberg.eu>
Tue, 3 Apr 2018 15:57:05 +0000 (17:57 +0200)
committerAndreas Eversberg <jolly@eversberg.eu>
Thu, 5 Apr 2018 16:01:59 +0000 (18:01 +0200)
src/libcpu/execute.c
src/libsdl/print.c
src/libsdl/sdl.c
src/mercenary/render.c

index a173d2c..308d3fd 100644 (file)
@@ -147,7 +147,7 @@ void execute_init(int32_t _memory_size, uint8_t *_memory, uint8_t *_stop_event,
        memset(stop_event, 0, _memory_size);
        for (i = 0; stop_at[i].event; i++) {
                if (stop_at[i].pc >= memory_size) {
-                       fprintf(stderr, "stop-event at PC=%x is out of memory=%x\n", stop_at[i].pc, memory_size);
+                       print_error("stop-event at PC=%x is out of memory=%x\n", stop_at[i].pc, memory_size);
                        exit(0);
                }
                stop_event[stop_at[i].pc] = stop_at[i].event;
index 24a9f7f..7cb6442 100644 (file)
@@ -2,6 +2,9 @@
 #include <stdio.h>
 #include <stdarg.h>
 #include <SDL2/SDL_log.h>
+#if defined(_WIN32)
+#include <windows.h>
+#endif
 
 void __attribute__ ((format (printf, 1, 2))) _print_info(const char *format, ...)
 {
@@ -18,8 +21,17 @@ void __attribute__ ((format (printf, 3, 4))) _print_error(const char *_file, int
        va_list args;
        va_start(args, format);
 
+#if defined(_WIN32)
+       char title[123], text[1234];
+       snprintf(title, sizeof(title), "Error in %s line %d:\n", _file, _line);
+       title[sizeof(title) - 1] = '\0';
+       vsnprintf(text, sizeof(text), format, args);
+       text[sizeof(text) - 1] = '\0';
+       MessageBox(NULL, text, title, MB_OK);
+#else
        SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_ERROR, "Error in %s line %d:\n", _file, _line);
        SDL_LogMessageV(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_ERROR, format, args);
+#endif
 
        va_end(args);
 }
index c3e07af..c2d1dfa 100644 (file)
@@ -138,7 +138,7 @@ int init_sdl(const char *progname, int width, int height, int sound_samplerate,
        want.callback = audio_cb;
        rc = SDL_OpenAudio(&want, &have);
        if (rc < 0) {
-               print_error("Failed to open audio\n");
+               print_error("Failed to open audio! (No speaker connected?)\n");
                goto error;
        } else if (have.format != want.format) {
                print_error("Failed to open audio with desired audio format\n");
index 85498fc..37380db 100644 (file)
@@ -358,7 +358,7 @@ static void gamecolor2gl_index(double *red, double *green, double *blue, uint16_
 #endif
        if (color >= 0x8000) {
 #ifdef DEBUG_COLOR
-               print_error("Use of color index from current palette, but index is not defined as being set!\n");
+               fprintf(stderr, "Use of color index from current palette, but index is not defined as being set!\n");
 #endif
        }
        *red = (double)((color >> 8) & 0xf) / 15.0;
@@ -396,7 +396,7 @@ again:
 #endif
                /* now use that color info parse again (hopefully it does not contain a "pre-defined palette" again and again! */
                if (nesting++ == 8) {
-                       print_error("Color lookup from pre-defined palette is nesting too much, please fix!\n");
+                       print_info("Color lookup from pre-defined palette is nesting too much, please fix!\n");
                        return;
                }
                goto again;
@@ -416,7 +416,7 @@ static int32_t wrap_int28(int32_t value)
 static void store_coord(const char __attribute__((unused)) *what, uint32_t vertex, int32_t x, int32_t y, int32_t z)
 {
        if ((vertex & 3)) {
-               print_error("Vertex %d is not a multiple of four!\n", vertex);
+               print_info("Vertex %d is not a multiple of four!\n", vertex);
                return;
        }
        /* create new vertices item, if there was no vertex before, or if the vertex has different offet */
@@ -449,7 +449,7 @@ static void store_coord(const char __attribute__((unused)) *what, uint32_t verte
                }
                vertex -= 0x200;
        } else {
-               print_error("Vertex %d exceeds maximum vertex number, please fix!\n", vertex);
+               print_info("Vertex %d exceeds maximum vertex number, please fix!\n", vertex);
                return;
        }
        vertex >>= 2;
@@ -468,11 +468,11 @@ static void store_coord(const char __attribute__((unused)) *what, uint32_t verte
 static void store_interior_coord(const char __attribute__((unused)) *what, uint32_t vertex, int32_t x, int32_t y1, int32_t y2, int32_t y3, int32_t y4, int32_t z)
 {
        if ((vertex & 3)) {
-               print_error("Vertex is not a multiple of four!\n");
+               print_info("Vertex is not a multiple of four!\n");
                return;
        }
        if (vertex >= MAX_INTERIOR_VERTEX) {
-               print_error("Vertex %d exceeds maximum vertex number %d!\n", vertex, MAX_INTERIOR_VERTEX);
+               print_info("Vertex %d exceeds maximum vertex number %d!\n", vertex, MAX_INTERIOR_VERTEX);
                return;
        }
        if (!render_item || render_item->type != RENDER_ITEM_VERTICES_INTERIOR)
@@ -1113,7 +1113,7 @@ static void draw_stars_interstellar(void)
        table = REG_A[0];
        count = REG_D[5] + 1;
        if (count > MAX_INTERSTARS) {
-               print_error("Expecting maximum of %d stars here, plese fix!\n", MAX_INTERSTARS);
+               print_info("Expecting maximum of %d stars here, plese fix!\n", MAX_INTERSTARS);
                return;
        }
        for (i = 0; i < count; i++) {
@@ -1317,7 +1317,7 @@ void render_capture_event(int event)
        case STOP_AT_POLY_BUILDING_INTERIOR1to4:
                /* before we come here, we must already passed the break points above, so we know the level to be rendered */
                if (interior_level12 == 0) {
-                       print_error("Interior level is not set, please fix!\n");
+                       print_info("Interior level is not set, please fix!\n");
                        break;
                }
                poly_building_interior1to4(interior_level12);
@@ -1326,7 +1326,7 @@ void render_capture_event(int event)
        case STOP_AT_POLY_BUILDING_INTERIOR5to6:
                /* before we come here, we must already passed the break points above, so we know the level to be rendered */
                if (interior_level12 == 0) {
-                       print_error("Interior level is not set, please fix!\n");
+                       print_info("Interior level is not set, please fix!\n");
                        break;
                }
                poly_building_interior5to6(interior_level12, interior_level34);
@@ -1448,19 +1448,19 @@ static int use_coord(const char __attribute__((unused)) *what, uint32_t vertex,
        render_item_t *ri = NULL;
 
        if ((vertex & 3)) {
-               print_error("Vertex %d is not a multiple of four!\n", vertex);
+               print_info("Vertex %d is not a multiple of four!\n", vertex);
                return -1;
        }
        if (vertex < 0x100) {
                if (!render_item_vertices_0) {
-                       print_error("Vertices item for vertex %d not yet set!\n", vertex);
+                       print_info("Vertices item for vertex %d not yet set!\n", vertex);
                        return -1;
                }
                ri = render_item_vertices_0;
        } else
        if (vertex < 0x200) {
                if (!render_item_vertices_1) {
-                       print_error("Vertices item for vertex %d not yet set!\n", vertex);
+                       print_info("Vertices item for vertex %d not yet set!\n", vertex);
                        return -1;
                }
                ri = render_item_vertices_1;
@@ -1468,13 +1468,13 @@ static int use_coord(const char __attribute__((unused)) *what, uint32_t vertex,
        } else
        if (vertex < 0x300) {
                if (!render_item_vertices_2) {
-                       print_error("Vertices item for vertex %d not yet set!\n", vertex);
+                       print_info("Vertices item for vertex %d not yet set!\n", vertex);
                        return -1;
                }
                ri = render_item_vertices_2;
                vertex -= 0x200;
        } else {
-               print_error("Vertex %d exceeds maximum vertex number %d!\n", vertex, MAX_VERTEX);
+               print_info("Vertex %d exceeds maximum vertex number %d!\n", vertex, MAX_VERTEX);
                return -1;
        }
        vertex >>= 2;
@@ -1498,19 +1498,19 @@ static int use_coord(const char __attribute__((unused)) *what, uint32_t vertex,
 static int use_interior_coord(const char __attribute__((unused)) *what, uint32_t vertex, int level, double *x, double *y, double *z)
 {
        if ((vertex & 3)) {
-               print_error("Vertex is not a multiple of four!\n");
+               print_info("Vertex is not a multiple of four!\n");
                return -1;
        }
        if (vertex >= MAX_INTERIOR_VERTEX) {
-               print_error("Vertex %d exceeds maximum vertex number %d!\n", vertex, MAX_VERTEX);
+               print_info("Vertex %d exceeds maximum vertex number %d!\n", vertex, MAX_VERTEX);
                return -1;
        }
        if (level < 1 || level > 4) {
-               print_error("Level %d is out of range (1..4)!\n", level);
+               print_info("Level %d is out of range (1..4)!\n", level);
                return -1;
        }
        if (!render_item_vertices_interior) {
-               print_error("Vertices item for interior verticies not yet set!\n");
+               print_info("Vertices item for interior verticies not yet set!\n");
                return -1;
        }
        vertex >>= 2;
@@ -2292,7 +2292,7 @@ void render_one_item(render_item_t *render_item)
                break;
        }
        default:
-               print_error("Unknown type, please fix!\n");
+               print_info("Unknown render item type, please fix!\n");
        }
 }