home *** CD-ROM | disk | FTP | other *** search
- { 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}
-