From a3f2b7c2f8bf7e14cd66d3b8c2269802de272962 Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Mon, 15 Sep 2008 00:32:08 +0000 Subject: [PATCH] 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 --- boutons.c | 15 +-- global.h | 354 ++++++++++++++++++++++++++--------------------------- readline.c | 120 ++++++++---------- 3 files changed, 234 insertions(+), 255 deletions(-) diff --git a/boutons.c b/boutons.c index 83a13401..f63f1856 100644 --- a/boutons.c +++ b/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) diff --git a/global.h b/global.h index 99b6c487..0bc28d3d 100644 --- a/global.h +++ b/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 diff --git a/readline.c b/readline.c index 01dc0935..703dfd99 100644 --- a/readline.c +++ b/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=' ') + 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