| Zeile 5: | Zeile 5: | ||
= Funktionen = | = Funktionen = | ||
| + | == LostIO == | ||
| + | ==VFS-Baum== | ||
= Beispiel = | = Beispiel = | ||
Hier folgen ausschnitte aus dem Quellcode des Diskettentreibers(Die Funktionen fuer den Laufwerkszugriff werden hier nicht gezeigt). | Hier folgen ausschnitte aus dem Quellcode des Diskettentreibers(Die Funktionen fuer den Laufwerkszugriff werden hier nicht gezeigt). | ||
| − | < | + | <pre> |
int main(int argc, char* argv[]) | int main(int argc, char* argv[]) | ||
{ | { | ||
| Zeile 16: | Zeile 18: | ||
init_service_register("floppy"); | init_service_register("floppy"); | ||
| − | // | + | //LostIO initialisieren(Ist nur bei den Treibern notwendig. Bei |
| − | // | + | //Anwendungen, die nur auf andere Treiber zugreifen wollen sollte |
| − | + | //das weggelassen werden. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | // | ||
lostio_init(); | lostio_init(); | ||
| + | //Hier werden 2 vordefinierte Typen benutzbar gemacht: | ||
| + | //Verzieichnise und Dateien, die den Inhalt direkt im RAM haben. | ||
| + | //Dann muessen keine eigenen Handler registriert werden. | ||
lostio_type_ramfile_use(); | lostio_type_ramfile_use(); | ||
lostio_type_directory_use(); | lostio_type_directory_use(); | ||
| + | |||
| + | //Speicher fuer ein neues typehandle allokieren | ||
typehandle_t* typehandle = malloc(sizeof(typehandle_t)); | typehandle_t* typehandle = malloc(sizeof(typehandle_t)); | ||
| + | //Die Typen-ID | ||
typehandle->id = 255; | typehandle->id = 255; | ||
| + | |||
| + | //Die Pointer auf unsere Handles setzen. NULL wenn für | ||
| + | //diejenigen Pointer wofür kein Handler zur Verfügung steht. | ||
typehandle->pre_open = NULL; | typehandle->pre_open = NULL; | ||
typehandle->post_open = NULL; | typehandle->post_open = NULL; | ||
| Zeile 38: | Zeile 44: | ||
typehandle->seek = &floppy_seek_handler; | typehandle->seek = &floppy_seek_handler; | ||
typehandle->close = NULL; | typehandle->close = NULL; | ||
| + | |||
| + | //Das Typehandle bei LostIO registrieren, damit es verfügbar ist. | ||
lostio_register_typehandle(typehandle); | lostio_register_typehandle(typehandle); | ||
| − | + | ||
| + | //Der Inhalt des Version-Ramfile | ||
const char* version = "Version 0.0.1"; | const char* version = "Version 0.0.1"; | ||
| + | //Nun wird das Ramfile erstellt | ||
vfstree_create_node("/version", LOSTIO_TYPES_RAMFILE, strlen(version) + 1, (void*)version); | vfstree_create_node("/version", LOSTIO_TYPES_RAMFILE, strlen(version) + 1, (void*)version); | ||
| + | |||
| + | //Zuerst wird das devices-Verzeichnis erstellt | ||
vfstree_create_node("/devices", LOSTIO_TYPES_DIRECTORY, 0, NULL); | vfstree_create_node("/devices", LOSTIO_TYPES_DIRECTORY, 0, NULL); | ||
| + | //Die beiden Nodes fuer die beiden Diskettenlaufwerke erstellt | ||
vfstree_create_node("/devices/fd0", 255, 1440 * 1024, (void*)0); | vfstree_create_node("/devices/fd0", 255, 1440 * 1024, (void*)0); | ||
vfstree_create_node("/devices/fd1", 255, 1440 * 1024, (void*)1); | vfstree_create_node("/devices/fd1", 255, 1440 * 1024, (void*)1); | ||
| − | //Diese Schleife sorgt dafuer, dass der | + | //Diese Schleife sorgt dafuer, dass der Treiber |
while(TRUE) yield(); | while(TRUE) yield(); | ||
return 0; | return 0; | ||
} | } | ||
| − | </ | + | </pre> |
[[Category:LOST]] | [[Category:LOST]] | ||