[Back to WIN-OS2 SWAG index]  [Back to Main SWAG index]  [Original]

Function to Test for the accessibility of a drive (its existence as well as
the presence of a disc in a drive) until the user choose to abort or
correct the problem.

The function (TestDrive) is included in this small demo program.

The function can be easily improved for example by using GetDriveType to
distinguish between Non-exitsent drives and Floppy disc drives with
no disc in them.

Coded for use with Borland Pascal 7.0 on a Windows 3.1 program.

>From : Dr D. Tetard, France, E-Mail : PandemoniumSoft@Earthling.Net

Program DrivePresent;

Uses Wincrt, Win31, WinProcs, WinTypes, Strings, WinDos;

   Dr : Array[0..1] of Char;

Function TestDrive(Drive : PChar) : Integer;

{ This function test for the presence of the drive whose letter is
'Drive'. If it's present

 (and a disc is in the drive), the function return 0. If it's not present
(for example,

  no disc in the drive or drive not present), the function ask to retry
and test again until

 the drive is found (for example the user has inserted a disc in the
drive)(return 0) or the

 user choose to abort (return IDNO). }

   F : TSearchRec;
   Txt : Array[0..255] of Char;
   OldError : Word;
   Rep : Integer;
   Error : Integer;
     Rep := 0;
          StrCopy(Txt, Drive); StrCat(Txt, ':\*.*');
	  OldError := SetErrorMode(SEM_FailCriticalErrors);
	  { Trap MS-DOS errors to avoid default handling of error messages }
	  FindFirst(Txt, faAnyFile, F);
	  { Test for the accessibility searching for 'X:\*.*' (any file) }
	  { Restore old Error mode }
          Error := DosError;
	  { If DosError <> 0, the drive is not accessible, so ask for another
test or abortion. }

          If Error <> 0 then
               StrCopy(Txt, 'Cannot find drive '); StrCat(Txt, Drive);
               StrCat(Txt, ':'#10#13'Retry test of drive ?');
               Rep := MessageBox(GetFocus, Txt, 'Watcher - Error', mb_YESNO or mb_IconQuestion);
     Until (Error = 0) or (Rep = IDNO);
     TestDrive := Rep;

     Write('Choose a drive to test : ');
     If TestDrive(Dr) = IDNO then Writeln('Abort operation.')
     Else writeln('Drive/Disc present.');

[Back to WIN-OS2 SWAG index]  [Back to Main SWAG index]  [Original]