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