:: PlayerAdvance.org ::  

Précédent   :: PlayerAdvance.org :: > :: Développement Amateur :: > Tutoriels

Publicité

Réponse
 
Outils de la discussion Modes d'affichage
Vieux 30/12/2011, 23h44   #1
Filou HB
Membre
 
Date d'inscription: 28/12/2011
Localisation: France
Messages: 23
Par défaut Faire le listing d'un dossier avec PAlib et la FAT

Bonjour à tous, aujoud'hui nous allons apprendre à lister les fichiers d'un dossier qui se trouve sur votre DS avec PAlib
Avec Filou HB


Tout d'abord, il faut savoir que, comme nous allons utiliser un système de fichiers qui s'appelle la FAT, nous ne pourrons pas tester notre code sur émulateur, puisqu'ils ne supportent pas la FAT . Vous devrez donc impérativement tester votre code sur console. En fait, vous pouvez toujours tester sur émulateur, mais il vous retournera de toute façon une erreur .


Bien bien, puisque nous sommes tous prêts, nous pouvons donc commencer à coder : ne vous inquiétez pas, je vais écrire tout ça par petits bouts de code et expliciter chacunes des parties


Commençons par les directives de préprocesseur :

Code:
#include <PA9.h>       // on inclut la PAlib
#include <fat.h>        
#include <sys/dir.h>  //et on inclut la FAT
Les deux lignes en dessous de l'inclusion de PALib servent à inclure le système de FAT dont nous aurons besoin pour faire notre listing de dossier

Code:
int main()
{
PA_Init();    // On initialise PAlib
PA_LoadDefaultText(0, 0);  // On initialise le texte sur l'écran du bas
PA_LoadDefaultText(1, 0);  // On initialise le texte sur l'écran du haut
Ici, on entre dans la fonction main et on entre les premières instructions indispensables : on initialise la PALib et le texte sur les deux écrans.

Code:
fatInitDefault(); // On initialise la FAT

	int ligne =0, ecran = 1;
Ici, on initialise la FAT à l'aide de fatinitDefault() puis on créé eux variables :
- ligne : pour la ligne à afficher (de 0 à 24)
- ecran : l'écran où afficher le texte (0 ou 1)

Code:
	struct stat st;
	char nom[256];
	DIR_ITER* dir = diropen("test");
Ici, on créé une structure qui contient :
- le nom du fichier lu (256 caractères devraient suffir pour un nom de fichier )
- et on définit le répertoire à ouvrir (ici ce sera donc le répertoire "test" qui devra être placé dans le même dossier que l'application pour que ça fonctionne).

Code:
if (dir == NULL) 
	{
	  PA_OutputText(1,2,2,"Le dossier test est introuvable.");
          PA_OutputText(1,2,4,"Vérifiez que le dossier test soit placé dans le même dossier que l'application.");
	}
On teste si le dossier existe ou pas : si il est "NULL", donc s'il est introuvable, on affiche un message d'erreur. Et donc, si vous avez bien compris, il va évidemment y avoir un "else" qui executera les instructions si le dossier n'est pas introuvable, donc s'il existe .
Et ce "else", nous le faisons tout de suite :

Code:
else 
	while (dirnext(dir, nom, &st) == 0) 
	{
	   if (ligne == 24) // Si on dépasse deux fois 24 lignes (donc 48) on écrit deux fois sur l'écran :/
		{ 
		   ecran=0; // S'il n'y a plus de place en haut, on va en bas
		   ligne = 0; // on remet les lignes à 0
		}   
		// st.st_mode & S_IFDIR indique un dossier
		PA_OutputText(ecran , 0 , ligne, "%02d%s: %s\n", ligne, (st.st_mode & S_IFDIR ? "D" : "-"), nom);
		ligne++;  // ligne suivante
	}
C'est là que se situe le code principal du fichier, il faut donc bien le comprendre. Que ce passe-il ici ?

Au début, on met une boucle : tant que l'on a pas fini de lire le dossier, on exécute ce qu'il y a dans cette boucle.

Dans la boucle, on regarde premièrement le numéro de ligne, car s'il est supérieur à 24, c'est que l'on a déjà remplit un écran, on doit donc passer à l'autre. On change donc d'écran en mettant la variable "ecran" à 0 (pour l'écran du bas). Et on remet la variable "ligne" à 0 pour écrire au début de l'écran .

Ensuite, on a un bout de code qui affiche le nom du fichier lu. Etudions juste la fonction PA_OutputText(); :

Dedans il est dit : on affiche le numéro de la ligne, ensuite on affiche si le fichier lu est un fichier ou un dossier, puis on affiche le nom du fichier.

Tout cela sur l'écran définit avec la variable "ecran" (qui change si on a plus de 24 fichiers), en abscisse 0 et en ordonnée "ligne".

Donc forcement, pour ne pas réécrire tout le temps sur la même ligne, il faut que l'ordonnée du fichier à afficher change. On l'incrémente de 1 à chaque fois qu'un nouveau fichier est lu et ainsi, on aura un texte toutes les lignes .


Ouf ! Ce petit bout de code voulait mine de rien dire grand chose


Il ne reste plus qu'à mettre la fin du programme :

Code:
	while (1)
	{ 
		PA_WaitForVBL(); // on rafraîchit 
	}
	
	return 0;
} fin de main()
Ici, c'est la boucle infinie du programme... on le laisse donc tourner.





Voilà, c'est ainsi que se termine le code, vous n'avez plus qu'à coller toutes les parties ensembles pour obtenir un beau petit programme . Si vous êtes pressé (ou flemmard ça marche aussi ), je vous ai mis le fichier source en bas de la page en pièce jointe .

Ce n'était pas si long vous voyez . Ne le testez pas sur émulateur en me disant que ça ne marche pas hein ?

Bien sur, vous pouvez améliorer ce code :

- Vous pouvez créer un curseur pour vous déplacer dans le dossier et ainsi pouvoir ouvrir un fichier.

- Vous pouvez aussi changer de couleur le texte quand on se déplace pour ainsi savoir sur quel fichier on se trouve...

- Vous pouvez également faire une fonction pour explorer également les dossiers affichés.

- etc... , il y a pleins de façons de l'améliorer ce code




Et bien voilà, j'éspere que ce petit tuto vous a plu et vous a été utile
Fichiers attachés
Type de fichier : zip [SOURCE] liste_dossier.zip (752 octets, 75 affichages)
__________________
Il ne faut pas boire au volant, buvez à la bouteille !

Dernière modification par Filou HB ; 02/01/2012 à 14h47. Motif: Ajout d'une pièce jointe pour ceux qui ont la flemme de coller tous les morceaux de code :D
Filou HB est déconnecté   Réponse avec citation

Publicité

Réponse

Liens sociaux

Publicité



Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s))
 
Outils de la discussion
Modes d'affichage

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Navigation rapide

Discussions similaires
Discussion Auteur Forum Réponses Dernier message
[Dingoo] Linux sur sa Dingoo, jour 2 : les frontend Dreamkey Articles 17 02/05/2010 20h54
NDS Probleme avec installation de la Palib SpixShadow Aide au développement 8 01/09/2008 00h18
Spécial newbies : liste de homebrews sympas BatteMan [NDS] Divers 21 27/07/2007 11h39
NDS Récupérer la sauvegarde d'un jeu d'origine ... avec M3 sd+Passcard 3 gla10l Linkers M3/R4 5 30/07/2006 04h02


Fuseau horaire GMT +2. Il est actuellement 11h15.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd. Tous droits réservés.
Version française #16 par l'association vBulletin francophone
Design par Ass-Itch, DJP et Dr.Vince