[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]
{
From: GREG VIGNEAULT
Subj: Extended drives (CD-ROM)
---------------------------------------------------------------------------
In a message with STEVE ROGERS...
SR>PN> Is it acceptable and safe for the hardware to attempt to write
SR> > a test file to a CD-Rom drive? I would do this to find out that
SR> I tried this a few years ago and just got a write error. Should be
SR> safe enough.
LD>Although... would you not get the same result as you would on a
>write-protected disk, or a full disk, or one where the "test"
>file name is unacceptable?
Hi Lou,
I haven't been following this thread, so I don't know what all has
been said. I don't have a CD-ROM but I'll toss in some of the info
that I'm aware of...
Here is TP source that can detect if one or more CD-ROM is present
in a PC system, and the drive letter of the first CD-ROM. It tries
to find if the Microsoft CD-ROM Extension (MSCDEX) is installed...
}
(*******************************************************************)
PROGRAM CDROM; { compiler: Turbo Pascal 4.0+ }
{ Jan.07.94 Greg Vigneault }
USES Dos; { import Intr, Registers }
VAR DrvName : CHAR; { first extended drive (A: to Z:) }
DrvCount : WORD; { number of extended drives }
IsMSCDEX, { TRUE if MSCDEX is installed }
IsCDROM : BOOLEAN; { TRUE if extended drive is CDROM }
(*-----------------------------------------------------------------*)
{ Detect if/how-many extended drives (CD-ROMs) are in system ... }
PROCEDURE CD_ROMdat ( VAR DrvCount : WORD; { total ext. drives }
VAR FirstDrv : CHAR; { first ext. drv }
VAR IsMSCDEX : BOOLEAN; { MSCDEX found? }
VAR IsCDROM : BOOLEAN); { is CD-ROM? }
VAR Reg : Registers; { to access 8086 CPU registers }
BEGIN {CD_ROMdat}
{ initialize the VARs... }
FirstDrv := #0; { assume no extension drives }
IsMSCDEX := FALSE; { assume MSCDEX not installed }
IsCDROM := FALSE; { assume drive isn't a CD-ROM }
Reg.AX := $1500; { fn: check if CD-ROM is present }
Reg.BX := 0; { clear BX }
Intr ($2F, Reg); { invoke MSCDEX }
DrvCount := Reg.BX; { count of extended drives }
IF (DrvCount = 0) THEN EXIT; { abort if no extended drive }
FirstDrv := CHR (Reg.CX + 65); { first drive IN ['A'..'Z'] }
Reg.AX := $150B; { fn: CD-ROM drive check }
Reg.BX := 0; { Reg.CX already has drive # }
Intr ($2F, Reg); { call the CD-ROM services }
IF (Reg.BX <> $ADAD) THEN EXIT; { MSCDEX isn't installed }
IsMSCDEX := TRUE; { MSCDEX is installed }
IF (Reg.AX = 0) THEN EXIT; { ext. drive isn't a CD-ROM }
IsCDROM := TRUE; { extended is a CD-ROM }
END {CD_ROMdat}; { END PROCEDURE DC_ROMdat }
(*-----------------------------------------------------------------*)
BEGIN {PROGRAM CDROM}
CD_ROMdat (DrvCount, DrvName, IsMSCDEX, IsCDROM);
WriteLn;
IF (DrvCount <> 0) THEN BEGIN
IF IsMSCDEX THEN WriteLn ('MSCDEX is installed');
Write ('Extended drive(s) detected');
IF IsCDROM THEN Write (' (CD-ROM)');
WriteLn (' = ',DrvCount,' at ',DrvName,':');
END {IF DrvCount}
ELSE
WriteLn ('No extended drives (CD-ROMs) detected in system.');
WriteLn;
END {CDROM}.
(*******************************************************************)
The familiar Int21h file i/o can be used for reading files on an
extended drive. The MSCDEX also offers the following extended
functions...
o Get CD-ROM Drive List
o Get Copyright Filename
o Get Abstract Filename
o Get Bibliographic Filename
o Read Volume Table of Contents
o Absolute Disk Read
o Absolute Disk Write
o Get CD-ROM Extensions Version
o Get CD-ROM Units
o Get or Set Volume Descriptor Preference
o Get Directory Entry
o Send Device Request
Greg_
[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]