# HG changeset patch # User Matti Hamalainen # Date 1530915141 -10800 # Node ID 2ff214f811b401b608d1a27befe6888bb7d101ad # Parent 161e731eb15277e23e1c159ec33c0858a33ee2ad Implement negative input data skip values for gfxconv -s option. A negative value will start from end of the input. diff -r 161e731eb152 -r 2ff214f811b4 tools/gfxconv.c --- 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: