Code cleanup: Removed the code related to Save/Load window from buttons.c, transferred it to files.c. Files.h now only exposes this window's function.
Some code related to this window is still in loadsave.c (stuff for preview) git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@695 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
		
							parent
							
								
									994c1ce713
								
							
						
					
					
						commit
						fa71dea18d
					
				
							
								
								
									
										911
									
								
								boutons.c
									
									
									
									
									
								
							
							
						
						
									
										911
									
								
								boutons.c
									
									
									
									
									
								
							@ -54,8 +54,6 @@
 | 
			
		||||
 | 
			
		||||
#define FILENAMESPACE 13
 | 
			
		||||
 | 
			
		||||
#define Display_Window(x,y) UpdateRect(Fenetre_Pos_X,Fenetre_Pos_Y,(x)*Menu_Facteur_X,(y)*Menu_Facteur_Y);
 | 
			
		||||
 | 
			
		||||
extern short Old_MX;
 | 
			
		||||
extern short Old_MY;
 | 
			
		||||
 | 
			
		||||
@ -2231,915 +2229,6 @@ void Bouton_Brosse_monochrome(void)
 | 
			
		||||
  Afficher_curseur();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//------------------------ Chargements et sauvegardes ------------------------
 | 
			
		||||
 | 
			
		||||
void Print_repertoire_courant(void)
 | 
			
		||||
//
 | 
			
		||||
// Affiche Principal_Repertoire_courant sur 37 caractères
 | 
			
		||||
