Changed a lot of platform-specific code to "simplify" it:

A Unix-like system is now considered the default.
The number of platform-specific blocks is down to:
   win32: 13, watcomc: 3, linux: 4, macosx: 16, amigaos4: 8, beos/haiku: 1
Removed linux.c, implemented the relevant functions for all platforms.
(win32) In Stats screen, included free memory report
(macosx) Conversion_ANSI: Fixed the __macosx__ with wrong case from my former 'fix', sorry.
(macosx) readline.c : Removed a manual "Update_necessaire=1", because normally
all calls to UpdateRect() will set this flag already. Don't hesitate to call 
Flush_Update() anywhere where it's lacking, but you shouldn't put it inside a  #ifdef __macosx__
(win32) Packaging: 'make ziprelease' now includes libpng13.dll and zlib1.dll
(win32) Hacked something to resolve naming conflict of MOD_SHIFT constants with windows.h
(all) Resolution: Fixed the black space that appeared between button and label,
the memory overwrite also caused resolutions above number 2 to disappear from list.
 
Tested fine on Linux (without TTF) and Windows


git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@345 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Yves Rizoud 2008-11-15 16:25:37 +00:00
parent b511ceafdb
commit c4f6cf7762
18 changed files with 152 additions and 268 deletions

View File

@ -89,6 +89,7 @@ else
LOPT = `sdl-config --libs` -lSDL_image $(TTFLOPT)
CC = gcc
OBJDIR = obj/unix
X11LOPT = -lX11
endif
endif
endif
@ -103,7 +104,7 @@ ifeq ($(NOTTF),1)
TTFLABEL = -nottf
else
TTFCOPT =
TTFLOPT = -L/usr/local/lib -lSDL_ttf -lX11
TTFLOPT = -L/usr/local/lib -lSDL_ttf $(X11LOPT)
TTFLIBS = libfreetype-6.dll SDL_ttf.dll
TTFLABEL =
endif
@ -111,7 +112,7 @@ endif
.PHONY : all debug release clean depend zip version force
OBJ = $(OBJDIR)/main.o $(OBJDIR)/init.o $(OBJDIR)/graph.o $(OBJDIR)/sdlscreen.o $(OBJDIR)/divers.o $(OBJDIR)/special.o $(OBJDIR)/boutons.o $(OBJDIR)/palette.o $(OBJDIR)/aide.o $(OBJDIR)/operatio.o $(OBJDIR)/pages.o $(OBJDIR)/loadsave.o $(OBJDIR)/readline.o $(OBJDIR)/moteur.o $(OBJDIR)/files.o $(OBJDIR)/op_c.o $(OBJDIR)/linux.o $(OBJDIR)/readini.o $(OBJDIR)/saveini.o $(OBJDIR)/shade.o $(OBJDIR)/clavier.o $(OBJDIR)/io.o $(OBJDIR)/version.o $(OBJDIR)/texte.o $(OBJDIR)/SFont.o
OBJ = $(OBJDIR)/main.o $(OBJDIR)/init.o $(OBJDIR)/graph.o $(OBJDIR)/sdlscreen.o $(OBJDIR)/divers.o $(OBJDIR)/special.o $(OBJDIR)/boutons.o $(OBJDIR)/palette.o $(OBJDIR)/aide.o $(OBJDIR)/operatio.o $(OBJDIR)/pages.o $(OBJDIR)/loadsave.o $(OBJDIR)/readline.o $(OBJDIR)/moteur.o $(OBJDIR)/files.o $(OBJDIR)/op_c.o $(OBJDIR)/readini.o $(OBJDIR)/saveini.o $(OBJDIR)/shade.o $(OBJDIR)/clavier.o $(OBJDIR)/io.o $(OBJDIR)/version.o $(OBJDIR)/texte.o $(OBJDIR)/SFont.o
CFGOBJ = $(OBJDIR)/gfxcfg.o $(OBJDIR)/SFont.o $(OBJDIR)/clavier.o $(OBJDIR)/io.o
all : $(BIN) $(CFGBIN)
@ -125,7 +126,7 @@ release : $(BIN) $(CFGBIN)
# A release zip archive
ziprelease: version $(BIN) $(BINCFG) release
tar cvzf src-svn`svnversion | sed 's/:/-/'`.tgz *.c *.h Makefile Makefile.dep
zip grafx2-svn`svnversion | sed 's/:/-/'`$(TTFLABEL)-win32.zip $(BIN) $(CFGBIN) gfx2.dat gfx2.ico doc/gpl-2.0.txt SDL.dll fonts/8pxfont.png SDL_image.dll $(TTFLIBS) fonts/Tuffy.ttf src-svn`svnversion | sed 's/:/-/'`.tgz
zip grafx2-svn`svnversion | sed 's/:/-/'`$(TTFLABEL)-win32.zip $(BIN) $(CFGBIN) gfx2.dat gfx2.ico doc/gpl-2.0.txt SDL.dll fonts/8pxfont.png SDL_image.dll zlib1.dll libpng13.dll $(TTFLIBS) fonts/Tuffy.ttf src-svn`svnversion | sed 's/:/-/'`.tgz
$(DELCOMMAND) src-svn`svnversion | sed 's/:/-/'`.tgz
tar cvzf grafx2-svn`svnversion | sed 's/:/-/'`$(TTFLABEL)-src.tgz *.c *.h Makefile Makefile.dep gfx2.dat gfx2.ico doc/gpl-2.0.txt fonts/8pxfont.png fonts/Tuffy.ttf

