Mercurial > hg > dmlib
changeset 2151:0a7ebb7198e3
Few additional cleanups in the CDHM decoder, and mark the format support as not-broken anymore.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 04 Jun 2019 15:05:53 +0300 |
parents | b4fbb90937f7 |
children | 44d7e8e2483c |
files | tools/lib64fmts.c |
diffstat | 1 files changed, 12 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/tools/lib64fmts.c Tue Jun 04 15:00:58 2019 +0300 +++ b/tools/lib64fmts.c Tue Jun 04 15:05:53 2019 +0300 @@ -985,7 +985,7 @@ Uint8 data, *dstBuf; const size_t baseAddr = 0x4000; const size_t dstSize = 0x8000 - baseAddr; - size_t dstOffs, srcOffs; + size_t dstOffs, srcOffs, ncount; // Allocate output buffer if ((dstBuf = dmMalloc0(dstSize)) == NULL) @@ -994,15 +994,15 @@ "Could not allocate memory for RLE decoding buffer.\n"); } - // Setup input buffer + // Setup input and output offsets + srcOffs = psrc->len - 1; dstOffs = 0x7ff2 - baseAddr - 1; - srcOffs = psrc->len - 1; while (dstOffs > 0 && srcOffs > 0) { + // Get one byte of data data = psrc->data[srcOffs]; - // Current data byte tells us the mode if (data == 0) { @@ -1014,23 +1014,23 @@ goto out; } - size_t ncount = psrc->data[--srcOffs]; + ncount = psrc->data[--srcOffs]; data = psrc->data[--srcOffs]; - srcOffs--; - if (dstOffs < ncount) goto finish; dstOffs -= ncount; - ncount++; - for (size_t n = 0; n < ncount; n++) + + for (size_t n = 0; n < ncount + 1; n++) dstBuf[dstOffs + n] = data; + + srcOffs--; } else { // Literal run of data bytes - size_t ncount = data; + ncount = data; if (srcOffs < ncount) ncount = srcOffs; @@ -1041,10 +1041,7 @@ dstOffs -= ncount - 1; for (size_t n = 0; n < ncount; n++) - { - data = psrc->data[srcOffs + n]; - dstBuf[dstOffs + n] = data; - } + dstBuf[dstOffs + n] = psrc->data[srcOffs + n]; } } @@ -2265,7 +2262,7 @@ }, { - "cdhp", "Cosmos Designs Hires Manager (packed)", 0x4000, 0, DM_FMT_RD | DM_FMT_BROKEN, + "cdhp", "Cosmos Designs Hires Manager (packed)", 0x4000, 0, DM_FMT_RD, fmtProbeCosmosDesignsHiresManager, fmtDecodeCosmosDesignsHiresManagerPacked, NULL, { }, &dmC64CommonFormats[8]