[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]

    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.

[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]