HomeGEMDOSSystemfunktionenZeichenweise Ein-/Ausgabe

5.15 Verzeichnisfunktionen

Dchroot     changes the root directory for the calling process
Dclosedir   Schließt ein Verzeichnis.
Dcntl       Filesystem-spezifische Operation auf Datei/Verzeichnis.
Dcreate     Verzeichnis anlegen.
Ddelete     Verzeichnis löschen.
Dfree       Freie und Gesamtkapazität eines Laufwerks ermitteln.
Dgetcwd     Verzeichnis eines Prozesses ermitteln.
Dgetdrv     Aktuelles Laufwerk ermitteln.
Dgetpath    Aktuelles Verzeichnis ermitteln.
Dlock       BIOS-Gerät sperren bzw. wieder freigeben.
Dopendir    Verzeichnis zum Lesen öffnen.
Dpathconf   Informationen über ein Filesystem ermitteln.
Dreaddir    Verzeichnis-Informationen lesen.
Dreadlabel  Filesystem Label lesen.
Drewinddir  Geöffentes Verzeichnis zurücksetzen.
Dsetdrv     Aktuelles Laufwerk ändern.
Dsetpath    Aktuelles Verzeichnis ändern.
Dwritelabel Filesystem Label setzen.
Dxopendir   Verzeichnis zum Lesen öffnen.
Dxreaddir   Verzeichnis-Informationen lesen, Attribute ermitteln.

Querverweis: Dateifunktionen   XBIOS-Laufwerksfunktionen

5.15.1 Dchroot

Name: »Dchroot« - changes the root directory for the calling process
Gemdosnummer: 330 (0x014a)
Deklaration: int32_t Dchroot( int8_t *path );
Beschreibung: The path parameter is a pathname of the folder that will be the new root directory for the calling process. Directories and files which are outside to the specified tree will be no longer accessible.

Dchroot does not automatically change the current directory to the newly specified root. Also, the call needs root privileges to operate properly. This function is used by e.g. ftpd to limit the user privileges in accessing filesystems.
Ergebnis: Returns the E_OK on success or a negative GEMDOS error code otherwise.
Verfügbar Available as of FreeMiNT version 1.15.4
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dopendir   Dreaddir   MagiC

5.15.1.1 Bindings für Dchroot

C: int32_t Dchroot( int8_t *path );
Assembler:
pea       path             ; Offset 2
move.w    #330,-(sp)       ; Offset 0
trap      #1               ; GEMDOS aufrufen
addq.l    #6,sp            ; Stack korrigieren

5.15.2 Dclosedir

Name: »Dclosedir« - schließt ein Verzeichnis.
Gemdosnummer: 299
Deklaration: int32_t Dclosedir ( int32_t dirhandle );
Beschreibung: Die Funktion schließt das Verzeichnis mit dem Handle dirhandle.
Ergebnis: Die Funktion liefert den Wert 0, falls das Verzeichnis korrekt geschlossen werden konnte. Wenn dirhandle ungültig ist, wird der Wert EIHNDL zurückgegeben.
Verfügbar: Verfügbar, wenn ein 'MiNT' Cookie mit einer Versionsnummer von mindestens 0.90 existiert und in MagiC ab Version 3.0.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dopendir   Dreaddir   MagiC

5.15.2.1 Bindings für Dclosedir

C: int32_t Dclosedir ( int32_t dirhandle );
Assembler:
move.l    dirhandle,-(sp)  ; Offset 2
move.w    #299,-(sp)       ; Offset 0
trap      #1               ; GEMDOS aufrufen
addq.l    #6,sp            ; Stack korrigieren

5.15.3 Dcntl

Name: »Dcntl« - führt eine Filesystem spezifische Operation auf einer Datei bzw. einem Verzeichnis durch.
Gemdosnummer: 304
Deklaration: int32_t Dcntl ( int16_t cmd, int8_t *name, int32_t arg );
Beschreibung: Die Funktion führt das Kommando cmd auf dem File bzw. Verzeichnis name aus. Einzelheiten sind vom Filesystem abhängig, auf das sich name bezieht. Die Bedeutung des Parameters arg ist wiederum von cmd abhängig.

Standardmäßig wird der Dcntl-Aufruf von den Filesystemen U:\\ und U:\DEV unterstützt.

Das Unified-Filesystem U:\ kennt die folgenden Kommandos:
Kommando Beschreibung
FS_INSTALL (0xf001) installiert ein neues Filesystem
name: U:\
arg: Zeiger auf fs_descr Struktur
FS_MOUNT (0xf002) Bindet ein bereits existierendes Filesystem in das Unified-System U:\ ein.
name: Name unter dem auf das Filesystem zugegriffen werden kann.
arg: Zeiger auf fs_descr Struktur
FS_UNMOUNT (0xf003) entfernt ein per FS_MOUNT eingehängtes System.
name: Name unter dem das Filesystem eingebunden wurde.
arg: Zeiger auf fs_descr Struktur
FS_UNINSTALL (0xf004) Entfernt ein Filesystem vollständig aus dem Kernel. Dieser Befehl ist nur erlaubt, wenn keine weiteren Verweise auf das Filesystem existieren, also beispielsweise etwaige Mounts rückgängig gemacht wurden.
name: U:\\
arg: Zeiger auf fs_descr Struktur
FUTIME (0x4603) Ist das Pendant zur gleichnamigen Fcntl()-Funktion. Sie wird von MiNT sowie vom DOS-XFS in MagiC unterstützt. Als Parameter wird ein Zeiger auf eine mutimbuf-Struktur übergeben.
KER_GETINFO (0x0100) Ermittelt einen Zeiger auf die Kernelfunktionen von MagiC. Bei den Parametern name und arg muss es sich um NULL-Werte handeln. Zurückgeliefert wird ein Zeiger auf eine MX_KERNEL-Struktur. (*)

Ab MagiC 6: MX_KER_GETINFO (0x6d00) (1)
KER_DOSLIMITS (0x0101) Fordert den Kernel von MagiC auf, die Limits für FAT-Dateisysteme zu ermitteln. Die Parameter name und arg müssen auf NULL gesetzt werden. Zurückgeliefert wird ein Zeiger auf einen Zeiger auf eine MX_DOSLIMITS Struktur; dieser kann daher auf eine eigene Struktur umgebogen werden, falls ein neuer Treiber installiert wird. Dieser Opcode wird normalerweise nur von Festplattentreibern (wie dem HDDRIVER) verwendet. (*)

