Mercurial > hg > dmlib
changeset 2005:2ff214f811b4
Implement negative input data skip values for gfxconv -s option.
A negative value will start from end of the input.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 07 Jul 2018 01:12:21 +0300 |
parents | 161e731eb152 |
children | 9f7e9a393771 |
files | tools/gfxconv.c |
diffstat | 1 files changed, 26 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/tools/gfxconv.c Sat Jul 07 01:11:22 2018 +0300 +++ b/tools/gfxconv.c Sat Jul 07 01:12:21 2018 +0300 @@ -103,6 +103,7 @@ optPlanedWidth = 1, optForcedInSubFormat = -1; unsigned int optInSkip = 0; +BOOL optInSkipNeg = FALSE; int optCropMode = CROP_NONE, optCropX0, optCropY0, @@ -653,7 +654,7 @@ break; case 4: - if (!dmGetIntVal(optArg, &optInSkip, NULL)) + if (!dmGetIntVal(optArg, &optInSkip, &optInSkipNeg)) { dmErrorMsg("Invalid skip value argument '%s'.\n", optArg); return FALSE; @@ -1791,7 +1792,7 @@ DMConvFormat inFormat, outFormat; DMC64Image *inC64Image = NULL, *outC64Image = NULL; Uint8 *dataBuf = NULL, *dataBufOrig = NULL; - size_t dataSize, dataSizeOrig; + size_t dataSize, dataSizeOrig, dataRealOffs; int i, n; // Default color mapping @@ -1896,8 +1897,28 @@ goto error; } - dataBuf = dataBufOrig + optInSkip; - dataSize = dataSizeOrig - optInSkip; + if (optInSkipNeg) + { + dataBuf = dataBufOrig + dataSizeOrig - optInSkip; + dataSize = optInSkip; + dataRealOffs = dataSizeOrig - optInSkip; + + dmMsg(1, "Input skip -%d (-%x). Offset %d (%x), size %d (%x).\n", + optInSkip, optInSkip, + dataRealOffs, dataRealOffs, + dataSize, dataSize); + + } + else + { + dataBuf = dataBufOrig + optInSkip; + dataSize = dataSizeOrig - optInSkip; + dataRealOffs = optInSkip; + + dmMsg(1, "Input skip %d (%x), size %d (%x).\n", + optInSkip, optInSkip, + dataSize, dataSize); + } // Check for forced input format here if (optForcedInSubFormat >= 0) @@ -1968,7 +1989,7 @@ { case FFMT_SPRITE: case FFMT_CHAR: - dmDumpSpritesAndChars(dataBuf, dataSize, optInSkip); + dmDumpSpritesAndChars(dataBuf, dataSize, dataRealOffs); break; case FFMT_BITMAP: