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.29 xfs_sfirst TOS Name: »xfs_sfirst« - sucht die erste passende Datei. Parameter: a0 = DD * srchdir a1 = char *name (ohne Pfad) d0 = DTA * d1 = int attrib -> d0 = long errcode -> a0 = SYMLINK * (ggf. Symlink) Beschreibung: Wird für Fsfirst benötigt. MiNT verwendet statt dieser Funktion eine Kombination von Dreaddir und Fxattr, wozu aber sehr viele Aufrufe des XFS-Treibers notwendig sind. Der reservierte Bereich der DTA kann vom XFS frei verwendet werden, falls dieser zu klein ist, muß mit ähnlichen heuristischen Methoden wie in MiNT vorgegangen werden, d.h. Zeiger in die DTA eingetragen werden, die auf fest angelegte Deskriptoren zeigen. Diese Deskriptoren können aber nur nach heuristischen Methoden freigegeben werden, weil man nie weiß, ob noch ein Fsnext kommt oder nicht. Der Kernel ermittelt über path2DD bereits den vollständigen Pfad, so daß nur noch der reine Dateiname in a1 übergeben wird. Wie bei allen DOS-Aufrufen, die einen Pfad verarbeiten, muß das XFS darauf achten, daß der DD für die Dauer der Bearbeitung geschützt wird. Das ist besonders dann kritisch, wenn das Dateisystem reentrant ist. Ist eine gesuchte Datei ein symbolischer Link, muß als Fehlercode in d0 ELINK und in a0 der Zeiger auf den Link übergeben werden. Der Kernel ruft dann einfach Fxattr auf, um die DTA zu füllen. Trat ein Diskwechsel auf, ist E_CHNG zurückzugeben, der Kernel wiederholt dann automatisch die Funktion. Das gilt auch für alle anderen Funktionen. In jedem Fall muß dta_drive korrekt initialisiert werden, z.B. per: dta.dta_drive = srchdir->dd_dmd- >d_drive. Wird E_OK oder ELINK zurückgegeben, ohne daß dta_drive initialisiert wurde, ist das Resultat unvorhersehbar! Gruppe: Aufbau eines XFS Querverweis: XFS-Konzept in MagiC