Contributor: GREG VIGNEAULT { 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_