HomeGEMDOSgemdos-TrapDatum und Uhrzeit

5.9 Dateifunktionen

Fattrib   Dateiattribute ändern oder ermitteln.
Fchmod    Berechtigung für Dateizugriffe setzen.
Fchown    Berechtigung für Dateizugriffe ändern.
Fclose    Datei schließen.
Fcntl     Kontrolloperationen auf einem File ausführen.
Fcreate   Datei anlegen.
Fdatime   Änderungsdatum einer Datei ermitteln oder ändern.
Fdelete   Datei löschen.
Ffchmod   changes access permissions for an open file.
Ffchown   changes ownership of an open file to uid and gid respectively.
Fdup      Dateihandle duplizieren.
Fforce    Umlenken von Ein-/Ausgaben von Standardkanälen.
Fgetchar  Zeichen aus einer Datei lesen.
Fgetdta   Diskettenübertragungsadresse ermitteln.
Finstat   Eingabestatus für ein File festlegen.
Flink     Link auf ein File erzeugen.
Flock     File Record sperren oder freigeben.
Fmidipipe MIDI Ein-/Ausgabe umlenken.
Fopen     Datei öffnen.
Foutstat  Ausgabestatus für ein File festlegen.
Fpipe     Pipe anlegen.
Fputchar  Zeichen in ein File ausgeben.
Fread     Aus Datei lesen.
Freadlink Inhalt eines symbolischen Links festlegen.
Frename   Datei umbenennen.
Fseek     Zeiger auf bestimmte Position innerhalb einer Datei setzen.
Fselect   Auswählen von Filedeskriptoren.
Fsetdta   Diskettenübertragungsadresse ändern.
Fsfirst   Ersten Eintrag in Verzeichnis suchen.
Fsnext    Nächsten Eintrag in Verzeichnis suchen.
Fsymlink  Symbolischen Link auf ein File erzeugen.
Fwrite    In Datei schreiben.
Fxattr    Erweiterte Fileattribute ermitteln.

Querverweis: Verzeichnisfunktionen   XBIOS-Laufwerksfunktionen   Test auf Pipes

5.9.1 Fattrib

Name: »file attribute« - Dateiattribut ermitteln oder setzen.
Gemdosnummer: 67
Deklaration: int16_t Fattrib ( const int8_t *filename, int16_t wflag, int16_t attrib );
Beschreibung: Die GEMDOS-Routine Fattrib ermittelt oder setzt die Attribute einer Datei. Es gilt:
Parameter Bedeutung
   
filename Dateiname der entsprechenden Datei
wflag
0 = Attribute auslesen
1 = Attribute setzen
attrib Dateiattribute
Bit-0: Datei ist schreibgeschützt
Bit-1: Datei ist versteckt
Bit-2: Systemdatei
Bit-3: Diskettenname
Bit-4: Verzeichnis
Bit-5: Archiv-Bit


Hinweis: Programme sollten nach Möglichkeit auf die Routinen Fxattr und Fchmod zurückgreifen, da diese leistungsfähiger als Fattrib sind.
Ergebnis: Die Funktion liefert folgende Resultate:
EACCDN : Zugriff verweigert
EFILNF : Datei nicht gefunden
EPTHNF : Verzeichnis nicht gefunden
sonst : die aktuellen Dateiattribute
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Querverweis: Binding   Fxattr

5.9.1.1 Bindings für Fattrib

C: int16_t Fattrib ( const int8_t *filename, int16_t wflag, int16_t attrib );
Assembler:
move.w    attrib,-(sp) ; Offset 8
move.w    wflag,-(sp)  ; Offset 6
pea       filename     ; Offset 2
move.w    #67,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
lea       $A(sp),sp    ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H43,L:filename%,W:wflag%,W:attrib%)

5.9.2 Fchmod

Name: »Fchmod« - Berechtigung für Dateizugriffe setzen.
Gemdosnummer: 306
Deklaration: int32_t Fchmod ( int8_t *name, int16_t mode );
Beschreibung: Die Funktion ändert die Zugriffsrechte für die Datei name. Der Parameter mode enthält die neuen Zugriffsrechte:

Zugriff durch mode Bedeutung
Besitzer der 0400 Leseberechtigung
Datei 0200 Schreibberechtigung
  0100 Ausführungsrecht
     
Gruppe der 0040 Leseberechtigung
Datei 0020 Schreibberechtigung
  0010 Ausführungsrecht
     
Alle anderen 0004 Leseberechtigung
Benutzer 0002 Schreibberechtigung
  0001 Ausführungsrecht


Für ausführbare Dateien gilt:
mode Bedeutung
   
04000 effektive UID des Prozesses auf die UID dessen setzen, der diesen Prozeß ausführt.
02000 effektive GID des Prozesses auf die GID dessen setzen, der diesen Prozeß ausführt.
01000 Die Datei ist ein Verzeichnis
Nur der Datei- bzw. Verzeichnis-Eigentümer (oder root) können Dateien in diesem Verzeichnis löschen.
???? Die Datei ist ein Shared-Text Programm
Nach der Abarbeitung wird das Programm nicht aus dem Speicher entfernt und muß dem entsprechend für eine erneute Bearbeitung nicht nachgeladen werden.


Hinweis: Nicht alle Filesysteme müssen alle Möglichkeiten unterstützen. Nicht unterstützte Zugriffsrechte werden dann ignoriert. Ausführungsrecht für ein Verzeichnis bedeutet, daß in diesem Verzeichnis nach einem Namen bzw. einer Namenskomponente gesucht werden darf.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
E_OK   : kein Fehler aufgetreten.
EFILNF : Datei nicht gefunden.
EPTHNF : Pfad zur Datei nicht gefunden.
EACCDN : Die EUID des aufrufenden Prozesses unterscheidet sich von der UID des Dateibesitzers und ist auch nicht die des Kernels (0).
Verfügbar: Verfügbar, wenn ein 'MiNT' Cookie mit einer Versionsnummer von mindestens 0.90 existiert.
Gruppe: Dateifunktionen
Querverweis: Binding   Fattrib   Fxattr   XFS-Konzept in MagiC

5.9.2.1 Bindings für Fchmod

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

5.9.3 Fchown

Name: »Fchown« - Eigentümer/Gruppenkennungen ändern.
Gemdosnummer: 305
Deklaration: int32_t Fchown ( int8_t *name, int16_t uid, int16_t gid );
Beschreibung: Die Funktion ändert die Benutzer-/Gruppenkennung der Datei name, die wiederum die Zugriffsrechte der Datei regeln.

Dieser Aufruf kann nur von einem Prozeß erfolgen der eine effektive Benutzerkennung (EUID) hat, die 0 ist, oder die der UID der Datei entspricht. Im letzteren Fall muß die neue UID der alten entsprechen, und darüber hinaus der aufrufende Prozeß Mitglied der Gruppe mit der Gruppennummer GID sein.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
E_OK : kein Fehler aufgetreten.
EINVFN : das Filesystem unterstützt nicht das Konzept von Benutzer-/Gruppenkennungen (Beispiel: TOS-FS).
EACCDN : Die EUID des aufrufenden Prozesses differiert von der UID des Dateibesitzers und ist auch nicht 0.
Verfügbar: Verfügbar, wenn ein 'MiNT' Cookie mit einer Versionsnummer von mindestens 0.90 existiert.
Gruppe: Dateifunktionen
Querverweis: Binding   Fchmod   Fxattr   XFS-Konzept in MagiC

5.9.3.1 Bindings für Fchown

C: int32_t Fchown ( int8_t *name, int16_t uid, int16_t gid );
Assembler:
move.w    gid,-(sp)    ; Offset 8
move.w    uid,-(sp)    ; Offset 6
pea       name         ; Offset 2
move.w    #305,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
lea       $A(sp),sp    ; Stack korrigieren

5.9.4 Fclose

Name: »file close« - Datei schließen.
Gemdosnummer: 62
Deklaration: int16_t Fclose ( int16_t handle );
Beschreibung: Die GEMDOS-Routine Fclose schließt eine Datei mit der Dateikennung handle.

Hinweis: Im Netzwerk wird das aktive Locking aufgehoben. Beim Schließen von Standardkanälen wird ab GEMDOS-Version 0.15 wieder der ursprüngliche Kanal eingesetzt.
Ergebnis: Die Funktion liefert folgende Resultate:
E_OK kein Fehler aufgetreten
EIHNDL falsche Dateikennung
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Querverweis: Binding   Fopen

5.9.4.1 Bindings für Fclose

C: int16_t Fclose ( int16_t handle );
Assembler:
move.w    handle,-(sp)  ; Offset 2
move.w    #62,-(sp)     ; Offset 0
trap      #1            ; GEMDOS aufrufen
addq.l    #4,sp         ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H3E,W:handle%)

5.9.5 Fcntl

Name: »Fcntl« - Kontrolloperationen auf einem File ausführen.
Gemdosnummer: 260
Deklaration: int32_t Fcntl ( int16_t fh, int32_t arg, int16_t cmd );
Beschreibung: Die Funktion führt verschiedene Kontrolloperationen auf der Datei mit der Handle fh duch. Der Parameter cmd beschreibt die gewünschte Operation, und kann folgende Werte annehmen (arg ist dabei vom gewählten Kommando abhängig):

F_DUPFD (0):
Dupliziert das angegebene Datei-Handle. Für das neue Intervall gilt: arg <= Handle < 32. Falls in dem angegebenen Bereich keine freien Handles existieren, wird die Fehlermeldung ENHNDL zurückgegeben. Ein Aufruf von Fdup (handle) ist also äquivalent zu Fcntl (handle, 6L, F_DUPFD).

F_GETFD (1):
Dieses Kommando gibt das nicht-vererbungs-Flag für das Handle fh zurück. Das Flag ist 0, wenn per Pexec gestartete Tochterprozesse die angegebene Datei erben sollen, anderenfalls hat es den Wert 1. Der Parameter arg besitzt keine Bedeutung.

F_SETFD (2):
Dieses Kommando setzt das nicht-vererbungs-Flag für das Handle f. arg gibt an, ob ein mittels Pexec gestarteter Child Processes die Dateihandle erbt. Ein Wert von 1 steht für nicht vererben, ein Wert von 0 für vererben. Der Defaultwert des Flags ist 0 für die Standard GEMDOS-Handles im Bereich von 0...5 und 1 für alle anderen, also nicht-Standard-Handles.

F_GETFL (3):
Dieses Kommando gibt die Dateihandle-Flags zurück, die durch den Benutzer verändert werden können. Dabei handelt es sich um den bei Fopen angegebenen Parameter mode, sofern dieser nicht durch einen anderen Aufruf von Fcntl verändert worden ist.

F_SETFL (4):
Dieses Kommando setzt die Dateihandle-Flags neu, die durch den Benutzer verändert werden können (andere Bits werden ignoriert, und sollten auf den Wert 0 gesetzt werden). Es ist nicht möglich, den Schreib-Lese Modus bzw. die Modi für Filesharing zu verändern.

