[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]
{ JW³ How do I detect active drives in Pascal?  My Program would crash if you
   ³ Typed in a non-existent drive as either source or destination.
Here's the method I use:
}
Uses
  Dos;
Var
  Isthere : Boolean;
Function ChangeDrive( drv: Char ): Boolean;
(*
Takes drive letter as parameter, returns True if change
succeeded, False if change failed (invalid drive)
*)
Var
  Regs:   Dos.Registers;
  NewDrv: Byte;
begin
(* Calculate drive code For desired drive *)
  NewDrv := orD( UpCase( drv ) ) - orD( 'A' ); (* A: = 0 *)
(* Change drive *)
  Regs.DL := NewDrv;
  Regs.AH := $0E;            (* Function 0Eh: Select Disk *)
  MSDos( Regs );
(* See if the change 'took' *)
  Regs.AH := $19; (* Function 19h:  Get current drive *)
  MSDos( Regs );
  ChangeDrive := (Regs.AL = NewDrv);
end; (* ChangeDrive *)
begin
  isthere := ChangeDrive('a');
  Writeln ('a: ',isthere);
  isthere := ChangeDrive('b');
  Writeln ('b: ',isthere);
  isthere := ChangeDrive('c');
  Writeln ('c: ',isthere);
  isthere := ChangeDrive('d');
  Writeln ('d: ',isthere);
  isthere := ChangeDrive('e');
  Writeln ('e: ',isthere);
end.
[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]