View File

@ -1,39 +1,38 @@
$(OBJDIR)/SFont.o: SFont.c SFont.h
$(OBJDIR)/aide.o: aide.c const.h struct.h global.h loadsave.h divers.h graph.h \
moteur.h tables_aide.h aide.h sdlscreen.h
moteur.h tables_aide.h aide.h sdlscreen.h texte.h
$(OBJDIR)/boutons.o: boutons.c const.h struct.h global.h loadsave.h divers.h \
graph.h moteur.h readline.h files.h init.h boutons.h operatio.h pages.h \
erreurs.h readini.h saveini.h shade.h io.h aide.h texte.h
erreurs.h readini.h saveini.h shade.h io.h aide.h texte.h sdlscreen.h
$(OBJDIR)/clavier.o: clavier.c global.h struct.h const.h loadsave.h
$(OBJDIR)/divers.o: divers.c struct.h const.h sdlscreen.h global.h loadsave.h \
graph.h erreurs.h boutons.h moteur.h divers.h clavier.h
$(OBJDIR)/files.o: files.c const.h struct.h global.h loadsave.h graph.h divers.h \
erreurs.h linux.h
erreurs.h io.h
$(OBJDIR)/gfxcfg.o: gfxcfg.c SFont.h struct.h const.h clavier.h io.h hotkeys.h
$(OBJDIR)/graph.o: graph.c sdlscreen.h struct.h const.h graph.h divers.h moteur.h \
boutons.h pages.h global.h loadsave.h erreurs.h
$(OBJDIR)/graph.o: graph.c global.h struct.h const.h loadsave.h moteur.h boutons.h \
pages.h erreurs.h sdlscreen.h graph.h divers.h
$(OBJDIR)/init.o: init.c const.h struct.h global.h loadsave.h graph.h boutons.h \
palette.h aide.h operatio.h divers.h erreurs.h clavier.h io.h hotkeys.h
$(OBJDIR)/io.o: io.c struct.h const.h io.h
$(OBJDIR)/linux.o: linux.c
$(OBJDIR)/loadsave.o: loadsave.c const.h struct.h global.h loadsave.h graph.h \
divers.h pages.h op_c.h boutons.h erreurs.h linux.h io.h sdlscreen.h
divers.h pages.h op_c.h boutons.h erreurs.h io.h sdlscreen.h
$(OBJDIR)/main.o: main.c const.h struct.h global.h loadsave.h graph.h divers.h \
init.h boutons.h moteur.h pages.h files.h sdlscreen.h erreurs.h \
readini.h saveini.h linux.h io.h
readini.h saveini.h io.h texte.h
$(OBJDIR)/moteur.o: moteur.c const.h struct.h global.h loadsave.h graph.h divers.h \
special.h boutons.h operatio.h shade.h erreurs.h linux.h sdlscreen.h
special.h boutons.h operatio.h shade.h erreurs.h sdlscreen.h
$(OBJDIR)/op_c.o: op_c.c op_c.h struct.h const.h erreurs.h graph.h
$(OBJDIR)/operatio.o: operatio.c const.h struct.h global.h loadsave.h divers.h \
moteur.h graph.h operatio.h boutons.h pages.h erreurs.h
moteur.h graph.h operatio.h boutons.h pages.h erreurs.h sdlscreen.h
$(OBJDIR)/pages.o: pages.c global.h struct.h const.h loadsave.h pages.h graph.h \
erreurs.h linux.h
erreurs.h
$(OBJDIR)/palette.o: palette.c const.h struct.h global.h loadsave.h divers.h \
graph.h moteur.h readline.h boutons.h pages.h aide.h sdlscreen.h \
erreurs.h op_c.h
$(OBJDIR)/readini.o: readini.c const.h global.h struct.h loadsave.h graph.h
$(OBJDIR)/readline.o: readline.c const.h struct.h global.h loadsave.h graph.h \
divers.h erreurs.h linux.h sdlscreen.h
divers.h erreurs.h sdlscreen.h readline.h
$(OBJDIR)/saveini.o: saveini.c const.h global.h struct.h loadsave.h readini.h \
files.h erreurs.h graph.h
$(OBJDIR)/sdlscreen.o: sdlscreen.c global.h struct.h const.h loadsave.h sdlscreen.h \
@ -42,5 +41,7 @@ $(OBJDIR)/shade.o: shade.c global.h struct.h const.h loadsave.h graph.h moteur.h
divers.h readline.h aide.h sdlscreen.h
$(OBJDIR)/special.o: special.c const.h struct.h global.h loadsave.h graph.h \
moteur.h
$(OBJDIR)/texte.o: texte.c SFont.h sdlscreen.h struct.h const.h global.h loadsave.h
$(OBJDIR)/testfonts.o: testfonts.c
$(OBJDIR)/texte.o: texte.c SFont.h struct.h const.h global.h loadsave.h sdlscreen.h \
io.h files.h
$(OBJDIR)/version.o: version.c

