diff --git a/Makefile b/Makefile index d4d03371..94616602 100644 --- a/Makefile +++ b/Makefile @@ -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/* diff --git a/aide.c b/aide.c index 5de66893..5fbd770a 100644 --- a/aide.c +++ b/aide.c @@ -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'_' || 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=Position_lien && Indice_de_caractere<(Position_lien+Taille_lien)) diff --git a/const.h b/const.h index 8774c12c..4c8a5706 100644 --- a/const.h +++ b/const.h @@ -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 diff --git a/gfx2.dat b/gfx2.dat deleted file mode 100644 index 54f80b6a..00000000 Binary files a/gfx2.dat and /dev/null differ diff --git a/gfx2def.ini b/gfx2def.ini new file mode 100644 index 00000000..9f43a596 --- /dev/null +++ b/gfx2def.ini @@ -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') diff --git a/gfx2gui.gif b/gfx2gui.gif new file mode 100644 index 00000000..09d073ce Binary files /dev/null and b/gfx2gui.gif differ diff --git a/global.h b/global.h index b00d5fb4..47502213 100644 --- a/global.h +++ b/global.h @@ -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: diff --git a/init.c b/init.c index 92871de4..9b7a8996 100644 --- a/init.c +++ b/init.c @@ -32,6 +32,7 @@ #include #include #include +#include #if defined(__WIN32__) #include // 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 (Yh); + + 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 (Xw); + + 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; Yformat || 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>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; ipixels))[(Y*Bmp->pitch+X)]; +} diff --git a/sdlscreen.h b/sdlscreen.h index 20373759..0ed1081f 100644 --- a/sdlscreen.h +++ b/sdlscreen.h @@ -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 diff --git a/tables_aide.h b/tables_aide.h index 670362d5..82712bb9 100644 --- a/tables_aide.h +++ b/tables_aide.h @@ -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) diff --git a/windows.c b/windows.c index 6474a10f..ba6489ea 100644 --- a/windows.c +++ b/windows.c @@ -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