![]() |
|
![]() |
![]() |
![]() | Donate | ![]() |
![]() |
![]() |
Ouvrir sur le forum | Recherche | Messages du jour | Marquer les forums comme lus |
Publicité |
![]() |
|
Outils de la discussion | Modes d'affichage |
![]() |
#1 |
Membre
Date d'inscription: 28/12/2011
Localisation: France
Messages: 23
|
![]() 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 ![]() ![]() Bien bien, puisque nous sommes tous prêts, nous pouvons donc commencer à coder ![]() ![]() 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 ![]() 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 Code:
fatInitDefault(); // On initialise la FAT int ligne =0, ecran = 1; - 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"); - 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."); } ![]() 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 } 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() 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 ![]() ![]() ![]() Ce n'était pas si long vous voyez ![]() ![]() 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 ![]()
__________________
Il ne faut pas boire au volant, buvez à la bouteille ! ![]() Dernière modification par Filou HB ; 02/01/2012 à 15h47. Motif: Ajout d'une pièce jointe pour ceux qui ont la flemme de coller tous les morceaux de code :D |
![]() |
![]() |
Publicité |
![]() |
Liens sociaux |
Publicité |
Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s)) | |
Outils de la discussion | |
Modes d'affichage | |
|
|
![]() |
||||
Discussion | Auteur | Forum | Réponses | Dernier message |
[Dingoo] Linux sur sa Dingoo, jour 2 : les frontend | Dreamkey | Articles | 17 | 02/05/2010 20h54 |
![]() |
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 |
![]() |
gla10l | Linkers M3/R4 | 5 | 30/07/2006 04h02 |