fat.h

Go to the documentation of this file.
00001 /* floppy.h */
00002 
00003 #ifndef __SYSTEM
00004 #include "routix/system.h"
00005 #endif
00006 
00007 #ifndef __FAT12
00008 #define __FAT12
00009 
00010 //Macros para simplificar el uso de la funcion leer_escribir
00011 #define leer_sector(sec,buf) leer_escribir(READ_SECTOR,sec,buf)
00012 #define escribir_sector(sec,buf) leer_escribir(WRITE_SECTOR,sec,buf)
00013 
00014 #define BOOTSECTOR      0
00015 
00016 // Estructura utilizada para caracterizar una particion FAT
00017 typedef struct dev_fat_t
00018 {
00019     word fat_size;              //Cantidad de sectores que ocupa cada FAT
00020     word fat_start;             //Sector de comienzo de la FAT
00021     byte cantidad_de_fats;      //Cantidad de FATs por disco (geenralmente 2)
00022     word root_dir_start;        //Sector de comienzo del Directorio raiz
00023     word root_dir_size;         //Cantidad de sectores asignados al root
00024     dword sectores_ocultos;     
00025     word sectores_totales;      //cantidad total de sectores del disco
00026     byte sectores_por_cluster;
00027     word sector_size;
00028     byte fat_levantada;
00029     byte boot_leido;            //Indica si el BPB ha sido leido y los parametros han sido cargados en las variables
00030 }dev_fat_t;
00031 
00032 
00033 // Estructura que contiene los campos principales de un BootSector tanto en FAT12 como FAT16 (son los primeros 62 bytes)
00034 typedef struct boot_sector_t
00035 {
00036     unsigned BS_jmpBott: 24;
00037     qword BS_OEMName;
00038     unsigned BPB_BytsPerSec: 16;
00039     unsigned BPB_SecPerClus: 8; 
00040     unsigned BPB_RsvdSecCnt: 16;
00041     unsigned BPB_NumFATs: 8;
00042     unsigned BPB_RootEntCnt: 16;
00043     unsigned BPB_TotSec16: 16;
00044     unsigned BPB_Media: 8;
00045     unsigned BPB_FATSz16: 16;
00046     unsigned BPB_SecPerTrk: 16;
00047     unsigned BPB_NumHeads: 16;
00048     unsigned BPB_HiddSec: 32;
00049     unsigned BPB_TotSec32: 32;
00050     unsigned BS_DrvNum: 8;
00051     unsigned BS_Reserved1: 8;
00052     unsigned BS_BootSig: 8;
00053     unsigned BS_VolID: 32;
00054     char BS_VolLab[11];
00055     char BS_FilSysType[8];
00056 }boot_sector_t;
00057 
00058 
00059 //Estos son los datos que identifican a cada archivo dentro de un directorio
00060 typedef struct fat12_entry_t
00061 {
00062     byte nombre[8];
00063     byte extension[3];
00064     byte atributo;
00065     byte reservado[10];
00066     word hora;
00067     word fecha;
00068     word sector;        //Cluster de comienzo del archivo (relativo al final del ultimo sector de ROOT
00069     dword size;         //Tamaņo en bytes
00070 }fat12_entry_t;
00071 
00072 //Esta estructura es reciente. La idea es que con *fat12_data recoja la info del directorio, y que mediante la funcion
00073 //fat_adapta_name la escriba en formato string dentro de nombre.
00074 #define MAX_PATH_LEN    29
00075 
00076 typedef struct fat12_entry_ext_t
00077 {
00078     fat12_entry_t fat12_data;
00079     char nombre[MAX_PATH_LEN];
00080 }fat12_entry_ext_t;
00081 
00082 struct floppy_cache
00083 {
00084     dword sector;
00085     byte bloque[512];
00086     struct floppy_cache  *next;
00087 
00088 };
00089 
00090 //Valores que puede tomar el 1er byte del campo nombre ( estructura dir_entry_t)
00091 //Cualquier otro valor, significa el valor del primer caracter del nombre de archivo
00092 #define FAT_EMPTY       0       // Campo aun no usado (luego del formateo)
00093 #define FAT_SUBDIR      0x2E    // El archivo es un directorio
00094 #define FAT_DELETED     0xE5    // El archivo fue borrado
00095 
00096 #define SECTOR_SIZE     512
00097 
00098 
00099 // structura utlizada para generar una lista enlazada que apunta a bloques en memoria que contienen la FAT
00100 // del floppy que se encuentra en la diskettera.
00101 typedef struct fat_t
00102 {
00103     byte *bloque;
00104     struct fat_t *next;
00105 }fat_t;
00106 
00107 
00108 //Tipo usado para mantener una lista enlazada con los sectores de un archivo contenidos en memoria
00109 /*
00110 typedef struct file_loaded_t
00111 {
00112     byte *bloque;       //Apunta a un sector
00113     struct file_loaded_t *next;
00114 
00115 } file_loaded_t;
00116 */
00117 
00118 int init_floppy_fs(void);
00119 
00120 // Adapta un nombre de la forma fat (KERNEL  BIN) a formato string: KERNEL.BIN\0
00121 // asi es mas facil su comparacion, impresion y usos varios
00122 void fat_adapta_name (byte *nombre_fat, byte *adaptado);
00123 
00124 // Recibe un nombre de archivo, y lo busca en el disco. En caso negativo retorna NULL
00125 fat12_entry_t *fat_file_find (char *nombre, fat12_entry_t *datos_archivo);
00126 
00127 // Esta funcion recibe como parametro un numero de sector y mediante la FAT obtiene cual es el siguiente
00128 int fat_next_sector ( dword sector_inicial );
00129 
00130 void *floppy_cache (dword sector);
00131 
00132 // Abrir un archivo desde un dispositivo con formato FAT12
00133 int open_FAT12 (char *nombre, int fd);
00134 
00135 
00136 #define DIR_FAT_VIRTUAL     0xF8000000
00137 
00138 
00139 #endif
00140 

Generated on Sun May 30 18:38:34 2004 for Routix OS by doxygen 1.3.6