F_GETLK (5):
Dieses Kommando testet auf einen Lock auf einer Datei. Der Parameter arg ist ein Zeiger auf eine flock-Struktur, in der Informationen über einen Datei-Lock gespeichert sind. Falls ein Lock existiert, wird er in die Struktur kopiert. Dabei wird in der Komponenten l_pid die PID des sperrenden Prozesses vermerkt. Falls kein Lock existiert, wird die Komponente l_type auf den Wert F_UNLCK gesetzt. Für den Fall, daß der Lock von einem anderen Rechner im Netzwerk gehalten wird, wird die Komponente l_pid auf einen vom NFS (Netzwerk-Filesystem) definierten Wert gesetzt. Für diesen Wert gilt: 0x1000 <= l_pid <= 0xffff. Man denke daran, daß normale PID's einen Wert kleiner als 1000 besitzen.

F_SETLK (6):
Dieses Kommando setzt (l_type = F_RDLCK oder F_WRLCK) bzw. löscht (l_type = F_UNLCK) einen beratenden Lock auf eine Datei. Falls diese eine FIFO-Queue (First-in-First-Out) ist, muß die gesamte Datei auf einmal behandelt werden. Für den Fall, daß der Lock mit von anderen Prozessen gesetzten Locks kollidiert, wird der Wert ELOCKED zurückgegeben. Wenn versucht wird, einen nicht-existierenden Lock zu löschen, wird der Wert ENSLOCK zurückgeliefert. Zu beachten ist, daß sich Read-Locks überlappen dürfen, Write-Locks hingegen nicht. Falls eine gelockte Datei geschlossen wird, oder der entsprechende Prozess terminiert, werden alle gesetzten Locks automatisch aufgehoben (d.h. zurückgesetzt).

F_SETLKW (7):
Analog F_SETLK, mit dem Unterschied, daß wenn der Lock mit solchen von anderen Prozessen kollidiert, nicht ELOCKED zurückgeliefert wird, sondern der sperrende Prozess suspendiert wird, bis das Locking vom anderen Prozess aufgehoben wird.

FSTAT (0x4600):
Ermittelt die Attribute einer Datei. Im Parameter arg wird ein Zeiger auf eine XATTR-Struktur zurückgeliefert, so als ob ein Aufruf von Fxattr gemacht worden wäre. Das Kommando wird in MagiC ab Version 3.0 unterstützt.

FIONREAD (0x4601):
Im Parameter arg wird ein Zeiger auf einen Long-Wert zurückgegeben, in dem die Anzahl der Bytes angegeben ist, die z.Zt. vom angegebenen Datei-Handle gelesen werden können, ohne daß der Prozess blockiert wird. Die Angabe ist nicht zwingend korrekt, da die genaue Anzahl in einigen Fällen nur geschätzt werden kann. Das Kommando wird in MagiC ab Version 3.0 unterstützt.

FIONWRITE (0x4602):
Analog FIONREAD, nur wird hier die Anzahl der Bytes, die z.Zt. geschrieben werden können, ausgegeben. Das Kommando wird in MagiC ab Version 3.0 unterstützt.

FUTIME (0x4603):
z.Zt. keine Informationen bekannt.

FTRUNCATE (0x4604):
Der Parameter arg ist ein Zeiger auf einen Long-Wert, der die neue Länge der zu verkürzenden Datei enthält. Das Kommando wird in MagiC ab Version 3.0 unterstützt.

FIOEXECPT (0x4605):
Im Parameter arg wird ein Zeiger auf einen Long-Wert zurückgegeben, in dem steht, ob sich die Datei in einem Ausnahmezustand befindet (1) oder nicht (0).

Die folgenden Kommandos sind auf alle Terminal-Devices wie die Console oder ein Pseudo-Terminal anzuwenden:

TIOCGETP (0x5400):
Dieses Kommando gibt über den Parameter arg einen Zeiger auf eine sgttyb-Struktur zurück, in der die Parameter des Terminals definiert sind.

TIOCSETN (0x5401):
Über dieses Kommando kann ein neue sgttyb-Struktur gesetzt werden, welche die Parameter des Terminals festlegt. Es müssen zeurst die Parameter des Terminals erfragt werden, die gewünschten verändert und dann mit diesem Kommando gesetzt werden.

TIOCGETC (0x5402):
Dieses Kommando liefert über den Parameter arg einen Zeiger auf eine tchars-Struktur zurück, in welcher die Terminal-Kontrollzeichen definiert sind.

TIOCSETC (0x5403):
Über dieses Kommando können neue Terminal-Kontrollzeichen gesetzt werden. Dazu übergibt man in arg einen Zeiger auf eine tchars-Struktur, in welcher die Kontrollzeichen definiert sind. Wird ein Zeichen auf 0 gesetzt, so wird die entsprechende Funktion gesperrt.

TIOCGLTC (0x5404):
Dieses Kommando liefert über den Parameter arg einen Zeiger auf eine ltchars-Struktur zurück, in welcher die erweiterten Terminal-Kontrollzeichen definiert sind.

TIOCSLTC (0x5405):
Über dieses Kommando können neue erweiterte Terminal-Kontrollzeichen gesetzt werden. Dazu übergibt man in arg einen Zeiger auf eine ltchars-Struktur, in welcher die Kontrollzeichen definiert sind. Wird ein Zeichen auf 0 gesetzt, so wird die entsprechende Funktion gesperrt.

TIOCGPGRP (0x5406):
Dieses Kommando liefert über den Parameter arg einen Zeiger auf die Prozess-Gruppe des Terminals zurück.

TIOCSPGRP (0x5407):
Über dieses Kommando kann die Prozess-Gruppe des Terminals eingestellt werden. Dazu wird über den Parameter arg ein Zeiger auf die entsprechende Prozess-Gruppe übergeben. Sollten Prozesse aus anderen Gruppen versuchen, auf dieses Terminal (lesend oder schreibend) zuzugreifen, so werden ihnen Job-Control-Signale (SIGTSTP etc.) gesendet.

TIOCFLUSH (0x5408):
Über dieses Kommando kann die Art des Flushings spezifiziert werden. Dazu wird über den Parameter arg ein Zeiger auf einen Long-Wert übergeben, der die gewünschte Art beschreibt. Dabei gilt:
Wert Bedeutung
   
0 Ein- und Ausgabe flushen
Bit-0 gesetzt Eingabe flushen
Bit-1 gesetzt Ausgabe flushen


TIOCSTOP (0x5409):
Dieses Kommando unterbricht die Ausgabe auf das Terminal (ähnlich der Flußkontrolle per Control-S). Der Parameter arg ist in diesem Zusammenhang ohne Bedeutung.

TIOCSTART (0x540a):
Dieses Kommando sorgt dafür, daß die Ausgabe des Terminals wieder aufgenommen wird (ähnlich der Flußkontrolle per Control-Q). Der Parameter arg ist in diesem Zusammenhang ohne Bedeutung.

TIOCGWINSZ (0x540b):
Über dieses Kommando kann die Fenstergröße für ein Textfenster erfragt werden. Dazu wird über den Parameter arg ein Zeiger auf eine winsize-Struktur zurückgeliefert. Falls eine Komponente dieser Struktur den Wert 0 besitzt, so bedeutet dies, daß der entsprechende Wert unbekannt ist.

TIOCSWINSZ (0x540c):
Über dieses Kommando kann die Fenstergröße gesetzt werden. Dazu wird über den Parameter arg ein Zeiger auf eine winsize-Struktur übergeben, die die notwendigen Informationen enthält. Zu beachten ist in diesem Zusammenhang, daß der Kernel den Aufruf zwar bearbeitet, die Ausführung aber Window-Managern überläßt. Diese senden auch das Signal SIGWINCH, falls notwendig.

TIOCGXKEY (0x540d):
Dieses Kommando ermittelt die Definition einer Funktions- bzw. Cursortaste. Dazu wird über den Parameter arg ein Zeiger auf eine xkey-Struktur übergeben. Die Komponente xk_num der Struktur muß dabei mit der gewünschten Taste gefüllt werden:

xk_num Taste
0-9 F1-F10
10-19 F11-F20 (über shift erreichbar)
20 Cursor hoch
21 Cursor runter
22 Cursor nach rechts
23 Cursor nach links
24 Help
25 Undo
26 Insert
27 Clr/Home
28 Shift + Cursor hoch
29 Shift + Cursor runter
30 Shift + Cursor nach rechts
31 Shift + Cursor nach links


Der zu der Taste gehörende String (es gilt die Konvention der Sprache C) wird über die Komponente xk_def zurückgeliefert.

TIOCSXKEY (0x540e):
Über dieses Kommando kann die Definition einer Funktions- bzw. Cursortaste gesetzt werden. Dazu übergibt man über den Parameter arg einen Zeiger auf eine xkey-Struktur, in der die Komponenten xk_num und xk_def bereits gesetzt sein müssen. Nach Ausführung des Kommandos wird dann per Fread der in xk_def angegebene String (statt ASCII-0) zurückgeliefert. Diese Übersetzung findet jedoch nur statt, wenn das Programm per Pdomain in die MiNT-Domain gesetzt wurde und die Zeichen vom Terminal mittels Fread gelesen werden. Da der in xk_def übergebene String nullterminiert sein muß, können auf diese Art und Weise maximal 7 Zeichen übergeben werden.

TIOCIBAUD (0x5412):
Über dieses Kommando kann die Baudrate für die Eingabe des Terminals eingestellt werden. Dazu wird über den Parameter arg ein Zeiger auf einen Long-Wert übergeben, in dem die Baudrate angegeben ist.

TIOCOBAUD (0x5413):
Über dieses Kommando kann die Baudrate für die Ausgabe des Terminals eingestellt werden. Dazu wird über den Parameter arg ein Zeiger auf einen Long-Wert übergeben, in dem die Baudrate angegeben ist.

TIOCCBRK (0x5414):
Dieses Kommando löscht Bit-3 des TSR-Registers des Peripherie-Bausteins MFP68901.

TIOCSBRK (0x5415):
Dieses Kommando setzt Bit-3 des TSR-Registers des Peripherie-Bausteins MFP68901. Dadurch wird ein Break gesendet, sobald das Senderegister leer ist. Der Parameter arg ist in diesem Zusammenhang ohne Bedeutung.

TIOCGFLAGS (0x5416):
Dieses Kommando gibt über den Parameter arg einen Zeiger auf die Terminal-Kontrollflags zurück. Dieses Kommando gibt in den unteren Bits des LONGS, auf den der Parameter arg zeigt, die Terminal-Kontrollflags (z.B. Anzahl Stop-Bits und Daten-Bits) zurück. Folgend Bitmasken sind möglich:

Maske Bedeutung
0x0001 1 Stop-Bit
0x0002 1.5 Stop-Bits
0x0003 2 Stop-Bits
0x0000 8 Daten-Bits
0x0004 7 Daten-Bits
0x0008 6 Daten-Bits
0x000C 5 Daten-Bits


TIOCSFLAGS (0x5417):
Dieses Kommando setzt neue Terminal-Kontrollflags, die über den Parameter arg übergeben werden.

TIOCOUTQ (0x5418):
Dieses Kommando gibt in arg einen Zeiger auf einen Long-Wert zurück, in dem die Anzahl der Bytes im Ausgabepuffer gespeichert ist.

TIOCSETP (0x5419):
Funktioniert analog zu TIOCSETN, mit dem Unterschied, daß (wenn das Terminal TIOCOUTQ unterstützt) die Funktion erst dann zurückkehrt, wenn der Ausgabepuffer leer ist.

TCURSOFF (0x6300):
Dieses Kommando schaltet den Cursor des Terminals aus.

TCURSON (0x6301):
Dieses Kommando schaltet den Cursor des Terminals ein.

TCURSBLINK (0x6302):
Dieses Kommando schaltet den Cursor des Terminals auf Blinken. Die Blinkrate läßt sich per TCURSSRATE einstellen.

TCURSSTEADY (0x6303):
Dieses Kommando schaltet das Cursor-Blinken des Terminals wieder aus.

TCURSSRATE (0x6304):
Dieses Kommando setzt die Cursor-Blinkrate des Terminals. Dazu wird in arg ein Zeiger auf einen Word-Wert übergeben, der angibt, nach wievielen Vertical-Blanks der Cursor einmal invertiert werden soll.

TCURSGRATE (0x6305):
Dieses Kommando ermittelt die Cursor-Blinkrate des Terminals. Diese wird in einem Word-Wert zurückgegeben, auf den arg zeigt.

Die folgenden Kommandos sind nur auf (als Dateien geöffnete) Prozesse anwendbar. Um den eigenen Prozess als Datei zu öffnen, muß als Pfad für Fopen 'U:PROC\prozessname.-1' angegeben werden. Dabei wählt die Extension -1 den eigenen, und -2 den Parent-Prozess.

PBASEADDR (0x5002):
Im Parameter arg wird ein Zeiger auf die Adresse der Basepage, des als Datei geöffneten Prozesses zurückgegeben. Das Kommando wird in MagiC ab Version 3.0 unterstützt.

PPROCADDDR (0x5001):
Im Parameter arg wird ein Zeiger auf die Adresse des PCB (Prozess-Control-Blocks) zurückgegeben.

PCTXTSIZE (0x5003):
Im Parameter arg wird ein Zeiger auf einen Long-Wert geliefert, in dem die Länge des Prozess-Context-Blocks angegeben ist. Zwei dieser Strukturen befinden sich im Speicher vor dem PCB, dessen Adresse mit PPROCADDR erfragt werden kann. Die erste Struktur ist dabei für den aktuellen Prozesskontext verantwortlich, während die zweite den gespeicherten Kontext des letzten Systemaufrufs enthält.

PSETFLAGS (0x5004):
Dieses Kommando setzt die Programmflags (entsprechend denen im Programmheader. In arg wird dazu ein Zeiger auf einen Long-Wert übergeben, dessen untere 16 Bits die Programmflags darstellen.

PGETFLAGS (0x5005):
Dieses Kommando ermittelt die aktuellen Programmflags. Über den Parameter arg wird dabei ein Zeiger auf diese Flags zurückgegeben.

PTRACESFLAGS (0x5006):
Dieses Kommando setzt die Prozess-Tracing-Flags. Im Parameter arg wird ein Zeiger auf einen Word-Wert übergeben, der die Flags repräsentiert:
P_ENABLE = 1 (Tracen einschalten)
P_DOS = 2 (GEMDOS-Aufrufe tracen)
P_BIOS = 4 (BIOS-Aufrufe tracen)
P_XBIOS = 8 (XBIOS-Aufrufe tracen)


PTRACEGFLAGS (0x5007):
Dieses Kommando ermittelt die aktuellen Prozess-Tracing Flags. Über den Parameter arg wird ein Zeiger auf diese Flags zurückgegeben.

PTRACEGO (0x5008): (ab MC-68020 Prozessor)
PTRACEFLOW (0x5009):
PTRACESTEP (0x500a):
PTRACE11 (0x500b):
Diese Funktionen sollen einmal das Tracen von Prozessen ermöglichen. Der zu tracende Prozess muß sich dafür im Zustand 'suspendiert' befinden. Er wird durch die Trace Funktion wieder aufgeweckt. Diese Funktionen sind z.Zt. jedoch noch nicht implementiert.

PLOADINFO (0x500c):
Dieses Kommando gibt in arg einen Zeiger auf die ploadinfo Struktur zurück, in der Programmname und Kommandozeile gespeichert sind.

PFSTAT (0x500d):
Dieses Kommando entspricht FSTAT. Es ermittelt die erweiterten Attribute der zum Prozess gehörenden Programmdatei.

Die folgenden Kommandos sind nur auf Dateien anwendbar, die Shared Memory repräsentieren:

SHMGETBLK (0x4d00):
Dieses Kommando liefert die Adresse eines per SHMSETBLK allozierten Speicherblocks zurück (bzw. einen Nullzeiger bei Fehlern). Aus Kompatibilitätsgründen muß der Parameter arg auf den Wert 0 gesetzt werden. Hinweis: Verschiedene Prozesse können den Speicherblock an unterschiedlichen Stellen in ihrem Adressraum sehen. Aus diesem Grund darf ein Shared-Memory-Bereich keine absoluten Zeiger auf Daten enthalten! Das Kommando wird in MagiC ab Version 3.0 unterstützt.

SHMSETBLK (0x4d01):
Im Parameter arg wird ein Zeiger auf einen Speicherblock übergeben, welcher vorher per Malloc/Mxalloc alloziert wurde. Der Speicher wird nun unter dem Dateinamen der Datei mit Handle fh zum Sharing angeboten. Die Datei muß dazu im Unterverzeichnis U:\SHM angelegt werden. Der Block wird derart markiert, daß er nicht beim Beenden des Prozesses freigegeben wird. Die Länge wird ermittelt und sowohl für die geöffnete Datei verwendet, als auch in das Verzeichnis eingetragen. Ungültige Blockadressen führen zum Fehlercode EIMBA oder zu einem Bus- oder Adreßfehler. Das Kommando wird in MagiC ab Version 3.0 unterstützt.

Die folgenden Kommandos sind im Zusammenhang mit CD-ROM's interessant:

CDROMREADOFFSET (0x4300):
Dieses Kommando ermittelt die Blocknummer des ersten Sektors der letzten Session einer Multi-Session-CD. Der Parameter arg enthält nach dem Aufruf diese Blocknummer.

CDROMPAUSE (0x4301):
Dieses Kommando veranlaßt ein CD-ROM beim Abspielen einer Audio-CD in den Status Pause zu treten.

CDROMRESUME (0x4302):
Dieses Kommando veranlaßt ein CD-ROM das Abspielen einer Audio-CD fortzusetzen (Pause wird aufgehoben).

CDROMPLAYMSF (0x4303):
Dieses Kommando startet eine Audio-Wiedergabe. Der Parameter arg ist ein Zeiger auf eine cdrom_msf-Struktur, in die Anfangs- und Endzeit in MSF-Notation einzutragen sind.

CDROMPLAYTRKIND (0x4304):
Dieses Kommando startet eine Audio-Wiedergabe. Der Parameter arg ist ein Zeiger auf eine cdrom_ti-Struktur, in die Start- und Endposition in Track/Index-Schreibweise einzutragen sind. Bei den meisten Audio-CD's aus dem POP Bereich sind die Tracks nicht weiter eingeteilt. Viele Klassik-CD's haben aber auch innerhalb der Tracks noch eine feinere Einstellung in Indices. Achtung: Nicht jedes CD-ROM kann gezielt Indizes ungleich Eins ansteuern!

CDROMREADTOCHDR (0x4305):
Dieses Kommando erlaubt es, Informationen über den Aufbau einer CD zu ermitteln. Der Parameter arg ist ein Zeiger auf eine cdrom_tochdr-Struktur, in welche der erste und letzte Track der CD eingetragen werden.

CDROMREADTOCENTRY (0x4306):
Dieses Kommando erlaubt es, Informationen über den Aufbau einer CD zu ermitteln. Der Parameter arg ist ein Zeiger auf eine cdrom_tocentry-Struktur, in welche die gewünschten Informationen eingetragen werden.

CDROMSTOP (0x4307):
Dieses Kommando stoppt das entsprechende Laufwerk.

CDROMSTART (0x4308):
Dieses Kommando startet das entsprechende Laufwerk, und zieht ggfs. die Schublade wieder ein.

CDROMEJECT (0x4309):
Dieses Kommando sorgt für das Ausfahren der Schublade des entsprechenden Laufwerkes.

CDROMVOLCTRL (0x430a):
Dieses Kommando erlaubt es, die Lautstärke und Kanalzuordnungen der einzelnen Audio-Kanäle zu verändern. Der Parameter arg ist ein Zeiger auf eine cdrom_volctrl-Struktur. Das Kommando ist zum entsprechenden SunOS-Aufruf kompatibel. Achtung: Das Verstellen der Lautstärke ist nicht bei allen Geräten möglich!

CDROMSUBCHNL (0x430b):
Dieses Kommando ermittelt die aktuellen Positionsdaten, sowie den Audio-Status. Der Parameter arg ist ein Zeiger auf eine cdrom_subchnl-Struktur.

CDROMREADMODE2 (0x430c):
Dieses Kommando ermöglicht das Lesen von Modus-2 Sektoren. Solche Sektoren werden bei XA-CDs (Beispiel: Photo-CD ohne Fehlerkorrektur oder Video-CD) verwendet und enthalten 2336 Bytes. Der Parameter arg ist ein Zeiger auf eine cdrom_read Struktur. Achtung: Nicht alle Geräte können diese Sektortypen lesen, und nicht alle Treiber bieten diese Funktion an.

CDROMREADMODE1 (0x430d):
Dieses Kommando ermöglicht das Lesen von Modus-1 Sektoren. Solche Sektoren sind 2048 Bytes groß, und werden auf normalen CD-ROMs benutzt. Der Parameter arg ist ein Zeiger auf eine cdrom_read-Struktur. Achtung: Nicht alle Geräte können diese Sektortypen lesen, und nicht alle Treiber bieten diese Funktion an.

CDROMPREVENTREMOVAL (0x430e):
Dieses Kommando sperrt die Auswurffunktion des entsprechenden CD-ROMs. Dies kann z.B. nützlich sein, wenn das Gerät an einem öffentlichen Ort steht, und man dem CD-Klau vorbeugen will.

CDROMALLOWRMOVAL (0x430f):
Dieses Kommando gibt den Auswurf des entsprechenden CD-ROMs wieder frei.

CDROMAUDIOCTRL (0x4310):
Diese Kommando erlaubt es, die Lautstärke und Kanalzuordnungen der einzelnen Audio-Kanäle zu verändern. Der Parameter arg ist ein Zeiger auf eine cdrom_audioctrl-Struktur. Indem man die Komponente set dieser Struktur auf den Wert Null setzt, können die aktuellen Einstellungen erfragt werden. Achtung: Das Verstellen der Lautstärke ist nicht bei allen Geräten möglich!

CDROMREADDA (0x4311):
Dieses Kommando ermöglicht das Lesen von Digital-Audio (DA) Sektoren. Solche Sektoren sind 2352 Bytes groß, und enthalten pro Sektor 588 Samples im 16-Bit-Stereo-PCM Format. Der Parameter arg ist ein Zeiger auf eine cdrom_read Struktur. Achtung: Nicht alle Geräte können diese Sektortypen lesen, und nicht alle Treiber bieten diese Funktion an.

CDROMGETMCN (0x4313):
Dieses Kommando ermittelt die Media Catalog Number, die theoretisch benutzt werden kann, um eine CD einwandfrei zu identifizieren. Leider ist diese Information auf den allerwenigsten CDs vorhanden. Der Parameter arg ist ein Zeiger auf eine cdrom_mcn-Struktur.

CDROMGETTISRC (0x4314):
Dieses Kommando ermittelt den Track-International-Standard Recording-Code, der eine eindeutige Kennzeichnung für einzelne Tracks darstellen soll. Der Parameter arg ist ein Zeiger auf eine cdrom_tisrc-Struktur.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
>= 0 : kein Fehler aufgetreten (Abweichungen s.o.)
EIHNDL : ungültiges Datei-Handle.
EINVFN : Kommando kann mit dem Handle fh nicht ausgeführt werden.
Verfügbar: Seit der ersten in MultiTOS integrierten MiNT Version 1.04 und MagiC ab Version 3.0.
Gruppe: Dateifunktionen
Querverweis: Binding   Fdup   Flock   Fopen   Fxattr   Pgetpgrp   Psetpgrp   Metaioctl   CD-ROM Definitionen

5.9.5.1 Bindings für Fcntl

C: int32_t Fcntl ( int16_t fh, int32_t arg, int16_t cmd );
Assembler:
move.w    cmd,-(sp)    ; Offset 8
move.l    arg,-(sp)    ; Offset 4
move.w    fh,-(sp)     ; Offset 2
move.w    #260,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
lea       $A(sp),sp    ; Stack korrigieren

5.9.6 Fcreate

Name: »file create« - Datei anlegen.
Gemdosnummer: 60
Deklaration: int16_t Fcreate ( const int8_t *fname, int16_t attr );
Beschreibung: Die GEMDOS-Routine Fcreate legt eine neue Datei mit dem angegebenen Namen und Attributen an oder löscht den Inhalt einer vorhandenen. Es gilt:
Parameter Bedeutung
   
fname Zeiger auf den Dateinamen
attr Dateiattribute
Bit-0: Datei ist schreibgeschützt
Bit-1: Datei ist versteckt
Bit-2: Systemdatei
Bit-3: Diskettenname
Bit-5: Archiv Bit


Hinweis: Im Netzwerk setzt das Erzeugen einer Datei die Exclusivität. Ob das zugrundeliegende GEMDOS netzwerkfähig ist, kann über den Cookie _FLK ermittelt werden.

Anmerkung zu MagiC: Ist Bit-3 in attr gesetzt, wird die XFS-Funktion xfs_wlabel aufgerufen. Wenn diese Funktion ohne Fehler ausgeführt werden kann, wird als Rückgabewert 0x0000fffc zurückgegeben. Dies entspricht einem Handle für die Datei NUL: bzw. U:\DEV\NULL. Dieses Feature ist jedoch nur noch aus Kompatibilitätsgründen vorhanden; ab MagiC 3 sollte besser auf die Funktion Dwritelabel zurückgegriffen werden.

Die angegebenen Attribute existieren nur unter DOS-Dateisystemen und werden von anderen Dateisystemen ignoriert oder simuliert. Beim Macintosh Dateisystem (HFS) wird z.B. nur Bit-0 von attr unterstützt.

Symbolische Links werden übrigens von dieser Funktion dereferenziert, d.h. wenn die Datei bereits als symb. Link existiert, wird die von diesem Link referenzierte Datei auf die Länge Null gesetzt.
Ergebnis: Die Funktion liefert folgende Resultate:
EPTHNF : Zugriffspfad ist unkorrekt
ENHNDL : keine freien Dateihandles mehr
EACCDN : kein Schreibzugriff möglich
sonst : Kennung der Datei
Verfügbar: Alle GEMDOS Versionen. Wird mit GEMDOS Version 0.13 eine schreibgeschützte Datei angelegt, wird ein unbrauchbares Handle zurück geliefert. GEMDOS Versionen kleiner 0.15 erlauben fälschlicherweise mehr als einen Diskettenname auf einer Diskette.
Gruppe: Dateifunktionen
Querverweis: Binding   Fopen   XFS-Konzept in MagiC

5.9.6.1 Bindings für Fcreate

C: int16_t Fcreate ( const int8_t *fname, int16_t attr );
Assembler:
move.w    attr,-(sp)   ; Offset 6
pea       fname        ; Offset 2
move.w    #60,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #8,sp        ; Stack korrigieren
GFA-Basic Handle%=Gemos(&H3c,L:fname%,W:attr)

5.9.7 Fdatime

Name: »file date and time« - Uhrzeit und Datum einer Datei ermitteln oder setzen.
Gemdosnummer: 87
Deklaration: void Fdatime ( DOSTIME *timeptr, int16_t handle, int16_t wflag );
Beschreibung: Die GEMDOS-Routine Fdatime liest bzw. setzt Datum und Uhrzeit der Erstellung einer Datei. Es gilt:
Parameter Bedeutung
   
timeptr Zeiger auf aufnehmende Struktur
handle Dateikennung
wflag
0 = Werte abfragen
1 = Werte setzen


Hinweis: Aufgrund einiger Fehler in älteren Versionen des GEMDOS, sollte die Funktion wie folgt angewendet werden:
  • Datei öffnen
  • Fdatime aufrufen
  • Datei schließen
Ergebnis: Die Funktion liefert kein direktes Ergebnis.
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Querverweis: Binding   Tgettime   Tsettime

5.9.7.1 Bindings für Fdatime

C: void Fdatime ( DOSTIME *timeptr, int16_t handle, int16_t wflag );
Assembler:
move.w    wflag,-(sp)   ; Offset 8
move.w    handle,-(sp)  ; Offset 6
pea       timeptr       ; Offset 2
move.w    #87,-(sp)     ; Offset 0
trap      #1            ; GEMDOS aufrufen
lea       $A(sp),sp     ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H57,L:timeptr%,W:handle%,W:wflag%)

