home *** CD-ROM | disk | FTP | other *** search
- ─────────────────────────────────────────────────────────────────────────────
- Dokumentation zur Datei: FILES.INC
-
- ─────────────────────────────────────────────────────────────────────────────
-
- FILES.INC - Routinen zum Bearbeiten von Dateien
- (für den Assembler A86)
-
- (c) Bernd Schemmer 1990 - 1992
- Letzter Update: 12.02.1992
-
- ■ Hinweis:
- ----------
- Die Routinen benutzen das Register AX als Arbeitsregister.
- Puffer für Dateinamen müssen, falls nichts anderes angegeben ist,
- Platz für 64 Zeichen haben.
-
- Zum Abfangen von Hardware-Fehler (z.B. offene Diskettenlaufwerke)
- sollte zusätzlich ein eigener Handler für den Interrupt 24h verwendet
- werden.
-
-
- ■ Variablen:
- ------------
- FindAttribute - Word, Suchattribute für SearchFirst
- und SearchNext
-
- Durch Ändern dieser Variable können mit diesen beiden Routinen
- also auch Directorys oder Volumes gesucht werden. Ebenfalls
- können dann die Größe, das Datum und die Zeit von Directorys
- aus der DTA entnommen werden.
-
-
- ■ Routinen:
- -----------
- ExistFile - Stellt fest, ob eine Datei existiert
- GetSetAttributes - Liest oder Setzt die Attribute einer Datei
- DeleteFile - Löscht eine Datei
- CopyFile - Kopiert eine Datei
- RenameFile - Benennt eine Datei um
- GetFileSize - Ermittelt die Größe einer Datei
- GetFileDate - Liest das Datum einer Datei
- GetFileTime - Liest die Zeit einer Datei
- SetFileTime - Setzt die Zeit einer Datei
- SetFileDate - Setzt das Datum einer Datei
- FindFirst - Sucht die erste unter eine Maske fallende Datei
- FindNext - Sucht die jeweils nächste unter eine Maske
- fallende Datei
- ParseFileName - Splittet einen Dateinamen in Pfad und Namen auf
- GetFilePath - Ermittelt den Pfad einer Datei
-
- FileTimeToDOSTime - Konvertiert eine Zeitangabe vom Datei- ins
- DOS-Format
- FileDateToDOSDate - Konvertiert eine Datumsangabe vom Datei- ins
- DOS-Format
- DOSTimeToFileTime - Konvertiert eine Zeitangabe vom DOS- ins
- Datei-Format
- DOSDateToFileDate - Konvertiert eine Datumsangabe vom DOS- ins
- Datei-Format
-
- und falls nötig:
- DOSStrToStr - Konvertiert einen DOS-String ins Stringformat
-
-
- ■ EQU-Anweisungen für die Attribute eines Directory-Eintrages
-
- Archiv EQU 020h
- SubDir EQU 010h
- Volume EQU 008h
- System EQU 004h
- Hidden EQU 002h
- Readonly EQU 001h
-
- ■ Suchattribute für FindFirst und FindNext
-
- ; Voreinstellung für die Attribute
- DefaultAttr EQU Archiv OR ReadOnly
-
- FindAttribute DW DefaultAttr
-
-
- ■ Aufbau der DTA für die Routinen FindFirst und FindNext,
- Länge: 43 Bytes
-
- Deklaration in der aufrufenden Routine:
-
- MyDTA db 43xD dup 0
-
- FindDTA STRUC [BX]
- db 21xD dup ? ; reserviert für DOS
- _DTAAttr db ? ; Attribut des gefundenen Eintrages
- _DTATime dw ? ; Zeit des gefundenen Eintrages
- _DTADate dw ? ; Datum des gefundenen Eintrages
- _DTALength dw ?,? ; Länge des gefundenen Eintrages
- _DTAName db 13xD dup ? ; Name des gefundenen Eintrages (abgeschl.
- ENDS ; mit einem Null-Byte)
-
-
- ----------------------------
- DOSStrToStr
-
- Funktion: Konvertierung eines DOS-Strings ins String-Format
- (mit Zähler, ohne das Zeichen '$' bzw. ein 0-Byte
- am Ende)
-
- Eingabe: DS:SI -> Quellstring
- ES:DI -> Zielstring (wird auf max. 255 Byte gekürzt)
- AL = Ende-Kennzeichen (0-Byte oder '$')
-
- Bes.: Zielstring gleich Quellstring ist nicht erlaubt.
-
- Falls der Quellstring mehr als 255 Zeichen hat, werden
- nur die ersten 255 Zeichen übernommen.
-
-
- ----------------------------
- GetFilePath
-
- Funktion: Erweitert einen Dateinamen (evtl. incl. Pfad) um den Pfad
-
- Eingabe: DS:SI = Dateiname (als String)
- ES:DI = Puffer für den erweiterten Namen (als String)
- (128 Zeichen Platz!)
-
- Ausgabe: CF = 0 ->> okay
- Puffer bei ES:DI enthält den erweiterten Namen
- CF = 1 ->> Fehler
- AX = DOS-Fehlernummer
-
- Bes.: Benutzt die undokumentierte Funktion 60h des Interrupt 21h.
- Vor der weiteren Benutzung des so ermittelten Dateinamens
- muß die Länge überprüft werden, da die Ausgabe der Funktion
- 60h bis zu 128 Zeichen lang sein kann, aber die Funktionen
- zur Dateibearbeitung nur mit Dateinamen mit max. 64 Zeichen
- arbeiten.
- Benötigt ca. 150 Byte auf dem Stack.
- Quellstring gleich Zielstring ist erlaubt
-
- ----------------------------
- ParseFileName
-
- Funktion: Splittet einen Dateinamen in den Pfad und den Namen auf
-
- Eingabe: DS:SI -> Pfad und Name der Datei (als String)
- ES:DI -> Puffer für den Namen (als String)
-
- Ausgabe: DS:SI -> Pfad der Datei (als String)
- ES:DI -> Name der Datei (als String)
-
- Bes.: Die beiden Strings müssen verschieden sein!
- Erkennt auch den Slash '/' als Pfadtrenner an.
-
- ----------------------------
- FindFirst
-
- Funktion: Sucht die erste Datei, die unter eine gegebene Suchmaske
- fällt (Gesucht wird mit den Attributen aus FINDATTRIBUTE)
-
- Eingabe: DS:DX -> Puffer für die DTA (wird nur zum Suchen benutzt)
- DS:SI -> Suchpfad und Maske (als String)
- ES:DI -> Puffer für die gefundene Datei (als String)
-
- Ausgabe: CF = 0 ->> Datei gefunden
- Puffer bei ES:DI gefüllt
- CL = Attribute des Eintrages
- CF = 1 ->> Fehler
- AX = DOS-Fehlernummer
- AX = 18xD ->> keine Datei gefunden
-
- Bes.: Die beiden Strings müssen verschieden sein!
- Die 'Original'-DTA wird nicht verändert.
-
- ----------------------------
- FindNext
-
- Funktion: Sucht die nächste Datei, die unter die gegebene Suchmaske
- fällt
-
- Eingabe: DS:DX -> DTA (muß durch vorheriges FindFirst vorbelegt
- sein!)
- DS:SI -> Suchpfad und Maske (als String)
- ES:DI -> Puffer für die gefundene Datei (als String)
-
- Ausgabe: CF = 0 ->> Datei gefunden
- Puffer bei ES:DI gefüllt
- CL = Attribute des Eintrages
- CF = 1 ->> Fehler
- AX = DOS-Fehlernummer
- AX = 18xD ->> keine Datei gefunden
-
- Bes.: Die 'Original'-DTA wird nicht verändert.
-
- ----------------------------
- GetFileTime
-
- Funktion: Lesen der Zeit einer Datei
-
- Eingabe: DS:SI -> Dateiname
-
- Ausgabe: CF = 0 ->> okay
- CX und DX enthalten die Zeit (Format wie nach
- Funktion 2Ch des Interrupt 21h, außer Reg. DL)
- CF = 1 ->> Fehler
- AX = Fehlernummer
-
- ----------------------------
- GetFileDate
-
- Funktion: Lesen des Datums einer Datei
-
- Eingabe: DS:SI -> Dateiname
-
- Ausgabe: CF = 0 ->> okay
- CX und DX enthalten das Datum (Format wie nach
- Funktion 2Ah des Interrupt 21h, außer Reg. AL)
- CF = 1 ->> Fehler
- AX = Fehlernummer
-
- ----------------------------
- SetFileTime
-
- Funktion: Setzen der Zeit einer Datei
-
- Eingabe: DS:SI -> Dateiname
- Register CX und DX enthalten die Zeit (Format wie für die
- Funktion 2Dh des Interrupt 21h, außer Register DL)
-
- Ausgabe: CF = 0 ->> okay
- CF = 1 ->> Fehler
- AX = Fehlernummer
- AX = 0 ->> falsches Format
-
- Hinweis: Die Sekunden werden für Dateien nur im 2-Sekunden-
- Intervallen gespeichert; die Hundertstel-Sekunden
- werden für Dateien nicht gespeichert.
-
- ----------------------------
- SetFileDate
-
- Funktion: Setzen des Datums einer Datei
-
- Eingabe: DS:SI -> Dateiname
- Register CX und DX enthalten das Datum (Format wie für die
- Funktion 2Bh des Interrupt 21h)
-
- Ausgabe: CF = 0 ->> okay
- CF = 1 ->> Fehler
- AX = Fehlernummer
- AX = 0 ->> falsches Format
-
- ----------------------------
- GetFileSize
-
- Funktion: Ermitteln der Größe einer Datei
-
- Eingabe: DS:SI -> Dateiname
-
- Ausgabe: CF = 0 ->> okay
- DX:AX = Dateigröße
- CF = 1 ->> Fehler
- AX = Fehlernummer
-
- ----------------------------
- CopyFile
-
- Funktion: Kopieren einer Datei
-
- Eingabe: DS:SI -> alter Dateiname
- ES:DI -> neuer Dateiname
- DS:BX -> Puffer-Tabelle
- Die Tabelle muß vor dem Aufruf der Routine gefüllt
- werden, d.h. die aufrufende Routine muß den Speicher
- für den Puffer und die Puffer-Tabelle bereitstellen!
-
- Aufbau der Puffer-Tabelle: (Worte im INTEL-Format!)
-
- Offset | Länge | Inhalt
- --------+---------+-----------
- 0 | 1 Wort | Segment des Puffers
- 2 | 1 Wort | Offset des Puffers
- 4 | 1 Wort | Länge des Puffers in Byte
- | | max. 0FFFFh = 1 Segment
-
- Ausgabe: CF = 0 ->> okay, Datei kopiert
- CF = 1 ->> Fehler
- AX = Fehlernummer
-
- Bes.: Die im Falle eines Fehlers evtl. schon teilweise erstellte
- Zieldatei wird nicht gelöscht.
- Der Puffer darf nicht über eine Segment-Grenze gehen. (muß
- von der aufrufenden Routine sichergestellt werden!)
- Sinnvollerweise sollte für die Puffergröße ein Vielfaches
- von 512xD (Sektorgröße) gewählt werden.
-
-
- ■ Definition der Puffer-Tabelle
-
- PUFFER_TABELLE STRUC [BX]
- puffer_seg dw ?
- puffer_off dw ?
- puffer_len dw ?
- ENDS
-
- ----------------------------
- RenameFile
-
- Funktion: Verschieben oder umbenennen einer Datei
-
- Eingabe: DS:SI -> alter Dateiname
- ES:DI -> neuer Dateiname
-
- Ausgabe: CF = 0 ->> okay, Datei umbenannt
- CF = 1 ->> Fehler
- AX = Fehlernummer
-
- ----------------------------
- DeleteFile
-
- Funktion: Löschen einer Datei
-
- Eingabe: DS:SI -> Dateiname
-
- Ausgabe: CF = 0 ->> okay, Datei gelöscht
- CF = 1 ->> Fehler
- AX = Fehlernummer
-
- ----------------------------
- GetSetAttributes
-
- Funktion: Lesen/Setzen der Attribute einer Datei
-
- Eingabe: AL = 0 ->> Attribute Lesen
- Ausgabe: AX = Attribute
- AL = 1 ->> Attribute Schreiben
- Eingabe: CX = Attribute
- DS:SI -> Dateiname
-
- Ausgabe: CF = 0 ->> okay
- CF = 1 ->> Fehler
- AX = Fehlernummer
-
- ----------------------------
- ExistFile
-
- Funktion: Feststellen, ob eine Datei existiert
-
- Eingabe: DS:SI -> Dateiname oder Maske
-
- Ausgabe: CF = 0 ->> Datei existiert
- CF = 1 ->> Datei existiert nicht
-
- Bes.: Benötigt ca. 550 Byte Platz auf dem Stack
- Die Routine findet auch Geräte.
-
- Hinweis: Ob ein Directory existiert kann überprüft werden,
- indem man testet, ob das Gerät CON im entsprechenden
- Directory vorhanden ist. Falls hierauf der Fehlercode
- 03h zurück gegeben wird, existiert das Directory nicht.
-
- ---------------------------
- FileTimeToDOSTime
-
- Funktion: Konvertiert die Zeit vom Datei-Format ins DOS-Format
-
- Eingabe: CX = Zeit im Datei-Format
-
- Ausgabe: DX und CX enthalten die Zeit im DOS-Format:
- CL = Minuten
- CH = Stunden
- DL = Sekunden
- DH = Hundertstel Sekunden (immer 0)
-
- Bes.: Die angegebene Zeit wird NICHT überprüft.
- Die Sekunden werden für Dateien nur in 2-Sekunden-
- Interavallen gespeichert.
-
- ---------------------------
- DOSTimeToFileTime
-
- Funktion: Konvertiert die Zeit vom DOS-Format ins Datei-Format
-
- Eingabe: DX und CX enthalten die Zeit im DOS-Format:
- CL = Minuten
- CH = Stunden
- DL = Sekunden
-
- Ausgabe: CF = 0 ->> okay
- CX = Zeit im Datei-Format
- CF = 1 ->> Fehler, falsche Zeit angegeben
-
- Bes.: Die Sekunden werden für Dateien nur in 2-Sekunden-
- Interavallen gespeichert.
-
- ---------------------------
- FileDateToDOSDate
-
- Funktion: Konvertiert das Datum vom Datei-Format ins DOS-Format
-
- Eingabe: DX = Datum im Datei-Format
-
- Ausgabe: DX und CX enthalten das Datum im DOS-Format:
- CX = Jahre
- DH = Monate
- DL = Tage
-
- Bes.: Das angegebene Datum wird NICHT überprüft.
-
- ---------------------------
- DOSDateToFileDate
-
- Funktion: Konvertiert das Datum vom DOS-Format ins Datei-Format
-
- Eingabe: DX und CX enthalten das Datum im DOS-Format:
- CX = Jahre
- DH = Monate
- DL = Tage
-
-
- Ausgabe: CF = 0 ->> okay
- DX = Datum im Datei-Format
- CF = 1 ->> Fehler, falsches Datum angegeben
-
-