Topic : TOS - das Betriebssystem Author : Version : tos.hyp (5. März 2013) Subject : Programmieren/Atari Nodes : 3001 Index Size : 93602 HCP-Version : 5 Compiled on : Atari @charset : atarist @lang : @default : Titel @help : @options : +g -i -s +x +zz -t4 @width : 70 View Ref-File11.21.2.25 xfs_path2DD TOS Name: »xfs_path2DD« - gibt einen DD zum Pfadnamen zurück. Parameter: mode = 0: name ist Datei = 1: name ist selbst Verzeichnis d0 = int mode a0 = DD *reldir akt. Verzeichnis a1 = char *pathname -> d0 = DD * d1 = char *restpfad oder -> d0 = ELINK d1 = Restpfad ohne beginnenden '\' a0 = FD des Pfades, in dem der symbolische Link liegt. Dies ist wichtig bei relativen Pfadangaben im Link. a1 = NULL, Der Pfad stellt den Parent des Wurzelverzeichnisses dar. oder a1 = Pfad des symbolischen Links Beschreibung: Der Kernel unterscheidet zwischen zwei Typen von Deskriptoren, Dateideskriptoren FD, file descriptor) und Verzeichnisdeskriptoren (DD, directory descriptor), die aber im Aufbau identisch sein können. Diese Funktion liefert zu einem Pfad einen Deskriptor zurück. Der Referenzzähler des DD muß jedesmal, wenn er als Funktionswert zurückgeliefert wird, um 1 erhöht werden, weil er vom Kernel referenziert wird. Die Funktion path2DD entspricht einem "Öffnen" des Pfades, es wird eine Art "Dateihandle" dem Kernel zurückgegeben, das der Kernel wieder schließen muß. Das Parsen des Pfades muß immer vom XFS erledigt werden. Eingabeparameter: <mode> Legt fest, ob das letzte Pfadelement selbst ein Verzeichnis ist (mode == 1), oder ob der Pfad ermittelt werden soll, in dem diese Datei liegt. <reldir> Verzeichnis, von dem aus gesucht werden soll. <pathname> Der Pfadname, ohne Laufwerkbuchstaben und ohne führendes '\'. Ausgabeparameter: 1. Fall: Es ist ein Fehler aufgetreten <d0> enthält den Fehlercode 2. Fall: Ein Verzeichnisdeskriptor (DD) konnte ermittelt werden. <d0> Zeiger auf den DD. Der Referenzzähler des DD wurde vom XFS um 1 erhöht. <d1> Zeiger auf den restlichen Dateinamen ohne beginnenden '\' bzw. '/'. Wenn das Ende des Pfades erreicht wurde, zeigt dieser Zeiger auf das abschliessende Nullbyte. 3. Fall: Das XFS ist bei der Pfadauswertung auf einen symbolischen Link gestoßen <d0> enthält den internen MagiC Fehlercode ELINK <d1> Zeiger auf den restlichen Pfad ohne beginnenden '\' bzw. '/' <a0> enthält den DD des Pfades, in dem der symbolische Link liegt. Der Referenzzähler des DD wurde vom XFS um 1 erhöht. <a1> ist der Zeiger auf den Link selbst. Ein Link beginnt mit einem Wort (16 Bit) für die Länge des Pfads, gefolgt vom Pfad selbst. Achtung: Die Länge muß INKLUSIVE abschließendes Nullbyte und außerdem gerade sein. Der Link muß auf einer geraden Speicheradresse liegen. Der Puffer für den Link kann statisch oder auch flüchtig sein, da der Kernel die Daten sofort umkopiert, ohne daß zwischendurch ein Kontextwechsel stattfinden kann. Wird a1 == NULL übergeben, wird dem Kernel signalisiert, daß der Parent des Wurzelverzeichnisses angewählt wurde. Befindet sich der Pfad etwa auf U:\A, kann der Kernel auf U:\ zurückgehen. Der Wert des Rückgaberegisters a0 wird vom Kernel ignoriert, es darf daher kein Referenzzähler erhöht werden. Gruppe: Aufbau eines XFS Querverweis: XFS-Konzept in MagiC