Mercurial > hg > dmlib
diff view64.c @ 419:936bc27a79d6
Modularize some functions to lib64gfx, fix bitmap -> image conversion,
and implement various cleanups.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 03 Nov 2012 07:53:38 +0200 |
parents | 59244a7ae37f |
children | e8e244036ee4 |
line wrap: on
line diff
--- a/view64.c Sat Nov 03 07:52:26 2012 +0200 +++ b/view64.c Sat Nov 03 07:53:38 2012 +0200 @@ -155,12 +155,12 @@ SDL_Surface *screen = NULL, *surf = NULL; DMImage bmap; BOOL initSDL = FALSE, exitFlag, needRedraw; - DMC64ImageFormat *fmt; + DMC64ImageFormat *fmt, *forced; DMC64Image image; char *windowTitle; Uint8 *dataBuf = NULL; size_t dataSize; - int i, ret; + int ret; dmSetScaleFactor(2.0); @@ -175,71 +175,42 @@ if (optFilename == NULL) { dmError("No input file specified, perhaps you need some --help\n"); - goto error_exit; + goto error; } - if (dmReadDataFile(optFilename, &dataBuf, &dataSize) != 0) - goto error_exit; + if ((ret = dmReadDataFile(NULL, optFilename, &dataBuf, &dataSize)) != DMERR_OK) + goto error; + + dmMsg(1, "Read %d bytes of input.\n", dataSize); // Probe for format if (optForcedFormat >= 0) { - fmt = &dmC64ImageFormats[optForcedFormat]; - dmMsg(0,"Forced %s format image, type %d, %s\n", fmt->name, fmt->type, fmt->extension); - - if (fmt->decode != NULL) - ret = fmt->decode(&image, dataBuf + 2, dataSize - 2, fmt); - else - ret = dmC64DecodeGenericBMP(&image, dataBuf + 2, dataSize - 2, fmt); - - if (ret < 0) - { - dmError("Error decoding image format.\n"); - return -1; - } + forced = &dmC64ImageFormats[optForcedFormat]; + dmMsg(0,"Forced %s format image, type %d, %s\n", forced->name, forced->type, forced->extension); } else - { - BOOL found = FALSE; - for (i = 0; i < ndmC64ImageFormats; i++) - { - fmt = &dmC64ImageFormats[i]; - ret = fmt->probe(dataBuf, dataSize); - if (ret > 0) - { - dmMsg(0,"Probed %s format image, type %d, %s\n", fmt->name, fmt->type, fmt->extension); - if (fmt->decode != NULL) - ret = fmt->decode(&image, dataBuf + 2, dataSize - 2, fmt); - else - ret = dmC64DecodeGenericBMP(&image, dataBuf + 2, dataSize - 2, fmt); + forced = NULL; - if (ret < 0) - { - dmError("Error decoding image format.\n"); - return -1; - } - - found = TRUE; - break; - } - else - if (ret < 0) - { - dmError("Error in probing.\n"); - } - } - if (!found) - { - dmError("Probing could not find any matching image format. Perhaps try forcing a format via -f\n"); - return -2; - } + ret = dmC64DecodeBMP(&image, dataBuf, dataSize, 0, 2, &fmt, forced); + if (forced == NULL && fmt != NULL) + { + dmMsg(0,"Probed %s format image, type %d, %s\n", + fmt->name, fmt->type, fmt->extension); } + if (ret < 0) + { + dmError("Probing could not find any matching image format (%d). Perhaps try forcing a format via -f\n", ret); + return -1; + } + + // Initialize libSDL if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0) { dmError("Could not initialize SDL: %s\n", SDL_GetError()); - goto error_exit; + goto error; } initSDL = TRUE; @@ -249,7 +220,7 @@ if (screen == NULL) { dmError("Can't SDL_SetVideoMode(): %s\n", SDL_GetError()); - goto error_exit; + goto error; } // Create surface (we are lazy and ugly) @@ -302,7 +273,7 @@ optScrHeight = event.resize.h; if (!dmInitializeVideo(&screen)) - goto error_exit; + goto error; needRedraw = TRUE; break; @@ -320,7 +291,7 @@ if (SDL_MUSTLOCK(screen) != 0 && SDL_LockSurface(screen) != 0) { dmError("Can't lock surface.\n"); - goto error_exit; + goto error; } dmScaledBlitSurface8to8(surf, 0, 0, screen->w, screen->h, screen); @@ -337,7 +308,7 @@ } -error_exit: +error: if (screen) SDL_FreeSurface(screen);