COBE 0.1 ALPHA

D:/COBE-Packet/cobe/system/fat.h-Dateireferenz

Diese Datei enthält die Prototypen für das FAT-Dateisystem, sowie Strukturen dafür. Mehr ...

#include <stdint.h>

gehe zum Quellcode dieser Datei

Datenstrukturen

struct  boot_fat_table
 Diese Struktur bezeichnet die Informationen über die FAT aus dem Bootsektor. Mehr ...
struct  directory
 Diese Struktur stellt Informationen zu einem Verzeichnis bereit. Es handelt sich um eine Listen-Struktur. Mehr ...

Makrodefinitionen

#define NULL   (void*) 0

Typdefinitionen

typedef struct boot_fat_table boot_fat_table_t
 Diese Struktur bezeichnet die Informationen über die FAT aus dem Bootsektor.
typedef struct directory directory_t
 Diese Struktur stellt Informationen zu einem Verzeichnis bereit. Es handelt sich um eine Listen-Struktur.

Funktionen

void init_fat ()
 Diese Funktion initialisiert das FAT-Dateisystem.
void fat_show_directory ()
 Diese Funktion sorgt dafür, dass der Ordner angegebene Ordner angezeigt wird.
void fat_change_directory (char *)
 Diese Funktion ist dafür zuständig, dass in den angegebenen Ordner gewechselt wird.
void fat_mkdir (char *)
 Diese Funktion erstellt den angegebenen Ordner.
void fat_del (char *)
 Diese Funktion löscht einen Ordner.
uint32_t fat_get_cluster ()
 Diese Funktion fordert einen feien Cluster an.
void * fat_long_name (char *)
 Diese Funktion erstellt Verzeichniseinträge für VFAT-Namen.
void fat_copy_act_sector (void *, uint16_t, bool)
 Diese Funktion kümmert sich darum, dass Daten-Übertragungen einfacher ausgeführt werden können.
void fat_get_boot (boot_fat_table_t *)
 Diese Funktion liest den Bootsektor nach Informationen für die FAT aus.
void fat_change_cluster (uint16_t, uint16_t)
 Diese Funktion nimmt eine Änderung in der FAT vor.

Ausführliche Beschreibung

Diese Datei enthält die Prototypen für das FAT-Dateisystem, sowie Strukturen dafür.

Definiert in Datei fat.h.


Makro-Dokumentation

#define NULL   (void*) 0

Definiert in Zeile 7 der Datei fat.h.


Dokumentation der benutzerdefinierten Typen

Diese Struktur bezeichnet die Informationen über die FAT aus dem Bootsektor.

typedef struct directory directory_t

Diese Struktur stellt Informationen zu einem Verzeichnis bereit. Es handelt sich um eine Listen-Struktur.


Dokumentation der Funktionen

void fat_change_cluster ( uint16_t  para_cluster,
uint16_t  val 
)

Diese Funktion nimmt eine Änderung in der FAT vor.

Soll ein bestimmter Cluster in der FAT geändert werden, so kümmert sich diese Funktion darum. Es muss als Parameter lediglich, die Nummer des zu ändernden Cluster angegeben werden und dessen Wunschwert. Diese Funktion geht nun die Cluster in der FAT solange durch, bis diese bei der gewünschten Cluster-Nummer ist und ersetzt dessen Wert durch den gewünschten Wert.

Parameter:
para_clusterDieser Parameter übernimmt die Nummer des zu ändernden Clusters#
valDieser Parameter enthält den Wert, welcher der Cluster danach haben soll

Definiert in Zeile 309 der Datei fat.c.

void fat_change_directory ( char *  new_dir)

Diese Funktion ist dafür zuständig, dass in den angegebenen Ordner gewechselt wird.

Die Durchführung ist einfach: Die von fat_show_directory erstellte Ordner-Liste wird solange durchgeprüft, bis der angeforderte Name dort gefunden wurde. Dann wird der Pfad um den Namen und einem Slash erweitert und die aktuelle Gesamt-Sektor-Nummer auf den zu wechselnden Ordner gesetzt.

Parameter:
new_dirDieser Parameter enthält den Namen des Ordners, in dem gewechselt werden soll

Definiert in Zeile 161 der Datei fat.c.

void fat_copy_act_sector ( void *  buffer,
uint16_t  act_sector,
bool  write 
)

Diese Funktion kümmert sich darum, dass Daten-Übertragungen einfacher ausgeführt werden können.

Dabei muss lediglich die Adresse auf den Datenpuffer, der Sektor und die Art der Übertragung übergeben werden. Um die Berechnung des Head, Cylinder und des eigentlichen Sektors kümmert sich diese Funktion, ebenfalls nimmt diese gleich die Daten-Übertragung vor.

Parameter:
bufferDieser Parameter enthält die Adresse auf den Datenpuffer
act_sectorDieser Parameter enthält den Wert des zu übertragenden Sektors (Gesamtsektor)
writeDieser Parameter bestimmt, ob es sich um ein Lese- oder um ein Schreib-Vorgang handelt (true für schreiben)

Definiert in Zeile 357 der Datei fat.c.

void fat_del ( char *  name)

Diese Funktion löscht einen Ordner.

Dabei wird zuerst das aktuelle Verzeichnis nach einem Verzeichnis-Eintrag mit dem angegebenen Namen durchsucht. Wenn ein solches gefunden wurde, wird das erste Zeichen des Eintrages auf 0xE5 gesetzt, was bedeutet, dass dieser Eintrag gelöscht ist und überschrieben werden darf. Danach wird in der FAT der/die reservierte/n Sektor/en wieder auf 0x000 gesetzt und somit wieder zu freien Verwendung freigegben.

Parameter:
nameDieser Parameter enthält den Namen des zu löschenden Verzeichnisses

