From d0aaabf6b27acd38f0f58882082c1e23efa7c078 Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Sun, 6 Feb 2011 19:30:55 +0000 Subject: [PATCH] Merge of r1709 into trunk: Atari Falcon port git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1710 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- src/Makefile | 31 ++++++++++++- src/Makefile.dep | 19 ++++---- src/buttons.c | 28 ++++++++++-- src/fileformats.c | 46 +++++++++++-------- src/filesel.c | 89 ++++++++++++++++++++++++++++++++++++- src/help.c | 61 +++++++++++++++++++++++++ src/helpfile.h | 8 ++++ src/init.c | 13 +++--- src/io.c | 6 +++ src/io.h | 3 ++ src/loadsave.c | 23 +++++++--- src/main.c | 45 ++++++++++++++----- src/misc.c | 16 +++++++ src/miscfileformats.c | 68 +++++++++++++++++++--------- src/mountlist.c | 2 +- src/pages.h | 4 +- src/readini.c | 6 ++- src/saveini.c | 8 ++-- src/sdlscreen.c | 3 ++ src/setup.c | 24 +++++++++- src/setup.h | 101 +++++++++++++++++++++++++++++++++++++++++- src/struct.h | 14 ++++-- src/text.c | 8 +++- 23 files changed, 536 insertions(+), 90 deletions(-) diff --git a/src/Makefile b/src/Makefile index 74d088af..1da2da25 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,5 +1,6 @@ # Grafx2 - The Ultimate 256-color bitmap paint program # +# Copyright 2011 Pawel Góralski # Copyright 2009 Per Olofsson # Copyright 2008 Peter Gordon # Copyright 2008-2010 Yves Rizoud @@ -206,6 +207,7 @@ else CP = cp ZIP = zip PLATFORMFILES = gfx2.png + ifneq ($(ATARICROSS),1) ifeq ($(NOLUA),1) LUACOPT = LUALOPT = @@ -213,7 +215,7 @@ else LUACOPT = `pkg-config lua --cflags --silence-errors ||pkg-config lua5.1 --cflags --silence-errors ||pkg-config lua-5.1 --cflags` LUALOPT = `pkg-config lua --libs --silence-errors ||pkg-config lua5.1 --libs --silence-errors ||pkg-config lua-5.1 --libs` endif - + endif # These can only be used under linux and maybe freebsd. They allow to compile for the gp2x or to create a windows binary ifdef WIN32CROSS #cross compile a Win32 executable @@ -248,6 +250,17 @@ else PLATFORM = AROS ZIP = lha ZIPOPT = a + else ifdef ATARICROSS + #cross compile an exec for atari TOS/MiNT machine + CC = m68k-atari-mint-gcc + BIN = ../bin/grafx2.ttp + LUALOPT = -llua + OBJDIR = ../obj/m68k-atari-mint + PLATFORM = m68k-atari-mint + STRIP = m68k-atari-mint-strip -s + X11LOPT = + COPT = -W -Wall -m68020-60 -fomit-frame-pointer -pedantic -std=c99 -Wdeclaration-after-statement -D__MINT__ -DNO_INLINE_MATH -O$(OPTIM) -c -I$(prefix)/include `$(prefix)/bin/libpng12-config --cflags` `$(prefix)/bin/sdl-config --cflags` $() $(JOYCOPT) $(LAYERCOPT) $(LUACOPT) + LOPT = -static -m68020-60 -lSDL_image `$(prefix)/bin/sdl-config --libs` -L$(prefix)/lib -ltiff -ljpeg `$(prefix)/bin/libpng12-config --libs` -lz -lm $(TTFLOPT) -lfreetype $(LUALOPT) $(LAYERLOPT) else # Compiles a regular linux executable for the native platform @@ -274,6 +287,7 @@ endif ### BUILD SETTINGS are set according to vars set in the platform selection, the "overridable defaults", and environment variables set before launching make #TrueType is optional: make NOTTF=1 to disable support and dependencies. +ifndef ($(ATARICROSS,1)) ifeq ($(NOTTF),1) TTFCOPT = -DNOTTF=1 TTFLOPT = @@ -281,10 +295,23 @@ ifeq ($(NOTTF),1) TTFLABEL = -nottf else TTFCOPT = - TTFLOPT = -L/usr/local/lib -lSDL_ttf $(X11LOPT) + TTFLOPT = -L$(prefix)/lib -lSDL_ttf $(X11LOPT) TTFLIBS = bin/libfreetype-6.dll bin/SDL_ttf.dll TTFLABEL = endif +else +ifeq ($(NOTTF),1) + TTFCOPT = -DNOTTF=1 + TTFLOPT = + TTFLIBS = + TTFLABEL = -nottf +else + TTFCOPT = + TTFLOPT = -L$(prefix)/lib -lSDL_ttf $(X11LOPT) + TTFLIBS = + TTFLABEL = +endif +endif #Lua scripting is optional too ifeq ($(NOLUA),1) diff --git a/src/Makefile.dep b/src/Makefile.dep index 7abb642e..28ec5e96 100644 --- a/src/Makefile.dep +++ b/src/Makefile.dep @@ -6,9 +6,10 @@ $(OBJDIR)/brush_ops.o: brush_ops.c brush.h struct.h const.h buttons.h engine.h \ $(OBJDIR)/buttons.o: buttons.c const.h struct.h global.h misc.h graph.h engine.h \ readline.h filesel.h loadsave.h init.h buttons.h operatio.h pages.h \ palette.h errors.h readini.h saveini.h shade.h io.h help.h text.h \ - sdlscreen.h windows.h brush.h input.h special.h + sdlscreen.h windows.h brush.h input.h special.h setup.h $(OBJDIR)/buttons_effects.o: buttons_effects.c buttons.h struct.h const.h engine.h \ - global.h graph.h help.h input.h misc.h readline.h sdlscreen.h windows.h + global.h graph.h help.h input.h misc.h readline.h sdlscreen.h windows.h \ + brush.h $(OBJDIR)/engine.o: engine.c const.h struct.h global.h graph.h misc.h special.h \ buttons.h operatio.h shade.h errors.h sdlscreen.h windows.h brush.h \ input.h engine.h pages.h layers.h factory.h loadsave.h io.h @@ -32,7 +33,7 @@ $(OBJDIR)/init.o: init.c buttons.h struct.h const.h errors.h global.h graph.h \ mountlist.h operatio.h palette.h sdlscreen.h setup.h transform.h \ windows.h layers.h $(OBJDIR)/input.o: input.c global.h struct.h const.h keyboard.h sdlscreen.h \ - windows.h errors.h misc.h input.h loadsave.h + windows.h errors.h misc.h buttons.h input.h loadsave.h $(OBJDIR)/io.o: io.c struct.h const.h io.h realpath.h $(OBJDIR)/keyboard.o: keyboard.c global.h struct.h const.h keyboard.h $(OBJDIR)/layers.o: layers.c const.h struct.h global.h windows.h engine.h pages.h \ @@ -40,7 +41,7 @@ $(OBJDIR)/layers.o: layers.c const.h struct.h global.h windows.h engine.h pages. $(OBJDIR)/libraw2crtc.o: libraw2crtc.c const.h global.h struct.h loadsave.h $(OBJDIR)/loadsave.o: loadsave.c buttons.h struct.h const.h errors.h global.h io.h \ loadsave.h misc.h graph.h op_c.h pages.h palette.h sdlscreen.h windows.h \ - engine.h + engine.h brush.h setup.h $(OBJDIR)/main.o: main.c const.h struct.h global.h graph.h misc.h init.h buttons.h \ engine.h pages.h loadsave.h sdlscreen.h errors.h readini.h saveini.h \ io.h text.h setup.h windows.h brush.h palette.h realpath.h input.h @@ -49,7 +50,8 @@ $(OBJDIR)/misc.o: misc.c struct.h const.h sdlscreen.h global.h errors.h buttons. $(OBJDIR)/miscfileformats.o: miscfileformats.c engine.h struct.h const.h errors.h \ global.h io.h libraw2crtc.h loadsave.h misc.h sdlscreen.h windows.h $(OBJDIR)/mountlist.o: mountlist.c -$(OBJDIR)/op_c.o: op_c.c op_c.h struct.h const.h errors.h +$(OBJDIR)/op_c.o: op_c.c op_c.h struct.h const.h errors.h global.h engine.h \ + windows.h $(OBJDIR)/operatio.o: operatio.c const.h struct.h global.h misc.h engine.h graph.h \ operatio.h buttons.h pages.h errors.h sdlscreen.h brush.h windows.h \ input.h @@ -75,12 +77,13 @@ $(OBJDIR)/pxwide.o: pxwide.c global.h struct.h const.h sdlscreen.h misc.h graph. pxwide.h $(OBJDIR)/pxwide2.o: pxwide2.c global.h struct.h const.h sdlscreen.h misc.h graph.h \ pxwide2.h -$(OBJDIR)/readini.o: readini.c const.h errors.h global.h struct.h misc.h readini.h +$(OBJDIR)/readini.o: readini.c const.h errors.h global.h struct.h misc.h readini.h \ + setup.h $(OBJDIR)/readline.o: readline.c const.h struct.h global.h misc.h errors.h \ sdlscreen.h readline.h windows.h input.h $(OBJDIR)/realpath.o: realpath.c $(OBJDIR)/saveini.o: saveini.c const.h global.h struct.h readini.h io.h errors.h \ - misc.h saveini.h + misc.h saveini.h setup.h $(OBJDIR)/sdlscreen.o: sdlscreen.c global.h struct.h const.h sdlscreen.h errors.h \ misc.h $(OBJDIR)/setup.o: setup.c struct.h const.h io.h setup.h @@ -89,7 +92,7 @@ $(OBJDIR)/shade.o: shade.c global.h struct.h const.h graph.h engine.h errors.h \ $(OBJDIR)/special.o: special.c const.h struct.h global.h graph.h engine.h windows.h \ special.h pages.h misc.h buttons.h $(OBJDIR)/text.o: text.c SFont.h struct.h const.h global.h sdlscreen.h io.h \ - errors.h windows.h + errors.h windows.h misc.h setup.h $(OBJDIR)/tiles.o: tiles.c $(OBJDIR)/transform.o: transform.c global.h struct.h const.h transform.h engine.h \ sdlscreen.h windows.h input.h help.h misc.h readline.h buttons.h pages.h diff --git a/src/buttons.c b/src/buttons.c index 9904aa36..a4b1d3ae 100644 --- a/src/buttons.c +++ b/src/buttons.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2008 Yves Rizoud Copyright 2007-2010 Adrien Destugues (PulkoMandy) Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud) @@ -72,11 +73,28 @@ #include "brush.h" #include "input.h" #include "special.h" +#include "setup.h" #ifdef __VBCC__ #define __attribute__(x) #endif +#if defined(__amigaos4__) || defined(__AROS__) || defined(__MORPHOS__) || defined(__amigaos__) + #include + #include + #define isHidden(x) (0) +#elif defined(__MINT__) + #include + #include + #define isHidden(x) (0) +#elif defined(__WIN32__) + #include + #include + #define isHidden(x) (GetFileAttributesA((x)->d_name)&FILE_ATTRIBUTE_HIDDEN) +#else + #include + #define isHidden(x) ((x)->d_name[0]=='.') +#endif extern char Program_version[]; // generated in pversion.c @@ -1176,7 +1194,7 @@ char * Format_font_filename(const char * fname) int c; int length; - fname+=5; // Assume "font_" prefix + fname+=strlen(FONT_PREFIX); // Omit file prefix length=strlen(fname) - 4; // assume .png extension for (c=0;c<11 && c=10 && fname[0]!='_' && !strncasecmp(fname, "skin_", 5) + if (namelength>=10 && fname[0]!='_' && !strncasecmp(fname, SKIN_PREFIX, strlen(SKIN_PREFIX)) && (!strcasecmp(fname + namelength - 4,".png") || !strcasecmp(fname + namelength - 4,".gif"))) { @@ -1212,7 +1230,7 @@ void Add_font_or_skin(const char *name) if (fname[0]=='\0') return; } - else if (namelength>=10 && !strncasecmp(fname, "font_", 5) + else if (namelength>=10 && !strncasecmp(fname, FONT_PREFIX, strlen(FONT_PREFIX)) && (!strcasecmp(fname + namelength - 4, ".png"))) { Add_element_to_list(&Font_files_list, fname, Format_font_filename(fname), 0, ICON_NONE); @@ -1269,7 +1287,7 @@ void Button_Skins(void) Free_fileselector_list(&Font_files_list); // Browse the "skins" directory strcpy(skinsdir, Data_directory); - strcat(skinsdir, "skins"); + strcat(skinsdir, SKINS_SUBDIRECTORY); // Add each found file to the list For_each_file(skinsdir, Add_font_or_skin); // Sort it @@ -1514,9 +1532,11 @@ void Button_Page(void) Exchange_main_and_spare(); // On fait le reste du travail "à la main": +#ifndef NOLAYERS SWAP_PBYTES(Main_visible_image.Image,Spare_visible_image.Image) SWAP_WORDS (Main_visible_image.Width,Spare_visible_image.Width) SWAP_WORDS (Main_visible_image.Height,Spare_visible_image.Height) +#endif SWAP_SHORTS(Main_offset_X,Spare_offset_X) SWAP_SHORTS(Main_offset_Y,Spare_offset_Y) SWAP_SHORTS(Main_separator_position,Spare_separator_position) diff --git a/src/fileformats.c b/src/fileformats.c index 3e961872..45fab5a0 100644 --- a/src/fileformats.c +++ b/src/fileformats.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2009 Petter Lindquist Copyright 2008 Yves Rizoud Copyright 2008 Franck Charlet @@ -72,11 +73,11 @@ void Test_IMG(T_IO_Context * context) if ((file=fopen(filename, "rb"))) { // Lecture et vérification de la signature - if (Read_bytes(file,IMG_header.Filler1,sizeof(IMG_header.Filler1)) + if (Read_bytes(file,IMG_header.Filler1,6) && Read_word_le(file,&(IMG_header.Width)) && Read_word_le(file,&(IMG_header.Height)) - && Read_bytes(file,IMG_header.Filler2,sizeof(IMG_header.Filler2)) - && Read_bytes(file,IMG_header.Palette,sizeof(IMG_header.Palette)) + && Read_bytes(file,IMG_header.Filler2,118) + && Read_bytes(file,IMG_header.Palette,sizeof(T_Palette)) ) { if ( (!memcmp(IMG_header.Filler1,signature,6)) @@ -107,11 +108,11 @@ void Load_IMG(T_IO_Context * context) { file_size=File_length_file(file); - if (Read_bytes(file,IMG_header.Filler1,sizeof(IMG_header.Filler1)) + if (Read_bytes(file,IMG_header.Filler1,6) && Read_word_le(file,&(IMG_header.Width)) && Read_word_le(file,&(IMG_header.Height)) - && Read_bytes(file,IMG_header.Filler2,sizeof(IMG_header.Filler2)) - && Read_bytes(file,IMG_header.Palette,sizeof(IMG_header.Palette)) + && Read_bytes(file,IMG_header.Filler2,118) + && Read_bytes(file,IMG_header.Palette,sizeof(T_Palette)) ) { @@ -180,11 +181,11 @@ void Save_IMG(T_IO_Context * context) memcpy(IMG_header.Palette,context->Palette,sizeof(T_Palette)); - if (Write_bytes(file,IMG_header.Filler1,sizeof(IMG_header.Filler1)) + if (Write_bytes(file,IMG_header.Filler1,6) && Write_word_le(file,IMG_header.Width) && Write_word_le(file,IMG_header.Height) - && Write_bytes(file,IMG_header.Filler2,sizeof(IMG_header.Filler2)) - && Write_bytes(file,IMG_header.Palette,sizeof(IMG_header.Palette)) + && Write_bytes(file,IMG_header.Filler2,118) + && Write_bytes(file,IMG_header.Palette,sizeof(T_Palette)) ) { @@ -2379,9 +2380,16 @@ void Save_GIF(T_IO_Context * context) Write_byte(GIF_file,LSDB.Aspect) ) { // Le LSDB a été correctement écrit. - + int i; // On sauve la palette - if (Write_bytes(GIF_file,context->Palette,768)) + for(i=0;i<256 && !File_error;i++) + { + if (!Write_byte(GIF_file,context->Palette[i].R) + ||!Write_byte(GIF_file,context->Palette[i].G) + ||!Write_byte(GIF_file,context->Palette[i].B)) + File_error=1; + } + if (!File_error) { // La palette a été correctement écrite. @@ -3153,14 +3161,14 @@ void Save_PCX(T_IO_Context * context) Write_word_le(file,PCX_header.Y_max) && Write_word_le(file,PCX_header.X_dpi) && Write_word_le(file,PCX_header.Y_dpi) && - Write_bytes(file,&(PCX_header.Palette_16c),sizeof(PCX_header.Palette_16c)) && + Write_bytes(file,&(PCX_header.Palette_16c),48) && Write_bytes(file,&(PCX_header.Reserved),1) && Write_bytes(file,&(PCX_header.Plane),1) && Write_word_le(file,PCX_header.Bytes_per_plane_line) && Write_word_le(file,PCX_header.Palette_info) && Write_word_le(file,PCX_header.Screen_X) && Write_word_le(file,PCX_header.Screen_Y) && - Write_bytes(file,&(PCX_header.Filler),sizeof(PCX_header.Filler)) ) + Write_bytes(file,&(PCX_header.Filler),54) ) { line_size=PCX_header.Bytes_per_plane_line*PCX_header.Plane; @@ -3245,7 +3253,7 @@ void Test_SCx(T_IO_Context * context) if ((file=fopen(filename, "rb"))) { // Lecture et vérification de la signature - if (Read_bytes(file,SCx_header.Filler1,sizeof(SCx_header.Filler1)) + if (Read_bytes(file,SCx_header.Filler1,4) && Read_word_le(file, &(SCx_header.Width)) && Read_word_le(file, &(SCx_header.Height)) && Read_byte(file, &(SCx_header.Filler2)) @@ -3281,7 +3289,7 @@ void Load_SCx(T_IO_Context * context) { file_size=File_length_file(file); - if (Read_bytes(file,SCx_header.Filler1,sizeof(SCx_header.Filler1)) + if (Read_bytes(file,SCx_header.Filler1,4) && Read_word_le(file, &(SCx_header.Width)) && Read_word_le(file, &(SCx_header.Height)) && Read_byte(file, &(SCx_header.Filler2)) @@ -3402,7 +3410,7 @@ void Save_SCx(T_IO_Context * context) SCx_header.Filler2=0xAF; SCx_header.Planes=0x00; - if (Write_bytes(file,SCx_header.Filler1,sizeof(SCx_header.Filler1)) + if (Write_bytes(file,SCx_header.Filler1,4) && Write_word_le(file, SCx_header.Width) && Write_word_le(file, SCx_header.Height) && Write_byte(file, SCx_header.Filler2) @@ -3860,9 +3868,9 @@ void Save_PNG(T_IO_Context * context) {-1, "Software", "Grafx2", 6, 0, NULL, NULL}, {-1, "Title", NULL, 0, 0, NULL, NULL} #else - png_text text_ptr[2] = { - {-1, "Software", "Grafx2", 6}, - {-1, "Title", NULL, 0} + png_text text_ptr[2] = { + {-1, "Software", "Grafx2", 6}, + {-1, "Title", NULL, 0} #endif }; int nb_text_chunks=1; diff --git a/src/filesel.c b/src/filesel.c index 53352035..4ad0aecc 100644 --- a/src/filesel.c +++ b/src/filesel.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2009 Franck Charlet Copyright 2008 Peter Gordon Copyright 2008 Yves Rizoud @@ -29,6 +30,11 @@ #include #include #define isHidden(x) (0) + +#elif defined (__MINT__) + #include + #include + #define isHidden(x) (0) #elif defined(__WIN32__) #include #include @@ -354,8 +360,25 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format) // Après effacement, il ne reste ni fichier ni répertoire dans la liste // On lit tous les répertoires: + +#if defined (__MINT__) + static char path[1024]; + static char path2[1024]; + path[0]='\0'; + path2[0]='\0'; + + char currentDrive='A'; + currentDrive=currentDrive+Dgetdrv(); + + Dgetpath(path,0); + sprintf(path2,"%c:\%s",currentDrive,path); + + strcat(path2,PATH_SEPARATOR); + current_directory=opendir(path2); +#else current_path=getcwd(NULL,0); current_directory=opendir(current_path); +#endif while ((entry=readdir(current_directory))) { // On ignore le répertoire courant @@ -404,10 +427,33 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format) #if defined(__MORPHOS__) || defined(__AROS__) || defined (__amigaos4__) || defined(__amigaos__) Add_element_to_list(list, "/", Format_filename("/",19,1), 1, ICON_NONE); // on amiga systems, / means parent. And there is no .. list->Nb_directories ++; +#elif defined (__MINT__) + T_Fileselector_item *item=NULL; + // check if ".." exists if not add it + // FreeMinT lists ".." already, but this is not so for TOS + // simply adding it will cause double PARENT_DIR under FreeMiNT + + bool bFound= false; + + for (item = list->First; (((item != NULL) && (bFound==false))); item = item->Next){ + if (item->Type == 1){ + if(strncmp(item->Full_name,"..",(sizeof(char)*2))==0) bFound=true; + } + } + + if(!bFound){ + Add_element_to_list(list, "..",1); // add if not present + list->Nb_directories ++; + } + #endif closedir(current_directory); +#if defined (__MINT__) + +#else free(current_path); +#endif current_path = NULL; Recount_files(list); @@ -504,6 +550,23 @@ void Read_list_of_drives(T_Fileselector *list) } } } + #elif defined(__MINT__) + char drive_name[]="A:\\"; + unsigned long drive_bits = Drvmap(); //get drive map bitfield + int drive_index; + int bit_index; + drive_index = 0; + for (bit_index=0; bit_index<32; bit_index++) + { + if ( (1 << bit_index) & drive_bits ) + { + drive_name[0]='A'+bit_index; + Add_element_to_list(list, drive_name,2); + list->Nb_directories++; + drive_index++; + } + } + #else { //Sous les différents unix, on va mettre @@ -1342,13 +1405,30 @@ byte Button_Load_or_Save(byte load, T_IO_Context *context) // On prend bien soin de passer dans le répertoire courant (le bon qui faut! Oui madame!) if (load) { + #if defined(__MINT__) + chdir(Main_current_directory); + static char path[1024]={0}; + Dgetpath(path,0); + strcat(path,PATH_SEPARATOR); + strcpy(Main_current_directory,path); + #else chdir(Main_current_directory); getcwd(Main_current_directory,256); + #endif } else { + #if defined(__MINT__) chdir(context->File_directory); + static char path[1024]={0}; + Dgetpath(path,0); + strcat(path,PATH_SEPARATOR); + strcpy(Main_current_directory,path); + #else getcwd(Main_current_directory,256); + #endif + + } // Affichage des premiers fichiers visibles: @@ -1832,8 +1912,15 @@ byte Button_Load_or_Save(byte load, T_IO_Context *context) // On doit rentrer dans le répertoire: if (!chdir(Selector_filename)) { + #if defined (__MINT__) + static char path[1024]={0}; + char currentDrive='A'; + currentDrive=currentDrive+Dgetdrv(); + Dgetpath(path,0); + sprintf(Main_current_directory,"%c:\%s",currentDrive,path); + #else getcwd(Main_current_directory,256); - + #endif // On lit le nouveau répertoire Read_list_of_files(&Filelist, Main_format); Sort_list_of_files(&Filelist); diff --git a/src/help.c b/src/help.c index 6f7a7ef5..388eb34d 100644 --- a/src/help.c +++ b/src/help.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2008 Peter Gordon Copyright 2008 Yves Rizoud Copyright 2008 Franck Charlet @@ -33,6 +34,10 @@ #include #elif defined(__HAIKU__) #include "haiku.h" +#elif defined (__MINT__) + #include + #include + #include #endif #include "const.h" @@ -640,7 +645,51 @@ void Button_Stats(void) Print_in_window(10,35,"Build options:",STATS_TITLE_COLOR,MC_Black); Print_in_window(146,35,TrueType_is_supported()?"TTF fonts":"no TTF fonts",STATS_DATA_COLOR,MC_Black); +#if defined (__MINT__) + // Affichage de la mémoire restante + Print_in_window(10,43,"Free memory: ",STATS_TITLE_COLOR,MC_Black); + freeRam=0; + char helpBuf[64]; + + unsigned long STRAM,TTRAM; + Atari_Memory_free(&STRAM,&TTRAM); + freeRam=STRAM+TTRAM; + buffer[0]='\0'; + + if(STRAM > (100*1024*1024)) + sprintf(helpBuf,"ST:%u Mb ",(unsigned int)(STRAM/(1024*1024))); + else if(freeRam > 100*1024) + sprintf(helpBuf,"ST:%u Kb ",(unsigned int)(STRAM/1024)); + else + sprintf(helpBuf,"ST:%u b ",(unsigned int)STRAM); + + strncat(buffer,helpBuf,sizeof(char)*37); + + if(TTRAM > (100ULL*1024*1024*1024)) + sprintf(helpBuf,"TT:%u Gb",(unsigned int)(TTRAM/(1024*1024*1024))); + else if(TTRAM > (100*1024*1024)) + sprintf(helpBuf,"TT:%u Mb",(unsigned int)(TTRAM/(1024*1024))); + else if(freeRam > 100*1024) + sprintf(helpBuf,"TT:%u Kb",(unsigned int)(TTRAM/1024)); + else + sprintf(helpBuf,"TT:%u b",(unsigned int)TTRAM); + + strncat(buffer,helpBuf,sizeof(char)*37); + + if(freeRam > (100ULL*1024*1024*1024)) + sprintf(helpBuf,"(%u Gb)",(unsigned int)(freeRam/(1024*1024*1024))); + else if(freeRam > (100*1024*1024)) + sprintf(helpBuf,"(%u Mb)",(unsigned int)(freeRam/(1024*1024))); + else if(freeRam > 100*1024) + sprintf(helpBuf,"(%u Kb)",(unsigned int)(freeRam/1024)); + else + sprintf(helpBuf,"(%u b)",(unsigned int)freeRam); + strncat(buffer,helpBuf,sizeof(char)*37); + + Print_in_window(18,51,buffer,STATS_DATA_COLOR,MC_Black); + +#else // Affichage de la mémoire restante Print_in_window(10,51,"Free memory: ",STATS_TITLE_COLOR,MC_Black); @@ -654,8 +703,12 @@ void Button_Stats(void) sprintf(buffer,"%u Kilobytes",(unsigned int)(freeRam/1024)); else sprintf(buffer,"%u bytes",(unsigned int)freeRam); + Print_in_window(114,51,buffer,STATS_DATA_COLOR,MC_Black); + #endif + + // Used memory Print_in_window(10,59,"Used memory pages: ",STATS_TITLE_COLOR,MC_Black); if(Stats_pages_memory > (100LL*1024*1024*1024)) @@ -685,6 +738,14 @@ void Button_Stats(void) } #elif defined(__HAIKU__) mem_size = haiku_get_free_space(Main_current_directory); +#elif defined (__MINT__) + _DISKINFO drvInfo; + mem_size=0; + Dfree(&drvInfo,0); + //number of free clusters*sectors per cluster*bytes per sector; + // reports current drive + mem_size=drvInfo.b_free*drvInfo.b_clsiz*drvInfo.b_secsiz; + #else // Free disk space is only for shows. Other platforms can display 0. #warning "Missing code for your platform !!! Check and correct please :)" diff --git a/src/helpfile.h b/src/helpfile.h index 7632c039..1fc745cd 100644 --- a/src/helpfile.h +++ b/src/helpfile.h @@ -62,7 +62,11 @@ static const T_Help_table helptable_about[] = HELP_BOLD (" \"Dragon's Layers\" Edition") HELP_BOLD (" THE ULTIMATE MULTI-RESOLUTION GFX EDITOR") HELP_TEXT (" http://grafx2.googlecode.com") +#if defined(__MINT__) + HELP_TEXT (" atari build ") +#else HELP_TEXT ("") +#endif HELP_TEXT ("Copyright 2007-2010, the Grafx2 project team") HELP_TEXT (" Copyright 1996-2001, SUNSET DESIGN") }; @@ -439,6 +443,10 @@ static const T_Help_table helptable_credits[] = HELP_TEXT ("") HELP_TEXT (" Alexander Filyanov (PheeL)") HELP_TEXT ("") + HELP_BOLD (" ATARI PORT") + HELP_TEXT ("") + HELP_TEXT (" Pawel Goralski (Saulot)") + HELP_TEXT ("") HELP_TEXT ("") HELP_TEXT (" ... made it work on your favourite toaster") HELP_TEXT ("") diff --git a/src/init.c b/src/init.c index d62ab947..02a1e713 100644 --- a/src/init.c +++ b/src/init.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2008 Peter Gordon Copyright 2008 Yves Rizoud Copyright 2009 Franck Charlet @@ -53,7 +54,9 @@ #ifndef __GP2X__ #include #endif - +#if defined (__MINT__) + #include +#endif #ifdef GRAFX2_CATCHES_SIGNALS #include #endif @@ -653,7 +656,7 @@ T_Gui_skin * Load_graphics(const char * skin_file) // Read the "skin" file strcpy(filename,Data_directory); - strcat(filename,"skins" PATH_SEPARATOR); + strcat(filename,SKINS_SUBDIRECTORY PATH_SEPARATOR); strcat(filename,skin_file); gui=Load_surface(filename); @@ -732,7 +735,7 @@ byte * Load_font(const char * font_name) } // Read the file containing the image - sprintf(filename,"%sskins%s%s", Data_directory, PATH_SEPARATOR, font_name); + sprintf(filename,"%s" SKINS_SUBDIRECTORY "%s%s", Data_directory, PATH_SEPARATOR, font_name); image=Load_surface(filename); if (!image) @@ -2203,7 +2206,7 @@ int Save_CFG(void) T_Config_video_mode cfg_video_mode={0,0,0}; strcpy(filename,Config_directory); - strcat(filename,"gfx2.cfg"); + strcat(filename,CONFIG_FILENAME); if ((Handle=fopen(filename,"wb"))==NULL) return ERROR_SAVING_CFG; @@ -2331,7 +2334,7 @@ int Save_CFG(void) // is now loaded/saved in GIF and LBM formats. /* Chunk.Number=CHUNK_GRADIENTS; - Chunk.Size=241; + Chunk.Size=14*16+1; if (!Write_byte(Handle, Chunk.Number) || !Write_word_le(Handle, Chunk.Size) ) goto Erreur_sauvegarde_config; diff --git a/src/io.c b/src/io.c index c7c878f7..d770a84f 100644 --- a/src/io.c +++ b/src/io.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2008 Yves Rizoud Copyright 2007 Adrien Destugues Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud) @@ -42,6 +43,11 @@ #include //#include #define isHidden(x) (GetFileAttributesA((x)->d_name)&FILE_ATTRIBUTE_HIDDEN) +#elif defined(__MINT__) + #include + #include + #include + #define isHidden(x) (0) #else #include #define isHidden(x) ((x)->d_name[0]=='.') diff --git a/src/io.h b/src/io.h index 6f6f74d5..53237f3f 100644 --- a/src/io.h +++ b/src/io.h @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2008 Yves Rizoud Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud) @@ -71,6 +72,8 @@ char * Find_last_slash(const char * str); #if defined(__WIN32__) #define PATH_SEPARATOR "\\" +#elif defined(__MINT__) + #define PATH_SEPARATOR "\\" #else #define PATH_SEPARATOR "/" #endif diff --git a/src/loadsave.c b/src/loadsave.c index 264dca00..5a52368d 100644 --- a/src/loadsave.c +++ b/src/loadsave.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2010 Alexander Filyanov Copyright 2009 Petter Lindquist Copyright 2008 Yves Rizoud @@ -49,6 +50,7 @@ #include "windows.h" #include "engine.h" #include "brush.h" +#include "setup.h" // -- PKM ------------------------------------------------------------------- void Test_PKM(T_IO_Context *); @@ -1084,10 +1086,12 @@ void Emergency_backup(const char *fname, byte *source, int width, int height, T_ void Image_emergency_backup() { +#ifndef NOLAYERS if (Main_backups && Main_backups->Pages && Main_backups->Pages->Nb_layers == 1) - Emergency_backup("a999999.bkp",Main_screen, Main_image_width, Main_image_height, &Main_palette); + Emergency_backup(SAFETYBACKUP_PREFIX_A "999999" BACKUP_FILE_EXTENSION,Main_screen, Main_image_width, Main_image_height, &Main_palette); if (Spare_backups && Spare_backups->Pages && Spare_backups->Pages->Nb_layers == 1) - Emergency_backup("b999999.bkp",Spare_visible_image.Image, Spare_image_width, Spare_image_height, &Spare_palette); + Emergency_backup(SAFETYBACKUP_PREFIX_B "999999" BACKUP_FILE_EXTENSION,Spare_visible_image.Image, Spare_image_width, Spare_image_height, &Spare_palette); +#endif } T_Format * Get_fileformat(byte format) @@ -1420,8 +1424,13 @@ int Check_recovery(void) int restored_main; // First check if can write backups - if (Create_lock_file(Config_directory)) +#if defined (__MINT__) + //TODO: enable file lock under Freemint only + return 0; +#else +if (Create_lock_file(Config_directory)) return -1; +#endif Safety_backup_active=1; @@ -1477,7 +1486,7 @@ void Rotate_safety_backups(void) { // Clear a previous save (rotating saves) - sprintf(deleted_file, "%s%c%6.6d.bkp", + sprintf(deleted_file, "%s%c%6.6d" BACKUP_FILE_EXTENSION, Config_directory, Main_safety_backup_prefix, (Uint32)(Main_safety_number + 1000000l - Rotation_safety_backup) % (Uint32)1000000l); @@ -1488,7 +1497,7 @@ void Rotate_safety_backups(void) Main_time_of_safety_backup=now; // Create a new file name and save - sprintf(file_name, "%c%6.6d.bkp", + sprintf(file_name, "%c%6.6d" BACKUP_FILE_EXTENSION, Main_safety_backup_prefix, (Uint32)Main_safety_number); Init_context_backup_image(&context, file_name, Config_directory); @@ -1530,6 +1539,10 @@ void Delete_safety_backups(void) } // Release lock file +#if defined (__MINT__) + //TODO: release file lock under Freemint only +#else Release_lock_file(Config_directory); +#endif } diff --git a/src/main.c b/src/main.c index a5c22663..5be1db03 100644 --- a/src/main.c +++ b/src/main.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2009 Pasi Kallinen Copyright 2008 Peter Gordon Copyright 2008 Franck Charlet @@ -71,6 +72,8 @@ #include #include #define chdir(dir) SetCurrentDirectory(dir) +#elif defined (__MINT__) + #include #elif defined(__macosx__) #import #import @@ -86,6 +89,8 @@ extern DECLSPEC int SDLCALL SDL_putenv(const char *variable); #endif +extern char Program_version[]; // generated in pversion.c + //--- Affichage de la syntaxe, et de la liste des modes vidéos disponibles --- void Display_syntax(void) { @@ -401,11 +406,21 @@ int Analyze_command_line(int argc, char * argv[], char *main_filename, char *mai return file_in_command_line; } +// Compile-time assertions: +#define CT_ASSERT(e) extern char (*ct_assert(void)) [sizeof(char[1 - 2*!(e)])] + +// This line will raise an error at compile time +// when sizeof(T_Components) is not 3. +CT_ASSERT(sizeof(T_Components)==3); + +// This line will raise an error at compile time +// when sizeof(T_Palette) is not 768. +CT_ASSERT(sizeof(T_Palette)==768); // ------------------------ Initialiser le programme ------------------------- // Returns 0 on fail int Init_program(int argc,char * argv[]) -{ +{ int temp; int starting_videomode; static char program_directory[MAX_PATH_CHARACTERS]; @@ -415,9 +430,14 @@ int Init_program(int argc,char * argv[]) static char main_directory[MAX_PATH_CHARACTERS]; static char spare_filename [MAX_PATH_CHARACTERS]; static char spare_directory[MAX_PATH_CHARACTERS]; - - - + + #if defined(__MINT__) + printf("===============================\n"); + printf(" /|\\ GrafX2 %.19s\n", Program_version); + printf(" compilation date: %.16s\n", __DATE__); + printf("===============================\n"); + #endif + // On crée dès maintenant les descripteurs des listes de pages pour la page // principale et la page de brouillon afin que leurs champs ne soient pas // invalide lors des appels aux multiples fonctions manipulées à @@ -433,9 +453,12 @@ int Init_program(int argc,char * argv[]) Set_data_directory(program_directory,Data_directory); // Choose directory for settings (read/write) Set_config_directory(program_directory,Config_directory); - - // On détermine le répertoire courant: +#if defined(__MINT__) + strcpy(Main_current_directory,program_directory); +#else +// On détermine le répertoire courant: getcwd(Main_current_directory,256); +#endif // On en profite pour le mémoriser dans le répertoire principal: strcpy(Initial_directory,Main_current_directory); @@ -497,8 +520,8 @@ int Init_program(int argc,char * argv[]) Spare_magnifier_offset_Y=0; Keyboard_click_allowed = 1; - Main_safety_backup_prefix = 'a'; - Spare_safety_backup_prefix = 'b'; + Main_safety_backup_prefix = SAFETYBACKUP_PREFIX_A[0]; + Spare_safety_backup_prefix = SAFETYBACKUP_PREFIX_B[0]; Main_time_of_safety_backup = 0; Spare_time_of_safety_backup = 0; @@ -646,7 +669,7 @@ int Init_program(int argc,char * argv[]) gfx = Load_graphics(Config.Skin_file); if (gfx == NULL) { - gfx = Load_graphics("skin_DPaint.png"); + gfx = Load_graphics(DEFAULT_SKIN_FILENAME); if (gfx == NULL) { printf("%s", Gui_loading_error_message); @@ -670,9 +693,9 @@ int Init_program(int argc,char * argv[]) // Font if (!(Menu_font=Load_font(Config.Font_file))) - if (!(Menu_font=Load_font("font_DPaint.png"))) + if (!(Menu_font=Load_font(DEFAULT_FONT_FILENAME))) { - printf("Unable to open the default font file: %s\n", "font_Classic.png"); + printf("Unable to open the default font file: %s\n", DEFAULT_FONT_FILENAME); Error(ERROR_GUI_MISSING); } diff --git a/src/misc.c b/src/misc.c index 442621e1..d926e305 100644 --- a/src/misc.c +++ b/src/misc.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2008 Yves Rizoud Copyright 2008 Franck Charlet Copyright 2007 Adrien Destugues @@ -740,13 +741,26 @@ void Zoom_a_line(byte* original_line, byte* zoomed_line, // sysinfo not implemented #elif defined(__AROS__) || defined(__amigaos4__) || defined(__MORPHOS__) || defined(__amigaos__) #include +#elif defined(__MINT__) + #include + #include #elif defined(__SKYOS__) #include #else #include // sysinfo() for free RAM #endif +#if defined (__MINT__) +// atari have two kinds of memory +// standard and fast ram +void Atari_Memory_free(unsigned long *stRam,unsigned long *ttRam){ + //TODO: return STRAM/TT-RAM + unsigned long mem=0; + *stRam=Mxalloc(-1L,0); + *ttRam = Mxalloc(-1L,1); +} +#else // Indique quelle est la mémoire disponible unsigned long Memory_free(void) { @@ -786,6 +800,8 @@ unsigned long Memory_free(void) return info.freeram*info.mem_unit; #endif } +#endif + // Arrondir un nombre réel à la valeur entière la plus proche diff --git a/src/miscfileformats.c b/src/miscfileformats.c index 2a304583..7715cea1 100644 --- a/src/miscfileformats.c +++ b/src/miscfileformats.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2009 Petter Lindquist Copyright 2008 Yves Rizoud Copyright 2008 Franck Charlet @@ -733,7 +734,7 @@ void Load_CEL(T_IO_Context * context) short y_pos; byte last_byte=0; long file_size; - const long int header_size = (long int)(sizeof(header1.Width)+sizeof(header1.Height)); + const long int header_size = 4; File_error=0; Get_full_filename(filename, context->File_name, context->File_directory); @@ -773,7 +774,7 @@ void Load_CEL(T_IO_Context * context) // On réessaye avec le nouveau format fseek(file,0,SEEK_SET); - if (Read_bytes(file,header2.Signature,sizeof(header2.Signature)) + if (Read_bytes(file,header2.Signature,4) && Read_byte(file,&(header2.Kind)) && Read_byte(file,&(header2.Nb_bits)) && Read_word_le(file,&(header2.Filler1)) @@ -781,7 +782,7 @@ void Load_CEL(T_IO_Context * context) && Read_word_le(file,&(header2.Height)) && Read_word_le(file,&(header2.X_offset)) && Read_word_le(file,&(header2.Y_offset)) - && Read_bytes(file,header2.Filler2,sizeof(header2.Filler2)) + && Read_bytes(file,header2.Filler2,16) ) { // Chargement d'un fichier CEL avec signature (nouveaux fichiers) @@ -940,7 +941,7 @@ void Save_CEL(T_IO_Context * context) for (x_pos=0;x_pos<16;x_pos++) // Initialisation du filler 2 (?) header2.Filler2[x_pos]=0; - if (Write_bytes(file,header2.Signature,sizeof(header2.Signature)) + if (Write_bytes(file,header2.Signature,4) && Write_byte(file,header2.Kind) && Write_byte(file,header2.Nb_bits) && Write_word_le(file,header2.Filler1) @@ -948,7 +949,7 @@ void Save_CEL(T_IO_Context * context) && Write_word_le(file,header2.Height) && Write_word_le(file,header2.X_offset) && Write_word_le(file,header2.Y_offset) - && Write_bytes(file,header2.Filler2,sizeof(header2.Filler2)) + && Write_bytes(file,header2.Filler2,14) ) { // Sauvegarde de l'image @@ -1014,7 +1015,7 @@ void Test_KCF(T_IO_Context * context) } else { - if (Read_bytes(file,header2.Signature,sizeof(header2.Signature)) + if (Read_bytes(file,header2.Signature,4) && Read_byte(file,&(header2.Kind)) && Read_byte(file,&(header2.Nb_bits)) && Read_word_le(file,&(header2.Filler1)) @@ -1022,7 +1023,7 @@ void Test_KCF(T_IO_Context * context) && Read_word_le(file,&(header2.Height)) && Read_word_le(file,&(header2.X_offset)) && Read_word_le(file,&(header2.Y_offset)) - && Read_bytes(file,header2.Filler2,sizeof(header2.Filler2)) + && Read_bytes(file,header2.Filler2,14) ) { if (memcmp(header2.Signature,"KiSS",4)==0) @@ -1105,7 +1106,7 @@ void Load_KCF(T_IO_Context * context) { // Fichier KCF au nouveau format - if (Read_bytes(file,header2.Signature,sizeof(header2.Signature)) + if (Read_bytes(file,header2.Signature,4) && Read_byte(file,&(header2.Kind)) && Read_byte(file,&(header2.Nb_bits)) && Read_word_le(file,&(header2.Filler1)) @@ -1113,7 +1114,7 @@ void Load_KCF(T_IO_Context * context) && Read_word_le(file,&(header2.Height)) && Read_word_le(file,&(header2.X_offset)) && Read_word_le(file,&(header2.Y_offset)) - && Read_bytes(file,header2.Filler2,sizeof(header2.Filler2)) + && Read_bytes(file,header2.Filler2,14) ) { // Pre_load(context, ?); // Pas possible... pas d'image... @@ -1227,7 +1228,7 @@ void Save_KCF(T_IO_Context * context) for (index=0;index<16;index++) // Initialisation du filler 2 (?) header2.Filler2[index]=0; - if (!Write_bytes(file,header2.Signature,sizeof(header2.Signature)) + if (!Write_bytes(file,header2.Signature,4) || !Write_byte(file,header2.Kind) || !Write_byte(file,header2.Nb_bits) || !Write_word_le(file,header2.Filler1) @@ -1235,7 +1236,7 @@ void Save_KCF(T_IO_Context * context) || !Write_word_le(file,header2.Height) || !Write_word_le(file,header2.X_offset) || !Write_word_le(file,header2.Y_offset) - || !Write_bytes(file,header2.Filler2,sizeof(header2.Filler2)) + || !Write_bytes(file,header2.Filler2,14) ) File_error=1; @@ -1331,17 +1332,29 @@ void PI1_decode_palette(byte * src,byte * palette) // Low High // VVVV RRRR | 0000 BBBB // 0321 0321 | 0321 - + ip=0; for (i=0;i<16;i++) { - w=((word)src[(i*2)+1]<<8) | src[(i*2)+0]; - - // Traitement des couleurs rouge, verte et bleue: - palette[ip++]=(((w & 0x0007) << 1) | ((w & 0x0008) >> 3)) << 4; - palette[ip++]=(((w & 0x7000) >> 11) | ((w & 0x8000) >> 15)) << 4; - palette[ip++]=(((w & 0x0700) >> 7) | ((w & 0x0800) >> 11)) << 4; - } + #if SDL_BYTEORDER == SDL_LIL_ENDIAN + + w=(((word)src[(i*2)+1]<<8) | (src[(i*2)+0])); + + // Traitement des couleurs rouge, verte et bleue: + palette[ip++]=(((w & 0x0007) << 1) | ((w & 0x0008) >> 3)) << 4; + palette[ip++]=(((w & 0x7000) >> 11) | ((w & 0x8000) >> 15)) << 4; + palette[ip++]=(((w & 0x0700) >> 7) | ((w & 0x0800) >> 11)) << 4; + + #else + w=(((word)src[(i*2+1)])|(((word)src[(i*2)])<<8)); + + palette[ip++] = (((w & 0x0700)>>7) | ((w & 0x0800) >> 7))<<4 ; + palette[ip++]=(((w & 0x0070)>>3) | ((w & 0x0080) >> 3))<<4 ; + palette[ip++] = (((w & 0x0007)<<1) | ((w & 0x0008)))<<4 ; + #endif + + + } } //// CODAGE de la PALETTE //// @@ -1354,20 +1367,31 @@ void PI1_code_palette(byte * palette,byte * dest) // Schéma d'un word = // - // Low High + // Low High // VVVV RRRR | 0000 BBBB // 0321 0321 | 0321 - + ip=0; for (i=0;i<16;i++) { + #if SDL_BYTEORDER == SDL_LIL_ENDIAN + // Traitement des couleurs rouge, verte et bleue: w =(((word)(palette[ip]>>2) & 0x38) >> 3) | (((word)(palette[ip]>>2) & 0x04) << 1); ip++; w|=(((word)(palette[ip]>>2) & 0x38) << 9) | (((word)(palette[ip]>>2) & 0x04) << 13); ip++; w|=(((word)(palette[ip]>>2) & 0x38) << 5) | (((word)(palette[ip]>>2) & 0x04) << 9); ip++; - + dest[(i*2)+0]=w & 0x00FF; dest[(i*2)+1]=(w>>8); + #else + + w=(((word)(palette[ip]<<3))&0x0700);ip++; + w|=(((word)(palette[ip]>>1))&0x0070);ip++; + w|=(((word)(palette[ip]>>5))&0x0007);ip++; + + dest[(i*2)+1]=w & 0x00FF; + dest[(i*2)+0]=(w>>8); + #endif } } diff --git a/src/mountlist.c b/src/mountlist.c index 200a4c15..2912918c 100644 --- a/src/mountlist.c +++ b/src/mountlist.c @@ -336,12 +336,12 @@ fstype_to_string (int t) #define BROKEN #endif + #if defined MOUNTED_GETMNTENT1 || defined MOUNTED_GETMNTENT2 /* Return the device number from MOUNT_OPTIONS, if possible. Otherwise return (dev_t) -1. */ - static dev_t dev_from_mount_options (BROKEN char const *mount_options) { diff --git a/src/pages.h b/src/pages.h index 5c5ba48c..31a514c5 100644 --- a/src/pages.h +++ b/src/pages.h @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2007 Adrien Destugues Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud) @@ -39,13 +40,14 @@ extern byte * FX_feedback_screen; /////////////////////////// BACKUP /////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// +#ifndef NOLAYERS /// The pixels of visible layers, flattened copy. extern T_Bitmap Main_visible_image; /// The pixels of visible layers, flattened copy, used for no-feedback effects. extern T_Bitmap Main_visible_image_backup; /// The index of visible pixels from ::Visible image. Points to the right layer. extern T_Bitmap Main_visible_image_depth_buffer; - +#endif /// The pixels of visible layers for the spare page, flattened copy. extern T_Bitmap Spare_visible_image; diff --git a/src/readini.c b/src/readini.c index 7c520806..15473878 100644 --- a/src/readini.c +++ b/src/readini.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2008 Peter Gordon Copyright 2008 Yves Rizoud Copyright 2007 Adrien Destugues @@ -32,6 +33,7 @@ #include "global.h" #include "misc.h" #include "readini.h" +#include "setup.h" void Load_INI_clear_string(char * str, byte keep_comments) { @@ -446,14 +448,14 @@ int Load_INI(T_Config * conf) // On calcule le nom du fichier qu'on manipule: strcpy(filename,Config_directory); - strcat(filename,"gfx2.ini"); + strcat(filename,INI_FILENAME); file=fopen(filename,"r"); if (file==0) { // Si le fichier ini est absent on le relit depuis gfx2def.ini strcpy(filename,Data_directory); - strcat(filename,"gfx2def.ini"); + strcat(filename,INIDEF_FILENAME); file=fopen(filename,"r"); if (file == 0) { diff --git a/src/saveini.c b/src/saveini.c index 2f81e905..b512b7ac 100644 --- a/src/saveini.c +++ b/src/saveini.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2008 Peter Gordon Copyright 2008 Yves Rizoud Copyright 2007 Adrien Destugues @@ -30,6 +31,7 @@ #include "errors.h" #include "misc.h" #include "saveini.h" +#include "setup.h" int Save_INI_reach_group(FILE * old_file,FILE * new_file,char * buffer,char * group) { @@ -409,13 +411,13 @@ int Save_INI(T_Config * conf) // On calcule les noms des fichiers qu'on manipule: strcpy(filename,Config_directory); - strcat(filename,"gfx2.ini"); + strcat(filename,INI_FILENAME); // On vérifie si le fichier INI existe if ((ini_file_exists = File_exists(filename))) { strcpy(temp_filename,Config_directory); - strcat(temp_filename,"gfx2.$$$"); + strcat(temp_filename,INISAVE_FILENAME); // On renome l'ancienne version du fichier INI vers un fichier temporaire: if (rename(filename,temp_filename)!=0) @@ -425,7 +427,7 @@ int Save_INI(T_Config * conf) } // On récupère un fichier INI "propre" à partir de gfx2def.ini strcpy(ref_ini_file,Data_directory); - strcat(ref_ini_file,"gfx2def.ini"); + strcat(ref_ini_file,INIDEF_FILENAME); old_file=fopen(ref_ini_file,"rb"); if (old_file==0) { diff --git a/src/sdlscreen.c b/src/sdlscreen.c index fb4bafbe..a8ef9476 100644 --- a/src/sdlscreen.c +++ b/src/sdlscreen.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2008 Yves Rizoud Copyright 2008 Franck Charlet Copyright 2007 Adrien Destugues @@ -51,6 +52,8 @@ #ifndef UPDATE_METHOD #if defined(__macosx__) #define UPDATE_METHOD UPDATE_METHOD_FULL_PAGE + #elif defined(__MINT__) + #define UPDATE_METHOD UPDATE_METHOD_CUMULATED #else #define UPDATE_METHOD UPDATE_METHOD_CUMULATED #endif diff --git a/src/setup.c b/src/setup.c index 22c73895..e1c18dfc 100644 --- a/src/setup.c +++ b/src/setup.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2008 Peter Gordon Copyright 2008 Yves Rizoud Copyright 2008 Franck Charlet @@ -35,6 +36,9 @@ #import #elif defined(__FreeBSD__) #import +#elif defined(__MINT__) + #include + #include #elif defined(__linux__) #include #include @@ -84,7 +88,16 @@ void Set_program_directory(ARG_UNUSED const char * argv0,char * program_dir) // AmigaOS and alike: hard-coded volume name. #elif defined(__amigaos4__) || defined(__AROS__) || defined(__MORPHOS__) || defined(__amigaos__) strcpy(program_dir,"PROGDIR:"); + #elif defined(__MINT__) + static char path[1024]={0}; + char currentDrive='A'; + currentDrive=currentDrive+Dgetdrv(); + + Dgetpath(path,0); + sprintf(program_dir,"%c:\%s",currentDrive,path); + // Append trailing slash + strcat(program_dir,PATH_SEPARATOR); // Linux: argv[0] unreliable #elif defined(__linux__) if (argv0[0]!='/') @@ -117,6 +130,9 @@ void Set_data_directory(const char * program_dir, char * data_dir) // On GP2X, executable is not in bin/ #elif defined (__GP2X__) || defined (__gp2x__) || defined (__WIZ__) || defined (__CAANOO__) strcat(data_dir,"share/grafx2/"); + //on tos the same directory + #elif defined (__MINT__) + strcpy(data_dir, program_dir); // All other targets, program is in a "bin" subdirectory #elif defined (__AROS__) strcat(data_dir,"/share/grafx2/"); @@ -146,6 +162,8 @@ void Set_config_directory(const char * program_dir, char * config_dir) // On the GP2X, the program is installed to the sdcard, and we don't want to mess with the system tree which is // on an internal flash chip. So, keep these settings locals. strcpy(config_dir,program_dir); + #elif defined(__MINT__) + strcpy(config_dir,program_dir); #else char filename[MAX_PATH_CHARACTERS]; @@ -156,7 +174,7 @@ void Set_config_directory(const char * program_dir, char * config_dir) strcat(config_dir, "../"); #endif strcpy(filename, config_dir); - strcat(filename, "gfx2.cfg"); + strcat(filename, CONFIG_FILENAME); if (!File_exists(filename)) { @@ -173,6 +191,10 @@ void Set_config_directory(const char * program_dir, char * config_dir) // "~/Library/Preferences/com.googlecode.grafx2" const char* Config_SubDir = "Library/Preferences/com.googlecode.grafx2"; config_parent_dir = getenv("HOME"); + #elif defined(__MINT__) + const char* Config_SubDir = ""; + printf("GFX2.CFG not found in %s\n",filename); + strcpy(config_parent_dir, config_dir); #else // "~/.grafx2" const char* Config_SubDir = ".grafx2"; diff --git a/src/setup.h b/src/setup.h index 58a22b97..043d087c 100644 --- a/src/setup.h +++ b/src/setup.h @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2008 Peter Gordon Copyright 2008 Yves Rizoud Copyright 2008 Franck Charlet @@ -53,4 +54,102 @@ void Set_data_directory(const char * program_dir, char * data_dir); /// IN: The directory containing the executable /// OUT: Write into config_dir. Trailing / or \ is kept. void Set_config_directory(const char * program_dir, char * config_dir); - + + +/// Name of the subdirectory containing fonts, under the data directory (::Set_data_directory()) +#if defined (__MINT__) + #define FONTS_SUBDIRECTORY "FONTS" +#else + #define FONTS_SUBDIRECTORY "fonts" +#endif + +/// Name of the subdirectory containing fonts, under the data directory (::Set_data_directory()) +#if defined (__MINT__) + #define SKINS_SUBDIRECTORY "SKINS" +#else + #define SKINS_SUBDIRECTORY "skins" +#endif + +/// Name of the binary file containing some configuration settings. +#if defined (__MINT__) + #define CONFIG_FILENAME "GFX2.CFG" +#else + #define CONFIG_FILENAME "gfx2.cfg" +#endif + +/// Name of the text file containing some settings in INI format. +#if defined (__MINT__) + #define INI_FILENAME "GFX2.INI" +#else + #define INI_FILENAME "gfx2.ini" +#endif + +/// Name of the backup of the INI file. +#if defined (__MINT__) + #define INISAVE_FILENAME "GFX2.$$$" +#else + #define INISAVE_FILENAME "gfx2.$$$" +#endif + +/// Name of the default .INI file (read-only: gives .INI format and defaults) +#if defined (__MINT__) + #define INIDEF_FILENAME "GFX2DEF.INI" +#else + #define INIDEF_FILENAME "gfx2def.ini" +#endif + +/// Prefix for filenames of safety backups (main) +#if defined (__MINT__) + #define SAFETYBACKUP_PREFIX_A "A" +#else + #define SAFETYBACKUP_PREFIX_A "a" +#endif + +/// Prefix for filenames of safety backups (spare) +#if defined (__MINT__) + #define SAFETYBACKUP_PREFIX_B "B" +#else + #define SAFETYBACKUP_PREFIX_B "b" +#endif + +/// Name of the image file that serves as an application icon. +#if defined (__MINT__) + #define GFX2_ICON_FILENAME "GFX2.GIF" +#else + #define GFX2_ICON_FILENAME "gfx2.gif" +#endif + +/// Name of the image file for the default (and fallback) GUI skin. +#if defined (__MINT__) + #define DEFAULT_SKIN_FILENAME "SDPAINT.PNG" +#else + #define DEFAULT_SKIN_FILENAME "skin_DPaint.png" +#endif + +/// Name of the image file for the default (and fallback) 8x8 font. +#if defined (__MINT__) + #define DEFAULT_FONT_FILENAME "FDPAINT.PNG" +#else + #define DEFAULT_FONT_FILENAME "font_DPaint.png" +#endif + +/// File extension for safety backups +#if defined (__MINT__) + #define BACKUP_FILE_EXTENSION ".BKP" +#else + #define BACKUP_FILE_EXTENSION ".bkp" +#endif + +/// File prefix for fonts +#if defined (__MINT__) + #define FONT_PREFIX "F" +#else + #define FONT_PREFIX "font_" +#endif + +/// File prefix for skins +#if defined (__MINT__) + #define SKIN_PREFIX "S" +#else + #define SKIN_PREFIX "skin_" +#endif diff --git a/src/struct.h b/src/struct.h index c1fb4b62..62422bd0 100644 --- a/src/struct.h +++ b/src/struct.h @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2008 Yves Rizoud Copyright 2007 Adrien Destugues Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud) @@ -73,14 +74,23 @@ typedef void (* Func_draw_brush) (byte *,word,word,word,word,word,word,byte,word typedef void (* Func_draw_list_item) (word,word,word,byte); ///< Draw an item inside a list button. This is done with a callback so it is possible to draw anything, as the list itself doesn't handle the content /// A set of RGB values. +#ifdef __GNUC__ +typedef struct +{ + byte R; ///< Red + byte G; ///< Green + byte B; ///< Blue +} __attribute__((__packed__)) T_Components, T_Palette[256] ; ///< A complete 256-entry RGB palette (768 bytes). +#else #pragma pack(1) typedef struct { byte R; ///< Red byte G; ///< Green byte B; ///< Blue -} T_Components, T_Palette[256]; ///< A complete 256-entry RGB palette (768 bytes). +} T_Components, T_Palette[256] ; ///< A complete 256-entry RGB palette (768 bytes). #pragma pack() +#endif /// A normal rectangular button in windows and menus. typedef struct T_Normal_button @@ -277,7 +287,6 @@ typedef struct word Height;///< Videomode height in pixels. } T_Config_video_mode; - /// Header for gfx2.cfg typedef struct { @@ -288,7 +297,6 @@ typedef struct byte Beta2; ///< Major beta version number (ex: 5) } T_Config_header; - /// Header for a config chunk in for gfx2.cfg typedef struct { diff --git a/src/text.c b/src/text.c index 23d8733f..701ba06e 100644 --- a/src/text.c +++ b/src/text.c @@ -2,6 +2,7 @@ */ /* Grafx2 - The Ultimate 256-color bitmap paint program + Copyright 2011 Pawel Góralski Copyright 2008 Yves Rizoud Copyright 2008 Franck Charlet Copyright 2008 Adrien Destugues @@ -57,6 +58,7 @@ #include "errors.h" #include "windows.h" #include "misc.h" +#include "setup.h" typedef struct T_Font { @@ -283,7 +285,7 @@ void Init_text(void) Nb_fonts=0; // Parcours du répertoire "fonts" strcpy(directory_name, Data_directory); - strcat(directory_name, "fonts"); + strcat(directory_name, FONTS_SUBDIRECTORY); For_each_file(directory_name, Add_font); #if defined(__WIN32__) @@ -358,6 +360,10 @@ void Init_text(void) #ifndef NOTTF For_each_file("/boot/system/fonts", Add_font); #endif + #elif defined(__MINT__) + #ifndef NOTTF + For_each_file("C:/BTFONTS", Add_font); + #endif #endif }