69
aide.c
View File

@ -23,6 +23,16 @@
*/
#include <stdio.h>
#include <string.h>
#if defined(__WIN32__)
#include <windows.h>
#elif defined(__macosx__)
#include <sys/param.h>
#include <sys/mount.h>
#elif defined (__linux__)
#include <sys/vfs.h>
#endif
#include "const.h"
#include "struct.h"
#include "global.h"
@ -34,25 +44,6 @@
#include "sdlscreen.h"
#include "texte.h"
#include <string.h>
#ifdef __linux__
#ifdef __macosx__
#include <sys/param.h>
#include <sys/mount.h>
#else
#include <sys/vfs.h>
#endif
#else
#ifndef __amigaos4__
#ifndef __BEOS__
#ifndef __HAIKU__
#include <windows.h>
#endif
#endif
#endif
#endif
extern char SVNRevision[];
// -- Menu d'aide -----------------------------------------------------------
@ -316,19 +307,7 @@ void Bouton_Stats(void)
char Buffer[37];
dword Utilisation_couleur[256];
unsigned long long freeRam;
#ifdef __linux__
struct statfs Informations_Disque;
uint64_t Taille = 0;
#else
#if defined(__amigaos4__)||defined(__BEOS__)||defined(__HAIKU__)
uint64_t Taille = 0;
#else
unsigned __int64 Taille;
ULARGE_INTEGER tailleU;
#endif
#endif
uint64_t Taille = 0;
Ouvrir_fenetre(310,174,"Statistics");
@ -369,16 +348,22 @@ void Bouton_Stats(void)
sprintf(Buffer,"Free space on %c:",Principal_Repertoire_courant[0]);
Print_dans_fenetre(10,67,Buffer,STATS_COULEUR_TITRES,CM_Noir);
#ifdef __linux__
statfs(Principal_Repertoire_courant,&Informations_Disque);
Taille=(uint64_t) Informations_Disque.f_bfree * (uint64_t) Informations_Disque.f_bsize;
#else
#if defined(__amigaos4__)||defined(__BEOS__)||defined(__HAIKU__)
#else
GetDiskFreeSpaceEx(Principal_Repertoire_courant,&tailleU,NULL,NULL);
Taille = tailleU.QuadPart;
#endif
#endif
#if defined(__WIN32__)
{
ULARGE_INTEGER tailleU;
GetDiskFreeSpaceEx(Principal_Repertoire_courant,&tailleU,NULL,NULL);
Taille = tailleU.QuadPart;
}
#elif defined(__linux__) || (__macosx__)
// Note: under MacOSX, both macros are defined anyway.
{
struct statfs Informations_Disque;
statfs(Principal_Repertoire_courant,&Informations_Disque);
Taille=(uint64_t) Informations_Disque.f_bfree * (uint64_t) Informations_Disque.f_bsize;
}
#else
// Free disk space is only for shows. Other platforms can display 0.
#endif
if(Taille > (100ULL*1024*1024*1024))
sprintf(Buffer,"%d Gigabytes",(unsigned int)(Taille/(1024*1024*1024)));