Ab MagiC 6: MX_KER_DOSLIMITS (0x6d01) (1)
KER_INTMAVAIL (0x102)  
KER_INTGARBC (0x103) Diese Funktionen existierten vor der Version 4.01 von MagiC, und wurden auf Sconfig-Aufrufe umgesetzt, um Konflikte mit Treibern zu vermeiden, die Probleme mit unbekannten Opcodes besitzen (*).
KER_DRVSTAT (0x0104) Ermittelt einfache Informationen über ein Laufwerk. Es gilt:
name: wird ignoriert
arg: Zeiger auf zwei int16_ts.


Das erste int16_t muss dabei eine Null enthalten, in das zweite wird eine Laufwerksnummer von 0..25 (A..Z) geschrieben. Die möglichen Rückgabewerte für diesen Opcode lauten:
EDRIVE : ungültige Laufwerksnummer
ELOCKED : Laufwerk z.Zt. gesperrt


Ein Wert von 0 bzw. >0 zeigt an, daß das Laufwerk z.Zt. gemounted bzw. nicht gemounted ist. Dieser Opcode steht erst ab der MagiC-Version vom 09.09.95 zur Verfügung (*).

Ab MagiC 6: MX_KER_DRVSTAT (0x6d04) (1)
KER_XFSNAME (0x0105) Ermittelt den Namen des Treibers, welcher für ein bestimmtes Verzeichnis zuständig ist.
name: Pfadname (kein Dateiname!)
arg: Zeiger auf einen mindestens 9 Zeichen großen Puffer, der an einer geraden Adresse liegen muss.


Ein Rückgabewert < 0 kennzeichnet einen Fehler; ansonsten wird im angegebenen Puffer der Name des Treibers abgelegt; z.Zt. sind folgende Treibernamen bekannt:
(a) "DOS_XFS": altes DOS-XFS
(b) "VDOS_XFS": DOS-XFS mit VFAT
(c) "MMAC_HFS": MagiCMac-HFS


Dieser Opcode steht erst ab der MagiC-Version vom 15.06.1996 zur Verfügung (*).

Ab MagiC 6: MX_KER_XFSNAME (0x6d05) (1)
KER_INSTXFS (0x0200) Fordert den Kernel von MagiC auf, ein XFS zu installieren. (*)
name: NULL-Zeiger
arg: einzubindender Treiber


Ab MagiC 6: MX_KER_INSTXFS (0x6d02) (1)
KER_SETWBACK (0x0300) Fordert den Kernel von MagiC auf, den WriteBack zu konfigurieren. Ab MagiC-Version 4.01 wurde dieser Opcode auf einen Sconfig-Aufruf umgesetzt, um Konflikte mit Treibern zu vermeiden, die Probleme mit unbekannten Opcodes besitzen (*).
DFS_GETINFO (0x1100) Ermittelt einen Zeiger auf die DOS_XFS-Funktionen von MagiC. Bei den Parametern name und arg muss es sich um NULL-Werte handeln. Zurückgeliefert wird ein Zeiger auf eine ???-Struktur. (*)

Ab MagiC 6: MX_DFS_GETINFO (0x6d40) (1)
DFS_INSTDFS (0x1200) Installiert ein DFS unter MagiC (*).
name: NULL-Zeiger
arg: einzubindender Treiber
CDROMEJECT (0x4309) Übernimmt das Auswerfen von Medien.
name: Pfad des auszuwerf. Mediums
arg: NULL


Die Auswurffunktion wird für alle Laufwerke unterstützt, die über einen XHDI-kompatiblen Treiber angesprochen werden, sowie für Macintosh Volumes (unter MagiCMac).

Ab MagiC 6: MX_DFS_INSTDFS (0x6d41) (1)
VFAT_CNFDFLN (0x5600) Konfiguriert ein VFAT-Dateisystem.
name: U:\\
arg: Bitvektor der festlegt, bei welchen Laufwerken lange Dateinamen zugelassen werden.


Die Einstellung wird erst beim mounten eines Dateisystems aktiv, daher können bereits gemountete Dateisysteme mit diesem Befehl nicht beeinflußt werden. Dieser Opcode steht erst ab der MagiC-Version vom 02.01.96 zur Verfügung. (*).
VFAT_CNFLN (0x5601) Dient der Konfiguration eines VFAT-Dateisystems. Genauer: Legt fest, ob ein gemountetes Laufwerk lange Dateinamen unterstützt, oder nicht. Mit diesem Opcode kann also der per VFAT_CNFDFLN festgelegte Defaultwert überladen werden. Damit die Umstellung für den Benutzer sichtbar wird, sollte eine SH_WDRAW-Nachricht an die System-Shell geschickt werden. Dieser Opcode steht erst ab der MagiC-Version vom 02.01.96 zur Verfügung (*).
PROC_CREATE (0xcc00) Diese Funktion ist in MagiC für zukünftige Zwecke reserviert (*). Sie wird ab MagiC 6 nicht mehr verwendet.


Das Filesystem U:\DEV kennt folgende Kommandos:
Kommando Beschreibung
   
DEV_INSTALL (0xde02) installiert einen neuen Treiber für ein Gerät.
name: vollständiger Pfadname des Treibers
arg: Zeiger auf dev_descr-Struktur


Auf das so installierte Gerät, darf nur über GEMDOS Operationen zugegriffen werden.
DEV_M_INSTALL (0xcd00) entspricht DEV_INSTALL und muß aufgrund des inkompatiblen Treiberformates zu MultiTOS in MagiC benutzt werden. (*)
name: vollst. Pfadname des Treibers
arg: Zeiger auf MX_DDEV-Struktur


Ab MagiC 6: MX_DEV_INSTALL (0x6d20) (1)
DEV_NEWTTY (0xde00) installiert Treiber für ein neues BIOS Terminal
name: Name des Terminals (in der Form 'U:\DEV\DEVNAME')
arg: BIOS Gerätenummer des Terminals


