# HG changeset patch # User Matti Hamalainen # Date 1352038147 -7200 # Node ID ab401a5087f90d90398b7964a9731d19cebad85c # Parent c7a3aacbd55e25920faac485b464ef335986750b Improve ARAW output. diff -r c7a3aacbd55e -r ab401a5087f9 gfxconv.c --- a/gfxconv.c Sun Nov 04 15:41:46 2012 +0200 +++ b/gfxconv.c Sun Nov 04 16:09:07 2012 +0200 @@ -549,12 +549,59 @@ case IMGFMT_ARAW: { - int res; - char *palFilename = dm_strdup_printf("%s.pal", filename); - res = dmWriteIFFMasterRAWPalette(palFilename, image, 1 << optSpec.nplanes); - dmFree(palFilename); - if (res != DMERR_OK) - return res; + FILE *fp; + char *dataFilename, *fext, *tmpFilename = dm_strdup(filename); + + // Form data file filename + if (tmpFilename == NULL) + return DMERR_MALLOC; + + fext = strrchr(tmpFilename, '.'); + if (fext != NULL) + *fext = 0; + dataFilename = dm_strdup_printf("%s.inc", tmpFilename); + dmFree(tmpFilename); + + // Open data file for writing + if ((fp = fopen(dataFilename, "w")) == NULL) + dmError("Could not create '%s'.\n", dataFilename); + dmFree(dataFilename); + + if (fp != NULL) + { + // Strip extension + int i; + char *palID = dm_strdup_printf("img_%s", filename); + char *fext = strrchr(palID, '.'); + if (fext != NULL) + *fext = 0; + + // Replace any non-alphanumerics + for (i = 0; palID[i]; i++) + { + if (isalnum(palID[i])) + palID[i] = tolower(palID[i]); + else + palID[i] = '_'; + } + + fprintf(fp, + "%s_width: dw.w %d\n" + "%s_height: dw.w %d\n" + "%s_nplanes: dw.w %d\n" + "%s_ncolors: dw.w %d\n" + "%s_palette:\n", + palID, image->width, + palID, image->height, + palID, spec->nplanes, + palID, image->ncolors, + palID); + + dmWriteIFFMasterRAWPalette(fp, image, 1 << optSpec.nplanes, NULL, NULL); + + fclose(fp); + dmFree(palID); + } if (info) dmMsg(2, "%d bitplanes, %s interleave.\n", spec->nplanes, spec->interleave ? "with" : "without"); return dmWriteIFFMasterRAWImage(filename, image, spec); diff -r c7a3aacbd55e -r ab401a5087f9 libgfx.c --- a/libgfx.c Sun Nov 04 15:41:46 2012 +0200 +++ b/libgfx.c Sun Nov 04 16:09:07 2012 +0200 @@ -210,17 +210,11 @@ #define DMCOL(x) (((x) >> 4) & 0xf) -int dmWriteIFFMasterRAWPalette(const char *filename, DMImage *img, int ncolors) +int dmWriteIFFMasterRAWPalette(FILE *fp, DMImage *img, int ncolors, + const char *indent, const char *type) { - FILE *fp; int i; - if ((fp = fopen(filename, "w")) == NULL) - { - dmError("IFFMasterRAW: Could not open file '%s' for writing.\n", filename); - return -15; - } - for (i = 0; i < ncolors; i++) { int color; @@ -233,11 +227,13 @@ else color = 0; - fprintf(fp, "\tdc.w $%04X\n", color); + fprintf(fp, "%s%s $%04X\n", + indent != NULL ? indent : "\t", + type != NULL ? type : "dw.b", + color); } - fclose(fp); - return 0; + return DMERR_OK; } diff -r c7a3aacbd55e -r ab401a5087f9 libgfx.h --- a/libgfx.h Sun Nov 04 15:41:46 2012 +0200 +++ b/libgfx.h Sun Nov 04 16:09:07 2012 +0200 @@ -93,7 +93,7 @@ int dmWriteImageData(DMImage *img, void *cbdata, BOOL (*writeRowCB)(void *, Uint8 *, size_t), const DMImageSpec *spec); -int dmWriteIFFMasterRAWPalette(const char *filename, DMImage *img, int ncolors); +int dmWriteIFFMasterRAWPalette(FILE *fp, DMImage *img, int ncolors, const char *indent, const char *type); int dmWriteIFFMasterRAWImageFILE(FILE *fp, DMImage *img, DMImageSpec *spec); int dmWriteIFFMasterRAWImage(const char *filename, DMImage *img, DMImageSpec *spec);