View File

@ -1294,9 +1294,9 @@ void Afficher_liste_modes(short Debut_liste, short Position_curseur)
Num2str(Mode_video[Mode_courant].Hauteur,Chaine+5,4);
if(Mode_video[Mode_courant].Fullscreen == 1)
memcpy(Chaine+9," Fullscreen ",15);
memcpy(Chaine+9," Fullscreen ",13);
else
memcpy(Chaine+9," Window ",15);
memcpy(Chaine+9," Window ",13);
if (Mode_video[Mode_courant].Largeur*3 == Mode_video[Mode_courant].Hauteur*4)
Ratio=" 4:3";
@ -1321,7 +1321,7 @@ void Afficher_liste_modes(short Debut_liste, short Position_curseur)
strcat(Chaine,Ratio);
Print_dans_fenetre(30,Pos_Y,Chaine,Couleur_texte,Couleur_fond);
Print_dans_fenetre(38,Pos_Y,Chaine,Couleur_texte,Couleur_fond);
}
}

View File

@ -469,7 +469,7 @@ word Conversion_ANSI(SDL_keysym Sym)
// This part was removed from the MacOSX port, but I put it back for others
// as on Linux and Windows, it's what allows editing a text line with the keys
// SDLK_LEFT, SDLK_RIGHT, SDLK_HOME, SDLK_END etc.
#ifndef __MACOSX__
#ifndef __macosx__
if ( Sym.unicode == 0)
{
return Sym.sym;

33
files.c
View File

@ -20,11 +20,6 @@
write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "const.h"
#include "struct.h"
#include "global.h"
#include "graph.h"
#include "divers.h"
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
@ -35,30 +30,30 @@
#include <sys/stat.h>
#include <unistd.h>
#ifdef __amigaos4__
#include <proto/dos.h>
#endif
#include "erreurs.h"
#include "linux.h"
#include "io.h"
#if defined(__linux__)||defined(__BEOS__)||defined(__HAIKU__)
#include <dirent.h>
#define isHidden(Enreg) ((Enreg)->d_name[0]=='.')
#elif defined(__amigaos4__)
#if defined(__amigaos4__)
#include <proto/dos.h>
#include <dirent.h>
#define isHidden(Enreg) (0)
#elif defined(__WATCOMC__)
#include <direct.h>
#define isHidden(Enreg) ((Enreg)->d_attr & _A_HIDDEN)
#elif defined(__MINGW32__)
#elif defined(__WIN32__)
#include <dirent.h>
#include <windows.h>
#define isHidden(Enreg) (GetFileAttributesA((Enreg)->d_name)&FILE_ATTRIBUTE_HIDDEN)
#else
#include <dirent.h>
#define isHidden(Enreg) ((Enreg)->d_name[0]=='.')
#endif
#include "const.h"
#include "struct.h"
#include "global.h"
#include "graph.h"
#include "divers.h"
#include "erreurs.h"
#include "io.h"
#define COULEUR_FICHIER_NORMAL CM_Clair // Couleur du texte pour une ligne de fichier non sélectionné
#define COULEUR_REPERTOIRE_NORMAL CM_Fonce // Couleur du texte pour une ligne de répertoire non sélectionné
#define COULEUR_FOND_NORMAL CM_Noir // Couleur du fond pour une ligne non sélectionnée

View File

@ -117,6 +117,16 @@ GLOBAL dword Touche; // Touche tap
GLOBAL dword Touche_ANSI; // Caractère tapé
GLOBAL Uint8* Etat_Du_Clavier; // Scancode de la touche en cours et etat des touches de ctrl
// Modificateurs pour Touche
// (Name conflict with windows.h)
#ifdef MOD_SHIFT
#undef MOD_SHIFT
#endif
#ifdef MOD_CTRL
#undef MOD_CTRL
#endif
#ifdef MOD_ALT
#undef MOD_ALT
#endif
#define MOD_SHIFT 0x1000
#define MOD_CTRL 0x2000
#define MOD_ALT 0x4000

54
graph.c
View File

@ -19,35 +19,28 @@
write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "sdlscreen.h"
#include "graph.h"
#include "divers.h"
#include <math.h>
#ifdef __macosx__
#include <sys/malloc.h>
#if defined(__WIN32__)
#define _WIN32_WINNT 0x0500
#include <windows.h>
#elif defined(__macosx__)
#include <sys/sysctl.h>
#else
#include <malloc.h>
#include <sys/sysinfo.h>
#endif
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "global.h"
#include "struct.h"
#include "moteur.h"
#include "boutons.h"
#include "pages.h"
#include "global.h"
#include "struct.h"
#include "erreurs.h"
#ifdef __linux__
#ifdef __macosx__
#include <sys/sysctl.h>
#else
#include <sys/sysinfo.h>
#endif
#elif __WATCOMC__
#define _WIN32_WINNT 0x0500
#include <windows.h>
#endif
#include "sdlscreen.h"
#include "graph.h"
#include "divers.h"
// Fonction qui met à jour la zone de l'image donnée en paramètre sur l'écran.
// Tient compte du décalage X et Y et du zoom, et fait tous les controles nécessaires
@ -565,8 +558,15 @@ unsigned long Memoire_libre(void)
A revoir, mais est-ce vraiment utile?
_heapmin();
*/
#ifdef __linux__
#ifdef __macosx__
// Memory is no longer relevant. If there is ANY problem or doubt here,
// you can simply return 10*1024*1024 (10Mb), to make the "Pages"something
// memory allocation functions happy.
#if defined(__WIN32__)
MEMORYSTATUSEX mstt;
mstt.dwLength = sizeof(MEMORYSTATUSEX);
GlobalMemoryStatusEx(&mstt);
return mstt.ullAvailPhys;
#elif defined(__macosx__)
int mib[2];
int maxmem;
size_t len;
@ -576,18 +576,10 @@ unsigned long Memoire_libre(void)
len = sizeof(maxmem);
sysctl(mib,2,&maxmem,&len,NULL,0);
return maxmem;
#else
#else
struct sysinfo info;
sysinfo(&info);
return info.freeram*info.mem_unit;
#endif
#elif __WATCOMC__
MEMORYSTATUSEX mstt;
mstt.dwLength = sizeof(MEMORYSTATUSEX);
GlobalMemoryStatusEx(&mstt);
return mstt.ullAvailPhys;
#else
return 10*1024*1024;
#endif
}