5.9.8 Fdelete

Name: »file delete« - Datei löschen.
Gemdosnummer: 65
Deklaration: int16_t Fdelete ( const int8_t *fname );
Beschreibung: Die GEMDOS-Routine Fdelete löscht die mit fname bezeichnete Datei.

Hinweis: Die Funktion sollte nicht auf geöffnete Dateien angewendet werden. Ab MagiC 4 funktioniert das Löschen auch bei Dateien mit den Attributen 'Hidden' und 'System'. In MagiC werden ferner keine symbolischen Links dereferenziert, d.h. es wird der Link gelöscht, nicht die Datei oder der Ordner, auf die der Link verweist.
Ergebnis: Die Funktion liefert folgende Resultate:
E_OK kein Fehler aufgetreten
EFILNF Datei nicht gefunden
EACCDN Zugriff verweigert
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Querverweis: Binding   Fcreate

5.9.8.1 Bindings für Fdelete

C: int16_t Fdelete ( const int8_t *fname );
Assembler:
pea       fname        ; Offset 2
move.w    #65,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #6,sp        ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H41,L:fname%)

5.9.9 Fdup

Name: »file duplicate« - Datei-Handle duplizieren.
Gemdosnummer: 69
Deklaration: int16_t Fdup ( int16_t handle );
Beschreibung: Die GEMDOS-Routine Fdup erzeugt für einen Standardkanal (0-5) eine Kopie und liefert eine neue Kennung (>6) für einen Standardkanal. Es gilt:
handle Bedeutung
   
0 Tastatur (stdin)
1 Bildschirm (stdout)
2 serielle Schnittstelle (stdaux)
3 parallele Schnittstelle (stdprn)


Hinweis: In allen bekannten GEMDOS-Versionen (bis einschließlich 0.19) treten Fehler auf, wenn nach einem Fdup, ein Programm per Pexec gestartet wird. Ab MagiC 4 kann man mit Hilfe dieser Funktion auch die Gerätedateien -1,-2, -3 (systemglobal) und -4 (NULL Device) ermitteln.
Ergebnis: Die Funktion liefert folgende Resultate:
ENHNDL : keine Kennung mehr frei
EIHNDL : falsche Kennung
sonst : die gewünschte neue Kennung
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Querverweis: Binding   Fforce

5.9.9.1 Bindings für Fdup

C: int16_t Fdup ( int16_t handle );
Assembler:
move.w    handle,-(sp)  ; Offset 2
move.w    #69,-(sp)     ; Offset 0
trap      #1            ; GEMDOS aufrufen
addq.l    #4,sp         ; Stack korrigieren
GFA-Basic Phys_channel%=Gemdos(&H45,W:handle%)

5.9.10 Ffchmod

Name: »Ffchmod« - changes access permissions for an open file.
Gemdosnummer: 258 (0x0102)
Deklaration: int32_t Ffchmod ( int16_t fd, int16_t mode);
Beschreibung:
Ergebnis: Returns E_OK on success or a negative GEMDOS error code otherwise.
Verfügbar: Available as of FreeMiNT version 1.15.2
Gruppe: Dateifunktionen
Querverweis: Binding   Ffchown   Fchmod

5.9.10.1 Bindings für Ffchmod

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

5.9.11 Ffchown

Name: »Ffchown« - changes ownership of an open file to uid and gid respectively.
Gemdosnummer: 257 (0x0101)
Deklaration: int32_t Ffchown ( int16_t fd, int16_t uid, int16_t gid );
Beschreibung: This function changes ownership of an open file to uid and gid respectively.

A non privileged process can only change the ownership of a file that is owned by this user to the effective group id of the process or one of its supplementary groups.
Ergebnis: Returns E_OK on success or a negative GEMDOS error code otherwise.
Verfügbar: Available as of FreeMiNT version 1.15.2
Gruppe: Dateifunktionen
Querverweis: Binding   Ffchmod   Fchown

5.9.11.1 Bindings für Ffchown

