Contributor: GREG ESTABROOKS { Author: Greg Estabrooks } Program DriveInf; Uses Crt, (* ClrScr routine *) Dos; (* Register Type, Intr() Routine *) Var Regs :Registers; (* To hold register info For Intr() *) CH :Char; (* To hold Drive to change to *) Function GetDrive :Byte; (* Routine to Determine the default drive *) begin Regs.AX := $1900; (* Function to determine drive *) Intr($21,Regs); (* Call Dos int 21h *) GetDrive := Regs.AL; (* Return Proper result *) (* Returns 0 = A, 1 = B, 2 = C, ETC *) end; Procedure ChangeDrive( Drive :Byte ); (* Routine to change default drive *) begin Regs.AH := $0E; (* Function to change Drives *) Regs.DL := Drive; (* Drive to change to *) Intr($21,Regs); (* Call Dos Int 21h *) end; Function NumDrives :Byte; (* Routine to determine number of valid drives *) Var CurDrive :Byte; (* Temporary storage For current drive*) begin CurDrive := GetDrive; (* Find out the current drive *) Regs.AH := $0E; (* Function to change drives *) Regs.DL := CurDrive; (* Change to current drive *) Intr($21, Regs); (* Call Dos *) NumDrives := Regs.AL; (* Return proper info to user *) end; begin ClrScr; (* Clear the screen *) (* Write Current Drive to Screen *) Writeln('Current Drive Is : ',CHR(GetDrive+65 ),':\'); Write('What Drive do you wish to change to ?[A..'); WriteLn(CHR(NumDrives + 64 ),']'); CH := ReadKey; (* Get Choice *) CH := UpCase( CH ); (* Convert to uppercase *) ChangeDrive( Ord( CH )-65 ); (* Change to chosen drive *) end. (**********************************************************************) { And here are the above in Inline Asm. I hope these help. } Function GetDrive :Byte; Assembler; { Routine to Determine the default drive } Asm Mov AX,$1900 { Function to determine drive } Int $21 { Call Dos int 21h } { Returns 0 = A, 1 = B, 2 = C, ETC } end;{GetDrive} Procedure ChangeDrive( Drive :Byte ); Assembler; { Routine to change default drive } { 0 = A, 1 = B, 2 = C, ETC } Asm Mov AH,$0E { Function to change Drives } Mov DL,Drive { Drive to change to } Int $21 { Call Dos Int 21h } end;{ChangeDrive} Function NumDrives :Byte; Assembler; { Routine to determine number of valid drives } Asm Call GetDrive { Find out the current drive, Returns } { Drive in AL } Mov AH,$0E { Function to change drives } Mov DL,AL { Change to current drive } Int $21 { Call Dos } { Number of drives is returns in AL } end;{NumDrives}