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:
		
							parent
							
								
									e4d2764ee2
								
							
						
					
					
						commit
						a3f2b7c2f8
					
				
							
								
								
									
										15
									
								
								boutons.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								boutons.c
									
									
									
									
									
								
							@ -722,14 +722,14 @@ void Bouton_Settings(void)
 | 
			
		||||
 | 
			
		||||
  Ouvrir_fenetre(307,182,"Settings");
 | 
			
		||||
 | 
			
		||||
  // On commence par dessiner tous les câdres
 | 
			
		||||
  // On commence par dessiner tous les Cadres
 | 
			
		||||
  Fenetre_Afficher_cadre(  5, 16,157,30);
 | 
			
		||||
  Fenetre_Afficher_cadre(  5, 47,157,17);
 | 
			
		||||
  Fenetre_Afficher_cadre(163, 16,139,60);
 | 
			
		||||
  Fenetre_Afficher_cadre(253, 77, 49,82);
 | 
			
		||||
  Fenetre_Afficher_cadre(  5, 77,247,82); // |_ Misc.
 | 
			
		||||
  Fenetre_Afficher_cadre(  5, 65,157,14); // |
 | 
			
		||||
  // On découpe le câdre bizarre des "Miscellaneous"
 | 
			
		||||
  // On découpe le Cadre bizarre des "Miscellaneous"
 | 
			
		||||
  Pixel_dans_fenetre(6,77,CM_Blanc);
 | 
			
		||||
  Pixel_dans_fenetre(5,78,CM_Fonce);
 | 
			
		||||
  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, 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);
 | 
			
		||||
  // 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);
 | 
			
		||||
  // Câdre autour de la preview
 | 
			
		||||
  // Cadre autour de la preview
 | 
			
		||||
  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_Definir_bouton_special(9,90+FILENAMESPACE,96,80);                      // 4
 | 
			
		||||
@ -2458,6 +2458,7 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
 | 
			
		||||
 | 
			
		||||
          do
 | 
			
		||||
          {
 | 
			
		||||
            SDL_PumpEvents();
 | 
			
		||||
          	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));
 | 
			
		||||
 | 
			
		||||
@ -2466,7 +2467,7 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
 | 
			
		||||
                Menu_Facteur_X*48,Menu_Facteur_Y*24,CM_Clair);
 | 
			
		||||
 | 
			
		||||
          // Si l'utilisateur confirme,
 | 
			
		||||
          if (Touche=='Y')
 | 
			
		||||
          if (Etat_Du_Clavier[SDLK_y])
 | 
			
		||||
          {
 | 
			
		||||
            // Si c'est un fichier
 | 
			
		||||
            if (Principal_File_list_Position+Principal_File_list_Decalage>=Liste_Nb_repertoires)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										354
									
								
								global.h
									
									
									
									
									
								
							
							
						
						
									
										354
									
								
								global.h
									
									
									
									
									
								
							@ -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;
 | 
			
		||||
} Config;
 | 
			
		||||
 | 
			
		||||
  // Tableau des touches spÚciales
 | 
			
		||||
  // Tableau des touches spéciales
 | 
			
		||||
GLOBAL word Config_Touche[NB_TOUCHES_SPECIALES];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -71,7 +71,7 @@ struct S_Mode_video
 | 
			
		||||
  word   Facteur_X;
 | 
			
		||||
  word   Facteur_Y;
 | 
			
		||||
  char   Ratio[5];
 | 
			
		||||
  signed char Refresh; // <0 => entrelacÚ
 | 
			
		||||
  signed char Refresh; // <0 => entrelacé
 | 
			
		||||
  word   Mode_VESA_de_base;
 | 
			
		||||
  void * Pointeur;
 | 
			
		||||
  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
 | 
			
		||||
{
 | 
			
		||||
  byte   Granularite;   // Facteur de gestion de la granularitÚ
 | 
			
		||||
  byte   Code_fenetres; // Utilisation des fenêtres: 0=AA 1=BB 2=AB 3=BA
 | 
			
		||||
  byte   Granularite;   // Facteur de gestion de la granularité
 | 
			
		||||
  byte   Code_fenetres; // Utilisation des fenˆtres: 0=AA 1=BB 2=AB 3=BA
 | 
			
		||||
  byte * WinFuncPtr;
 | 
			
		||||
  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];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // Palette par dÚfaut
 | 
			
		||||
  // Palette par défaut
 | 
			
		||||
 | 
			
		||||