44
init.c
View File

@ -48,17 +48,9 @@
#include "errno.h"
#ifndef __linux__
#ifndef __amigaos4__
#ifndef __BEOS__
#ifndef __HAIKU__
#include "windows.h"
#endif
#endif
#endif
#endif
#ifdef __macosx__
#if defined(__WIN32__)
#include <windows.h>
#elif defined(__macosx__)
#import <corefoundation/corefoundation.h>
#import <sys/param.h>
#endif
@ -108,22 +100,13 @@ void Ajouter_lecteur(char Lettre, byte Type, char *Chemin)
// Rechercher la liste et le type des lecteurs de la machine
void Rechercher_drives(void)
{
#if defined(__amigaos4__)
#if defined(__linux__)
//Sous linux, il n'y a pas de lecteurs, on va juste mettre
// un disque dur qui pointera vers la racine,
// et un autre vers le home directory de l'utilisateur.
char * Home = getenv("HOME");
Ajouter_lecteur('/', LECTEUR_HDD, "/");
Ajouter_lecteur('~', LECTEUR_HDD, Home ? Home : "");
#elif defined(__BEOS__) || defined(__HAIKU__)
char * Home = getenv("$HOME");
Ajouter_lecteur('/', LECTEUR_HDD, "/");
Ajouter_lecteur('~', LECTEUR_HDD, Home ? Home : "");
#elif defined(__amigaos4__)
// No icons by default.
// It's possible to add some here.
#elif defined (__WIN32__)
char NomLecteur[]="A:\\";
int DriveBits = GetLogicalDrives();
int IndiceLecteur;
@ -163,6 +146,19 @@ void Rechercher_drives(void)
IndiceLecteur++;
}
}
#else
//Sous les différents unix, il n'y a pas de lecteurs, on va juste mettre
// un disque dur qui pointera vers la racine,
// et un autre vers le home directory de l'utilisateur.
#if defined(__BEOS__) || defined(__HAIKU__)
char * Home = getenv("$HOME");
#else
char * Home = getenv("HOME");
#endif
Ajouter_lecteur('/', LECTEUR_HDD, "/");
Ajouter_lecteur('~', LECTEUR_HDD, Home ? Home : "");
#endif
}
@ -199,7 +195,7 @@ void Charger_DAT(void)
case ENOENT: puts("The file path is empty or points to a non-existing directory."); break;
case ENOMEM: puts("Pas assez de mémoire pour le noyau."); break;
case ENOTDIR: puts("Un composant du chemin d'accès n'est pas un répertoire."); break;
#if defined(__linux__)||defined(__amigaos4__)||defined(__BEOS__)||defined(__HAIKU__)
#ifdef ELOOP
case ELOOP: puts("Trop de liens symboliques rencontrés dans le chemin d'accès."); break;
#endif
}

