Save/Load: Allows long filenames of mixed case. File extensions lowercase by default. Confirmation of Deleting a file no longer hangs.

git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@150 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Yves Rizoud 2008-09-15 00:32:08 +00:00
parent e4d2764ee2
commit a3f2b7c2f8
3 changed files with 234 additions and 255 deletions

View File

@ -722,14 +722,14 @@ void Bouton_Settings(void)
Ouvrir_fenetre(307,182,"Settings"); Ouvrir_fenetre(307,182,"Settings");
// On commence par dessiner tous les dres // On commence par dessiner tous les Cadres
Fenetre_Afficher_cadre( 5, 16,157,30); Fenetre_Afficher_cadre( 5, 16,157,30);
Fenetre_Afficher_cadre( 5, 47,157,17); Fenetre_Afficher_cadre( 5, 47,157,17);
Fenetre_Afficher_cadre(163, 16,139,60); Fenetre_Afficher_cadre(163, 16,139,60);
Fenetre_Afficher_cadre(253, 77, 49,82); Fenetre_Afficher_cadre(253, 77, 49,82);
Fenetre_Afficher_cadre( 5, 77,247,82); // |_ Misc. Fenetre_Afficher_cadre( 5, 77,247,82); // |_ Misc.
Fenetre_Afficher_cadre( 5, 65,157,14); // | Fenetre_Afficher_cadre( 5, 65,157,14); // |
// On découpe le dre bizarre des "Miscellaneous" // On découpe le Cadre bizarre des "Miscellaneous"
Pixel_dans_fenetre(6,77,CM_Blanc); Pixel_dans_fenetre(6,77,CM_Blanc);
Pixel_dans_fenetre(5,78,CM_Fonce); Pixel_dans_fenetre(5,78,CM_Fonce);
Block(Fenetre_Pos_X+(7*Menu_Facteur_X),Fenetre_Pos_Y+(77*Menu_Facteur_Y), Block(Fenetre_Pos_X+(7*Menu_Facteur_X),Fenetre_Pos_Y+(77*Menu_Facteur_Y),
@ -2352,13 +2352,13 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
Fenetre_Definir_bouton_normal(125,139+FILENAMESPACE,51,14,"Cancel",0,1,0x0001); // 2 Fenetre_Definir_bouton_normal(125,139+FILENAMESPACE,51,14,"Cancel",0,1,0x0001); // 2
Fenetre_Definir_bouton_normal(125, 89+FILENAMESPACE,51,14,"Delete",0,1,0x0053); // 3 Fenetre_Definir_bouton_normal(125, 89+FILENAMESPACE,51,14,"Delete",0,1,0x0053); // 3
// Câdre autour des formats // Cadre autour des formats
Fenetre_Afficher_cadre( 7, 51,103, 35); Fenetre_Afficher_cadre( 7, 51,103, 35);
// Câdre autour des infos sur le fichier de dessin // Cadre autour des infos sur le fichier de dessin
Fenetre_Afficher_cadre(116, 51,187, 35); Fenetre_Afficher_cadre(116, 51,187, 35);
// Câdre autour de la preview // Cadre autour de la preview
Fenetre_Afficher_cadre_creux(179,88+FILENAMESPACE,124,84); Fenetre_Afficher_cadre_creux(179,88+FILENAMESPACE,124,84);
// Câdre autour du fileselector // Cadre autour du fileselector
Fenetre_Afficher_cadre_creux( 7,88+FILENAMESPACE,100,84); Fenetre_Afficher_cadre_creux( 7,88+FILENAMESPACE,100,84);
Fenetre_Definir_bouton_special(9,90+FILENAMESPACE,96,80); // 4 Fenetre_Definir_bouton_special(9,90+FILENAMESPACE,96,80); // 4
@ -2458,6 +2458,7 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
do do
{ {
SDL_PumpEvents();
Etat_Du_Clavier=SDL_GetKeyState(&Bidon); Etat_Du_Clavier=SDL_GetKeyState(&Bidon);
} while ((Etat_Du_Clavier[SDLK_y]==0) && (Etat_Du_Clavier[SDLK_n]==0) && (Etat_Du_Clavier[SDLK_ESCAPE]==0)); } while ((Etat_Du_Clavier[SDLK_y]==0) && (Etat_Du_Clavier[SDLK_n]==0) && (Etat_Du_Clavier[SDLK_ESCAPE]==0));
@ -2466,7 +2467,7 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
Menu_Facteur_X*48,Menu_Facteur_Y*24,CM_Clair); Menu_Facteur_X*48,Menu_Facteur_Y*24,CM_Clair);
// Si l'utilisateur confirme, // Si l'utilisateur confirme,
if (Touche=='Y') if (Etat_Du_Clavier[SDLK_y])
{ {
// Si c'est un fichier // Si c'est un fichier
if (Principal_File_list_Position+Principal_File_list_Decalage>=Liste_Nb_repertoires) if (Principal_File_list_Position+Principal_File_list_Decalage>=Liste_Nb_repertoires)

354
global.h
View File

@ -6,7 +6,7 @@
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
// // // //
// Ce fichier contient les dÚclaration des variables globales // // Ce fichier contient les déclaration des variables globales //
// // // //
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
@ -59,7 +59,7 @@ GLOBAL struct S_Config
byte Resolution_par_defaut; byte Resolution_par_defaut;
} Config; } Config;
// Tableau des touches spÚciales // Tableau des touches spéciales
GLOBAL word Config_Touche[NB_TOUCHES_SPECIALES]; GLOBAL word Config_Touche[NB_TOUCHES_SPECIALES];
@ -71,7 +71,7 @@ struct S_Mode_video
word Facteur_X; word Facteur_X;
word Facteur_Y; word Facteur_Y;
char Ratio[5]; char Ratio[5];
signed char Refresh; // <0 => entrelacÚ signed char Refresh; // <0 => entrelacé
word Mode_VESA_de_base; word Mode_VESA_de_base;
void * Pointeur; void * Pointeur;
byte Etat; // 0:Cool 1:OK ; 2:Bof ; 3:Naze ; si on rajoute +128 => incompatible byte Etat; // 0:Cool 1:OK ; 2:Bof ; 3:Naze ; si on rajoute +128 => incompatible
@ -81,16 +81,16 @@ GLOBAL struct S_Mode_video Mode_video[NB_MODES_VIDEO];
GLOBAL struct GLOBAL struct
{ {
byte Granularite; // Facteur de gestion de la granularitÚ byte Granularite; // Facteur de gestion de la granularité
byte Code_fenetres; // Utilisation des fenêtres: 0=AA 1=BB 2=AB 3=BA byte Code_fenetres; // Utilisation des fenˆtres: 0=AA 1=BB 2=AB 3=BA
byte * WinFuncPtr; byte * WinFuncPtr;
byte * Adresse_physique_LFB; // Si = 0 => Pas de LFB byte * Adresse_physique_LFB; // Si = 0 => Pas de LFB
dword Taille_LFB; // Taille de la mÚmoire LFB dword Taille_LFB; // Taille de la mémoire LFB
} VESA_Mode_Infos[4]; } VESA_Mode_Infos[4];
// Palette par dÚfaut // Palette par défaut
GLOBAL T_Palette Palette_defaut; GLOBAL T_Palette Palette_defaut;
@ -103,10 +103,10 @@ GLOBAL byte CM_Blanc;
GLOBAL byte CM_Trans; GLOBAL byte CM_Trans;
GLOBAL struct Composantes Coul_menu_pref[4]; GLOBAL struct Composantes Coul_menu_pref[4];
// Etat des entrÚes // Etat des entrées
GLOBAL word Mouse_X; // Abscisse de la souris GLOBAL word Mouse_X; // Abscisse de la souris
GLOBAL word Mouse_Y; // OrdonnÚe de la souris GLOBAL word Mouse_Y; // Ordonnée de la souris
GLOBAL byte Mouse_K; // Etat des boutons de la souris GLOBAL byte Mouse_K; // Etat des boutons de la souris
GLOBAL word Touche; GLOBAL word Touche;
GLOBAL Uint8* Etat_Du_Clavier; // Scancode de la touche en cours et etat des touches de ctrl GLOBAL Uint8* Etat_Du_Clavier; // Scancode de la touche en cours et etat des touches de ctrl
@ -117,20 +117,20 @@ GLOBAL byte Mouse_Facteur_de_correction_Y;
GLOBAL byte Autoriser_changement_de_couleur_pendant_operation; GLOBAL byte Autoriser_changement_de_couleur_pendant_operation;
// DonnÚes sur le curseur // Données sur le curseur
GLOBAL byte Forme_curseur; GLOBAL byte Forme_curseur;
GLOBAL byte Forme_curseur_avant_fenetre; // Forme du curseur avant l'ouverture d'une fenêtre GLOBAL byte Forme_curseur_avant_fenetre; // Forme du curseur avant l'ouverture d'une fenˆtre
GLOBAL byte Forcer_affichage_curseur; // Forcer l'affichage du curseur au prochain Get_input(); GLOBAL byte Forcer_affichage_curseur; // Forcer l'affichage du curseur au prochain Get_input();
GLOBAL byte Cacher_curseur; GLOBAL byte Cacher_curseur;
GLOBAL byte Curseur_dans_menu; // BoolÚen "Le curseur se trouve dans le menu" GLOBAL byte Curseur_dans_menu; // Booléen "Le curseur se trouve dans le menu"
GLOBAL byte Curseur_dans_menu_precedent; // BoolÚen "Le curseur se trouvait prÚcÚdemment dans le menu" GLOBAL byte Curseur_dans_menu_precedent; // Booléen "Le curseur se trouvait précédemment dans le menu"
GLOBAL word Curseur_Decalage_X[NB_SPRITES_CURSEUR]; // CoordonnÚes X du point sensible de curseurs en sprite GLOBAL word Curseur_Decalage_X[NB_SPRITES_CURSEUR]; // Coordonnées X du point sensible de curseurs en sprite
GLOBAL word Curseur_Decalage_Y[NB_SPRITES_CURSEUR]; // CoordonnÚes Y du point sensible de curseurs en sprite GLOBAL word Curseur_Decalage_Y[NB_SPRITES_CURSEUR]; // Coordonnées Y du point sensible de curseurs en sprite
GLOBAL byte SPRITE_CURSEUR[NB_SPRITES_CURSEUR][HAUTEUR_SPRITE_CURSEUR][LARGEUR_SPRITE_CURSEUR]; // Dessins des sprites de curseur GLOBAL byte SPRITE_CURSEUR[NB_SPRITES_CURSEUR][HAUTEUR_SPRITE_CURSEUR][LARGEUR_SPRITE_CURSEUR]; // Dessins des sprites de curseur
GLOBAL byte FOND_CURSEUR[HAUTEUR_SPRITE_CURSEUR][LARGEUR_SPRITE_CURSEUR]; // Contenu du dessous du curseur GLOBAL byte FOND_CURSEUR[HAUTEUR_SPRITE_CURSEUR][LARGEUR_SPRITE_CURSEUR]; // Contenu du dessous du curseur
// DonnÚes sur le pinceau // Données sur le pinceau
GLOBAL byte Pinceau_Forme; GLOBAL byte Pinceau_Forme;
GLOBAL byte Pinceau_Forme_avant_fill; GLOBAL byte Pinceau_Forme_avant_fill;
@ -153,62 +153,62 @@ GLOBAL short Pinceau_Decalage_Y;
// Commandes graphiques // Commandes graphiques
GLOBAL fonction_afficheur Pixel; // Affiche un point à l'écran GLOBAL fonction_afficheur Pixel; // Affiche un point … l'cran
GLOBAL fonction_afficheur Pixel_dans_menu;// Affiche un point dans le menu (ou pas si le menu est invisible) GLOBAL fonction_afficheur Pixel_dans_menu;// Affiche un point dans le menu (ou pas si le menu est invisible)
GLOBAL fonction_lecteur Lit_pixel; // Teste la couleur d'un pixel dans l'Úcran GLOBAL fonction_lecteur Lit_pixel; // Teste la couleur d'un pixel dans l'écran
GLOBAL fonction_effaceur Clear_screen; // Efface rapidement tout l'écran (en faisant attention de ne pas effacer le menu) GLOBAL fonction_effaceur Clear_screen; // Efface rapidement tout l'cran (en faisant attention de ne pas effacer le menu)
GLOBAL fonction_display Display_screen; // Affiche rapidement tout l'écran (en faisant attention de ne pas effacer le menu) GLOBAL fonction_display Display_screen; // Affiche rapidement tout l'cran (en faisant attention de ne pas effacer le menu)
GLOBAL fonction_block Block; // Affiche rapidement un bloc à l'écran GLOBAL fonction_block Block; // Affiche rapidement un bloc … l'cran
GLOBAL fonction_block Block_Fast; // Affiche rapidement un bloc à l'écran sans rafraichir GLOBAL fonction_block Block_Fast; // Affiche rapidement un bloc … l'cran sans rafraichir
GLOBAL fonction_afficheur Pixel_Preview_Normal; // Affiche un point de l'image à l'Úcran en mode normal (pas en mode loupe) GLOBAL fonction_afficheur Pixel_Preview_Normal; // Affiche un point de l'image … l'écran en mode normal (pas en mode loupe)
GLOBAL fonction_afficheur Pixel_Preview_Loupe; // Affiche un point de l'image à l'Úcran en mode loupe GLOBAL fonction_afficheur Pixel_Preview_Loupe; // Affiche un point de l'image … l'écran en mode loupe
GLOBAL fonction_afficheur Pixel_Preview; // Affiche un point de l'image à l'Úcran en fonction de l'Útat du mode loupe GLOBAL fonction_afficheur Pixel_Preview; // Affiche un point de l'image … l'écran en fonction de l'état du mode loupe
GLOBAL fonction_Ligne_XOR Ligne_horizontale_XOR;// Affiche une ligne horizontale en XOR (pour placer la loupe) GLOBAL fonction_Ligne_XOR Ligne_horizontale_XOR;// Affiche une ligne horizontale en XOR (pour placer la loupe)
GLOBAL fonction_Ligne_XOR Ligne_verticale_XOR; // Affiche une ligne verticale en XOR (pour placer la loupe) GLOBAL fonction_Ligne_XOR Ligne_verticale_XOR; // Affiche une ligne verticale en XOR (pour placer la loupe)
GLOBAL fonction_display_brush_Color Display_brush_Color; // Affiche une partie de la brosse en couleur GLOBAL fonction_display_brush_Color Display_brush_Color; // Affiche une partie de la brosse en couleur
GLOBAL fonction_display_brush_Mono Display_brush_Mono; // Affiche une partie de la brosse en monochrome GLOBAL fonction_display_brush_Mono Display_brush_Mono; // Affiche une partie de la brosse en monochrome
GLOBAL fonction_display_brush_Color Clear_brush; // Efface la partie de la brosse affichÚe à l'Úcran GLOBAL fonction_display_brush_Color Clear_brush; // Efface la partie de la brosse affichée … l'écran
GLOBAL fonction_remap Remap_screen; // Remappe une partie de l'Úcran avec les nouvelles couleurs du menu GLOBAL fonction_remap Remap_screen; // Remappe une partie de l'écran avec les nouvelles couleurs du menu
GLOBAL fonction_procsline Afficher_ligne; // Afficher une ligne GLOBAL fonction_procsline Afficher_ligne; // Afficher une ligne
GLOBAL fonction_procsline Lire_ligne; // Afficher ou lire une ligne GLOBAL fonction_procsline Lire_ligne; // Afficher ou lire une ligne
GLOBAL fonction_display_zoom Display_zoomed_screen; // Affiche rapidement toute la partie zoomÚe à l'Úcran (en faisant attention de ne pas effacer le menu) GLOBAL fonction_display_zoom Display_zoomed_screen; // Affiche rapidement toute la partie zoomée … l'écran (en faisant attention de ne pas effacer le menu)
GLOBAL fonction_display_brush_Color_zoom Display_brush_Color_zoom; GLOBAL fonction_display_brush_Color_zoom Display_brush_Color_zoom;
GLOBAL fonction_display_brush_Mono_zoom Display_brush_Mono_zoom; GLOBAL fonction_display_brush_Mono_zoom Display_brush_Mono_zoom;
GLOBAL fonction_display_brush_Color_zoom Clear_brush_zoom; GLOBAL fonction_display_brush_Color_zoom Clear_brush_zoom;
// DonnÚes sur les dimensions de l'Úcran // Données sur les dimensions de l'écran
GLOBAL int Resolution_actuelle; // RÚsolution graphique courante GLOBAL int Resolution_actuelle; // Résolution graphique courante
GLOBAL short Ecran_original_X; // |_ Dimensions de l'Úcran d'origine de GLOBAL short Ecran_original_X; // |_ Dimensions de l'écran d'origine de
GLOBAL short Ecran_original_Y; // | l'image qui vient d'être chargÚe. GLOBAL short Ecran_original_Y; // | l'image qui vient d'ˆtre chargée.
GLOBAL short Largeur_ecran; // Largeur de l'Úcran GLOBAL short Largeur_ecran; // Largeur de l'écran
GLOBAL short Hauteur_ecran; // Hauteur de l'Úcran GLOBAL short Hauteur_ecran; // Hauteur de l'écran
GLOBAL short Limite_Haut; // | GLOBAL short Limite_Haut; // |
GLOBAL short Limite_Bas; // |_ Limites dans lesquelles GLOBAL short Limite_Bas; // |_ Limites dans lesquelles
GLOBAL short Limite_Gauche; // | on peut Úcrire GLOBAL short Limite_Gauche; // | on peut écrire
GLOBAL short Limite_Droite; // | GLOBAL short Limite_Droite; // |
GLOBAL short Limite_visible_Bas; // |_ Derniers points visibles GLOBAL short Limite_visible_Bas; // |_ Derniers points visibles
GLOBAL short Limite_visible_Droite; // | "à l'image" GLOBAL short Limite_visible_Droite; // | " l'image"
GLOBAL short Limite_Haut_Zoom; // | GLOBAL short Limite_Haut_Zoom; // |
GLOBAL short Limite_Bas_Zoom; // |_ Limites dans lesquelles on peut GLOBAL short Limite_Bas_Zoom; // |_ Limites dans lesquelles on peut
GLOBAL short Limite_Gauche_Zoom; // | Úcrire dans la partie zoomÚe GLOBAL short Limite_Gauche_Zoom; // | écrire dans la partie zoomée
GLOBAL short Limite_Droite_Zoom; // | GLOBAL short Limite_Droite_Zoom; // |
GLOBAL short Limite_visible_Bas_Zoom; // |_ Derniers points visibles "à GLOBAL short Limite_visible_Bas_Zoom; // |_ Derniers points visibles "
GLOBAL short Limite_visible_Droite_Zoom; // | l'image" dans la partie zoomÚe GLOBAL short Limite_visible_Droite_Zoom; // | l'image" dans la partie zoomée
GLOBAL byte * Buffer_de_ligne_horizontale; // Buffer d'affichage de lignes GLOBAL byte * Buffer_de_ligne_horizontale; // Buffer d'affichage de lignes
// DonnÚes sur l'image actuelle: // Données sur l'image actuelle:
GLOBAL byte * Principal_Ecran; // Ecran virtuel courant GLOBAL byte * Principal_Ecran; // Ecran virtuel courant
GLOBAL T_Palette Principal_Palette; // Palette de l'Úcran en cours GLOBAL T_Palette Principal_Palette; // Palette de l'écran en cours
GLOBAL byte Principal_Image_modifiee; // L'image courante a ÚtÚ modifiÚe GLOBAL byte Principal_Image_modifiee; // L'image courante a été modifiée
GLOBAL short Principal_Largeur_image; // Largeur de l'image dans laquelle l'utilisateur dÚsire travailler GLOBAL short Principal_Largeur_image; // Largeur de l'image dans laquelle l'utilisateur désire travailler
GLOBAL short Principal_Hauteur_image; // Hauteur de l'image dans laquelle l'utilisateur dÚsire travailler GLOBAL short Principal_Hauteur_image; // Hauteur de l'image dans laquelle l'utilisateur désire travailler
GLOBAL short Principal_Decalage_X; // DÚcalage en X de l'Úcran par rapport au dÚbut de l'image GLOBAL short Principal_Decalage_X; // Décalage en X de l'écran par rapport au début de l'image
GLOBAL short Principal_Decalage_Y; // DÚcalage en Y de l'Úcran par rapport au dÚbut de l'image GLOBAL short Principal_Decalage_Y; // Décalage en Y de l'écran par rapport au début de l'image
GLOBAL short Ancien_Principal_Decalage_X; GLOBAL short Ancien_Principal_Decalage_X;
GLOBAL short Ancien_Principal_Decalage_Y; GLOBAL short Ancien_Principal_Decalage_Y;
@ -218,60 +218,60 @@ GLOBAL short Ancien_Principal_Decalage_Y;
GLOBAL char Principal_Repertoire_fichier[1024]; // |_ Nom complet = GLOBAL char Principal_Repertoire_fichier[1024]; // |_ Nom complet =
GLOBAL char Principal_Nom_fichier[256]; // | Repertoire_fichier+"\"+Nom_fichier GLOBAL char Principal_Nom_fichier[256]; // | Repertoire_fichier+"\"+Nom_fichier
GLOBAL byte Principal_Format_fichier; // Format auquel il faut lire et Úcrire le fichier GLOBAL byte Principal_Format_fichier; // Format auquel il faut lire et écrire le fichier
GLOBAL byte Principal_Format; // Format du fileselect GLOBAL byte Principal_Format; // Format du fileselect
GLOBAL short Principal_File_list_Position; // DÚbut de la partie affichÚe dans la liste de fichiers GLOBAL short Principal_File_list_Position; // Début de la partie affichée dans la liste de fichiers
GLOBAL short Principal_File_list_Decalage; // DÚcalage de la barre de sÚlection dans le fileselector GLOBAL short Principal_File_list_Decalage; // Décalage de la barre de sélection dans le fileselector
GLOBAL char Principal_Repertoire_courant[1024]; // RÚpertoire actuel sur disque GLOBAL char Principal_Repertoire_courant[1024]; // Répertoire actuel sur disque
GLOBAL char Principal_Commentaire[TAILLE_COMMENTAIRE+1]; // Commentaire de l'image GLOBAL char Principal_Commentaire[TAILLE_COMMENTAIRE+1]; // Commentaire de l'image
GLOBAL short Principal_Split; // Position en X du bord gauche du split de la loupe GLOBAL short Principal_Split; // Position en X du bord gauche du split de la loupe
GLOBAL short Principal_X_Zoom; // (Menu_Facteur_X) + Position en X du bord droit du split de la loupe GLOBAL short Principal_X_Zoom; // (Menu_Facteur_X) + Position en X du bord droit du split de la loupe
GLOBAL float Principal_Proportion_split; // Proportion de la zone non-zoomÚe par rapport à l'Úcran GLOBAL float Principal_Proportion_split; // Proportion de la zone non-zoomée par rapport … l'écran
// DonnÚes sur le brouillon: // Données sur le brouillon:
GLOBAL byte * Brouillon_Ecran; // Ecran virtuel brouillon GLOBAL byte * Brouillon_Ecran; // Ecran virtuel brouillon
GLOBAL T_Palette Brouillon_Palette; // Palette de l'Úcran de brouillon GLOBAL T_Palette Brouillon_Palette; // Palette de l'écran de brouillon
GLOBAL byte Brouillon_Image_modifiee; // Le brouillon a ÚtÚ modifiÚ GLOBAL byte Brouillon_Image_modifiee; // Le brouillon a été modifié
GLOBAL short Brouillon_Largeur_image; // Largeur du brouillon dans laquelle l'utilisateur dÚsire travailler GLOBAL short Brouillon_Largeur_image; // Largeur du brouillon dans laquelle l'utilisateur désire travailler
GLOBAL short Brouillon_Hauteur_image; // Hauteur du brouillon dans laquelle l'utilisateur dÚsire travailler GLOBAL short Brouillon_Hauteur_image; // Hauteur du brouillon dans laquelle l'utilisateur désire travailler
GLOBAL short Brouillon_Decalage_X; // DÚcalage en X du brouillon par rapport au dÚbut de l'image GLOBAL short Brouillon_Decalage_X; // Décalage en X du brouillon par rapport au début de l'image
GLOBAL short Brouillon_Decalage_Y; // DÚcalage en Y du brouillon par rapport au dÚbut de l'image GLOBAL short Brouillon_Decalage_Y; // Décalage en Y du brouillon par rapport au début de l'image
GLOBAL short Ancien_Brouillon_Decalage_X; GLOBAL short Ancien_Brouillon_Decalage_X;
GLOBAL short Ancien_Brouillon_Decalage_Y; GLOBAL short Ancien_Brouillon_Decalage_Y;
GLOBAL char Brouillon_Repertoire_fichier[TAILLE_CHEMIN_FICHIER]; // |_ Nom complet = GLOBAL char Brouillon_Repertoire_fichier[TAILLE_CHEMIN_FICHIER]; // |_ Nom complet =
GLOBAL char Brouillon_Nom_fichier[TAILLE_CHEMIN_FICHIER]; // | Repertoire_fichier+"\"+Nom_fichier GLOBAL char Brouillon_Nom_fichier[TAILLE_CHEMIN_FICHIER]; // | Repertoire_fichier+"\"+Nom_fichier
GLOBAL byte Brouillon_Format_fichier; // Format auquel il faut lire et Úcrire le fichier GLOBAL byte Brouillon_Format_fichier; // Format auquel il faut lire et écrire le fichier
GLOBAL byte Brouillon_Format; // Format du fileselect GLOBAL byte Brouillon_Format; // Format du fileselect
GLOBAL short Brouillon_File_list_Position; // DÚbut de la partie affichÚe dans la liste de fichiers GLOBAL short Brouillon_File_list_Position; // Début de la partie affichée dans la liste de fichiers
GLOBAL short Brouillon_File_list_Decalage; // DÚcalage de la barre de sÚlection dans le fileselector GLOBAL short Brouillon_File_list_Decalage; // Décalage de la barre de sélection dans le fileselector
GLOBAL char Brouillon_Repertoire_courant[TAILLE_CHEMIN_FICHIER]; // RÚpertoire actuel sur disque GLOBAL char Brouillon_Repertoire_courant[TAILLE_CHEMIN_FICHIER]; // Répertoire actuel sur disque
GLOBAL char Brouillon_Commentaire[TAILLE_COMMENTAIRE+1]; // Commentaire de l'image GLOBAL char Brouillon_Commentaire[TAILLE_COMMENTAIRE+1]; // Commentaire de l'image
GLOBAL short Brouillon_Split; // Position en X du bord gauche du split de la loupe GLOBAL short Brouillon_Split; // Position en X du bord gauche du split de la loupe
GLOBAL short Brouillon_X_Zoom; // (Menu_Facteur_X) + Position en X du bord droit du split de la loupe GLOBAL short Brouillon_X_Zoom; // (Menu_Facteur_X) + Position en X du bord droit du split de la loupe
GLOBAL float Brouillon_Proportion_split; // Proportion de la zone non-zoomÚe par rapport à l'Úcran GLOBAL float Brouillon_Proportion_split; // Proportion de la zone non-zoomée par rapport … l'écran
GLOBAL byte Brouillon_Loupe_Mode; // On est en mode loupe dans le brouillon GLOBAL byte Brouillon_Loupe_Mode; // On est en mode loupe dans le brouillon
GLOBAL word Brouillon_Loupe_Facteur; // Facteur de zoom dans le brouillon GLOBAL word Brouillon_Loupe_Facteur; // Facteur de zoom dans le brouillon
GLOBAL word Brouillon_Loupe_Hauteur; // Largeur de la fenêtre de zoom dans le brouillon GLOBAL word Brouillon_Loupe_Hauteur; // Largeur de la fenˆtre de zoom dans le brouillon
GLOBAL word Brouillon_Loupe_Largeur; // Hauteur de la fenêtre de zoom dans le brouillon GLOBAL word Brouillon_Loupe_Largeur; // Hauteur de la fenˆtre de zoom dans le brouillon
GLOBAL short Brouillon_Loupe_Decalage_X;// Decalage horizontal de la fenêtre de zoom dans le brouillon GLOBAL short Brouillon_Loupe_Decalage_X;// Decalage horizontal de la fenˆtre de zoom dans le brouillon
GLOBAL short Brouillon_Loupe_Decalage_Y;// Decalage vertical de la fenêtre de zoom dans le brouillon GLOBAL short Brouillon_Loupe_Decalage_Y;// Decalage vertical de la fenˆtre de zoom dans le brouillon
GLOBAL byte Masque_copie_couleurs[256]; // Tableau des couleurs à copier vers le brouillon GLOBAL byte Masque_copie_couleurs[256]; // Tableau des couleurs copier vers le brouillon
// Sauvegarde de l'image: // Sauvegarde de l'image:
GLOBAL byte * Ecran_backup; // Sauvegarde de l'Úcran virtuel courant GLOBAL byte * Ecran_backup; // Sauvegarde de l'écran virtuel courant
GLOBAL S_Liste_de_pages * Principal_Backups; // Liste des pages de backup de la page principale GLOBAL S_Liste_de_pages * Principal_Backups; // Liste des pages de backup de la page principale
GLOBAL S_Liste_de_pages * Brouillon_Backups; // Liste des pages de backup de la page de brouillon GLOBAL S_Liste_de_pages * Brouillon_Backups; // Liste des pages de backup de la page de brouillon
// DonnÚes sur la brosse: // Données sur la brosse:
GLOBAL byte * Brosse; // Sprite de la brosse GLOBAL byte * Brosse; // Sprite de la brosse
GLOBAL word Brosse_Decalage_X; // Centre horizontal de la brosse GLOBAL word Brosse_Decalage_X; // Centre horizontal de la brosse
@ -282,7 +282,7 @@ GLOBAL word Brosse_Hauteur; // Hauteur de la brosse
GLOBAL char Brosse_Repertoire_fichier[TAILLE_CHEMIN_FICHIER];// | GLOBAL char Brosse_Repertoire_fichier[TAILLE_CHEMIN_FICHIER];// |
GLOBAL char Brosse_Nom_fichier[TAILLE_CHEMIN_FICHIER]; // | GLOBAL char Brosse_Nom_fichier[TAILLE_CHEMIN_FICHIER]; // |
GLOBAL byte Brosse_Format_fichier; // | Infos sur le GLOBAL byte Brosse_Format_fichier; // | Infos sur le
GLOBAL byte Brosse_Format; // |_ sÚlecteur de GLOBAL byte Brosse_Format; // |_ sélecteur de
GLOBAL short Brosse_File_list_Position; // | fichiers de la GLOBAL short Brosse_File_list_Position; // | fichiers de la
GLOBAL short Brosse_File_list_Decalage; // | brosse. GLOBAL short Brosse_File_list_Decalage; // | brosse.
GLOBAL char Brosse_Repertoire_courant[256]; // | GLOBAL char Brosse_Repertoire_courant[256]; // |
@ -292,28 +292,28 @@ GLOBAL byte Brosse_Centre_rotation_defini; // | Infos sur le
GLOBAL short Brosse_Centre_rotation_X; // |- centre de rotation GLOBAL short Brosse_Centre_rotation_X; // |- centre de rotation
GLOBAL short Brosse_Centre_rotation_Y; // | de la brosse GLOBAL short Brosse_Centre_rotation_Y; // | de la brosse
// DonnÚes sur le menu // Données sur le menu
GLOBAL byte Menu_visible; // Le menu est actif à l'Úcran GLOBAL byte Menu_visible; // Le menu est actif … l'écran
GLOBAL word Menu_Ordonnee; // OrdonnÚe où commence le menu GLOBAL word Menu_Ordonnee; // Ordonnée o— commence le menu
GLOBAL word Menu_Ordonnee_Texte; // OrdonnÚe où commence le texte dans le menu GLOBAL word Menu_Ordonnee_Texte; // Ordonnée o— commence le texte dans le menu
GLOBAL word Menu_Facteur_X; // Facteur de grossissement du menu en X GLOBAL word Menu_Facteur_X; // Facteur de grossissement du menu en X
GLOBAL word Menu_Facteur_Y; // Facteur de grossissement du menu en Y GLOBAL word Menu_Facteur_Y; // Facteur de grossissement du menu en Y
GLOBAL word Menu_Taille_couleur; // Taille d'une couleur de la palette du menu GLOBAL word Menu_Taille_couleur; // Taille d'une couleur de la palette du menu
// DonnÚes sur la fenêtre de menu // Données sur la fenˆtre de menu
GLOBAL byte Une_fenetre_est_ouverte; GLOBAL byte Une_fenetre_est_ouverte;
GLOBAL word Fenetre_Pos_X; // Position du bord gauche de la fenêtre dans l'Úcran GLOBAL word Fenetre_Pos_X; // Position du bord gauche de la fenˆtre dans l'écran
GLOBAL word Fenetre_Pos_Y; // Position du bord haut de la fenêtre dans l'Úcran GLOBAL word Fenetre_Pos_Y; // Position du bord haut de la fenˆtre dans l'écran
GLOBAL word Fenetre_Largeur; // Largeur de la fenêtre GLOBAL word Fenetre_Largeur; // Largeur de la fenˆtre
GLOBAL word Fenetre_Hauteur; // Hauteur de la fenêtre GLOBAL word Fenetre_Hauteur; // Hauteur de la fenˆtre
GLOBAL byte Menu_visible_avant_fenetre; // Le menu Útait visible avant d'ouvir une fenêtre GLOBAL byte Menu_visible_avant_fenetre; // Le menu était visible avant d'ouvir une fenˆtre
GLOBAL word Menu_Ordonnee_avant_fenetre; // OrdonnÚe du menu avant d'ouvrir une fenêtre GLOBAL word Menu_Ordonnee_avant_fenetre; // Ordonnée du menu avant d'ouvrir une fenˆtre
GLOBAL byte Cacher_pinceau_avant_fenetre;// Le pinceau Útatit dÚjà cachÚ avant l'ouverture de la fenetre? GLOBAL byte Cacher_pinceau_avant_fenetre;// Le pinceau étatit déj… caché avant l'ouverture de la fenetre?
GLOBAL word Nb_boutons_fenetre; GLOBAL word Nb_boutons_fenetre;
GLOBAL struct Fenetre_Bouton_normal * Fenetre_Liste_boutons_normal; GLOBAL struct Fenetre_Bouton_normal * Fenetre_Liste_boutons_normal;
@ -326,44 +326,44 @@ GLOBAL int Fenetre_Attribut2;
// DÚfinition des boutons //////////////////////////////////////////////////// // Définition des boutons ////////////////////////////////////////////////////
GLOBAL struct GLOBAL struct
{ {
// Informations sur l'aspect du bouton (graphisme): // Informations sur l'aspect du bouton (graphisme):
word Decalage_X; // DÚcalage par rapport à la gauche du menu word Decalage_X; // Décalage par rapport … la gauche du menu
word Decalage_Y; // DÚcalage par rapport au haut du menu word Decalage_Y; // Décalage par rapport au haut du menu
word Largeur; // Largeur du bouton word Largeur; // Largeur du bouton
word Hauteur; // Hauteur du bouton word Hauteur; // Hauteur du bouton
byte Enfonce; // Le bouton est enfoncÚ byte Enfonce; // Le bouton est enfoncé
byte Forme; // Forme du bouton byte Forme; // Forme du bouton
// Information sur les clicks de la souris: // Information sur les clicks de la souris:
fonction_action Gauche; // Action dÚclenchÚe par un click gauche sur le bouton fonction_action Gauche; // Action déclenchée par un click gauche sur le bouton
fonction_action Droite; // Action dÚclenchÚe par un click droit sur le bouton fonction_action Droite; // Action déclenchée par un click droit sur le bouton
word Raccourci_gauche; // Raccourci clavier Úquivalent à un click gauche sur le bouton word Raccourci_gauche; // Raccourci clavier équivalent … un click gauche sur le bouton
word Raccourci_droite; // Raccourci clavier Úquivalent à un click droit sur le bouton word Raccourci_droite; // Raccourci clavier équivalent … un click droit sur le bouton
// Informations sur le dÚsenclenchement du bouton gÚrÚ par le moteur: // Informations sur le désenclenchement du bouton géré par le moteur:
fonction_action Desenclencher; // Action appelÚe lors du dÚsenclenchement du bouton fonction_action Desenclencher; // Action appelée lors du désenclenchement du bouton
byte Famille; // Ensemble de boutons auquel celui-ci appartient byte Famille; // Ensemble de boutons auquel celui-ci appartient
} Bouton[NB_BOUTONS]; } Bouton[NB_BOUTONS];
// Informations sur les diffÚrents modes de dessin // Informations sur les différents modes de dessin
GLOBAL fonction_effet Fonction_effet; GLOBAL fonction_effet Fonction_effet;
GLOBAL byte * FX_Feedback_Ecran; GLOBAL byte * FX_Feedback_Ecran;
GLOBAL byte Exclude_color[256]; // Couleurs à exclure pour Meilleure_couleur GLOBAL byte Exclude_color[256]; // Couleurs exclure pour Meilleure_couleur
// Mode smear: // Mode smear:
GLOBAL byte Smear_Mode; // Le mode smear est enclenchÚ GLOBAL byte Smear_Mode; // Le mode smear est enclenché
GLOBAL byte Smear_Debut; // On vient juste de commencer une opÚration en Smear GLOBAL byte Smear_Debut; // On vient juste de commencer une opération en Smear
GLOBAL byte * Smear_Brosse; // Sprite de la brosse de Smear GLOBAL byte * Smear_Brosse; // Sprite de la brosse de Smear
GLOBAL word Smear_Brosse_Largeur; // Largeur de la brosse de Smear GLOBAL word Smear_Brosse_Largeur; // Largeur de la brosse de Smear
GLOBAL word Smear_Brosse_Hauteur; // Hauteur de la brosse de Smear GLOBAL word Smear_Brosse_Hauteur; // Hauteur de la brosse de Smear
@ -372,59 +372,59 @@ GLOBAL short Smear_Min_X,Smear_Max_X,Smear_Min_Y,Smear_Max_Y; // Bornes de la Br
// Mode shade: // Mode shade:
GLOBAL struct T_Shade Shade_Liste[8]; // Listes de shade GLOBAL struct T_Shade Shade_Liste[8]; // Listes de shade
GLOBAL byte Shade_Actuel; // NumÚro du shade en cours GLOBAL byte Shade_Actuel; // Numéro du shade en cours
GLOBAL byte * Shade_Table; // Table de conversion de shade en cours GLOBAL byte * Shade_Table; // Table de conversion de shade en cours
GLOBAL byte Shade_Table_gauche[256]; // Table de conversion de shade pour un clic gauche GLOBAL byte Shade_Table_gauche[256]; // Table de conversion de shade pour un clic gauche
GLOBAL byte Shade_Table_droite[256]; // Table de conversion de shade pour un clic droit GLOBAL byte Shade_Table_droite[256]; // Table de conversion de shade pour un clic droit
GLOBAL byte Shade_Mode; // Le mode shade est enclenchÚ GLOBAL byte Shade_Mode; // Le mode shade est enclenché
GLOBAL byte Quick_shade_Mode; // Le mode quick-shade est enclenchÚ GLOBAL byte Quick_shade_Mode; // Le mode quick-shade est enclenché
GLOBAL byte Quick_shade_Step; // Pas du mode quick-shade GLOBAL byte Quick_shade_Step; // Pas du mode quick-shade
GLOBAL byte Quick_shade_Loop; // Normal / Loop / No sat. GLOBAL byte Quick_shade_Loop; // Normal / Loop / No sat.
// Mode stencil: // Mode stencil:
GLOBAL byte Stencil_Mode; // Le mode stencil est enclenchÚ GLOBAL byte Stencil_Mode; // Le mode stencil est enclenché
GLOBAL byte Stencil[256]; // Tableau des couleurs protÚgÚes GLOBAL byte Stencil[256]; // Tableau des couleurs protégées
// Mode grille: // Mode grille:
GLOBAL byte Snap_Mode; // Le mode grille est enclenchÚ GLOBAL byte Snap_Mode; // Le mode grille est enclenché
GLOBAL short Snap_Largeur; // Largeur entre 2 points de la grille GLOBAL short Snap_Largeur; // Largeur entre 2 points de la grille
GLOBAL short Snap_Hauteur; // Hauteur entre 2 points de la grille GLOBAL short Snap_Hauteur; // Hauteur entre 2 points de la grille
GLOBAL short Snap_Decalage_X; // Position en X du point le + à gauche GLOBAL short Snap_Decalage_X; // Position en X du point le + gauche
GLOBAL short Snap_Decalage_Y; // Position en Y du point le + en haut GLOBAL short Snap_Decalage_Y; // Position en Y du point le + en haut
// Mode trame: // Mode trame:
GLOBAL byte Trame_Mode; // Le mode Trame est enclenchÚ GLOBAL byte Trame_Mode; // Le mode Trame est enclenché
GLOBAL byte Trame[16][16]; // Sprite de la trame GLOBAL byte Trame[16][16]; // Sprite de la trame
GLOBAL word TRAME_PREDEFINIE[12][16]; // Trames prÚsÚfinies (compactÚes sur 16*16 bits) GLOBAL word TRAME_PREDEFINIE[12][16]; // Trames préséfinies (compactées sur 16*16 bits)
GLOBAL short Trame_Largeur; // Largeur de la trame GLOBAL short Trame_Largeur; // Largeur de la trame
GLOBAL short Trame_Hauteur; // Hauteur de la trame GLOBAL short Trame_Hauteur; // Hauteur de la trame
// Mode colorize: // Mode colorize:
GLOBAL byte Colorize_Mode; // Le mode Colorize est enclenchÚ GLOBAL byte Colorize_Mode; // Le mode Colorize est enclenché
GLOBAL byte Colorize_Opacite; // IntensitÚ du Colorize GLOBAL byte Colorize_Opacite; // Intensité du Colorize
GLOBAL byte Colorize_Mode_en_cours; // Le type de Colorize en cours (0-2) GLOBAL byte Colorize_Mode_en_cours; // Le type de Colorize en cours (0-2)
GLOBAL word Table_de_multiplication_par_Facteur_A[64]; GLOBAL word Table_de_multiplication_par_Facteur_A[64];
GLOBAL word Table_de_multiplication_par_Facteur_B[64]; GLOBAL word Table_de_multiplication_par_Facteur_B[64];
// Mode smooth: // Mode smooth:
GLOBAL byte Smooth_Mode; // Le mode Smooth est enclenchÚ GLOBAL byte Smooth_Mode; // Le mode Smooth est enclenché
GLOBAL byte Smooth_Matrice[3][3]; // La matrice du Smooth actuel GLOBAL byte Smooth_Matrice[3][3]; // La matrice du Smooth actuel
// Mode Tiling: // Mode Tiling:
GLOBAL byte Tiling_Mode; // Le mode Tiling est enclenchÚ GLOBAL byte Tiling_Mode; // Le mode Tiling est enclenché
GLOBAL short Tiling_Decalage_X; // DÚcalage du tiling en X GLOBAL short Tiling_Decalage_X; // Décalage du tiling en X
GLOBAL short Tiling_Decalage_Y; // DÚcalage du tiling en Y GLOBAL short Tiling_Decalage_Y; // Décalage du tiling en Y
// Mode Mask // Mode Mask
GLOBAL byte Mask_Mode; // Le mode Masque est enclenchÚ GLOBAL byte Mask_Mode; // Le mode Masque est enclenché
GLOBAL byte Mask[256]; // Tableau des couleurs constituant le masque GLOBAL byte Mask[256]; // Tableau des couleurs constituant le masque
// Mode loupe: // Mode loupe:
@ -444,7 +444,7 @@ GLOBAL word TABLE_ZOOM[NB_FACTEURS_DE_ZOOM][512];
extern word FACTEUR_ZOOM[NB_FACTEURS_DE_ZOOM]; extern word FACTEUR_ZOOM[NB_FACTEURS_DE_ZOOM];
#endif #endif
// DonnÚes sur les ellipses et les cercles: // Données sur les ellipses et les cercles:
GLOBAL dword Table_des_carres[1025]; GLOBAL dword Table_des_carres[1025];
GLOBAL long Ellipse_Curseur_X; GLOBAL long Ellipse_Curseur_X;
@ -457,36 +457,36 @@ GLOBAL long Cercle_Curseur_X;
GLOBAL long Cercle_Curseur_Y; GLOBAL long Cercle_Curseur_Y;
GLOBAL long Cercle_Limite; GLOBAL long Cercle_Limite;
// DonnÚes sur les dÚgradÚs: // Données sur les dégradés:
GLOBAL short Degrade_Borne_Inferieure; // Plus petite couleur englobÚe par le dÚgradÚ GLOBAL short Degrade_Borne_Inferieure; // Plus petite couleur englobée par le dégradé
GLOBAL short Degrade_Borne_Superieure; // Plus grande couleur englobÚe par le dÚgradÚ GLOBAL short Degrade_Borne_Superieure; // Plus grande couleur englobée par le dégradé
GLOBAL int Degrade_Inverse; // BoolÚen "Le dÚgradÚ est en rÚalitÚ inversÚ" GLOBAL int Degrade_Inverse; // Booléen "Le dégradé est en réalité inversé"
GLOBAL long Degrade_Intervalle_bornes; // = Abs(Degrade_Borne_Inferieure-Degrade_Borne_Superieure)+1 GLOBAL long Degrade_Intervalle_bornes; // = Abs(Degrade_Borne_Inferieure-Degrade_Borne_Superieure)+1
GLOBAL long Degrade_Intervalle_total; // Valeur maximum des indices passÚs à la fonction de dÚgradÚ (!!! >0 !!!) GLOBAL long Degrade_Intervalle_total; // Valeur maximum des indices passés … la fonction de dégradé (!!! >0 !!!)
GLOBAL long Degrade_Melange_aleatoire; // Facteur de mÚlange (1-256+) du dÚgradÚ GLOBAL long Degrade_Melange_aleatoire; // Facteur de mélange (1-256+) du dégradé
GLOBAL fonction_degrade Traiter_degrade; // Fonction de traitement du dÚgradÚ, varie selon la mÚthode choisie par l'utilisateur. GLOBAL fonction_degrade Traiter_degrade; // Fonction de traitement du dégradé, varie selon la méthode choisie par l'utilisateur.
GLOBAL fonction_afficheur Traiter_pixel_de_degrade; // Redirection de l'affichage GLOBAL fonction_afficheur Traiter_pixel_de_degrade; // Redirection de l'affichage
GLOBAL struct T_Degrade_Tableau Degrade_Tableau[16]; // DonnÚes de tous les dÚgradÚs GLOBAL struct T_Degrade_Tableau Degrade_Tableau[16]; // Données de tous les dégradés
GLOBAL int Degrade_Courant; // Indice du tableau correspondant au dÚgradÚ courant GLOBAL int Degrade_Courant; // Indice du tableau correspondant au dégradé courant
// DonnÚes sur le Spray: // Données sur le Spray:
GLOBAL byte Spray_Mode; // Mode Mono(1) ou Multicolore(0) GLOBAL byte Spray_Mode; // Mode Mono(1) ou Multicolore(0)
GLOBAL short Spray_Size; // Diamètre du spray en pixels GLOBAL short Spray_Size; // DiamŠtre du spray en pixels
GLOBAL byte Spray_Delay; // DÚlai en VBLs entre 2 "pschiitt" GLOBAL byte Spray_Delay; // Délai en VBLs entre 2 "pschiitt"
GLOBAL byte Spray_Mono_flow; // Nombre de pixels qui sortent en même temps en mono GLOBAL byte Spray_Mono_flow; // Nombre de pixels qui sortent en mˆme temps en mono
GLOBAL byte Spray_Multi_flow[256]; // Idem pour chaque couleur GLOBAL byte Spray_Multi_flow[256]; // Idem pour chaque couleur
// DonnÚes diverses sur le programme: // Données diverses sur le programme:
GLOBAL byte Sortir_du_programme; GLOBAL byte Sortir_du_programme;
GLOBAL char Repertoire_du_programme[256]; // RÚpertoire dans lequel se trouve le programme GLOBAL char Repertoire_du_programme[256]; // Répertoire dans lequel se trouve le programme
GLOBAL char Repertoire_initial[256]; // RÚpertoire à partir duquel à ÚtÚ lancÚ le programme GLOBAL char Repertoire_initial[256]; // Répertoire … partir duquel … été lancé le programme
GLOBAL byte Fore_color; GLOBAL byte Fore_color;
GLOBAL byte Back_color; GLOBAL byte Back_color;
GLOBAL byte Mode_de_dessin_en_cours; GLOBAL byte Mode_de_dessin_en_cours;
@ -494,7 +494,7 @@ GLOBAL byte Courbe_en_cours;
GLOBAL byte Ligne_en_cours; GLOBAL byte Ligne_en_cours;
GLOBAL byte Couleur_debut_palette; GLOBAL byte Couleur_debut_palette;
GLOBAL byte Un_fichier_a_ete_passe_en_parametre; GLOBAL byte Un_fichier_a_ete_passe_en_parametre;
GLOBAL byte Une_resolution_a_ete_passee_en_parametre; // utilisÚe uniquement si la variable prÚcÚdente est à 1 GLOBAL byte Une_resolution_a_ete_passee_en_parametre; // utilisée uniquement si la variable précédente est … 1
// Variables concernant l'OBJ DIVERS // Variables concernant l'OBJ DIVERS
@ -517,13 +517,13 @@ GLOBAL word MODE_X_Largeur_de_ligne;
GLOBAL dword MODE_X_Valeur_initiale_de_esi; GLOBAL dword MODE_X_Valeur_initiale_de_esi;
GLOBAL dword MODE_X_Valeur_initiale_de_edi; GLOBAL dword MODE_X_Valeur_initiale_de_edi;
// Partie concernant le VESA: // Partie concernant le VESA:
GLOBAL byte Granularite; // Facteur de gestion de la granularitÚ de la carte GLOBAL byte Granularite; // Facteur de gestion de la granularité de la carte
GLOBAL byte VESA_Erreur; GLOBAL byte VESA_Erreur;
GLOBAL byte * VESA_WinFuncPtr; // Handler software de changement de banque GLOBAL byte * VESA_WinFuncPtr; // Handler software de changement de banque
GLOBAL word * VESA_Liste_des_modes; GLOBAL word * VESA_Liste_des_modes;
GLOBAL dword VESA_Decalage_synchro; GLOBAL dword VESA_Decalage_synchro;
GLOBAL word VESA_Largeur_ecran_en_dword; GLOBAL word VESA_Largeur_ecran_en_dword;
GLOBAL byte VESA_Banque_en_cours; // Variable normalement locale à VIDEO.ASM GLOBAL byte VESA_Banque_en_cours; // Variable normalement locale VIDEO.ASM
GLOBAL byte VESA_Derniere_banque_Fenetre_A_utilisee; GLOBAL byte VESA_Derniere_banque_Fenetre_A_utilisee;
GLOBAL byte VESA_Derniere_banque_Fenetre_B_utilisee; GLOBAL byte VESA_Derniere_banque_Fenetre_B_utilisee;
GLOBAL fonction_action VESA_Change_banque_lecture; GLOBAL fonction_action VESA_Change_banque_lecture;
@ -534,7 +534,7 @@ GLOBAL byte VESA_Version_Decimale;
GLOBAL char VESA_Constructeur[TAILLE_NOM_CONSTRUCTEUR+1]; GLOBAL char VESA_Constructeur[TAILLE_NOM_CONSTRUCTEUR+1];
GLOBAL word VESA_Taille_memoire; GLOBAL word VESA_Taille_memoire;
// Les diffÚrents sprites: // Les différents sprites:
GLOBAL byte BLOCK_MENU[HAUTEUR_MENU][LARGEUR_MENU]; GLOBAL byte BLOCK_MENU[HAUTEUR_MENU][LARGEUR_MENU];
GLOBAL byte SPRITE_MENU[NB_SPRITES_MENU][HAUTEUR_SPRITE_MENU][LARGEUR_SPRITE_MENU]; GLOBAL byte SPRITE_MENU[NB_SPRITES_MENU][HAUTEUR_SPRITE_MENU][LARGEUR_SPRITE_MENU];
@ -547,19 +547,19 @@ GLOBAL byte Fonte_fun [256*8*8];
GLOBAL byte Fonte_help [315][6][8]; GLOBAL byte Fonte_help [315][6][8];
GLOBAL byte * Fonte; GLOBAL byte * Fonte;
// Les donnÚes de l'aide: // Les données de l'aide:
GLOBAL struct Section_d_aide Table_d_aide[NB_SECTIONS_AIDE]; GLOBAL struct Section_d_aide Table_d_aide[NB_SECTIONS_AIDE];
GLOBAL byte Section_d_aide_en_cours; // Indice de la table d'aide en cours de consultation GLOBAL byte Section_d_aide_en_cours; // Indice de la table d'aide en cours de consultation
GLOBAL word Position_d_aide_en_cours; // NumÚro de la ligne d'aide en cours de consultation GLOBAL word Position_d_aide_en_cours; // Numéro de la ligne d'aide en cours de consultation
// DonnÚes sur les opÚrations // Données sur les opérations
GLOBAL word Operation_avant_interruption; // N° de l'opÚration en cours avant l'utilisation d'une interruption GLOBAL word Operation_avant_interruption; // Nø de l'opération en cours avant l'utilisation d'une interruption
GLOBAL word Operation_en_cours; // N° de l'opÚration en cours GLOBAL word Operation_en_cours; // Nø de l'opération en cours
GLOBAL word Operation_Pile[TAILLE_PILE_OPERATIONS]; // Pile simplifiÚe GLOBAL word Operation_Pile[TAILLE_PILE_OPERATIONS]; // Pile simplifiée
GLOBAL byte Operation_Taille_pile; // Taille effective de la pile (0=vide) GLOBAL byte Operation_Taille_pile; // Taille effective de la pile (0=vide)
GLOBAL byte Operation_dans_loupe; // Indique si l'opÚration a commencÚ dans la partie ZoomÚe ou non GLOBAL byte Operation_dans_loupe; // Indique si l'opération a commencé dans la partie Zoomée ou non
GLOBAL short Pipette_Couleur; GLOBAL short Pipette_Couleur;
GLOBAL short Pipette_X; GLOBAL short Pipette_X;
@ -569,12 +569,12 @@ GLOBAL short Pipette_Y;
#ifdef VARIABLES_GLOBALES #ifdef VARIABLES_GLOBALES
byte CURSEUR_D_OPERATION[NB_OPERATIONS]= byte CURSEUR_D_OPERATION[NB_OPERATIONS]=
{ {
FORME_CURSEUR_CIBLE , // Dessin à la main continu FORME_CURSEUR_CIBLE , // Dessin la main continu
FORME_CURSEUR_CIBLE , // Dessin à la main discontinu FORME_CURSEUR_CIBLE , // Dessin la main discontinu
FORME_CURSEUR_CIBLE , // Dessin à la main point par point FORME_CURSEUR_CIBLE , // Dessin la main point par point
FORME_CURSEUR_CIBLE , // Lignes FORME_CURSEUR_CIBLE , // Lignes
FORME_CURSEUR_CIBLE , // Lignes reliÚes FORME_CURSEUR_CIBLE , // Lignes reliées
FORME_CURSEUR_CIBLE , // Lignes centrÚes FORME_CURSEUR_CIBLE , // Lignes centrées
FORME_CURSEUR_CIBLE_XOR , // Rectangle vide FORME_CURSEUR_CIBLE_XOR , // Rectangle vide
FORME_CURSEUR_CIBLE_XOR , // Rectangle plein FORME_CURSEUR_CIBLE_XOR , // Rectangle plein
FORME_CURSEUR_CIBLE , // Cercles vides FORME_CURSEUR_CIBLE , // Cercles vides
@ -585,18 +585,18 @@ GLOBAL short Pipette_Y;
FORME_CURSEUR_CIBLE , // Remplacer FORME_CURSEUR_CIBLE , // Remplacer
FORME_CURSEUR_CIBLE_XOR , // Prise de brosse rectangulaire FORME_CURSEUR_CIBLE_XOR , // Prise de brosse rectangulaire
FORME_CURSEUR_CIBLE , // Prise d'une brosse multiforme FORME_CURSEUR_CIBLE , // Prise d'une brosse multiforme
FORME_CURSEUR_CIBLE_PIPETTE , // RÚcupÚration d'une couleur FORME_CURSEUR_CIBLE_PIPETTE , // Récupération d'une couleur
FORME_CURSEUR_RECTANGLE_XOR , // Positionnement de la fenêtre de loupe FORME_CURSEUR_RECTANGLE_XOR , // Positionnement de la fenˆtre de loupe
FORME_CURSEUR_CIBLE , // Courbe à 3 points FORME_CURSEUR_CIBLE , // Courbe 3 points
FORME_CURSEUR_CIBLE , // Courbe à 4 points FORME_CURSEUR_CIBLE , // Courbe 4 points
FORME_CURSEUR_CIBLE , // Spray FORME_CURSEUR_CIBLE , // Spray
FORME_CURSEUR_CIBLE , // Polygone FORME_CURSEUR_CIBLE , // Polygone
FORME_CURSEUR_CIBLE , // Polyforme FORME_CURSEUR_CIBLE , // Polyforme
FORME_CURSEUR_CIBLE , // Polyfill FORME_CURSEUR_CIBLE , // Polyfill
FORME_CURSEUR_CIBLE , // Polyforme rempli FORME_CURSEUR_CIBLE , // Polyforme rempli
FORME_CURSEUR_MULTIDIRECTIONNEL, // Scroll FORME_CURSEUR_MULTIDIRECTIONNEL, // Scroll
FORME_CURSEUR_CIBLE , // Cercles dÚgradÚs FORME_CURSEUR_CIBLE , // Cercles dégradés
FORME_CURSEUR_CIBLE , // Ellipses dÚgradÚes FORME_CURSEUR_CIBLE , // Ellipses dégradées
FORME_CURSEUR_ROTATE_XOR , // Faire tourner brosse FORME_CURSEUR_ROTATE_XOR , // Faire tourner brosse
FORME_CURSEUR_CIBLE_XOR , // Etirer brosse FORME_CURSEUR_CIBLE_XOR , // Etirer brosse
FORME_CURSEUR_CIBLE // Deformer brosse FORME_CURSEUR_CIBLE // Deformer brosse
@ -606,12 +606,12 @@ GLOBAL short Pipette_Y;
#endif #endif
// ProcÚdures à appeler: OpÚration,Mouse_K,Etat de la pile // Procédures … appeler: Opération,Mouse_K,Etat de la pile
GLOBAL struct GLOBAL struct
{ {
byte Effacer_curseur; // BoolÚen "il faut effacer le curseur pour l'opÚra." byte Effacer_curseur; // Booléen "il faut effacer le curseur pour l'opéra."
fonction_action Action; // Action appelÚe fonction_action Action; // Action appelée
} Operation[NB_OPERATIONS][3][TAILLE_PILE_OPERATIONS]; } Operation[NB_OPERATIONS][3][TAILLE_PILE_OPERATIONS];
@ -625,11 +625,11 @@ GLOBAL byte SPRITE_DRIVE[NB_SPRITES_DRIVES][HAUTEUR_SPRITE_DRIVE][LARGEUR_SPRITE
// -- Section des informations sur les formats de fichiers ------------------ // -- Section des informations sur les formats de fichiers ------------------
// Comptage du nb d'ÚlÚments dans la liste: // Comptage du nb d'éléments dans la liste:
GLOBAL short Liste_Nb_elements; GLOBAL short Liste_Nb_elements;
GLOBAL short Liste_Nb_fichiers; GLOBAL short Liste_Nb_fichiers;
GLOBAL short Liste_Nb_repertoires; GLOBAL short Liste_Nb_repertoires;
// Tête de la liste chaînÚe: // Tˆte de la liste chaŒnée:
GLOBAL struct Element_de_liste_de_fileselect * Liste_du_fileselect; GLOBAL struct Element_de_liste_de_fileselect * Liste_du_fileselect;
// ------------------- Inititialisation des formats connus ------------------- // ------------------- Inititialisation des formats connus -------------------
@ -641,21 +641,21 @@ void Rien_du_tout(void);
// Extension du format // Extension du format
char Format_Extension[NB_FORMATS_CONNUS][4]= char Format_Extension[NB_FORMATS_CONNUS][4]=
{ {
"PKM", // PKM "pkm", // PKM
"LBM", // LBM "lbm", // LBM
"GIF", // GIF "gif", // GIF
"BMP", // BMP "bmp", // BMP
"PCX", // PCX "pcx", // PCX
"IMG", // IMG "img", // IMG
"SC?", // SCx "sc?", // SCx
"PI1", // PI1 "pi1", // PI1
"PC1", // PC1 "pc1", // PC1
"CEL", // CEL "cel", // CEL
"KCF", // KCF "kcf", // KCF
"PAL" // PAL "pal" // PAL
}; };
// Fonction à appeler pour vÚrifier la signature du fichier // Fonction … appeler pour vérifier la signature du fichier
fonction_action Format_Test[NB_FORMATS_LOAD]= fonction_action Format_Test[NB_FORMATS_LOAD]=
{ {
Test_PKM, // PKM Test_PKM, // PKM
@ -672,7 +672,7 @@ void Rien_du_tout(void);
Test_PAL // PAL Test_PAL // PAL
}; };
// Fonction à appeler pour charger l'image // Fonction appeler pour charger l'image
fonction_action Format_Load[NB_FORMATS_LOAD]= fonction_action Format_Load[NB_FORMATS_LOAD]=
{ {
Load_PKM, // PKM Load_PKM, // PKM
@ -689,7 +689,7 @@ void Rien_du_tout(void);
Load_PAL // PAL Load_PAL // PAL
}; };
// Fonction à appeler pour sauvegarder l'image // Fonction appeler pour sauvegarder l'image
fonction_action Format_Save[NB_FORMATS_SAVE]= fonction_action Format_Save[NB_FORMATS_SAVE]=
{ {
Save_PKM, // PKM Save_PKM, // PKM
@ -706,7 +706,7 @@ void Rien_du_tout(void);
Save_PAL // PAL Save_PAL // PAL
}; };
// indique si l'on doit considÚrer que l'image n'est plus modifiÚe // indique si l'on doit considérer que l'image n'est plus modifiée
byte Format_Backup_done[NB_FORMATS_CONNUS]= byte Format_Backup_done[NB_FORMATS_CONNUS]=
{ {
1, // PKM 1, // PKM
@ -748,9 +748,9 @@ void Rien_du_tout(void);
extern byte Format_Commentaire[NB_FORMATS_CONNUS]; extern byte Format_Commentaire[NB_FORMATS_CONNUS];
#endif #endif
GLOBAL signed char Erreur_fichier; // 0: opération I/O OK GLOBAL signed char Erreur_fichier; // 0: opration I/O OK
// 1: Erreur dès le début de l'opération // 1: Erreur dŠs le dbut de l'opration
// 2: Erreur durant l'opération => données modifiées // 2: Erreur durant l'opration => donnes modifies
//-1: Interruption du chargement d'une preview //-1: Interruption du chargement d'une preview
GLOBAL int Ligne_INI; GLOBAL int Ligne_INI;
@ -759,7 +759,7 @@ GLOBAL fonction_afficheur Pixel_de_chargement;
GLOBAL fonction_lecteur Lit_pixel_de_sauvegarde; GLOBAL fonction_lecteur Lit_pixel_de_sauvegarde;
/******************** /********************
* Spécifique à SDL * * Spcifique SDL *
********************/ ********************/
GLOBAL SDL_Surface * Ecran_SDL; GLOBAL SDL_Surface * Ecran_SDL;
#endif #endif

View File

@ -1,6 +1,6 @@
/************************************************************************ /************************************************************************
* * * *
* READLINE (procdure permettant de saisir une chaŒne de caractŠres) * * READLINE (procédure permettant de saisir une chaîne de caractères) *
* * * *
************************************************************************/ ************************************************************************/
@ -23,37 +23,7 @@
#define COULEUR_TEXTE_CURSEUR CM_Noir #define COULEUR_TEXTE_CURSEUR CM_Noir
#define COULEUR_FOND_CURSEUR CM_Fonce #define COULEUR_FOND_CURSEUR CM_Fonce
// Vérification de la validité d'un nom de fichier // Suppresion d'un caractère à une certaine POSITION dans une CHAINE.
byte Chaine_valide(char * Chaine)
{
byte Point_trouve=0; // Booléen "on a trouvé un point dans la chaine"
byte Taille_racine=0; // Taille de la racine du nom de fichier
byte Taille_extension=0; // Taille de l'extension du nom de fichier
byte Position; // Position du caractère dans la chaîne en cours d'étude
for (Position=0;Chaine[Position]!='\0';Position++)
{
if (Chaine[Position]!='.')
{
if (Point_trouve)
Taille_extension++;
else
Taille_racine++;
}
else
{
if (Point_trouve)
return 0;
else
Point_trouve=1;
}
}
return ( (Taille_racine>0) && (Taille_racine<=8) && (Taille_extension<=3) );
}
// Suppresion d'un caractŠre … une certaine POSITION dans une CHAINE.
void Supprimer_caractere(char * Chaine, byte Position) void Supprimer_caractere(char * Chaine, byte Position)
{ {
for (;Chaine[Position]!='\0';Position++) for (;Chaine[Position]!='\0';Position++)
@ -62,24 +32,44 @@ void Supprimer_caractere(char * Chaine, byte Position)
void Inserer_caractere(char * Chaine, char Lettre, byte Position) void Inserer_caractere(char * Chaine, char Lettre, byte Position)
// Insertion d'une LETTRE une certaine POSITION // Insertion d'une LETTRE à une certaine POSITION
// dans une CHAINE d'une certaine TAILLE. // dans une CHAINE d'une certaine TAILLE.
{ {
char Char_tempo; char Char_tempo;
for (;Lettre!='\0';Position++) for (;Lettre!='\0';Position++)
{ {
// On mmorise le caractŠre qui se trouve en "Position" // On mémorise le caractère qui se trouve en "Position"
Char_tempo=Chaine[Position]; Char_tempo=Chaine[Position];
// On splotch la lettre … insrer // On splotch la lettre à insérer
Chaine[Position]=Lettre; Chaine[Position]=Lettre;
// On place le caractŠre mmoris dans "Lettre" comme nouvelle lettre … insrer // On place le caractère mémorisé dans "Lettre" comme nouvelle lettre à insérer
Lettre=Char_tempo; Lettre=Char_tempo;
} }
// On termine la chaine // On termine la chaine
Chaine[Position]='\0'; Chaine[Position]='\0';
} }
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
char CaracteresInterdits[] = {'/', '|', '?', '*', '<', '>', ':', '\\'};
#endif
if (Caractere < ' ' || Caractere > 255)
return 0;
int Position;
for (Position=0; Position<sizeof(CaracteresInterdits); Position++)
if (Caractere == CaracteresInterdits[Position])
return 0;
return 1;
}
void Rafficher_toute_la_chaine(word Pos_X,word Pos_Y,char * Chaine,byte Position) void Rafficher_toute_la_chaine(word Pos_X,word Pos_Y,char * Chaine,byte Position)
{ {
@ -92,11 +82,11 @@ void Rafficher_toute_la_chaine(word Pos_X,word Pos_Y,char * Chaine,byte Position
//* Enhanced super scanf deluxe pro plus giga mieux :-) * //* Enhanced super scanf deluxe pro plus giga mieux :-) *
//**************************************************************************** //****************************************************************************
byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_saisie) byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_saisie)
// ParamŠtres: // Paramètres:
// Pos_X, Pos_Y : Coordonnes de la saisie dans la fenˆtre // Pos_X, Pos_Y : Coordonnées de la saisie dans la fenêtre
// Chaine : ChaŒne recevant la saisie (et contenant ventuellement une valeur initiale) // Chaine : Chaîne recevant la saisie (et contenant éventuellement une valeur initiale)
// Taille_maxi : Nombre de caractŠres logeant dans la zone de saisie // Taille_maxi : Nombre de caractères logeant dans la zone de saisie
// Type_saisie : 0=ChaŒne, 1=Nombre, 2=Nom de fichier (12 carcactŠres) // Type_saisie : 0=Chaîne, 1=Nombre, 2=Nom de fichier
// Sortie: // Sortie:
// 0: Sortie par annulation (Esc.) / 1: sortie par acceptation (Return) // 0: Sortie par annulation (Esc.) / 1: sortie par acceptation (Return)
{ {
@ -107,16 +97,16 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
byte Touche_autorisee; byte Touche_autorisee;
// Effacement de la chaŒne // Effacement de la chaîne
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y), Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND); Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
// Mise … jour des variables se rapportant … la chaŒne en fonction de la chaŒne initiale // Mise à jour des variables se rapportant à la chaîne en fonction de la chaîne initiale
strcpy(Chaine_initiale,Chaine); strcpy(Chaine_initiale,Chaine);
if (Type_saisie==1) if (Type_saisie==1)
itoa(atoi(Chaine),Chaine,10); // On tasse la chaine gauche itoa(atoi(Chaine),Chaine,10); // On tasse la chaine à gauche
// Chaine[0]='\0'; // On efface la chaŒne si c'est valeur numrique // Chaine[0]='\0'; // On efface la chaîne si c'est valeur numérique
Taille=strlen(Chaine); Taille=strlen(Chaine);
Position=(Taille<Taille_maxi)? Taille:Taille-1; Position=(Taille<Taille_maxi)? Taille:Taille-1;
@ -133,7 +123,7 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
{ {
Supprimer_caractere(Chaine,Position); Supprimer_caractere(Chaine,Position);
Taille--; Taille--;
// Effacement de la chaŒne // Effacement de la chaîne
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y), Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND); Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine,Position); Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine,Position);
@ -142,7 +132,7 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
case SDLK_LEFT : // Gauche case SDLK_LEFT : // Gauche
if (Position) if (Position)
{ {
// Effacement de la chaŒne // Effacement de la chaîne
if (Position==Taille) if (Position==Taille)
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y), Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND); Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
@ -156,7 +146,7 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
case SDLK_HOME : // Home case SDLK_HOME : // Home
if (Position) if (Position)
{ {
// Effacement de la chaŒne // Effacement de la chaîne
if (Position==Taille) if (Position==Taille)
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y), Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND); Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
@ -172,19 +162,15 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
{ {
Supprimer_caractere(Chaine,--Position); Supprimer_caractere(Chaine,--Position);
Taille--; Taille--;
// Effacement de la chaŒne // Effacement de la chaîne
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y), Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND); Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine,Position); Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine,Position);
} }
break; break;
case SDLK_RETURN : case SDLK_RETURN :
if ( (Type_saisie!=2) || (Chaine_valide(Chaine)) ) break;
break;
// Si on tait en saisie de nom de fichier et qu'il y ait une erreur
// dans la chaŒne
Erreur(0); // On flash en rouge & ...
Touche_lue=SDLK_ESCAPE; // ... on simule l'appuie sur la touche [Esc]
case SDLK_ESCAPE : case SDLK_ESCAPE :
// On restaure la chaine initiale // On restaure la chaine initiale
strcpy(Chaine,Chaine_initiale); strcpy(Chaine,Chaine_initiale);
@ -197,8 +183,8 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
Touche_autorisee=0; // On commence par supposer qu'elle est interdite Touche_autorisee=0; // On commence par supposer qu'elle est interdite
switch(Type_saisie) switch(Type_saisie)
{ {
case 0 : // N'importe quelle chaŒne: case 0 : // N'importe quelle chaîne:
if (Touche_lue>=' ') if (Touche_lue>=' ' && Touche_lue<= 255)
Touche_autorisee=1; Touche_autorisee=1;
break; break;
case 1 : // Nombre case 1 : // Nombre
@ -206,27 +192,19 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
Touche_autorisee=1; Touche_autorisee=1;
break; break;
default : // Nom de fichier default : // Nom de fichier
// On commence par passez la lettre en majuscule // On regarde si la touche est autorisée
if ( (Touche_lue>='a') && (Touche_lue<='z') ) if ( CaractereValide(Touche_lue))
Touche_lue-=32;
// Ensuite on regarde si la touche est autorise
if ( (Touche_lue> ' ') && (Touche_lue!='+') && (Touche_lue!='\\') &&
(Touche_lue!='>') && (Touche_lue!='<') && (Touche_lue!='*') &&
(Touche_lue!='?') && (Touche_lue!=':') && (Touche_lue!='|') &&
(Touche_lue!='/') && (Touche_lue!='"') && (Touche_lue!='=') &&
(Touche_lue!=',') && (Touche_lue!=';') && (Touche_lue!='[') &&
(Touche_lue!=']') )
Touche_autorisee=1; Touche_autorisee=1;
} // Fin du "switch(Type_saisie)" } // Fin du "switch(Type_saisie)"
// Si la touche tait autorise... // Si la touche était autorisée...
if (Touche_autorisee) if (Touche_autorisee)
{ {
// ... alors on l'insŠre ... // ... alors on l'insère ...
Inserer_caractere(Chaine,Touche_lue,Position/*,Taille*/); Inserer_caractere(Chaine,Touche_lue,Position/*,Taille*/);
// ce qui augmente la taille de la chaine // ce qui augmente la taille de la chaine
Taille++; Taille++;
// et qui risque de dplacer le curseur vers la droite // et qui risque de déplacer le curseur vers la droite
if (Taille<Taille_maxi) if (Taille<Taille_maxi)
Position++; Position++;
// Enfin, on raffiche la chaine // Enfin, on raffiche la chaine
@ -236,7 +214,7 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
} // Fin du "switch(Touche_lue)" } // Fin du "switch(Touche_lue)"
} // Fin du "while" } // Fin du "while"
// Effacement de la chaŒne // Effacement de la chaîne
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y), Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND); Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
// On raffiche la chaine correctement // On raffiche la chaine correctement