Mercurial > hg > dmlib
changeset 1869:1067df067f28
Improve input/output format probe/forcing and related messages.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 24 Jun 2018 18:45:33 +0300 |
parents | 4bb3d10328a9 |
children | 1e8f60ce21d1 |
files | tools/gfxconv.c |
diffstat | 1 files changed, 48 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/tools/gfxconv.c Sun Jun 24 17:35:32 2018 +0300 +++ b/tools/gfxconv.c Sun Jun 24 18:45:33 2018 +0300 @@ -27,11 +27,11 @@ FFMT_ASCII, FFMT_ANSI, - FFMT_IMAGE, - + FFMT_BITMAP, FFMT_CHAR, FFMT_SPRITE, - FFMT_BITMAP, + + FFMT_IMAGE, FFMT_LAST }; @@ -252,16 +252,33 @@ } -int dmGetConvFormat(const int format, const int subformat) +BOOL dmGetConvFormat(const int format, const int subformat, DMConvFormat *pfmt) { for (int i = 0; i < nconvFormatList; i++) { const DMConvFormat *fmt = &convFormatList[i]; if (fmt->format == format && fmt->subformat == subformat) - return i; + { + memcpy(pfmt, fmt, sizeof(DMConvFormat)); + return TRUE; + } } - return -1; + + for (int i = 0; i < nconvFormatList; i++) + { + const DMConvFormat *fmt = &convFormatList[i]; + if (fmt->format == format && format == FFMT_BITMAP) + { + const DMConvFormat *fmt = &convFormatList[i]; + const DMC64ImageFormat *cfmt = &dmC64ImageFormats[subformat]; + memcpy(pfmt, fmt, sizeof(DMConvFormat)); + pfmt->fext = cfmt->name; + return TRUE; + } + } + + return FALSE; } @@ -286,7 +303,6 @@ } - BOOL dmGetFormatByExt(const char *fext, int *format, int *subformat) { if (fext == NULL) @@ -560,8 +576,20 @@ break; case 1: - if (!dmParseFormatOption("input", "Input", optArg, &optInFormat, &optForcedInSubFormat)) - return FALSE; + { + DMConvFormat fmt; + + if (!dmParseFormatOption("input", "Input", optArg, &optInFormat, &optForcedInSubFormat)) + return FALSE; + + dmGetConvFormat(optInFormat, optForcedInSubFormat, &fmt); + if ((fmt.flags & DM_FMT_RD) == 0) + { + dmErrorMsg("Invalid input format '%s'.\n", + fmt.name); + return FALSE; + } + } break; case 3: @@ -1669,6 +1697,7 @@ { FILE *inFile = NULL; const DMC64ImageFormat *inC64Fmt = NULL; + DMConvFormat inFormat, outFormat; DMC64Image *inC64Image = NULL, *outC64Image = NULL; Uint8 *dataBuf = NULL, *dataBufOrig = NULL; size_t dataSize, dataSizeOrig; @@ -1755,6 +1784,10 @@ dataBuf = dataBufOrig + optInSkip; dataSize = dataSizeOrig - optInSkip; + // Check for forced input subformat here + if (optForcedInSubFormat >= 0) + optInSubFormat = optForcedInSubFormat; + // Perform probing, if required if (optInFormat == FFMT_AUTO || optInFormat == FFMT_BITMAP) { @@ -1766,7 +1799,7 @@ if (optForcedInSubFormat >= 0) { forced = &dmC64ImageFormats[optForcedInSubFormat]; - dmMsg(0, "Forced %s format image, type %d, %s\n", + dmMsg(0, "Forced '%s' format image, type %d, %s\n", forced->name, forced->format->type, forced->fext); } @@ -1798,7 +1831,7 @@ { optInFormat = FFMT_IMAGE; optInSubFormat = index; - dmMsg(1, "Probed '%s' format image.\n", ifmt->fext); + dmMsg(1, "Probed '%s' format image.\n", ifmt->name); } } @@ -1808,22 +1841,12 @@ goto error; } - int inFormat = dmGetConvFormat(optInFormat, optInSubFormat), - outFormat = dmGetConvFormat(optOutFormat, optOutSubFormat); - - if (inFormat != -1 && outFormat != -1) + if (dmGetConvFormat(optInFormat, optInSubFormat, &inFormat) && + dmGetConvFormat(optOutFormat, optOutSubFormat, &outFormat)) { - const char - *inFmtName = convFormatList[inFormat].name, - *inFmtExt = convFormatList[inFormat].fext, - *outFmtName = convFormatList[outFormat].name, - *outFmtExt = convFormatList[outFormat].fext; - - if (optInFormat == FFMT_BITMAP) - inFmtExt = inC64Fmt->name; - dmMsg(1, "Attempting conversion %s (%s) -> %s (%s)\n", - inFmtName, inFmtExt, outFmtName, outFmtExt); + inFormat.name, inFormat.fext, + outFormat.name, outFormat.fext); } switch (optInFormat)