	$36 GET DISK FREE SPACE

	int Dfree( DISKINFO *buf, int driveno );

typedef struct
{
    unsigned long   b_free;	/* Anzahl freier Cluster	*/
    unsigned long   b_total;	/* Gesamtanzahl an Clustern	*/
    unsigned long   b_secsiz;	/* Gre eines Sektors in Bytes */
    unsigned long   b_clsiz;	/* Sektoren pro Cluster 	*/
}
DISKINFO;

Fr massenspeicherorientierte Programme kann es sehr wichtig sein,
die Gre des freien Platzes auf dem Datentrger zu ermitteln.
Damit hat man z. B. die Mglichkeit, den Anwender zum rechtzeitigen
Diskettenwechsel aufzufordern. 'Disk Full' Fehlermeldungen oder gar
Datenverluste knnen dann sicher verhindert werden.

Genau diese Information liefert die Funktion $36 Dfree(). Dazu mu
die Nummer des gewnschten Laufwerks und die Adresse eines 16 Byte
groen Buffers an die Funktion bergeben werden. Wird als
Laufwerksnummer der Wert 0 bergeben, so wird die Information vom
aktiven Laufwerk geholt, bei einer 1 von Drive A, bei 2 von Drive B.

Die im Buffer bergebene Information teilt sich in 4 Langworte auf.
Das erste Langwort enthlt die Anzahl noch freier sogenannter
Allocation Units oder Cluster. Jede Datei, und sei sie auch nur acht
Bytes gro, bentigt mindestens eine solche Allocation Unit.

Das zweite Langwort gibt Aufschlu ber die Anzahl der auf der
Diskette vorhandenen Cluster, unabhngig, ob sie bereits belegt oder
noch frei sind. Bei der 'kleinen' einseitigen Diskette betrgt dieser
Wert $15C oder 351, die doppelseitigen Disketten haben $2C7 = 711
Cluster.

Das dritte Langwort enthlt die Gre eines Diskettensektors in Byte.
Dieser Wert betrgt im Normalfall 512 ($200) Bytes oder ein Vielfaches
davon.

Im letzten Langwort schlielich wird die Anzahl der zu einem Cluster
gehrenden physikalischen Sektoren vermerkt. Hier ist normalerweise
eine 2 eingetragen. Zwei Sektoren mit je 512 Bytes bilden also einen
Cluster (Allocation Unit) von insgesamt 1024 Bytes.

Aus den so gewonnenen Informationen kann nun ohne Schwierigkeiten die
Anzahl der noch verfgbaren Bytes berechnet werden.

In TOS-Versionen vor Rainbow-TOS 1.4 ist diese Funktion unglaublich
langsam, auch wenn das bei Benutzung eines Diskettenlaufwerkes nicht
so ins Auge fllt. Auf einer 20 MB Harddisk aber kann man bis zu 20
Sekunden warten, bis das Ergebnis geliefert wird.

Die Funktion liefert bei korrekter Ausfhrung eine 0
und bei einem aufgetretenen Fehler eine negative Zahl.

----------------------------------------------------------------------
MOVE.W	#0,-(SP)	* Information vom aktiven Drive
PEA	BUFFER		* Adresse des 16-Byte Buffers
MOVE	#$36,-(SP)	* Funktionsnummer
TRAP	#1
ADDQ.L	#6,SP		* Stack aufrumen
TST	D0		* Fehler aufgetreten ?
BNE	ERROR		* das ging schief
...
BUFFER:
freal:	DS.L	1	* Free Clusters
total:	DS.L	1	* Total Clusters
bps:	DS.L	1	* Bytes/physical Sector
pspal:	DS.L	1	* phys. Sectors/Cluster
----------------------------------------------------------------------
