Load/Save: "Select Drive" button. Allows a way for the AmigaOS4 version to display the list of drives / volume names.

Peter, you can plug in Lire_liste_des_lecteurs(void) to enumerate the drives.

Additionally, if you want to display drive icons as well, you have a spot in
Rechercher_drives(void) :
For each drive, call Ajouter_lecteur(car, icon, string);
* car is the displayed character
* string is the drive name "df0:", "mypictures:" etc. (string will be copied)
* icon is one of :
    LECTEUR_FLOPPY_3_5
    LECTEUR_FLOPPY_5_25
    LECTEUR_HDD
    LECTEUR_CDROM
    LECTEUR_NETWORK


git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@309 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Yves Rizoud 2008-10-25 18:20:31 +00:00
parent aeda49b9bb
commit cf54d4a460
11 changed files with 124 additions and 67 deletions

1
aide.c
View File

@ -1,5 +1,6 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program /* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2008 Peter Gordon
Copyright 2008 Yves Rizoud Copyright 2008 Yves Rizoud
Copyright 2008 Franck Charlet Copyright 2008 Franck Charlet
Copyright 2007 Adrien Destugues Copyright 2007 Adrien Destugues

View File

@ -47,6 +47,7 @@
#include "io.h" #include "io.h"
#include "aide.h" #include "aide.h"
#include "texte.h" #include "texte.h"
#include "sdlscreen.h"
#ifdef __WATCOMC__ #ifdef __WATCOMC__
#include <windows.h> #include <windows.h>
@ -2241,6 +2242,8 @@ void Print_Format(void)
} }
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 Decalage, void Preparer_et_afficher_liste_fichiers(short Position, short Decalage,
struct Fenetre_Bouton_scroller * Enreg) struct Fenetre_Bouton_scroller * Enreg)
@ -2257,7 +2260,7 @@ void Preparer_et_afficher_liste_fichiers(short Position, short Decalage,
UpdateRect(Fenetre_Pos_X+(Menu_Facteur_X<<3),Fenetre_Pos_Y+(Menu_Facteur_Y*(89+FILENAMESPACE)),Menu_Facteur_X*98,Menu_Facteur_Y*82); 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" // On récupère le nom du schmilblick à "accéder"
Determiner_element_de_la_liste(Position,Decalage,Principal_Nom_fichier); Determiner_element_de_la_liste(Position,Decalage,Principal_Nom_fichier,&Type_selectionne);
// On affiche le nouveau nom de fichier // On affiche le nouveau nom de fichier
Print_Nom_fichier_dans_selecteur(); Print_Nom_fichier_dans_selecteur();
// On affiche le nom du répertoire courant // On affiche le nom du répertoire courant
@ -2287,7 +2290,7 @@ void On_vient_de_scroller_dans_le_fileselect(struct Fenetre_Bouton_scroller * Sc
Fenetre_Dessiner_jauge(Scroller_de_fichiers); Fenetre_Dessiner_jauge(Scroller_de_fichiers);
} }
// On récupére le nom du schmilblick à "accéder" // 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); 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)) if (strcmp(Ancien_nom_de_fichier,Principal_Nom_fichier))
Nouvelle_preview=1; Nouvelle_preview=1;
@ -2367,7 +2370,6 @@ char * Nom_correspondant_le_mieux_a(char * Nom)
return Pointeur_Meilleur_nom; return Pointeur_Meilleur_nom;
} }
byte Bouton_Load_ou_Save(byte Load, byte Image) byte Bouton_Load_ou_Save(byte Load, byte Image)
// Load=1 => On affiche le menu du bouton LOAD // Load=1 => On affiche le menu du bouton LOAD
// Load=0 => On affiche le menu du bouton SAVE // Load=0 => On affiche le menu du bouton SAVE
@ -2472,13 +2474,16 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
Print_Format(); Print_Format();
// Selecteur de Lecteur / Volume
Fenetre_Definir_bouton_normal(8,21,120,14,"Select drive",0,1,SDLK_LAST); // 9
// Définition des boutons représentant les lecteurs // Définition des boutons représentant les lecteurs
Drives_Debut_Y=(Nb_drives<=13)? 23 : 18; Drives_Debut_Y=(Nb_drives<=8)? 23 : 18;
for (Temp=0; Temp<Nb_drives; Temp++) for (Temp=0; Temp<Nb_drives; Temp++)
{ {
Nom_drive[0]=Drive[Temp].Lettre; Nom_drive[0]=Drive[Temp].Lettre;
Fenetre_Definir_bouton_normal(8+((Temp%13)*20),Drives_Debut_Y+((Temp/13)*12),19,11,Nom_drive,0,1, SDLK_LAST); // 9 et + Fenetre_Definir_bouton_normal(130+((Temp%8)*20),Drives_Debut_Y+((Temp/8)*12),19,11,Nom_drive,0,1, SDLK_LAST); // 10 et +
Fenetre_Afficher_sprite_drive(18+((Temp%13)*20),Drives_Debut_Y+2+((Temp/13)*12),Drive[Temp].Type); Fenetre_Afficher_sprite_drive(140+((Temp%8)*20),Drives_Debut_Y+2+((Temp/8)*12),Drive[Temp].Type);
} }
// On prend bien soin de passer dans le répertoire courant (le bon qui faut! Oui madame!) // On prend bien soin de passer dans le répertoire courant (le bon qui faut! Oui madame!)
@ -2529,7 +2534,7 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
break; break;
case 3 : // Delete case 3 : // Delete
if (Liste_Nb_elements && (*Principal_Nom_fichier!='.')) if (Liste_Nb_elements && (*Principal_Nom_fichier!='.') && Type_selectionne!=2)
{ {
Effacer_curseur(); Effacer_curseur();
// On affiche une demande de confirmation // On affiche une demande de confirmation
@ -2620,7 +2625,7 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
Principal_File_list_Decalage=Temp; Principal_File_list_Decalage=Temp;
// On récupére le nom du schmilblick à "accéder" // 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); 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 // On affiche le nouveau nom de fichier
Print_Nom_fichier_dans_selecteur(); Print_Nom_fichier_dans_selecteur();
// On affiche à nouveau la liste // On affiche à nouveau la liste
@ -2637,7 +2642,7 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
// certains cas, on risque de sauvegarder avec le nom du fichier // certains cas, on risque de sauvegarder avec le nom du fichier
// actuel au lieu de changer de répertoire. // actuel au lieu de changer de répertoire.
if (Principal_File_list_Position+Principal_File_list_Decalage<Liste_Nb_repertoires) 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); Determiner_element_de_la_liste(Principal_File_list_Position,Principal_File_list_Decalage,Principal_Nom_fichier,&Type_selectionne);
On_a_clicke_sur_OK=1; On_a_clicke_sur_OK=1;
Nouvelle_preview=1; Nouvelle_preview=1;
@ -2651,7 +2656,7 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
Effacer_curseur(); Effacer_curseur();
Principal_File_list_Position=Fenetre_Attribut2; Principal_File_list_Position=Fenetre_Attribut2;
// On récupére le nom du schmilblick à "accéder" // 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); 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 // On affiche le nouveau nom de fichier
Print_Nom_fichier_dans_selecteur(); Print_Nom_fichier_dans_selecteur();
// On affiche à nouveau la liste // On affiche à nouveau la liste
@ -2701,9 +2706,22 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
} }
Afficher_curseur(); Afficher_curseur();
break; 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;
break;
default : // Drives default : // Drives
// On change de lecteur: Lecteur = Drive[Bouton_clicke-9].Lettre-64 // On change de lecteur:
if (! ActiverLecteur(Bouton_clicke-9)) if (! ActiverLecteur(Bouton_clicke-10))
{ {
Effacer_curseur(); Effacer_curseur();
// On lit le répertoire courant de ce lecteur // On lit le répertoire courant de ce lecteur
@ -2807,18 +2825,18 @@ byte Bouton_Load_ou_Save(byte Load, byte Image)
{ {
// Si c'est un répertoire, on annule "On_a_clicke_sur_OK" et on passe // Si c'est un répertoire, on annule "On_a_clicke_sur_OK" et on passe
// dedans. // dedans.
if (Repertoire_existe(Principal_Nom_fichier)) if (Type_selectionne!=0)
{ {
Effacer_curseur(); Effacer_curseur();
On_a_clicke_sur_OK=0; On_a_clicke_sur_OK=0;
// On mémorise le répertoire dans lequel on était // On mémorise le répertoire dans lequel on était
if (strcmp(Principal_Nom_fichier,"..")) if (strcmp(Principal_Nom_fichier,".."))
strcpy(Repertoire_precedent,Nom_formate("..")); strcpy(Repertoire_precedent,Nom_formate("..", 1));
else else
{ {
strcpy(Repertoire_precedent, strcpy(Repertoire_precedent,
Nom_formate(Position_dernier_slash(Principal_Repertoire_courant)) Nom_formate(Position_dernier_slash(Principal_Repertoire_courant), 1)
); );
} }

69
files.c
View File

@ -1,5 +1,7 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program /* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2008 Peter Gordon
Copyright 2008 Yves Rizoud
Copyright 2007 Adrien Destugues Copyright 2007 Adrien Destugues
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud) Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)
@ -140,7 +142,7 @@ void Detruire_liste_du_fileselect(void)
// -- Formatage graphique des noms de fichier / répertoire ------------------ // -- Formatage graphique des noms de fichier / répertoire ------------------
char * Nom_formate(char * Nom) char * Nom_formate(char * Nom, int Type)
{ {
static char Resultat[13]; static char Resultat[13];
int Curseur; int Curseur;
@ -151,9 +153,9 @@ char * Nom_formate(char * Nom)
{ {
strcpy(Resultat,".. "); strcpy(Resultat,".. ");
} }
else if (Nom[0]=='.') else if (Nom[0]=='.' || Type==2)
{ {
// Fichiers ".quelquechose": Calé à gauche sur 12 caractères maximum. // Fichiers ".quelquechose" ou lecteurs: Calé à gauche sur 12 caractères maximum.
strcpy(Resultat," "); strcpy(Resultat," ");
for (Curseur=0;Nom[Curseur]!='\0' && Curseur < 12;Curseur++) for (Curseur=0;Nom[Curseur]!='\0' && Curseur < 12;Curseur++)
Resultat[Curseur]=Nom[Curseur]; Resultat[Curseur]=Nom[Curseur];
@ -190,10 +192,9 @@ char * Nom_formate(char * Nom)
// -- Rajouter a la liste des elements de la liste un element --------------- // -- Rajouter a la liste des elements de la liste un element ---------------
void Ajouter_element_a_la_liste(struct dirent* Enreg) void Ajouter_element_a_la_liste(char * Nom, int Type)
// Cette procedure ajoute a la liste chainee un fichier passé en argument. // Cette procedure ajoute a la liste chainee un fichier passé en argument.
{ {
struct stat Infos_enreg;
// Pointeur temporaire d'insertion // Pointeur temporaire d'insertion
struct Element_de_liste_de_fileselect * Element_temporaire; struct Element_de_liste_de_fileselect * Element_temporaire;
@ -201,10 +202,9 @@ void Ajouter_element_a_la_liste(struct dirent* Enreg)
Element_temporaire=(struct Element_de_liste_de_fileselect *)malloc(sizeof(struct Element_de_liste_de_fileselect)); Element_temporaire=(struct Element_de_liste_de_fileselect *)malloc(sizeof(struct Element_de_liste_de_fileselect));
// On met a jour le nouvel emplacement: // On met a jour le nouvel emplacement:
strcpy(Element_temporaire->NomAbrege,Nom_formate(Enreg->d_name)); strcpy(Element_temporaire->NomAbrege,Nom_formate(Nom, Type));
strcpy(Element_temporaire->NomComplet,Enreg->d_name); strcpy(Element_temporaire->NomComplet,Nom);
stat(Enreg->d_name,&Infos_enreg); Element_temporaire->Type = Type;
Element_temporaire->Type = S_ISDIR(Infos_enreg.st_mode);
Element_temporaire->Suivant =Liste_du_fileselect; Element_temporaire->Suivant =Liste_du_fileselect;
Element_temporaire->Precedent=NULL; Element_temporaire->Precedent=NULL;
@ -285,8 +285,8 @@ void Lire_liste_des_fichiers(byte Format_demande)
Config.Lire_les_repertoires_caches || Config.Lire_les_repertoires_caches ||
!isHidden(Enreg))) !isHidden(Enreg)))
{ {
// On rajoute le répertore à la liste // On rajoute le répertoire à la liste
Ajouter_element_a_la_liste(Enreg); Ajouter_element_a_la_liste(Enreg->d_name, 1);
Liste_Nb_repertoires++; Liste_Nb_repertoires++;
} }
else if (S_ISREG(Infos_enreg.st_mode) && //Il s'agit d'un fichier else if (S_ISREG(Infos_enreg.st_mode) && //Il s'agit d'un fichier
@ -296,7 +296,7 @@ void Lire_liste_des_fichiers(byte Format_demande)
if (VerifieExtension(Enreg->d_name, Filtre)) if (VerifieExtension(Enreg->d_name, Filtre))
{ {
// On rajoute le fichier à la liste // On rajoute le fichier à la liste
Ajouter_element_a_la_liste(Enreg); Ajouter_element_a_la_liste(Enreg->d_name, 0);
Liste_Nb_fichiers++; Liste_Nb_fichiers++;
} }
} }
@ -306,6 +306,42 @@ void Lire_liste_des_fichiers(byte Format_demande)
Liste_Nb_elements=Liste_Nb_repertoires+Liste_Nb_fichiers; Liste_Nb_elements=Liste_Nb_repertoires+Liste_Nb_fichiers;
} }
// -- Lecture d'une liste de lecteurs / volumes -----------------------------
void Lire_liste_des_lecteurs(void)
{
int Indice;
// Empty the current content of fileselector:
Detruire_liste_du_fileselect();
// Reset number of items
Liste_Nb_fichiers=0;
Liste_Nb_repertoires=0;
// AmigaOS4
#ifdef __amigaos4__
// Peter, this is where you act :)
// The strings you pass will be copied as needed.
// The 2 is for drive/volume; 0 and 1 would be files and directories.
// samples:
Ajouter_element_a_la_liste("df0", 2);
Liste_Nb_repertoires++;
Ajouter_element_a_la_liste("df1", 2);
Liste_Nb_repertoires++;
Ajouter_element_a_la_liste("hd0", 2);
Liste_Nb_repertoires++;
// Other platforms: simply read the "static" list of Drives.
#else
for (Indice=0; Indice<Nb_drives; Indice++)
{
// Add the drive's name ("c:\\", "/" etc.) to the list
Ajouter_element_a_la_liste(Drive[Indice].Chemin, 2);
Liste_Nb_repertoires++;
}
#endif
Liste_Nb_elements=Liste_Nb_repertoires+Liste_Nb_fichiers;
}
// -- Tri de la liste des fichiers et répertoires --------------------------- // -- Tri de la liste des fichiers et répertoires ---------------------------
@ -344,7 +380,7 @@ void Trier_la_liste_des_fichiers(void)
// Si l'élément courant est un fichier est que le suivant est // Si l'élément courant est un fichier est que le suivant est
// un répertoire -> Inversion // un répertoire -> Inversion
if ( (Element_courant->Type==0) && (Element_suivant->Type==1) ) if ( Element_courant->Type < Element_suivant->Type )
Inversion=1; Inversion=1;
// Si les deux éléments sont de même type et que le nom du suivant // Si les deux éléments sont de même type et que le nom du suivant
// est plus petit que celui du courant -> Inversion // est plus petit que celui du courant -> Inversion
@ -464,7 +500,7 @@ void Afficher_la_liste_des_fichiers(short Decalage_premier,short Decalage_select
// -- Récupérer le libellé d'un élément de la liste ------------------------- // -- 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 * Libelle) void Determiner_element_de_la_liste(short Decalage_premier,short Decalage_select,char * Libelle,int *Type)
// //
// Decalage_premier = Décalage entre le premier fichier visible dans le // Decalage_premier = Décalage entre le premier fichier visible dans le
// sélecteur et le premier fichier de la liste // sélecteur et le premier fichier de la liste
@ -474,6 +510,8 @@ void Determiner_element_de_la_liste(short Decalage_premier,short Decalage_select
// //
// Libelle = Chaine de réception du libellé de l'élément // Libelle = Chaine de réception du libellé de l'élément
// //
// Type = Récupération du type: 0 fichier, 1 repertoire, 2 lecteur.
// Passer NULL si pas interessé.
{ {
struct Element_de_liste_de_fileselect * Element_courant; struct Element_de_liste_de_fileselect * Element_courant;
@ -491,6 +529,9 @@ void Determiner_element_de_la_liste(short Decalage_premier,short Decalage_select
// On recopie la chaîne // On recopie la chaîne
strcpy(Libelle, Element_courant->NomComplet); strcpy(Libelle, Element_courant->NomComplet);
if (Type != NULL)
*Type=Element_courant->Type;
} // Fin du test d'existence de fichiers } // Fin du test d'existence de fichiers
} }

10
files.h
View File

@ -32,12 +32,14 @@ int Fichier_existe(char * Fichier);
void Detruire_liste_du_fileselect(void); void Detruire_liste_du_fileselect(void);
// -- Lecture d'une liste de fichiers --------------------------------------- // -- Lecture d'une liste de fichiers ---------------------------------------
void Lire_liste_des_fichiers(byte Format_demande); 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 --------------------------- // -- Tri de la liste des fichiers et répertoires ---------------------------
void Trier_la_liste_des_fichiers(void); void Trier_la_liste_des_fichiers(void);
// -- Affichage des éléments de la liste de fichier / répertoire ------------ // -- Affichage des éléments de la liste de fichier / répertoire ------------
void Afficher_la_liste_des_fichiers(short Decalage_premier,short Decalage_select); void Afficher_la_liste_des_fichiers(short Decalage_premier,short Decalage_select);
// -- Récupérer le libellé d'un élément de la liste ------------------------- // -- 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 * Libelle); void Determiner_element_de_la_liste(short Decalage_premier,short Decalage_select,char * Libelle,int *Type);
// -- Déplacements dans la liste des fichiers ------------------------------- // -- Déplacements dans la liste des fichiers -------------------------------
@ -48,6 +50,6 @@ void Select_Page_Up (short * Decalage_premier,short * Decalage_select);
void Select_End (short * Decalage_premier,short * Decalage_select); void Select_End (short * Decalage_premier,short * Decalage_select);
void Select_Home (short * Decalage_premier,short * Decalage_select); void Select_Home (short * Decalage_premier,short * Decalage_select);
short Calculer_decalage_click_dans_fileselector(void); short Calculer_decalage_click_dans_fileselector(void);
char * Nom_formate(char * Nom); char * Nom_formate(char * Nom, int Type);

View File

@ -1,5 +1,6 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program /* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2008 Peter Gordon
Copyright 2008 Yves Rizoud Copyright 2008 Yves Rizoud
Copyright 2008 Adrien Destugues Copyright 2008 Adrien Destugues
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud) Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)

51
init.c
View File

@ -1,5 +1,6 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program /* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2008 Peter Gordon
Copyright 2008 Yves Rizoud Copyright 2008 Yves Rizoud
Copyright 2008 Franck Charlet Copyright 2008 Franck Charlet
Copyright 2007 Adrien Destugues Copyright 2007 Adrien Destugues
@ -72,11 +73,13 @@ void Chercher_repertoire_du_programme(char * Chaine)
} }
// Ajouter un lecteur à la liste de lecteurs // Ajouter un lecteur à la liste de lecteurs
void Ajouter_lecteur(char Lettre, byte Type) void Ajouter_lecteur(char Lettre, byte Type, char *Chemin)
{ {
Drive[Nb_drives].Lettre=Lettre; Drive[Nb_drives].Lettre=Lettre;
Drive[Nb_drives].Type =Type; Drive[Nb_drives].Type =Type;
Drive[Nb_drives].Chemin=(char *)malloc(strlen(Chemin)+1);
strcpy(Drive[Nb_drives].Chemin, Chemin);
Nb_drives++; Nb_drives++;
} }
@ -85,16 +88,22 @@ void Ajouter_lecteur(char Lettre, byte Type)
void Rechercher_drives(void) void Rechercher_drives(void)
{ {
#if defined(__linux__) || defined(__amigaos4__) #if defined(__linux__)
//Sous linux, il n'y a pas de lecteurs, on va juste mettre //Sous linux, il n'y a pas de lecteurs, on va juste mettre
// un disque dur qui pointera vers la racine, // un disque dur qui pointera vers la racine,
// et un autre vers le home directory de l'utilisateur. // et un autre vers le home directory de l'utilisateur.
Ajouter_lecteur('/', LECTEUR_HDD); char * Home = getenv("HOME");
Ajouter_lecteur('~', LECTEUR_HDD); Ajouter_lecteur('/', LECTEUR_HDD, "/");
#else Ajouter_lecteur('~', LECTEUR_HDD, Home ? Home : "");
#elif defined(__amigaos4__)
// No icons by default.
// It's possible to add some here.
#elif defined (__WIN32__)
char NomLecteur[]="A:\\";
int DriveBits = GetLogicalDrives(); int DriveBits = GetLogicalDrives();
int IndiceLecteur; int IndiceLecteur;
int IndiceBit; int IndiceBit;
// Sous Windows, on a la totale, presque aussi bien que sous DOS: // Sous Windows, on a la totale, presque aussi bien que sous DOS:
IndiceLecteur = 0; IndiceLecteur = 0;
for (IndiceBit=0; IndiceBit<26 && IndiceLecteur<23; IndiceBit++) for (IndiceBit=0; IndiceBit<26 && IndiceLecteur<23; IndiceBit++)
@ -125,7 +134,8 @@ void Rechercher_drives(void)
TypeLecteur=LECTEUR_NETWORK; TypeLecteur=LECTEUR_NETWORK;
break; break;
} }
Ajouter_lecteur('A'+IndiceBit, TypeLecteur); NomLecteur[0]='A'+IndiceBit;
Ajouter_lecteur(NomLecteur[0], TypeLecteur,NomLecteur);
IndiceLecteur++; IndiceLecteur++;
} }
} }
@ -136,28 +146,7 @@ void Rechercher_drives(void)
// Renvoie 0 si ok, -1 si problème. // Renvoie 0 si ok, -1 si problème.
int ActiverLecteur(int NumeroLecteur) int ActiverLecteur(int NumeroLecteur)
{ {
// Cas particulier du lecteur ~ return chdir(Drive[NumeroLecteur].Chemin);
if (Drive[NumeroLecteur].Lettre == '~')
{
char * Home = getenv("HOME");
if (! Home)
return -1;
#if defined(__linux__)||defined(__amigaos4__)
return chdir(Home);
#else
return ! SetCurrentDirectory(Home);
#endif
}
#if defined(__linux__)||defined(__amigaos4__)
char NomLecteur[]=" ";
NomLecteur[0]=Drive[NumeroLecteur].Lettre;
return chdir(NomLecteur);
#else
char NomLecteur[]="A:\\";
NomLecteur[0]=Drive[NumeroLecteur].Lettre;
return ! SetCurrentDirectory(NomLecteur);
#endif
} }
void Charger_DAT(void) void Charger_DAT(void)

View File

@ -1,5 +1,6 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program /* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2008 Peter Gordon
Copyright 2007 Adrien Destugues Copyright 2007 Adrien Destugues
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud) Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)

2
main.c
View File

@ -1,5 +1,6 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program /* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2008 Peter Gordon
Copyright 2008 Franck Charlet Copyright 2008 Franck Charlet
Copyright 2007 Adrien Destugues Copyright 2007 Adrien Destugues
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud) Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)
@ -46,6 +47,7 @@
#include "saveini.h" #include "saveini.h"
#include "linux.h" #include "linux.h"
#include "io.h" #include "io.h"
#include "texte.h"
#ifndef __linux__ #ifndef __linux__
#ifndef __amigaos4__ #ifndef __amigaos4__

View File

@ -1,5 +1,6 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program /* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2008 Peter Gordon
Copyright 2008 Yves Rizoud Copyright 2008 Yves Rizoud
Copyright 2007 Adrien Destugues Copyright 2007 Adrien Destugues
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud) Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)

View File

@ -1,5 +1,6 @@
/* Grafx2 - The Ultimate 256-color bitmap paint program /* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2008 Peter Gordon
Copyright 2008 Yves Rizoud Copyright 2008 Yves Rizoud
Copyright 2007 Adrien Destugues Copyright 2007 Adrien Destugues
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud) Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)

View File

@ -106,8 +106,8 @@ struct Fenetre_Bouton_special
struct T_Drive struct T_Drive
{ {
char Lettre; char Lettre;
byte Type; // 0: Diskette 3"« / 1: Diskette 5"¬ / 2: HDD / 3: CD-ROM / 4: Logique byte Type; // 0: Diskette 3.5" / 1: Diskette 5.25" / 2: HDD / 3: CD-ROM / 4: Logique
char Chemin[4]; // Reservé pour "x:\", ou "/", ou "~" char *Chemin; // Reservé pour "x:\", ou "/", "DF0:", etc.
}; };
@ -116,7 +116,7 @@ struct Element_de_liste_de_fileselect
{ {
char NomAbrege[13]; // Le nom tel qu'affiché dans le fileselector char NomAbrege[13]; // Le nom tel qu'affiché dans le fileselector
char NomComplet[256]; // Le nom du fichier ou du répertoire char NomComplet[256]; // Le nom du fichier ou du répertoire
byte Type; // Type d'élément : 0 = Fichier, 1 = Répertoire byte Type; // Type d'élément : 0 = Fichier, 1 = Répertoire, 2 = Lecteur
// données de chaînage de la liste // données de chaînage de la liste
struct Element_de_liste_de_fileselect * Suivant; struct Element_de_liste_de_fileselect * Suivant;