C: int32_t Ffchown ( int16_t fd, int16_t uid, int16_t gid );
Assembler:
move.w    gid,-(sp)    ; Offset 6
move.w    uid,-(sp)    ; Offset 4
move.w    fd,-(sp)     ; Offset 2
move.w    #257,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #8,sp        ; Stack korrigieren

5.9.12 Fforce

Name: »file force« - Standard-Datei umleiten.
Gemdosnummer: 70
Deklaration: int16_t Fforce ( int16_t stdh, int16_t nonstdh );
Beschreibung: Die GEMDOS-Routine Fforce lenkt einen Standardkanal auf einen beliebigen anderen Kanal um. Es gilt:
Parameter Bedeutung
   
stdh Umzuleitender Kanal
0 = Tastatur
1 = Bildschirm
2 = serielle Schnittstelle
3 = parallele Schnittstelle
nonstdh Nummer des ersetzenden Kanals


Unter MiNT können auch die folgenden Kanäle umgeleitet werden:
-1 = Verweist auf BIOS Handle 2, leitet BIOS Ausgabe um
-2 = Verweist auf BIOS Handle 1, leitet BIOS Ausgabe um
-3 = Verweist auf BIOS Handle 0, leitet BIOS Ausgabe um
-4 = GEMDOS Handles -4 und -5 verweisen
-5 = auf MIDI Eingabe und Ausgabe. Eine Umleitung dieser Kanäle beeinflußt BIOS Handle 3.


Hinweis: Ab MagiC 4 können über diese Funktion auch die Gerätedateien -1,-2 und -3 (systemglobal) umgelenkt werden. Das NULL-Device (-4) darf allerdings nicht umgeleitet werden.

Um etwa Bildschirmausgaben auf einen Drucker umzuleiten kann eine Konstruktion wie Fforce(1, Fdup(3)) benutzt werden.
Ergebnis: Die Funktion liefert folgende Resultate:
E_OK : kein Fehler aufgetreten
EIHNDL : falsche Kennung
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Bemerkung: Diese Funktion wird oft benutzt, um die Eingabe oder Ausgabe eines Child Prozess umzuleiten. Sie sollte zusammen mit Fdup benutzt werden, um das Standardhandle wiederherzustellen, bevor sich der Child Prozess beendet. Dabei muß beachtet werden, daß jedes Dateihandle, das auf ein Standardhandle (z.B. con:) umgeleitet wird, automatisch geschlossen wird wenn sich der Child Prozess beendet und nicht vom Parent geschlossen werden darf.
Querverweis: Binding   Fdup   Verzeichnis U:\DEV

5.9.12.1 Bindings für Fforce

C: int16_t Fforce ( int16_t stdh, int16_t nonstdh );
Assembler:
move.w    nonstdh,-(sp)  ; Offset 4
move.w    stdh,-(sp)     ; Offset 2
move.w    #70,-(sp)      ; Offset 0
trap      #1             ; GEMDOS aufrufen
addq.l    #6,sp          ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H46,W:stdh%,W:nonstdh%)

5.9.13 Fgetchar

Name: »Fgetchar« - Zeichen aus einer Datei lesen.
Gemdosnummer: 263
Deklaration: int32_t Fgetchar ( int16_t fh, int16_t mode );
Beschreibung: Die Funktion liest ein Zeichen aus der Datei mit der Handle fh. Der Parameter mode ist nur dann von Interesse, wenn die geöffnete Datei ein (Pseudo-)Terminal ist. Für diesen Fall gelten die folgenden Werte:
mode Bedeutung
   
0 Raw-Mode
keine Auswertung von Kontrollzeichen.
1 Cooked-Mode
spezielle Kontrollzeichen (Control-C, Control-Z) werden gesucht und ggfs. interpretiert. Das selbe gilt für die Flußkontrolle (Control-S, Control-Q).
2 Echo-Mode
Gelesene Zeichen werden auf dem Terminal ausgegeben.


Der ASCII-Wert des gelesenen Zeichens wird im Low-Byte des Funktionsergebnisses abgelegt. Für den Fall, daß die Datei ein (Pseudo-)Terminal ist, werden Scan-Code und Shift-Status wie bei Bconin zurückgeliefert.

Die einzelnen Modi von mode können natürlich auch durch eine ODER-Operation verknüpft werden.

Achtung: Diese Funktion ist optional, daher darf ein Aufruf mit EINVFN beantwortet werden.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
>= 0 : kein Fehler, sondern das gelesene Zeichen.
0xff1a : End-of-File (EOF) wurde erkannt.
EIHNDL : ungültiges Datei-Handle.
Verfügbar: Seit der ersten in MultiTOS integrierten MiNT Version 1.04.
Gruppe: Dateifunktionen
Querverweis: Binding   Bconin   Cconin   Cauxin   Fputchar   Fread

5.9.13.1 Bindings für Fgetchar

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

5.9.14 Fgetdta

Name: »get disk transfer address« - ermittelt den Übertragungsbereich für Diskettenoperationen.
Gemdosnummer: 47
Deklaration: DTA *Fgetdta ( void );
Beschreibung: Die GEMDOS-Routine Fgetdta ermittelt die Adresse eines Buffers für Fsfirst und Fsnext.
Ergebnis: Die Funktion liefert als Ergebnis die Adresse der DTA (Disk Transfer Address).
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Bemerkung: Nach dem Start eines Programms überlappt dessen DTA die Komamndozeile. Wird keine neue DTA angelegt, überschreibt jeder Aufruf von Fsfirst oder Fsnext die Kommandozeile des Programms. Um dies zu vermeiden, sollte vor dem ersten Aufruf von Fsfirst oder Fsnext mit Fsetdta eine neue DTA angelegt werden. Vorsicht ist geboten, wenn die DTA als lokale oder Auto-Variable angelegt wird und der ursprüngliche Zustand nicht wiederhergestellt wurde, bevor der Gültigkeitsbereich der Variable verlassen wird.
Querverweis: Binding   Fsetdta   Fsfirst   Fsnext   DTA

5.9.14.1 Bindings für Fgetdta

C: DTA *Fgetdta ( void );
Assembler:
move.w    #47,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #2,sp        ; Stack korrigieren
GFA-Basic Pointer%=Gemdos(&H2F)

5.9.15 Finstat

Name: »Finstat« - Eingabestatus für ein File festlegen.
Gemdosnummer: 261
Deklaration: int32_t Finstat ( int16_t fh );
Beschreibung: Die Funktion Finstat gibt die maximale Anzahl der Bytes zurück, die aus der Datei mit dem Handle fh ohne zu Warten gelesen werden können.

Wenn die Anzahl der Bytes nicht genau angegeben werden kann, wird der Wert 1 zurückgeliefert.

Hinweis: In MagiC versucht der Kernel zunächst, den Aufruf auf Fcntl (FIONREAD) zurückzuführen. Wenn diese Subfunktion von dev_ioctl nicht existiert (d.h. der Dateitreiber liefert EINVFN), wird dev_stat aufgerufen. In diesem Fall kann nur die Aussage getroffen werden "Zeichen liegt an" (Rückgabe == 1) bzw. "kein Zeichen liegt an" (Rückgabe == 0). FAT-Dateien und Shared Memory liefern die tatsächliche Dateilänge minus der aktuellen Position. Pipes liefern die Anzahl der vorhandenen Bytes im Block.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
>= 0 : kein Fehler aufgetreten (Anzahl der Bytes).
EIHNDL : ungültiges Datei-Handle.
Verfügbar: Seit der ersten in MultiTOS integrierten MiNT Version 1.04 und in MagiC ab Version 3.0.
Gruppe: Dateifunktionen
Querverweis: Binding   Cauxis   Cconis   Fcntl   Foutstat

5.9.15.1 Bindings für Finstat

C: int32_t Finstat ( int16_t fh );
Assembler:
move.w    fh,-(sp)     ; Offset 2
move.w    #261,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #4,sp        ; Stack korrigieren

5.9.16 Flink

Name: »Flink« - erzeugt einen neuen (Hard-)Link auf ein File.
Gemdosnummer: 301
Deklaration: int32_t Flink ( int8_t *oldname, int8_t *newname );
Beschreibung: Die Funktion Flink erzeugt einen neuen Namen (newname) für die Datei mit dem Namen oldname. Die Datei kann anschließend unter beiden Namen angesprochen werden, und das Löschen (per Fdelete) eines Namens hat keinen Einfluß auf den anderen.

Zu beachten ist, daß sich oldname und newname auf demselben physikalischen Laufwerk befinden müssen, und nicht alle Filesysteme die Möglichkeit bieten, Links zu setzen.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
E_OK : kein Fehler aufgetreten.
EINVFN : das Filesystem unterstützt keine Hard-Links.
EFILNF : die Datei oldname existiert nicht.
EXDEV : (siehe unten)
ENSAME : die Dateien oldname/newname befinden sich nicht auf dem gleichen physikalischen Laufwerk.
Verfügbar: Verfügbar, wenn ein 'MiNT' Cookie mit einer Versionsnummer von mindestens 0.90 existiert und in MagiC ab Version 3.0.
Gruppe: Dateifunktionen
Querverweis: Binding   Frename   Fsymlink   XFS-Konzept in MagiC

5.9.16.1 Bindings für Flink

C: int32_t Flink ( int8_t *oldname, int8_t *newname );
Assembler:
pea       newname      ; Offset 6
pea       oldname      ; Offset 2
move.w    #301,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
lea       $A(sp),sp    ; Stack korrigieren

5.9.17 Flock

Name: »file record locking« - Teile einer Datei sperren oder freigeben.
Gemdosnummer: 92
Deklaration: int32_t Flock ( int16_t handle, int16_t mode, int32_t start, int32_t length );
Beschreibung: Die GEMDOS-Routine Flock dient dazu, Teile von Dateien gegen den Zugriff von anderen Prozessen zu schützen. Es gilt:
Parameter Bedeutung
   
handle Dateikennung
mode
0 = Blockierung setzen
1 = Blockierung aufheben
start Startposition in der Datei
length Anzahl der betroffenen Bytes


Achtung: Diese Funktion ist optional, daher darf ein Aufruf mit EINVFN beantwortet werden. Es sollte insbesondere beachtet werden, daß Flock nicht auf allen installierten Dateisystemen zur Verfügung stehen muss.
Ergebnis: Die Funktion liefert folgende Resultate:
E_OK : kein Fehler aufgetreten
ELOCKED : Blockierung bereits vorhanden
ENSLOCK : Zu entfernende Blockierung existiert nicht
Verfügbar: Nur vorhanden wenn der Cookie _FLK gesetzt ist.
Gruppe: Dateifunktionen
Querverweis: Binding   Fcreate   Fopen   Fclose   Fdelete   Ptermres   F_SETLK

5.9.17.1 Bindings für Flock