Das BIOSmuß per Bconmap über das Gerät informiert worden sein, anderenfalls wird jeder Versuch auf das Gerät zuzugreifen mit EUNDEV bestraft.
DEV_NEWBIOS (0xde01) installiert einen Treiber für ein neues BIOS nicht-Terminal Gerät.
name: vollständiger Name des Geräts
arg: zugehörige BIOS Gerätenummer


Das BIOSmuß per Bconmap über das Gerät informiert worden sein, anderenfalls wird jeder Versuch auf das Gerät zuzugreifen mit EUNDEV bestraft.


Hinweis: Die mit (*) gekennzeichneten Opcodes stehen dabei nur unter MagiC, alle anderen nur unter MiNT bzw. MultiTOS zur Verfügung. Ausnahmen: Die Opcodes FUTIME und CDROMEJECT stehen sowohl unter MiNT/MultiTOS als auch unter MagiC zur Verfügung.

(1): Leider gab es Kollisionen zwischen MagiC und dem Minix-XFS für MiNT. Daher enthält MagiC ab der Version 6 neue Codes, die alten werden aber noch unterstützt. Die neuen Codes haben ein 0x6d im oberen Word, diese Kennung ist für MagiC reserviert.
Ergebnis: Der Rückgabewert ist abhängig von der gewünschten Operation und dem zugrunde liegenden Filesystem. Bei einem Wert >= 0 ist alles erfolgreich verlaufen. Eine Ausnahme ist der Wert bei DEV_INSTALL, welcher entweder auf eine Informationsstruktur des Kernels zeigt, oder aber den Wert 0 besitzt.

Bei einem ungültigen Opcode wird EINVFN zurückgeliefert.
Verfügbar: Verfügbar, wenn ein 'MiNT' Cookie mit einer Versionsnummer von mindestens 0.90 existiert und in MagiC ab Version 3.0.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   XFS-Konzept in MagiC   Bconmap   Fcntl   MagiC   Metaioctl

5.15.3.1 Bindings für Dcntl

C: int32_t Dcntl ( int16_t cmd, int8_t *name, int32_t arg );
Assembler:
move.l    arg,-(sp)    ; Offset 8
pea       name         ; Offset 4
move.w    cmd,-(sp)    ; Offset 2
move.w    #304,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
lea       $C(sp),sp    ; Stack korrigieren

5.15.4 Dcreate

Name: »create directory« - Verzeichnis anlegen.
Gemdosnummer: 57
Deklaration: int32_t Dcreate ( CONST int8_t *path );
Beschreibung: Die GEMDOS-Routine Dcreate legt ein Verzeichnis mit dem Pfadnamen path an, der mit dem ASCII-Zeichen 0 abgeschlossen sein muss.

Hinweis: Aufgrund mangelhafter Fehlerbehandlungen in GEMDOS-Versionen < 0.15 konnte u.U. das Dateisystem beschädigt werden. Ferner wurde nicht überprüft, ob eine Datei des angegebenen Namens bereits existiert.

Ab MagiC-3 wird der Aufruf vom Kernel weitergegeben als xfs_dcreate mit Erstellmodus Fxattr %0100000111101101 (d.h. 'directory file' mit einer Zugriffsberechtigung RWXRwXRwX). Das XFS sollte keine gleichnamigen Dateien oder Unterverzeichnisse löschen, sondern in diesem Fall den Fehlercode EACCDN liefern. Ungültige Dateinamen wie "." oder ".." müssen auch vom XFS abgefangen werden.
Ergebnis: Die Funktion liefert folgende Resultate:
Wert Bedeutung
   
E_OK kein Fehler aufgetreten
EPTHNF Verzeichnis nicht gefunden
EACCDN Zugriff verweigert
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Ddelete   ASCII-Tabelle

5.15.4.1 Bindings für Dcreate

C: int32_t Dcreate ( CONST int8_t *path );
Assembler:
pea       path         ; Offset 2
move.w    #57,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #6,sp        ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H39,L:path%)

5.15.5 Ddelete

Name: »delete directory« - Verzeichnis löschen.
Gemdosnummer: 58
Deklaration: int32_t Ddelete ( CONST int8_t *path );
Beschreibung: Die GEMDOS-Routine Ddelete löscht ein Verzeichnis mit dem Pfadnamen path, das keine weiteren Dateien oder Unterverzeichnisse enthalten darf. Der String path muß mit dem ASCII-Zeichen 0 abgeschlossen sein.

Hinweis: In GEMDOS-Versionen < 0.15 funktionierte ein Aufruf von Dcreate mit unmittelbar folgendem Ddelete nicht - erst ein weiteres Ddelete brachte das gewünschte Resultat.

In MagiC testet der Kernel vorher, ob das Verzeichnis ein aktueller Pfad ist, und liefert ggfs. eine Fehlermeldung zurück. Nach Möglichkeit sollten nur leere Verzeichnisse gelöscht werden; dies ist jedoch Sache des XFS. Ab MagiC-Version 4.01 können mit Hilfe dieser Funktion auch symbolische Links gelöscht werden; in älteren Versionen wurde stets das Verzeichnis gelöscht, auf welches der Link zeigte.
Ergebnis: Die Funktion liefert folgende Resultate:
Wert Bedeutung
   
E_OK kein Fehler aufgetreten
EPTHNF Verzeichnis nicht gefunden
EACCDN Zugriff verweigert
EINTRN interner Fehler des GEMDOS
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dcreate   XFS-Konzept in MagiC

5.15.5.1 Bindings für Ddelete

C: int32_t Ddelete ( CONST int8_t *path );
Assembler:
pea       path         ; Offset 2
move.w    #58,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #6,sp        ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H3A,L:path%)

5.15.6 Dfree

Name: »free disk space« - ermittelt die Kapazitätsauslastung eines Laufwerks.
Gemdosnummer: 54
Deklaration: int16_t Dfree ( DISKINFO *buf, int16_t driveno );
Beschreibung: Die GEMDOS-Routine Dfree ermittelt die Kapazität und Belegung eines Laufwerks. Es gilt:
Parameter Bedeutung
   
buf Adresse des Informations-Puffers
driveno
0 = aktuelles Laufwerk
1 = Laufwerk-A
2 = Laufwerk-B (usw.)


Hinweis: In GEMDOS-Versionen < 0.15 ist diese Funktion unglaublich langsam.

