Important Notice
The pages on this site contain documentation for very old MS-DOS software,
purely for historical purposes.
If you're looking for up-to-date documentation, particularly for programming,
you should not rely on the information found here, as it will be woefully
out of date.
Interrupt, InterruptX Routines Programming Example
◄Example► ◄Contents► ◄Index► ◄Back►
──────────────────────────────────────────────────────────────────────────────
'This example uses the Interrupt routine to determine the current
'drive and the amount of free space remaining on the drive.
'Note: To use the Interrupt routine, you must load the Quick library
'QBX.QLB using the /L switch when you begin QBX. The following include
'file must also be present.
'$INCLUDE: 'QBX.BI'
'Define registers.
DIM regs AS RegType
'Get current drive info; set up input and do system call.
regs.ax = &H1900
CALL Interrupt(&H21, regs, regs)
'Convert drive info to readable form.
Drive$ = CHR$((regs.ax AND &HFF) + 65) + ":"
'Get disk free space; set up input values and do system call.
regs.ax = &H3600
regs.dx = ASC(UCASE$(Drive$)) - 64
CALL Interrupt(&H21, regs, regs)
'Decipher the results.
SectorsInCluster = regs.ax
BytesInSector = regs.cx
IF regs.dx >= 0 THEN
ClustersInDrive = regs.dx
ELSE
ClustersInDrive = regs.dx + 65536
END IF
IF regs.bx >= 0 THEN
ClustersAvailable = regs.bx
ELSE
ClustersAvailable = regx.bx + 65536
END IF
Freespace = ClustersAvailable * SectorsInCluster * BytesInSector
'Report results.
CLS
PRINT "Drive "; Drive$; " has a total of";
PRINT USING "###,###,###"; Freespace;
PRINT " bytes remaining free."