6
io.h
View File

@ -43,8 +43,8 @@ void Extraire_chemin(char *Destination, const char *Source);
char * Position_dernier_slash(const char * Chaine);
#if defined(__linux__)||defined(__BEOS__)||defined(__HAIKU__)
#define SEPARATEUR_CHEMIN "/"
#else
#if defined(__amigaos4__) || defined(__WIN32__)
#define SEPARATEUR_CHEMIN "\\"
#else
#define SEPARATEUR_CHEMIN "/"
#endif

41
linux.c
View File

@ -1,41 +0,0 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2008 Peter Gordon
Copyright 2007 Adrien Destugues
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)
Grafx2 is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; version 2
of the License.
Grafx2 is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grafx2; if not, see <http://www.gnu.org/licenses/> or
write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
// Diverses fonctions qui existaient sous dos mais pas sous linux...
#if defined(__linux__)||defined(__amigaos4__)||defined(__BEOS__)||defined(__HAIKU__)
#include <string.h>
#include <stdio.h>
#include <sys/stat.h>
int filelength(int fichier)
{
struct stat infos_fichier;
fstat(fichier,&infos_fichier);
return infos_fichier.st_size;
}
void itoa(int source,char* dest, int longueur)
{
snprintf(dest,longueur,"%d",source);
}
#endif

38
linux.h
View File

@ -1,38 +0,0 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2007 Adrien Destugues
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)
Grafx2 is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; version 2
of the License.
Grafx2 is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grafx2; if not, see <http://www.gnu.org/licenses/> or
write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _LINUX_H_
#define _LINUX_H_
#ifdef __linux__
struct find_t {
unsigned char attrib;
char name[256];
};
int filelength(int);
void itoa(int source,char* dest, int longueur);
/* Integer TO Ascii */
#endif
#endif

View File

