'=========================================================================== ' Subject: DETECT IF DRIVE IS READY Date: Unknown Date ' Author: Brian McLaughlin Code: PB ' Origin: dave@powerbasic.com Packet: DISK.ABC '=========================================================================== ' Drive Ready source for PowerBASIC 3.x ' by BRIAN MCLAUGHLIN $LIB ALL OFF DEFINT A-Z DECLARE FUNCTION DriveReady( BYVAL Drive$ ) FOR X = ASC( "A" ) TO ASC( "F" ) PRINT "Checking..."; Ready = DriveReady( CHR$( X )) PRINT "drive "; CHR$( X ); IF Ready THEN PRINT " ready." ELSE PRINT " NOT ready." END IF NEXT '=============================== FUNCTION DriveReady( BYVAL Drive$ ) PUBLIC AS INTEGER '=============================== ' This FUNCTION returns -1 (true) if the drive is ready, or 0 (false), ' if the drive is not ready, or the drive letter is an invalid drive. ' It will NOT recognize a CD-ROM drive as being ready. DIM DriveNum AS LOCAL INTEGER DIM DriveIsReady AS LOCAL INTEGER DriveNum = ( ASC( Drive$ ) OR 32 ) - 97 DriveIsReady = -1 'assume drive will be ready ! push DS ! xor AX, AX ! mov DX, DriveNum ; zero - based drive numbering used ! int &H13 ; CALL BIOS TO RESET the drive controller ! mov AX, &H401 ! mov CX, &H101 ! mov DX, DriveNum ! int &H13 ! mov AX, &H401 ! mov CX, &H101 ! mov DX, DriveNum ! int &H13 ! jnc DriveOK ; carry set could be a fixed disk ! mov AH, &H1C ; so LET us look, USING DOS ! mov DX, DriveNum ! inc DX ; one - based drive numbering used ! int &H21 ! cmp DX, &HFF ! je DriveOK ! mov AX, [BX] ! cmp AX, &HF8 ! je DriveOK ! mov DriveIsReady, 0 DriveOK: ! pop DS DriveReady = DriveIsReady END FUNCTION