C: int32_t Flock ( int16_t handle, int16_t mode, int32_t start, int32_t length );
Assembler:
move.l    length,-(sp)  ; Offset 10
move.l    start,-(sp)   ; Offset  6
move.w    mode,-(sp)    ; Offset  4
move.w    handle,-(sp)  ; Offset  2
move.w    #92,-(sp)     ; Offset  0
trap      #1            ; GEMDOS aufrufen
lea       $E(sp),sp     ; Stack korrigieren

5.9.18 Fmidipipe

Name: »Fmidipipe« - MIDI Ein/Ausgabe umlenken.
Gemdosnummer: 294
Deklaration: int32_t Fmidipipe ( int16_t pid, int16_t in, int16_t out );
Beschreibung: Die Funktion verändert die GEMDOS-Handles für MIDI Ein- und Ausgabe für den Prozeß mit der Kennung pid. Die Parameter in bzw. out beschreiben die GEMDOS-Handles, welche für den angegebenen Prozeß die MIDI-Eingabe bzw. -ausgabe übernehmen.

Im Fall pid = 0, wird der aktuelle Prozeß benutzt. Dann ist der Funktionsaufruf äquivalent zu den folgenden beiden Zeilen:
Fforce (-4, in);
Fforce (-5, out);
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
E_OK : kein Fehler aufgetreten.
EFILNF : der Prozeß pid wurde nicht gefunden.
EACCDN : in/out sind nicht zum Lesen bzw. Schreiben geöffnet.
EIHNDL : in/out ist kein gültiges Handle.
Verfügbar: Verfügbar, wenn ein 'MiNT' Cookie mit einer Versionsnummer von mindestens 0.90 existiert.
Gruppe: Dateifunktionen
Querverweis: Binding   Fdup   Fforce   Test auf Pipes

5.9.18.1 Bindings für Fmidipipe

C: int32_t Fmidipipe ( int16_t pid, int16_t in, int16_t out );
Assembler:
move.w    out,-(sp)    ; Offset 6
move.w    in,-(sp)     ; Offset 4
move.w    pid,-(sp)    ; Offset 2
move.w    #294,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #8,sp        ; Stack korrigieren

5.9.19 Fopen

Name: »file open« - öffnet eine Datei.
Gemdosnummer: 61
Deklaration: int32_t Fopen ( const int8_t *fname, int16_t mode );
Beschreibung: Die GEMDOS-Routine Fopen dient dazu, Dateien zu öffnen. Es gilt:
Parameter Bedeutung
   
fname Name der zu öffnenden Datei
mode Modus als Bitvektor
Bit-0..2 = Zugriffsmodus
0 = nur lesen
1 = nur schreiben
2 = lesen und schreiben
Bit-3 = reserviert (auf Null setzen)
Bit-4..6 = Sharing-Modus
Bit-7 = Vererbungsflag

Die Bits 3..7 stehen nur bei einem GEMDOS mit Filelocking Erweiterungen (Cookie _FLK testen) zu Verfügung. Das Vererbungsflag bestimmt, ob vom Prozess gestartete Childs das entsprechende Handle erben und die gleichen Zugriffsrechte haben. Wenn das Flag gesetzt ist, muß das Child jede Datei, die es nutzen möchte, erneut öffnen und hat die gleichen Restriktionen wie jeder andere Prozess. Der Sharing-Modus legt fest, auf welche Art andere Prozesse auf die Datei zugreifen dürfen, wenn sie erst einmal geöffnet ist. Es gilt:
Sharing Bedeutung
   
0 Kompatibilitätsmodus (wird von den Programmen benutzt, die nichts von den Netzwerkerweiterungen wissen).
1 Lesen und Schreiben verbieten (die Datei darf kein zweites Mal geöffnet werden).
2 Schreiben verbieten (die Datei darf nur noch zum Lesen geöffnet werden).
3 Lesen verbieten (die Datei darf nur noch zum Schreiben geöffnet werden).
4 Alles ist erlaubt.


Achtung: Das File-Locking kann beratend implementiert sein, d.h. daß es möglich sein kann, auf Bereiche trotz eines vorgenommenen Lockings zuzugreifen. Programme, die File-Locking unterstützen, sollten daher vor einem Zugriff selbst einen Lock setzen und diesen unmittelbar nach dem Zugriff wieder freigeben. So ist garantiert, daß etwaige Locks anderer Seiten respektiert werden.

In MiNT und MagiC stehen darüber hinaus die folgenden Modi zur Verfügung:
mode Bedeutung
   
0x080 reserviert für MiNT.
0x100 Datei bei I/O nicht blockieren.
0x200 Datei erstellen, falls diese nicht exist.
0x400 existierende Datei auf Null-Länge setzen.
0x800 existierende Datei nicht öffnen.


Hinweis: Für einige Geräte existieren bereits Standardkanal-Nummern, so daß es nicht notwendig ist, Fopen aufzurufen. Im einzelnen:
Kanal Bedeutung
   
0 Tastatur (stdin)
1 Bildschirm (stdout)
2 serielle Schnittstelle (stdaux)
3 parallele Schnittstelle (stdprn)


Lt. Atari sind die Standardkanal-Nummern 4 und 5 reserviert, so daß normale Kanalnummern für Dateien erst bei 6 beginnen.

Darüber hinaus lassen sich auch die folgenden zeichenorientierten Geräte öffnen:
  • PRN: (parallele Schnittstelle, -3)
  • AUX: (serielle Schnittstelle, -2)
  • CON: (Konsole, -1)


Symbolische Links werden von dieser Funktion automatisch dereferenziert, d.h. wenn die Datei bereits als symbolischer Link existiert, wird die davon referenzierte Datei geöffnet bzw., je nach Modus, auf die Länge Null gebracht.
Ergebnis: Die Funktion liefert die entsprechende Dateikennung, oder eine negative Fehlermeldung zurück.
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Querverweis: Binding   Fcreate   Ein-/Ausgabekanäle des BIOS   F_SETLK

5.9.19.1 Bindings für Fopen

C: int32_t Fopen ( const int8_t *fname, int16_t mode );
Assembler:
move.w    mode,-(sp)   ; Offset 6
pea       fname        ; Offset 2
move.w    #61,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #8,sp        ; Stack korrigieren
GFA-Basic Handle%=Gemdos(&H3D,L:fname%,W:mode%)

5.9.20 Foutstat

Name: »Foutstat« - Ausgabestatus für ein File festlegen.
Gemdosnummer: 262
Deklaration: int32_t Foutstat ( int16_t fh );
Beschreibung: Die Funktion Foutstat gibt die Anzahl der Bytes zurück, die in die Datei mit der Handle fh ausgegeben werden können, ohne den entsprechenden Prozeß zu blockieren.

Wenn die Anzahl der Bytes nicht genau angegeben werden kann, wird der Wert 1 zurückgeliefert.

Hinweis: In MagiC versucht der Kernel zunächst, den Aufruf auf Fcntl (FIONWRITE) zurückzuführen. Wenn diese Subfunktion von dev_ioctl nicht existiert (d.h. der Dateitreiber liefert EINVFN), wird dev_stat aufgerufen. In diesem Fall kann nur die Aussage getroffen werden "ein Zeichen kann geschrieben werden" (Rückgabe == 1) bzw. "kein Zeichen kann geschrieben werden" (Rückgabe == 0). FAT-Dateien liefern stets den Wert 1, Shared Memory die tatsächliche Dateilänge minus der aktuellen Position. Pipes liefern die Anzahl der noch freien Bytes im Block.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
>= 0 : kein Fehler aufgetreten (Anzahl der Bytes).
EIHNDL : ungültiges Datei-Handle.


Derzeit liefert diese Funktion immer 1 für Dateien auf Massenspeicher zurück.
Verfügbar: Seit der ersten in MultiTOS integrierten MiNT Version 1.04 und in MagiC ab Version 3.0.
Gruppe: Dateifunktionen
Querverweis: Binding   Cauxos   Cconos   Cprnos   Fcntl   Finstat

5.9.20.1 Bindings für Foutstat

C: int32_t Foutstat ( int16_t fh );
Assembler:
move.w    fh,-(sp)     ; Offset 2
move.w    #262,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #4,sp        ; Stack korrigieren

5.9.21 Fpipe

Name: »Fpipe« - erzeugt eine Pipe.
Gemdosnummer: 256
Deklaration: int16_t Fpipe ( int16_t usrh[2] );
Beschreibung: Die Funktion erzeugt eine Pipe, die für Interprozeß-Kommunikation (IPC) benutzt werden kann. Sie wird normalerweise von Shells benutzt, die den Input und Output ihres Childs umleiten möchten. Vor dem Start des Childs leitet die Shell ihren input und output (falls nötig) auf das Leseende und Schreibende der neu erzeugten Datei um. Bei erfolgreichem Aufruf werden in usrh zwei GEMDOS-Handles geliefert.

usrh[0] ist dabei das Handle für das Leseende der Pipe, (Read-Only) während usrh[1] das Handle für das Schreibende (Write-Only) der Pipe kennzeichnet.

Die auf diese Weise erzeugte Pipe wird im Verzeichnis U:\PIPE als Pseudo-Datei angelegt und mit dem Namen 'sys$pipe.xxx' versehen, wobei xxx als dreistellige ganze Zahl aufzufassen ist.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
E_OK : kein Fehler aufgetreten.
ENHNDL : keine 2 Handles mehr frei.
EACCDN : keine Pipeline mehr frei (max. 999 verfügbar).
ENSMEM : nicht genug Speicher vorhanden, um die Pipe zu erzeugen.
Verfügbar: Verfügbar, wenn ein 'MiNT' Cookie mit einer Versionsnummer von mindestens 0.90 existiert und in MagiC ab Version 3.0.
Gruppe: Dateifunktionen
Querverweis: Binding   Fmidipipe   Test auf Pipes

5.9.21.1 Bindings für Fpipe

C: int16_t Fpipe ( int16_t usrh[2] );
Assembler:
pea       usrh         ; Offset 2
move.w    #256,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #6,sp        ; Stack korrigieren

5.9.22 Fputchar

Name: »Fputchar« - Zeichen in ein File ausgeben.
Gemdosnummer: 264
Deklaration: int32_t Fputchar ( int16_t fh, int32_t ch, int16_t mode );
Beschreibung: Die Funktion schreibt ein Zeichen in die Datei mit dem Handle fh. Der Parameter mode ist nur von Bedeutung, wenn die Datei ein (Pseudo-)Terminal ist:
mode Bedeutung
   
0 Raw-Mode
keine Auswertung der Sonderzeichen.
1 Cooked-Mode
spezielle Kontrollzeichen (Control-C, Control-Z) werden gesucht und ggfs. interpretiert. Das selbe gilt für die Flußkontrolle (Control-S, Control-Q).