Definiert in Zeile 267 der Datei fat.c.

void fat_get_boot ( boot_fat_table_t fat_table)

Diese Funktion liest den Bootsektor nach Informationen für die FAT aus.

Der Bootsektor enthält einige relevante Informationen für den Aufbau des Dateisystems. Diese Funktion kümmert sich darum, dass diese Informationen aus dem Bootsektor ausgelesen werden und in die dafür vorgesehene table eingetragen werden. Die Prozedur ist dabei sehr einfach, es wird der Bootsektor ausgelesen und danach nach und nach der Wert in umgekehrter Endian-Richtung in die table geschrieben.

Parameter:
fat_tableDieser Parameter ist ein Zeiger auf die globale Tabelle table, in dem die Bootinformationen für die FAT gespeichert werden

Definiert in Zeile 433 der Datei fat.c.

uint32_t fat_get_cluster ( )

Diese Funktion fordert einen feien Cluster an.

Wird beim anlegen eines Ordners oder einer Datei ein freier Cluster benötigt, so fordert durchsucht diese Funktion die FAT nach einem Cluster, welcher den Wert 0x000 (frei) hat, ändert den Wert auf belegt und liefert die Nummer des Clusters zurück. Wird kein freier Cluster mehr gefunden, wird 0xFFFFFFFF zurückgeliefert, was bedeutet, dass kein Speicherplatz mehr vorhanden ist.

Rückgabe:
Der Rückgabewert entspricht der Nummer ersten gefundenen Clusters, welcher frei war

Definiert in Zeile 387 der Datei fat.c.

void* fat_long_name ( char *  name)

Diese Funktion erstellt Verzeichniseinträge für VFAT-Namen.

Ist ein Dateiname beim anlegen einer Datei oder eines Ordners länger als acht Zeichen, so müssen VFAT-Namen verwendet werden. Diese Funktion erstellt diese VFAT-Einträge für längere Dateinamen an der richtigen Stelle und gibt die Adresse auf den ersten Eintrag zurück.

Parameter:
nameDieser Parameter enthält den langen Dateinamen
Rückgabe:
Der Rückgabewert ist die Adresse auf den ersten VFAT-Eintrag des langen Dateinamens

Definiert in Zeile 374 der Datei fat.c.

void fat_mkdir ( char *  name)

Diese Funktion erstellt den angegebenen Ordner.

Das Verfahren legt sich folgendermaßen dar: Zunächst werden Variablen für ein auszulesenden Sektor, einen leeren Sektor-Eintrag und einem Verzeichnis-Eintrag angelegt. Hauptsächlich gearbeitet wird dabei mit dem Verzeichnis-Eintrag, welcher den Namen entry trägt. Zunächst wird dieser komplett mit Nullen belegt, um möglichen Datenmüll zu vermeiden. Nun wird der Name kopiert, wobei überprüft wird, ob der Verzeichnis-Name länger oder kürzer als acht Zeichen ist. Gleichzeitig werden auch die ungültigen Zeichen durch Leerzeichen ersetzt. Sollte der Verzeichnis-Name länger als acht Zeichen sein, so wird eine Funktion gestartet, welche sich um das Anlegen der VFAT-Einträge kümmert. Danach wird im Verzeichnis-Eintrag mit 0x10 festgelegt, dass es sich um einen Ordner handelt. Nachfolgend wird ein freier Cluster in der FAT gesucht und in den Eintrag geschrieben. Nun wird der Eintrag in das aktuelle Verzeichnis geschrieben und die FATs werden ebenfalls aktualisiert. Als letzten Schritt mit nur noch der Inhalt des neuen Verzeichnisses geleert werden und zwei Einträge für den aktuellen Ordner und den übergeordneten Ordner erstellt werden.

Parameter:
nameDieser Parameter enthält den Namen des zu erstellenden Verzeichnisses

Definiert in Zeile 190 der Datei fat.c.

void fat_show_directory ( )

Diese Funktion sorgt dafür, dass der Ordner angegebene Ordner angezeigt wird.

Zunächst wird der aktuelle Ordner nach Verzeichnis-Einträgen für Ordner durchsucht. Dabei wird eine Liste mit dem Namen des Ordners und dessen Cluster erstellt. Diese Liste ist global verfügbar, Dateien werden nicht in die Liste mit aufgenommen. Wärend des Suchvorgangs kann die Funktion zwischen langen VFAT Dateinamen und normalen 8-Zeichen-Dateinamen unterscheiden. Während des Erstellens der Liste, wird egal ob Ordner oder Datei, der Eintrag auf dem Bildschirm ausgegeben, so dass es auch, wenn es ein Fehler während der Verarbeitung gibt, zumindest ein Teil angezeigt werden kann. Diese Funktion hat weder Parameter noch Rückgabewerte. Das aktuelle Verzeichnis wird durch die aktuelle Gesamt-Sektor-Nummer angegeben.

Diese Variable enthält den Dateinamen, auch 8-Zeichen Namen werden in diese Variable kopiert

Definiert in Zeile 66 der Datei fat.c.

void init_fat ( )

Diese Funktion initialisiert das FAT-Dateisystem.

Dabei wird zunächst table mit den Bootinformationen für FAT gefüllt. Danach wird der aktuelle Sektor und der erste Datensektor berechnet. Nun folgen verschiedene Initialisierungen, wie ein Slash als Startzustand für den Pfad oder einen 4KByte Bereich für die Ordner-Liste zu allozieren. Ebenfalls werden weitere kleinere Initialisierungen von Variablen vorgenommen. Aufgerufen wird diese Funktion in cobekrnl.c

Definiert in Zeile 43 der Datei fat.c.

 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Makrodefinitionen