program valid_drv; uses dos; { Function ready_drives reports as valid only drives that are ready to be read. Findfirst does not cause a critical error even if a floppy is not ready and in machines with a single floppy the prompt to insert a diskette when testing for the B: drive (from IO.SYS) is avoided by the use of DOS services $4408 and $440E (requires DOS 3.2 or up). - Jose Campione (1:163/513.3) August 1994 - } function ready_drives: string; var regs : registers; i : byte; drs: string; sr : searchrec; function is_last(d:byte):boolean; {true if d is the only or the last name assigned to that drive} begin regs.ax:= $440E; regs.bl:= d; msdos(regs); is_last:= ((regs.flags and fcarry) = 0) and ((regs.al = 0) or (regs.al = d)); end; function is_floppy(d: byte): boolean; {true if d is a removable medium} begin regs.ax:= $4408; regs.bl:= d; msdos(regs); is_floppy := ((regs.flags and fcarry) = 0) and (regs.ax = 0); end; begin drs:= ''; for i:= 1 to 26 do begin if (not is_floppy(i)) or is_last(i) then begin findfirst(chr(i + 64) + ':\*.*',AnyFile,sr); if doserror = 0 then drs:= drs + chr(i + 64); end; end; ready_drives:= drs; end; begin writeln('drives ready : ',ready_drives); end.