Auf das Verzeichnis U:\PROC angewandt, liefert diese Funktion ab MagiC 3 die minimale, tatsächliche Blocklänge (als Sektoren pro Cluster). Zur Zeit wird der Speicher wortweise belegt, d.h. die 'Sektorgröße' ist 1 int8_t, und die Clustergröße beträgt 2 Sektoren (also 2 int8_ts).
Ergebnis: Die Funktion liefert bei korrekter Ausführung eine 0, und eine negative Zahl, wenn es zu einem Fehler kam.
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Fdelete

5.15.6.1 Bindings für Dfree

C: int16_t Dfree ( DISKINFO *buf, int16_t driveno );
Assembler:
move.w    driveno,-(sp)  ; Offset 6
pea       buf            ; Offset 2
move.w    #54,-(sp)      ; Offset 0
trap      #1             ; GEMDOS aufrufen
addq.l    #8,sp          ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H36,L:buf%,W:driveno%)

5.15.7 Dgetcwd

Name: »Dgetcwd« - bestimmt das aktuelle Verzeichnis eines Prozesses.
Gemdosnummer: 315
Deklaration: int32_t Dgetcwd ( int8_t *path, int16_t drv, int16_t size );
Beschreibung: Es wird das aktuelle Arbeitsverzeichnis des aktiven Prozesses auf Laufwerk drv geliefert. Der Parameter size gibt die Größe des den Namen aufnehmenden Puffers an.
Ergebnis: path: Verzeichnis des aktuellen Prozesses.

Der Rückgabewert der Funktion ist entweder 0 (alles ok), ERANGE (die Größe des Puffers reicht nicht aus, um die exakte Beschreibung des Verzeichnisses aufzunehmen), oder EDRIVE (kein gültiges GEMDOS Laufwerk).
Verfügbar: Verfügbar, wenn ein 'MiNT' Cookie mit einer Versionsnummer von mindestens 0.96 existiert und in MagiC ab Version 3.0.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dgetpath

5.15.7.1 Bindings für Dgetcwd

C: int32_t Dgetcwd ( int8_t *path, int16_t drv, int16_t size );
Assembler:
move.w    size,-(sp)   ; Offset 8
move.w    drv,-(sp)    ; Offset 6
pea       path         ; Offset 2
move.w    #315,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
lea       $A(sp),sp    ; Stack korrigieren

5.15.8 Dgetdrv

Name: »disk get drive« - ermittelt das aktuelle Laufwerk.
Gemdosnummer: 25
Deklaration: int16_t Dgetdrv ( VOID );
Beschreibung: Die GEMDOS-Routine Dgetdrv ermittelt das aktuelle Laufwerk.
Ergebnis: Die Funktion liefert als Ergebnis eine Zahl, die wie folgt codiert ist:
Wert Bedeutung
   
0 Laufwerk-A
1 Laufwerk-B
2 Laufwerk-C
3 Laufwerk-D (usw.)


Hinweis: Ab MagiC 3 sind Laufwerke von A bis Z, d.h. Werte von 0 bis 25 zulässig.
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dsetdrv   _drvbits

5.15.8.1 Bindings für Dgetdrv

C: int16_t Dgetdrv ( VOID );
Assembler:
move.w    #25,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #2,sp        ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H19)

5.15.9 Dgetpath

Name: »get path« - aktuelles Verzeichnis ermitteln.
Gemdosnummer: 71
Deklaration: int16_t Dgetpath ( int8_t *path, int16_t driveno );
Beschreibung: Die GEMDOS-Routine Dgetpath ermittelt das aktuelle Verzeichnis auf dem Laufwerk driveno. Die Bezeichnungen der Laufwerke werden im Parameter driveno wie folgt codiert:
driveno Bedeutung
   
0 aktuelles Laufwerk
1 Laufwerk-A
2 Laufwerk-B
3 Laufwerk-C (usw.)


Der Pfad wird im Puffer path als String abgelegt. Da die maximale Länge eines Pfades im GEMDOS nicht begrenzt, und nur bei Existenz der Funktion Dpathconf ermittelt werden kann, sollte der aufnehmende Puffer ausreichend Platz bieten (256 Bytes dürften wohl ausreichend sein).
Ergebnis: Die Funktion liefert folgende Resultate:

E_OK : kein Fehler aufgetreten
EDRIVE : falsche Laufwerksnummer
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dsetpath

5.15.9.1 Bindings für Dgetpath

C: int16_t Dgetpath ( int8_t *path, int16_t driveno );
Assembler:
move.w    driveno,-(sp)  ; Offset 6
pea       path           ; Offset 2
move.w    #71,-(sp)      ; Offset 0
trap      #1             ; GEMDOS aufrufen
addq.l    #8,sp          ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H47,L;path%,W:driveno%)

5.15.10 Dlock

Name: »Dlock« - sperrt ein BIOS Gerät bzw. gibt es wieder frei.
Gemdosnummer: 309
Deklaration: int32_t Dlock ( int16_t mode, int16_t drv );
Beschreibung: Die Funktion erlaubt es, das BIOS-Gerät drv zu sperren, bzw. wieder freizugeben. Auf einem gelockten Laufwerk sind keine GEMDOS File-Operationen zugelassen; Rwabs ist nur für den sperrenden Prozess erlaubt.

Der Sinn und Zweck der Funktion besteht darin, daß Low-Level Programme (etwa zum Formatieren) (X)BIOS Funktionen ausführen können, während das Gerät für normale Dateizugriffe gesperrt bleibt.

Bit 0 von mode = 1: Gerät sperren
= 0: Gerät freigeben


Wird ein Prozeß beendet der noch eine Sperre auf einem Gerät hält, so wird diese Sperre aufgehoben.

Bit 1 von mode zeigt an, welche Rückgabewerte gewünscht sind. Ist dieses Bit gesetzt, und das entsprechende Gerät bereits von einem anderen Prozeß gesperrt (oder hat ein anderer Prozeß Files auf diesem Gerät geöffnet), dann wird dessen Prozeß-ID zurückgeliefert. Dies erlaubt sinnvollere Fehlermeldungen an den Benutzer, da nun mitgeteilt werden kann, welcher Prozeß das Gerät benutzt, wenn das Sperren fehlschlagen sollte.