GLOBAL T_Palette Palette_defaut;
 | 
			
		||||
 | 
			
		||||
@ -103,10 +103,10 @@ GLOBAL byte CM_Blanc;
 | 
			
		||||
GLOBAL byte CM_Trans;
 | 
			
		||||
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_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 word Touche;
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
  // DonnÚes sur le curseur
 | 
			
		||||
  // Données sur le 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 Cacher_curseur;
 | 
			
		||||
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 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 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 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 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
 | 
			
		||||
 | 
			
		||||
  // DonnÚes sur le pinceau
 | 
			
		||||
  // Données sur le pinceau
 | 
			
		||||
 | 
			
		||||
GLOBAL byte  Pinceau_Forme;
 | 
			
		||||
GLOBAL byte  Pinceau_Forme_avant_fill;
 | 
			
		||||
@ -153,62 +153,62 @@ GLOBAL short Pinceau_Decalage_Y;
 | 
			
		||||
 | 
			
		||||
  // 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_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_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_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_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_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_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_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_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_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_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_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_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_procsline Afficher_ligne;  // Afficher 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_Mono_zoom  Display_brush_Mono_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 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 Largeur_ecran;       // Largeur de l'Úcran
 | 
			
		||||
GLOBAL short Hauteur_ecran;       // Hauteur de l'Úcran
 | 
			
		||||
GLOBAL int   Resolution_actuelle; // Résolution graphique courante
 | 
			
		||||
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 Largeur_ecran;       // Largeur de l'écran
 | 
			
		||||
GLOBAL short Hauteur_ecran;       // Hauteur de l'écran
 | 
			
		||||
GLOBAL short Limite_Haut;         // |
 | 
			
		||||
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_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_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_visible_Bas_Zoom;    // |_ Derniers points visibles "à
 | 
			
		||||
GLOBAL short Limite_visible_Droite_Zoom; // |  l'image" dans la partie zoomÚe
 | 
			
		||||
GLOBAL short Limite_visible_Bas_Zoom;    // |_ Derniers points visibles "…
 | 
			
		||||
GLOBAL short Limite_visible_Droite_Zoom; // |  l'image" dans la partie zoomée
 | 
			
		||||
 | 
			
		||||
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 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 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_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 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_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_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_Y;
 | 
			
		||||
 | 
			
		||||
@ -218,60 +218,60 @@ GLOBAL short Ancien_Principal_Decalage_Y;
 | 
			
		||||
 | 
			
		||||
GLOBAL char  Principal_Repertoire_fichier[1024]; // |_ Nom complet =
 | 
			
		||||
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 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 char  Principal_Repertoire_courant[1024]; // RÚpertoire actuel sur disque
 | 
			
		||||
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 char  Principal_Repertoire_courant[1024]; // Répertoire actuel sur disque
 | 
			
		||||
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_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 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 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_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 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_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_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_Y;
 | 
			
		||||
 | 
			
		||||
GLOBAL char  Brouillon_Repertoire_fichier[TAILLE_CHEMIN_FICHIER]; // |_ Nom complet =
 | 
			
		||||
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 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 char  Brouillon_Repertoire_courant[TAILLE_CHEMIN_FICHIER]; // RÚpertoire actuel sur disque
 | 
			
		||||
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 char  Brouillon_Repertoire_courant[TAILLE_CHEMIN_FICHIER]; // Répertoire actuel sur disque
 | 
			
		||||
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_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 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_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_Y;// Decalage vertical   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 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 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:
 | 
			
		||||
 | 
			
		||||
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 * 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 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_Nom_fichier[TAILLE_CHEMIN_FICHIER];       // |
 | 
			
		||||
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_Decalage;                       // |  brosse.
 | 
			
		||||
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_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 word  Menu_Ordonnee;       // OrdonnÚe où commence le menu
 | 
			
		||||
