Contributor: JOSE CAMPIONE 
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 
440ドルE (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:= 440ドルE;
 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.
 

AltStyle によって変換されたページ (->オリジナル) /