diff --git a/src/const.h b/src/const.h index c3581791..0c1bb43e 100644 --- a/src/const.h +++ b/src/const.h @@ -120,6 +120,7 @@ enum FILE_FORMATS FORMAT_KCF, FORMAT_PAL, FORMAT_SCR, + FORMAT_XPM, FORMAT_MISC, ///< Must be last of enum: others formats recognized by SDL_image }; diff --git a/src/fileformats.c b/src/fileformats.c index 01e764c1..3e961872 100644 --- a/src/fileformats.c +++ b/src/fileformats.c @@ -3437,6 +3437,44 @@ void Save_SCx(T_IO_Context * context) } } +//////////////////////////////////// XPM //////////////////////////////////// +void Save_XPM(T_IO_Context* context) +{ + FILE* file; + char filename[MAX_PATH_CHARACTERS]; + int i,j; + + Get_full_filename(filename, context->File_name, context->File_directory); + File_error = 0; + + file = fopen(filename, "w"); + if (file == NULL) + { + File_error = 1; + return; + } + + fprintf(file, "/* XPM */\nstatic char* pixmap[] = {\n"); + fprintf(file, "\"%d %d 256 2\",\n", context->Width, context->Height); + + for (i = 0; i < 256; i++) + { + fprintf(file,"\"%2.2X c #%2.2x%2.2x%2.2x\",\n", i, context->Palette[i].R, context->Palette[i].G, + context->Palette[i].B); + } + + for (j = 0; j < context->Height; j++) + { + fprintf(file, "\""); + for (i = 0; i < context->Width; i++) + { + fprintf(file, "%2.2X", Get_pixel(context, i, j)); + } + fprintf(file,"\"\n"); + } + + fclose(file); +} //////////////////////////////////// PNG //////////////////////////////////// diff --git a/src/loadsave.c b/src/loadsave.c index 9268ddec..d9562214 100644 --- a/src/loadsave.c +++ b/src/loadsave.c @@ -122,6 +122,10 @@ void Save_C64(T_IO_Context *); // -- SCR (Amstrad CPC) void Save_SCR(T_IO_Context *); +// -- XPM (X PixMap) +// Loading is done through SDL_Image +void Save_XPM(T_IO_Context*); + // -- PNG ------------------------------------------------------------------- #ifndef __no_pnglib__ void Test_PNG(T_IO_Context *); @@ -155,6 +159,7 @@ T_Format File_formats[NB_KNOWN_FORMATS] = { {FORMAT_PAL, " pal", Test_PAL, Load_PAL, Save_PAL, 1, 0, 0, "pal", "pal"}, {FORMAT_C64, " c64", Test_C64, Load_C64, Save_C64, 0, 1, 0, "c64", "c64;koa"}, {FORMAT_SCR, " cpc", NULL, NULL, Save_SCR, 0, 0, 0, "cpc", "cpc;scr"}, + {FORMAT_XPM, " xpm", NULL, NULL, Save_XPM, 0, 0, 0, "xpm", "xpm"}, {FORMAT_MISC,"misc.",NULL, NULL, NULL, 0, 0, 0, "", "tga;pnm;xpm;xcf;jpg;jpeg;tif;tiff;ico"}, }; diff --git a/src/main.c b/src/main.c index af2dad04..ff01d3c2 100644 --- a/src/main.c +++ b/src/main.c @@ -710,6 +710,9 @@ int Init_program(int argc,char * argv[]) SetWindowPos(pInfo.window, 0, Config.Window_pos_x, Config.Window_pos_y, 0, 0, SWP_NOSIZE); } } + + // Open a console for debugging... + //ActivateConsole(); #endif Main_image_width=Screen_width/Pixel_width;