FAT en PALIB (Que cada uno aporte lo que sepa)

Estoy creando pequeños programas con palib y me gustaria hacer un reproductor de imagenes, videos, musica etc.
Se que se puede hacer con fat en palib pero he buscado tutoriales y demas pero no encuentro nada.
Si me podriais ayudar enviandome algunas funciones como hacer una lista de archivos cargar archivos en la ram para reproducirlos etc os lo agradeceria.
Por favor si conocen algunas funciones o tienen algún manual escribanlo en el foro.
Gracias por adelantado.

Posdata:
Si alguien me puede explicar este codigo tambien se lo agradeceria:
/* FAT functions....
*/

// Includes
#include <PA9.h>       //Esto lo entiendo
#include <fat.h>      //Esto lo entiendo
#include <sys/dir.h>      //Esto lo entiendo

// Function: main()
int main(int argc, char ** argv)
{
   PA_Init();          //Esto lo entiendo
   PA_InitVBL();       //Esto lo entiendo
   
   PA_InitText(0, 0);        //Esto lo entiendo   
   
   PA_InitText(1, 0);        //Esto lo entiendo
   
   PA_WaitForVBL();  PA_WaitForVBL();  PA_WaitForVBL();  // Esto ni idea de porque 3 veces
   
   fatInitDefault();       //Esto lo entiendo

   int linenumber =0;       //Esto lo entiendo
   int screen = 1;      //Esto lo entiendo

   struct stat st; //Que significa esto, no tengo ni idea
   char filename[256];       //Esto lo entiendo
   DIR_ITER* dir = diropen("/"); //ESTO CREO QUE ES LO MAS IMPORTANTE PERO NO SE QUE ES NI DONDE SE GUARDA LA LISTA DE ARCHIVOS ETC
   if (dir == NULL)
   {
      PA_OutputText(1,2,2,"Unable to open the directory.");      //Esto lo entiendo
   }
   else
   while (dirnext(dir, filename, &st) == 0) //Ni idea
   {
      if (linenumber ==24) //lo entiendo
      {
         screen=0; //SON VARIABLES CHUPADO
         linenumber = 0; //IGUAL
      }   
      // st.st_mode & S_IFDIR indicates a directory
      PA_OutputText(screen,0,linenumber, "%02d%s: %s\n", linenumber, (st.st_mode & S_IFDIR ? "D" : "-"), filename);//NI IDEA AYUDENME 
      linenumber++;//next line
   }
   //nothing to do but wait....
   while (1)
   {
         
      PA_WaitForVBL();
   }
   
   return 0;
} // End of main()
struct stat st;

Ahi declaras una estructura en donde se almacenara informacíon adicional sobre el nombre que te esta entregando la rutina de lectura. Por ejemplo, si el nombre entregado en la variable "filename" es un archivo o un directorio esto se sabe examinando los valores de la estructura "st"

DIR_ITER* dir = diropen("/");

La funcíon "diropen" comienza el proceso de leer directorios a partir de "/" (el raiz) y entrega un puntero de tipo DIR_ITER que guarda internamente adonde se quedo en el proceso de lectura de los directorios y archivos.

dirnext(dir, filename, &st)

A esta funcion le mandas primero el puntero dir para que comienze a leer desde donde se quedo la vez anterior (si es la primera vez que se ejecuta esta funcion, el puntero interno de ella esta apuntando al primero de los archivos en tu flashcart) y lee el nombre del archivo o directorio y te lo devuelve atravez de la variable "filename" y en la variable "st" cambia algunos valores para que tu puedas ver si el nombre devuelto es un archivo o un directorio (realmente se devuelve mas información que solo eso, pero en el ejemplo que nos ocupa solo se usa para eso). Si la funcion retorna un 0 es que se leyo alguna informacion (sea un archivo o un directorio) y si devuelve otro valor es que llego al final de los directorios y sale del bucle de lectura.
Es de notar que esta funcíon deja un puntero interno listo en la siguiente posicíon a leer dentro de los directorios (esta información creo que la guarda dentro de la estructura dir de tipo DIR_ITER).


PA_OutputText

Aca simplemente imprimes el nombre del archivo o directorio linea x linea atravez de las dos pantallas.
La expresíon (st.st_mode & S_IFDIR ? "D" : "-") es logica a nivel de bits y su significado es mas o menos este :

SI La variable "st_mode" de la estructura "st" tiene activada la opcion de S_IFDIR entregar un caracter "D, si no entregar un caracter "-"

De este modo en el listado aparece una "D" cuando es directorio o un "-" cuando es un simple archivo.
Si no entiendes bien esto tendrias que ver en un manual en C la logica a nivel de bits (se suele usar mucho en C y C++).

Saludos
Sebas
Muchisimas gracias Sebas, ya he entendido esto mejor, quizas haya ido demasiado rapido y deba leerme tutoriales de c.
Gracias y si alguien sabe mas acciones FAT que las añada, las necesito.
2 respuestas