diff options
-rw-r--r-- | error.c | 8 | ||||
-rw-r--r-- | error.h | 2 | ||||
-rw-r--r-- | font.c | 11 | ||||
-rw-r--r-- | window.c | 20 |
4 files changed, 19 insertions, 22 deletions
@@ -1,11 +1,15 @@ #include "error.h" +#include <stdarg.h> #include <stdio.h> #include <stdlib.h> -void fatal_error(const char *msg) +void fatal_error(const char *msgfmt, ...) { - perror(msg); + va_list args; + va_start(args, msgfmt); + vfprintf(stderr, msgfmt, args); + va_end(args); exit(-1); } @@ -1,7 +1,7 @@ #ifndef _ERROR_H #define ERROR_H -void fatal_error(const char *msg); +void fatal_error(const char *msgfmt, ...); void warning(const char *msg); #endif @@ -31,9 +31,9 @@ SDL_Texture *font_create_texture(SDL_Renderer *renderer, PSFFont *font) } result = SDL_CreateTextureFromSurface(renderer, surface); - if (result == NULL) { - fprintf(stderr, "Failed to create texture: %s\n", SDL_GetError()); - } + if (result == NULL) + fatal_error("Failed to create texture: %s\n", SDL_GetError()); + SDL_FreeSurface(surface); printf("Created font texture atlas of size %dx%d\n", surface->w, surface->h); @@ -51,9 +51,8 @@ PSFFont font_load(const char *filename) fseek(fp, 0, SEEK_SET); fread(&font.magic, 4, 1, fp); - if (font.magic != PSF_MAGIC_NUMBER) { - printf("%x: Font '%s' header does not contain expected value.\n", font.magic, filename); - } + if (font.magic != PSF_MAGIC_NUMBER) + fatal_error("Font header mismatch! '%s' has magic value %x.\n", filename, font.magic); fread(&font.version, 4, 1, fp); fread(&font.header_size, 4, 1, fp); @@ -4,6 +4,7 @@ #include "buffer.h" #include "editor.h" +#include "error.h" #include "font.h" #include "input.h" @@ -15,27 +16,20 @@ static PSFFont font; void window_init(const char *title, int rows, int cols) { - /* TODO: There should be a 'panic' method of sorts to be reused here. */ - if (SDL_Init(SDL_INIT_VIDEO) != 0) { - fprintf(stderr, "Failed to initalize SDL: %s\n", SDL_GetError()); - return; - } + if (SDL_Init(SDL_INIT_VIDEO) != 0) + fatal_error("Failed to init SDL: %s\n", SDL_GetError()); font = font_load("terminus/ter-u12n.psf"); int window_width = cols * font.width; int window_height = rows * font.height; window = SDL_CreateWindow(title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, window_width, window_height, 0); - if (window == NULL) { - fprintf(stderr, "Failed to create a window: %s\n", SDL_GetError()); - return; - } + if (window == NULL) + fatal_error("Failed to create window: %s\n", SDL_GetError()); renderer = SDL_CreateRenderer(window, -1, 0); - if (renderer == NULL) { - fprintf(stderr, "Failed to create a renderer: %s\n", SDL_GetError()); - return; - } + if (renderer == NULL) + fatal_error("Failed to create renderer: %s\n", SDL_GetError()); font_texture = font_create_texture(renderer, &font); |