@ -39,12 +39,19 @@
#include "op_c.h"
#include "boutons.h"
#include "erreurs.h"
#include "linux.h"
#include "io.h"
#include "sdlscreen.h"
#define FILENAMESPACE 13
// Taille de fichier, en octets
int FileLength(FILE * Fichier)
{
struct stat infos_fichier;
fstat(fileno(Fichier),&infos_fichier);
return infos_fichier.st_size;
}
// Chargement des pixels dans l'écran principal
void Pixel_Chargement_dans_ecran_courant(word Pos_X,word Pos_Y,byte Couleur)
{
@ -4210,7 +4217,7 @@ void Test_KCF(void)
Nom_fichier_complet(Nom_du_fichier,0);
if ((Fichier=fopen(Nom_du_fichier, "rb")))
{
if (filelength(fileno(Fichier))==sizeof(T_KCF_Header))
if (FileLength(Fichier)==sizeof(T_KCF_Header))
{
read_bytes(Fichier,&Buffer,sizeof(T_KCF_Header));
// On vérifie une propriété de la structure de palette:
@ -4260,7 +4267,7 @@ void Load_KCF(void)
Nom_fichier_complet(Nom_du_fichier,0);
if ((Fichier=fopen(Nom_du_fichier, "rb")))
{
Taille_du_fichier=filelength(fileno(Fichier));
Taille_du_fichier=FileLength(Fichier);
if (Taille_du_fichier==sizeof(T_KCF_Header))
{
// Fichier KCF à l'ancien format
@ -4497,7 +4504,7 @@ void Load_SCx(void)
if ((Fichier=fopen(Nom_du_fichier, "rb")))
{
Taille_du_fichier=filelength(fileno(Fichier));
Taille_du_fichier=FileLength(Fichier);
if ((read_bytes(Fichier,&SCx_Header,sizeof(T_SCx_Header))))
{
@ -4755,7 +4762,7 @@ void Test_PI1(void)
if ((Fichier=fopen(Nom_du_fichier, "rb")))
{
// Vérification de la taille
Taille=filelength(fileno(Fichier));
Taille=FileLength(Fichier);
if ((Taille==32034) || (Taille==32066))
{
// Lecture et vérification de la résolution
@ -4794,7 +4801,7 @@ void Load_PI1(void)
if (read_bytes(Fichier,buffer,32034))
{
// Initialisation de la preview
Initialiser_preview(320,200,filelength(fileno(Fichier)),FORMAT_PI1);
Initialiser_preview(320,200,FileLength(Fichier),FORMAT_PI1);
if (Erreur_fichier==0)
{
// Initialisation de la palette
@ -5083,7 +5090,7 @@ void Test_PC1(void)
if ((Fichier=fopen(Nom_du_fichier, "rb")))
{
// Vérification de la taille
Taille=filelength(fileno(Fichier));
Taille=FileLength(Fichier);
if ((Taille<=32066))
{
// Lecture et vérification de la résolution
@ -5116,7 +5123,7 @@ void Load_PC1(void)
Erreur_fichier=0;
if ((Fichier=fopen(Nom_du_fichier, "rb")))
{
Taille=filelength(fileno(Fichier));
Taille=FileLength(Fichier);
// allocation des buffers mémoire
buffercomp=(byte *)malloc(Taille);
bufferdecomp=(byte *)malloc(32000);
@ -5126,7 +5133,7 @@ void Load_PC1(void)
if (read_bytes(Fichier,buffercomp,Taille))
{
// Initialisation de la preview
Initialiser_preview(320,200,filelength(fileno(Fichier)),FORMAT_PC1);
Initialiser_preview(320,200,FileLength(Fichier),FORMAT_PC1);
if (Erreur_fichier==0)
{
// Initialisation de la palette

32
main.c
View File

@ -45,26 +45,16 @@
#include "erreurs.h"
#include "readini.h"
#include "saveini.h"
#include "linux.h"
#include "io.h"
#include "texte.h"
#ifndef __linux__
#ifndef __amigaos4__
#ifndef __BEOS__
#ifndef __HAIKU__
#if defined(__WIN32__)
#include <windows.h>
#include <shlwapi.h>
#define chdir(dir) SetCurrentDirectory(dir)
#define M_PI 3.14159265358979323846
#endif
#endif
#endif
#endif
#ifdef __macosx__
#import <corefoundation/corefoundation.h>
#import <sys/param.h>
#elif defined(__macosx__)
#import <corefoundation/corefoundation.h>
#import <sys/param.h>
#endif
byte Ancien_nb_lignes; // Ancien nombre de lignes de l'écran
@ -227,23 +217,17 @@ void Analyse_de_la_ligne_de_commande(int argc,char * argv[])
// On récupère le chemin complet du paramètre
// Et on découpe ce chemin en répertoire(path) + fichier(.ext)
#if defined(__linux__) || defined(__amigaos4__) || defined(__BEOS__) || defined(__HAIKU__)
Buffer=realpath(argv[Indice],NULL);
#else
#if defined(__WIN32__)
Buffer = malloc(TAILLE_CHEMIN_FICHIER);
_fullpath(Buffer,argv[Indice],TAILLE_CHEMIN_FICHIER);
#else
Buffer=realpath(argv[Indice],NULL);
#endif
Extraire_chemin(Principal_Repertoire_fichier, Buffer);
Extraire_nom_fichier(Principal_Nom_fichier, Buffer);
#ifndef __linux__
#ifndef __amigaos4__
#ifndef __BEOS__
#ifndef __HAIKU__
#if defined(__WIN32__)
free(Buffer);
#endif
#endif
#endif
#endif
chdir(Principal_Repertoire_fichier);
}
else

View File

@ -35,7 +35,6 @@
#include "operatio.h"
#include "shade.h"
#include "erreurs.h"
#include "linux.h"
#include "sdlscreen.h"
//---------- Annuler les effets des modes de dessin (sauf la grille) ---------

View File

@ -31,7 +31,6 @@
#include "pages.h"
#include "graph.h"
#include "erreurs.h"
#include "linux.h"
///
/// GESTION DES PAGES

View File

@ -35,7 +35,6 @@
#include "divers.h"
#include "erreurs.h"
#include "const.h"
#include "linux.h"
#include "sdlscreen.h"
#include "readline.h"
@ -44,8 +43,6 @@
#define COULEUR_TEXTE_CURSEUR CM_Noir
#define COULEUR_FOND_CURSEUR CM_Fonce
extern int Update_necessaire;
// Suppresion d'un caractère à une certaine POSITION dans une CHAINE.
void Supprimer_caractere(char * Chaine, byte Position)
{
@ -78,10 +75,13 @@ int CaractereValide(int Caractere)
// Sous Linux: Seul le / est strictement interdit, mais beaucoup
// d'autres poseront des problèmes au shell, alors on évite.
// Sous Windows : c'est moins grave car le fopen() échouerait de toutes façons.
#ifdef __linux__
char CaracteresInterdits[] = {'/', '|', '?', '*', '<', '>'};
#else
// AmigaOS4: Pas de ':' car utilisé pour les volumes.
#if defined(__WIN32__)
char CaracteresInterdits[] = {'/', '|', '?', '*', '<', '>', ':', '\\'};
#elif defined (__amigaos4__)
char CaracteresInterdits[] = {'/', '|', '?', '*', '<', '>', ':'};
#else
char CaracteresInterdits[] = {'/', '|', '?', '*', '<', '>'};
#endif
if (Caractere < ' ' || Caractere > 255)
@ -154,7 +154,7 @@ byte Readline_ex(word Pos_X,word Pos_Y,char * Chaine,byte Taille_affichee,byte T
strcpy(Chaine_initiale,Chaine);
if (Type_saisie==1)
itoa(atoi(Chaine),Chaine,10); // On tasse la chaine à gauche
snprintf(Chaine,10,"%d",atoi(Chaine)); // On tasse la chaine à gauche
// Chaine[0]='\0'; // On efface la chaîne si c'est valeur numérique
@ -173,11 +173,7 @@ byte Readline_ex(word Pos_X,word Pos_Y,char * Chaine,byte Taille_affichee,byte T
Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine_affichee,Position - Offset);
UpdateRect(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
Taille_affichee*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3));
#ifdef __macosx__
Update_necessaire = 1;
Flush_update();
#endif
while ((Touche_lue!=SDLK_RETURN) && (Touche_lue!=SDLK_ESCAPE))
{
@ -319,11 +315,7 @@ affichage:
UpdateRect(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
Taille_affichee*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3));
} // Fin du "switch(Touche_lue)"
#ifdef __macosx__
Update_necessaire = 1;
Flush_update();
#endif
} // Fin du "while"

View File

@ -199,6 +199,7 @@ void Initialisation_Texte(void)
#endif
#elif defined(__linux__)
// Récupération de la liste des fonts avec fontconfig
#ifndef NOTTF
#define USE_XLIB
#ifdef USE_XLIB
@ -211,6 +212,7 @@ void Initialisation_Texte(void)
XFreeFontPath(font_path_list);
#endif
#endif
#endif
}