Wenn die Datei ein (Pseudo-)Terminal ist, können alle 4 Bytes übertragen werden. Auf diese Art und Weise ist es möglich, simulierte BIOS-Scancodes und Shift-Statusmeldungen zu übertragen. Anderenfalls wird nur das Low-Byte von ch übertragen.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
4 : Anzahl geschriebener Bytes, wenn Datei ein Terminal ist.
1 : Ausgabe erfolgreich, aber Datei ist kein Terminal.
0 : Bytes konnten nicht ausgegeben werden.
EIHNDL : ungültiges Datei-Handle.
  Ein negativer BIOS Fehlercode, wenn ein I/O Fehler auftrat.
Verfügbar: Seit der ersten in MultiTOS integrierten MiNT Version 1.04.
Gruppe: Dateifunktionen
Querverweis: Binding   Bconout   Cauxout   Cconout   Crawio   Fgetchar   Fwrite

5.9.22.1 Bindings für Fputchar

C: int32_t Fputchar ( int16_t fh, int32_t ch, int16_t mode );
Assembler:
move.w    mode,-(sp)   ; Offset 8
move.l    ch,-(sp)     ; Offset 4
move.w    fh,-(sp)     ; Offset 2
move.w    #264,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
lea       $A(sp),sp    ; Stack korrigieren

5.9.23 Fread

Name: »file read« - Datei lesen.
Gemdosnummer: 63
Deklaration: int32_t Fread ( int16_t handle, int32_t count, void *buf );
Beschreibung: Die GEMDOS-Routine Fread liest eine bestimmte Anzahl von Bytes aus einer Datei. Es gilt:
Parameter Bedeutung
   
handle Dateikennung
count Anzahl der zu lesenden Bytes
buf Adresse des aufnehmenden Puffers (mindestens Platz für count Bytes)


Hinweis: In allen GEMDOS-Versionen < 0.15 kommt es zum System-Stillstand, wenn der Parameter count den Wert 0 besitzt. Beim Lesen von Standardkanälen dürfen maximal 16383 Zeichen gelesen werden.
Ergebnis: Die Funktion liefert als Ergebnis die Anzahl der gelesenen Zeichen. Die Anazhl gelesener Bytes kann kleiner als count sein, wenn ein EOF (end of file) erreicht wird. Im Fehlerfall gilt:
EIHNDL : falsche Dateikennung
ELOCKED : Datei-Abschnitt ist markiert
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Querverweis: Binding   Fwrite   FIONREAD

5.9.23.1 Bindings für Fread

C: int32_t Fread ( int16_t handle, int32_t count, void *buf );
Assembler:
pea       buf           ; Offset 8
move.l    count,-(sp)   ; Offset 4
move.w    handle,-(sp)  ; Offset 2
move.w    #63,-(sp)     ; Offset 0
trap      #1            ; GEMDOS aufrufen
lea       $C(sp),sp     ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H3F,W:handle%,L:count%,L:buf%)

5.9.24 Freadlink

Name: »Freadlink« - symbolischen Link verfolgen.
Gemdosnummer: 303
Deklaration: int32_t Freadlink ( int16_t bufsiz, int8_t *buf, int8_t *name );
Beschreibung: Die Funktion ermittelt den Dateinamen des symbolischen Links name. Dies ist der Name, der bei Fsymlink als erster Parameter angegeben wurde.

Der Name wird im Puffer buf abgelegt, der eine Länge von bufsiz Zeichen umfaßt.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
E_OK : kein Fehler aufgetreten.
EINVFN : das Filesystem von name erlaubt keine symb. Links.
EFILNF : der symbolische Link name wurde nicht gefunden.
EACCDN : name ist kein symbolischer Link.
ERANGE : der Puffer buf ist zu klein für den zu ermittelnden Dateinamen.
Verfügbar: Verfügbar, wenn ein 'MiNT' Cookie mit einer Versionsnummer von mindestens 0.90 existiert und in MagiC ab Version 3.0.
Gruppe: Dateifunktionen
Querverweis: Binding   Fsymlink   XFS-Konzept in MagiC

5.9.24.1 Bindings für Freadlink

C: int32_t Freadlink ( int16_t bufsiz, int8_t *buf, int8_t *name );
Assembler:
pea       Name          ; Offset 10
pea       buf           ; Offset  6
move.w    bufsiz,-(sp)  ; Offset  2
move.w    #303,-(sp)    ; Offset  0
trap      #1            ; GEMDOS aufrufen
lea       $C(sp),sp     ; Stack korrigieren

5.9.25 Frename

Name: »file rename« - Datei umbenennen.
Gemdosnummer: 86
Deklaration: int32_t Frename ( const int8_t *oldname, const int8_t *newname );
Beschreibung: Die GEMDOS-Routine Frename dient zum Umbenennen von Dateien. Der neue Name darf auch einen kompletten Zugriffspfad innerhalb des betreffenden Laufwerks enthalten. In diesem Fall wird die Datei verschoben. Es gilt:
Parameter Bedeutung
   
oldname Zeiger auf bisherigen Namen
newname Zeiger auf neuen Namen


Hinweis: Ab GEMDOS-Version 0.15 ist es möglich auch den Namen von Verzeichnissen zu verändern. Diese können jedoch nicht verschoben werden. Man sollte es vermeiden, Dateien umzubenennen, die bereits geöffnet sind.

Anmerkung zu MagiC: Es ist Sache des XFS zu entscheiden, ob Verzeichnisse umbenannt oder verschoben werden dürfen. Das integrierte DOS-XFS erlaubt erst seit MagiC 5 ein Verschieben von Verzeichnissen.
Ergebnis: Die Funktion liefert folgende Resultate:
E_OK : kein Fehler aufgetreten
EPTHNF : Verzeichnis nicht gefunden
EACCDN : Zugriff verweigert (Schreibschutz)
ENSAME : Ziel ist nicht das gleiche Laufwerk
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Querverweis: Binding   Fdelete   XFS-Konzept in MagiC

5.9.25.1 Bindings für Frename

C: int32_t Frename ( const int8_t *oldname, const int8_t *newname );
Assembler:
pea       newname      ; Offset 8
pea       oldname      ; Offset 4
move.w    #0,-(sp)     ; Offset 2
move.w    #86,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
lea       $C(sp),sp    ; Stack korrigieren


Hinweis: Der Null-Parameter wird beim C-Binding normalerweise automatisch hinzugefügt.
GFA-Basic Fehler%=Gemdos(&H56,W:0,L:oldname%,L:newname%)

5.9.26 Fseek

Name: »file seek« - Dateiposition verschieben.
Gemdosnummer: 66
Deklaration: int32_t Fseek ( int32_t offset, int16_t handle, int16_t seekmode );
Beschreibung: Die GEMDOS-Routine Fseek erlaubt es, den Dateizeiger innerhalb einer Datei neu zu positionieren. Es gilt:
Parameter Bedeutung
   
offset Anzahl der Bytes, die übersprungen werden sollen
handle Dateikennung
seekmode Art der Positionierung
0 = vom Dateianfang
1 = ab aktueller Position
2 = vom Dateiende


Hinweis: Auf Pipes angewandt liefert die Funktion den Wert EACCDN; damit können Applikationen Geräte und Pipes unterscheiden.
Ergebnis: Die Funktion liefert als positives Ergebnis die neue Position innerhalb der Datei, oder eine negative Fehlermeldung.
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Querverweis: Binding   Fread   Fwrite   Test auf Pipes

5.9.26.1 Bindings für Fseek

C: int32_t Fseek ( int32_t offset, int16_t handle, int16_t seekmode );
Assembler:
move.w    seekmode,-(sp)  ; Offset 8
move.w    handle,-(sp)    ; Offset 6
move.l    offset,-(sp)    ; Offset 2
move.w    #66,-(sp)       ; Offset 0
trap      #1              ; GEMDOS aufrufen
lea       $A(sp),sp       ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H42,L:offset%,W:handle%,W:seekmode%)

5.9.27 Fselect

Name: »Fselect« - Abfrage des Dateistatus mit Timeout.
Gemdosnummer: 285
Deklaration: int32_t Fselect ( uint16_t timeout, int32_t *rfds, int32_t *wfds, ((int32_t) 0) );
Beschreibung: Die Funktion kontrolliert, welche geöffneten Dateien zum Lesen bzw. Schreiben bereit sind. Der Parameter rfds zeigt auf ein Langwort, welches eine Menge von GEMDOS File-Deskriptoren repräsentiert.

In diesem Langwort ist das Bit n gesetzt, wenn der File-Deskriptor n auf Eingabe überprüft werden soll. Eine leere Menge kann optional auch durch einen Nullzeiger dargestellt werden.

Analog zeigt wfds auf eine Menge von File-Deskriptoren, deren Ausgabestatus überprüft werden soll.

Bei Rückkehr der Funktion werden in rfds und wfds die Handles der Dateien übergeben, die zum Lesen bzw. Schreiben bereit sind, und auch überprüft werden sollten.

Zur Zeit ist das einzige BIOS Gerät, das mit Fselect abgefragt werden kann, die Tastatur.

Unter timeout kann angegeben werden, wieviele Millisekunden gewartet werden soll, bevor die Funktion zurückkehrt. Ein Wert von 0 bedeutet in diesem Zusammenhang, daß die Funktion wartet, bis eine der angegebenen Dateien zum Lesen bzw. Schreiben bereit ist.

Beispiel:
Fselect (0, 0L, 0L, 0L) wartet für immer.
Fselect (1, 0L, 0L, 0L) wartet für eine Millisekunde.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
0 : in der angegebenen Zeit wurde keine der Dateien zum Lesen bzw. Schreiben bereit (Timeout).
>0 : Summe der gesetzten Bits von rfds und wfds.
EIHNDL : mindestens eine der Handles ist keiner geöffneten Datei zuzuordnen.
Verfügbar: Seit der ersten in MultiTOS integrierten MiNT Version 1.04. Sowie MagiC seit Version 3.00
Gruppe: Dateifunktionen
Querverweis: Binding   Finstat   Foutstat

5.9.27.1 Bindings für Fselect

C: int32_t Fselect ( uint16_t timeout, int32_t *rfds, int32_t *wfds, ((int32_t) 0) );
Assembler:
move.l    dummy,-(sp)    ; Offset 12
pea       wfds           ; Offset  8
pea       rfds           ; Offset  4
move.w    timeout,-(sp)  ; Offset  2
move.w    #285,-(sp)     ; Offset  0
trap      #1             ; GEMDOS aufrufen
lea       $10(sp),sp     ; Stack korrigieren

5.9.28 Fsetdta

Name: »set disk transfer address« - Setzen der Adresse für den Übertragungsbereich für Diskettenoperationen.
Gemdosnummer: 26
Deklaration: void Fsetdta ( DTA *buf );
Beschreibung: Die GEMDOS-Routine Fsetdta setzt die Adresse auf einen Speicherblock, der als neue DTA benutzt wird. Der Parameter buf ist ein Zeiger auf diese Struktur.

Hinweis: Bei Programmstart wird die DTA ab dem Offset 0x80 in der Basepage eingerichtet.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Querverweis: Binding   Fgetdta   Fsfirst   BASEPAGE   DTA