Alle anderen Bits von mode sind reserviert und müssen auf 0 gesetzt werden.

Ein Sperren eines Gerätes mit unmittelbar folgendem Freigeben desselben, ist einem Medienwechsel sehr ähnlich. Zu beachten ist lediglich, daß nicht gesperrt werden kann, wenn auf dem angegebenen Gerät noch Dateien geöffnet sind.

Hinweis für MagiC: Vor Sperren des Laufwerks werden, falls ein Dateisystem für das Laufwerk existiert, die Caches über den Vektor xfs_sync zurückgeschrieben. Dann stellt der Kernel über xfs_drv_close eine Anfrage, ob das Laufwerk gesperrt werden kann. Wenn ja, gibt das XFS seine Strukturen frei und signalisiert dann dem Kernel, daß auch er seine Strukturen für das Laufwerk freigeben und die Sperrung durchführen kann.
Ergebnis: Die Funktion kann die folgenden Werte zurückliefern:
E_OK : kein Fehler aufgetreten.
EACCDN : Gerät konnte nicht gesperrt werden, da offene Dateien bzw. Verzeichnisse vorhanden sind.
EDRIVE : drv ist kein gültiges BIOS-Gerät.
ELOCKED : Gerät ist bereits von einem Prozeß gesperrt.
ENSLOCK : Gerät ist bereits freigegeben.
Verfügbar: Verfügbar, wenn ein 'MiNT' Cookie mit einer Versionsnummer von mindestens 0.93 existiert und in MagiC ab Version 3.0.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Fxattr   XFS-Konzept in MagiC

5.15.10.1 Bindings für Dlock

C: int32_t Dlock ( int16_t mode, int16_t drv );
Assembler:
move.w    drv,-(sp)    ; Offset 4
move.w    mode,-(sp)   ; Offset 2
move.w    #309,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #6,sp        ; Stack korrigieren

5.15.11 Dopendir

Name: »Dopendir« - öffnet ein Verzeichnis zum Lesen.
Gemdosnummer: 296
Deklaration: int32_t Dopendir ( int8_t *name, int16_t flag );
Beschreibung: Die Funktion öffnet das Verzeichnis name zum Lesen. Der Parameter name muß NULL-terminiert sein und darf keinen abschließenden Backslash enthalten. Der Parameter flag beschreibt die Art und Weise, wie das Verzeichnis geöffnet werden soll:
flag Bedeutung
   
