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);