//
 | 
			
		||||
{
 | 
			
		||||
  char Nom_temporaire[TAILLE_MAXI_PATH+1]; // Nom tronqué
 | 
			
		||||
  int  length; // length du répertoire courant
 | 
			
		||||
  int  Indice;   // Indice de parcours de la chaine complète
 | 
			
		||||
 | 
			
		||||
  Block(Fenetre_Pos_X+(Menu_Facteur_X*7),Fenetre_Pos_Y+(Menu_Facteur_Y*43),Menu_Facteur_X*37*8,Menu_Facteur_Y<<3,CM_Clair);
 | 
			
		||||
 | 
			
		||||
  length=strlen(Principal_Repertoire_courant);
 | 
			
		||||
  if (length>TAILLE_MAXI_PATH)
 | 
			
		||||
  { // Doh! il va falloir tronquer le répertoire (bouh !)
 | 
			
		||||
 | 
			
		||||
    // On commence par copier bêtement les 3 premiers caractères (e.g. "C:\")
 | 
			
		||||
    for (Indice=0;Indice<3;Indice++)
 | 
			
		||||
      Nom_temporaire[Indice]=Principal_Repertoire_courant[Indice];
 | 
			
		||||
 | 
			
		||||
    // On y rajoute 3 petits points:
 | 
			
		||||
    strcpy(Nom_temporaire+3,"...");
 | 
			
		||||
 | 
			
		||||
    //  Ensuite, on cherche un endroit à partir duquel on pourrait loger tout
 | 
			
		||||
    // le reste de la chaine (Ouaaaaaah!!! Vachement fort le mec!!)
 | 
			
		||||
    for (Indice++;Indice<length;Indice++)
 | 
			
		||||
      if ( (Principal_Repertoire_courant[Indice]==SEPARATEUR_CHEMIN[0]) &&
 | 
			
		||||
           (length-Indice<=TAILLE_MAXI_PATH-6) )
 | 
			
		||||
      {
 | 
			
		||||
        // Ouf: on vient de trouver un endroit dans la chaîne à partir duquel
 | 
			
		||||
        // on peut faire la copie:
 | 
			
		||||
        strcpy(Nom_temporaire+6,Principal_Repertoire_courant+Indice);
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    // Enfin, on peut afficher la chaîne tronquée
 | 
			
		||||
    Print_dans_fenetre(7,43,Nom_temporaire,CM_Noir,CM_Clair);
 | 
			
		||||
  }
 | 
			
		||||
  else // Ahhh! La chaîne peut loger tranquillement dans la fenêtre
 | 
			
		||||
    Print_dans_fenetre(7,43,Principal_Repertoire_courant,CM_Noir,CM_Clair);
 | 
			
		||||
    
 | 
			
		||||
  UpdateRect(Fenetre_Pos_X+(Menu_Facteur_X*7),Fenetre_Pos_Y+(Menu_Facteur_Y*43),Menu_Facteur_X*37*8,Menu_Facteur_Y<<3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Print_Nom_fichier_dans_selecteur(void)
 | 
			
		||||
//
 | 
			
		||||
// Affiche Principal_Nom_fichier dans le Fileselect
 | 
			
		||||
//
 | 
			
		||||
{
 | 
			
		||||
  Block(Fenetre_Pos_X+(Menu_Facteur_X*(13+9*8)),Fenetre_Pos_Y+(Menu_Facteur_Y*90),Menu_Facteur_X*(27*8),Menu_Facteur_Y<<3,CM_Clair);
 | 
			
		||||
  Print_dans_fenetre_limite(13+9*8,90,Principal_Nom_fichier,27,CM_Noir,CM_Clair);
 | 
			
		||||
  UpdateRect(Fenetre_Pos_X+(Menu_Facteur_X*(13+9*8)),Fenetre_Pos_Y+(Menu_Facteur_Y*90),Menu_Facteur_X*(27*8),Menu_Facteur_Y<<3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int   Type_selectionne; // Utilisé pour mémoriser le type d'entrée choisi
 | 
			
		||||
                        // dans le selecteur de fichier.
 | 
			
		||||
 | 
			
		||||
void Preparer_et_afficher_liste_fichiers(short Position, short offset,
 | 
			
		||||
                                         T_Bouton_scroller * button)
 | 
			
		||||
{
 | 
			
		||||
  button->Nb_elements=Liste_Nb_elements;
 | 
			
		||||
  button->Position=Position;
 | 
			
		||||
  Calculer_hauteur_curseur_jauge(button);
 | 
			
		||||
  Fenetre_Dessiner_jauge(button);
 | 
			
		||||
  // On efface les anciens noms de fichier:
 | 
			
		||||
  Block(Fenetre_Pos_X+(Menu_Facteur_X<<3),Fenetre_Pos_Y+(Menu_Facteur_Y*(89+FILENAMESPACE)),Menu_Facteur_X*98,Menu_Facteur_Y*82,CM_Noir);
 | 
			
		||||
  // On affiche les nouveaux:
 | 
			
		||||
  Afficher_la_liste_des_fichiers(Position,offset);
 | 
			
		||||
 | 
			
		||||
  UpdateRect(Fenetre_Pos_X+(Menu_Facteur_X<<3),Fenetre_Pos_Y+(Menu_Facteur_Y*(89+FILENAMESPACE)),Menu_Facteur_X*98,Menu_Facteur_Y*82);
 | 
			
		||||
 | 
			
		||||
  // On récupère le nom du schmilblick à "accéder"
 | 
			
		||||
  Determiner_element_de_la_liste(Position,offset,Principal_Nom_fichier,&Type_selectionne);
 | 
			
		||||
  // On affiche le nouveau nom de fichier
 | 
			
		||||
  Print_Nom_fichier_dans_selecteur();
 | 
			
		||||
  // On affiche le nom du répertoire courant
 | 
			
		||||
  Print_repertoire_courant();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Relire_liste_fichiers(byte Filtre, short Position, short offset,
 | 
			
		||||
                           T_Bouton_scroller * button)
 | 
			
		||||
{
 | 
			
		||||
  Lire_liste_des_fichiers(Filtre);
 | 
			
		||||
  Trier_la_liste_des_fichiers();
 | 
			
		||||
  Preparer_et_afficher_liste_fichiers(Position,offset,button);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void On_vient_de_scroller_dans_le_fileselect(T_Bouton_scroller * Scroller_de_fichiers)
 | 
			
		||||
{
 | 
			
		||||
  char Ancien_nom_de_fichier[TAILLE_CHEMIN_FICHIER];
 | 
			
		||||
 | 
			
		||||
  strcpy(Ancien_nom_de_fichier,Principal_Nom_fichier);
 | 
			
		||||
 | 
			
		||||
  // On regarde si la liste a bougé
 | 
			
		||||
  if (Scroller_de_fichiers->Position!=Principal_File_list_Position)
 | 
			
		||||
  {
 | 
			
		||||
    // Si c'est le cas, il faut mettre à jour la jauge
 | 
			
		||||
    Scroller_de_fichiers->Position=Principal_File_list_Position;
 | 
			
		||||
    Fenetre_Dessiner_jauge(Scroller_de_fichiers);
 | 
			
		||||
  }
 | 
			
		||||
  // On récupére le nom du schmilblick à "accéder"
 | 
			
		||||
  Determiner_element_de_la_liste(Principal_File_list_Position,Principal_File_list_Decalage,Principal_Nom_fichier,&Type_selectionne);
 | 
			
		||||
  if (strcmp(Ancien_nom_de_fichier,Principal_Nom_fichier))
 | 
			
		||||
    Nouvelle_preview=1;
 | 
			
		||||
 | 
			
		||||
  // On affiche le nouveau nom de fichier
 | 
			
		||||
  Print_Nom_fichier_dans_selecteur();
 | 
			
		||||
  Afficher_curseur();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
short Position_fichier_dans_liste(char * fname)
 | 
			
		||||
{
 | 
			
		||||
  Element_de_liste_de_fileselect * Element_courant;
 | 
			
		||||
  short  Indice;
 | 
			
		||||
 | 
			
		||||
  for (Indice=0, Element_courant=Liste_du_fileselect;
 | 
			
		||||
       ((Element_courant!=NULL) && (strcmp(Element_courant->NomComplet,fname)));
 | 
			
		||||
       Indice++,Element_courant=Element_courant->Suivant);
 | 
			
		||||
 | 
			
		||||
  return (Element_courant!=NULL)?Indice:0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Placer_barre_de_selection_sur(char * fname)
 | 
			
		||||
{
 | 
			
		||||
  short Indice;
 | 
			
		||||
 | 
			
		||||
  Indice=Position_fichier_dans_liste(fname);
 | 
			
		||||
 | 
			
		||||
  if ((Liste_Nb_elements<=10) || (Indice<5))
 | 
			
		||||
  {
 | 
			
		||||
    Principal_File_list_Position=0;
 | 
			
		||||
    Principal_File_list_Decalage=Indice;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    if (Indice>=Liste_Nb_elements-5)
 | 
			
		||||
    {
 | 
			
		||||
      Principal_File_list_Position=Liste_Nb_elements-10;
 | 
			
		||||
      Principal_File_list_Decalage=Indice-Principal_File_list_Position;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      Principal_File_list_Position=Indice-4;
 | 
			
		||||
      Principal_File_list_Decalage=4;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
char FFF_Meilleur_nom[TAILLE_CHEMIN_FICHIER];
 | 
			
		||||
char * Nom_correspondant_le_mieux_a(char * fname)
 | 
			
		||||
{
 | 
			
		||||
  char * Pointeur_Meilleur_nom;
 | 
			
		||||
  Element_de_liste_de_fileselect * Element_courant;
 | 
			
		||||
  byte   Lettres_identiques=0;
 | 
			
		||||
  byte   counter;
 | 
			
		||||
 | 
			
		||||
  strcpy(FFF_Meilleur_nom,Principal_Nom_fichier);
 | 
			
		||||
  Pointeur_Meilleur_nom=NULL;
 | 
			
		||||
 | 
			
		||||
  for (Element_courant=Liste_du_fileselect; Element_courant!=NULL; Element_courant=Element_courant->Suivant)
 | 
			
		||||
  {
 | 
			
		||||
    if ( (!Config.Find_file_fast)
 | 
			
		||||
      || (Config.Find_file_fast==(Element_courant->Type+1)) )
 | 
			
		||||
    {
 | 
			
		||||
      // On compare et si c'est mieux, on stocke dans Meilleur_nom
 | 
			
		||||
      for (counter=0; fname[counter]!='\0' && tolower(Element_courant->NomComplet[counter])==tolower(fname[counter]); counter++);
 | 
			
		||||
      if (counter>Lettres_identiques)
 | 
			
		||||
      {
 | 
			
		||||
        Lettres_identiques=counter;
 | 
			
		||||
        strcpy(FFF_Meilleur_nom,Element_courant->NomComplet);
 | 
			
		||||
        Pointeur_Meilleur_nom=Element_courant->NomComplet;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return Pointeur_Meilleur_nom;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
byte Bouton_Load_ou_Save(byte load, byte image)
 | 
			
		||||
  // load=1 => On affiche le menu du bouton LOAD
 | 
			
		||||
  // load=0 => On affiche le menu du bouton SAVE
 | 
			
		||||
{
 | 
			
		||||
  short Bouton_clicke;
 | 
			
		||||
  T_Bouton_scroller * Scroller_de_fichiers;
 | 
			
		||||
  T_Bouton_dropdown * Dropdown_des_formats;
 | 
			
		||||
  T_Bouton_dropdown * Dropdown_bookmark[4];
 | 
			
		||||
  short Temp;
 | 
			
		||||
  int Bidon=0;       // Sert à appeler SDL_GetKeyState
 | 
			
		||||
  byte  Charger_ou_sauver_l_image=0;
 | 
			
		||||
  byte  On_a_clicke_sur_OK=0;// Indique si on a clické sur Load ou Save ou sur
 | 
			
		||||
                             //un bouton enclenchant Load ou Save juste après.
 | 
			
		||||
  Composantes * Palette_initiale; // |  Données concernant l'image qui
 | 
			
		||||
  byte  Image_modifiee_initiale;         // |  sont mémorisées pour pouvoir
 | 
			
		||||
  short Largeur_image_initiale;          // |- être restaurées en sortant,
 | 
			
		||||
  short Hauteur_image_initiale;          // |  parce que la preview elle les
 | 
			
		||||
  byte  Back_color_initiale;             // |  fout en l'air (c'te conne).
 | 
			
		||||
  char  Nom_fichier_initial[TAILLE_CHEMIN_FICHIER]; // Sert à laisser le nom courant du fichier en cas de sauvegarde
 | 
			
		||||
  char  Repertoire_precedent[TAILLE_CHEMIN_FICHIER]; // Répertoire d'où l'on vient après un CHDIR
 | 
			
		||||
  char  Commentaire_initial[TAILLE_COMMENTAIRE+1];
 | 
			
		||||
  char  Fichier_recherche[TAILLE_CHEMIN_FICHIER]="";
 | 
			
		||||
  char  Nom_fichier_Save[TAILLE_CHEMIN_FICHIER];
 | 
			
		||||
  char * Fichier_le_plus_ressemblant;
 | 
			
		||||
 | 
			
		||||
  Palette_initiale=(Composantes *)malloc(sizeof(T_Palette));
 | 
			
		||||
  memcpy(Palette_initiale,Principal_Palette,sizeof(T_Palette));
 | 
			
		||||
 | 
			
		||||
  Back_color_initiale=Back_color;
 | 
			
		||||
  Image_modifiee_initiale=Principal_Image_modifiee;
 | 
			
		||||
  Largeur_image_initiale=Principal_Largeur_image;
 | 
			
		||||
  Hauteur_image_initiale=Principal_Hauteur_image;
 | 
			
		||||
  strcpy(Nom_fichier_initial,Principal_Nom_fichier);
 | 
			
		||||
  strcpy(Commentaire_initial,Principal_Commentaire);
 | 
			
		||||
  if (load)
 | 
			
		||||
  {
 | 
			
		||||
    if (image)
 | 
			
		||||
      Ouvrir_fenetre(310,187+FILENAMESPACE,"Load picture");
 | 
			
		||||
    else
 | 
			
		||||
      Ouvrir_fenetre(310,187+FILENAMESPACE,"Load brush");
 | 
			
		||||
    Fenetre_Definir_bouton_normal(125,157+FILENAMESPACE,51,14,"Load",0,1,SDLK_RETURN); // 1
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    if (image)
 | 
			
		||||
      Ouvrir_fenetre(310,187+FILENAMESPACE,"Save picture");
 | 
			
		||||
    else
 | 
			
		||||
      Ouvrir_fenetre(310,187+FILENAMESPACE,"Save brush");
 | 
			
		||||
    Fenetre_Definir_bouton_normal(125,157+FILENAMESPACE,51,14,"Save",0,1,SDLK_RETURN); // 1
 | 
			
		||||
    if (Principal_Format==0) // Correction du *.*
 | 
			
		||||
    {
 | 
			
		||||
      Principal_Format=Principal_Format_fichier;
 | 
			
		||||
      Principal_File_list_Position=0;
 | 
			
		||||
      Principal_File_list_Decalage=0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (Principal_Format>NB_FORMATS_SAVE) // Correction d'un format insauvable
 | 
			
		||||
    {
 | 
			
		||||
      Principal_Format=FORMAT_PAR_DEFAUT;
 | 
			
		||||
      Principal_File_list_Position=0;
 | 
			
		||||
      Principal_File_list_Decalage=0;
 | 
			
		||||
    }
 | 
			
		||||
    // Affichage du commentaire
 | 
			
		||||
    if (FormatFichier[Principal_Format-1].Commentaire)
 | 
			
		||||
      Print_dans_fenetre(46,175+FILENAMESPACE,Principal_Commentaire,CM_Noir,CM_Clair);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Fenetre_Definir_bouton_normal(125,139+FILENAMESPACE,51,14,"Cancel",0,1,TOUCHE_ESC);  // 2
 | 
			
		||||
  Fenetre_Definir_bouton_normal(125, 89+FILENAMESPACE,51,14,"Delete",0,1,SDLK_DELETE); // 3
 | 
			
		||||
 | 
			
		||||
  // Cadre autour des formats
 | 
			
		||||
  Fenetre_Afficher_cadre(  7, 51,104, 35);
 | 
			
		||||
  // Cadre autour des infos sur le fichier de dessin
 | 
			
		||||
  Fenetre_Afficher_cadre(116, 51,187, 35);
 | 
			
		||||
  // Cadre autour de la preview
 | 
			
		||||
  Fenetre_Afficher_cadre_creux(179,88+FILENAMESPACE,124,84);
 | 
			
		||||
  // Cadre autour du fileselector
 | 
			
		||||
  Fenetre_Afficher_cadre_creux(  7,88+FILENAMESPACE,100,84);
 | 
			
		||||
 | 
			
		||||
  Fenetre_Definir_bouton_special(9,90+FILENAMESPACE,96,80);                      // 4
 | 
			
		||||
 | 
			
		||||
  // Scroller du fileselector
 | 
			
		||||
  Scroller_de_fichiers = Fenetre_Definir_bouton_scroller(110,89+FILENAMESPACE,82,1,10,0);               // 5
 | 
			
		||||
 | 
			
		||||
  // Dropdown pour les formats de fichier
 | 
			
		||||
  Dropdown_des_formats=
 | 
			
		||||
    Fenetre_Definir_bouton_dropdown(70,56,36,16,0,
 | 
			
		||||
      (Principal_Format==0)?"*.*":FormatFichier[Principal_Format-1].Extension,
 | 
			
		||||
      1,0,1,A_DROITE|A_GAUCHE); // 6
 | 
			
		||||
  if (load)
 | 
			
		||||
    Fenetre_Dropdown_choix(Dropdown_des_formats,0,"*.*");
 | 
			
		||||
  for (Temp=0;Temp<NB_FORMATS_CONNUS;Temp++)
 | 
			
		||||
  {
 | 
			
		||||
    if ((load && FormatFichier[Temp].Load) || 
 | 
			
		||||
      (!load && FormatFichier[Temp].Save))
 | 
			
		||||
        Fenetre_Dropdown_choix(Dropdown_des_formats,Temp+1,FormatFichier[Temp].Extension);
 | 
			
		||||
  }
 | 
			
		||||
  Print_dans_fenetre(12,61,"Format:",CM_Fonce,CM_Clair);
 | 
			
		||||
  
 | 
			
		||||
  // Texte de commentaire des dessins
 | 
			
		||||
  Print_dans_fenetre(7,174+FILENAMESPACE,"Txt:",CM_Fonce,CM_Clair);
 | 
			
		||||
  Fenetre_Definir_bouton_saisie(44,173+FILENAMESPACE,TAILLE_COMMENTAIRE); // 7
 | 
			
		||||
 | 
			
		||||
  // Cadre autour du nom de fichier
 | 
			
		||||
  //Fenetre_Afficher_cadre_creux(  7,87,296,15);
 | 
			
		||||
  Print_dans_fenetre(9,90,"Filename:",CM_Fonce,CM_Clair);
 | 
			
		||||
  // Saisie du nom de fichier
 | 
			
		||||
  Fenetre_Definir_bouton_saisie(11+9*8,88,27); // 8
 | 
			
		||||
 | 
			
		||||
  Print_dans_fenetre(120,55,"Image size :",CM_Fonce,CM_Clair);
 | 
			
		||||
  Print_dans_fenetre(120,63,"File size  :",CM_Fonce,CM_Clair);
 | 
			
		||||
  Print_dans_fenetre(120,72,"Format     :",CM_Fonce,CM_Clair);
 | 
			
		||||
 | 
			
		||||
  // Selecteur de Lecteur / Volume
 | 
			
		||||
  Fenetre_Definir_bouton_normal(8,17,117,23,"Select drive",0,1,SDLK_LAST); // 9
 | 
			
		||||
 | 
			
		||||
  // Bookmarks
 | 
			
		||||
  for (Temp=0;Temp<NB_BOOKMARKS;Temp++)
 | 
			
		||||
  {
 | 
			
		||||
    Dropdown_bookmark[Temp]=
 | 
			
		||||
      Fenetre_Definir_bouton_dropdown(126+(88+1)*(Temp%2),17+(Temp/2)*12,88,11,56,"",0,0,1,A_DROITE); // 10-13
 | 
			
		||||
    Fenetre_Afficher_sprite_drive(Dropdown_bookmark[Temp]->Pos_X+3,Dropdown_bookmark[Temp]->Pos_Y+2,5);
 | 
			
		||||
    Afficher_bookmark(Dropdown_bookmark[Temp],Temp);
 | 
			
		||||
  }
 | 
			
		||||
  // On prend bien soin de passer dans le répertoire courant (le bon qui faut! Oui madame!)
 | 
			
		||||
  if (load)
 | 
			
		||||
  {
 | 
			
		||||
    chdir(Principal_Repertoire_courant);
 | 
			
		||||
    Determiner_repertoire_courant();
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    chdir(Principal_Repertoire_fichier);
 | 
			
		||||
    Determiner_repertoire_courant();
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  // Affichage des premiers fichiers visibles:
 | 
			
		||||
  Relire_liste_fichiers(Principal_Format,Principal_File_list_Position,Principal_File_list_Decalage,Scroller_de_fichiers);
 | 
			
		||||
 | 
			
		||||
  if (!load)
 | 
			
		||||
  {
 | 
			
		||||
    // On initialise le nom de fichier à celui en cours et non pas celui sous
 | 
			
		||||
    // la barre de sélection
 | 
			
		||||
    strcpy(Principal_Nom_fichier,Nom_fichier_initial);
 | 
			
		||||
    // On affiche le nouveau nom de fichier
 | 
			
		||||
    Print_Nom_fichier_dans_selecteur();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Pixel_de_chargement=Pixel_Chargement_dans_preview;
 | 
			
		||||
  Nouvelle_preview=1;
 | 
			
		||||
  Display_Window(310,(187+FILENAMESPACE));
 | 
			
		||||
 | 
			
		||||
  Afficher_curseur();
 | 
			
		||||
 | 
			
		||||
  do
 | 
			
		||||
  {
 | 
			
		||||
    Bouton_clicke=Fenetre_Bouton_clicke();
 | 
			
		||||
 | 
			
		||||
    switch (Bouton_clicke)
 | 
			
		||||
    {
 | 
			
		||||
      case -1 :
 | 
			
		||||
      case  0 :
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case  1 : // Load ou Save
 | 
			
		||||
      if(load)
 | 
			
		||||
        {
 | 
			
		||||
          // Determine the type
 | 
			
		||||
          if(Fichier_existe(Principal_Nom_fichier)) 
 | 
			
		||||
          {
 | 
			
		||||
            Type_selectionne = 0;
 | 
			
		||||
            if(Repertoire_existe(Principal_Nom_fichier)) Type_selectionne = 1;
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
            Type_selectionne = 1;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
          if(Repertoire_existe(Principal_Nom_fichier)) Type_selectionne = 1;
 | 
			
		||||
          else Type_selectionne = 0;
 | 
			
		||||
        }
 | 
			
		||||
        On_a_clicke_sur_OK=1;
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case  2 : // Cancel
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case  3 : // Delete
 | 
			
		||||
        if (Liste_Nb_elements && (*Principal_Nom_fichier!='.') && Type_selectionne!=2)
 | 
			
		||||
        {
 | 
			
		||||
          char * Message;
 | 
			
		||||
          Effacer_curseur();
 | 
			
		||||
          // On affiche une demande de confirmation
 | 
			
		||||
          if (Principal_File_list_Position+Principal_File_list_Decalage>=Liste_Nb_repertoires)
 | 
			
		||||
          {
 | 
			
		||||
            Message="Delete file ?";
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
            Message="Remove directory ?";
 | 
			
		||||
          }
 | 
			
		||||
          if (Demande_de_confirmation(Message))
 | 
			
		||||
          {
 | 
			
		||||
            // Si c'est un fichier
 | 
			
		||||
            if (Principal_File_list_Position+Principal_File_list_Decalage>=Liste_Nb_repertoires)
 | 
			
		||||
              // On efface le fichier (si on peut)
 | 
			
		||||
              Temp=(!remove(Principal_Nom_fichier));
 | 
			
		||||
            else // Si c'est un repertoire
 | 
			
		||||
              // On efface le repertoire (si on peut)
 | 
			
		||||
              Temp=(!rmdir(Principal_Nom_fichier));
 | 
			
		||||
 | 
			
		||||
            if (Temp) // Temp indique si l'effacement s'est bien passé
 | 
			
		||||
            {
 | 
			
		||||
              // On remonte si c'était le dernier élément de la liste
 | 
			
		||||
              if (Principal_File_list_Position+Principal_File_list_Decalage==Liste_Nb_elements-1)
 | 
			
		||||
              {
 | 
			
		||||
                if (Principal_File_list_Position)
 | 
			
		||||
                  Principal_File_list_Position--;
 | 
			
		||||
                else
 | 
			
		||||
                  if (Principal_File_list_Decalage)
 | 
			
		||||
                    Principal_File_list_Decalage--;
 | 
			
		||||
              }
 | 
			
		||||
              else // Si ce n'était pas le dernier, il faut faire gaffe à ce
 | 
			
		||||
              {    // que ses copains d'en dessous ne remontent pas trop.
 | 
			
		||||
                if ( (Principal_File_list_Position)
 | 
			
		||||
                  && (Principal_File_list_Position+10==Liste_Nb_elements) )
 | 
			
		||||
                  {
 | 
			
		||||
                    Principal_File_list_Position--;
 | 
			
		||||
                    Principal_File_list_Decalage++;
 | 
			
		||||
                  }
 | 
			
		||||
              }
 | 
			
		||||
              // On relit les informations
 | 
			
		||||
              Relire_liste_fichiers(Principal_Format,Principal_File_list_Position,Principal_File_list_Decalage,Scroller_de_fichiers);
 | 
			
		||||
              // On demande la preview du nouveau fichier sur lequel on se trouve
 | 
			
		||||
              Nouvelle_preview=1;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
              Erreur(0);
 | 
			
		||||
 | 
			
		||||
            // On place la barre de sélection du brouillon au début s'il a le
 | 
			
		||||
            // même répertoire que l'image principale.
 | 
			
		||||
            if (!strcmp(Principal_Repertoire_courant,Brouillon_Repertoire_courant))
 | 
			
		||||
            {
 | 
			
		||||
              Brouillon_File_list_Position=0;
 | 
			
		||||
              Brouillon_File_list_Decalage=0;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case  4 : // Zone d'affichage de la liste de fichiers
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
 | 
			
		||||
        Temp=Calculer_decalage_click_dans_fileselector();
 | 
			
		||||
        if (Temp>=0)
 | 
			
		||||
        {
 | 
			
		||||
          if (Temp!=Principal_File_list_Decalage)
 | 
			
		||||
          {
 | 
			
		||||
            // On met à jour le décalage
 | 
			
		||||
            Principal_File_list_Decalage=Temp;
 | 
			
		||||
 | 
			
		||||
            // On récupére le nom du schmilblick à "accéder"
 | 
			
		||||
            Determiner_element_de_la_liste(Principal_File_list_Position,Principal_File_list_Decalage,Principal_Nom_fichier,&Type_selectionne);
 | 
			
		||||
            // On affiche le nouveau nom de fichier
 | 
			
		||||
            Print_Nom_fichier_dans_selecteur();
 | 
			
		||||
            // On affiche à nouveau la liste
 | 
			
		||||
            Afficher_la_liste_des_fichiers(Principal_File_list_Position,Principal_File_list_Decalage);
 | 
			
		||||
 | 
			
		||||
            // On vient de changer de nom de fichier, donc on doit s'appreter
 | 
			
		||||
            // a rafficher une preview
 | 
			
		||||
            Nouvelle_preview=1;
 | 
			
		||||
            *Fichier_recherche=0;
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
            //   En sauvegarde, si on a double-clické sur un répertoire, il
 | 
			
		||||
            // faut mettre le nom de fichier au nom du répertoire. Sinon, dans
 | 
			
		||||
            // certains cas, on risque de sauvegarder avec le nom du fichier
 | 
			
		||||
            // actuel au lieu de changer de répertoire.
 | 
			
		||||
            if (Principal_File_list_Position+Principal_File_list_Decalage<Liste_Nb_repertoires)
 | 
			
		||||
              Determiner_element_de_la_liste(Principal_File_list_Position,Principal_File_list_Decalage,Principal_Nom_fichier,&Type_selectionne);
 | 
			
		||||
 | 
			
		||||
            On_a_clicke_sur_OK=1;
 | 
			
		||||
            Nouvelle_preview=1;
 | 
			
		||||
            *Fichier_recherche=0;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        Afficher_curseur();
 | 
			
		||||
        Attendre_fin_de_click();
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case  5 : // Scroller de fichiers
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Principal_File_list_Position=Fenetre_Attribut2;
 | 
			
		||||
        // On récupére le nom du schmilblick à "accéder"
 | 
			
		||||
        Determiner_element_de_la_liste(Principal_File_list_Position,Principal_File_list_Decalage,Principal_Nom_fichier,&Type_selectionne);
 | 
			
		||||
        // On affiche le nouveau nom de fichier
 | 
			
		||||
        Print_Nom_fichier_dans_selecteur();
 | 
			
		||||
        // On affiche à nouveau la liste
 | 
			
		||||
        Afficher_la_liste_des_fichiers(Principal_File_list_Position,Principal_File_list_Decalage);
 | 
			
		||||
        Afficher_curseur();
 | 
			
		||||
        Nouvelle_preview=1;
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case  6 : // Scroller des formats
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        // On met à jour le format de browsing du fileselect:
 | 
			
		||||
        Principal_Format=Fenetre_Attribut2;
 | 
			
		||||
        // Comme on change de liste, on se place en début de liste:
 | 
			
		||||
        Principal_File_list_Position=0;
 | 
			
		||||
        Principal_File_list_Decalage=0;
 | 
			
		||||
        // Affichage des premiers fichiers visibles:
 | 
			
		||||
        Relire_liste_fichiers(Principal_Format,Principal_File_list_Position,Principal_File_list_Decalage,Scroller_de_fichiers);
 | 
			
		||||
        Afficher_curseur();
 | 
			
		||||
        Nouvelle_preview=1;
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case  7 : // Saisie d'un commentaire pour la sauvegarde
 | 
			
		||||
        if ( (!load) && (FormatFichier[Principal_Format-1].Commentaire) )
 | 
			
		||||
        {
 | 
			
		||||
          Readline(46,175+FILENAMESPACE,Principal_Commentaire,32,0);
 | 
			
		||||
          Afficher_curseur();
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
      case  8 : // Saisie du nom de fichier
 | 
			
		||||
 | 
			
		||||
        // Save the filename
 | 
			
		||||
        strcpy(Nom_fichier_Save, Principal_Nom_fichier);
 | 
			
		||||
 | 
			
		||||
        if (Readline(13+9*8,90,Principal_Nom_fichier,27,2))
 | 
			
		||||
        {
 | 
			
		||||
          //   On regarde s'il faut rajouter une extension. C'est-à-dire s'il
 | 
			
		||||
          // n'y a pas de '.' dans le nom du fichier.
 | 
			
		||||
          for(Temp=0,Bidon=0; ((Principal_Nom_fichier[Temp]) && (!Bidon)); Temp++)
 | 
			
		||||
            if (Principal_Nom_fichier[Temp]=='.')
 | 
			
		||||
              Bidon=1;
 | 
			
		||||
          if (!Bidon)
 | 
			
		||||
          {
 | 
			
		||||
            if (Principal_Format)
 | 
			
		||||
            {
 | 
			
		||||
              if(!Repertoire_existe(Principal_Nom_fichier))
 | 
			
		||||
              {
 | 
			
		||||
                 strcat(Principal_Nom_fichier,".");
 | 
			
		||||
                 strcat(Principal_Nom_fichier,FormatFichier[Principal_Format-1].Extension);
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
              // put default extension
 | 
			
		||||
              // (but maybe we should browse through all available ones until we find
 | 
			
		||||
              //  something suitable ?)
 | 
			
		||||
              if(!Repertoire_existe(Principal_Nom_fichier))
 | 
			
		||||
              {
 | 
			
		||||
                 strcat(Principal_Nom_fichier, ".pkm");
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          if(load)
 | 
			
		||||
          {
 | 
			
		||||
            // Determine the type
 | 
			
		||||
            if(Fichier_existe(Principal_Nom_fichier)) 
 | 
			
		||||
            {
 | 
			
		||||
              Type_selectionne = 0;
 | 
			
		||||
              if(Repertoire_existe(Principal_Nom_fichier)) Type_selectionne = 1;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
              Type_selectionne = 1;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
            if(Repertoire_existe(Principal_Nom_fichier)) Type_selectionne = 1;
 | 
			
		||||
            else Type_selectionne = 0;
 | 
			
		||||
          }
 | 
			
		||||
          On_a_clicke_sur_OK=1;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
          // Restore the old filename
 | 
			
		||||
          strcpy(Principal_Nom_fichier, Nom_fichier_Save);
 | 
			
		||||
          Print_Nom_fichier_dans_selecteur();
 | 
			
		||||
        }
 | 
			
		||||
        Afficher_curseur();
 | 
			
		||||
        break;
 | 
			
		||||
      case  9 : // Volume Select
 | 
			
		||||
          Effacer_curseur();
 | 
			
		||||
          //   Comme on tombe sur un disque qu'on connait pas, on se place en
 | 
			
		||||
          // début de liste:
 | 
			
		||||
          Principal_File_list_Position=0;
 | 
			
		||||
          Principal_File_list_Decalage=0;
 | 
			
		||||
          // Affichage des premiers fichiers visibles:
 | 
			
		||||
          Lire_liste_des_lecteurs();
 | 
			
		||||
          Trier_la_liste_des_fichiers();
 | 
			
		||||
          Preparer_et_afficher_liste_fichiers(Principal_File_list_Position,Principal_File_list_Decalage,Scroller_de_fichiers);
 | 
			
		||||
          Afficher_curseur();
 | 
			
		||||
          Nouvelle_preview=1;
 | 
			
		||||
          *Fichier_recherche=0;
 | 
			
		||||
          break;
 | 
			
		||||
      default:
 | 
			
		||||
          if (Bouton_clicke>=10 && Bouton_clicke<10+NB_BOOKMARKS)
 | 
			
		||||
          {
 | 
			
		||||
            // Bookmark
 | 
			
		||||
            char * Nom_repertoire;
 | 
			
		||||
            
 | 
			
		||||
            switch(Fenetre_Attribut2)
 | 
			
		||||
            {
 | 
			
		||||
              case -1: // bouton lui-même: aller au répertoire mémorisé
 | 
			
		||||
                if (Config.Bookmark_directory[Bouton_clicke-10])
 | 
			
		||||
                {
 | 
			
		||||
                  *Fichier_recherche=0;
 | 
			
		||||
                  strcpy(Principal_Nom_fichier,Config.Bookmark_directory[Bouton_clicke-10]);
 | 
			
		||||
                  Type_selectionne=1;
 | 
			
		||||
                  On_a_clicke_sur_OK=1;
 | 
			
		||||
                  *Fichier_recherche=0;
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
                
 | 
			
		||||
              case 0: // Set
 | 
			
		||||
                if (Config.Bookmark_directory[Bouton_clicke-10])
 | 
			
		||||
                  free(Config.Bookmark_directory[Bouton_clicke-10]);
 | 
			
		||||
                Config.Bookmark_label[Bouton_clicke-10][0]='\0';
 | 
			
		||||
                Temp=strlen(Principal_Repertoire_courant);
 | 
			
		||||
                Config.Bookmark_directory[Bouton_clicke-10]=malloc(Temp+1);
 | 
			
		||||
                strcpy(Config.Bookmark_directory[Bouton_clicke-10],Principal_Repertoire_courant);
 | 
			
		||||
                
 | 
			
		||||
                Nom_repertoire=Position_dernier_slash(Principal_Repertoire_courant);
 | 
			
		||||
                if (Nom_repertoire && Nom_repertoire[1]!='\0')
 | 
			
		||||
                  Nom_repertoire++;
 | 
			
		||||
                else
 | 
			
		||||
                  Nom_repertoire=Principal_Repertoire_courant;
 | 
			
		||||
                Temp=strlen(Nom_repertoire);
 | 
			
		||||
                strncpy(Config.Bookmark_label[Bouton_clicke-10],Nom_repertoire,8);
 | 
			
		||||
                if (Temp>8)
 | 
			
		||||
                {
 | 
			
		||||
                  Config.Bookmark_label[Bouton_clicke-10][7]=CARACTERE_SUSPENSION;
 | 
			
		||||
                  Config.Bookmark_label[Bouton_clicke-10][8]='\0';
 | 
			
		||||
                }
 | 
			
		||||
                Afficher_bookmark(Dropdown_bookmark[Bouton_clicke-10],Bouton_clicke-10);
 | 
			
		||||
                break;
 | 
			
		||||
                
 | 
			
		||||
              case 1: // Rename
 | 
			
		||||
                if (Config.Bookmark_directory[Bouton_clicke-10])
 | 
			
		||||
                {
 | 
			
		||||
                  // On enlève les "..." avant l'édition
 | 
			
		||||
                  char bookmark_label[8+1];
 | 
			
		||||
                  strcpy(bookmark_label, Config.Bookmark_label[Bouton_clicke-10]);
 | 
			
		||||
                  if (bookmark_label[7]==CARACTERE_SUSPENSION)
 | 
			
		||||
                    bookmark_label[7]='\0';
 | 
			
		||||
                  if (Readline_ex(Dropdown_bookmark[Bouton_clicke-10]->Pos_X+3+10,Dropdown_bookmark[Bouton_clicke-10]->Pos_Y+2,bookmark_label,8,8,0))
 | 
			
		||||
                    strcpy(Config.Bookmark_label[Bouton_clicke-10],bookmark_label);
 | 
			
		||||
                  Afficher_bookmark(Dropdown_bookmark[Bouton_clicke-10],Bouton_clicke-10);
 | 
			
		||||
                  Afficher_curseur();
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
 | 
			
		||||
              case 2: // Clear
 | 
			
		||||
                if (Config.Bookmark_directory[Bouton_clicke-10] && Demande_de_confirmation("Erase bookmark ?"))
 | 
			
		||||
                {
 | 
			
		||||
                  free(Config.Bookmark_directory[Bouton_clicke-10]);
 | 
			
		||||
                  Config.Bookmark_directory[Bouton_clicke-10]=NULL;
 | 
			
		||||
                  Config.Bookmark_label[Bouton_clicke-10][0]='\0';
 | 
			
		||||
                  Afficher_bookmark(Dropdown_bookmark[Bouton_clicke-10],Bouton_clicke-10);
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    switch (Touche)
 | 
			
		||||
    {
 | 
			
		||||
      case SDLK_UNKNOWN : break;
 | 
			
		||||
      case SDLK_DOWN : // Bas
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_Scroll_Down(&Principal_File_list_Position,&Principal_File_list_Decalage);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case SDLK_UP : // Haut
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_Scroll_Up(&Principal_File_list_Position,&Principal_File_list_Decalage);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case SDLK_PAGEDOWN : // PageDown
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_Page_Down(&Principal_File_list_Position,&Principal_File_list_Decalage,9);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case SDLK_PAGEUP : // PageUp
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_Page_Up(&Principal_File_list_Position,&Principal_File_list_Decalage,9);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case SDLK_END : // End
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_End(&Principal_File_list_Position,&Principal_File_list_Decalage);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case SDLK_HOME : // Home
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_Home(&Principal_File_list_Position,&Principal_File_list_Decalage);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case TOUCHE_MOUSEWHEELDOWN :
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_Page_Down(&Principal_File_list_Position,&Principal_File_list_Decalage,3);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case TOUCHE_MOUSEWHEELUP :
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_Page_Up(&Principal_File_list_Position,&Principal_File_list_Decalage,3);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case SDLK_BACKSPACE : // Backspace
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        // Si le choix ".." est bien en tête des propositions...
 | 
			
		||||
        if (!strcmp(Liste_du_fileselect->NomComplet,PARENT_DIR))
 | 
			
		||||
        {                              
 | 
			
		||||
          // On va dans le répertoire parent.
 | 
			
		||||
          strcpy(Principal_Nom_fichier,PARENT_DIR);
 | 
			
		||||
          Type_selectionne=1;
 | 
			
		||||
          On_a_clicke_sur_OK=1;
 | 
			
		||||
        }
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      default: // Autre => On se place sur le nom de fichier qui correspond
 | 
			
		||||
        if (Bouton_clicke<=0)
 | 
			
		||||
        {
 | 
			
		||||
          if (Est_Raccourci(Touche,0x100+BOUTON_AIDE))
 | 
			
		||||
          {
 | 
			
		||||
            Fenetre_aide(load?BOUTON_CHARGER:BOUTON_SAUVER, NULL);
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
          Temp=strlen(Fichier_recherche);
 | 
			
		||||
          if (Touche_ANSI>= ' ' && Touche_ANSI < 255 && Temp<50)
 | 
			
		||||
          {
 | 
			
		||||
            Fichier_recherche[Temp]=Touche_ANSI;
 | 
			
		||||
            Fichier_recherche[Temp+1]='\0';
 | 
			
		||||
            Fichier_le_plus_ressemblant=Nom_correspondant_le_mieux_a(Fichier_recherche);
 | 
			
		||||
            if ( (Fichier_le_plus_ressemblant) )
 | 
			
		||||
            {
 | 
			
		||||
              Temp=Principal_File_list_Position+Principal_File_list_Decalage;
 | 
			
		||||
              Effacer_curseur();
 | 
			
		||||
              Placer_barre_de_selection_sur(Fichier_le_plus_ressemblant);
 | 
			
		||||
              Preparer_et_afficher_liste_fichiers(Principal_File_list_Position,Principal_File_list_Decalage,Scroller_de_fichiers);
 | 
			
		||||
              Afficher_curseur();
 | 
			
		||||
              if (Temp!=Principal_File_list_Position+Principal_File_list_Decalage)
 | 
			
		||||
                Nouvelle_preview=1;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
              *Fichier_recherche=0;
 | 
			
		||||
            Touche=0;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
          *Fichier_recherche=0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (On_a_clicke_sur_OK)
 | 
			
		||||
    {
 | 
			
		||||
      //   Si c'est un répertoire, on annule "On_a_clicke_sur_OK" et on passe
 | 
			
		||||
      // dedans.
 | 
			
		||||
      if (Type_selectionne!=0)
 | 
			
		||||
      {
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        On_a_clicke_sur_OK=0;
 | 
			
		||||
 | 
			
		||||
        // On mémorise le répertoire dans lequel on était
 | 
			
		||||
        if (strcmp(Principal_Nom_fichier,PARENT_DIR))
 | 
			
		||||
          strcpy(Repertoire_precedent,Nom_formate(PARENT_DIR, 1));
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
          strcpy(Repertoire_precedent,
 | 
			
		||||
            Nom_formate(Position_dernier_slash(Principal_Repertoire_courant), 1)
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // On doit rentrer dans le répertoire:
 | 
			
		||||
        if (!chdir(Principal_Nom_fichier))
 | 
			
		||||
        {
 | 
			
		||||
          Determiner_repertoire_courant();
 | 
			
		||||
  
 | 
			
		||||
          // On lit le nouveau répertoire
 | 
			
		||||
          Lire_liste_des_fichiers(Principal_Format);
 | 
			
		||||
          Trier_la_liste_des_fichiers();
 | 
			
		||||
          // On place la barre de sélection sur le répertoire d'où l'on vient
 | 
			
		||||
          Placer_barre_de_selection_sur(Repertoire_precedent);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
          Erreur(0);
 | 
			
		||||
        // Affichage des premiers fichiers visibles:
 | 
			
		||||
        Preparer_et_afficher_liste_fichiers(Principal_File_list_Position,Principal_File_list_Decalage,Scroller_de_fichiers);
 | 
			
		||||
        Afficher_curseur();
 | 
			
		||||
        Nouvelle_preview=1;
 | 
			
		||||
      }
 | 
			
		||||
      else  // Sinon on essaye de charger ou sauver le fichier
 | 
			
		||||
      {
 | 
			
		||||
        strcpy(Principal_Repertoire_fichier,Principal_Repertoire_courant);
 | 
			
		||||
        if (!load)
 | 
			
		||||
          Principal_Format_fichier=Principal_Format;
 | 
			
		||||
        Charger_ou_sauver_l_image=1;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Gestion du chrono et des previews
 | 
			
		||||
    if (Nouvelle_preview)
 | 
			
		||||
    {
 | 
			
		||||
      // On efface les infos de la preview précédente s'il y en a une
 | 
			
		||||
      // d'affichée
 | 
			
		||||
      if (Etat_chrono==2)
 | 
			
		||||
      {
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        // On efface le commentaire précédent
 | 
			
		||||
        Block(Fenetre_Pos_X+ 46*Menu_Facteur_X,Fenetre_Pos_Y+(175+FILENAMESPACE)*Menu_Facteur_Y,
 | 
			
		||||
              Menu_Facteur_X<<8,Menu_Facteur_Y<<3,CM_Clair);
 | 
			
		||||
        // On nettoie la zone où va s'afficher la preview:
 | 
			
		||||
        Block(Fenetre_Pos_X+180*Menu_Facteur_X,Fenetre_Pos_Y+ (89+FILENAMESPACE)*Menu_Facteur_Y,
 | 
			
		||||
              Menu_Facteur_X*122,Menu_Facteur_Y*82,CM_Clair);
 | 
			
		||||
        // On efface les dimensions de l'image
 | 
			
		||||
        Block(Fenetre_Pos_X+226*Menu_Facteur_X,Fenetre_Pos_Y+ 55*Menu_Facteur_Y,
 | 
			
		||||
              Menu_Facteur_X*72,Menu_Facteur_Y<<3,CM_Clair);
 | 
			
		||||
        // On efface la taille du fichier
 | 
			
		||||
        Block(Fenetre_Pos_X+226*Menu_Facteur_X,Fenetre_Pos_Y+ 63*Menu_Facteur_Y,
 | 
			
		||||
              Menu_Facteur_X*72,Menu_Facteur_Y<<3,CM_Clair);
 | 
			
		||||
        // On efface le format du fichier
 | 
			
		||||
        Block(Fenetre_Pos_X+226*Menu_Facteur_X,Fenetre_Pos_Y+ 72*Menu_Facteur_Y,
 | 
			
		||||
              Menu_Facteur_X*72,Menu_Facteur_Y<<3,CM_Clair);
 | 
			
		||||
        // Affichage du commentaire
 | 
			
		||||
        if ( (!load) && (FormatFichier[Principal_Format-1].Commentaire) )
 | 
			
		||||
        {
 | 
			
		||||
          Print_dans_fenetre(46,175+FILENAMESPACE,Principal_Commentaire,CM_Noir,CM_Clair);
 | 
			
		||||
        }
 | 
			
		||||
        Afficher_curseur();
 | 
			
		||||
        // Un update pour couvrir les 4 zones: 3 libellés plus la zone de preview
 | 
			
		||||
        UpdateRect(Fenetre_Pos_X+180*Menu_Facteur_X,Fenetre_Pos_Y+55*Menu_Facteur_Y,Menu_Facteur_X*122,Menu_Facteur_Y*(116+FILENAMESPACE));
 | 
			
		||||
        // Zone de commentaire
 | 
			
		||||
        UpdateRect(Fenetre_Pos_X+46*Menu_Facteur_X,Fenetre_Pos_Y+(175+FILENAMESPACE)*Menu_Facteur_Y,Menu_Facteur_X*32*8,Menu_Facteur_Y*8);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      Nouvelle_preview=0;
 | 
			
		||||
      Etat_chrono=0;         // Etat du chrono = Attente d'un Xème de seconde
 | 
			
		||||
      // On lit le temps de départ du chrono
 | 
			
		||||
      Initialiser_chrono(Config.Chrono_delay);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!Etat_chrono)  // Prendre une nouvelle mesure du chrono et regarder
 | 
			
		||||
      Tester_chrono(); // s'il ne faut pas afficher la preview
 | 
			
		||||
 | 
			
		||||
    if (Etat_chrono==1) // Il faut afficher la preview
 | 
			
		||||
    {
 | 
			
		||||
      if ( (Principal_File_list_Position+Principal_File_list_Decalage>=Liste_Nb_repertoires) && (Liste_Nb_elements) )
 | 
			
		||||
      {
 | 
			
		||||
        strcpy(Principal_Repertoire_fichier,Principal_Repertoire_courant);
 | 
			
		||||
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Charger_image(image);
 | 
			
		||||
        UpdateRect(ToWinX(179),ToWinY(88+FILENAMESPACE),ToWinL(124),ToWinH(84));
 | 
			
		||||
        Afficher_curseur();
 | 
			
		||||
 | 
			
		||||
        // Après le chargement de la preview, on restaure tout ce qui aurait
 | 
			
		||||
        // pu être modifié par le chargement de l'image:
 | 
			
		||||
        memcpy(Principal_Palette,Palette_initiale,sizeof(T_Palette));
 | 
			
		||||
        Principal_Image_modifiee=Image_modifiee_initiale;
 | 
			
		||||
        Principal_Largeur_image=Largeur_image_initiale;
 | 
			
		||||
        Principal_Hauteur_image=Hauteur_image_initiale;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      Etat_chrono=2; // On arrête le chrono
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  while ( (!On_a_clicke_sur_OK) && (Bouton_clicke!=2) );
 | 
			
		||||
 | 
			
		||||
  // Si on annule, on restaure l'ancien commentaire
 | 
			
		||||
  if (Bouton_clicke==2)
 | 
			
		||||
    strcpy(Principal_Commentaire,Commentaire_initial);
 | 
			
		||||
 | 
			
		||||
  //   On restaure les données de l'image qui ont certainement été modifiées
 | 
			
		||||
  // par la preview.
 | 
			
		||||
  memcpy(Principal_Palette,Palette_initiale,sizeof(T_Palette));
 | 
			
		||||
  Set_palette(Principal_Palette);
 | 
			
		||||
  Back_color=Back_color_initiale;
 | 
			
		||||
  Principal_Image_modifiee=Image_modifiee_initiale;
 | 
			
		||||
  Principal_Largeur_image=Largeur_image_initiale;
 | 
			
		||||
  Principal_Hauteur_image=Hauteur_image_initiale;
 | 
			
		||||
  Set_palette(Principal_Palette);
 | 
			
		||||
 | 
			
		||||
  Calculer_couleurs_menu_optimales(Principal_Palette);
 | 
			
		||||
  Temp=(Fenetre_Pos_Y+(Fenetre_Hauteur*Menu_Facteur_Y)<Menu_Ordonnee_avant_fenetre);
 | 
			
		||||
 | 
			
		||||
  Fermer_fenetre();
 | 
			
		||||
 | 
			
		||||
  if (Temp)
 | 
			
		||||
    Afficher_menu();
 | 
			
		||||
 | 
			
		||||
  Desenclencher_bouton((load)?BOUTON_CHARGER:BOUTON_SAUVER);
 | 
			
		||||
  Afficher_curseur();
 | 
			
		||||
  Detruire_liste_du_fileselect();
 | 
			
		||||
 | 
			
		||||
  Pixel_de_chargement=Pixel_Chargement_dans_ecran_courant;
 | 
			
		||||
 | 
			
		||||
  free(Palette_initiale);
 | 
			
		||||
 | 
			
		||||
  return Charger_ou_sauver_l_image;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// -- Fonction renvoyant le mode vidéo le plus adapté à l'image chargée -----
 | 
			
		||||
#define TOLERANCE_X 8
 | 
			
		||||
#define TOLERANCE_Y 4
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										937
									
								
								files.c
									
									
									
									
									
								
							
							
						
						
									
										937
									
								
								files.c
									
									
									
									
									
								
							@ -49,9 +49,13 @@
 | 
			
		||||
#include "erreurs.h"
 | 
			
		||||
#include "io.h"
 | 
			
		||||
#include "windows.h"
 | 
			
		||||
#include "sdlscreen.h"
 | 
			
		||||
#include "loadsave.h"
 | 
			
		||||
#include "mountlist.h"
 | 
			
		||||
#include "moteur.h"
 | 
			
		||||
#include "readline.h"
 | 
			
		||||
#include "input.h"
 | 
			
		||||
#include "aide.h"
 | 
			
		||||
 | 
			
		||||
#define COULEUR_FICHIER_NORMAL    CM_Clair // Couleur du texte pour une ligne de fichier non sélectionné
 | 
			
		||||
#define COULEUR_REPERTOIRE_NORMAL CM_Fonce // Couleur du texte pour une ligne de répertoire non sélectionné
 | 
			
		||||
@ -62,15 +66,6 @@
 | 
			
		||||
 | 
			
		||||
#define FILENAMESPACE 13
 | 
			
		||||
 | 
			
		||||
int Determiner_repertoire_courant(void)
 | 
			
		||||
// Modifie Principal_Repertoire_courant en y mettant sa nouvelle valeur (avec le nom du
 | 
			
		||||
// disque)
 | 
			
		||||
//
 | 
			
		||||
// Renvoie 1 s'il y a eu une erreur d'accès
 | 
			
		||||
{
 | 
			
		||||
  return (getcwd(Principal_Repertoire_courant,256)==NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Conventions:
 | 
			
		||||
//
 | 
			
		||||
// * Le fileselect modifie le répertoire courant. Ceci permet de n'avoir
 | 
			
		||||
@ -350,9 +345,9 @@ void Lire_liste_des_lecteurs(void)
 | 
			
		||||
            TypeLecteur=LECTEUR_NETWORK;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    	NomLecteur[0]='A'+IndiceBit;
 | 
			
		||||
    	Ajouter_element_a_la_liste(NomLecteur,2);
 | 
			
		||||
    	Liste_Nb_repertoires++;
 | 
			
		||||
        NomLecteur[0]='A'+IndiceBit;
 | 
			
		||||
        Ajouter_element_a_la_liste(NomLecteur,2);
 | 
			
		||||
        Liste_Nb_repertoires++;
 | 
			
		||||
        IndiceLecteur++;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
@ -741,28 +736,910 @@ void Afficher_bookmark(T_Bouton_dropdown * Bouton, int Numero_bookmark)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//------------------------ Chargements et sauvegardes ------------------------
 | 
			
		||||
 | 
			
		||||
void for_each_file(const char * Nom_repertoire, void Callback(const char *))
 | 
			
		||||
void Print_repertoire_courant(void)
 | 
			
		||||
//
 | 
			
		||||
// Affiche Principal_Repertoire_courant sur 37 caractères
 | 
			
		||||
//
 | 
			
		||||
{
 | 
			
		||||
  // Pour scan de répertoire
 | 
			
		||||
  DIR*  Repertoire_Courant; //Répertoire courant
 | 
			
		||||
  struct dirent* entry; // Structure de lecture des éléments
 | 
			
		||||
  char Nom_fichier_complet[TAILLE_CHEMIN_FICHIER];
 | 
			
		||||
  int Position_nom_fichier;
 | 
			
		||||
  strcpy(Nom_fichier_complet, Nom_repertoire);
 | 
			
		||||
  Repertoire_Courant=opendir(Nom_repertoire);
 | 
			
		||||
  if(Repertoire_Courant == NULL) return;        // Répertoire invalide ...
 | 
			
		||||
  strcat(Nom_fichier_complet, SEPARATEUR_CHEMIN);
 | 
			
		||||
  Position_nom_fichier = strlen(Nom_fichier_complet);
 | 
			
		||||
  while ((entry=readdir(Repertoire_Courant)))
 | 
			
		||||
  char Nom_temporaire[TAILLE_MAXI_PATH+1]; // Nom tronqué
 | 
			
		||||
  int  length; // length du répertoire courant
 | 
			
		||||
  int  Indice;   // Indice de parcours de la chaine complète
 | 
			
		||||
 | 
			
		||||
  Block(Fenetre_Pos_X+(Menu_Facteur_X*7),Fenetre_Pos_Y+(Menu_Facteur_Y*43),Menu_Facteur_X*37*8,Menu_Facteur_Y<<3,CM_Clair);
 | 
			
		||||
 | 
			
		||||
  length=strlen(Principal_Repertoire_courant);
 | 
			
		||||
  if (length>TAILLE_MAXI_PATH)
 | 
			
		||||
  { // Doh! il va falloir tronquer le répertoire (bouh !)
 | 
			
		||||
 | 
			
		||||
    // On commence par copier bêtement les 3 premiers caractères (e.g. "C:\")
 | 
			
		||||
    for (Indice=0;Indice<3;Indice++)
 | 
			
		||||
      Nom_temporaire[Indice]=Principal_Repertoire_courant[Indice];
 | 
			
		||||
 | 
			
		||||
    // On y rajoute 3 petits points:
 | 
			
		||||
    strcpy(Nom_temporaire+3,"...");
 | 
			
		||||
 | 
			
		||||
    //  Ensuite, on cherche un endroit à partir duquel on pourrait loger tout
 | 
			
		||||
    // le reste de la chaine (Ouaaaaaah!!! Vachement fort le mec!!)
 | 
			
		||||
    for (Indice++;Indice<length;Indice++)
 | 
			
		||||
      if ( (Principal_Repertoire_courant[Indice]==SEPARATEUR_CHEMIN[0]) &&
 | 
			
		||||
           (length-Indice<=TAILLE_MAXI_PATH-6) )
 | 
			
		||||
      {
 | 
			
		||||
        // Ouf: on vient de trouver un endroit dans la chaîne à partir duquel
 | 
			
		||||
        // on peut faire la copie:
 | 
			
		||||
        strcpy(Nom_temporaire+6,Principal_Repertoire_courant+Indice);
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    // Enfin, on peut afficher la chaîne tronquée
 | 
			
		||||
    Print_dans_fenetre(7,43,Nom_temporaire,CM_Noir,CM_Clair);
 | 
			
		||||
  }
 | 
			
		||||
  else // Ahhh! La chaîne peut loger tranquillement dans la fenêtre
 | 
			
		||||
    Print_dans_fenetre(7,43,Principal_Repertoire_courant,CM_Noir,CM_Clair);
 | 
			
		||||
    
 | 
			
		||||
  UpdateRect(Fenetre_Pos_X+(Menu_Facteur_X*7),Fenetre_Pos_Y+(Menu_Facteur_Y*43),Menu_Facteur_X*37*8,Menu_Facteur_Y<<3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Print_Nom_fichier_dans_selecteur(void)
 | 
			
		||||
//
 | 
			
		||||
// Affiche Principal_Nom_fichier dans le Fileselect
 | 
			
		||||
//
 | 
			
		||||
{
 | 
			
		||||
  Block(Fenetre_Pos_X+(Menu_Facteur_X*(13+9*8)),Fenetre_Pos_Y+(Menu_Facteur_Y*90),Menu_Facteur_X*(27*8),Menu_Facteur_Y<<3,CM_Clair);
 | 
			
		||||
  Print_dans_fenetre_limite(13+9*8,90,Principal_Nom_fichier,27,CM_Noir,CM_Clair);
 | 
			
		||||
  UpdateRect(Fenetre_Pos_X+(Menu_Facteur_X*(13+9*8)),Fenetre_Pos_Y+(Menu_Facteur_Y*90),Menu_Facteur_X*(27*8),Menu_Facteur_Y<<3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int   Type_selectionne; // Utilisé pour mémoriser le type d'entrée choisi
 | 
			
		||||
                        // dans le selecteur de fichier.
 | 
			
		||||
 | 
			
		||||
void Preparer_et_afficher_liste_fichiers(short Position, short offset,
 | 
			
		||||
                                         T_Bouton_scroller * button)
 | 
			
		||||
{
 | 
			
		||||
  button->Nb_elements=Liste_Nb_elements;
 | 
			
		||||
  button->Position=Position;
 | 
			
		||||
  Calculer_hauteur_curseur_jauge(button);
 | 
			
		||||
  Fenetre_Dessiner_jauge(button);
 | 
			
		||||
  // On efface les anciens noms de fichier:
 | 
			
		||||
  Block(Fenetre_Pos_X+(Menu_Facteur_X<<3),Fenetre_Pos_Y+(Menu_Facteur_Y*(89+FILENAMESPACE)),Menu_Facteur_X*98,Menu_Facteur_Y*82,CM_Noir);
 | 
			
		||||
  // On affiche les nouveaux:
 | 
			
		||||
  Afficher_la_liste_des_fichiers(Position,offset);
 | 
			
		||||
 | 
			
		||||
  UpdateRect(Fenetre_Pos_X+(Menu_Facteur_X<<3),Fenetre_Pos_Y+(Menu_Facteur_Y*(89+FILENAMESPACE)),Menu_Facteur_X*98,Menu_Facteur_Y*82);
 | 
			
		||||
 | 
			
		||||
  // On récupère le nom du schmilblick à "accéder"
 | 
			
		||||
  Determiner_element_de_la_liste(Position,offset,Principal_Nom_fichier,&Type_selectionne);
 | 
			
		||||
  // On affiche le nouveau nom de fichier
 | 
			
		||||
  Print_Nom_fichier_dans_selecteur();
 | 
			
		||||
  // On affiche le nom du répertoire courant
 | 
			
		||||
  Print_repertoire_courant();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Relire_liste_fichiers(byte Filtre, short Position, short offset,
 | 
			
		||||
                           T_Bouton_scroller * button)
 | 
			
		||||
{
 | 
			
		||||
  Lire_liste_des_fichiers(Filtre);
 | 
			
		||||
  Trier_la_liste_des_fichiers();
 | 
			
		||||
  Preparer_et_afficher_liste_fichiers(Position,offset,button);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void On_vient_de_scroller_dans_le_fileselect(T_Bouton_scroller * Scroller_de_fichiers)
 | 
			
		||||
{
 | 
			
		||||
  char Ancien_nom_de_fichier[TAILLE_CHEMIN_FICHIER];
 | 
			
		||||
 | 
			
		||||
  strcpy(Ancien_nom_de_fichier,Principal_Nom_fichier);
 | 
			
		||||
 | 
			
		||||
  // On regarde si la liste a bougé
 | 
			
		||||
  if (Scroller_de_fichiers->Position!=Principal_File_list_Position)
 | 
			
		||||
  {
 | 
			
		||||
    struct stat Infos_enreg;
 | 
			
		||||
    strcpy(&Nom_fichier_complet[Position_nom_fichier], entry->d_name);
 | 
			
		||||
    stat(Nom_fichier_complet,&Infos_enreg);
 | 
			
		||||
    if (S_ISREG(Infos_enreg.st_mode))
 | 
			
		||||
    // Si c'est le cas, il faut mettre à jour la jauge
 | 
			
		||||
    Scroller_de_fichiers->Position=Principal_File_list_Position;
 | 
			
		||||
    Fenetre_Dessiner_jauge(Scroller_de_fichiers);
 | 
			
		||||
  }
 | 
			
		||||
  // On récupére le nom du schmilblick à "accéder"
 | 
			
		||||
  Determiner_element_de_la_liste(Principal_File_list_Position,Principal_File_list_Decalage,Principal_Nom_fichier,&Type_selectionne);
 | 
			
		||||
  if (strcmp(Ancien_nom_de_fichier,Principal_Nom_fichier))
 | 
			
		||||
    Nouvelle_preview=1;
 | 
			
		||||
 | 
			
		||||
  // On affiche le nouveau nom de fichier
 | 
			
		||||
  Print_Nom_fichier_dans_selecteur();
 | 
			
		||||
  Afficher_curseur();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
short Position_fichier_dans_liste(char * fname)
 | 
			
		||||
{
 | 
			
		||||
  Element_de_liste_de_fileselect * Element_courant;
 | 
			
		||||
  short  Indice;
 | 
			
		||||
 | 
			
		||||
  for (Indice=0, Element_courant=Liste_du_fileselect;
 | 
			
		||||
       ((Element_courant!=NULL) && (strcmp(Element_courant->NomComplet,fname)));
 | 
			
		||||
       Indice++,Element_courant=Element_courant->Suivant);
 | 
			
		||||
 | 
			
		||||
  return (Element_courant!=NULL)?Indice:0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Placer_barre_de_selection_sur(char * fname)
 | 
			
		||||
{
 | 
			
		||||
  short Indice;
 | 
			
		||||
 | 
			
		||||
  Indice=Position_fichier_dans_liste(fname);
 | 
			
		||||
 | 
			
		||||
  if ((Liste_Nb_elements<=10) || (Indice<5))
 | 
			
		||||
  {
 | 
			
		||||
    Principal_File_list_Position=0;
 | 
			
		||||
    Principal_File_list_Decalage=Indice;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    if (Indice>=Liste_Nb_elements-5)
 | 
			
		||||
    {
 | 
			
		||||
      Callback(Nom_fichier_complet);
 | 
			
		||||
      Principal_File_list_Position=Liste_Nb_elements-10;
 | 
			
		||||
      Principal_File_list_Decalage=Indice-Principal_File_list_Position;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      Principal_File_list_Position=Indice-4;
 | 
			
		||||
      Principal_File_list_Decalage=4;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  closedir(Repertoire_Courant);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
char FFF_Meilleur_nom[TAILLE_CHEMIN_FICHIER];
 | 
			
		||||
char * Nom_correspondant_le_mieux_a(char * fname)
 | 
			
		||||
{
 | 
			
		||||
  char * Pointeur_Meilleur_nom;
 | 
			
		||||
  Element_de_liste_de_fileselect * Element_courant;
 | 
			
		||||
  byte   Lettres_identiques=0;
 | 
			
		||||
  byte   counter;
 | 
			
		||||
 | 
			
		||||
  strcpy(FFF_Meilleur_nom,Principal_Nom_fichier);
 | 
			
		||||
  Pointeur_Meilleur_nom=NULL;
 | 
			
		||||
 | 
			
		||||
  for (Element_courant=Liste_du_fileselect; Element_courant!=NULL; Element_courant=Element_courant->Suivant)
 | 
			
		||||
  {
 | 
			
		||||
    if ( (!Config.Find_file_fast)
 | 
			
		||||
      || (Config.Find_file_fast==(Element_courant->Type+1)) )
 | 
			
		||||
    {
 | 
			
		||||
      // On compare et si c'est mieux, on stocke dans Meilleur_nom
 | 
			
		||||
      for (counter=0; fname[counter]!='\0' && tolower(Element_courant->NomComplet[counter])==tolower(fname[counter]); counter++);
 | 
			
		||||
      if (counter>Lettres_identiques)
 | 
			
		||||
      {
 | 
			
		||||
        Lettres_identiques=counter;
 | 
			
		||||
        strcpy(FFF_Meilleur_nom,Element_courant->NomComplet);
 | 
			
		||||
        Pointeur_Meilleur_nom=Element_courant->NomComplet;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return Pointeur_Meilleur_nom;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
byte Bouton_Load_ou_Save(byte load, byte image)
 | 
			
		||||
  // load=1 => On affiche le menu du bouton LOAD
 | 
			
		||||
  // load=0 => On affiche le menu du bouton SAVE
 | 
			
		||||
{
 | 
			
		||||
  short Bouton_clicke;
 | 
			
		||||
  T_Bouton_scroller * Scroller_de_fichiers;
 | 
			
		||||
  T_Bouton_dropdown * Dropdown_des_formats;
 | 
			
		||||
  T_Bouton_dropdown * Dropdown_bookmark[4];
 | 
			
		||||
  short Temp;
 | 
			
		||||
  int Bidon=0;       // Sert à appeler SDL_GetKeyState
 | 
			
		||||
  byte  Charger_ou_sauver_l_image=0;
 | 
			
		||||
  byte  On_a_clicke_sur_OK=0;// Indique si on a clické sur Load ou Save ou sur
 | 
			
		||||
                             //un bouton enclenchant Load ou Save juste après.
 | 
			
		||||
  Composantes * Palette_initiale; // |  Données concernant l'image qui
 | 
			
		||||
  byte  Image_modifiee_initiale;         // |  sont mémorisées pour pouvoir
 | 
			
		||||
  short Largeur_image_initiale;          // |- être restaurées en sortant,
 | 
			
		||||
  short Hauteur_image_initiale;          // |  parce que la preview elle les
 | 
			
		||||
  byte  Back_color_initiale;             // |  fout en l'air (c'te conne).
 | 
			
		||||
  char  Nom_fichier_initial[TAILLE_CHEMIN_FICHIER]; // Sert à laisser le nom courant du fichier en cas de sauvegarde
 | 
			
		||||
  char  Repertoire_precedent[TAILLE_CHEMIN_FICHIER]; // Répertoire d'où l'on vient après un CHDIR
 | 
			
		||||
  char  Commentaire_initial[TAILLE_COMMENTAIRE+1];
 | 
			
		||||
  char  Fichier_recherche[TAILLE_CHEMIN_FICHIER]="";
 | 
			
		||||
  char  Nom_fichier_Save[TAILLE_CHEMIN_FICHIER];
 | 
			
		||||
  char * Fichier_le_plus_ressemblant;
 | 
			
		||||
 | 
			
		||||
  Palette_initiale=(Composantes *)malloc(sizeof(T_Palette));
 | 
			
		||||
  memcpy(Palette_initiale,Principal_Palette,sizeof(T_Palette));
 | 
			
		||||
 | 
			
		||||
  Back_color_initiale=Back_color;
 | 
			
		||||
  Image_modifiee_initiale=Principal_Image_modifiee;
 | 
			
		||||
  Largeur_image_initiale=Principal_Largeur_image;
 | 
			
		||||
  Hauteur_image_initiale=Principal_Hauteur_image;
 | 
			
		||||
  strcpy(Nom_fichier_initial,Principal_Nom_fichier);
 | 
			
		||||
  strcpy(Commentaire_initial,Principal_Commentaire);
 | 
			
		||||
  if (load)
 | 
			
		||||
  {
 | 
			
		||||
    if (image)
 | 
			
		||||
      Ouvrir_fenetre(310,187+FILENAMESPACE,"Load picture");
 | 
			
		||||
    else
 | 
			
		||||
      Ouvrir_fenetre(310,187+FILENAMESPACE,"Load brush");
 | 
			
		||||
    Fenetre_Definir_bouton_normal(125,157+FILENAMESPACE,51,14,"Load",0,1,SDLK_RETURN); // 1
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    if (image)
 | 
			
		||||
      Ouvrir_fenetre(310,187+FILENAMESPACE,"Save picture");
 | 
			
		||||
    else
 | 
			
		||||
      Ouvrir_fenetre(310,187+FILENAMESPACE,"Save brush");
 | 
			
		||||
    Fenetre_Definir_bouton_normal(125,157+FILENAMESPACE,51,14,"Save",0,1,SDLK_RETURN); // 1
 | 
			
		||||
    if (Principal_Format==0) // Correction du *.*
 | 
			
		||||
    {
 | 
			
		||||
      Principal_Format=Principal_Format_fichier;
 | 
			
		||||
      Principal_File_list_Position=0;
 | 
			
		||||
      Principal_File_list_Decalage=0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (Principal_Format>NB_FORMATS_SAVE) // Correction d'un format insauvable
 | 
			
		||||
    {
 | 
			
		||||
      Principal_Format=FORMAT_PAR_DEFAUT;
 | 
			
		||||
      Principal_File_list_Position=0;
 | 
			
		||||
      Principal_File_list_Decalage=0;
 | 
			
		||||
    }
 | 
			
		||||
    // Affichage du commentaire
 | 
			
		||||
    if (FormatFichier[Principal_Format-1].Commentaire)
 | 
			
		||||
      Print_dans_fenetre(46,175+FILENAMESPACE,Principal_Commentaire,CM_Noir,CM_Clair);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Fenetre_Definir_bouton_normal(125,139+FILENAMESPACE,51,14,"Cancel",0,1,TOUCHE_ESC);  // 2
 | 
			
		||||
  Fenetre_Definir_bouton_normal(125, 89+FILENAMESPACE,51,14,"Delete",0,1,SDLK_DELETE); // 3
 | 
			
		||||
 | 
			
		||||
  // Cadre autour des formats
 | 
			
		||||
  Fenetre_Afficher_cadre(  7, 51,104, 35);
 | 
			
		||||
  // Cadre autour des infos sur le fichier de dessin
 | 
			
		||||
  Fenetre_Afficher_cadre(116, 51,187, 35);
 | 
			
		||||
  // Cadre autour de la preview
 | 
			
		||||
  Fenetre_Afficher_cadre_creux(179,88+FILENAMESPACE,124,84);
 | 
			
		||||
  // Cadre autour du fileselector
 | 
			
		||||
  Fenetre_Afficher_cadre_creux(  7,88+FILENAMESPACE,100,84);
 | 
			
		||||
 | 
			
		||||
  Fenetre_Definir_bouton_special(9,90+FILENAMESPACE,96,80);                      // 4
 | 
			
		||||
 | 
			
		||||
  // Scroller du fileselector
 | 
			
		||||
  Scroller_de_fichiers = Fenetre_Definir_bouton_scroller(110,89+FILENAMESPACE,82,1,10,0);               // 5
 | 
			
		||||
 | 
			
		||||
  // Dropdown pour les formats de fichier
 | 
			
		||||
  Dropdown_des_formats=
 | 
			
		||||
    Fenetre_Definir_bouton_dropdown(70,56,36,16,0,
 | 
			
		||||
      (Principal_Format==0)?"*.*":FormatFichier[Principal_Format-1].Extension,
 | 
			
		||||
      1,0,1,A_DROITE|A_GAUCHE); // 6
 | 
			
		||||
  if (load)
 | 
			
		||||
    Fenetre_Dropdown_choix(Dropdown_des_formats,0,"*.*");
 | 
			
		||||
  for (Temp=0;Temp<NB_FORMATS_CONNUS;Temp++)
 | 
			
		||||
  {
 | 
			
		||||
    if ((load && FormatFichier[Temp].Load) || 
 | 
			
		||||
      (!load && FormatFichier[Temp].Save))
 | 
			
		||||
        Fenetre_Dropdown_choix(Dropdown_des_formats,Temp+1,FormatFichier[Temp].Extension);
 | 
			
		||||
  }
 | 
			
		||||
  Print_dans_fenetre(12,61,"Format:",CM_Fonce,CM_Clair);
 | 
			
		||||
  
 | 
			
		||||
  // Texte de commentaire des dessins
 | 
			
		||||
  Print_dans_fenetre(7,174+FILENAMESPACE,"Txt:",CM_Fonce,CM_Clair);
 | 
			
		||||
  Fenetre_Definir_bouton_saisie(44,173+FILENAMESPACE,TAILLE_COMMENTAIRE); // 7
 | 
			
		||||
 | 
			
		||||
  // Cadre autour du nom de fichier
 | 
			
		||||
  //Fenetre_Afficher_cadre_creux(  7,87,296,15);
 | 
			
		||||
  Print_dans_fenetre(9,90,"Filename:",CM_Fonce,CM_Clair);
 | 
			
		||||
  // Saisie du nom de fichier
 | 
			
		||||
  Fenetre_Definir_bouton_saisie(11+9*8,88,27); // 8
 | 
			
		||||
 | 
			
		||||
  Print_dans_fenetre(120,55,"Image size :",CM_Fonce,CM_Clair);
 | 
			
		||||
  Print_dans_fenetre(120,63,"File size  :",CM_Fonce,CM_Clair);
 | 
			
		||||
  Print_dans_fenetre(120,72,"Format     :",CM_Fonce,CM_Clair);
 | 
			
		||||
 | 
			
		||||
  // Selecteur de Lecteur / Volume
 | 
			
		||||
  Fenetre_Definir_bouton_normal(8,17,117,23,"Select drive",0,1,SDLK_LAST); // 9
 | 
			
		||||
 | 
			
		||||
  // Bookmarks
 | 
			
		||||
  for (Temp=0;Temp<NB_BOOKMARKS;Temp++)
 | 
			
		||||
  {
 | 
			
		||||
    Dropdown_bookmark[Temp]=
 | 
			
		||||
      Fenetre_Definir_bouton_dropdown(126+(88+1)*(Temp%2),17+(Temp/2)*12,88,11,56,"",0,0,1,A_DROITE); // 10-13
 | 
			
		||||
    Fenetre_Afficher_sprite_drive(Dropdown_bookmark[Temp]->Pos_X+3,Dropdown_bookmark[Temp]->Pos_Y+2,5);
 | 
			
		||||
    Afficher_bookmark(Dropdown_bookmark[Temp],Temp);
 | 
			
		||||
  }
 | 
			
		||||
  // On prend bien soin de passer dans le répertoire courant (le bon qui faut! Oui madame!)
 | 
			
		||||
  if (load)
 | 
			
		||||
  {
 | 
			
		||||
    chdir(Principal_Repertoire_courant);
 | 
			
		||||
    getcwd(Principal_Repertoire_courant,256);
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    chdir(Principal_Repertoire_fichier);
 | 
			
		||||
    getcwd(Principal_Repertoire_courant,256);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  // Affichage des premiers fichiers visibles:
 | 
			
		||||
  Relire_liste_fichiers(Principal_Format,Principal_File_list_Position,Principal_File_list_Decalage,Scroller_de_fichiers);
 | 
			
		||||
 | 
			
		||||
  if (!load)
 | 
			
		||||
  {
 | 
			
		||||
    // On initialise le nom de fichier à celui en cours et non pas celui sous
 | 
			
		||||
    // la barre de sélection
 | 
			
		||||
    strcpy(Principal_Nom_fichier,Nom_fichier_initial);
 | 
			
		||||
    // On affiche le nouveau nom de fichier
 | 
			
		||||
    Print_Nom_fichier_dans_selecteur();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Pixel_de_chargement=Pixel_Chargement_dans_preview;
 | 
			
		||||
  Nouvelle_preview=1;
 | 
			
		||||
  Display_Window(310,(187+FILENAMESPACE));
 | 
			
		||||
 | 
			
		||||
  Afficher_curseur();
 | 
			
		||||
 | 
			
		||||
  do
 | 
			
		||||
  {
 | 
			
		||||
    Bouton_clicke=Fenetre_Bouton_clicke();
 | 
			
		||||
 | 
			
		||||
    switch (Bouton_clicke)
 | 
			
		||||
    {
 | 
			
		||||
      case -1 :
 | 
			
		||||
      case  0 :
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case  1 : // Load ou Save
 | 
			
		||||
      if(load)
 | 
			
		||||
        {
 | 
			
		||||
          // Determine the type
 | 
			
		||||
          if(Fichier_existe(Principal_Nom_fichier)) 
 | 
			
		||||
          {
 | 
			
		||||
            Type_selectionne = 0;
 | 
			
		||||
            if(Repertoire_existe(Principal_Nom_fichier)) Type_selectionne = 1;
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
            Type_selectionne = 1;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
          if(Repertoire_existe(Principal_Nom_fichier)) Type_selectionne = 1;
 | 
			
		||||
          else Type_selectionne = 0;
 | 
			
		||||
        }
 | 
			
		||||
        On_a_clicke_sur_OK=1;
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case  2 : // Cancel
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case  3 : // Delete
 | 
			
		||||
        if (Liste_Nb_elements && (*Principal_Nom_fichier!='.') && Type_selectionne!=2)
 | 
			
		||||
        {
 | 
			
		||||
          char * Message;
 | 
			
		||||
          Effacer_curseur();
 | 
			
		||||
          // On affiche une demande de confirmation
 | 
			
		||||
          if (Principal_File_list_Position+Principal_File_list_Decalage>=Liste_Nb_repertoires)
 | 
			
		||||
          {
 | 
			
		||||
            Message="Delete file ?";
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
            Message="Remove directory ?";
 | 
			
		||||
          }
 | 
			
		||||
          if (Demande_de_confirmation(Message))
 | 
			
		||||
          {
 | 
			
		||||
            // Si c'est un fichier
 | 
			
		||||
            if (Principal_File_list_Position+Principal_File_list_Decalage>=Liste_Nb_repertoires)
 | 
			
		||||
              // On efface le fichier (si on peut)
 | 
			
		||||
              Temp=(!remove(Principal_Nom_fichier));
 | 
			
		||||
            else // Si c'est un repertoire
 | 
			
		||||
              // On efface le repertoire (si on peut)
 | 
			
		||||
              Temp=(!rmdir(Principal_Nom_fichier));
 | 
			
		||||
 | 
			
		||||
            if (Temp) // Temp indique si l'effacement s'est bien passé
 | 
			
		||||
            {
 | 
			
		||||
              // On remonte si c'était le dernier élément de la liste
 | 
			
		||||
              if (Principal_File_list_Position+Principal_File_list_Decalage==Liste_Nb_elements-1)
 | 
			
		||||
              {
 | 
			
		||||
                if (Principal_File_list_Position)
 | 
			
		||||
                  Principal_File_list_Position--;
 | 
			
		||||
                else
 | 
			
		||||
                  if (Principal_File_list_Decalage)
 | 
			
		||||
                    Principal_File_list_Decalage--;
 | 
			
		||||
              }
 | 
			
		||||
              else // Si ce n'était pas le dernier, il faut faire gaffe à ce
 | 
			
		||||
              {    // que ses copains d'en dessous ne remontent pas trop.
 | 
			
		||||
                if ( (Principal_File_list_Position)
 | 
			
		||||
                  && (Principal_File_list_Position+10==Liste_Nb_elements) )
 | 
			
		||||
                  {
 | 
			
		||||
                    Principal_File_list_Position--;
 | 
			
		||||
                    Principal_File_list_Decalage++;
 | 
			
		||||
                  }
 | 
			
		||||
              }
 | 
			
		||||
              // On relit les informations
 | 
			
		||||
              Relire_liste_fichiers(Principal_Format,Principal_File_list_Position,Principal_File_list_Decalage,Scroller_de_fichiers);
 | 
			
		||||
              // On demande la preview du nouveau fichier sur lequel on se trouve
 | 
			
		||||
              Nouvelle_preview=1;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
              Erreur(0);
 | 
			
		||||
 | 
			
		||||
            // On place la barre de sélection du brouillon au début s'il a le
 | 
			
		||||
            // même répertoire que l'image principale.
 | 
			
		||||
            if (!strcmp(Principal_Repertoire_courant,Brouillon_Repertoire_courant))
 | 
			
		||||
            {
 | 
			
		||||
              Brouillon_File_list_Position=0;
 | 
			
		||||
              Brouillon_File_list_Decalage=0;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case  4 : // Zone d'affichage de la liste de fichiers
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
 | 
			
		||||
        Temp=Calculer_decalage_click_dans_fileselector();
 | 
			
		||||
        if (Temp>=0)
 | 
			
		||||
        {
 | 
			
		||||
          if (Temp!=Principal_File_list_Decalage)
 | 
			
		||||
          {
 | 
			
		||||
            // On met à jour le décalage
 | 
			
		||||
            Principal_File_list_Decalage=Temp;
 | 
			
		||||
 | 
			
		||||
            // On récupére le nom du schmilblick à "accéder"
 | 
			
		||||
            Determiner_element_de_la_liste(Principal_File_list_Position,Principal_File_list_Decalage,Principal_Nom_fichier,&Type_selectionne);
 | 
			
		||||
            // On affiche le nouveau nom de fichier
 | 
			
		||||
            Print_Nom_fichier_dans_selecteur();
 | 
			
		||||
            // On affiche à nouveau la liste
 | 
			
		||||
            Afficher_la_liste_des_fichiers(Principal_File_list_Position,Principal_File_list_Decalage);
 | 
			
		||||
 | 
			
		||||
            // On vient de changer de nom de fichier, donc on doit s'appreter
 | 
			
		||||
            // a rafficher une preview
 | 
			
		||||
            Nouvelle_preview=1;
 | 
			
		||||
            *Fichier_recherche=0;
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
            //   En sauvegarde, si on a double-clické sur un répertoire, il
 | 
			
		||||
            // faut mettre le nom de fichier au nom du répertoire. Sinon, dans
 | 
			
		||||
            // certains cas, on risque de sauvegarder avec le nom du fichier
 | 
			
		||||
            // actuel au lieu de changer de répertoire.
 | 
			
		||||
            if (Principal_File_list_Position+Principal_File_list_Decalage<Liste_Nb_repertoires)
 | 
			
		||||
              Determiner_element_de_la_liste(Principal_File_list_Position,Principal_File_list_Decalage,Principal_Nom_fichier,&Type_selectionne);
 | 
			
		||||
 | 
			
		||||
            On_a_clicke_sur_OK=1;
 | 
			
		||||
            Nouvelle_preview=1;
 | 
			
		||||
            *Fichier_recherche=0;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        Afficher_curseur();
 | 
			
		||||
        Attendre_fin_de_click();
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case  5 : // Scroller de fichiers
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Principal_File_list_Position=Fenetre_Attribut2;
 | 
			
		||||
        // On récupére le nom du schmilblick à "accéder"
 | 
			
		||||
        Determiner_element_de_la_liste(Principal_File_list_Position,Principal_File_list_Decalage,Principal_Nom_fichier,&Type_selectionne);
 | 
			
		||||
        // On affiche le nouveau nom de fichier
 | 
			
		||||
        Print_Nom_fichier_dans_selecteur();
 | 
			
		||||
        // On affiche à nouveau la liste
 | 
			
		||||
        Afficher_la_liste_des_fichiers(Principal_File_list_Position,Principal_File_list_Decalage);
 | 
			
		||||
        Afficher_curseur();
 | 
			
		||||
        Nouvelle_preview=1;
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case  6 : // Scroller des formats
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        // On met à jour le format de browsing du fileselect:
 | 
			
		||||
        Principal_Format=Fenetre_Attribut2;
 | 
			
		||||
        // Comme on change de liste, on se place en début de liste:
 | 
			
		||||
        Principal_File_list_Position=0;
 | 
			
		||||
        Principal_File_list_Decalage=0;
 | 
			
		||||
        // Affichage des premiers fichiers visibles:
 | 
			
		||||
        Relire_liste_fichiers(Principal_Format,Principal_File_list_Position,Principal_File_list_Decalage,Scroller_de_fichiers);
 | 
			
		||||
        Afficher_curseur();
 | 
			
		||||
        Nouvelle_preview=1;
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case  7 : // Saisie d'un commentaire pour la sauvegarde
 | 
			
		||||
        if ( (!load) && (FormatFichier[Principal_Format-1].Commentaire) )
 | 
			
		||||
        {
 | 
			
		||||
          Readline(46,175+FILENAMESPACE,Principal_Commentaire,32,0);
 | 
			
		||||
          Afficher_curseur();
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
      case  8 : // Saisie du nom de fichier
 | 
			
		||||
 | 
			
		||||
        // Save the filename
 | 
			
		||||
        strcpy(Nom_fichier_Save, Principal_Nom_fichier);
 | 
			
		||||
 | 
			
		||||
        if (Readline(13+9*8,90,Principal_Nom_fichier,27,2))
 | 
			
		||||
        {
 | 
			
		||||
          //   On regarde s'il faut rajouter une extension. C'est-à-dire s'il
 | 
			
		||||
          // n'y a pas de '.' dans le nom du fichier.
 | 
			
		||||
          for(Temp=0,Bidon=0; ((Principal_Nom_fichier[Temp]) && (!Bidon)); Temp++)
 | 
			
		||||
            if (Principal_Nom_fichier[Temp]=='.')
 | 
			
		||||
              Bidon=1;
 | 
			
		||||
          if (!Bidon)
 | 
			
		||||
          {
 | 
			
		||||
            if (Principal_Format)
 | 
			
		||||
            {
 | 
			
		||||
              if(!Repertoire_existe(Principal_Nom_fichier))
 | 
			
		||||
              {
 | 
			
		||||
                 strcat(Principal_Nom_fichier,".");
 | 
			
		||||
                 strcat(Principal_Nom_fichier,FormatFichier[Principal_Format-1].Extension);
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
              // put default extension
 | 
			
		||||
              // (but maybe we should browse through all available ones until we find
 | 
			
		||||
              //  something suitable ?)
 | 
			
		||||
              if(!Repertoire_existe(Principal_Nom_fichier))
 | 
			
		||||
              {
 | 
			
		||||
                 strcat(Principal_Nom_fichier, ".pkm");
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          if(load)
 | 
			
		||||
          {
 | 
			
		||||
            // Determine the type
 | 
			
		||||
            if(Fichier_existe(Principal_Nom_fichier)) 
 | 
			
		||||
            {
 | 
			
		||||
              Type_selectionne = 0;
 | 
			
		||||
              if(Repertoire_existe(Principal_Nom_fichier)) Type_selectionne = 1;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
              Type_selectionne = 1;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
            if(Repertoire_existe(Principal_Nom_fichier)) Type_selectionne = 1;
 | 
			
		||||
            else Type_selectionne = 0;
 | 
			
		||||
          }
 | 
			
		||||
          On_a_clicke_sur_OK=1;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
          // Restore the old filename
 | 
			
		||||
          strcpy(Principal_Nom_fichier, Nom_fichier_Save);
 | 
			
		||||
          Print_Nom_fichier_dans_selecteur();
 | 
			
		||||
        }
 | 
			
		||||
        Afficher_curseur();
 | 
			
		||||
        break;
 | 
			
		||||
      case  9 : // Volume Select
 | 
			
		||||
          Effacer_curseur();
 | 
			
		||||
          //   Comme on tombe sur un disque qu'on connait pas, on se place en
 | 
			
		||||
          // début de liste:
 | 
			
		||||
          Principal_File_list_Position=0;
 | 
			
		||||
          Principal_File_list_Decalage=0;
 | 
			
		||||
          // Affichage des premiers fichiers visibles:
 | 
			
		||||
          Lire_liste_des_lecteurs();
 | 
			
		||||
          Trier_la_liste_des_fichiers();
 | 
			
		||||
          Preparer_et_afficher_liste_fichiers(Principal_File_list_Position,Principal_File_list_Decalage,Scroller_de_fichiers);
 | 
			
		||||
          Afficher_curseur();
 | 
			
		||||
          Nouvelle_preview=1;
 | 
			
		||||
          *Fichier_recherche=0;
 | 
			
		||||
          break;
 | 
			
		||||
      default:
 | 
			
		||||
          if (Bouton_clicke>=10 && Bouton_clicke<10+NB_BOOKMARKS)
 | 
			
		||||
          {
 | 
			
		||||
            // Bookmark
 | 
			
		||||
            char * Nom_repertoire;
 | 
			
		||||
            
 | 
			
		||||
            switch(Fenetre_Attribut2)
 | 
			
		||||
            {
 | 
			
		||||
              case -1: // bouton lui-même: aller au répertoire mémorisé
 | 
			
		||||
                if (Config.Bookmark_directory[Bouton_clicke-10])
 | 
			
		||||
                {
 | 
			
		||||
                  *Fichier_recherche=0;
 | 
			
		||||
                  strcpy(Principal_Nom_fichier,Config.Bookmark_directory[Bouton_clicke-10]);
 | 
			
		||||
                  Type_selectionne=1;
 | 
			
		||||
                  On_a_clicke_sur_OK=1;
 | 
			
		||||
                  *Fichier_recherche=0;
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
                
 | 
			
		||||
              case 0: // Set
 | 
			
		||||
                if (Config.Bookmark_directory[Bouton_clicke-10])
 | 
			
		||||
                  free(Config.Bookmark_directory[Bouton_clicke-10]);
 | 
			
		||||
                Config.Bookmark_label[Bouton_clicke-10][0]='\0';
 | 
			
		||||
                Temp=strlen(Principal_Repertoire_courant);
 | 
			
		||||
                Config.Bookmark_directory[Bouton_clicke-10]=malloc(Temp+1);
 | 
			
		||||
                strcpy(Config.Bookmark_directory[Bouton_clicke-10],Principal_Repertoire_courant);
 | 
			
		||||
                
 | 
			
		||||
                Nom_repertoire=Position_dernier_slash(Principal_Repertoire_courant);
 | 
			
		||||
                if (Nom_repertoire && Nom_repertoire[1]!='\0')
 | 
			
		||||
                  Nom_repertoire++;
 | 
			
		||||
                else
 | 
			
		||||
                  Nom_repertoire=Principal_Repertoire_courant;
 | 
			
		||||
                Temp=strlen(Nom_repertoire);
 | 
			
		||||
                strncpy(Config.Bookmark_label[Bouton_clicke-10],Nom_repertoire,8);
 | 
			
		||||
                if (Temp>8)
 | 
			
		||||
                {
 | 
			
		||||
                  Config.Bookmark_label[Bouton_clicke-10][7]=CARACTERE_SUSPENSION;
 | 
			
		||||
                  Config.Bookmark_label[Bouton_clicke-10][8]='\0';
 | 
			
		||||
                }
 | 
			
		||||
                Afficher_bookmark(Dropdown_bookmark[Bouton_clicke-10],Bouton_clicke-10);
 | 
			
		||||
                break;
 | 
			
		||||
                
 | 
			
		||||
              case 1: // Rename
 | 
			
		||||
                if (Config.Bookmark_directory[Bouton_clicke-10])
 | 
			
		||||
                {
 | 
			
		||||
                  // On enlève les "..." avant l'édition
 | 
			
		||||
                  char bookmark_label[8+1];
 | 
			
		||||
                  strcpy(bookmark_label, Config.Bookmark_label[Bouton_clicke-10]);
 | 
			
		||||
                  if (bookmark_label[7]==CARACTERE_SUSPENSION)
 | 
			
		||||
                    bookmark_label[7]='\0';
 | 
			
		||||
                  if (Readline_ex(Dropdown_bookmark[Bouton_clicke-10]->Pos_X+3+10,Dropdown_bookmark[Bouton_clicke-10]->Pos_Y+2,bookmark_label,8,8,0))
 | 
			
		||||
                    strcpy(Config.Bookmark_label[Bouton_clicke-10],bookmark_label);
 | 
			
		||||
                  Afficher_bookmark(Dropdown_bookmark[Bouton_clicke-10],Bouton_clicke-10);
 | 
			
		||||
                  Afficher_curseur();
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
 | 
			
		||||
              case 2: // Clear
 | 
			
		||||
                if (Config.Bookmark_directory[Bouton_clicke-10] && Demande_de_confirmation("Erase bookmark ?"))
 | 
			
		||||
                {
 | 
			
		||||
                  free(Config.Bookmark_directory[Bouton_clicke-10]);
 | 
			
		||||
                  Config.Bookmark_directory[Bouton_clicke-10]=NULL;
 | 
			
		||||
                  Config.Bookmark_label[Bouton_clicke-10][0]='\0';
 | 
			
		||||
                  Afficher_bookmark(Dropdown_bookmark[Bouton_clicke-10],Bouton_clicke-10);
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    switch (Touche)
 | 
			
		||||
    {
 | 
			
		||||
      case SDLK_UNKNOWN : break;
 | 
			
		||||
      case SDLK_DOWN : // Bas
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_Scroll_Down(&Principal_File_list_Position,&Principal_File_list_Decalage);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case SDLK_UP : // Haut
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_Scroll_Up(&Principal_File_list_Position,&Principal_File_list_Decalage);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case SDLK_PAGEDOWN : // PageDown
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_Page_Down(&Principal_File_list_Position,&Principal_File_list_Decalage,9);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case SDLK_PAGEUP : // PageUp
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_Page_Up(&Principal_File_list_Position,&Principal_File_list_Decalage,9);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case SDLK_END : // End
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_End(&Principal_File_list_Position,&Principal_File_list_Decalage);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case SDLK_HOME : // Home
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_Home(&Principal_File_list_Position,&Principal_File_list_Decalage);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case TOUCHE_MOUSEWHEELDOWN :
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_Page_Down(&Principal_File_list_Position,&Principal_File_list_Decalage,3);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case TOUCHE_MOUSEWHEELUP :
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Select_Page_Up(&Principal_File_list_Position,&Principal_File_list_Decalage,3);
 | 
			
		||||
        On_vient_de_scroller_dans_le_fileselect(Scroller_de_fichiers);
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      case SDLK_BACKSPACE : // Backspace
 | 
			
		||||
        *Fichier_recherche=0;
 | 
			
		||||
        // Si le choix ".." est bien en tête des propositions...
 | 
			
		||||
        if (!strcmp(Liste_du_fileselect->NomComplet,PARENT_DIR))
 | 
			
		||||
        {                              
 | 
			
		||||
          // On va dans le répertoire parent.
 | 
			
		||||
          strcpy(Principal_Nom_fichier,PARENT_DIR);
 | 
			
		||||
          Type_selectionne=1;
 | 
			
		||||
          On_a_clicke_sur_OK=1;
 | 
			
		||||
        }
 | 
			
		||||
        Touche=0;
 | 
			
		||||
        break;
 | 
			
		||||
      default: // Autre => On se place sur le nom de fichier qui correspond
 | 
			
		||||
        if (Bouton_clicke<=0)
 | 
			
		||||
        {
 | 
			
		||||
          if (Est_Raccourci(Touche,0x100+BOUTON_AIDE))
 | 
			
		||||
          {
 | 
			
		||||
            Fenetre_aide(load?BOUTON_CHARGER:BOUTON_SAUVER, NULL);
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
          Temp=strlen(Fichier_recherche);
 | 
			
		||||
          if (Touche_ANSI>= ' ' && Touche_ANSI < 255 && Temp<50)
 | 
			
		||||
          {
 | 
			
		||||
            Fichier_recherche[Temp]=Touche_ANSI;
 | 
			
		||||
            Fichier_recherche[Temp+1]='\0';
 | 
			
		||||
            Fichier_le_plus_ressemblant=Nom_correspondant_le_mieux_a(Fichier_recherche);
 | 
			
		||||
            if ( (Fichier_le_plus_ressemblant) )
 | 
			
		||||
            {
 | 
			
		||||
              Temp=Principal_File_list_Position+Principal_File_list_Decalage;
 | 
			
		||||
              Effacer_curseur();
 | 
			
		||||
              Placer_barre_de_selection_sur(Fichier_le_plus_ressemblant);
 | 
			
		||||
              Preparer_et_afficher_liste_fichiers(Principal_File_list_Position,Principal_File_list_Decalage,Scroller_de_fichiers);
 | 
			
		||||
              Afficher_curseur();
 | 
			
		||||
              if (Temp!=Principal_File_list_Position+Principal_File_list_Decalage)
 | 
			
		||||
                Nouvelle_preview=1;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
              *Fichier_recherche=0;
 | 
			
		||||
            Touche=0;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
          *Fichier_recherche=0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (On_a_clicke_sur_OK)
 | 
			
		||||
    {
 | 
			
		||||
      //   Si c'est un répertoire, on annule "On_a_clicke_sur_OK" et on passe
 | 
			
		||||
      // dedans.
 | 
			
		||||
      if (Type_selectionne!=0)
 | 
			
		||||
      {
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        On_a_clicke_sur_OK=0;
 | 
			
		||||
 | 
			
		||||
        // On mémorise le répertoire dans lequel on était
 | 
			
		||||
        if (strcmp(Principal_Nom_fichier,PARENT_DIR))
 | 
			
		||||
          strcpy(Repertoire_precedent,Nom_formate(PARENT_DIR, 1));
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
          strcpy(Repertoire_precedent,
 | 
			
		||||
            Nom_formate(Position_dernier_slash(Principal_Repertoire_courant), 1)
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // On doit rentrer dans le répertoire:
 | 
			
		||||
        if (!chdir(Principal_Nom_fichier))
 | 
			
		||||
        {
 | 
			
		||||
          getcwd(Principal_Repertoire_courant,256);
 | 
			
		||||
  
 | 
			
		||||
          // On lit le nouveau répertoire
 | 
			
		||||
          Lire_liste_des_fichiers(Principal_Format);
 | 
			
		||||
          Trier_la_liste_des_fichiers();
 | 
			
		||||
          // On place la barre de sélection sur le répertoire d'où l'on vient
 | 
			
		||||
          Placer_barre_de_selection_sur(Repertoire_precedent);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
          Erreur(0);
 | 
			
		||||
        // Affichage des premiers fichiers visibles:
 | 
			
		||||
        Preparer_et_afficher_liste_fichiers(Principal_File_list_Position,Principal_File_list_Decalage,Scroller_de_fichiers);
 | 
			
		||||
        Afficher_curseur();
 | 
			
		||||
        Nouvelle_preview=1;
 | 
			
		||||
      }
 | 
			
		||||
      else  // Sinon on essaye de charger ou sauver le fichier
 | 
			
		||||
      {
 | 
			
		||||
        strcpy(Principal_Repertoire_fichier,Principal_Repertoire_courant);
 | 
			
		||||
        if (!load)
 | 
			
		||||
          Principal_Format_fichier=Principal_Format;
 | 
			
		||||
        Charger_ou_sauver_l_image=1;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Gestion du chrono et des previews
 | 
			
		||||
    if (Nouvelle_preview)
 | 
			
		||||
    {
 | 
			
		||||
      // On efface les infos de la preview précédente s'il y en a une
 | 
			
		||||
      // d'affichée
 | 
			
		||||
      if (Etat_chrono==2)
 | 
			
		||||
      {
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        // On efface le commentaire précédent
 | 
			
		||||
        Block(Fenetre_Pos_X+ 46*Menu_Facteur_X,Fenetre_Pos_Y+(175+FILENAMESPACE)*Menu_Facteur_Y,
 | 
			
		||||
              Menu_Facteur_X<<8,Menu_Facteur_Y<<3,CM_Clair);
 | 
			
		||||
        // On nettoie la zone où va s'afficher la preview:
 | 
			
		||||
        Block(Fenetre_Pos_X+180*Menu_Facteur_X,Fenetre_Pos_Y+ (89+FILENAMESPACE)*Menu_Facteur_Y,
 | 
			
		||||
              Menu_Facteur_X*122,Menu_Facteur_Y*82,CM_Clair);
 | 
			
		||||
        // On efface les dimensions de l'image
 | 
			
		||||
        Block(Fenetre_Pos_X+226*Menu_Facteur_X,Fenetre_Pos_Y+ 55*Menu_Facteur_Y,
 | 
			
		||||
              Menu_Facteur_X*72,Menu_Facteur_Y<<3,CM_Clair);
 | 
			
		||||
        // On efface la taille du fichier
 | 
			
		||||
        Block(Fenetre_Pos_X+226*Menu_Facteur_X,Fenetre_Pos_Y+ 63*Menu_Facteur_Y,
 | 
			
		||||
              Menu_Facteur_X*72,Menu_Facteur_Y<<3,CM_Clair);
 | 
			
		||||
        // On efface le format du fichier
 | 
			
		||||
        Block(Fenetre_Pos_X+226*Menu_Facteur_X,Fenetre_Pos_Y+ 72*Menu_Facteur_Y,
 | 
			
		||||
              Menu_Facteur_X*72,Menu_Facteur_Y<<3,CM_Clair);
 | 
			
		||||
        // Affichage du commentaire
 | 
			
		||||
        if ( (!load) && (FormatFichier[Principal_Format-1].Commentaire) )
 | 
			
		||||
        {
 | 
			
		||||
          Print_dans_fenetre(46,175+FILENAMESPACE,Principal_Commentaire,CM_Noir,CM_Clair);
 | 
			
		||||
        }
 | 
			
		||||
        Afficher_curseur();
 | 
			
		||||
        // Un update pour couvrir les 4 zones: 3 libellés plus la zone de preview
 | 
			
		||||
        UpdateRect(Fenetre_Pos_X+180*Menu_Facteur_X,Fenetre_Pos_Y+55*Menu_Facteur_Y,Menu_Facteur_X*122,Menu_Facteur_Y*(116+FILENAMESPACE));
 | 
			
		||||
        // Zone de commentaire
 | 
			
		||||
        UpdateRect(Fenetre_Pos_X+46*Menu_Facteur_X,Fenetre_Pos_Y+(175+FILENAMESPACE)*Menu_Facteur_Y,Menu_Facteur_X*32*8,Menu_Facteur_Y*8);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      Nouvelle_preview=0;
 | 
			
		||||
      Etat_chrono=0;         // Etat du chrono = Attente d'un Xème de seconde
 | 
			
		||||
      // On lit le temps de départ du chrono
 | 
			
		||||
      Initialiser_chrono(Config.Chrono_delay);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!Etat_chrono)  // Prendre une nouvelle mesure du chrono et regarder
 | 
			
		||||
      Tester_chrono(); // s'il ne faut pas afficher la preview
 | 
			
		||||
 | 
			
		||||
    if (Etat_chrono==1) // Il faut afficher la preview
 | 
			
		||||
    {
 | 
			
		||||
      if ( (Principal_File_list_Position+Principal_File_list_Decalage>=Liste_Nb_repertoires) && (Liste_Nb_elements) )
 | 
			
		||||
      {
 | 
			
		||||
        strcpy(Principal_Repertoire_fichier,Principal_Repertoire_courant);
 | 
			
		||||
 | 
			
		||||
        Effacer_curseur();
 | 
			
		||||
        Charger_image(image);
 | 
			
		||||
        UpdateRect(ToWinX(179),ToWinY(88+FILENAMESPACE),ToWinL(124),ToWinH(84));
 | 
			
		||||
        Afficher_curseur();
 | 
			
		||||
 | 
			
		||||
        // Après le chargement de la preview, on restaure tout ce qui aurait
 | 
			
		||||
        // pu être modifié par le chargement de l'image:
 | 
			
		||||
        memcpy(Principal_Palette,Palette_initiale,sizeof(T_Palette));
 | 
			
		||||
        Principal_Image_modifiee=Image_modifiee_initiale;
 | 
			
		||||
        Principal_Largeur_image=Largeur_image_initiale;
 | 
			
		||||
        Principal_Hauteur_image=Hauteur_image_initiale;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      Etat_chrono=2; // On arrête le chrono
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  while ( (!On_a_clicke_sur_OK) && (Bouton_clicke!=2) );
 | 
			
		||||
 | 
			
		||||
  // Si on annule, on restaure l'ancien commentaire
 | 
			
		||||
  if (Bouton_clicke==2)
 | 
			
		||||
    strcpy(Principal_Commentaire,Commentaire_initial);
 | 
			
		||||
 | 
			
		||||
  //   On restaure les données de l'image qui ont certainement été modifiées
 | 
			
		||||
  // par la preview.
 | 
			
		||||
  memcpy(Principal_Palette,Palette_initiale,sizeof(T_Palette));
 | 
			
		||||
  Set_palette(Principal_Palette);
 | 
			
		||||
  Back_color=Back_color_initiale;
 | 
			
		||||
  Principal_Image_modifiee=Image_modifiee_initiale;
 | 
			
		||||
  Principal_Largeur_image=Largeur_image_initiale;
 | 
			
		||||
  Principal_Hauteur_image=Hauteur_image_initiale;
 | 
			
		||||
  Set_palette(Principal_Palette);
 | 
			
		||||
 | 
			
		||||
  Calculer_couleurs_menu_optimales(Principal_Palette);
 | 
			
		||||
  Temp=(Fenetre_Pos_Y+(Fenetre_Hauteur*Menu_Facteur_Y)<Menu_Ordonnee_avant_fenetre);
 | 
			
		||||
 | 
			
		||||
  Fermer_fenetre();
 | 
			
		||||
 | 
			
		||||
  if (Temp)
 | 
			
		||||
    Afficher_menu();
 | 
			
		||||
 | 
			
		||||
  Desenclencher_bouton((load)?BOUTON_CHARGER:BOUTON_SAUVER);
 | 
			
		||||
  Afficher_curseur();
 | 
			
		||||
  Detruire_liste_du_fileselect();
 | 
			
		||||
 | 
			
		||||
  Pixel_de_chargement=Pixel_Chargement_dans_ecran_courant;
 | 
			
		||||
 | 
			
		||||
  free(Palette_initiale);
 | 
			
		||||
 | 
			
		||||
  return Charger_ou_sauver_l_image;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										35
									
								
								files.h
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								files.h
									
									
									
									
									
								
							@ -18,38 +18,5 @@
 | 
			
		||||
    write to the Free Software Foundation, Inc.,
 | 
			
		||||
    59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 | 
			
		||||
*/
 | 
			
		||||
// Modifie Principal_Repertoire_courant en y mettant sa nouvelle valeur
 | 
			
		||||
// (avec le nom du disque)
 | 
			
		||||
int  Determiner_repertoire_courant(void);
 | 
			
		||||
 | 
			
		||||
// -- Destruction de la liste chaînée ---------------------------------------
 | 
			
		||||
void Detruire_liste_du_fileselect(void);
 | 
			
		||||
// -- Lecture d'une liste de fichiers ---------------------------------------
 | 
			
		||||
void Lire_liste_des_fichiers(byte Format_demande);
 | 
			
		||||
// -- Lecture d'une liste de lecteurs / volumes -----------------------------
 | 
			
		||||
void Lire_liste_des_lecteurs(void);
 | 
			
		||||
// -- Tri de la liste des fichiers et répertoires ---------------------------
 | 
			
		||||
void Trier_la_liste_des_fichiers(void);
 | 
			
		||||
// -- Affichage des éléments de la liste de fichier / répertoire ------------
 | 
			
		||||
void Afficher_la_liste_des_fichiers(short Decalage_premier,short Decalage_select);
 | 
			
		||||
// -- Récupérer le libellé d'un élément de la liste -------------------------
 | 
			
		||||
void Determiner_element_de_la_liste(short Decalage_premier,short Decalage_select,char * label,int *type);
 | 
			
		||||
 | 
			
		||||
void Afficher_bookmark(T_Bouton_dropdown * Bouton, int Numero_bookmark);
 | 
			
		||||
 | 
			
		||||
// -- Déplacements dans la liste des fichiers -------------------------------
 | 
			
		||||
 | 
			
		||||
void Select_Scroll_Down(short * Decalage_premier,short * Decalage_select);
 | 
			
		||||
void Select_Scroll_Up  (short * Decalage_premier,short * Decalage_select);
 | 
			
		||||
void Select_Page_Down  (short * Decalage_premier,short * Decalage_select, short lines);
 | 
			
		||||
void Select_Page_Up    (short * Decalage_premier,short * Decalage_select, short lines);
 | 
			
		||||
void Select_End        (short * Decalage_premier,short * Decalage_select);
 | 
			
		||||
void Select_Home       (short * Decalage_premier,short * Decalage_select);
 | 
			
		||||
 | 
			
		||||
short Calculer_decalage_click_dans_fileselector(void);
 | 
			
		||||
 | 
			
		||||
char * Nom_formate(char * fname, int type);
 | 
			
		||||
 | 
			
		||||
// Scans a directory, calls Callback for each file in it,
 | 
			
		||||
void for_each_file(const char * Nom_repertoire, void Callback(const char *));
 | 
			
		||||
 | 
			
		||||
byte Bouton_Load_ou_Save(byte load, byte image);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										5
									
								
								graph.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								graph.h
									
									
									
									
									
								
							@ -108,11 +108,6 @@ void Changer_facteur_loupe(byte Indice_facteur);
 | 
			
		||||
 | 
			
		||||
void Remap_picture(void);
 | 
			
		||||
 | 
			
		||||
#define ToWinX(x) (((x)*Menu_Facteur_X)+Fenetre_Pos_X)
 | 
			
		||||
#define ToWinY(y) (((y)*Menu_Facteur_Y)+Fenetre_Pos_Y)
 | 
			
		||||
#define ToWinL(l) ((l)*Menu_Facteur_X)
 | 
			
		||||
#define ToWinH(h) ((h)*Menu_Facteur_Y)
 | 
			
		||||
 | 
			
		||||
// Définition d'une fonction générique de traçage de figures:
 | 
			
		||||
fonction_afficheur Pixel_figure;
 | 
			
		||||
void Mettre_Ecran_A_Jour(short x, short y, short width, short height);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								init.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								init.c
									
									
									
									
									
								
							@ -29,8 +29,6 @@
 | 
			
		||||
#endif
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
@ -62,7 +60,6 @@
 | 
			
		||||
#include "clavier.h"
 | 
			
		||||
#include "io.h"
 | 
			
		||||
#include "hotkeys.h"
 | 
			
		||||
#include "files.h"
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include "windows.h"
 | 
			
		||||
#include "sdlscreen.h"
 | 
			
		||||
@ -1665,14 +1662,12 @@ int Charger_CFG(int Tout_charger)
 | 
			
		||||
  Config_Chunk        Chunk;
 | 
			
		||||
  Config_Infos_touche CFG_Infos_touche;
 | 
			
		||||
  Config_Mode_video   CFG_Mode_video;
 | 
			
		||||
  struct stat Informations_Fichier;
 | 
			
		||||
  int Conversion_touches = 0;
 | 
			
		||||
 | 
			
		||||
  strcpy(Nom_du_fichier,Repertoire_de_configuration);
 | 
			
		||||
  strcat(Nom_du_fichier,"gfx2.cfg");
 | 
			
		||||
 | 
			
		||||
  stat(Nom_du_fichier,&Informations_Fichier);
 | 
			
		||||
  Taille_fichier=Informations_Fichier.st_size;
 | 
			
		||||
  Taille_fichier=FileLength(Nom_du_fichier);
 | 
			
		||||
 | 
			
		||||
  if ((Handle=fopen(Nom_du_fichier,"rb"))==NULL)
 | 
			
		||||
    return ERREUR_CFG_ABSENT;
 | 
			
		||||
@ -1954,8 +1949,8 @@ int Sauver_CFG(void)
 | 
			
		||||
  char Nom_du_fichier[TAILLE_CHEMIN_FICHIER];
 | 
			
		||||
  Config_Header cfg_header;
 | 
			
		||||
  Config_Chunk Chunk;
 | 
			
		||||
  Config_Infos_touche CFG_Infos_touche;
 | 
			
		||||
  Config_Mode_video   CFG_Mode_video;
 | 
			
		||||
  Config_Infos_touche CFG_Infos_touche={0,0,0};
 | 
			
		||||
  Config_Mode_video   CFG_Mode_video={0,0,0};
 | 
			
		||||
 | 
			
		||||
  strcpy(Nom_du_fichier,Repertoire_de_configuration);
 | 
			
		||||
  strcat(Nom_du_fichier,"gfx2.cfg");
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										42
									
								
								io.c
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								io.c
									
									
									
									
									
								
							@ -241,3 +241,45 @@ int Repertoire_existe(char * Repertoire)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Taille de fichier, en octets
 | 
			
		||||
int FileLength(const char * fname)
 | 
			
		||||
{
 | 
			
		||||
    struct stat infos_fichier;
 | 
			
		||||
    if (stat(fname,&infos_fichier))
 | 
			
		||||
        return 0;
 | 
			
		||||
    return infos_fichier.st_size;
 | 
			
		||||
}
 | 
			
		||||
int File_length_file(FILE * file)
 | 
			
		||||
{
 | 
			
		||||
    struct stat infos_fichier;
 | 
			
		||||
    if (fstat(fileno(file),&infos_fichier))
 | 
			
		||||
        return 0;
 | 
			
		||||
    return infos_fichier.st_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void for_each_file(const char * Nom_repertoire, void Callback(const char *))
 | 
			
		||||
{
 | 
			
		||||
  // Pour scan de répertoire
 | 
			
		||||
  DIR*  Repertoire_Courant; //Répertoire courant
 | 
			
		||||
  struct dirent* entry; // Structure de lecture des éléments
 | 
			
		||||
  char Nom_fichier_complet[TAILLE_CHEMIN_FICHIER];
 | 
			
		||||
  int Position_nom_fichier;
 | 
			
		||||
  strcpy(Nom_fichier_complet, Nom_repertoire);
 | 
			
		||||
  Repertoire_Courant=opendir(Nom_repertoire);
 | 
			
		||||
  if(Repertoire_Courant == NULL) return;        // Répertoire invalide ...
 | 
			
		||||
  strcat(Nom_fichier_complet, SEPARATEUR_CHEMIN);
 | 
			
		||||
  Position_nom_fichier = strlen(Nom_fichier_complet);
 | 
			
		||||
  while ((entry=readdir(Repertoire_Courant)))
 | 
			
		||||
  {
 | 
			
		||||
    struct stat Infos_enreg;
 | 
			
		||||
    strcpy(&Nom_fichier_complet[Position_nom_fichier], entry->d_name);
 | 
			
		||||
    stat(Nom_fichier_complet,&Infos_enreg);
 | 
			
		||||
    if (S_ISREG(Infos_enreg.st_mode))
 | 
			
		||||
    {
 | 
			
		||||
      Callback(Nom_fichier_complet);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  closedir(Repertoire_Courant);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										9
									
								
								io.h
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								io.h
									
									
									
									
									
								
							@ -49,9 +49,18 @@ char * Position_dernier_slash(const char * Chaine);
 | 
			
		||||
  #define SEPARATEUR_CHEMIN "/"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Taille de fichier, en octets
 | 
			
		||||
int FileLength(const char *fname);
 | 
			
		||||
 | 
			
		||||
// Taille de fichier, en octets
 | 
			
		||||
int File_length_file(FILE * file);
 | 
			
		||||
 | 
			
		||||
//   Détermine si un file passé en paramètre existe ou non dans le
 | 
			
		||||
// répertoire courant.
 | 
			
		||||
int Fichier_existe(char * fname);
 | 
			
		||||
//   Détermine si un répertoire passé en paramètre existe ou non dans le
 | 
			
		||||
// répertoire courant.
 | 
			
		||||
int  Repertoire_existe(char * Repertoire);
 | 
			
		||||
 | 
			
		||||
// Scans a directory, calls Callback for each file in it,
 | 
			
		||||
void for_each_file(const char * Nom_repertoire, void Callback(const char *));
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										97
									
								
								loadsave.c
									
									
									
									
									
								
							
							
						
						
									
										97
									
								
								loadsave.c
									
									
									
									
									
								
							@ -23,7 +23,6 @@
 | 
			
		||||
#define _XOPEN_SOURCE
 | 
			
		||||
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@ -137,14 +136,6 @@ T_Format FormatFichier[NB_FORMATS_CONNUS] = {
 | 
			
		||||
// Actuellement seul le format PNG peut donner autre chose que PIXEL_SIMPLE.
 | 
			
		||||
enum PIXEL_RATIO Ratio_image_chargee=PIXEL_SIMPLE;
 | 
			
		||||
 | 
			
		||||
// Taille de fichier, en octets
 | 
			
		||||
int FileLength(FILE * file)
 | 
			
		||||
{
 | 
			
		||||
        struct stat infos_fichier;
 | 
			
		||||
        fstat(fileno(file),&infos_fichier);
 | 
			
		||||
        return infos_fichier.st_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Chargement des pixels dans l'écran principal
 | 
			
		||||
void Pixel_Chargement_dans_ecran_courant(word x_pos,word y_pos,byte Couleur)
 | 
			
		||||
{
 | 
			
		||||
@ -731,7 +722,6 @@ void Test_PAL(void)
 | 
			
		||||
  FILE *file;             // Fichier du fichier
 | 
			
		||||
  char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; // Nom complet du fichier
 | 
			
		||||
  long Taille_du_fichier;   // Taille du fichier
 | 
			
		||||
  struct stat Informations_Fichier;
 | 
			
		||||
 | 
			
		||||
  Nom_fichier_complet(Nom_du_fichier,0);
 | 
			
		||||
 | 
			
		||||
@ -740,9 +730,8 @@ void Test_PAL(void)
 | 
			
		||||
  // Ouverture du fichier
 | 
			
		||||
  if ((file=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
    stat(Nom_du_fichier,&Informations_Fichier);
 | 
			
		||||
    // Lecture de la taille du fichier
 | 
			
		||||
    Taille_du_fichier=Informations_Fichier.st_size;
 | 
			
		||||
    Taille_du_fichier=File_length_file(file);
 | 
			
		||||
    fclose(file);
 | 
			
		||||
    // Le fichier ne peut être au format PAL que si sa taille vaut 768 octets
 | 
			
		||||
    if (Taille_du_fichier==sizeof(T_Palette))
 | 
			
		||||
@ -884,17 +873,13 @@ void Load_IMG(void)
 | 
			
		||||
  long Largeur_lue;
 | 
			
		||||
  long Taille_du_fichier;
 | 
			
		||||
  T_Header_IMG IMG_header;
 | 
			
		||||
  struct stat Informations_Fichier;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  stat(Nom_du_fichier,&Informations_Fichier);
 | 
			
		||||
  
 | 
			
		||||
  Nom_fichier_complet(Nom_du_fichier,0);
 | 
			
		||||
  Erreur_fichier=0;
 | 
			
		||||
 | 
			
		||||
  if ((file=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
    Taille_du_fichier=Informations_Fichier.st_size;
 | 
			
		||||
    Taille_du_fichier=File_length_file(file);
 | 
			
		||||
 | 
			
		||||
    if (read_bytes(file,&IMG_header,sizeof(T_Header_IMG)))
 | 
			
		||||
    {
 | 
			
		||||
@ -1068,8 +1053,6 @@ void Load_PKM(void)
 | 
			
		||||
  dword Taille_image;
 | 
			
		||||
  dword Taille_pack;
 | 
			
		||||
  long  Taille_du_fichier;
 | 
			
		||||
  struct stat Informations_Fichier;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  Nom_fichier_complet(Nom_du_fichier,0);
 | 
			
		||||
 | 
			
		||||
@ -1077,8 +1060,7 @@ void Load_PKM(void)
 | 
			
		||||
  
 | 
			
		||||
  if ((file=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
    stat(Nom_du_fichier,&Informations_Fichier);
 | 
			
		||||
    Taille_du_fichier=Informations_Fichier.st_size;
 | 
			
		||||
    Taille_du_fichier=File_length_file(file);
 | 
			
		||||
 | 
			
		||||
    if (read_bytes(file,&header,sizeof(T_Header_PKM)))
 | 
			
		||||
    {
 | 
			
		||||
@ -1197,7 +1179,7 @@ void Load_PKM(void)
 | 
			
		||||
 | 
			
		||||
          Compteur_de_donnees_packees=0;
 | 
			
		||||
          Compteur_de_pixels=0;
 | 
			
		||||
          Taille_pack=(Informations_Fichier.st_size)-sizeof(T_Header_PKM)-header.Jump;
 | 
			
		||||
          Taille_pack=(Taille_du_fichier)-sizeof(T_Header_PKM)-header.Jump;
 | 
			
		||||
 | 
			
		||||
          // Boucle de décompression:
 | 
			
		||||
          while ( (Compteur_de_pixels<Taille_image) && (Compteur_de_donnees_packees<Taille_pack) && (!Erreur_fichier) )
 | 
			
		||||
@ -1763,7 +1745,6 @@ void Load_LBM(void)
 | 
			
		||||
  short Vraie_taille_ligne; // Taille d'une ligne en pixels
 | 
			
		||||
  byte  Couleur;
 | 
			
		||||
  long  Taille_du_fichier;
 | 
			
		||||
  struct stat Informations_Fichier;
 | 
			
		||||
  dword Dummy;
 | 
			
		||||
 | 
			
		||||
  Nom_fichier_complet(Nom_du_fichier,0);
 | 
			
		||||
@ -1772,8 +1753,7 @@ void Load_LBM(void)
 | 
			
		||||
 | 
			
		||||
  if ((LBM_Fichier=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
      stat(Nom_du_fichier,&Informations_Fichier);
 | 
			
		||||
    Taille_du_fichier=Informations_Fichier.st_size;
 | 
			
		||||
    Taille_du_fichier=File_length_file(LBM_Fichier);
 | 
			
		||||
 | 
			
		||||
    // On avance dans le fichier (pas besoin de tester ce qui l'a déjà été)
 | 
			
		||||
    read_bytes(LBM_Fichier,section,4);
 | 
			
		||||
@ -2101,8 +2081,7 @@ void Save_LBM(void)
 | 
			
		||||
  word y_pos;
 | 
			
		||||
  byte temp_byte;
 | 
			
		||||
  word Vraie_largeur;
 | 
			
		||||
  struct stat Informations_Fichier;
 | 
			
		||||
 | 
			
		||||
  int Taille_fichier;
 | 
			
		||||
 | 
			
		||||
  Erreur_fichier=0;
 | 
			
		||||
  Nom_fichier_complet(Nom_du_fichier,0);
 | 
			
		||||
@ -2174,11 +2153,11 @@ void Save_LBM(void)
 | 
			
		||||
 | 
			
		||||
    if (!Erreur_fichier)
 | 
			
		||||
    {
 | 
			
		||||
      stat(Nom_du_fichier,&Informations_Fichier);
 | 
			
		||||
 | 
			
		||||
      Taille_fichier=FileLength(Nom_du_fichier);
 | 
			
		||||
      
 | 
			
		||||
      LBM_Fichier=fopen(Nom_du_fichier,"rb+");
 | 
			
		||||
      fseek(LBM_Fichier,820,SEEK_SET);
 | 
			
		||||
      write_dword_be(LBM_Fichier,Informations_Fichier.st_size-824);
 | 
			
		||||
      write_dword_be(LBM_Fichier,Taille_fichier-824);
 | 
			
		||||
 | 
			
		||||
      if (!Erreur_fichier)
 | 
			
		||||
      {
 | 
			
		||||
@ -2186,16 +2165,16 @@ void Save_LBM(void)
 | 
			
		||||
 | 
			
		||||
        //   Si la taille de la section de l'image (taille fichier-8) est
 | 
			
		||||
        // impaire, on rajoute un 0 (Padding) à la fin.
 | 
			
		||||
        if ((Informations_Fichier.st_size) & 1)
 | 
			
		||||
        if ((Taille_fichier) & 1)
 | 
			
		||||
        {
 | 
			
		||||
          write_dword_be(LBM_Fichier,Informations_Fichier.st_size-7);
 | 
			
		||||
          write_dword_be(LBM_Fichier,Taille_fichier-7);
 | 
			
		||||
          fseek(LBM_Fichier,0,SEEK_END);
 | 
			
		||||
          temp_byte=0;
 | 
			
		||||
          if (! write_bytes(LBM_Fichier,&temp_byte,1))
 | 
			
		||||
            Erreur_fichier=1;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
          write_dword_be(LBM_Fichier,Informations_Fichier.st_size-8);
 | 
			
		||||
          write_dword_be(LBM_Fichier,Taille_fichier-8);
 | 
			
		||||
 | 
			
		||||
        fclose(LBM_Fichier);
 | 
			
		||||
 | 
			
		||||
@ -2304,8 +2283,6 @@ void Load_BMP(void)
 | 
			
		||||
  word  Taille_ligne;
 | 
			
		||||
  byte  a,b,c=0;
 | 
			
		||||
  long  Taille_du_fichier;
 | 
			
		||||
  struct stat Informations_Fichier;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  Nom_fichier_complet(Nom_du_fichier,0);
 | 
			
		||||
 | 
			
		||||
@ -2313,8 +2290,7 @@ void Load_BMP(void)
 | 
			
		||||
 | 
			
		||||
  if ((file=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
      stat(Nom_du_fichier,&Informations_Fichier);
 | 
			
		||||
    Taille_du_fichier=Informations_Fichier.st_size;
 | 
			
		||||
    Taille_du_fichier=File_length_file(file);
 | 
			
		||||
 | 
			
		||||
    if (read_word_le(file,&(header.Signature))
 | 
			
		||||
     && read_dword_le(file,&(header.Taille_1))
 | 
			
		||||
@ -2848,7 +2824,6 @@ void Load_GIF(void)
 | 
			
		||||
  word Valeur_Clr;        // Valeur <=> Clear tables
 | 
			
		||||
  word Valeur_Eof;        // Valeur <=> Fin d'image
 | 
			
		||||
  long Taille_du_fichier;
 | 
			
		||||
  struct stat Informations_Fichier;
 | 
			
		||||
  int Nombre_LID; // Nombre d'images trouvées dans le fichier
 | 
			
		||||
 | 
			
		||||
  /////////////////////////////////////////////////// FIN DES DECLARATIONS //
 | 
			
		||||
@ -2865,9 +2840,7 @@ void Load_GIF(void)
 | 
			
		||||
 | 
			
		||||
  if ((GIF_Fichier=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
      stat(Nom_du_fichier,&Informations_Fichier);
 | 
			
		||||
    Taille_du_fichier=Informations_Fichier.st_size;
 | 
			
		||||
 | 
			
		||||
    Taille_du_fichier=File_length_file(GIF_Fichier);
 | 
			
		||||
    if ( (read_bytes(GIF_Fichier,signature,6)) &&
 | 
			
		||||
         ( (memcmp(signature,"GIF87a",6)==0) ||
 | 
			
		||||
           (memcmp(signature,"GIF89a",6)==0) ) )
 | 
			
		||||
@ -3631,7 +3604,6 @@ void Load_PCX(void)
 | 
			
		||||
  long  position;
 | 
			
		||||
  long  Taille_image;
 | 
			
		||||
  byte * Buffer;
 | 
			
		||||
  struct stat Informations_Fichier;
 | 
			
		||||
 | 
			
		||||
  Nom_fichier_complet(Nom_du_fichier,0);
 | 
			
		||||
 | 
			
		||||
@ -3639,8 +3611,7 @@ void Load_PCX(void)
 | 
			
		||||
 | 
			
		||||
  if ((file=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
      stat(Nom_du_fichier,&Informations_Fichier);
 | 
			
		||||
    Taille_du_fichier=Informations_Fichier.st_size;
 | 
			
		||||
    Taille_du_fichier=File_length_file(file);
 | 
			
		||||
    /*
 | 
			
		||||
    if (read_bytes(file,&PCX_header,sizeof(T_PCX_Header)))
 | 
			
		||||
    {*/
 | 
			
		||||
@ -4086,15 +4057,17 @@ void Test_CEL(void)
 | 
			
		||||
  FILE *file;
 | 
			
		||||
  T_CEL_Header1 header1;
 | 
			
		||||
  T_CEL_Header2 header2;
 | 
			
		||||
  struct stat Informations_Fichier;
 | 
			
		||||
  int Taille_fichier;
 | 
			
		||||
 | 
			
		||||
  Erreur_fichier=0;
 | 
			
		||||
  if (!stat(Nom_du_fichier,&Informations_Fichier))
 | 
			
		||||
  Nom_fichier_complet(Nom_du_fichier,0);
 | 
			
		||||
  Taille_fichier=FileLength(Nom_du_fichier);
 | 
			
		||||
  if (Taille_fichier==0)
 | 
			
		||||
  {
 | 
			
		||||
    Erreur_fichier = 1; // Si on ne peut pas faire de stat il vaut mieux laisser tomber
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  Nom_fichier_complet(Nom_du_fichier,0);
 | 
			
		||||
  
 | 
			
		||||
  if (! (file=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
    Erreur_fichier = 1;
 | 
			
		||||
@ -4106,7 +4079,7 @@ void Test_CEL(void)
 | 
			
		||||
      //   Vu que ce header n'a pas de signature, il va falloir tester la
 | 
			
		||||
      // cohérence de la dimension de l'image avec celle du fichier.
 | 
			
		||||
      
 | 
			
		||||
      size=(Informations_Fichier.st_size)-sizeof(T_CEL_Header1);
 | 
			
		||||
      size=Taille_fichier-sizeof(T_CEL_Header1);
 | 
			
		||||
      if ( (!size) || ( (((header1.Width+1)>>1)*header1.Height)!=size ) )
 | 
			
		||||
      {
 | 
			
		||||
        // Tentative de reconnaissance de la signature des nouveaux fichiers
 | 
			
		||||
@ -4152,17 +4125,14 @@ void Load_CEL(void)
 | 
			
		||||
  short y_pos;
 | 
			
		||||
  byte  Dernier_octet=0;
 | 
			
		||||
  long  Taille_du_fichier;
 | 
			
		||||
  struct stat Informations_Fichier;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  Erreur_fichier=0;
 | 
			
		||||
  stat(Nom_du_fichier,&Informations_Fichier);
 | 
			
		||||
  Nom_fichier_complet(Nom_du_fichier,0);
 | 
			
		||||
  if ((file=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
    if (read_bytes(file,&header1,sizeof(T_CEL_Header1)))
 | 
			
		||||
    {
 | 
			
		||||
      Taille_du_fichier=Informations_Fichier.st_size;
 | 
			
		||||
      Taille_du_fichier=File_length_file(file);
 | 
			
		||||
      if ( (Taille_du_fichier>(long int)sizeof(T_CEL_Header1))
 | 
			
		||||
        && ( (((header1.Width+1)>>1)*header1.Height)==(Taille_du_fichier-(long int)sizeof(T_CEL_Header1)) ) )
 | 
			
		||||
      {
 | 
			
		||||
@ -4403,7 +4373,7 @@ void Test_KCF(void)
 | 
			
		||||
  Nom_fichier_complet(Nom_du_fichier,0);
 | 
			
		||||
  if ((file=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
    if (FileLength(file)==sizeof(T_KCF_Header))
 | 
			
		||||
    if (File_length_file(file)==sizeof(T_KCF_Header))
 | 
			
		||||
    {
 | 
			
		||||
      read_bytes(file,&Buffer,sizeof(T_KCF_Header));
 | 
			
		||||
      // On vérifie une propriété de la structure de palette:
 | 
			
		||||
@ -4453,7 +4423,7 @@ void Load_KCF(void)
 | 
			
		||||
  Nom_fichier_complet(Nom_du_fichier,0);
 | 
			
		||||
  if ((file=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
    Taille_du_fichier=FileLength(file);
 | 
			
		||||
    Taille_du_fichier=File_length_file(file);
 | 
			
		||||
    if (Taille_du_fichier==sizeof(T_KCF_Header))
 | 
			
		||||
    {
 | 
			
		||||
      // Fichier KCF à l'ancien format
 | 
			
		||||
@ -4690,7 +4660,7 @@ void Load_SCx(void)
 | 
			
		||||
 | 
			
		||||
  if ((file=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
    Taille_du_fichier=FileLength(file);
 | 
			
		||||
    Taille_du_fichier=File_length_file(file);
 | 
			
		||||
 | 
			
		||||
    if ((read_bytes(file,&SCx_header,sizeof(T_SCx_Header))))
 | 
			
		||||
    {
 | 
			
		||||
@ -4953,7 +4923,7 @@ void Test_PI1(void)
 | 
			
		||||
  if ((file=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
    // Vérification de la taille
 | 
			
		||||
    size=FileLength(file);
 | 
			
		||||
    size=File_length_file(file);
 | 
			
		||||
    if ((size==32034) || (size==32066))
 | 
			
		||||
    {
 | 
			
		||||
      // Lecture et vérification de la résolution
 | 
			
		||||
@ -4992,7 +4962,7 @@ void Load_PI1(void)
 | 
			
		||||
      if (read_bytes(file,buffer,32034))
 | 
			
		||||
      {
 | 
			
		||||
        // Initialisation de la preview
 | 
			
		||||
        Initialiser_preview(320,200,FileLength(file),FORMAT_PI1);
 | 
			
		||||
        Initialiser_preview(320,200,File_length_file(file),FORMAT_PI1);
 | 
			
		||||
        if (Erreur_fichier==0)
 | 
			
		||||
        {
 | 
			
		||||
          // Initialisation de la palette
 | 
			
		||||
@ -5283,7 +5253,7 @@ void Test_PC1(void)
 | 
			
		||||
  if ((file=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
    // Vérification de la taille
 | 
			
		||||
    size=FileLength(file);
 | 
			
		||||
    size=File_length_file(file);
 | 
			
		||||
    if ((size<=32066))
 | 
			
		||||
    {
 | 
			
		||||
      // Lecture et vérification de la résolution
 | 
			
		||||
@ -5316,7 +5286,7 @@ void Load_PC1(void)
 | 
			
		||||
  Erreur_fichier=0;
 | 
			
		||||
  if ((file=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
    size=FileLength(file);
 | 
			
		||||
    size=File_length_file(file);
 | 
			
		||||
    // allocation des buffers mémoire
 | 
			
		||||
    buffercomp=(byte *)malloc(size);
 | 
			
		||||
    bufferdecomp=(byte *)malloc(32000);
 | 
			
		||||
@ -5326,7 +5296,7 @@ void Load_PC1(void)
 | 
			
		||||
      if (read_bytes(file,buffercomp,size))
 | 
			
		||||
      {
 | 
			
		||||
        // Initialisation de la preview
 | 
			
		||||
        Initialiser_preview(320,200,FileLength(file),FORMAT_PC1);
 | 
			
		||||
        Initialiser_preview(320,200,File_length_file(file),FORMAT_PC1);
 | 
			
		||||
        if (Erreur_fichier==0)
 | 
			
		||||
        {
 | 
			
		||||
          // Initialisation de la palette
 | 
			
		||||
@ -5588,8 +5558,6 @@ void Load_PNG(void)
 | 
			
		||||
  char Nom_du_fichier[TAILLE_CHEMIN_FICHIER]; // Nom complet du fichier
 | 
			
		||||
  byte PNG_header[8];  
 | 
			
		||||
  dword Taille_image;
 | 
			
		||||
  long  Taille_du_fichier;
 | 
			
		||||
  struct stat Informations_Fichier;
 | 
			
		||||
 
 | 
			
		||||
  png_structp png_ptr;
 | 
			
		||||
  png_infop info_ptr;
 | 
			
		||||
@ -5600,9 +5568,6 @@ void Load_PNG(void)
 | 
			
		||||
  
 | 
			
		||||
  if ((file=fopen(Nom_du_fichier, "rb")))
 | 
			
		||||
  {
 | 
			
		||||
    stat(Nom_du_fichier,&Informations_Fichier);
 | 
			
		||||
    Taille_du_fichier=Informations_Fichier.st_size;
 | 
			
		||||
 | 
			
		||||
    if (read_bytes(file,PNG_header,8))
 | 
			
		||||
    {
 | 
			
		||||
      if ( !png_sig_cmp(PNG_header, 0, 8))
 | 
			
		||||
@ -5667,7 +5632,7 @@ void Load_PNG(void)
 | 
			
		||||
                    }
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
                Initialiser_preview(info_ptr->width,info_ptr->height,Taille_du_fichier,FORMAT_PNG);
 | 
			
		||||
                Initialiser_preview(info_ptr->width,info_ptr->height,File_length_file(file),FORMAT_PNG);
 | 
			
		||||
 | 
			
		||||
                if (Erreur_fichier==0)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								main.c
									
									
									
									
									
								
							@ -40,7 +40,6 @@
 | 
			
		||||
#include "boutons.h"
 | 
			
		||||
#include "moteur.h"
 | 
			
		||||
#include "pages.h"
 | 
			
		||||
#include "files.h"
 | 
			
		||||
#include "loadsave.h"
 | 
			
		||||
#include "sdlscreen.h"
 | 
			
		||||
#include "erreurs.h"
 | 
			
		||||
@ -313,7 +312,7 @@ int Initialisation_du_programme(int argc,char * argv[])
 | 
			
		||||
  Set_Config_Directory(Repertoire_du_programme,Repertoire_de_configuration);
 | 
			
		||||
 | 
			
		||||
  // On détermine le répertoire courant:
 | 
			
		||||
  Determiner_repertoire_courant();
 | 
			
		||||
  getcwd(Principal_Repertoire_courant,256);
 | 
			
		||||
 | 
			
		||||
  // On en profite pour le mémoriser dans le répertoire principal:
 | 
			
		||||
  strcpy(Repertoire_initial,Principal_Repertoire_courant);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								setup.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								setup.c
									
									
									
									
									
								
							@ -39,7 +39,6 @@
 | 
			
		||||
 | 
			
		||||
#include "struct.h"
 | 
			
		||||
#include "io.h"
 | 
			
		||||
#include "files.h"
 | 
			
		||||
 | 
			
		||||
int Create_ConfigDirectory(char * Config_Dir)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								texte.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								texte.c
									
									
									
									
									
								
							@ -55,7 +55,6 @@
 | 
			
		||||
#include "global.h"
 | 
			
		||||
#include "sdlscreen.h"
 | 
			
		||||
#include "io.h"
 | 
			
		||||
#include "files.h"
 | 
			
		||||
 | 
			
		||||
typedef struct T_FONTE
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
@ -24,6 +24,13 @@
 | 
			
		||||
 | 
			
		||||
#include "struct.h"
 | 
			
		||||
 | 
			
		||||
#define ToWinX(x) (((x)*Menu_Facteur_X)+Fenetre_Pos_X)
 | 
			
		||||
#define ToWinY(y) (((y)*Menu_Facteur_Y)+Fenetre_Pos_Y)
 | 
			
		||||
#define ToWinL(l) ((l)*Menu_Facteur_X)
 | 
			
		||||
#define ToWinH(h) ((h)*Menu_Facteur_Y)
 | 
			
		||||
 | 
			
		||||
#define Display_Window(x,y) UpdateRect(Fenetre_Pos_X,Fenetre_Pos_Y,(x)*Menu_Facteur_X,(y)*Menu_Facteur_Y);
 | 
			
		||||
 | 
			
		||||
void Afficher_curseur(void);
 | 
			
		||||
void Effacer_curseur(void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user