0 Normalmodus
In diesem Modus wird versucht, die Länge von Dateinamen nicht zu begrenzen. Darüber hinaus gibt Dreaddir in diesem Modus eine Indexnummer (ähnlich den UNIX inode's) in den ersten 4 Bytes des Dateinamens zurück.
1 Kompatibilitätsmodus
In diesem Modus verhalten sich Dateisysteme so, als würden Fsfirst- bzw. Fsnext-Aufrufe benutzt. Insbesondere werden Dateinamen nach DOS-Konvention auf 8+3 Zeichen verkürzt, wenn dies möglich ist.


Neuere Programme sollten nach Möglichkeit immer den Normalmodus benutzen, um die volle Funktionalität zu nutzen.
Ergebnis: Die Funktion liefert im Erfolgsfall eine 32bit Verzeichnis-Handle. Diese darf auch negativ sein, enthält aber auf keinen Fall den Wert 0xff im obersten Byte, wodurch es von Fehlern unterschieden werden kann.

Im Fehlerfall sind folgende Rückgabewerte möglich:
EPTHNF : name ist kein gültiges Verzeichnis
EACCDN : Das Verzeichnis ist von diesem Programm nicht ansprechbar.
ENSMEM : Der Kernel kann für diese Operation keinen Speicher allozieren.
Verfügbar: Verfügbar, wenn ein 'MiNT' Cookie mit einer Versionsnummer von mindestens 0.90 existiert und in MagiC ab Version 3.0.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dclosedir   Dreaddir   Drewinddir   Pdomain

5.15.11.1 Bindings für Dopendir

C: int32_t Dopendir ( int8_t *name, int16_t flag );
Assembler:
move.w    flag,-(sp)   ; Offset 6
pea       name         ; Offset 2
move.w    #296,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #8,sp        ; Stack korrigieren

5.15.12 Dpathconf

Name: »Dpathconf« - Informationen über ein Filesystem ermitteln.
Gemdosnummer: 292
Deklaration: int32_t Dpathconf ( BYTE *name, int16_t mode );
Beschreibung: Die Funktion ermöglicht es Informationen über das Filesystem, welches die Datei name enthält, zu ermitteln.

Der Parameter mode gibt an, welche Möglichkeiten bzw. Einschränkungen des Filesystems erfragt werden sollen. Mögliche Werte sind hier:
mode Bedeutung
   
-1: max. erlaubter Wert für Dpathconf selbst.
DP_IOPEN (0): max. Anzahl der geöffneten Dateien.
DP_MAXLINKS (1): max. Anzahl der Verweise (Links) auf eine Datei.
DP_PATHMAX (2): max. Länge des vollen Pfadnamens.
DP_NAMEMAX (3): max. Länge eines Dateinamens.
DP_ATOMIC (4): Anzahl der Bytes, die auf einmal geschrieben werden können.
DP_TRUNC (5): Informationen über das Kürzen von Dateinamen:
0 = Dateinamen werden nicht gekürzt. Wenn bei einem Systemaufruf die Länge des maximalen Dateinamens überschritten wird, wird der Wert ERANGE zurückgeliefert.
1 = Dateinamen werden automatisch auf die maximal mögliche Länge verkürzt.
2 = Dateinamen werden nach DOS-Konvention gekürzt. (also: 8 Zeichen Name, 3 Zeichen Extension).
DP_CASE (6): Informationen über Groß-/Kleinschreibung:
0 = Unterscheidung zwischen Groß-/Kleinschreibung.
1 = keine Unterscheidung zwischen Groß-/Kleinschreibung (alle Zeichen werden entweder in Groß-, oder in Kleinbuchstaben umgewandelt).
2 = keine Unterscheidung zwischen Groß-/Kleinschreibung. Das Dateisystem speichert aber Pfad- und Dateinamen mit den Originalwerten ab.
Beispiel: Die angezeigte Datei 'HelloWorld' kann auch über 'HELLOWorld' oder 'HeLLoWORLD' angesprochen werden.
DP_MODEATTR (7): Informationen über Modus-Bits einer Datei:

Dieser Modus liefert Informationen über die Gültigkeit der in den Feldern mode und attr der XATTR Struktur definierten Werte. Die Bits 0..5 beschreiben welche Flags der Komponente attr gültig sind. Dabei gilt:
FA_RDONLY (0x01): wird nur gesetzt wenn die Leseberechtigung über dieses Bit gesteuert wird, und nicht, wenn es über die Bedeutung der mode-Bits emuliert wird.
FA_HIDDEN (0x02):  
FA_SYSTEM (0x04): wird gesetzt, wenn das Filesystem diese speziellen Attribute unterstützt (normalerweise nur bei DOS Filesystemen der Fall).
FA_LABEL (0x08): wird gesetzt, wenn das Filesystem-Label per Fsfirst/Fsnext ermittelt werden kann.
FA_DIR (0x10): reserviert. Um zu entscheiden, ob es sich um einen Ordner auf dem Filesystem handelt, sollte auf die Datei-Typ-Bits (s.u.) zurückgegriffen werden.
FA_CHANGED (0x20): wird gesetzt, wenn das Filesystem den Begriff des Archiv-Bits kennt, und das attr-Feld für diesen Zweck benutzt wird.


Die Bits 6 und 7 sind reserviert. In den Bits 8..19 werden Informationen darüber abgelegt, ob die unteren 12-Bits der mode-Komponente gültig sind. Die Bits 20..27 beschreiben, welche Dateitypen von dem Filesystem unterstützt werden. Dabei gilt:
DP_FT_DIR (0x00100000L): Ordner
DP_FT_CHR (0x00200000L): spezielle Character-Files
DP_FT_BLK (0x00400000L): spezielle Block-Files (z.Zt. unbenutzt)
DP_FT_REG (0x00800000L): Reguläre Dateien
DP_FT_LNK (0x01000000L): Symbolische Links
DP_FT_SOCK (0x02000000L): Sockets (z.Zt. unbenutzt)
DP_FT_FIFO (0x04000000L): Pipes
DP_FT_MEM (0x08000000L): Shared Memory oder Prozess Dateien


Die Bits 28..31 sind reserviert.
DP_XATTRFIELDS (8): Informationen über erweiterte Attribute:

In diesem Modus wird eine Bit-Maske der unterstützten (in der XATTR-Struktur angegebenen) Felder zurückgeliefert. Es gilt:
DP_INDEX (0x0001): Index-Feld für jede Datei auf dem Filesystem eindeutig
DP_DEV (0x0002): Gerätenummer
DP_RDEV (0x0004): rdev-Feld gültig, und nicht zum dev-Feld identisch
DP_NLINK (0x0008): Anzahl der Links
DP_UID (0x0010): Benutzernummer
DP_GID (0x0020): Gruppennummer
DP_BLKSIZE (0x0040): Blockgröße
DP_SIZE (0x0080): Dateilänge
DP_NBLOCKS (0x0100): Anzahl der Blöcke
DP_ATIME (0x0200): Zeit des letzten Zugriffs
DP_CTIME (0x0400): Zeit der Dateierstellung
DP_MTIME (0x0800): Zeit der letzten Änderung


Alle anderen Bits sind für zukünftige Zwecke reserviert.
DP_VOLNAMEMAX (9): maximum length of a volume name (0 if volume names not supported)


Ein Rückgabewert von 0x7fffffff (2^31 -1) bedeutet, daß es für die erfragte Komponente keine Beschränkung gibt.

Hinweis: In MagiC kann die Funktion auch auf Dateien angewendet werden. Der Dateiname wird jedoch in diesem Fall ignoriert, d.h. nur der Pfad wird ausgewertet. Die Funktion sollte in MagiC ggf. nach Dopendir aufgerufen werden, da Dpathconf keine Diskwechsel erkennt (Grund: wenn der Pfad noch im Cache ist, wird kein Diskzugriff durchgeführt, und daher kein Diskwechsel erkannt).
Ergebnis: Die Funktion liefert die Eigenschaften/Einschränkungen des Filesystems bzgl. des Parameters mode zurück (s.o.).
Verfügbar: Seit der ersten in MultiTOS integrierten MiNT Version 1.04 und in MagiC ab Version 3.0.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding Sysconf   XFS-Konzept in MagiC   Test auf Pipes

5.15.12.1 Bindings für Dpathconf

C: int32_t Dpathconf ( BYTE *name, int16_t mode );
Assembler:
move.w    mode,-(sp)   ; Offset 6
pea       name         ; Offset 2
move.w    #292,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #8,sp        ; Stack korrigieren

5.15.13 Dreaddir

Name: »Dreaddir« - Verzeichnis Informationen lesen.
Gemdosnummer: 297
Deklaration: int32_t Dreaddir ( int16_t len, int32_t dirhandle, int8_t *buf );
Beschreibung: Die Funktion liefert die nächste Datei im Verzeichnis dirhandle zurück. Der Dateiname und ein optionaler 4Byte Index für die Datei, werden in buf geschrieben.

Der Dateiindex wird weggelassen, wenn das Verzeichnis im Kompatibilitätsmodus geöffnet wurde, anderenfalls erscheint er als erstes in buf, gefolgt von einem (nullterminierten) Dateinamen.

(Ggfs. unterschiedliche) Namen mit gleichem Index, gehören zur selben Datei. (Ggfs gleiche) Namen mit unterschiedlichem Index gehören zu verschiedenen Dateien.

Hinweis für MagiC: Für FAT-Dateisysteme liefert die Funktion die folgenden Index-Daten:
  • Verzeichnisse: Startcluster im Motorola-Format
  • sonstige Dateien:
    Hiword = Startcluster des Verzeichnisses
    Loword = Position innerhalb des Verzeichnisses >> 5


Dieses Verfahren ist ähnlich wie das, welches Linux und Solaris verwenden. Nachteil ist, daß Dateien beim Verschieben ihren Index ändern.

In len muß die Größe des aufnehmenden Puffers angegeben werden.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
E_OK : kein Fehler aufgetreten.
ENMFIL : keine weiteren Dateien vorhanden.
ERANGE : Die Pufferlänge ist nicht ausreichend.
Verfügbar: Verfügbar, wenn ein 'MiNT' Cookie mit einer Versionsnummer von mindestens 0.90 existiert und in MagiC ab Version 3.0.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dclosedir   Dopendir   Drewinddir   Dxreaddir

5.15.13.1 Bindings für Dreaddir

C: int32_t Dreaddir ( int16_t len, int32_t dirhandle, int8_t *buf );
Assembler:
pea       buf          ; Offset 8
move.l    dirhandle    ; Offset 4
move.w    len          ; Offset 2
move.w    #297,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
lea       $C(sp),sp    ; Stack korrigieren

5.15.14 Dreadlabel

Name: »Dreadlabel« - Filesystem Label lesen.
Gemdosnummer: 338 (0x0152)
Deklaration: int32_t Dreadlabel ( CONST int8_t *path, int8_t *label, int16_t length );
Beschreibung: Die Funktion liefert in label den Namen des auf path liegenden Filesystems zurück. Der Parameter length gibt die Größe des aufnehmendes Puffers label an.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
E_OK : kein Fehler aufgetreten
ENAMETOOLONG : Der Name des Filesystems ist länger als die Größe des aufnehmenden Puffers.
Verfügbar: MagiC ab Version 3.0, ab MiNT 1.12
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dwritelabel   XFS-Konzept in MagiC

5.15.14.1 Bindings für Dreadlabel

C: int32_t Dreadlabel ( CONST int8_t *path, int8_t *label, int16_t length );
Assembler:
move.w    length,-(sp)  ; Offset 10
pea       label         ; Offset  6
pea       path          ; Offset  2
move.w    #338,-(sp)    ; Offset  0
trap      #1            ; GEMDOS aufrufen
lea       $C(sp),sp     ; Stack korrigieren

5.15.15 Drewinddir

Name: »Drewinddir« - geöffnetes Verzeichnis zurücksetzen.
Gemdosnummer: 298
Deklaration: int32_t Drewinddir ( int32_t handle );
Beschreibung: Die Funktion setzt das Verzeichnis handle auf den Anfang zurück, so daß der nächste Aufruf von Dreaddir wieder den ersten Eintrag im Verzeichnis liest.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
E_OK : kein Fehler aufgetreten.
EINVFN : Verzeichnis kann nicht zurückgesetzt werden.
EIHNDL : Das Verzeichnis handle ist nicht geöffnet.
Verfügbar: Verfügbar, wenn ein 'MiNT' Cookie mit einer Versionsnummer von mindestens 0.90 existiert und in MagiC ab Version 3.0.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dopendir   Dreaddir

5.15.15.1 Bindings für Drewinddir

C: int32_t Drewinddir ( int32_t handle );
Assembler:
move.l    handle,-(sp)  ; Offset 2
move.w    #298,-(sp)    ; Offset 0
trap      #1            ; GEMDOS aufrufen
addq.l    #6,sp         ; Stack korrigieren

5.15.16 Dsetdrv

Name: »disk set drive« - legt das aktuelle Laufwerk fest und liefert eine Bitmap sämtlicher gemounteter Laufwerke.
Gemdosnummer: 14
Deklaration: int32_t Dsetdrv ( int16_t drv );
Beschreibung: Die GEMDOS-Routine Dsetdrv macht das Laufwerk drv zum aktuellen Laufwerk. Es gilt:
drv Bedeutung
   
0 Laufwerk A
1 Laufwerk B
2 Laufwerk C (usw.)


Hinweis: Eine falsche Laufwerksnummer kann zu schweren Schäden in GEMDOS-internen Strukturen führen. Die vom GEMDOS unterstützten Laufwerke erfragt man am besten wie folgt:
Dsetdrv (Dgetdrv ());


Ab MagiC 3 sind Laufwerke von A bis Z, d.h. Werte von 0 bis 25 zulässig. Es wird nicht überprüft, ob das angegebene Laufwerk überhaupt existiert.

GEMDOS 0.30 (TOS 4.00-4.04) gibt für Laufwerke über P fälschlich EDRIVE zurück!
Ergebnis: Die Funktion liefert als Ergebnis eine Bit-Tabelle mit allen angeschlossenen Laufwerken. Jedes angeschlossene Laufwerk wird mit einem gesetzten Bit angezeigt.
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dgetdrv   _drvbits

5.15.16.1 Bindings für Dsetdrv

C: int32_t Dsetdrv ( int16_t drv );
Assembler:
move.w    drv,-(sp)    ; Offset 2
move.w    #14,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #4,sp        ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H0E,W:drv%)

5.15.17 Dsetpath

Name: »set path« - legt das aktuelle Verzeichnis fest.
Gemdosnummer: 59
Deklaration: int16_t Dsetpath ( CONST int8_t *path );
Beschreibung: Die GEMDOS-Routine Dsetpath setzt einen neuen Zugriffspfad für das aktuelle Laufwerk. Der Parameter path enthält den neuen aktuellen Zugriffspfad für das Laufwerk.

Hinweis: Für jedes Laufwerk merkt sich GEMDOS das aktuelle Verzeichnis. Die Funktion Dsetpath sollte aber nur für das aktuelle Laufwerk benutzt werden. Für andere Laufwerke sollte hingegen die folgende Methode angewendet werden:
  • aktuelles Laufwerk ermitteln
  • gewünschtes Laufwerk setzen
  • Pfad für dieses Laufwerk setzen
  • das alte (gemerkte) Laufwerk wieder zum aktuellen machen.


Auf einigen (älteren) Versionen von GEMDOS kann ein zu häufiges Setzen von nicht existierenden Pfaden zu Störungen in internen Strukturen führen.
Ergebnis: Die Funktion liefert folgende Resultate:
Wert Bedeutung
   
E_OK kein Fehler aufgetreten
EPTHNF Verzeichnis nicht gefunden
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dgetpath

5.15.17.1 Bindings für Dsetpath

C: int16_t Dsetpath ( CONST int8_t *path );
Assembler:
pea       path         ; Offset 2
move.w    #59,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #6,sp        ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H3B,L:path%)

5.15.18 Dwritelabel

Name: »Dwritelabel« - Filesystem Label setzen.
Gemdosnummer: 339 (0x0153)
Deklaration: int32_t Dwritelabel ( CONST int8_t *path, CONST int8_t *label );
Beschreibung: Die Funktion schreibt den in label angegebenen Namen auf das in path angegebene Filesystem.

Prior to MiNT version 1.14.5 this call contained a bug that allowed the label to be changed by all users.
Ergebnis: E_OK wenn erfolgreich oder einen negativen GEMDOS Fehlercode.
Verfügbar: MagiC ab Version 3.0, MiNT 1.12
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dreadlabel   XFS-Konzept in MagiC

5.15.18.1 Bindings für Dwritelabel

C: int32_t Dwritelabel ( CONST int8_t *path, CONST int8_t *label );
Assembler:
pea       label        ; Offset 6
pea       path         ; Offset 2
move.w    #339,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
lea       $A(sp),sp    ; Stack korrigieren

5.15.19 Dxopendir

Name: »Dxopendir« - öffnet ein Verzeichnis zum Lesen.
Gemdosnummer: 1296
Deklaration: int32_t Dxopendir ( int8_t *name, int16_t flag );
Beschreibung: Dxopendir ruft das normale Dopendir auf, speichert allerdings dann das zurückgegebene Handle und Flag in einer verketten Liste so wissen Dreaddir und Dxreaddir das sie bei diesem Verzeichnis wandeln müssen. Dcloseddir löscht das Handle wieder aus der Liste.

Dreaddirund Dxreaddir wandeln den zurück gegebenen Namen in Kleinbuchstaben.

Die Funktion öffnet das Verzeichnis name zum Lesen. Der Parameter flag beschreibt die Art und Weise, wie das Verzeichnis geöffnet werden soll:
flag Bedeutung
   
0 Normalmodus
In diesem Modus wird versucht, die Länge von Dateinamen nicht zu begrenzen. Darüber hinaus gibt Dreaddir in diesem Modus eine Indexnummer (ähnlich den UNIX inode's) in den ersten 4 Bytes des Dateinamens zurück.
1 Kompatibilitätsmodus
In diesem Modus verhalten sich Dateisysteme so, als würden Fsfirst- bzw. Fsnext-Aufrufe benutzt. Insbesondere werden Dateinamen nach DOS-Konvention auf 8+3 Zeichen verkürzt, wenn dies möglich ist.


Neuere Programme sollten nach Möglichkeit immer den Normalmodus benutzen, um die volle Funktionalität zu nutzen.
Ergebnis: Die Funktion liefert im Erfolgsfall eine 32bit Verzeichnis-Handle. Diese darf auch negativ sein, enthält aber auf keinen Fall den Wert 0xff im obersten Byte, wodurch es von Fehlern unterschieden werden kann.

Im Fehlerfall sind folgende Rückgabewerte möglich:
EPTHNF : name ist kein gültiges Verzeichnis
EACCDN : Das Verzeichnis ist von diesem Programm nicht ansprechbar.
ENSMEM : Der Kernel kann für diese Operation keinen Speicher allozieren.
Verfügbar: Wenn die Systemerweiterung Dir_Lwr (liegt Égale 4.2 bei) installiert ist. Legt den Cookie 'DYDL' an.
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dclosedir   Dreaddir   Drewinddir   Pdomain

5.15.19.1 Bindings für Dxopendir

C: int32_t Dxopendir ( int8_t *name, int16_t flag );
Assembler:
move.w    flag,-(sp)   ; Offset 6
pea       name         ; Offset 2
move.w    #1296,-(sp)  ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #8,sp        ; Stack korrigieren

5.15.20 Dxreaddir

Name: »Dxreaddir« - Verzeichnis Informationen lesen.
Gemdosnummer: 322, (0x142)
Deklaration: int32_t Dxreaddir ( int16_t ln, int32_t dirh, int8_t *buf, XATTR *xattr, int32_t *xr );
Beschreibung: Die Funktion liefert die nächste Datei aus dem Verzeichnis mit dem Handle dirh. Der Dateiname und der optionale 4 Bytes große Dateiindex werden in dem durch buf spezifizierten Puffer abgelegt.

Der Dateiindex wird weggelassen, wenn bei Dopendir der Kompatibilitätmodus angegeben wurde. Wenn zwei Dateinamen den gleichen Index besitzen, stehen sie für die selbe Datei.

MagiC liefert für FAT-Dateisysteme die folgenden Index-Daten:
  • Verzeichnisse: Startcluster im Motorola-Format
  • sonstige Dateien:
    Hiword = Startcluster des Verzeichnisses
    Loword = Position innerhalb des Verzeichnisses >> 5


Dieses Verfahren ist ähnlich wie das, welches Linux und Solaris verwenden. Nachteil ist, daß Dateien beim Verschieben ihren Index ändern.

Der Parameter ln gibt die Länge des aufnehmendes Puffers buf an. Die erweiterten Dateiattribute werden analog zu Fxattr in der Struktur xattr abgelegt, wobei symbolische Links nicht aufgelöst werden.

Hinweis: Dieser Teil des Aufrufs kann fehlschlagen, obwohl der Dateiname lesbar war. In diesem Fall wird ein getrennter Returncode in dem long-Wert abgelegt, auf das der Parameter xr zeigt.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
E_OK : kein Fehler aufgetreten.
ENMFIL : keine weiteren Dateien gefunden.
ERANGE : der aufnehmende Puffer ist nicht groß genug.
Verfügbar: MagiC ab Version 3.0, ab MiNT 1.11
Gruppe: Verzeichnisfunktionen
Querverweis: Binding   Dreaddir   Dopendir   Dclosedir   Drewinddir

5.15.20.1 Bindings für Dxreaddir

C: int32_t Dxreaddir ( int16_t ln, int32_t dirh, int8_t *buf, XATTR *xattr, int32_t *xr );
Assembler:
pea       xr           ; Offset 16
pea       xattr        ; Offset 12
pea       buf          ; Offset  8
move.l    dirh         ; Offset  4
move.w    ln           ; Offset  2
move.w    #322,-(sp)   ; Offset  0
trap      #1           ; GEMDOS aufrufen
lea       $14(sp),sp   ; Stack korrigieren

HomeGEMDOSSystemfunktionenZeichenweise Ein-/Ausgabe