Týndur/LostIO
Aus Lowlevel
Noch nicht brauchbar
LostIO ist der Name der Hauptschnittstelle, die LOST den Treibern zur Verfügung stellt. Das ganze basiert auf einer VFS-ähnlichen Konstruktion. Darauf kann mit den normalen Dateifunktionen zugegriffen werden. Die Pfade sind dabei folgendermassen aufgebaut: Treibername:/Pfad/teil.
Inhaltsverzeichnis
Funktionen
LostIO
VFS-Baum
Beispiel
Hier folgen ausschnitte aus dem Quellcode des Diskettentreibers(Die Funktionen fuer den Laufwerkszugriff werden hier nicht gezeigt).
<c> int main(int argc, char* argv[]) {
//Beim Init unter dem Namen "floppy" registrieren, damit die anderen
//Prozesse den Treiber finden.
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();
//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_directory_use();
//Speicher fuer ein neues typehandle allokieren typehandle_t* typehandle = malloc(sizeof(typehandle_t)); //Die Typen-ID 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->post_open = NULL; typehandle->read = &floppy_read_handler; typehandle->write = &floppy_write_handler; typehandle->seek = &floppy_seek_handler; typehandle->close = NULL;
//Das Typehandle bei LostIO registrieren, damit es verfügbar ist. lostio_register_typehandle(typehandle);
//Der Inhalt des Version-Ramfile
const char* version = "Version 0.0.1";
//Nun wird das Ramfile erstellt
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);
//Die beiden Nodes fuer die beiden Diskettenlaufwerke erstellt
vfstree_create_node("/devices/fd0", 255, 1440 * 1024, (void*)0);
vfstree_create_node("/devices/fd1", 255, 1440 * 1024, (void*)1);
//Diese Schleife sorgt dafuer, dass der Treiber while(TRUE) yield(); return 0;
} </c>