GLOBAL word  Menu_Ordonnee_Texte; // OrdonnÚe où commence le texte dans le menu
 | 
			
		||||
GLOBAL byte  Menu_visible;        // Le menu est actif … l'écran
 | 
			
		||||
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_Facteur_X;      // Facteur de grossissement du menu en X
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // DonnÚes sur la fenêtre de menu
 | 
			
		||||
  // Données sur la fenˆtre de menu
 | 
			
		||||
 | 
			
		||||
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_Y;   // Position du bord haut   de la fenêtre dans l'Úcran
 | 
			
		||||
GLOBAL word Fenetre_Largeur; // Largeur de la fenêtre
 | 
			
		||||
GLOBAL word Fenetre_Hauteur; // Hauteur de la fenêtre
 | 
			
		||||
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_Largeur; // Largeur 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 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 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 byte Cacher_pinceau_avant_fenetre;// Le pinceau étatit déj… caché avant l'ouverture de la fenetre?
 | 
			
		||||
 | 
			
		||||
GLOBAL word Nb_boutons_fenetre;
 | 
			
		||||
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
 | 
			
		||||
{
 | 
			
		||||
  // Informations sur l'aspect du bouton (graphisme):
 | 
			
		||||
  word            Decalage_X;        // DÚcalage par rapport à la gauche du menu
 | 
			
		||||
  word            Decalage_Y;        // DÚcalage par rapport au haut 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            Largeur;           // Largeur du bouton
 | 
			
		||||
  word            Hauteur;           // Hauteur du bouton
 | 
			
		||||
  byte            Enfonce;           // Le bouton est enfoncÚ
 | 
			
		||||
  byte            Enfonce;           // Le bouton est enfoncé
 | 
			
		||||
  byte            Forme;             // Forme du bouton
 | 
			
		||||
 | 
			
		||||
  // Information sur les clicks de la souris:
 | 
			
		||||
  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
 | 
			
		||||
  word            Raccourci_gauche;  // Raccourci clavier Úquivalent à un click gauche sur le bouton
 | 
			
		||||
  word            Raccourci_droite;  // Raccourci clavier Úquivalent à un click droit  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
 | 
			
		||||
  word            Raccourci_gauche;  // Raccourci clavier équivalent … un click gauche 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:
 | 
			
		||||
  fonction_action Desenclencher;     // Action appelÚe lors du dÚsenclenchement du bouton
 | 
			
		||||
  // Informations sur le désenclenchement du bouton géré par le moteur:
 | 
			
		||||
  fonction_action Desenclencher;     // Action appelée lors du désenclenchement du bouton
 | 
			
		||||
  byte            Famille;           // Ensemble de boutons auquel celui-ci appartient
 | 
			
		||||
 | 
			
		||||
} 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 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:
 | 
			
		||||
 | 
			
		||||
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_Mode;    // Le mode smear est enclenché
 | 
			
		||||
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 word  Smear_Brosse_Largeur; // Largeur 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:
 | 
			
		||||
 | 
			
		||||
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_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_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_Loop; // Normal / Loop / No sat.
 | 
			
		||||
 | 
			
		||||
  // Mode stencil:
 | 
			
		||||
 | 
			
		||||
GLOBAL byte Stencil_Mode;  // Le mode stencil est enclenchÚ
 | 
			
		||||
GLOBAL byte Stencil[256];  // Tableau des couleurs protÚgÚes
 | 
			
		||||
GLOBAL byte Stencil_Mode;  // Le mode stencil est enclenché
 | 
			
		||||
