home *** CD-ROM | disk | FTP | other *** search
- {
- Below is TP code to do drive-Type identification. I leave it as a
- research exercise For you to create code to differentiate between
- a RAM drive and fixed disk, if that's needed.
-
- }
- (********************************************************************)
- Program DrvCount; { coded by Greg Vigneault }
- Uses Crt,Dos; { For MsDos Function }
- Var Drives :Byte; { count of logical drives }
- Reg :Registers; { to access CPU Registers }
- ThisDrive :Byte; { loop count }
- DriveType :String[16]; { Type of drive found }
- DataBuffer :Array [0..127] of Byte; { buffer For Dos i/o }
- begin
- ClrScr; { remove screen clutter }
- Reg.AH := $19; { get current disk code }
- MsDos(Reg); { via Dos }
- Reg.DL := Reg.AL; { returned drive code }
- Reg.AH := $E; { select disk }
- MsDos(Reg); { via Dos }
- Drives := Reg.AL; { number of logical drives }
-
- WriteLn('Number of logical drives: ', Drives );
-
- Intr($11,Reg); { get system equipment flag }
- if ( (Reg.AX and 1) <> 0 ) { any floppies installed? }
- then WriteLn('(physical floppy drives: ',
- (Reg.AX SHR 6) and 3, ')' ); { get bits 6&7 }
-
- For ThisDrive := 1 to Drives do begin { scan all drives }
- Reg.AX := $440D; { using generic I/O control }
- Reg.CX := $860; { to get drive parameters }
- Reg.BL := ThisDrive; { For this drive }
- Reg.DX := ofs(DataBuffer); { Pointer to scratch buffer }
- Reg.DS := Seg(DataBuffer); { in is DS:DX }
- MsDos(Reg); { thank you, Dos }
- Case ( DataBuffer[1] ) of { which Type it is... }
- 0 : DriveType := '360 KB 5.25" FDD';
- 1 : DriveType := '1.2 MB 5.25" FDD';
- 2 : DriveType := '720 KB 3.5" FDD';
- 3 : DriveType := 'SD 8"'; { a relic from CP/M roots }
- 4 : DriveType := 'DD 8"'; { ditto }
- 5 : DriveType := 'Fixed/RAM disk'; { HDD or RAM }
- 6 : DriveType := 'Tape drive'; { a good investment }
- 7 : DriveType := '1.44 MB 3.5" FDD' { or "other" drv }
- else DriveType := '???'; { anything else }
- end; { Case }
- WriteLn(' - ', CHR(ThisDrive+64),': (', DriveType, ')' );
- { further code could ID between RAM drive & HDD }
- end; { For }
- end. { Program }
- (********************************************************************)