5.9.28.1 Bindings für Fsetdta

C: void Fsetdta ( DTA *buf );
Assembler:
pea       buf          ; Offset 2
move.w    #26,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #6,sp        ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H1A,L:buf%)

5.9.29 Fsfirst

Name: »search first file« - ersten Dateieintrag suchen.
Gemdosnummer: 78
Deklaration: int32_t Fsfirst ( const int8_t *filename, int16_t attr );
Beschreibung: Die GEMDOS-Routine Fsfirst erlaubt es, Informationen über Dateien oder Verzeichnisse zu ermitteln. Es gilt:
Parameter Bedeutung
   
filename Zeiger auf den Dateinamen
attr Attribute, die auf den gesuchten Dateityp passen sollen.
Bit-0: Datei ist schreibgeschützt
Bit-1: Datei ist versteckt
Bit-2: Systemdatei
Bit-3: Diskettenname
Bit-4: Verzeichnis
Bit-5: Archiv-Bit


Der Pfadname kann auch die Joker '*' und '?' enthalten. Nach Abschluß der Funktion steht der Verzeichniseintrag unter der Diskettenübertragungsadresse DTA, die mit Fgetdta und Fsetdta ermittelt bzw. festgelegt werden kann. Die Informationen können dann der Struktur DTA entnommen werden.

Die DTA muss durch Fsfirst() initialisiert werden!

Hinweis: Falls das Programm in der MiNT-Domain läuft, liefert Fsfirst 'lower case' Filenamen. Da es Filesysteme gibt die case sensitiv arbeiten, sollten Sie diese Umwandlung auf keinen Fall manuell durchführen. Wenn Sie hingegen unbedingt 'upper case' Filenamen benötigen, sollten Sie Ihr Programm per Pdomain in der TOS-Domain laufen lassen.

Anmerkung zu MagiC: Ist Bit-3 von attr gesetzt, so ruft der Kernel die XFS-Funktion xfs_rlabel auf. Das aufrufende Anwenderprogramm kann damit leider unter MagiC nicht mehr Datum und Uhrzeit des Disknamens ermitteln. Der Kernel setzt alle Felder auf 0, und die Funktion Fsnext darf dann nicht ausgeführt werden. Ab MagiC 3 wird stattdessen die Funktion Dreadlabel benutzt, die auch mit langen Dateinamen zurechtkommt.

Ist Bit-3 von attr nicht gesetzt, wird wie in TOS nach Dateien gesucht. Ist eine Datei ein symbolischer Link, ruft der DOS-Kernel die Funktion Fxattr auf, um den Link zu verfolgen. Die von Fxattr gelieferten Werte werden dann in die DTA kopiert.

Achtung: MagiC ist nicht immer in der Lage, relative symbolische Links während eines Fsfirst/Fsnext korrekt auszuwerten. Es bieten sich 3 Auswege an:
(a) Am besten: Dxreaddir verwenden.
(b) Nur absolute symbolische Links verwenden.
(c) Das Suchverzeichnis jeweils zum aktuellen machen.


MiNT behandelt diesen Fall zwar korrekt, jedoch auf Kosten eines gewaltigen Aufwands. Das Fsfirst/next-Konzept ist grundsätzlich veraltet, ineffektiv und unsicher, und sollte sowohl in MiNT als auch in MagiC vermieden werden.
Ergebnis: Die Funktion liefert folgende Resultate:
E_OK : kein Fehler aufgetreten
EFILNF : Datei nicht gefunden
ENMFIL : keine weiteren Dateien
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Querverweis: Binding   Fgetdta   Fsetdta   Fsnext   DTA   rekursive Suche   XFS-Konzept

5.9.29.1 Bindings für Fsfirst

C: int32_t Fsfirst ( const int8_t *filename, int16_t attr );
Assembler:
move.w    attr,-(sp)   ; Offset 6
pea       filename     ; Offset 2
move.w    #78,-(sp)    ; Offset 0
trap      #1           ; GEMDOS aufrufen
addq.l    #8,sp        ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H4E,L:filename%,W:attr%)

5.9.30 Fsnext

Name: »search next file« - nächsten Dateieintrag suchen.
Gemdosnummer: 79
Deklaration: int16_t Fsnext ( void );
Beschreibung: Die GEMDOS-Routine Fsnext sucht den nächsten Dateieintrag auf den die von Fsfirst gemachte Spezifizierung paßt. Die Funktion wird nach einem Aufruf von Fsfirst so oft aufgerufen, wie sie Dateien findet, die zur angegebenen Spezifizierung passen.

Diese Funktion benutzt die DTA der Applikation, die nach dem Start in der Kommandozeile liegt. Fird diese Funktion benutzt, ohne eine neue DTA zu setzen, wird die Kommandozeile überschrieben.

Hinweis: Falls das Programm in der MiNT-Domain läuft, liefert Fsnext 'lower case' Filenamen. Da es Filesysteme gibt die case sensitiv arbeiten, sollten Sie diese Umwandlung auf keinen Fall manuell durchführen. Wenn Sie hingegen unbedingt 'upper case' Filenamen benötigen, sollten Sie Ihr Programm per Pdomain in der TOS-Domain laufen lassen.
Ergebnis: Die Funktion liefert als Ergebnis 0, wenn eine Datei gefunden werden konnte, ansonsten eine negative Fehlermeldung.
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Querverweis: Binding   Fgetdta   Fsetdta   Fsfirst

5.9.30.1 Bindings für Fsnext

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

5.9.31 Fsymlink

Name: »Fsymlink« - symbolischen Link auf ein File erzeugen.
Gemdosnummer: 302
Deklaration: int32_t Fsymlink ( int8_t *oldname, int8_t *newname );
Beschreibung: Die Funktion erzeugt einen symbolischen Link newname für die Datei mit dem Namen oldname. Bei erfolgreichem Aufruf kann die Datei anschließend unter beiden Namen angesprochen werden. Ein Löschen per Fdelete für newname berührt die Datei selbst nicht, sondern nur den symbolischen Link. Wird hingegen Fdelete auf oldname angewendet, so wird die Datei wie gewohnt gelöscht, und Zugriffe auf newname sind nicht mehr möglich.

Der Unterschied zu Hard-Links besteht darin, daß symbolische Links zwischen verschiedenen physikalischen Geräten (und damit sogar verschiedenen Filesystem-Typen) bestehen können.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
E_OK : kein Fehler aufgetreten.
EINVFN : das Filesystem unterstützt keine symbolischen Links.
Verfügbar: Verfügbar, wenn ein 'MiNT' Cookie mit einer Versionsnummer von mindestens 0.90 existiert und in MagiC ab Version 3.0.
Gruppe: Dateifunktionen
Querverweis: Binding   Flink   Freadlink   Frename   XFS-Konzept

5.9.31.1 Bindings für Fsymlink

C: int32_t Fsymlink ( int8_t *oldname, int8_t *newname );
Assembler:
pea       newname      ; Offset 6
pea       oldname      ; Offset 2
move.w    #302,-(sp)   ; Offset 0
trap      #1           ; GEMDOS aufrufen
lea       $A(sp),sp    ; Stack korrigieren

5.9.32 Fwrite

Name: »file write« - auf Datei schreiben.
Gemdosnummer: 64
Deklaration: int32_t Fwrite ( int16_t handle, int32_t count, void *buf );
Beschreibung: Die GEMDOS-Routine Fwrite schreibt eine Anzahl von Bytes in eine Datei. Es gilt:
Parameter Bedeutung
   
handle Dateikennung
count Anzahl der zu schreibenden Bytes
buf Anfangsadresse des Puffers


Hinweis zu MagiC: Übergibt man als Anzahl der zu schreibenden Bytes den Wert 0, und in buf den Wert -1, so wird die Datei auf die aktuelle Position des Dateizeigers geschrumpft.
Ergebnis: Die Funktion liefert die Anzahl der tatsächlich geschriebenen Bytes, oder eine der folgenden Fehlermeldungen:
EACCDN : Zugriff verwehrt
EIHNDL : falsche Dateikennung
ELOCKED : Datei-Abschnitt ist markiert
Verfügbar: Alle GEMDOS Versionen.
Gruppe: Dateifunktionen
Querverweis: Binding   Fread   FIONWRITE

5.9.32.1 Bindings für Fwrite

C: int32_t Fwrite ( int16_t handle, int32_t count, void *buf );
Assembler:
pea       buf           ; Offset 8
move.l    count,-(sp)   ; Offset 4
move.w    handle,-(sp)  ; Offset 2
move.w    #64,-(sp)     ; Offset 0
trap      #1            ; GEMDOS aufrufen
lea       $C(sp),sp     ; Stack korrigieren
GFA-Basic Fehler%=Gemdos(&H40,W:handle,L:count%,L:buf%)

5.9.33 Fxattr

Name: »Fxattr« - erweiterte Fileattribute ermitteln.
Gemdosnummer: 300
Deklaration: int32_t Fxattr ( int16_t flag, int8_t *name, XATTR *xattr );
Beschreibung: Die Funktion ermittelt die erweiterten Attribute der Datei, deren vollständiger Name in name angegeben ist, und speichert diese in xattr.

Der Parameter flag gibt an, wie symbolische Links behandelt werden sollen. Es gilt:
flag Bedeutung
   
0 symbolische Links werden bis zur Ursprungsdatei verfolgt, und die erweiterten Attribute werden von dieser Datei ermittelt. (Dies entspricht dem Vorgehen von stat unter UNIX).
1 die erweiterten Attribute des symbolischen Links selbst werden ermittelt. (Dies entspricht dem Vorgehen von lstat unter UNIX).


Hinweis: Diese Funktion ist äquivalent zu einem Aufruf von Fcntl (Modus F_STAT) mit dem Unterschied, daß statt eines Dateinamens das Handle einer bereits geöffneten Datei übergeben wird.
Ergebnis: Die Funktion kann folgende Rückgabewerte liefern:
E_OK : kein Fehler aufgetreten.
EFILNF : Datei nicht gefunden.
EPTHNF : Pfad zur Datei nicht gefunden.
Verfügbar: Available when a 'MiNT' cookie with a version of at least 0.90 exists und in MagiC ab Version 3.0.
Gruppe: Dateifunktionen
Querverweis: Binding   Fattrib   Fsnext   XFS-Konzept in MagiC

5.9.33.1 Bindings für Fxattr

C: int32_t Fxattr ( int16_t flag, int8_t *name, XATTR *xattr );
Assembler:
pea       xattr        ; Offset 10
pea       name         ; Offset  6
move.w    flag,-(sp)   ; Offset  2
move.w    #300,-(sp)   ; Offset  0
trap      #1           ; GEMDOS aufrufen
lea       $C(sp),sp    ; Stack korrigieren

HomeGEMDOSgemdos-TrapDatum und Uhrzeit