GLOBAL byte Stencil[256];  // Tableau des couleurs protégées
 | 
			
		||||
 | 
			
		||||
  // 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_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
 | 
			
		||||
 | 
			
		||||
  // 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 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_Hauteur; // Hauteur de la trame
 | 
			
		||||
 | 
			
		||||
  // Mode colorize:
 | 
			
		||||
 | 
			
		||||
GLOBAL byte Colorize_Mode;          // Le mode Colorize est enclenchÚ
 | 
			
		||||
GLOBAL byte Colorize_Opacite;       // IntensitÚ du Colorize
 | 
			
		||||
GLOBAL byte Colorize_Mode;          // Le mode Colorize est enclenché
 | 
			
		||||
GLOBAL byte Colorize_Opacite;       // Intensité du Colorize
 | 
			
		||||
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_B[64];
 | 
			
		||||
 | 
			
		||||
  // 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
 | 
			
		||||
 | 
			
		||||
  // Mode Tiling:
 | 
			
		||||
 | 
			
		||||
GLOBAL byte  Tiling_Mode;       // Le mode Tiling est enclenchÚ
 | 
			
		||||
GLOBAL short Tiling_Decalage_X; // DÚcalage du tiling en X
 | 
			
		||||
GLOBAL short Tiling_Decalage_Y; // DÚcalage du tiling en Y
 | 
			
		||||
GLOBAL byte  Tiling_Mode;       // Le mode Tiling est enclenché
 | 
			
		||||
GLOBAL short Tiling_Decalage_X; // Décalage du tiling en X
 | 
			
		||||
GLOBAL short Tiling_Decalage_Y; // Décalage du tiling en Y
 | 
			
		||||
 | 
			
		||||
  // 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
 | 
			
		||||
 | 
			
		||||
  // Mode loupe:
 | 
			
		||||
@ -444,7 +444,7 @@ GLOBAL word  TABLE_ZOOM[NB_FACTEURS_DE_ZOOM][512];
 | 
			
		||||
  extern word FACTEUR_ZOOM[NB_FACTEURS_DE_ZOOM];
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  // DonnÚes sur les ellipses et les cercles:
 | 
			
		||||
  // Données sur les ellipses et les cercles:
 | 
			
		||||
 | 
			
		||||
GLOBAL dword Table_des_carres[1025];
 | 
			
		||||
GLOBAL long  Ellipse_Curseur_X;
 | 
			
		||||
@ -457,36 +457,36 @@ GLOBAL long  Cercle_Curseur_X;
 | 
			
		||||
GLOBAL long  Cercle_Curseur_Y;
 | 
			
		||||
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_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 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 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_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 fonction_degrade Traiter_degrade; // Fonction de traitement du dÚgradÚ, varie selon la mÚthode choisie par l'utilisateur.
 | 
			
		||||
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 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 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 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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // DonnÚes sur le Spray:
 | 
			
		||||
  // Données sur le Spray:
 | 
			
		||||
 | 
			
		||||
GLOBAL byte  Spray_Mode;            // Mode Mono(1) ou Multicolore(0)
 | 
			
		||||
GLOBAL short Spray_Size;            // Diamètre du spray en pixels
 | 
			
		||||
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 short Spray_Size;            // DiamŠtre du spray en pixels
 | 
			
		||||
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_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 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_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 byte Fore_color;
 | 
			
		||||
GLOBAL byte Back_color;
 | 
			
		||||
GLOBAL byte Mode_de_dessin_en_cours;
 | 
			
		||||
@ -494,7 +494,7 @@ GLOBAL byte Courbe_en_cours;
 | 
			
		||||
GLOBAL byte Ligne_en_cours;
 | 
			
		||||
GLOBAL byte Couleur_debut_palette;
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
@ -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_edi;
 | 
			
		||||
    // 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_WinFuncPtr; // Handler software de changement de banque
 | 
			
		||||
