Mercurial > hg > dmlib
diff tools/gfxconv.c @ 1886:1af79412f249
Remove the stdio FILE support from libgfx API, now only DMResource is supported.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 25 Jun 2018 13:52:20 +0300 |
parents | b386d339056f |
children | b97f273a9d54 |
line wrap: on
line diff
--- a/tools/gfxconv.c Mon Jun 25 13:24:50 2018 +0300 +++ b/tools/gfxconv.c Mon Jun 25 13:52:20 2018 +0300 @@ -1186,64 +1186,24 @@ } -#define DMCOL(x) (((x) >> 4) & 0xf) - -int dmWriteIFFMasterRAW(const char *filename, const char *prefix, const DMImage *img, const DMImageConvSpec *spec, const int fmtid) +int dmWriteIFFMasterRAWHeaderFile( + const char *hdrFilename, const char *dataFilename, + const char *prefix, const DMImage *img, + const DMImageConvSpec *spec, const int fmtid) { - // Open data file for writing - FILE *fp = NULL; - int res = DMERR_OK; + DMResource *fp; + int res; - if ((fp = fopen(filename, "w")) == NULL) + if ((res = dmf_open_stdio(hdrFilename, "wb", &fp)) != DMERR_OK) { - res = dmError(DMERR_FOPEN, - "Could not create file '%s'.\n", filename); - goto err; + return dmError(res, + "RAW: Could not open file '%s' for writing.\n", + hdrFilename); } - - fprintf(fp, - "%s_width: dw.w %d\n" - "%s_height: dw.w %d\n" - "%s_nplanes: dw.w %d\n", - prefix, img->width * spec->scaleX, - prefix, img->height * spec->scaleY, - prefix, spec->nplanes); - - if (fmtid == DM_IMGFMT_ARAW) - { - fprintf(fp, - "%s_ncolors: dw.w %d\n" - "%s_palette:\n", - prefix, img->ncolors, - prefix); + res = dmWriteIFFMasterRAWHeader(fp, dataFilename, prefix, img, spec, fmtid); - for (int i = 0; i < (1 << spec->nplanes); i++) - { - Uint32 color; - if (i < img->ncolors) - { - color = (DMCOL(img->pal[i].r) << 8) | - (DMCOL(img->pal[i].g) << 4) | - (DMCOL(img->pal[i].b)); - } - else - color = 0; - - fprintf(fp, - "\tdc.w $%04X\n", - color); - } - - fprintf(fp, - "%s: incbin \"%s\"\n", - prefix, filename); - } - -err: - if (fp != NULL) - fclose(fp); - + dmf_close(fp); return res; } @@ -1294,8 +1254,8 @@ case DM_IMGFMT_RAW: case DM_IMGFMT_ARAW: { - char *prefix = NULL, *dataFilename = NULL; - if ((dataFilename = dm_strdup_fext(filename, "%s.inc")) == NULL || + char *prefix = NULL, *hdrFilename = NULL; + if ((hdrFilename = dm_strdup_fext(filename, "%s.inc")) == NULL || (prefix = dm_strdup_fext(filename, "img_%s")) == NULL) { res = dmError(DMERR_MALLOC, @@ -1314,12 +1274,13 @@ spec->planar ? "planar/interleaved" : "non-interleaved"); dmMsg(2, "%s datafile '%s', ID prefix '%s'.\n", fmt->fmtid == DM_IMGFMT_ARAW ? "ARAW" : "RAW", - dataFilename, prefix); + hdrFilename, prefix); } - res = dmWriteIFFMasterRAW(dataFilename, prefix, image, spec, fmt->fmtid); + res = dmWriteIFFMasterRAWHeaderFile( + hdrFilename, filename, prefix, image, spec, fmt->fmtid); dmFree(prefix); - dmFree(dataFilename); + dmFree(hdrFilename); } break; @@ -1330,6 +1291,8 @@ // If no error has occured thus far, write the image if (res == DMERR_OK) { + DMResource *fp; + if (info) { char *str; @@ -1343,7 +1306,16 @@ dmMsg(2, "Using %s output.\n", str); } - res = fmt->write(filename, image, spec); + if ((res = dmf_open_stdio(filename, "wb", &fp)) != DMERR_OK) + { + dmErrorMsg("Could not open file '%s' for writing.\n", + filename); + goto err; + } + + res = fmt->write(fp, image, spec); + + dmf_close(fp); } err: @@ -1951,8 +1923,8 @@ } // Read input - if (ifmt->readFILE != NULL) - res = ifmt->readFILE(fp, &inImage); + if (ifmt->read != NULL) + res = ifmt->read(fp, &inImage); else dmErrorMsg("Unsupported input image format for image conversion.\n");