'===========================================================================
' Subject: FIND AVAILABLE BYTES ON DRIVE      Date: 1990                   
'  Author: Peter Norton                       Code: QB, PDS                
'  Origin: Advanced BASIC Book              Packet: DISK.ABC
'===========================================================================
DECLARE FUNCTION DiskFree& (Drive$)

TYPE RegType
        ax      AS INTEGER
        bx      AS INTEGER
        cx      AS INTEGER
        dx      AS INTEGER
        bp      AS INTEGER
        si      AS INTEGER
        di      AS INTEGER
        flags   AS INTEGER
END TYPE

DECLARE SUB INTERRUPT (IntNo AS INTEGER, InRegs AS RegType, Outregs AS RegType)

        CLS
        PRINT "The number of bytes free on drive C are: ", DiskFree&("C");
        PRINT "The number of bytes free on drive A are: ", DiskFree&("A");

END

FUNCTION DiskFree& (Drive$)

   DIM InRegs AS RegType, Outregs AS RegType

   DiskFree& = -1
   IF LEN(Drive$) <> 1 THEN EXIT FUNCTION

   InRegs.ax = &H3600
   InRegs.dx = ASC(UCASE$(Drive$)) - ASC("A") + 1
   CALL INTERRUPT(&H21, InRegs, Outregs)
   IF Outregs.ax = -1 THEN EXIT FUNCTION

   Temp& = Outregs.ax
   DiskFree& = Temp& * Outregs.bx * Outregs.cx

END FUNCTION