GLOBAL word * VESA_Liste_des_modes;
 | 
			
		||||
GLOBAL dword  VESA_Decalage_synchro;
 | 
			
		||||
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_B_utilisee;
 | 
			
		||||
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 word VESA_Taille_memoire;
 | 
			
		||||
 | 
			
		||||
  // Les diffÚrents sprites:
 | 
			
		||||
  // Les différents sprites:
 | 
			
		||||
 | 
			
		||||
GLOBAL byte BLOCK_MENU[HAUTEUR_MENU][LARGEUR_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;
 | 
			
		||||
 | 
			
		||||
  // Les donnÚes de l'aide:
 | 
			
		||||
  // Les données de l'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 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_en_cours;           // N° de l'opÚration en cours
 | 
			
		||||
GLOBAL word Operation_Pile[TAILLE_PILE_OPERATIONS]; // Pile simplifiÚe
 | 
			
		||||
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_Pile[TAILLE_PILE_OPERATIONS]; // Pile simplifiée
 | 
			
		||||
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_X;
 | 
			
		||||
@ -569,12 +569,12 @@ GLOBAL short Pipette_Y;
 | 
			
		||||
#ifdef VARIABLES_GLOBALES
 | 
			
		||||
  byte CURSEUR_D_OPERATION[NB_OPERATIONS]=
 | 
			
		||||
  {
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Dessin à la main continu
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Dessin à la main discontinu
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Dessin à la main point par point
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Dessin … la main continu
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Dessin … la main discontinu
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Dessin … la main point par point
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Lignes
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Lignes reliÚes
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Lignes centrÚes
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Lignes reliées
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Lignes centrées
 | 
			
		||||
    FORME_CURSEUR_CIBLE_XOR        , // Rectangle vide
 | 
			
		||||
    FORME_CURSEUR_CIBLE_XOR        , // Rectangle plein
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Cercles vides
 | 
			
		||||
@ -585,18 +585,18 @@ GLOBAL short Pipette_Y;
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Remplacer
 | 
			
		||||
    FORME_CURSEUR_CIBLE_XOR        , // Prise de brosse rectangulaire
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Prise d'une brosse multiforme
 | 
			
		||||
    FORME_CURSEUR_CIBLE_PIPETTE    , // RÚcupÚration d'une couleur
 | 
			
		||||
    FORME_CURSEUR_RECTANGLE_XOR    , // Positionnement de la fenêtre de loupe
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Courbe à 3 points
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Courbe à 4 points
 | 
			
		||||
    FORME_CURSEUR_CIBLE_PIPETTE    , // Récupération d'une couleur
 | 
			
		||||
    FORME_CURSEUR_RECTANGLE_XOR    , // Positionnement de la fenˆtre de loupe
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Courbe … 3 points
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Courbe … 4 points
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Spray
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Polygone
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Polyforme
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Polyfill
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Polyforme rempli
 | 
			
		||||
    FORME_CURSEUR_MULTIDIRECTIONNEL, // Scroll
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Cercles dÚgradÚs
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Ellipses dÚgradÚes
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Cercles dégradés
 | 
			
		||||
    FORME_CURSEUR_CIBLE            , // Ellipses dégradées
 | 
			
		||||
    FORME_CURSEUR_ROTATE_XOR       , // Faire tourner brosse
 | 
			
		||||
    FORME_CURSEUR_CIBLE_XOR        , // Etirer brosse
 | 
			
		||||
    FORME_CURSEUR_CIBLE              // Deformer brosse
 | 
			
		||||
@ -606,12 +606,12 @@ GLOBAL short Pipette_Y;
 | 
			
		||||
#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
 | 
			
		||||
{
 | 
			
		||||
  byte Effacer_curseur; // BoolÚen "il faut effacer le curseur pour l'opÚra."
 | 
			
		||||
  fonction_action Action;                                   // Action appelÚe
 | 
			
		||||
  byte Effacer_curseur; // Booléen "il faut effacer le curseur pour l'opéra."
 | 
			
		||||
  fonction_action Action;                                   // Action appelée
 | 
			
		||||
} 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 ------------------
 | 
			
		||||
 | 
			
		||||
  // 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_fichiers;
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
// ------------------- Inititialisation des formats connus -------------------
 | 
			
		||||
@ -641,21 +641,21 @@ void Rien_du_tout(void);
 | 
			
		||||
  // Extension du format
 | 
			
		||||
  char Format_Extension[NB_FORMATS_CONNUS][4]=
 | 
			
		||||
  {
 | 
			
		||||
    "PKM", // PKM
 | 
			
		||||
    "LBM", // LBM
 | 
			
		||||
    "GIF", // GIF
 | 
			
		||||
    "BMP", // BMP
 | 
			
		||||
    "PCX", // PCX
 | 
			
		||||
    "IMG", // IMG
 | 
			
		||||
    "SC?", // SCx
 | 
			
		||||
    "PI1", // PI1
 | 
			
		||||
    "PC1", // PC1
 | 
			
		||||
    "CEL", // CEL
 | 
			
		||||
    "KCF", // KCF
 | 
			
		||||
    "PAL"  // PAL
 | 
			
		||||
    "pkm", // PKM
 | 
			
		||||
    "lbm", // LBM
 | 
			
		||||
    "gif", // GIF
 | 
			
		||||
    "bmp", // BMP
 | 
			
		||||
    "pcx", // PCX
 | 
			
		||||
    "img", // IMG
 | 
			
		||||
    "sc?", // SCx
 | 
			
		||||
    "pi1", // PI1
 | 
			
		||||
    "pc1", // PC1
 | 
			
		||||
    "cel", // CEL
 | 
			
		||||
    "kcf", // KCF
 | 
			
		||||
    "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]=
 | 
			
		||||
  {
 | 
			
		||||
    Test_PKM, // PKM
 | 
			
		||||
@ -672,7 +672,7 @@ void Rien_du_tout(void);
 | 
			
		||||
    Test_PAL  // PAL
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // Fonction à appeler pour charger l'image
 | 
			
		||||
  // Fonction … appeler pour charger l'image
 | 
			
		||||
  fonction_action Format_Load[NB_FORMATS_LOAD]=
 | 
			
		||||
  {
 | 
			
		||||
    Load_PKM, // PKM
 | 
			
		||||
@ -689,7 +689,7 @@ void Rien_du_tout(void);
 | 
			
		||||
    Load_PAL  // PAL
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // Fonction à appeler pour sauvegarder l'image
 | 
			
		||||
  // Fonction … appeler pour sauvegarder l'image
 | 
			
		||||
  fonction_action Format_Save[NB_FORMATS_SAVE]=
 | 
			
		||||
  {
 | 
			
		||||
    Save_PKM, // PKM
 | 
			
		||||
@ -706,7 +706,7 @@ void Rien_du_tout(void);
 | 
			
		||||
    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]=
 | 
			
		||||
  {
 | 
			
		||||
    1, // PKM
 | 
			
		||||
@ -748,9 +748,9 @@ void Rien_du_tout(void);
 | 
			
		||||
  extern byte Format_Commentaire[NB_FORMATS_CONNUS];
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
GLOBAL signed char Erreur_fichier; // 0: opération I/O OK
 | 
			
		||||
                                   // 1: Erreur dès le début de l'opération
 | 
			
		||||
                                   // 2: Erreur durant l'opération => données modifiées
 | 
			
		||||
GLOBAL signed char Erreur_fichier; // 0: op‚ration I/O OK
 | 
			
		||||
                                   // 1: Erreur dŠs le d‚but de l'op‚ration
 | 
			
		||||
                                   // 2: Erreur durant l'op‚ration => donn‚es modifi‚es
 | 
			
		||||
                                   //-1: Interruption du chargement d'une preview
 | 
			
		||||
 | 
			
		||||
GLOBAL int Ligne_INI;
 | 
			
		||||
@ -759,7 +759,7 @@ GLOBAL fonction_afficheur Pixel_de_chargement;
 | 
			
		||||
GLOBAL fonction_lecteur   Lit_pixel_de_sauvegarde;
 | 
			
		||||
 | 
			
		||||
/********************
 | 
			
		||||
 * Spécifique à SDL *
 | 
			
		||||
 * Sp‚cifique … SDL *
 | 
			
		||||
 ********************/
 | 
			
		||||
GLOBAL SDL_Surface * Ecran_SDL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										120
									
								
								readline.c
									
									
									
									
									
								
							
							
						
						
									
										120
									
								
								readline.c
									
									
									
									
									
								
							@ -1,6 +1,6 @@
 | 
			
		||||
/************************************************************************
 | 
			
		||||
*                                                                       *
 | 
			
		||||
* READLINE (proc‚dure 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_FOND_CURSEUR  CM_Fonce
 | 
			
		||||
 | 
			
		||||
// Vérification de la validité d'un nom de fichier
 | 
			
		||||
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.
 | 
			
		||||
// Suppresion d'un caractère à une certaine POSITION dans une CHAINE.
 | 
			
		||||
void Supprimer_caractere(char * Chaine, byte 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)
 | 
			
		||||
//  Insertion d'une LETTRE … une certaine POSITION
 | 
			
		||||
//  Insertion d'une LETTRE à une certaine POSITION
 | 
			
		||||
//  dans une CHAINE d'une certaine TAILLE.
 | 
			
		||||
{
 | 
			
		||||
  char Char_tempo;
 | 
			
		||||
 | 
			
		||||
  for (;Lettre!='\0';Position++)
 | 
			
		||||
  {
 | 
			
		||||
    // On m‚morise le caractŠre qui se trouve en "Position"
 | 
			
		||||
    // On mémorise le caractère qui se trouve en "Position"
 | 
			
		||||
    Char_tempo=Chaine[Position];
 | 
			
		||||
    // On splotch la lettre … ins‚rer
 | 
			
		||||
    // On splotch la lettre à insérer
 | 
			
		||||
    Chaine[Position]=Lettre;
 | 
			
		||||
    // On place le caractŠre m‚moris‚ dans "Lettre" comme nouvelle lettre … ins‚rer
 | 
			
		||||
    // On place le caractère mémorisé dans "Lettre" comme nouvelle lettre à insérer
 | 
			
		||||
    Lettre=Char_tempo;
 | 
			
		||||
  }
 | 
			
		||||
  // On termine la chaine
 | 
			
		||||
  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)
 | 
			
		||||
{
 | 
			
		||||
@ -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 :-)            *
 | 
			
		||||
//****************************************************************************
 | 
			
		||||
byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_saisie)
 | 
			
		||||
// ParamŠtres:
 | 
			
		||||
//   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)
 | 
			
		||||
//   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)
 | 
			
		||||
// Paramètres:
 | 
			
		||||
//   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)
 | 
			
		||||
//   Taille_maxi  : Nombre de caractères logeant dans la zone de saisie
 | 
			
		||||
//   Type_saisie  : 0=Chaîne, 1=Nombre, 2=Nom de fichier
 | 
			
		||||
// Sortie:
 | 
			
		||||
//   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;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // 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),
 | 
			
		||||
        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);
 | 
			
		||||
 | 
			
		||||
  if (Type_saisie==1)
 | 
			
		||||
    itoa(atoi(Chaine),Chaine,10); // On tasse la chaine … gauche
 | 
			
		||||
  //  Chaine[0]='\0';    // On efface la chaŒne si c'est valeur num‚rique
 | 
			
		||||
    itoa(atoi(Chaine),Chaine,10); // On tasse la chaine à gauche
 | 
			
		||||
  //  Chaine[0]='\0';    // On efface la chaîne si c'est valeur numérique
 | 
			
		||||
 | 
			
		||||
  Taille=strlen(Chaine);
 | 
			
		||||
  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);
 | 
			
		||||
              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),
 | 
			
		||||
                    Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
 | 
			
		||||
              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
 | 
			
		||||
            if (Position)
 | 
			
		||||
            {
 | 
			
		||||
              // Effacement de la chaŒne
 | 
			
		||||
              // Effacement de la chaîne
 | 
			
		||||
              if (Position==Taille)
 | 
			
		||||
                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);
 | 
			
		||||
@ -156,7 +146,7 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
 | 
			
		||||
      case SDLK_HOME : // Home
 | 
			
		||||
            if (Position)
 | 
			
		||||
            {
 | 
			
		||||
              // Effacement de la chaŒne
 | 
			
		||||
              // Effacement de la chaîne
 | 
			
		||||
              if (Position==Taille)
 | 
			
		||||
                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);
 | 
			
		||||
@ -172,19 +162,15 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_maxi,byte Type_sai
 | 
			
		||||
        {
 | 
			
		||||
          Supprimer_caractere(Chaine,--Position);
 | 
			
		||||
          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),
 | 
			
		||||
                Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
 | 
			
		||||
          Rafficher_toute_la_chaine(Pos_X,Pos_Y,Chaine,Position);
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
      case SDLK_RETURN :
 | 
			
		||||
        if ( (Type_saisie!=2) || (Chaine_valide(Chaine)) )
 | 
			
		||||
          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]
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
      case SDLK_ESCAPE :
 | 
			
		||||
        // On restaure la 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
 | 
			
		||||
          switch(Type_saisie)
 | 
			
		||||
          {
 | 
			
		||||
            case 0 : // N'importe quelle chaŒne:
 | 
			
		||||
              if (Touche_lue>=' ')
 | 
			
		||||
            case 0 : // N'importe quelle chaîne:
 | 
			
		||||
              if (Touche_lue>=' ' && Touche_lue<= 255)
 | 
			
		||||
                Touche_autorisee=1;
 | 
			
		||||
              break;
 | 
			
		||||
            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;
 | 
			
		||||
              break;
 | 
			
		||||
            default : // Nom de fichier
 | 
			
		||||
              // On commence par passez la lettre en majuscule
 | 
			
		||||
              if ( (Touche_lue>='a') && (Touche_lue<='z') )
 | 
			
		||||
                Touche_lue-=32;
 | 
			
		||||
              // Ensuite on regarde si la touche est autoris‚e
 | 
			
		||||
              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!=']') )
 | 
			
		||||
              // On regarde si la touche est autorisée
 | 
			
		||||
              if ( CaractereValide(Touche_lue))
 | 
			
		||||
                Touche_autorisee=1;
 | 
			
		||||
          } // Fin du "switch(Type_saisie)"
 | 
			
		||||
 | 
			
		||||
          // Si la touche ‚tait autoris‚e...
 | 
			
		||||
          // Si la touche était autorisée...
 | 
			
		||||
          if (Touche_autorisee)
 | 
			
		||||
          {
 | 
			
		||||
            // ... alors on l'insŠre ...
 | 
			
		||||
            // ... alors on l'insère ...
 | 
			
		||||
            Inserer_caractere(Chaine,Touche_lue,Position/*,Taille*/);
 | 
			
		||||
            // ce qui augmente la taille de la chaine
 | 
			
		||||
            Taille++;
 | 
			
		||||
            // et qui risque de d‚placer le curseur vers la droite
 | 
			
		||||
            // et qui risque de déplacer le curseur vers la droite
 | 
			
		||||
            if (Taille<Taille_maxi)
 | 
			
		||||
              Position++;
 | 
			
		||||
            // 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 "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),
 | 
			
		||||
        Taille_maxi*(Menu_Facteur_X<<3),(Menu_Facteur_Y<<3),COULEUR_FOND);
 | 
			
		||||
  // On raffiche la chaine correctement
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user