comparison tools/gfxconv.c @ 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
comparison
equal deleted inserted replaced
2004:161e731eb152 2005:2ff214f811b4
101 optOutFormat = -1, 101 optOutFormat = -1,
102 optItemCount = -1, 102 optItemCount = -1,
103 optPlanedWidth = 1, 103 optPlanedWidth = 1,
104 optForcedInSubFormat = -1; 104 optForcedInSubFormat = -1;
105 unsigned int optInSkip = 0; 105 unsigned int optInSkip = 0;
106 BOOL optInSkipNeg = FALSE;
106 107
107 int optCropMode = CROP_NONE, 108 int optCropMode = CROP_NONE,
108 optCropX0, optCropY0, 109 optCropX0, optCropY0,
109 optCropW, optCropH; 110 optCropW, optCropH;
110 111
651 case 3: 652 case 3:
652 optOutFilename = optArg; 653 optOutFilename = optArg;
653 break; 654 break;
654 655
655 case 4: 656 case 4:
656 if (!dmGetIntVal(optArg, &optInSkip, NULL)) 657 if (!dmGetIntVal(optArg, &optInSkip, &optInSkipNeg))
657 { 658 {
658 dmErrorMsg("Invalid skip value argument '%s'.\n", optArg); 659 dmErrorMsg("Invalid skip value argument '%s'.\n", optArg);
659 return FALSE; 660 return FALSE;
660 } 661 }
661 break; 662 break;
1789 DMC64ImageConvSpec imageSpecC64; 1790 DMC64ImageConvSpec imageSpecC64;
1790 const DMC64ImageFormat *inC64Fmt = NULL; 1791 const DMC64ImageFormat *inC64Fmt = NULL;
1791 DMConvFormat inFormat, outFormat; 1792 DMConvFormat inFormat, outFormat;
1792 DMC64Image *inC64Image = NULL, *outC64Image = NULL; 1793 DMC64Image *inC64Image = NULL, *outC64Image = NULL;
1793 Uint8 *dataBuf = NULL, *dataBufOrig = NULL; 1794 Uint8 *dataBuf = NULL, *dataBufOrig = NULL;
1794 size_t dataSize, dataSizeOrig; 1795 size_t dataSize, dataSizeOrig, dataRealOffs;
1795 int i, n; 1796 int i, n;
1796 1797
1797 // Default color mapping 1798 // Default color mapping
1798 for (i = 0; i < C64_NCOLORS; i++) 1799 for (i = 0; i < C64_NCOLORS; i++)
1799 optColorMap[i] = i; 1800 optColorMap[i] = i;
1894 dmErrorMsg("Input skip value %d is larger than input size %" DM_PRIu_SIZE_T ".\n", 1895 dmErrorMsg("Input skip value %d is larger than input size %" DM_PRIu_SIZE_T ".\n",
1895 optInSkip, dataSizeOrig); 1896 optInSkip, dataSizeOrig);
1896 goto error; 1897 goto error;
1897 } 1898 }
1898 1899
1899 dataBuf = dataBufOrig + optInSkip; 1900 if (optInSkipNeg)
1900 dataSize = dataSizeOrig - optInSkip; 1901 {
1902 dataBuf = dataBufOrig + dataSizeOrig - optInSkip;
1903 dataSize = optInSkip;
1904 dataRealOffs = dataSizeOrig - optInSkip;
1905
1906 dmMsg(1, "Input skip -%d (-%x). Offset %d (%x), size %d (%x).\n",
1907 optInSkip, optInSkip,
1908 dataRealOffs, dataRealOffs,
1909 dataSize, dataSize);
1910
1911 }
1912 else
1913 {
1914 dataBuf = dataBufOrig + optInSkip;
1915 dataSize = dataSizeOrig - optInSkip;
1916 dataRealOffs = optInSkip;
1917
1918 dmMsg(1, "Input skip %d (%x), size %d (%x).\n",
1919 optInSkip, optInSkip,
1920 dataSize, dataSize);
1921 }
1901 1922
1902 // Check for forced input format here 1923 // Check for forced input format here
1903 if (optForcedInSubFormat >= 0) 1924 if (optForcedInSubFormat >= 0)
1904 optInFormat = optForcedInSubFormat; 1925 optInFormat = optForcedInSubFormat;
1905 1926
1966 1987
1967 switch (optInType) 1988 switch (optInType)
1968 { 1989 {
1969 case FFMT_SPRITE: 1990 case FFMT_SPRITE:
1970 case FFMT_CHAR: 1991 case FFMT_CHAR:
1971 dmDumpSpritesAndChars(dataBuf, dataSize, optInSkip); 1992 dmDumpSpritesAndChars(dataBuf, dataSize, dataRealOffs);
1972 break; 1993 break;
1973 1994
1974 case FFMT_BITMAP: 1995 case FFMT_BITMAP:
1975 { 1996 {
1976 DMImage *outImage = NULL; 1997 DMImage *outImage = NULL;