From: Andreas Eversberg Date: Tue, 3 Apr 2018 15:57:05 +0000 (+0200) Subject: Add MessageBox error output on Windows X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=mercenary-reloaded.git;a=commitdiff_plain;h=fed468ca18de87fb9259b0db5d4f97ff79cec2e7 Add MessageBox error output on Windows --- diff --git a/src/libcpu/execute.c b/src/libcpu/execute.c index a173d2c..308d3fd 100644 --- a/src/libcpu/execute.c +++ b/src/libcpu/execute.c @@ -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; diff --git a/src/libsdl/print.c b/src/libsdl/print.c index 24a9f7f..7cb6442 100644 --- a/src/libsdl/print.c +++ b/src/libsdl/print.c @@ -2,6 +2,9 @@ #include #include #include +#if defined(_WIN32) +#include +#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); } diff --git a/src/libsdl/sdl.c b/src/libsdl/sdl.c index c3e07af..c2d1dfa 100644 --- a/src/libsdl/sdl.c +++ b/src/libsdl/sdl.c @@ -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"); diff --git a/src/mercenary/render.c b/src/mercenary/render.c index 85498fc..37380db 100644 --- a/src/mercenary/render.c +++ b/src/mercenary/render.c @@ -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"); } }