[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;

Var
   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). }

Var
   F : TSearchRec;
   Txt : Array[0..255] of Char;
   OldError : Word;
   Rep : Integer;
   Error : Integer;
Begin
     Rep := 0;
     Repeat
          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) }
	  SetErrorMode(OldError);
	  { 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
          Begin
               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);
          End;
     Until (Error = 0) or (Rep = IDNO);
     TestDrive := Rep;
End;


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




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