gfx2.dat is now replaced by an editable "skin" file: 'gfx2gui.gif', and a reference INI file: 'gfx2def.ini'.

git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@557 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Yves Rizoud 2009-01-27 00:10:02 +00:00
parent c018c13352
commit e302f2d26a
15 changed files with 803 additions and 305 deletions

View File

@ -225,9 +225,9 @@ 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 gfx2.ico gfx2cfg.ico
$(ZIP) $(ZIPOPT) grafx2-svn`svnversion | sed 's/:/-/'`$(TTFLABEL)-$(PLATFORM).$(ZIP) $(BIN) $(CFGBIN) gfx2.dat gfx2.gif gfx2cfg.gif doc/gpl-2.0.txt fonts/8pxfont.png doc/README-zlib1.txt doc/README-SDL.txt doc/README-SDL_image.txt doc/README-SDL_ttf.txt fonts/Tuffy.ttf src-svn`svnversion | sed 's/:/-/'`.tgz $(PLATFORMFILES)
$(ZIP) $(ZIPOPT) grafx2-svn`svnversion | sed 's/:/-/'`$(TTFLABEL)-$(PLATFORM).$(ZIP) $(BIN) $(CFGBIN) gfx2def.ini gfx2gui.gif gfx2.gif gfx2cfg.gif doc/gpl-2.0.txt fonts/8pxfont.png doc/README-zlib1.txt doc/README-SDL.txt doc/README-SDL_image.txt doc/README-SDL_ttf.txt fonts/Tuffy.ttf src-svn`svnversion | sed 's/:/-/'`.tgz $(PLATFORMFILES)
$(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 gfx2cfg.ico gfx2.gif gfx2cfg.gif doc/gpl-2.0.txt fonts/8pxfont.png fonts/Tuffy.ttf
tar cvzf grafx2-svn`svnversion | sed 's/:/-/'`$(TTFLABEL)-src.tgz *.c *.h Makefile Makefile.dep gfx2def.ini gfx2gui.gif gfx2.ico gfx2cfg.ico gfx2.gif gfx2cfg.gif doc/gpl-2.0.txt fonts/8pxfont.png fonts/Tuffy.ttf
$(BIN) : $(OBJ) $(OBJRES)
$(CC) $(OBJ) $(OBJRES) -o $(BIN) $(LOPT)
@ -249,7 +249,7 @@ $(OBJDIR)/%.o :
$(CC) $(COPT) -c $*.c -o $(OBJDIR)/$*.o
depend :
$(CC) -MM *.c | sed 's:^[^ ]:$$(OBJDIR)/&:' > Makefile.dep
$(CC) -MMG *.c | sed 's:^[^ ]:$$(OBJDIR)/&:' > Makefile.dep
$(OBJDIR)/winres.o : gfx2.ico
echo "1 ICON \"gfx2.ico\"" | $(WINDRES) -o $(OBJDIR)/winres.o
@ -271,7 +271,8 @@ install : $(BIN) $(CFGBIN)
$(if $(wildcard $(datadir)/grafx2),,$(MKDIR) $(datadir)/grafx2)
$(CP) $(BIN) $(datadir)/grafx2/
$(CP) $(CFGBIN) $(datadir)/grafx2/
$(CP) gfx2.dat $(datadir)/grafx2/
$(CP) gfx2def.ini $(datadir)/grafx2/
$(CP) gfx2gui.gif $(datadir)/grafx2/
$(CP) gfx2.gif $(datadir)/grafx2/
$(CP) gfx2cfg.gif $(datadir)/grafx2/
$(if $(wildcard $(datadir)/grafx2/fonts),,$(MKDIR) $(datadir)/grafx2/fonts)
@ -283,7 +284,8 @@ uninstall :
$(DELCOMMAND) $(bindir)/gfxcfg
$(DELCOMMAND) $(datadir)/grafx2/$(BIN)
$(DELCOMMAND) $(datadir)/grafx2/$(CFGBIN)
$(DELCOMMAND) $(datadir)/grafx2/gfx2.dat
$(DELCOMMAND) $(datadir)/grafx2/gfx2def.ini
$(DELCOMMAND) $(datadir)/grafx2/gfx2gui.gif
$(DELCOMMAND) $(datadir)/grafx2/gfx2.gif
$(DELCOMMAND) $(datadir)/grafx2/gfx2cfg.gif
$(DELCOMMAND) $(datadir)/grafx2/fonts/*

35
aide.c
View File

@ -87,7 +87,7 @@ void Afficher_aide(void)
short Repeat_Menu_Facteur_Y;
short Pos_Reel_X;
short Pos_Reel_Y;
int Curseur;
byte * Curseur;
short Largeur; // Largeur physique d'une ligne de texte
char TypeLigne; // N: Normale, T: Titre, S: Sous-titre
// -: Ligne inférieur de sous-titre
@ -143,29 +143,38 @@ void Afficher_aide(void)
// On crée une nouvelle ligne à splotcher
for (Indice_de_caractere=0;Indice_de_caractere<Largeur;Indice_de_caractere++)
{
// Recherche du caractère dans la fonte de 315 symboles.
// Recherche du caractère dans les fontes de l'aide.
// Ligne titre : Si l'indice est impair on dessine le quart de caractère
// qui va a gauche, sinon celui qui va a droite.
if (TypeLigne=='T')
Curseur=Caracteres_Aide_Titre_haut[(unsigned char)(Ligne[Indice_de_caractere/2])-' '] + (Indice_de_caractere & 1);
{
if (Ligne[Indice_de_caractere/2]>'_' || Ligne[Indice_de_caractere/2]<' ')
Curseur=&(Fonte_help_norm['!'][0][0]); // Caractère pas géré
else if (Indice_de_caractere & 1)
Curseur=&(Fonte_help_t2[(unsigned char)(Ligne[Indice_de_caractere/2])-' '][0][0]);
else
Curseur=&(Fonte_help_t1[(unsigned char)(Ligne[Indice_de_caractere/2])-' '][0][0]);
}
else if (TypeLigne=='-')
Curseur=Caracteres_Aide_Titre_bas[(unsigned char)(Ligne[Indice_de_caractere/2])-' '] + (Indice_de_caractere & 1);
{
if (Ligne[Indice_de_caractere/2]>'_' || Ligne[Indice_de_caractere/2]<' ')
Curseur=&(Fonte_help_norm['!'][0][0]); // Caractère pas géré
else if (Indice_de_caractere & 1)
Curseur=&(Fonte_help_t4[(unsigned char)(Ligne[Indice_de_caractere/2])-' '][0][0]);
else
Curseur=&(Fonte_help_t3[(unsigned char)(Ligne[Indice_de_caractere/2])-' '][0][0]);
}
else if (TypeLigne=='S')
Curseur=Caracteres_Aide_S[(unsigned char)(Ligne[Indice_de_caractere])-' '];
Curseur=&(Fonte_help_bold[(unsigned char)(Ligne[Indice_de_caractere])][0][0]);
else if (TypeLigne=='N' || TypeLigne=='K')
Curseur=Caracteres_Aide_N[(unsigned char)(Ligne[Indice_de_caractere])-' '];
Curseur=&(Fonte_help_norm[(unsigned char)(Ligne[Indice_de_caractere])][0][0]);
else
Curseur=1; // Un garde-fou en cas de probleme
Curseur=&(Fonte_help_norm['!'][0][0]); // Un garde-fou en cas de probleme
// Un deuxième garde-fou
if (Curseur < 0 || Curseur > 315)
Curseur = 1; // '!' affiché pour les caractères non prévus
for (X=0;X<6;X++)
for (Repeat_Menu_Facteur_X=0;Repeat_Menu_Facteur_X<Menu_Facteur_X;Repeat_Menu_Facteur_X++)
{
byte Couleur = Fonte_help[Curseur][X][Y];
byte Couleur = *(Curseur+X+Y*6);
// Surlignement pour liens
if (TypeLigne=='K' && Indice_de_caractere>=Position_lien
&& Indice_de_caractere<(Position_lien+Taille_lien))

View File

@ -28,14 +28,12 @@
#define M_2PI 6.28318530717958647692528676656
// Note: La taille du fichier GFX2.DAT est définie au début de INIT.C !
#define POURCENTAGE_VERSION "98.0%" // Libellé du pourcentage de la version ß
#define VERSION1 2 // |
#define VERSION2 0 // |_ Numéro de version découpé en
#define BETA1 97 // | plusieurs parties => 2.0 ß95.5%
#define BETA2 0 // | (utilisé pour le fichier de config)
#define ALPHA_BETA "ß" // Type de la version "Þ" ou "ß"
#define DAT_DEBUT_INI_PAR_DEFAUT 0xF385 // Dans gfx2.dat, début du fichier gfx2.ini standard
#define MAX_MODES_VIDEO 100 // Nombre de modes vidéo maxi
#define NB_BOUTONS 38 // Nombre de boutons à gérer
#define NB_TOUCHES 134 // Nombre de combinaisons de touches
@ -118,8 +116,9 @@ enum FORMATS_RECONNUS
enum CODES_D_ERREURS
{
// 0 = Flash rouge de l'écran, erreur non critique
ERREUR_DAT_ABSENT=1, // Le fichier GFX2.DAT est absent
ERREUR_DAT_CORROMPU, // Mauvais fichier GFX2.DAT
ERREUR_GUI_ABSENT=1, // Le fichier gfx2gui.gif est absent
ERREUR_GUI_CORROMPU, // Mauvais fichier gfx2gui.gif
ERREUR_INI_ABSENT, // Le fichier gfx2def.ini est absent
ERREUR_CFG_ABSENT, // Le fichier GFX2.CFG est absent
ERREUR_CFG_CORROMPU, // Mauvais fichier GFX2.CFG
ERREUR_CFG_ANCIEN, // Ancienne version du fichier GFX2.CFG

BIN
gfx2.dat

Binary file not shown.

292
gfx2def.ini Normal file
View File

@ -0,0 +1,292 @@
###### GrafX2 initialization file ###### Fichier d'initialisation de GrafX2 ##
# # # #
# You may modify this file with any # Vous pouvez modifier ce fichier avec #
# standard ASCII text editor. # n'importe quel éditeur de texte #
# # ASCII standard. #
# # #
# Comments are preceded by ';' or # Les commentaires sont précédés par #
# '#'. # ';' ou '#'. #
# # #
# Options are not case sensitive and # Les options ne sont pas sensibles à #
# spaces are ignored. # la casse et les espaces sont ignorés.#
# # #
# You must not change the order of # Vous ne devez pas changer l'ordre #
# the sections and their options. # des sections et de leurs options. #
# You must not delete or put into # Vous ne devez pas effacer ou mettre #
# comment any section nor option. # en commentaire une section ou option.#
# # #
# Each option is preceded by a # Chaque option est précédée par un #
# comment which explains its meaning. # commentaire qui explique sa fonction.#
# # #
##############################################################################
[MOUSE] # [SOURIS]
; The sensitivity of the mouse can | La sensibilité de la souris peut
; take values from 1 to 64. The | prendre des valeurs de 1 à 64. Plus
; smaller values, the faster. | les valeurs sont petites, plus c'est
; | rapide.
X_sensitivity = 1 ; (default 3)
Y_sensitivity = 1 ; (default 3)
; Due to the fact that those stupid | A cause du fait que ces imbéciles de
; mouse drivers' makers don't care | programmeurs de gestionnaires de
; if the mouse moves by steps of 2, | souris se fichent que votre souris se
; 4 or even 8 pixels, we have to | deplace par pas de 2, 4 ou même 8
; stretch the virtual area of the | pixels, nous devons élargir la zone
; mouse and divide coordinates to | virtuelle de la souris et diviser les
; get a one-pixel step motion. | coordonnées pour obtenir un pas de 1.
; (Warning: the mouse movement can | (Attention: le déplacement de la
; be correct in some video modes | souris peut être correct dans certains
; but not in others... But all the | modes vidéos mais pas dans d'autres...
; "Modes X" should behave the same | Mais tout les Modes X devraient se
; way, so you won't have to test | comporter de la même manière, donc
; them all). | vous n'aurez pas à tous les tester.
; A correction factor of 0 means | Un facteur de correction de 0 signifie
; that you are very lucky because | que vous avez de la chace car votre
; your driver doesn't need any | driver n'a pas besoin de correction.
; correction. If you set the | Si vous définissez le facteur de
; correction factor to 1, it means | correction à 1, cela signifie que
; that your mouse moves by steps of | votre souris se déplace par pas de 2
; 2 pixels; 2 for 4; 3 for 8, etc...| pixels; 2 pour 4; 3 pour 8, etc...
; If you want to use GrafX2 in a | Si vous désirez lancer GrafX2 dans une
; Win95 window, you should turn | fenêtre Windows95, vous devriez passer
; these values to 0 (and increase X | ces valeurs à 0 (et augmenter les sen-
; and Y sensitivities above). | sibilités X et Y définies plus haut).
X_correction_factor = 0 ; (default 0)
Y_correction_factor = 0 ; (default 0)
; Aspect of the main cursor (cross) | Aspect du curseur principal (croix)
; 1: Solid | 1: Solide
; 2: Transparent | 2: Transparent
; 3: Thin (solid) | 3: Fin (solide)
Cursor_aspect = 1 ; (default 1)
[MENU] # [MENU]
; Colors of the menus (the black | Couleurs des menus (la couleur noire
; and the white colors cannot be | et la couleur blanche ne peuvent pas
; modified). | être modifiées).
; Values are in {Red,Green,Blue} | Les valeurs sont dans l'ordre {Rouge,
; order and are between 0 and 63. | Vert,Bleu} et vont de 0 à 63.
Light_color = 42,42,42 ; (default 42,42,42)
Dark_color = 27,27,27 ; (default 27,27,27)
;
; Light_color = 24,25,30 ; \_ Nightmare
; Dark_color = 13,14,19 ; /
;
; Light_color = 10,45,28 ; \_ Forest
; Dark_color = 5,27,12 ; /
;
; Light_color = 48,41,26 ; \_ Gold
; Dark_color = 26,22,15 ; /
;
; Light_color = 10,40,55 ; \_ Oceanic
; Dark_color = 10,20,32 ; /
; Aspect ratio and size of the | Proportion des menus et de la barre
; menus and the tool-bar. | d'outils.
; Possible values: | Valeurs possibles:
; 0: Do not adapt (pixels are not | 0: Ne pas adapter (les pixels ne sont
; stretched) | pas étirés)
; 1: Adapt the menus and the tool- | 1: Adapter les menus et la barre
; bar according to the resolution| d'outils suivant la résolution
; 2: Slightly adapt the ratio of | 2: Adapter légèrement les proportions
; the menus and tool-bar | des menus et de la barre d'outils
Menu_ratio = 1 ; (default 1)
; Font: | Police de caractères (fonte):
; 1: Classic | 1: Classique
; 2: Fun | 2: Fun
Font = 1 ; (default 1)
[FILE_SELECTOR] # [SELECTEUR_DE_FICHIERS]
; Show hidden files and | Afficher les fichiers et répertoires
; directories (values are 'yes' or | cachés (les valeurs sont 'yes' ou
; 'no'). | 'no').
Show_hidden_files = no ; (default 'no')
Show_hidden_directories = no ; (default 'no')
; Delay before displaying a preview | Délai avant d'afficher une preview
; in file-selectors (in 18.2th of | dans les sélecteurs de fichiers (en
; second). Possible values range | 18.2èmes de seconde) Les valeurs
; from 1 to 256. | possibles vont de 1 à 256.
Preview_delay = 8 ; (default 8)
; Maximize the preview of the | Maximiser la preview des images pour
; pictures so that it is as big as | qu'elle soit aussi grande que
; possible. If you're not in the | possible.
; same resolution as the picture's | Si vous n'êtes pas dans la même réso-
; one, it can try to correct the | lution que celle de l'image, cela peut
; aspect ratio, but if the picture | essayer de corriger les proportions,
; does not fill the whole screen, | mais si l'image ne prend pas tout
; it can be worse. | l'écran, cela peut être pire.
Maximize_preview = no ; (default 'no')
; This option is used to place the | Cette option est utilisée pour placer
; selection bar on a filename by | la barre de sélection sur un nom de
; typing its first letters. | fichier en tapant ses 1ères lettres.
; For example, if you want to find | Par exemple, si vous voulez trouver le
; the "PICTURE.PKM" in a directory | fichier "PICTURE.PKM" dans un réper-
; that also contains "PALETTE.PAL", | toire contenant également le fichier
; you'll just have to type P and I. | "PALETTE.PAL", vous n'aurez qu'à taper
; The different values of "FFF" | P puis I.
; indicate if you want to find the | Les different valeurs de "FFF"
; name in both files and directories| indiquent si vous voulez trouvez le nom
; or just in only one of these: | dans les fichiers ET les répertoires ou
; 0: files and directories | simplement dans l'un OU l'autre.
; 1: files only | 0: fichiers et répertoires
; 2: directories only | 1: fichiers seulement
; | 2: répertoires seulement
Find_file_fast = 0 ; (default 0)
[LOADING] # [CHARGEMENT]
; Automatically set the resolution | Passer automatiquement dans la bonne
; when loading a picture. | résolution lors du chargement d'une
; You should set this value to | image.
; 'yes' after disabling the video | Vous devriez définir cette option à
; modes that are not supported by | 'yes' après avoir inhibé les modes
; your video card or monitor. | vidéo qui ne sont pas supportés par
; | votre matériel.
Auto_set_resolution = no ; (default 'no')
; If the variable above is set to | Si la variable ci-dessus est à 'yes',
; 'yes', this one tells if you want | celle-ci indique si vous voulez
; to set the resolution according | définir la résolution suivant:
; to: | 1: les dimensions de "l'écran
; 1: the internal "original screen" | d'origine" internes à l'image
; dimensions of the picture | 2: les véritables dimensions de
; 2: the actual dimensions of the | l'image
; picture |
Set_resolution_according_to = 1 ; (default 1)
; If you load a picture with a | Si vous chargez une image ayant une
; palette of less than 256 colors, | palette de moins de 256 couleurs,
; this option defines if you want | cette option indique si vous souhaitez
; to clear the palette or to keep | effacer la palette ou bien conserver
; the colors of the previous | les couleurs de l'image précédente qui
; picture that are over the number | se situent au-delà du nombre de la
; of colors of the new picture. | nouvelle image.
; For example, if you load a | Par exemple, si vous chargez une image
; 32-color picture, the colors 32 | de 32 couleurs, les couleurs 32 à 255
; to 255 will be set to black if | seront passées en noir si cette option
; this option is set to 'yes', or | est à 'yes', ou bien elles resteront
; they will be kept unchanged if | inchangées si elle est à 'no'.
; this option is set to 'no'. |
Clear_palette = yes ; (default 'yes')
[MISCELLANEOUS] # [DIVERS]
; Draw the limits of the picture. | Afficher les limites de l'image
Draw_limits = yes ; (default 'yes')
; Adjust the brush grabbing in | Ajuster la capture de brosse en mode
; "grid" mode. | "grille".
Adjust_brush_pick = yes ; (default 'yes')
; Coordinates: | Coordonnées:
; 1: Relative | 1: Relatives
; 2: Absolute | 2: Absolues
Coordinates = 1 ; (default 1)
; Create a backup file when saving. | Créer un fichier backup lors des
; | sauvegardes.
Backup = no ; (default 'no')
; Number of pages stored in memory | Nombre de pages stockées en mémoire
; for "undoing". | destinées à annuler les dernières
; Values are between 1 and 99. | modifications. Valeurs entre 1 et 99.
Undo_pages = 4 ; (default 4)
; Speed of the scroll-bars (in VBLs | Vitesse des barre de défilement (en
; waited) while clicking with the | VBLs attendus) lorsque l'un des
; left or right button of the mouse.| boutons de la souris est enfoncé.
; Values can be between 1 and 255. | Les valeurs sont comprises entre 1 et
; The bigger values, the slower. | 255. Plus elles sont grandes, plus
; | c'est lent.
Gauges_scrolling_speed_Left = 10 ; (default 10)
Gauges_scrolling_speed_Right = 3 ; (default 3)
; Automatically save the configu- | Enregistre automatiquement la configu-
; ration when exiting the program. | ration lorsqu'on quitte le programme.
Auto_save = yes ; (default 'yes')
; Maximum number of vertices used | Nombre maximum de vertex utilisés dans
; in filled polygons and polyforms, | les polygônes et polyformes pleins, et
; and lasso. Possible values range | le lasso. Les valeurs possibles vont
; from 2 to 16384. | de 2 à 16384.
; Each vertex takes 4 bytes. | Chaque vertex prend 4 octets.
Vertices_per_polygon = 1024 ; (default 1024)
; Automatically zoom into the | Zoomer automatiquement la zone pointée
; pointed area when you press the | par la souris lorsque vous appuyez sur
; short-key of the Magnifier button | la touche de raccourci de la loupe.
; while being above the picture. |
Fast_zoom = yes ; (default 'yes')
; Separate the colors in the tool- | Séparer les couleurs dans la barre
; bar by a black squaring. | d'outils par un quadrillage noir.
Separate_colors = no ; (default 'no')
; Initial value of the feedback for | Valeur initiale du "feedback" pour les
; the drawing modes (cf. docs). | modes de dessin (cf. docs).
FX_feedback = yes ; (default 'yes')
; When you reduce the palette or | Si vous réduisez la palette ou "zappez"
; "zap" some colors out of it, it is| quelques couleurs, il est possible
; possible that there are not enough| qu'il ne reste pas assez de couleurs
; colors left to draw the menus. | pour afficher les menus. Mettre cette
; Switching the following variable | variable à 'yes' ramènera automatiquent
; on will bring back the colors of | les couleurs du menu s'il reste moins
; the menu if there are less than 4 | de 4 couleurs après une "réduction" ou
; colors left after "reducing" or | un "zapping".
; "zapping". |
Safety_colors = yes ; (default 'yes')
; Display a message at startup | Afficher un message au démarrage
; telling the version number of the | indiquant le numéro de version du
; program. | programme.
Opening_message = yes ; (default 'yes')
; Take the Stencil into account when| Prendre le Stencil en compte lorsqu'on
; clearing the image. | efface l'image.
Clear_with_stencil = yes ; (default 'yes')
; Directly set the discontinuous | Passer automatiquement en mode de
; freehand drawing mode after brush | dessin discontinu après la prise d'une
; grabbing. | brosse.
Auto_discontinuous = no ; (default 'no')
; Save the screen dimensions in GIF | Sauver les dimensions de l'écran dans
; files. If you want to read these | les fichiers GIF. Si vous voulez lire
; files with Photoshop or Alchemy, | ces fichiers avec Photoshop ou Alchemy,
; and maybe some other programs, you| et peut-être d'autres programmes, vous
; must set this option to 'no'. | devez mettre cette option à 'no'.
Save_screen_size_in_GIF = no ; (default 'no')
; Automaticaly count the number of | Compter automatiquement le nombre de
; different colors used when opening| couleurs différentes utilisées lors de
; the palette editor window. (Set it| d'ouverture de la fenêtre d'édition de
; to 'no' if you have a slow PC or | la palette. (Mettez-le à 'no' si vous
; if you edit huge pictures) | avez un PC lent ou bien si vous éditez
; | d'énormes images).
Auto_nb_colors_used = yes ; (default 'yes')
; Default video mode at startup | Numéro du mode vidéo par défaut au
; (see the list by running the | démarrage (voir la liste en lançant
; program with argument "/?". | le programme avec l'option "/?".
Default_video_mode = window ; (default 'window')
; Window dimensions. The program | Dimensions de la fenêtre en mode
; remembers the last window size. | fenêtré.
Default_window_size = 640,480 ; (default '640,480')

BIN
gfx2gui.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -560,7 +560,14 @@ GFX2_GLOBAL byte * Logo_GrafX2;
GFX2_GLOBAL byte Fonte_systeme[256*8*8];
GFX2_GLOBAL byte Fonte_fun [256*8*8];
GFX2_GLOBAL byte Fonte_help [315][6][8];
GFX2_GLOBAL byte Fonte_help_norm [256][6][8];
GFX2_GLOBAL byte Fonte_help_bold [256][6][8];
// 12
// 34
GFX2_GLOBAL byte Fonte_help_t1 [64][6][8];
GFX2_GLOBAL byte Fonte_help_t2 [64][6][8];
GFX2_GLOBAL byte Fonte_help_t3 [64][6][8];
GFX2_GLOBAL byte Fonte_help_t4 [64][6][8];
GFX2_GLOBAL byte * Fonte;
// Les données de l'aide:

499
init.c
View File

@ -32,6 +32,7 @@
#include <stdlib.h>
#include <errno.h>
#include <SDL_byteorder.h>
#include <SDL_image.h>
#if defined(__WIN32__)
#include <windows.h> // GetLogicalDrives(), GetDriveType(), DRIVE_*
#endif
@ -57,6 +58,7 @@
#include "files.h"
#include "setup.h"
#include "windows.h"
#include "sdlscreen.h"
#include "mountlist.h" // read_file_system_list
// Ajouter un lecteur à la liste de lecteurs
@ -185,114 +187,439 @@ int ActiverLecteur(int NumeroLecteur)
return chdir(Drive[NumeroLecteur].Chemin);
}
void Charger_DAT(void)
// Fonctions de lecture dans la skin de l'interface graphique
void Chercher_bas(SDL_Surface *GUI, int *Debut_X, int *Debut_Y, byte Couleur_neutre,char * Section)
{
FILE* Handle;
int Taille_fichier;
int Indice;
char Nom_du_fichier[TAILLE_CHEMIN_FICHIER];
byte * Fonte_temporaire;
byte Pos_X;
byte Pos_Y;
struct stat Informations_Fichier;
strcpy(Nom_du_fichier,Repertoire_des_donnees);
strcat(Nom_du_fichier,"gfx2.dat");
if(stat(Nom_du_fichier,&Informations_Fichier))
byte Couleur;
int Y;
Y=*Debut_Y;
*Debut_X=0;
do
{
switch(errno)
Couleur=Sdl_Get_pixel_8(GUI,*Debut_X,Y);
if (Couleur!=Couleur_neutre)
{
case EACCES: puts("La permission de parcours est refusée pour un des répertoires contenu dans le chemin path."); break;
case EBADF: puts("filedes est un mauvais descripteur."); break;
case EFAULT: puts("Un pointeur se trouve en dehors de l'espace d'adressage."); break;
case ENAMETOOLONG: puts("Nom de fichier trop long."); break;
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;
#ifdef ELOOP
case ELOOP: puts("Trop de liens symboliques rencontrés dans le chemin d'accès."); break;
#endif
*Debut_Y=Y;
return;
}
Y++;
} while (Y<GUI->h);
printf("Error in skin file: Was looking down from %d,%d for a '%s', and reached the end of the image\n",
*Debut_X, *Debut_Y, Section);
Erreur(ERREUR_GUI_CORROMPU);
}
void Chercher_droite(SDL_Surface *GUI, int *Debut_X, int Debut_Y, byte Couleur_neutre, char * Section)
{
byte Couleur;
int X;
X=*Debut_X;
do
{
Couleur=Sdl_Get_pixel_8(GUI,X,Debut_Y);
if (Couleur!=Couleur_neutre)
{
*Debut_X=X;
return;
}
X++;
} while (X<GUI->w);
printf("Error in skin file: Was looking right from %d,%d for a '%s', and reached the edege of the image\n",
*Debut_X, Debut_Y, Section);
Erreur(ERREUR_GUI_CORROMPU);
}
void Lire_bloc(SDL_Surface *GUI, int Debut_X, int Debut_Y, void *Dest, int Largeur, int Hauteur, char * Section, int Type)
{
// Type: 0 = normal GUI element, only 4 colors allowed
// Type: 1 = mouse cursor, 4 colors allowed + transparent
// Type: 2 = brush icon or sieve pattern (only CM_Blanc and CM_Trans)
// Type: 3 = raw bitmap (splash screen)
byte * Ptr=Dest;
int X,Y;
byte Couleur;
// Verification taille
if (Debut_Y+Hauteur>=GUI->h || Debut_X+Largeur>=GUI->w)
{
printf("Error in skin file: Was looking at %d,%d for a %d*%d object (%s) but it doesn't fit the image.\n",
Debut_X, Debut_Y, Hauteur, Largeur, Section);
Erreur(ERREUR_GUI_CORROMPU);
}
for (Y=Debut_Y; Y<Debut_Y+Hauteur; Y++)
{
for (X=Debut_X; X<Debut_X+Largeur; X++)
{
Couleur=Sdl_Get_pixel_8(GUI,X,Y);
if (Type==0 && (Couleur != CM_Noir && Couleur != CM_Fonce && Couleur != CM_Clair && Couleur != CM_Blanc))
{
printf("Error in skin file: Was looking at %d,%d for a %d*%d object (%s) but at %d,%d a pixel was found with color %d which isn't one of the GUI colors (which were detected as %d,%d,%d,%d.\n",
Debut_X, Debut_Y, Hauteur, Largeur, Section, X, Y, Couleur, CM_Noir, CM_Fonce, CM_Clair, CM_Blanc);
Erreur(ERREUR_GUI_CORROMPU);
}
if (Type==1 && (Couleur != CM_Noir && Couleur != CM_Fonce && Couleur != CM_Clair && Couleur != CM_Blanc && Couleur != CM_Trans))
{
printf("Error in skin file: Was looking at %d,%d for a %d*%d object (%s) but at %d,%d a pixel was found with color %d which isn't one of the mouse colors (which were detected as %d,%d,%d,%d,%d.\n",
Debut_X, Debut_Y, Hauteur, Largeur, Section, X, Y, Couleur, CM_Noir, CM_Fonce, CM_Clair, CM_Blanc, CM_Trans);
Erreur(ERREUR_GUI_CORROMPU);
}
if (Type==2)
{
if (Couleur != CM_Blanc && Couleur != CM_Trans)
{
printf("Error in skin file: Was looking at %d,%d for a %d*%d object (%s) but at %d,%d a pixel was found with color %d which isn't one of the brush colors (which were detected as %d on %d.\n",
Debut_X, Debut_Y, Hauteur, Largeur, Section, X, Y, Couleur, CM_Blanc, CM_Trans);
Erreur(ERREUR_GUI_CORROMPU);
}
// Conversion en 0/1 pour les brosses monochromes internes
Couleur = (Couleur != CM_Trans);
}
*Ptr=Couleur;
Ptr++;
}
}
}
Taille_fichier=Informations_Fichier.st_size;
if (Taille_fichier<DAT_DEBUT_INI_PAR_DEFAUT)
void Lire_trame(SDL_Surface *GUI, int Debut_X, int Debut_Y, word *Dest, char * Section)
{
byte Buffer[256];
int X,Y;
Lire_bloc(GUI, Debut_X, Debut_Y, Buffer, 16, 16, Section, 2);
for (Y=0; Y<16; Y++)
{
DEBUG("Taille",0);
Erreur(ERREUR_DAT_CORROMPU);
*Dest=0;
for (X=0; X<16; X++)
{
*Dest=*Dest | Buffer[Y*16+X]<<X;
}
Dest++;
}
}
Handle=fopen(Nom_du_fichier,"rb");
if (Handle==NULL)
void Charger_DAT(void)
{
int Indice;
char Nom_du_fichier[TAILLE_CHEMIN_FICHIER];
SDL_Surface * GUI;
SDL_Palette * SDLPal;
int i;
int Curseur_X=0,Curseur_Y=0;
byte Couleur;
byte CM_Neutre; // Couleur neutre utilisée pour délimiter les éléments GUI
int Car_1=0; // Indices utilisés pour les 4 "fontes" qui composent les
int Car_2=0; // grands titres de l'aide. Chaque indice avance dans
int Car_3=0; // l'une des fontes dans l'ordre : 1 2
int Car_4=0; // 3 4
// Lecture du fichier "skin"
strcpy(Nom_du_fichier,Repertoire_des_donnees);
strcat(Nom_du_fichier,"gfx2gui.gif");
GUI=IMG_Load(Nom_du_fichier);
if (!GUI)
{
DEBUG("Absent",0);
Erreur(ERREUR_DAT_ABSENT);
Erreur(ERREUR_GUI_ABSENT);
}
if (!GUI->format || GUI->format->BitsPerPixel != 8)
{
printf("Not a 8-bit image");
Erreur(ERREUR_GUI_CORROMPU);
}
SDLPal=GUI->format->palette;
if (!SDLPal || SDLPal->ncolors!=256)
{
printf("Not a 256-color palette");
Erreur(ERREUR_GUI_CORROMPU);
}
// Lecture de la palette par défaut
for (i=0; i<256; i++)
{
Palette_defaut[i].R=SDLPal->colors[i].r;
Palette_defaut[i].V=SDLPal->colors[i].g;
Palette_defaut[i].B=SDLPal->colors[i].b;
}
// Carré "noir"
CM_Noir = Sdl_Get_pixel_8(GUI,Curseur_X,Curseur_Y);
do
{
if (++Curseur_X>=GUI->w)
{
printf("Error in GUI skin file: should start with 5 consecutive squares for black, dark, light, white, transparent, then a neutral color\n");
Erreur(ERREUR_GUI_CORROMPU);
}
Couleur=Sdl_Get_pixel_8(GUI,Curseur_X,Curseur_Y);
} while(Couleur==CM_Noir);
// Carré "foncé"
CM_Fonce=Couleur;
do
{
if (++Curseur_X>=GUI->w)
{
printf("Error in GUI skin file: should start with 5 consecutive squares for black, dark, light, white, transparent, then a neutral color\n");
Erreur(ERREUR_GUI_CORROMPU);
}
Couleur=Sdl_Get_pixel_8(GUI,Curseur_X,Curseur_Y);
} while(Couleur==CM_Fonce);
// Carré "clair"
CM_Clair=Couleur;
do
{
if (++Curseur_X>GUI->w)
{
printf("Error in GUI skin file: should start with 5 consecutive squares for black, dark, light, white, transparent, then a neutral color\n");
Erreur(ERREUR_GUI_CORROMPU);
}
Couleur=Sdl_Get_pixel_8(GUI,Curseur_X,Curseur_Y);
} while(Couleur==CM_Clair);
// Carré "blanc"
CM_Blanc=Couleur;
do
{
if (++Curseur_X>=GUI->w)
{
printf("Error in GUI skin file: should start with 5 consecutive squares for black, dark, light, white, transparent, then a neutral color\n");
Erreur(ERREUR_GUI_CORROMPU);
}
Couleur=Sdl_Get_pixel_8(GUI,Curseur_X,Curseur_Y);
} while(Couleur==CM_Blanc);
// Carré "transparent"
CM_Trans=Couleur;
do
{
if (++Curseur_X>=GUI->w)
{
printf("Error in GUI skin file: should start with 5 consecutive squares for black, dark, light, white, transparent, then a neutral color\n");
Erreur(ERREUR_GUI_CORROMPU);
}
Couleur=Sdl_Get_pixel_8(GUI,Curseur_X,Curseur_Y);
} while(Couleur==CM_Trans);
// Reste : couleur neutre
CM_Neutre=Couleur;
if (!read_bytes(Handle, Palette_defaut,sizeof(T_Palette)))
Erreur(ERREUR_DAT_CORROMPU);
Palette_64_to_256(Palette_defaut);
Curseur_X=0;
Curseur_Y=1;
while ((Couleur=Sdl_Get_pixel_8(GUI,Curseur_X,Curseur_Y))==CM_Noir)
{
Curseur_Y++;
if (Curseur_Y>=GUI->h)
{
printf("Error in GUI skin file: should start with 5 consecutive squares for black, dark, light, white, transparent, then a neutral color\n");
Erreur(ERREUR_GUI_CORROMPU);
}
}
// Menu
Chercher_bas(GUI, &Curseur_X, &Curseur_Y, CM_Neutre, "menu");
Lire_bloc(GUI, Curseur_X, Curseur_Y, BLOCK_MENU, LARGEUR_MENU, HAUTEUR_MENU,"menu",0);
Curseur_Y+=HAUTEUR_MENU;
if (!read_bytes(Handle, BLOCK_MENU,LARGEUR_MENU*HAUTEUR_MENU))
Erreur(ERREUR_DAT_CORROMPU);
// Effets
for (i=0; i<NB_SPRITES_EFFETS; i++)
{
if (i==0)
Chercher_bas(GUI, &Curseur_X, &Curseur_Y, CM_Neutre, "effect sprite");
else
Chercher_droite(GUI, &Curseur_X, Curseur_Y, CM_Neutre, "effect sprite");
Lire_bloc(GUI, Curseur_X, Curseur_Y, SPRITE_EFFET[i], LARGEUR_SPRITE_MENU, HAUTEUR_SPRITE_MENU, "effect sprite",0);
Curseur_X+=LARGEUR_SPRITE_MENU;
}
Curseur_Y+=HAUTEUR_SPRITE_MENU;
// Curseurs souris
for (i=0; i<NB_SPRITES_CURSEUR; i++)
{
if (i==0)
Chercher_bas(GUI, &Curseur_X, &Curseur_Y, CM_Neutre, "mouse cursor");
else
Chercher_droite(GUI, &Curseur_X, Curseur_Y, CM_Neutre, "mouse cursor");
Lire_bloc(GUI, Curseur_X, Curseur_Y, SPRITE_CURSEUR[i], LARGEUR_SPRITE_CURSEUR, HAUTEUR_SPRITE_CURSEUR, "mouse cursor",1);
Curseur_X+=LARGEUR_SPRITE_CURSEUR;
}
Curseur_Y+=HAUTEUR_SPRITE_CURSEUR;
// Sprites menu
for (i=0; i<NB_SPRITES_MENU; i++)
{
if (i==0)
Chercher_bas(GUI, &Curseur_X, &Curseur_Y, CM_Neutre, "menu sprite");
else
Chercher_droite(GUI, &Curseur_X, Curseur_Y, CM_Neutre, "menu sprite");
Lire_bloc(GUI, Curseur_X, Curseur_Y, SPRITE_MENU[i], LARGEUR_SPRITE_MENU, HAUTEUR_SPRITE_MENU, "menu sprite",1);
Curseur_X+=LARGEUR_SPRITE_MENU;
}
Curseur_Y+=HAUTEUR_SPRITE_MENU;
// Icones des Pinceaux
for (i=0; i<NB_SPRITES_PINCEAU; i++)
{
// Rangés par ligne de 12
if ((i%12)==0)
{
if (i!=0)
Curseur_Y+=HAUTEUR_PINCEAU;
Chercher_bas(GUI, &Curseur_X, &Curseur_Y, CM_Neutre, "brush icon");
}
else
{
Chercher_droite(GUI, &Curseur_X, Curseur_Y, CM_Neutre, "brush icon");
}
Lire_bloc(GUI, Curseur_X, Curseur_Y, SPRITE_PINCEAU[i], LARGEUR_PINCEAU, HAUTEUR_PINCEAU, "brush icon",2);
Curseur_X+=LARGEUR_PINCEAU;
}
Curseur_Y+=HAUTEUR_PINCEAU;
if (!read_bytes(Handle, SPRITE_EFFET,LARGEUR_SPRITE_MENU*HAUTEUR_SPRITE_MENU*NB_SPRITES_EFFETS))
Erreur(ERREUR_DAT_CORROMPU);
if (!read_bytes(Handle, SPRITE_CURSEUR,LARGEUR_SPRITE_CURSEUR*HAUTEUR_SPRITE_CURSEUR*NB_SPRITES_CURSEUR))
Erreur(ERREUR_DAT_CORROMPU);
if (!read_bytes(Handle, SPRITE_MENU,LARGEUR_SPRITE_MENU*HAUTEUR_SPRITE_MENU*NB_SPRITES_MENU))
Erreur(ERREUR_DAT_CORROMPU);
if (!read_bytes(Handle, SPRITE_PINCEAU,LARGEUR_PINCEAU*HAUTEUR_PINCEAU*NB_SPRITES_PINCEAU))
Erreur(ERREUR_DAT_CORROMPU);
if (!read_bytes(Handle, SPRITE_DRIVE,LARGEUR_SPRITE_DRIVE*HAUTEUR_SPRITE_DRIVE*NB_SPRITES_DRIVES))
Erreur(ERREUR_DAT_CORROMPU);
// Sprites drive
for (i=0; i<NB_SPRITES_DRIVES; i++)
{
if (i==0)
Chercher_bas(GUI, &Curseur_X, &Curseur_Y, CM_Neutre, "sprite drive");
else
Chercher_droite(GUI, &Curseur_X, Curseur_Y, CM_Neutre, "sprite drive");
Lire_bloc(GUI, Curseur_X, Curseur_Y, SPRITE_DRIVE[i], LARGEUR_SPRITE_DRIVE, HAUTEUR_SPRITE_DRIVE, "sprite drive",1);
Curseur_X+=LARGEUR_SPRITE_DRIVE;
}
Curseur_Y+=HAUTEUR_SPRITE_DRIVE;
// Logo splash screen
if (!(Logo_GrafX2=(byte *)malloc(231*56)))
Erreur(ERREUR_MEMOIRE);
if (!read_bytes(Handle, Logo_GrafX2,231*56))
Erreur(ERREUR_DAT_CORROMPU);
if (!read_bytes(Handle, TRAME_PREDEFINIE,2*16*NB_TRAMES_PREDEFINIES))
Erreur(ERREUR_DAT_CORROMPU);
// Lecture des fontes 8x8:
if (!(Fonte_temporaire=(byte *)malloc(2048)))
Erreur(ERREUR_MEMOIRE);
// Lecture de la fonte système
if (!read_bytes(Handle, Fonte_temporaire,2048))
Erreur(ERREUR_DAT_CORROMPU);
for (Indice=0;Indice<256;Indice++)
for (Pos_X=0;Pos_X<8;Pos_X++)
for (Pos_Y=0;Pos_Y<8;Pos_Y++)
Fonte_systeme[(Indice<<6)+(Pos_X<<3)+Pos_Y]=( ((*(Fonte_temporaire+(Indice*8)+Pos_Y))&(0x80>>Pos_X)) ? 1 : 0);
// Lecture de la fonte alternative
if (!read_bytes(Handle, Fonte_temporaire,2048))
Erreur(ERREUR_DAT_CORROMPU);
for (Indice=0;Indice<256;Indice++)
for (Pos_X=0;Pos_X<8;Pos_X++)
for (Pos_Y=0;Pos_Y<8;Pos_Y++)
Fonte_fun[(Indice<<6)+(Pos_X<<3)+Pos_Y]=( ((*(Fonte_temporaire+(Indice*8)+Pos_Y))&(0x80>>Pos_X)) ? 1 : 0);
free(Fonte_temporaire);
Chercher_bas(GUI, &Curseur_X, &Curseur_Y, CM_Neutre, "logo menu");
Lire_bloc(GUI, Curseur_X, Curseur_Y, Logo_GrafX2, 231, 56, "logo menu",3);
Curseur_Y+=56;
// Trames
for (i=0; i<NB_TRAMES_PREDEFINIES; i++)
{
if (i==0)
Chercher_bas(GUI, &Curseur_X, &Curseur_Y, CM_Neutre, "sieve pattern");
else
Chercher_droite(GUI, &Curseur_X, Curseur_Y, CM_Neutre, "sieve pattern");
Lire_trame(GUI, Curseur_X, Curseur_Y, TRAME_PREDEFINIE[i],"sieve pattern");
Curseur_X+=16;
}
Curseur_Y+=16;
// Fonte Système
for (i=0; i<256; i++)
{
// Rangés par ligne de 32
if ((i%32)==0)
{
if (i!=0)
Curseur_Y+=8;
Chercher_bas(GUI, &Curseur_X, &Curseur_Y, CM_Neutre, "system font");
}
else
{
Chercher_droite(GUI, &Curseur_X, Curseur_Y, CM_Neutre, "system font");
}
Lire_bloc(GUI, Curseur_X, Curseur_Y, &Fonte_systeme[i*64], 8, 8, "system font",2);
Curseur_X+=8;
}
Curseur_Y+=8;
Fonte=Fonte_systeme;
// Lecture de la fonte 6x8: (spéciale aide)
if (!read_bytes(Handle, Fonte_help,315*6*8))
Erreur(ERREUR_DAT_CORROMPU);
// Fonte Fun
for (i=0; i<256; i++)
{
// Rangés par ligne de 32
if ((i%32)==0)
{
if (i!=0)
Curseur_Y+=8;
Chercher_bas(GUI, &Curseur_X, &Curseur_Y, CM_Neutre, "fun font");
}
else
{
Chercher_droite(GUI, &Curseur_X, Curseur_Y, CM_Neutre, "fun font");
}
Lire_bloc(GUI, Curseur_X, Curseur_Y, &Fonte_fun[i*64], 8, 8, "fun font",2);
Curseur_X+=8;
}
Curseur_Y+=8;
// Le reste est actuellement une copie du fichier INI par défaut:
// Pas besoin ici.
// Fonte help normale
for (i=0; i<256; i++)
{
// Rangés par ligne de 32
if ((i%32)==0)
{
if (i!=0)
Curseur_Y+=8;
Chercher_bas(GUI, &Curseur_X, &Curseur_Y, CM_Neutre, "help font (norm)");
}
else
{
Chercher_droite(GUI, &Curseur_X, Curseur_Y, CM_Neutre, "help font (norm)");
}
Lire_bloc(GUI, Curseur_X, Curseur_Y, &(Fonte_help_norm[i][0][0]), 6, 8, "help font (norm)",0);
Curseur_X+=6;
}
Curseur_Y+=8;
// Fonte help bold
for (i=0; i<256; i++)
{
// Rangés par ligne de 32
if ((i%32)==0)
{
if (i!=0)
Curseur_Y+=8;
Chercher_bas(GUI, &Curseur_X, &Curseur_Y, CM_Neutre, "help font (bold)");
}
else
{
Chercher_droite(GUI, &Curseur_X, Curseur_Y, CM_Neutre, "help font (bold)");
}
Lire_bloc(GUI, Curseur_X, Curseur_Y, &(Fonte_help_bold[i][0][0]), 6, 8, "help font (bold)",0);
Curseur_X+=6;
}
Curseur_Y+=8;
fclose(Handle);
// Fonte help titre
for (i=0; i<256; i++)
{
byte * Dest;
// Rangés par ligne de 64
if ((i%64)==0)
{
if (i!=0)
Curseur_Y+=8;
Chercher_bas(GUI, &Curseur_X, &Curseur_Y, CM_Neutre, "help font (title)");
}
else
{
Chercher_droite(GUI, &Curseur_X, Curseur_Y, CM_Neutre, "help font (title)");
}
if (i&1)
if (i&64)
Dest=&(Fonte_help_t4[Car_4++][0][0]);
else
Dest=&(Fonte_help_t2[Car_2++][0][0]);
else
if (i&64)
Dest=&(Fonte_help_t3[Car_3++][0][0]);
else
Dest=&(Fonte_help_t1[Car_1++][0][0]);
Lire_bloc(GUI, Curseur_X, Curseur_Y, Dest, 6, 8, "help font (title)",0);
Curseur_X+=6;
}
Curseur_Y+=8;
// Terminé: libération de l'image skin
SDL_FreeSurface(GUI);
Section_d_aide_en_cours=0;
Position_d_aide_en_cours=0;

20
main.c
View File

@ -105,12 +105,15 @@ void Erreur_fonction(int Code, const char *Nom_fichier, int Numero_ligne, const
{
switch (Code)
{
case ERREUR_DAT_ABSENT : printf("Error: File GFX2.DAT is missing!\n");
case ERREUR_GUI_ABSENT : printf("Error: File gfx2gui.gif is missing!\n");
printf("This program cannot run without this file.\n");
break;
case ERREUR_DAT_CORROMPU : printf("Error: File GFX2.DAT is corrupt!\n");
case ERREUR_GUI_CORROMPU : printf("Error: File gfx2gui.gif is corrupt!\n");
printf("This program cannot run without a correct version of this file.\n");
break;
case ERREUR_INI_ABSENT : printf("Error: File gfx2def.ini is missing!\n");
printf("This program cannot run without this file.\n");
break;
case ERREUR_CFG_ABSENT : printf("Error: File GFX2.CFG is missing!\n");
printf("Please run GFXCFG to create it.\n");
break;
@ -496,17 +499,12 @@ void Initialisation_du_programme(int argc,char * argv[])
// Transfert des valeurs du .INI qui ne changent pas dans des variables
// plus accessibles:
Palette_defaut[252]=Coul_menu_pref[0]=Config.Coul_menu_pref[0];
Palette_defaut[253]=Coul_menu_pref[1]=Config.Coul_menu_pref[1];
Palette_defaut[254]=Coul_menu_pref[2]=Config.Coul_menu_pref[2];
Palette_defaut[255]=Coul_menu_pref[3]=Config.Coul_menu_pref[3];
Palette_defaut[CM_Noir] =Coul_menu_pref[0]=Config.Coul_menu_pref[0];
Palette_defaut[CM_Fonce]=Coul_menu_pref[1]=Config.Coul_menu_pref[1];
Palette_defaut[CM_Clair]=Coul_menu_pref[2]=Config.Coul_menu_pref[2];
Palette_defaut[CM_Blanc]=Coul_menu_pref[3]=Config.Coul_menu_pref[3];
memcpy(Principal_Palette,Palette_defaut,sizeof(T_Palette));
CM_Noir =0;
CM_Fonce=25;
CM_Clair=7;
CM_Blanc=15;
CM_Trans=1;
Calculer_couleurs_menu_optimales(Palette_defaut);
// Infos sur les trames (Sieve)

View File

@ -411,22 +411,15 @@ int Charger_INI(struct S_Config * Conf)
Fichier=fopen(Nom_du_fichier,"rb");
if (Fichier==0)
{
// Si le fichier ini est absent on le relit depuis gfx2.dat
// Si le fichier ini est absent on le relit depuis gfx2def.ini
strcpy(Nom_du_fichier,Repertoire_des_donnees);
strcat(Nom_du_fichier,"gfx2.dat");
strcat(Nom_du_fichier,"gfx2def.ini");
Fichier=fopen(Nom_du_fichier,"rb");
if (Fichier == 0)
{
free(Nom_du_fichier);
free(Buffer);
return ERREUR_DAT_ABSENT;
}
if (fseek(Fichier, DAT_DEBUT_INI_PAR_DEFAUT ,SEEK_SET))
{
fclose(Fichier);
free(Nom_du_fichier);
free(Buffer);
return ERREUR_DAT_CORROMPU;
return ERREUR_INI_ABSENT;
}
}

View File

@ -415,19 +415,14 @@ int Sauver_INI(struct S_Config * Conf)
goto Erreur_ERREUR_SAUVEGARDE_INI;
}
}
// On récupère un fichier INI "propre" dans GFX2.DAT
// On récupère un fichier INI "propre" à partir de gfx2def.ini
strcpy(Nom_du_fichier_DAT,Repertoire_des_donnees);
strcat(Nom_du_fichier_DAT,"gfx2.dat");
strcat(Nom_du_fichier_DAT,"gfx2def.ini");
Ancien_fichier=fopen(Nom_du_fichier_DAT,"rb");
if (Ancien_fichier==0)
{
fclose(Ancien_fichier);
return ERREUR_DAT_ABSENT;
}
if (fseek(Ancien_fichier, DAT_DEBUT_INI_PAR_DEFAUT, SEEK_SET))
{
fclose(Ancien_fichier);
return ERREUR_DAT_CORROMPU;
return ERREUR_INI_ABSENT;
}
Nouveau_fichier=fopen(Nom_du_fichier,"wb");
if (Nouveau_fichier==0)

View File

@ -182,3 +182,10 @@ SDL_Color Conversion_couleur_SDL(byte Index)
Couleur.unused = 255;
return Couleur;
}
// Lecture d'un pixel pour une surface SDL.
// Attention, ne fonctionne que pour les surfaces 8-bit
byte Sdl_Get_pixel_8(SDL_Surface *Bmp, int X, int Y)
{
return ((byte *)(Bmp->pixels))[(Y*Bmp->pitch+X)];
}

View File

@ -34,5 +34,6 @@
void Flush_update(void);
byte * Surface_en_bytefield(SDL_Surface *Source, byte * Destination);
SDL_Color Conversion_couleur_SDL(byte);
byte Sdl_Get_pixel_8(SDL_Surface *Bmp, int X, int Y);
#endif // SDLSCREEN_H_INCLUDED

View File

@ -21,159 +21,6 @@
#include "const.h" // Utilise les enumerations BOUTON_ et SPECIAL_
// Les tables suivantes servent de table de conversion entre un caractère ASCII
// et le sprite qui le représente dans la Fonte
// Table de caractères Normaux
static const int Caracteres_Aide_N[] = { // Commence à ' '
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 0, 62, 63, 64, 65, 66, 67, 68,
69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
89, 90, 91, 92, 0, 0, 93, 94, 95, 96,
0, 97, 0, 98, 99, 100, 101, 0, 0, 0,
0, 0, 0, 102, 0, 103, 0, 0, 104, 105};
// Table de caractères Sous-Titres
static const int Caracteres_Aide_S[] = { // Commence à ' '
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 132, 133, 134, 135, 136, 137, 138,
139, 140, 141, 142, 143, 144, 145, 0, 0, 0,
0, 146, 0, 106, 107, 108, 109, 110, 111, 112,
113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
123, 124, 125, 126, 127, 128, 129, 130, 131 };
// Table de caractères Titres (demi-ligne supérieure)
static const int Caracteres_Aide_Titre_haut[] = { // Commence à ' '
126+147,
126+147,
126+147,
126+147,
126+147,
126+147,
126+147,
126+147,
126+147,
126+147,
126+147,
126+147,
126+147,
96+147, // -
98+147, // .
100+147, // /
102+147, // 0
104+147, // 1
106+147, // 2
108+147, // 3
110+147, // 4
112+147, // 5
114+147, // 6
116+147, // 7
118+147, // 8
120+147, // 9
122+147, // :
126+147,
126+147,
126+147,
126+147,
124+147, // ?// ?
126+147,
0+147, // A
2+147, // B
4+147, // C
6+147, // D
8+147, // E
10+147, // F
12+147, // G
14+147, // H
16+147, // I
18+147, // J
20+147, // K
22+147, // L
24+147, // M
26+147, // N
28+147, // O
30+147, // P
32+147, // Q
34+147, // R
36+147, // S
38+147, // T
40+147, // U
42+147, // V
88+147, // W
90+147, // X
92+147, // Y
94+147 // Z
};
// Table de caractères Titres (demi-ligne supérieure)
static const int Caracteres_Aide_Titre_bas[] = { // Commence à ' '
126+147+40,
126+147+40,
126+147+40,
126+147+40,
126+147+40,
126+147+40,
126+147+40,
126+147+40,
126+147+40,
126+147+40,
126+147+40,
126+147+40,
126+147+40,
96+147+40, // -
98+147+40, // .
100+147+40, // /
102+147+40, // 0
104+147+40, // 1
106+147+40, // 2
108+147+40, // 3
110+147+40, // 4
112+147+40, // 5
114+147+40, // 6
116+147+40, // 7
118+147+40, // 8
120+147+40, // 9
122+147+40, // :
126+147+40,
126+147+40,
126+147+40,
126+147+40,
124+147+40, // ?
126+147+40,
0+147+44, // A
2+147+44, // B
4+147+44, // C
6+147+44, // D
8+147+44, // E
10+147+44, // F
12+147+44, // G
14+147+44, // H
16+147+44, // I
18+147+44, // J
20+147+44, // K
22+147+44, // L
24+147+44, // M
26+147+44, // N
28+147+44, // O
30+147+44, // P
32+147+44, // Q
34+147+44, // R
36+147+44, // S
38+147+44, // T
40+147+44, // U
42+147+44, // V
88+147+40, // W
90+147+40, // X
92+147+40, // Y
94+147+40 // Z
};
// Quelques formules magiques:
#define AIDE_TEXTE(x) {'N', x, 0},
// Génère une ligne 'N' (Normale)

View File

@ -321,14 +321,14 @@ void Print_general(short X,short Y,char * Chaine,byte Couleur_texte,byte Couleur
byte Repeat_Menu_Facteur_Y;
Reel_Y=Y;
for (Pos_Y=0;Pos_Y<8;Pos_Y++)
for (Pos_Y=0;Pos_Y<8<<3;Pos_Y+=1<<3)
{
Reel_X=0; // Position dans le buffer
for (Indice=0;Chaine[Indice]!='\0';Indice++)
{
// Pointeur sur le premier pixel du caractère
Caractere=Fonte+(((unsigned char)Chaine[Indice])<<6);
for (Pos_X=0;Pos_X<8<<3;Pos_X+=1<<3)
for (Pos_X=0;Pos_X<8;Pos_X+=1)
for (Repeat_Menu_Facteur_X=0;Repeat_Menu_Facteur_X<Menu_Facteur_X*Pixel_width;Repeat_Menu_Facteur_X++)
Buffer_de_ligne_horizontale[Reel_X++]=*(Caractere+Pos_X+Pos_Y)?Couleur_texte:Couleur_fond;
}
@ -363,10 +363,10 @@ void Print_char_transparent_dans_fenetre(short Pos_X,short Pos_Y,unsigned char C
Pos_X=(Pos_X*Menu_Facteur_X)+Fenetre_Pos_X;
Pos_Y=(Pos_Y*Menu_Facteur_Y)+Fenetre_Pos_Y;
for (X=0;X<8;X++)
for (Y=0;Y<8;Y++)
for (Y=0;Y<8;Y++)
for (X=0;X<8;X++)
{
if (*(Fonte+((int)Caractere<<6)+(X<<3)+Y))
if (*(Fonte+((int)Caractere<<6)+(Y<<3)+X))
Block(Pos_X+(X*Menu_Facteur_X), Pos_Y+(Y*Menu_Facteur_Y),
Menu_Facteur_X, Menu_Facteur_Y, Couleur);
}
@ -2330,31 +2330,52 @@ void Calculer_couleurs_menu_optimales(struct Composantes * Palette)
|| (CM_Noir !=Old_Noir )
|| (CM_Trans!=Old_Trans) )
{
// Sprites du curseur
// Sprites du curseur
for (K=0; K<NB_SPRITES_CURSEUR; K++)
for (J=0; J<HAUTEUR_SPRITE_CURSEUR; J++)
for (I=0; I<LARGEUR_SPRITE_CURSEUR; I++)
Remap_pixel(&SPRITE_CURSEUR[K][J][I]);
// Le menu
// Le menu
for (J=0; J<HAUTEUR_MENU; J++)
for (I=0; I<LARGEUR_MENU; I++)
Remap_pixel(&BLOCK_MENU[J][I]);
// Sprites du menu
// Sprites du menu
for (K=0; K<NB_SPRITES_MENU; K++)
for (J=0; J<HAUTEUR_SPRITE_MENU; J++)
for (I=0; I<LARGEUR_SPRITE_MENU; I++)
Remap_pixel(&SPRITE_MENU[K][J][I]);
// Sprites d'effets
// Sprites d'effets
for (K=0; K<NB_SPRITES_EFFETS; K++)
for (J=0; J<HAUTEUR_SPRITE_MENU; J++)
for (I=0; I<LARGEUR_SPRITE_MENU; I++)
Remap_pixel(&SPRITE_EFFET[K][J][I]);
// Fonte de l'aide
for (K=0; K<315; K++)
// Fontes de l'aide
for (K=0; K<256; K++)
for (J=0; J<8; J++)
for (I=0; I<6; I++)
Remap_pixel(&Fonte_help[K][I][J]);
// Sprites de lecteurs (drives)
Remap_pixel(&Fonte_help_norm[K][I][J]);
for (K=0; K<256; K++)
for (J=0; J<8; J++)
for (I=0; I<6; I++)
Remap_pixel(&Fonte_help_bold[K][I][J]);
for (K=0; K<64; K++)
for (J=0; J<8; J++)
for (I=0; I<6; I++)
Remap_pixel(&Fonte_help_t1[K][I][J]);
for (K=0; K<64; K++)
for (J=0; J<8; J++)
for (I=0; I<6; I++)
Remap_pixel(&Fonte_help_t2[K][I][J]);
for (K=0; K<64; K++)
for (J=0; J<8; J++)
for (I=0; I<6; I++)
Remap_pixel(&Fonte_help_t3[K][I][J]);
for (K=0; K<64; K++)
for (J=0; J<8; J++)
for (I=0; I<6; I++)
Remap_pixel(&Fonte_help_t4[K][I][J]);
// Sprites de lecteurs (drives)
for (K=0; K<NB_SPRITES_DRIVES; K++)
for (J=0; J<HAUTEUR_SPRITE_DRIVE; J++)
for (I=0; I<LARGEUR_SPRITE_DRIVE; I++)