changeset 1863:b2287ace1f0d

Make input format -i option saner and more uniform with output format option -f
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 24 Jun 2018 17:03:41 +0300
parents 4e1de3546890
children 897250732bfd
files tools/gfxconv.c
diffstat 1 files changed, 18 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/tools/gfxconv.c	Sun Jun 24 17:02:32 2018 +0300
+++ b/tools/gfxconv.c	Sun Jun 24 17:03:41 2018 +0300
@@ -120,8 +120,8 @@
     {  0, '?', "help",          "Show this help", OPT_NONE },
     { 15, 'v', "verbose",       "Increase verbosity", OPT_NONE },
     {  3, 'o', "output",        "Output filename", OPT_ARGREQ },
-    {  1, 'i', "informat",      "Set input format (sprite[:mc:sc], char[:mc|sc], bitmap[:<bformat>], image)", OPT_ARGREQ },
     {  2, 'm', "multicolor",    "Input is multicolor / output in multicolor", OPT_NONE },
+    {  1, 'i', "informat",      "Set input format (spr[:mc:sc], chr[:mc|sc] or any supported image or C64 bitmap format)", OPT_ARGREQ },
     {  4, 's', "skip",          "Skip N bytes in input from start", OPT_ARGREQ },
     {  5, 'f', "format",        "Output format (see --formats)", OPT_ARGREQ },
     { 17, 'F', "formats",       "List supported input/output formats", OPT_NONE },
@@ -487,46 +487,40 @@
 
         case 1:
             {
-                switch (tolower(optArg[0]))
+                char *flags = strchr(optArg, ':');
+                if (flags != NULL)
+                    *flags++ = 0;
+
+                if (!dmGetFormatByExt(optArg, &optInFormat, &optInSubFormat) &&
+                    !dmGetC64FormatByExt(optArg, &optInFormat, &optInSubFormat))
                 {
-                    case 's': optInFormat = FFMT_SPRITE; break;
-                    case 'c': optInFormat = FFMT_CHAR; break;
-                    case 'b': optInFormat = FFMT_BITMAP; break;
-                    case 'i': optInFormat = FFMT_IMAGE; break;
-                    default:
-                        dmErrorMsg("Invalid input format '%s'.\n", optArg);
-                        return FALSE;
+                    dmErrorMsg("Invalid input format '%s', see -F / --formats for format list.\n", optArg);
+                    return FALSE;
                 }
 
-                char *tmp = strchr(optArg, ':');
-                if (tmp != NULL)
+                if (flags != NULL)
                 {
-                    tmp++;
                     switch (optInFormat)
                     {
                         case FFMT_SPRITE:
                         case FFMT_CHAR:
-                            if (strcasecmp(tmp, "mc") == 0)
+                            if (strcasecmp(flags, "mc") == 0)
                                 optInMulticolor = TRUE;
                             else
-                            if (strcasecmp(tmp, "sc") == 0)
+                            if (strcasecmp(flags, "sc") == 0)
                                 optInMulticolor = FALSE;
                             else
                             {
-                                dmErrorMsg("Invalid input subformat for sprite/char: '%s', should be 'mc' or 'sc'.\n",
-                                    tmp);
+                                dmErrorMsg("Invalid input format flags for sprite/char '%s', should be 'mc' or 'sc'.\n",
+                                    flags);
                                 return FALSE;
                             }
                             break;
 
-                        case FFMT_BITMAP:
-                            if (!dmGetC64FormatByExt(tmp, &optInFormat, &optInSubFormat))
-                            {
-                                dmErrorMsg("Invalid bitmap subformat '%s', see format list for valid bformats.\n",
-                                    tmp);
-                                return FALSE;
-                            }
-                            break;
+                        default:
+                            dmErrorMsg("Input format '%s' does not support any flags ('%s').\n",
+                                optArg, flags);
+                            return FALSE;
                     }
                 }
             }