FunktionsindexDie Einzelbeschreibungen enthalten als Warnhinweis das Zeichen !. Alle Zahlenangaben in den Einzelbeschreibungen sind hexadezimal. MS-DOS-Versionen vor 3 werden hier nicht beschrieben, obwohl einige Funktionen sich dort anders verhalten. Zahlenangaben in den Einzelbeschreibungen sind hexadezimal. Zur Beschreibung der Fehlercodes siehe das Quick-BASIC-Programm bei der Beschreibung von 59 Get Extended Error Information. Alte Registerinhalte: Generell gilt, dass die Registerinhalte vor dem Aufruf von INT21h-Funktionen nicht gesichert werden müssen, denn sie bleiben erhalten. Das gilt natürlich nicht für die Register, in denen die betreffende INT21h-Funktion Werte zurückgibt. Lediglich bei den Funktionen 63h und 4Bh kann man sich nicht darauf verlassen, dass Registerinhalte erhalten bleiben. Die Funktion 63h wurde nur von MS-DOS 2.5 unterstützt. Bei Verwendung der Funktion 4Bh überstehen nur CS und IP mit Sicherheit den Funktionsaufruf. Das bedeutet, dass man vor diesem Funktionbsaufruf die Register SS und SP in Variablen innerhalb des Codesegmentes des aufrufenden Programmes sichern muss.
FU00HTerminate Program (CP/M)Beendet Programm und gibt seinen Speicherbereich wieder an DOS zurück. ! Geänderte Dateilängen werden nicht im Directory vermerkt. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 31H oder 4CH angeraten. Aufruf: AH=00 CS=Segment PSP Return: Int-Vektoren 22H bis 24H werden aus PSP ab Offset 0AH restauriert. Alle Dateipuffer werden auf Disk geschrieben. Fehler: keine FU01HRead Keyboard and Echo (CP/M)Liest ein Zeichen von Standard_Input. Falls bei der Eingabe eine Funktionstaste betätigt wurde (AL=0) muss die Funktion ein zweites Mal aufgerufen werden, um den erweiterten Tastencode zu ermitteln. Programmabbruch durch ctrl-C oder ctrl-Break möglich. Zeichen werden angezeigt. bei Eingabe von Tastatur wird auf ein Zeichen gewartet, falls der Tastaturpuffer leer ist. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten. Aufruf: AH=01 Return: AL=Zeichen Fehler: keine FU02HDisplay Character (CP/M)Schreibt ein Zeichen nach Standard_Output. Programmabbruch durch ctrl-C oder ctrl-Break möglich Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 40H angeraten. Aufruf: AH=02 DL=Zeichen Return: nichts Fehler: keine FU03HAuxiliary Input (CP/M)Liest ein Zeichen von Standard_Auxiliary. Programmabbruch durch ctrl-C oder ctrl-Break möglich, bei Eingabe von Tastatur wird auf ein Zeichen gewartet, falls der Tastaturpuffer leer ist. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten. Aufruf: AH=03 Return: AL=Zeichen Fehler: keine FU04HAuxiliary Output (CP/M)Schreibt ein Zeichen nach Standard_Auxiliary. Programmabbruch durch ctrl-C oder ctrl-Break möglich. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 40H angeraten. Aufruf: AH=04 DL=Zeichen Return: nichts Fehler: keine FU05HPrint Character (CP/M)Schreibt ein Zeichen nach Standard_List_Device Programmabbruch durch ctrl-C oder ctrl-Break möglich. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 40H angeraten. Aufruf: AH=05 DL=Zeichen Return: nichts Fehler: keine FU06HDirect Console I/O (CP/M)1. Liest ein Zeichen von Standard-Input (kein Echo, kein Warten auf Eingabe). Falls bei der Eingabe eine Funktionstaste betätigt wurde (AL=0) muss die Funktion ein zweites Mal aufgerufen werden, um den erweiterten Tastencode zu ermitteln. 2. Schreibt ein Zeichen nach Standard_Output. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktionen 3FH und 40H angeraten. Aufruf: AH=06 DL=0FF als Flag für Input, 00..0FE= auszugebendes Zeichen Return: bei Zeroflag=0: AL=Zeichen bei Zeroflag=1: kein Zeichen Fehler: keine FU07HDirect Console InputLiest ein Zeichen von Standard-Input (kein Echo) Falls bei der Eingabe eine Funktionstaste betätigt wurde (AL=0) muss die Funktion erneut aufgerufen werden, um den erweiterten Tastencode zu ermitteln. Bei Eingabe von Tastatur wird auf ein Zeichen gewartet, falls der Tastaturpuffer leer ist. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten. Aufruf: AH=07 Return: AL=Zeichen Fehler: keine FU08HRead KeyboardLiest ein Zeichen von Standard-Input (kein Echo). Falls bei der Eingabe eine Funktionstaste betätigt wurde (AL=0) muss die Funktion ein zweites Mal aufgerufen werden, um den erweiterten Tastencode zu ermitteln. Programmabbruch durch ctrl-C oder ctrl-Break möglich. Bei Eingabe von Tastatur wird auf ein Zeichen gewartet, falls der Tastaturpuffer leer ist. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten. Aufruf: AH=08 Return: AL=Zeichen Fehler: keine FU09HDisplay String (CP/M)Schreibt eine Zeichenkette, die mit $ beendet sein muss, nach Standard_Ausgabe. Beispiel siehe FU0AH. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 40H angeraten. Aufruf: AH=09 DS:DX=Beginn Zeichenkette Return: nichts Fehler: keine FU0AHBuffered Keyboard Input (CP/M)Liest eine Zeichenkette von Standard_Input in einen Puffer. Bei Eingabe von Tastatur ist Edieren möglich. Programmabbruch durch ctrl-C oder ctrl-Break möglich. Zeichen werden angezeigt. Bei Eingabe von Tastatur wird auf ein Zeichen gewartet, falls der Tastaturpuffer leer ist. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten. Aufruf: AH=0A DS:DX=Anfangsadresse Puffer MAX=Pufferlänge: inkl. des CRs von der Eingabe! Struktur des Puffers: MAX db BufLen IST db ? BUF db BuFLen dup (?) Return: IST=Anzahl gelesener Zeichen BUF=gelesene Zeichen ohne das CR der Eingabe. Das CR ist jedoch im Puffer mit enthalten. Wird nur CR betätigt, ist BUF=0, im folgenden Byte des Puffers steht CR. Fehler: keine Beispiel zu FU09H und FU10H: CODE SEGMENT ASSUME CS:CODE,DS:CODE ORG 100h START: JMP MARKE TEXT1 DB 'WIE HEISST DU ?',13,10,'$' TEXT2 DB 'GUTEN TAG, ','$' EINGABE DB 10 ;Pufferlänge inkl.CR DB 0 ;Anzahl eingegebener Zeichen DB 10 DUP (24h) ;maximal sind 9 Zeichen + CR eingebbar DB '$' ;für Ausgabe mit INT21 Funktion 9 MARKE: MOV DX,OFFSET TEXT1 ;Lade Adresse von TEXT1 MOV AH,09 ;Lade Funktionsnummer INT 21h ;Ausgabe von TEXT1 MOV DX,OFFSET EINGABE ;Lade Adresse d. Eingabepuffers MOV AH,0Ah ;Lade Funktionsnummer INT 21h ;Eingabe eines Textes MOV DX,OFFSET TEXT2 ;Lade Adresse von TEXT2 MOV AH,09 ;Lade Funktionsnummer INT 21h ;Ausgabe von TEXT2 MOV DX,OFFSET EINGABE+2 ;Lade Adresse d. Eingabepuffers MOV AH,09 ;Lade Funktionsnummer INT 21h ;Ausgabe des Namens MOV AH,02 ;Ausgabe eines Linefeeds MOV DL,0Ah ;ASCII-Code 0A hex INT 21h MOV AH,4Ch ;Beende das Programm INT 21h CODE ENDS END START FU0BHCheck Keyboard Status (CP/M)Testet, ob ein Zeichen zum Einlesen von Standard_Input ansteht. Programmabbruch durch CTRL_C oder CTRL_Break möglich, Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 4406H angeraten. Aufruf: AH=0B Return: AL=00: kein Zeichen da AL=FF: Zeichen vorhanden Fehler: keine FU0CHFlush Keyboard, read KeyboardLöscht den Puffer von Standard_Input und ruft dann die Eingabefunktion von AL auf. AL=0 löscht nur den Tastaturpuffer. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten. Aufruf: AH=0C AL=0, 1, 6, 7, 8 oder 0A. Es handelt sich um zugelassene Tastaturfunktionen, die das Gleiche leisten wie INT 21h-Funktionen mit der gleichen Nummer. bei AL=0A DS:DX=Puffer, vergl. FU0AH ! andere Werte führen sofort zum Ende der Funktion. Return: Ergebnis der entsprechenden Funktion. Fehler: keine FU0DHReset Disk (CP/M)Schreibt alle Puffer auf Disk Diese Funktion ist seit DOS 2.x undokumentiert und sollte somit nicht mehr verwendet werden. Angeblich kann ihre Verwendung unter späteren DOS-Versionen Schaden anrichten. Aufruf: AH=0D Return: nichts Fehler: keine FU0EHSelect Disk (CP/M)Setzt angegebenes Laufwerk als aktuelles (=default) Laufwerk Aufruf: AH=0E DL=Laufwerk (A=0, 1=B, max 19H=Z) Return: AL=Anzahl logischer Laufwerke, Wert von LASTDRIVE Fehler: keine FU0FHOpen File (CP/M)Öffnet eine Datei zur Bearbeitung mit FCB. ! überholte Funktion, neue Funktion:FU3DH. !CURREC und RECLEN werden nicht initialisiert. RECLEN wird auf 128 gesetzt. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3DH angeraten. Aufruf: AH=0F DS:DX=ungeöffneter FCB Return: AL=0 CURBLK=0,RECLEN=80H,FSIZE,FDATE,FTIME aus Directory Fehler: AL=FF FU10HClose File (CP/M)Schließt eine Datei nach Bearbeitung mit FCB. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3EH angeraten. Aufruf: AH=10 DS:DX=geöffneter FCB Return: AL=0 Datei geschlossen,FCB aktualisiert Fehler: AL=FF=Eintrag nicht gefunden FU11HSearch For First Entry (CP/M)Sucht Directory-Eintrag auf angegebenem Laufwerk. Bei Verwendung des erweiterten FCBs kann man nach Dateien mit bestimmten Attribut suchen. ! DTA vorher auf Zielpuffer setzen (Funktion 1A); die Funktion legt das Suchergebnis dort als ungeöffneten FCB gleichen Typs ab. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 4EH oder 714EH angeraten. Aufruf: AH=11 DS:DX=ungeöffneter FCB ? in Dateinamen und Erweiterung erlaubt Return: AL=0 Rückgabe an momentaner DTA: wenn normaler FCB: DTA+0: Laufwerk (1=A) DTA+1:Dir-Eintrag 32 Bytes wenn erweiterter FCB: DTA+0: FF DTA+1: 5 Bytes 0 DTA+7: Suchattribut DTA+8: Laufwerk (1=A) DTA+9: Dir-Eintrag 32 Bytes Fehler: AL=FF=Eintrag nicht gefunden FU12HSearch For Next Entry (CP/M)Sucht Directory-Eintrag nach Funktion 11 und legt ihn in der gleichen Art im momentanen DTA ab. ! Der Such-FCB darf zwischen beiden Funktionsaufrufen nicht verändert werden. Vergl FU11H für Details. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 4FH oder 714FH angeraten. FU13HDelete File (CP/M)! überholte Funktion, neu FU41H. Löscht alle gesuchten Dateien, die auf die Namensvorgabe passen. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 41H oder 7141H angeraten. Aufruf: AH=13 DS:DX=ungeöffneter FCB ? in Dateinamen und Erweiterung erlaubt Return: AL=0: eine oder mehrere Dateien gelöscht Fehler: AL=FF: keine übereinstimmende Datei gefunden FU14HSequential Read (CP/M)Liest den aktuellen Satz gemäß CURBLK und CURREC aus der angegebene Datei und legt ihn an der DTA ab. Positioniert danach CURBLK und CURREC auf den nächsten Satz. Ein unvollständiger Satz (EOF) wird mit 00h auf die volle Länge aufgefüllt. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten. Aufruf: AH=14 DS:DX=geöffneter FCB evtl zusätzlich im FCB: -CURBLK nach OPEN auf 0 -RECLEN nach OPEN auf 80h -CURREC nach OPEN undefiniert Return: AL=0: Satz nach DTA gelesen Fehler: AL= 1 Ende der Datei AL= 2 DTA zu klein AL= 3 Teil des Datensatzes gelesen FU15HSequential Write (CP/M)Schreibt den aktuellen Satz gemäß CURBLK und CURREC von der DTA in die angegebene Datei (gepuffert). Positioniert danach CURBLK und CURREC auf den nächsten Satz. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 40H angeraten. Aufruf: AH=15 DS:DX=geöffneter FCB evtl zusätzlich im FCB: -CURBLK nach OPEN auf 0 -RECLEN nach OPEN auf 80h -CURREC nach OPEN undefiniert Return: AL=0: Satz von DTA geschrieben Fehler: AL= 1 Diskette voll AL= 2 DTA zu klein FU16HCreate File (CP/M)Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktionen 3CH, 5AH, 5BH, oder 7116H angeraten. Erzeugt eine leere Datei. Attributvergabe mit erweitertem FCB möglich. Aufruf: AH=16 DS:DX=ungeöffneter FCB Return: AL=0: Datei mit Länge 0 erzeugt Fehler: AL=FF: keine leeren Einträge verfügbar FU17HRename File (CP/M)! überholte Funktion, neu FU56H. Gibt Datei den neuen Namen, falls dieser noch frei ist. Hidden-,System-, SubDir- und Volume-Einträge können nur mit erweitertem FCB umbenannt werden. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 56H oder 7156H angeraten. Aufruf: AH=17 DS:DX=spezieller FCB, siehe unter Stichwort=FCB Return: AL=0: Datei hat einen neuen Namen Fehler: AL=FF: keine übereinstimmende Datei gefunden FU19HGet Current Disk (CP/M)Liefert die Nummer des aktuellen Laufwerks. Aufruf: AH=19 Return: AL=Laufwerk (A=0, 1=B, max 19H=Z) Fehler: keine FU1AHSet DTA-Address (CP/M)Gibt DOS die Adresse bekannt, ab der der Puffer für den Datenaustausch von/zur Disk liegt. Default: PSP:80H Aufruf: AH=1A DS:DX=DTA-Adresse Return: nichts Fehler: keine FU1BHGet Default Drive DataLiefert einige Daten über das aktuelle Laufwerk Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 36H angeraten. Aufruf: AH=1B Return: AL=Sektoren pro Cluster CX=Bytes pro Sektor DX=Anzahl Cluster DS:BX=Adresse des FAT-ID-Bytes Fehler: keine FU1CHGet Drive DataLiefert einige Daten über das angegebene Laufwerk. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 36H angeraten. Aufruf: AH=1C DL=Laufwerk (0=aktuell, 1=A, usw.) Return: falls AL<>FF: AL=Sektoren pro Cluster CX=Bytes pro Sektor DX=Anzahl Cluster DS:BX=Adresse des FAT-ID-Bytes Fehler: AL=FF (weist daruf hin, dass die Laufwerksangabe ungültig ist. FU1FHundokumentiertFU21HRandom Read (CP/M)Liest wahlfrei einen Satz gemäß RELREC an die DTA. Positioniert nicht auf den nächsten Satz. Ein unvollständiger Satz (EOF) wird mit 00h auf die volle Länge aufgefüllt. Die Datensatznr. wird normalerweise mit FU24H gesetzt. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten. Aufruf: AH=21 DS:DX=geöffneter FCB zusätzlich im FCB: RELREC: Nr. des Satzes mit RECLEN Bytes (0=erster Satz) Return: AL=0: RECLEN Bytes nach DTA gelesen CURBLK und CURREC auf Wert gemäß RELREC gesetzt. Fehler: AL= 1 Ende der Datei AL= 2 DTA zu klein AL= 3 Teil des Datensatzes gelesen FU22HRandom Write (CP/M)Schreibt wahlfrei einen Satz gemäß RELREC von der DTA. Positioniert nicht auf den nächsten Satz. Ein unvollständiger Satz (EOF) wird mit 00h auf die volle Länge aufgefüllt. Die Datensatznr. wird normalerweise mit FU24H gesetzt. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 40H angeraten. Aufruf: AH=22 DS:DX=geöffneter FCB zusätzlich im FCB: RELREC: Nr. des Satzes mit RECLEN Bytes (0=erster Satz) Return: AL=0: RECLEN Bytes von DTA geschrieben CURBLK und CUUREC auf Wert gemäß RELREC gesetzt. Fehler: AL= 1 Diskette voll AL= 2 DTA zu klein FU23HGet File Size (CP/M)! überholt, statt dessen: FU42H. Liefert die Anzahl der Sätze mit der Länge RECLEN in der angegebenen Datei. ! rundet auf den nächsten Integer-Wert auf, wenn ein unvollständiger Datensatz gefunden wird. Trick: Um die Dateigröße in Bytes zu bestimmen, beim ungeöffneten FCB das Feld RECLEN auf 1 setzen. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 42H angeraten. Aufruf: AH=23 DS:DX=ungeöffneter FCB, zusätzlich RECLEN einfüllen Return: falls AL=0: Ergebnis in RELREC (4 bytes) Fehler: AL=FF: Datei nicht gefunden FU24HSet relative Record (CP/M)Legt Datensatznummer der Datei gem. FCB fest. Die Felder CURBLK, CURREC und RECLEN im FCB müssen vor Aufruf der Funktion entsprechend gefüllt werden. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 42H angeraten. Aufruf: AH=24 DS:DX=geöffneter FCB zusätzlich im FCB: CURBLK, CURREC und RECLEN Return: AL=0, RELREC auf Position gem. CURBLK und CURREC gesetzt. Fehler: keine (hier gibt es Widerspüche in den unterschiedlichen Beschreibungen) FU25HSet Interrupt VectorSetzt Interrupt Vektor auf einen neuen Wert. Aufruf: AH=25 AL=Interruptnummer DS:DX=neue Ausführungsadresse Return: nichts Fehler: keine FU26HCreate New PSPKopiert den aktuellen PSP in den angegebenen Speicherbereich und bereitet ihn für den weiteren Gebrauch durch ein Programm vor. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 4BH angeraten. Aufruf: AH=26 DX=Segment für neuen PSP Return: nichts Fehler: keine FU27HRandom Block Read (CP/M)Liest wahlfrei mehrere Sätze aus der angegebenen Datei ab RELREC an die DTA. Unvollständiger Satz (EOF) wird mit NUL aufgefüllt. Nach dem Lesen wird auf das erste Byte hinter dem zuletzt gelesenen Satz positioniert. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 3FH angeraten. Aufruf: AH=27 DS:DX=geöffneter FCB cx=Anzahl zu lesende Sätze zusätzlich im FCB: RELREC: Nr. des 1.zu lesenden Satzes mit RECLEN Bytes (0=erster Satz) Return: AL=0: RECLEN * CX Bytes nach DTA gelesen CURBLK, CURREC und RELREC auf nächsten zu lesenden Satz gesetzt. Fehler: AL= 1 Ende der Datei AL= 2 DTA zu klein AL= 3 Teil des Datensatzes gelesen FU28HRandom Block Write (CP/M)Schreibt wahlfrei mehrere Sätze in die angegebenen Datei ab RELREC aus der DTA. Bei=CX=0 wird nichts geschrieben, sondern es wird die Dateigröße auf den Wert RELREC*RECLEN gekürzt. Nach dem Schreiben wird auf das erste Byte hinter dem zuletzt geschriebenen Satz positioniert. Diese Funktion ist seit DOS 2.x veraltet. Es wird statt dessen die Verwendung der Funktion 40H angeraten. Aufruf: AH=28 DS:DX=geöffneter FCB CX=Anzahl zu schreibender Sätze zusätzlich im FCB: RELREC: Nr. des 1.zu schreibenden Satzes mit RECLEN Return: AL=0: RECLEN * CX Bytes von DTA in Datei geschrieben CURBLK, CURREC und RELREC auf nächsten zu schreibenden Satz gesetzt. Fehler: AL= 1 Diskette voll AL= 2 DTA zu klein FU29HParse File NameDurchsucht einen String nach einer gültigen Dateispezifikation bestehen aus Laufwerk:Name.Erweiterung und übernimmt diese in den ungeöffneten FCB an der DTA. Aufruf: AH=29 AL=Parsing Flags DS:SI=String ES:DI=ungeöffneter FCB Return: AL= 0 - FCB erzeugt, kein ? im String gefunden 1 - FCB erzeugt, ? im String gefunden FF - falsches Laufwerk im String ES:DI+1= Beginn Dateiname (Space, wenn fehlerhaft) Fehler: keine (es sei denn, man interpretiert AL=FFh als Fehler) FU2AHGet DateLiefert Systemdatum Aufruf: AH=2A Return: CX=Jahr (1980 bis 2099) DH=Monat (1 bis 12) DL=Tag (1 bis 31) AL=Wochentag (0=Sonntag) Fehler: keine FU2BHSet DateSetzt Systemdatum Aufruf: AH=2B CX=Jahr (1980 bis 2099) DH=Monat (1 bis 12) DL=Tag (1 bis 31) Return: AL=0 -Datum gültig und gesetzt Fehler: AL=FF FU2CHGet TimeLiefert die aktuelle Uhrzeit Aufruf: AH=2C Return: CH=Stunden (0 bis 23) CL=Minuten (0 bis 59) DH=Sekunden (0 bis 59) DL=hundertstel Sekunden (0 bis 99) Fehler: keine FU2DHSet TimeSetzt die aktuelle Systemzeit Aufruf: AH=2D CH=Stunden (0 bis 23) CL=Minuten (0 bis 59) DH=Sekunden (0 bis 59) DL=hundertstel Sekunden (0 bis 99) Return: AL=0 Zeit gültig und gesetzt Fehler: AL=FF FU2EHSet / Reset Verify FlagSchaltet Verify ON / OFF. Wird jedoch bei Schreibzugriffen auf Netzwerke nicht unterstützt. Aufruf: AH=2E AL=00 - Verify OFF, 01 - Verify ON Return: nichts Fehler: keine FU2FHGet DTA-Address (CP/M)Liefert die momentane Disk Transfer Adresse Aufruf: AH=2F Return: ES:BX=DTA-Adresse Fehler: keine FU30HGet MS-DOS Version Number / Ermittelt die MS-DOS-VersionsnummerAufruf: AH=30 AL=00 für Rückgabe der OEM-Seriennummer in BH AL=01 für Rückgabe des „Versionsflags” in BH Return: AH=Revisionsnummer (Unterversion) AL=Versionsnummer BH=OEM-Seriennummer oder „Versionsflag” BL:CX=24 Bit lange User-Seriennummer bei DOS-Versionen kleiner als 5 oder wenn Aufruf mit AL=00 Fehler: keine In Programmen, die die Versionsnummer abfragen, steht häufig dieser HEX-Code: b4 30 cd 21Hinweise:
Bei DOS 2.x und DOS 3.x liefert die Funktion in BH für MS-DOS 0FFh und für PC-DOS 00h zurück. Die 24 Bits der Register BL, CH und CL werden normalerweise lediglich mit 00h gefüllt. Ab DOS 4.x änderte Microsoft die Versionsabfrage. DOS 4.x enthält eine interne Tabelle mit Namen von Microsoft-Programmen, an die 3.40 als Version zurückgemeldet wird. Ab DOS 5.0 lässt sich mittels des Kommandos SETVER für Programme individuell festlegen, welche Versionsnummer einem Programm zurückgemeldet werden soll. Die Originalversionsnummer lässt sich ab DOS 5.0 über eine Erweiterung der Funktion 33h ermitteln. Beim Aufruf kann in AL ein Steuercode mitgegeben werden. Bei AL ungleich 1 wird die OEM-Seriennummer in BH zurückgegeben. Bei AL=1 erfolgt eine Abfrage des „Versionsflags”. Diese wird in BH signalsiert. Nur wenn hier Bit 3 gesetzt ist, liegt DOS im ROM (Read only Memory). Ab DOS 5.00 lässt sich die „wirkliche” Versionsnummer mit einer Untervariante der Funktion 33h abfragen: Aufruf: AH=33 AL=06 Untervariante „Get Version” Return: AL=FF Fehler, diese Funktion wird nicht unterstützt AL=06 diese Funktion wird unterstützt. Dann gilt: BL= DOS-Version BH= Revision DX=Bitflag Bits 0,1,2 Revisionsnummer im Bereich 0 bis 7 Bit 11 1=ROM-Version von DOS Bit 12 1=DOS ist im HMA-Bereich geladens:Nachfolgend ist ein Testlauf der Versionsabfragen unter VISTA dargestellt: Bei beiden Varianten der Versionsabfrage werden unterschiedliche Releasenummern zurückgemeldet. Abfrage mit Funktion 30h und 00 in AL di= si= bp= sp= dx= cx= bx= ax= cs= ds= es= ss= FFFE 0100 091E FFDE 3125 0000 FF00 0005 12E4 12E4 12E4 12E4 DOS Version 5.00 Abfrage mit Funktion 30h und 01 in AL di= si= bp= sp= dx= cx= bx= ax= cs= ds= es= ss= FFFE 0100 091E FFDE 3125 0000 0000 0005 12E4 12E4 12E4 12E4 Abfrage mit Funktion 33h und 06 in AL di= si= bp= sp= dx= cx= bx= ax= cs= ds= es= ss= FFFE 0100 091E FFDE 1000 0000 3205 3306 12E4 12E4 12E4 12E4 DOS Version 5.50 FU31HKeep ProcessBeendet ein Programm und hält DX Paragraphen seines Speicherbereiches resident. ! Offene Dateien bleiben geöffnet. Setzt den Return-Code fest, der beim Aufruf in AL angegeben wird. Nach Konvention bedeutet 00=kein Fehler. Aufruf: AH=31 AL=Return-Code DX=residenter Speicher ab Blockbeginn in Paragraphen CS=Segment PSP Return: Die Funktion gibt keine Argumente zurück. FU32HundokumentiertFU33HControl C-CheckDient dem Setzen bzw.Lesen des Control-C Status (=Break on/off) Aufruf: AH=33 AL=0 - Get AL=1 - Set, dann DL=0 - off, DL=1 -on Return: wenn AL nicht auf FF: DL=Status Fehler: AL=FF Die Funktion 33h wurde um die Aufrufmöglichkeiten mit 02, 05 und 06 in AL erweitert. Auf dieser Seite wird nur auf den Aufruf mit AL=6 eingegangen. FU34HundokumentiertFU35HGet Interrupt VectorLiest einen Interrupt- Vektor Aufruf: AH=35 AL=Interrupt-Nummer Return: ES:BX=Interrupt-Vektor Fehler: keine FU36HGet Disk Free SpaceLiefert die freie und gesamte Kapazität des angegebenen Laufwerkes. Freie Kapazität: AX*BX*CX Bytes Gesamtkapazität: AX*DX*CX Bytes Aufruf: AH=36 DL=Laufwerk (0=aktuell, 1=A, usw.) Return: falls AX ungleich FFFF: AX=Sektoren pro Cluster BX=freie Cluster CX=Bytes pro Sektor DX=Cluster pro Laufwerk Fehler: AX=FFFF FU37HundokumentiertFU38HGet/ Set Country DataAbfrage / Setzen der landesspezifischen Darstellung von Datum, Zeit, Zahlenkolonnen, usw. Aufruf: AH=38 AL=Country-Code oder wenn AL=FF: BX=Country-Code DX=FFFF - Set, sonst Get DS:DX=Zielpuffer (34 Bytes) Return: wenn CF=0 und bei Get: Puffer gefüllt Fehler: AX=2 FU39HCreate DirectoryRichtet ein neues Unterverzeichnis ein. Aufruf: AH=39 DS:DX=Beginn Pfad Return: falls CF=0: fehlerfrei Fehler: AX=3, 5 FU3AHRemove DirectoryEntfernt ein leeres Unterverzeichnis. Aufruf: AH=3A DS:DX=Beginn Pfad Return: falls CF=0: fehlerfrei Fehler: AX=3 FU3BHChange Current DirectoryWechselt in das angegebene Directory. Dieses muss sich auf dem aktuellen Laufwerk befinden. Der in ASCIIZ definierte Pfadname darf maximal 64 Bytes lang sein. Es sind relative und absolute Pfadangaben wie „..” und „\” zulässig. Aufruf: AH=3B DS:DX=Beginn Pfad Return: falls CF=0: fehlerfrei Fehler: AX=3, 5, 16 FU3CHCreate HandleErzeugt eine leere Datei gemäß Pfad und öffnet sie zum Lesen und Schreiben. ! Eine bereits vorhanden Datei gleichen Namens wird gelöscht. Vergleiche FU5BH Aufruf: AH=3C CX=Attribut [08 (Volume) und 10h(SubDir) nicht möglich] DS:DX=Beginn Pfad Return: falls CF=0: AX=Handle Fehler: AX=3, 4, 5 FU3DHOpen HandleEröffnet eine Datei und positioniert auf Dateianfang. Zum Positionieren innerhalb der Datei vergl. FU42H. Aufruf: AH=3D AL=Zugriffscode 0=lesen, 1=schreiben, 2=lesen u.schreiben DS:DX=Beginn Pfad Return: falls CF=0: AX=Handle Fehler: AX=1, 2, 3, 4, 5, C FU3EHClose HandleSchließt eine offene Datei inkl. Schreiben des Puffers und Anpassen der Directory. Aufruf: AH=3E BX=Handle Return: falls CF=0: O.K. Fehler: AX=6 FU3FHRead HandleLiest von Datei oder Gerät in einen Puffer. Aufruf: AH=3F BX=Handle DS:DX=Zielpuffer CX=Anzahl zu lesende Bytes Return: falls CF=0: AX=Anzahl gelesener Bytes (0=EOF) Fehler: AX= 5, 6 FU40HWrite HandleSchreibt Puffer in Datei oder auf Gerät. Aufruf: AH=40 BX=Handle DS:DX=Quellpuffer CX=Anzahl zu schreibender Bytes Return: falls CF=0: AX=Anzahl geschriebener Bytes (0=Disk full) Fehler: AX= 5, 6 FU41HDelete Directory EntryLöscht die angegebene Datei. ! Read-only-Dateien vorher mit FU43H anpassen. Aufruf: AH=41 DS:DX=Beginn Pfad (keine Wildcards erlaubt!) Return: falls CF=0: O.K. Fehler: AX=2, 6 FU42HMove File Pointer/ Get File SizePositioniert in der Datei für nächste Schreib- oder Leseoperation. Zur Bestimmung der Dateigröße: Aufruf mit CX:DX=0:0, AL=2 Aufruf: AH=42 AL gibt an, wie die Position zu errechnen ist: AL=0 :Dateianfang plus DX:CX AL=1 aktuelle Dateiposition plus DX:CX AL=2 Dateiende plus plus CX:DX BX=Handle CX=High Word Position DX=Low Word Position Return: falls CF=0: fehlerfrei DX=High Word der neuen Position AX=Low Word der neuen Position Fehler: AX=1, 6 FU43HGet/ Set File AttributesLiest oder setzt das Attribut der angegeben Datei. Das Attributbyte ist bei INT 21h (DOS-Interrupt) beschrieben. ! Volume- oder SubDir-Attribut nicht erlaubt. Aufruf: AH=43 AL=0 lesen, AL=1 schreiben (dann CX=neues Attribut) DS:DX=Beginn Pfad Return: falls CF=0: CX=Attribut (bei Lesen) Fehler: AX=1, 2, 3, 5 FU45HDuplicate File Handle generiert ein zweites Handle für eine bereits geöffnete Datei. Die Funktionen 45H und 46H werden normalerweise verwendet, um die Standardein- oder ausgabe umzuleiten.Aufruf: AH=45 BX=Handle Return: falls CF=0: AX=neuen Handle Fehler: AX=4, 6 Das Bewegen des Dateizeigers in einem Handle durch Lesen, Schreiben oder Suchen bewirkt eine gemeinsame Änderung in beiden Handles. Das Schließen eines der beiden Handles führt nicht zum Schließen des anderen Handles.
Durch Duplizieren eines Handles und anschließendem Schließen eines der beiden Handles werden die Verzeichniseinträge aktualisiert. Dies Verfahren ist schneller als das Schließen und erneute Eröffenen einer Datei. Quelle für diesen Hinweis: http://www.ousob.com/ng/masm/ng814db.php gesichtet im Februar 2011 FU46HForce Duplicate File HandleOrdnet zwei verschiedenen Handles eine gemeinsame Datei zu. Das in CX angegebene Handle wird zum Duplikat des in BX angegebene Handles. Falls eine mit dem Handle in CX spezifizierte Datei bei Funktionsaufruf eröffnet war, wird sie geschlossen. Die Funktionen 45H und 46H werden normalerweise verwendet, um die Standardein- oder ausgabe umzuleiten. Aufruf: AH=46 BX=1.Handle, CX=2.Handle. Dass 2.Handle soll verändert werden. Return: falls CF=0: Datei gemäß CX geschlossen, Handle CX entspricht nun 1:1 dem Handle BX Fehler: AX=4, 6 Das Bewegen des Dateizeigers in einem Handle durch Lesen, Schreiben oder Suchen bewirkt eine gemeinsame Änderung in beiden Handles. Das Schließen eines der beiden Handles führt nicht zum Schließen des anderen Handles.
Die Funktion 46h kann für Umleitungen genutzt werden. Um beispielsweise die Standardausgabe (diese ist vordfefiniert als Handle 1) auf eine Datei umzuleiten, kann die Funktion mit CX=1 und BX=Handle der gewünschten Ausgabedatei aufgerufen werden. Quelle für diesen Hinweis: http://www.ousob.com/ng/masm/ng81942.php gesichtet im Februar 2011 FU47HGet Current DirectoryLiefert den aktuellen Pfad des angegebenen Laufwerkes. Aufruf: AH=47 DL=Laufwerk (0=aktuell, 1=A,...) DS:SI=Zielpuffer (64 Bytes) Return: falls CF=0: Zielpuffer mit aktuellem Pfad gefüllt. (ohne Laufwerk und ohne führendem \). Fehler: AX=15 FU48HAllocate Memory - Speicherplatz reservierenFordert einen Speicherblock von DOS an. Dieser Speicherblock wird von DOS nicht mehr an ein anderes Programm vergeben, bis er wieder freigegeben wird (FU49H). Aufruf: AH=48 BX=Größe des Blocks in Paragraphen (1 Paragraph=16 Bytes) Return: falls CF=0: AX=Segment 1.Block, BX=größter freier Block in Paragraphen falls CF=1 und AX=8: BX=größter freier Block in Paragraphen Fehler: AX=7, 8 AX=7: Die Memory Control Blocks (MCB) sind zerstört AX=8: Der zur Verfügung stehende Speicherplatz ist nicht ausreichend FU49HFree Allocated MemoryGibt einen beispielsweise mit FU48H angeforderten Speicherblock wieder frei. Beim Aufruf genügt ist, die Segmentadresse zu übergeben. Die Funktion findet die Länge des Speicherblockes in der Speicherverwaltung (Memory Control Block (MCB)). Aufruf: AH=49 ES=Segment 1.Block, der freigegeben werden soll. Return: falls CF=0: fehlerfrei Fehler: AX=7, 9 AX=7: Die Memory Control Blocks (MCB) sind zerstört AX=9: Die in ES angegebene Adresse wurde im MCB nicht gefunden. Sie ist demnach verkehrt FU4AHSet BlockÄndert Größe eines Speicherblocks. Aufruf: AH=4A BX=neue Größe des Blocks in Paragraphen (1 Paragraph=16 Bytes) ES=Segment 1.Block, der verändert werden soll Return: falls CF=0: neue Blockgröße gesetzt falls CF=1 und AX=8: BX=größter freier Block in Paragraphen Fehler: AX=7, 8, 9 AX=7: Die Memory Control Blocks (MCB) sind zerstört AX=8: Der zur Verfügung stehende Speicherplatz ist nicht ausreichend AX=9: Die in ES angegebene Adresse wurde im MCB nicht gefunden. Sie ist demnach verkehrt FU4BHLoad and Execute Program / Load OverlayDient zum Laden und Starten eines Programmes oder zum Nachladen eines Overlays. Das Programm wird als Kindprozess des aufrufenden Programmes (Vaterprozess) ausgeführt. Der Vaterprozess wird solange suspendiert. Laden und Starten: ! Vor dem Aufruf unbedingt mit FU4AH Speicher zur Verfügung stellen. Alle Register außer CS und IP werden zerstört. Im Beispielprogramm wird die Funktion 4BH genutzt. Sie dient zum Aufruf des im Umgebungsblock unter COMPSPEC eingetragenen primären Befehlsprozessors und an andere Stelle im Beispielprogramm zum Aufruf des Windows-Explorers. Aufruf: AX=4B00 DS:DX=Pfad- und Dateiname des aufzurufenden Programmes (ASCIIZ) ES:BX=Parameterblock, Struktur: OFS LEN Inhalt 00 2 Segment Environment 02 4 Ptr. Kommandozeile 06 4 Ptr. FCB1 (für 5CH) 0A 4 Ptr. FCB2 (für 6CH) Return: bei CF=0: Programm wurde ausgeführt und ist zurückgekehrt. Fehler: AX=1, 2, 8, 10, 11 (widersprüchliche Angaben an verschiedenen Stellen) Nachladen Overlay: AX=4B03 sonst alle Register wie bei Funktion 4B00H, jedoch anderer Parameterblock: OFS LEN Inhalt 00 2 Segment des Zielspeichers für Overlay 02 2 Relokationsfaktor (meist gleicher Inhalt wie OFS 0) Return: bei FC=0: Overlay geladen Fehler: AX=1, 2, 8, 10 (widersprüchliche Angaben an verschiedenen Stellen) FU4CHEnd Process (UNIX) =empfohlene MethodeBeendet ein Programm und gibt seinen Speicherbereiches wieder an DOS zurück. Gibt Return-Code zurück. Aufruf: AH=4C AL=Return-Code Return: Int-Vektoren 22H bis 24H werden aus PSP ab Offset 0AH restauriert. Alle Dateipuffer werden auf Disk geschrieben. Schließt alle geöffneten Dateien und frischt das Directory auf. Fehler: keine FU4DHGet Return Code Child ProcessErmittelt den von Funktion 31 oder 4C übergebenen Returncode und den Grund der Programmbeendigung. Der Returncode kann nur 1-mal ermittelt werden Aufruf: AH=4D Return: AL=Returncode AH=Grund der Programmbeendigung 0=normales Ende 1=Abbruch mit ^C 2=schwerer Fehler 3=durch Funktion 31 Fehler: keine FU4EHFind First FileSucht erste passende Datei gem. dem angegebenen Pfad. Die Attribute System und Hidden finden immer auch Archiv und Read-Only. Das Attribut Volume findet nur Volume. Aufruf: AH=4E CX=Attribut DS:DX=Beginn Suchpfad Return: Wenn CF=0: Ab DTA gefundenen Eintrag: Offset Länge Inhalt 0 21d DOS reserviert 15h 1 Attribut 16h 2 Zeit 18h 2 Datum 1Ah 4 Länge 1Eh 13d Name Fehler: AX= 2, 18 FU4FHFind Next FileSucht nach Funktion 4E die nächste passende Datei. Aufruf: AH=4F DTA von Funktion 4E vorbelegt. Return: Wenn CF=0: siehe bei Funktion 4E Fehler: AX= 18 FU50HundokumentiertFU51HundokumentiertFU52HundokumentiertFU53HundokumentiertFU54HGet Verify StateLiefert den momentanen Wert des Verify-Flags Aufruf: AH=54 Return: AL=00 -> OFF, 01 -> ON Fehler: keine FU55HundokumentiertFU56HDatei umbenennenEntspricht einem Rename mit Einbeziehung des Pfades. ! Wildcards im Pfadnamen verboten. Beide Pfade müssen auf dem gleichen Laufwerk liegen. Wenn die Pfadnamen sich unterscheiden, aber die Dateinamen und -typen gleich sind, werden die Dateien ins neue Verzeichnis kopiert und im alten gelöscht. Aufruf: AH=56 DS:DX=Beginn alter Pfad ES:DI=Beginn neuer Pfad Return: CF=0 wenn fehlerfrei Fehler: AX= 2, 5, 17 FU57HGet/ Set Date/ Time of FileLiest bzw. setzt das Datum und die Zeit einer Datei. Beide Parameter werden gepackt übergeben. ! bei Set erfolgt keine Gültigkeitsprüfung. Aufruf: AH=57 AL=0 ->get AL=1 ->set BX=Handle wenn set: CX=Zeit hhhh hmmm mmms ssss DX=Datum jjjj jjjm mmmt tttt Return: bei CF=0: get: CX=Zeit, DX=Datum set: Datum und Zeit gesetzt Fehler: AX= 2, 5, 17 FU58HGet/ Set allocation StrategyLiefert oder setzt die Strategie, mit der MS-DOS Speicher für Programme vergeben soll. Strategie 0 (=first fit): MS-DOS beginnt die Suche bei dem am weitesten unten liegenden Speicherblock, also bei möglichst kleinen Adressen. Der erste gefundene Block, der mindestens genauso groß ist wie der angeforderte Speicherblock, wird belegt. Strategie 1 (=best fit): MS-DOS durchsucht alle Speicherblöcke nach dem Block, der die Anforderungen am wenigsten übersteigt. Somit wird der "wirtschaftlichste Block" belegt. Strategie 2 (=last fit): MS-DOS beginnt die Suche bei dem am weitesten oben liegenden Speicheblock, also bei möglichst großen. Der erste gefundene Block, der mindestens genauso groß ist wie der angeforderte Speicherblock, wird belegt. MS-DOS verwendet standardmäßig die Methode "first fit", da sie die schnellstmögliche Vergabe gewährleistet. Beispielprogramm: page 65,120 .sall comment # Setzt die Speicherbelegungsstrategie auf 1 (best fit) Matthaei, 9-FEB-91 # .xlist include firm.asm .list mov b attr,16*n_blue+n_yell cld mov ax,5800h ;lese Speicherbelegungsstrategie int dos add al,48 ;justiere nach ASCII mov strat,al call prmsg db 'Zur Zeit wird die Speicherbelegungsstrategie ' strat db 0 db ' benutzt.' db cr,0 mov ax,5801h ;setze Speicherbelegungsstrategie 1 mov bx,1 int dos PRSTR 'Sie wurde auf 1 (best fit) geändert.' jmp ret0 code ends end start FU59HGet Extended Error InformationLiefert eine erweiterte Fehlerbeschreibung nach dem Auftreten eines Fehlers bei einer Funktion INT21. Die Funktion wird an einem Quick-BASIC-Testprogramm gezeigt. Aufruf: AH=59 BX=0 Return: AX=erweiterter Fehler BH=Fehlerklasse BL=empfohlene Aktion CH=Fehlerquelle Fehler: keine Quick-BASIC Textprogramm: 'Programmverwendung.: 'Testprogramm zum INT21, Funktion 59, erweiterten Fehlercode holen 'QB aufrufen mit OPTION /L wegen QuickLIB-Unterstützung 'Beim Linken mit LINK: QB (per Default wird daraus QB.LIB) als 'Bibliothek angeben TYPE regtyp ax AS INTEGER bx AS INTEGER cx AS INTEGER dx AS INTEGER bp AS INTEGER si AS INTEGER di AS INTEGER flags AS INTEGER ds AS INTEGER es AS INTEGER END TYPE DIM inreg AS regtyp, outreg AS regtyp ON ERROR GOTO FU59 OPEN "ABCDEFGH.IJK" FOR INPUT AS #1 '<- erzeugt einen fehler, ' da es die datei nicht gibt stop fu59: 'parameterbeschreibung für int 21h, erweiterte fehlercodes holen 'aufruf: 'ah=59h 'bx = 0 'rückgabe: 'ax=fehlerbeschreibung 'bh=fehlerursache 'bl=empfohlene aktion 'ch=fehlerquelle inreg.ax = &h5900: inreg.bx = 0 'hole erweiterten fehlercode call interrupt(&h31, inreg, outreg) print "Fehlerbeschreibung: "; select case outreg.ax case 0: print "kein Fehler" case 1: print "Unbekannte Funktionsnummer " case 2: print "Datei nicht gefunden" case 3: print "Pfad nicht gefunden" case 4: print "Zuviele Dateien gleichzeitig eröffnet" case 5: print "Zugriff verweigert" case 6: print "Ungültiger Handle" case 7: print "Speicher-Kontrollblock zerstört" case 8: print "Zu wenig freier Speicher" case 9: print "Ungültige Speicher-Kontrollblockadresse" case 10: print "Ungültiges Environment" case 11: print "Ungültiges Format" case 12: print "Ungültiger Zugriffscode" case 13: print "Ungültige Daten" case 14 print print "Kann nicht sein- diese Fehlerbeschreibung wird nicht verwendet" case 15: print "Ungültige Laufwerksangabe" case 16 print print "Versuch, das aktuelle Verzeichnis (Directory) zu löschen" case 17: print "Zugriff auf ein anderes Gerät" case 18: print "Keine weiteren Dateien" case 19: print "Diskette ist schreibgeschützt" case 20: print "Ungültige Gerätebezeichnung" case 21: print "Laufwerk nicht bereit" case 22: print "Unbekannter Befehl" case 23: print "Datenfehler (CRC)" case 24: print "Ungültige Datenlänge" case 25: print "Fehler beim Suchen" case 26: print "Unbekannter Gerätetyp" case 27: print "Sektor nicht gefunden" case 28: print "Drucker ohne Papier" case 29: print "Schreibfehler" case 30: print "Lesefehler" case 31: print "Allgemeiner Fehler" case 32: print "Fehler beim gemeinsamen Zugriff" case 33: print "Fehler bei Dateisperre" case 34: print "Unerlaubter Diskettenwechsel" case 35: print "FCB nicht verfügbar" case 80: print "Datei existiert bereits" case 82: print "Verzeichnis kann nicht erstellt werden" case 83: print "Abbruch nach Aufruf des Interrupts 24h (Set relative Record)" case else: print "Undefiniert, ="; outreg.ax end select print "Ursache___________: "; select case int(outreg.bx / 256) case 1 print "Resource erschöpft" print "(z.B.kein Speicherplatz mehr, keine offenen Kanäle mehr" case 2: print "Im Augenblick: Zugriff verboten" case 3: print "Sie haben keine Zugriffsberechtigung" case 4: print "Interner Fehler in der Systemsoftware" case 5: print "Hardwarefehler" case 6: print "Fehler in der Systemsoftware, z.B. fehlende Konfigurationsdatei" case 7: print "Fehler im Anwendungsprogramm " case 8: print "Objekt (z.B. Datei) nicht gefunden" case 9: print "Ungültiges Format oder Typ, z.B. falsches Dateiformat" case 10: print "Objekt (z.B. Datei) ist gesperrt" case 11: print "Problem mit Datenträger, z.B. Fehler auf Diskette" case 12: print "Existiert bereits, z.B. die Netztwerkbezeichnung" case else: print "Unbekannt" end select print "Fehlerquelle:_____: "; select case (outreg.cx / 256) case 1: print "unbekannt" case 2: print "Blocktreiber (z.B. Laufwerk)" case 3: print "Netzwerk " case 4: print "Serielles Gerät" case 5: print "RAM-Speicher" case else: print "unbekannt" end select print "Aktion:" select case (outreg.bx and 255) case 1: print "Vorgang wiederholen, dann Anwender zu Rate ziehen" case 2: print "Vorgang nach einer Pause wiederholen, dann Anwender zu Rate ziehen" case 3: print "Bitte stellen Sie die erforderlichen Informationen / Daten bereit" case 4 print "Programm vorzeitig beendet - Dateien geschlossen" close system case 5 print "Programm abgebrochen, Dateien nicht geschlossen" system case 6: print "Fehlermeldung ist nur eine Information" case 7: print "Bitte beheben Sie den Fehler" case else: print "Keine empfohlene Aktion gefunden" end select resume next FU5AHCreate Temporary FileErzeugt eine leere Datei ohne Angabe eines Namens (DOS liefert einen Namen) und öffnet sie zum Lesen und Schreiben ! Eine bereits vorhanden Datei gleichen Namens wird gelöscht. Aufruf: AH=5A CX=Attribut [08 (Volume) und 10h(SubDir) nicht möglich] DS:DX=Beginn Pfad, Aufbau: Pfadname, gefolgt von einem \, gefolgt von 14 NUL-Bytes. Return: falls CF=0: AX=Handle Fehler: AX=3, 5 FU5BHErzeugt eine leere Datei gem. Pfad und öffnet sie zum Lesen und Schreiben. Falls die Datei bereits existiert, wird Fehler 80 zurückgemeldet. In diesem Fall wird die existierende Datei nicht geöffnet! Vergl. Funktion 3C Aufruf: AH=5B CX=Attribut [08 (Volume) und 10h(SubDir) nicht möglich] DS:DX=Beginn Pfad Return: falls CF=0: AX=Handle Fehler: AX=3, 4, 5, 50h FU5CHLock / UnlockSperrt / entsperrt Teile einer Datei gegen jeden Zugriff durch andere Programme. SHARE.EXE muss geladen sein, sonst wird immer Fehler 1 generiert. Sperren sollte nur verwendet werden, wenn die Datei in einem Modus eröffnet wurde, der entweder Lesezugriffe oder gar nichts verbietet. Beim Entsperren muss der Datenbereich mit dem gesperrten Datenbereich übereinstimmen. Aufruf: AH=5C AL=0 -> Lock =1 ->Unlock BX=Handle CX=High Word Position DX=Low Word Position SI=High Word Länge DI=Low Word Länge Return: falls CF=0: fehlerfrei Fehler: AX=1, 6, 33 FU62HGet PSPLiefert die Segmentadresse des PSP vom gerade aktiven Programm Aufruf: AH=62 Return: BX=Segmentadresse PSP Fehler: keine FU6CHExtended Open/CreateAb DOS 4.0 steht diese Funktion zur Verfügung. Sie fasst die Funktionen
Diese Funktion ist seit Einführung langer Dateinamen veraltet. Nachfolger ist die Funktion 7116H. Aufruf: AH=6C AL=00 CX=Attribut. Belegung: Bit 6-15 reserviert 5=archive 4=reserviert 3=volume label (unklar, ob die Bit gesetzt werden kann) 2=system 1=hidden 0=readonly BX=Open-Modus (siehe weiter unten) DL=Aktion, falls Datei existiert bzw. nicht existiert. Belegung: Bits 7 bis 4, falls Datei nicht exisiert: 0000=mit Fehlermeldung abbrechen 0001=Datei kreeiren Bits 3 bis 0, falls Datei bereits existiert: 0000=mit Fehlermeldung abbrechen 0001=Datei eröffnen 0010=Datei ersetzen und eröffnen. DH=00 DS:SI=Beginn Pfad (ASCIIZ) Return: falls CF=0: AX=Handle CX=Statuscode 1=Datei wurde erzeugt und geöffnet 2=Datei wurde ersetzt und geöffnet. falls CF=1: Fehlercode steht in AX, z.B. 3, 4, 5, 50hBei Aufruf muss ein 16 Bit langer Open-Modus in BX übergeben werden. Sein Aufbau ist:
|