DRVCOUNT.PAS

{* Подсчет количества дисков *}

Unit DRVCOUNT;
Interface
Implementation
Begin
 writeln('Программа показывает количество доступных дисковых устройств ');
End.

Program pas;

Uses DRVCOUNT.pas; {* Эту строку можно удалить *}
{$B - , N + , E + , I - , D - }
{ ************************************************************** }
{ *  * }
{ * BZSoft 1990 * }
{ *  * }
{ ************************************************************** }
{ Routine
For search Disk Number }

  Uses Dos,      Crt,      TPDos; {* Подключение модулей *}
Var {* Необходимые переменные *}
  INT11Dat  : Word Absolute $0;
  NumFloppy : BYTE;
  NumDr     : BYTE;
  I         : BYTE;
  LD        : byte;
  r         : registers;
  d         : byte;
Begin
  d := NumberOfDrives;
  d := ord(d) - 64;
  r.dl := d;
  r.ah := $32;
  MsDos(r);
  While r.al = $0FF Do
  Begin
    dec(d); {* Вычтем из d единицу *}
    r.dl := d;
    MsDos(r);
  End;
  LD := 64 + d;
  If (INT11dat And $0001) = 0 Then
    NumFloppy := 0
  Else Begin
    Case (INT11Dat And $00C0) Of            $00 : NumFloppy := 1;
      $40 : NumFloppy := 2;
  $80 : NumFloppy := 3;
  $C0 : NumFloppy := 4;
End;

  End;
  NumDr := LD - 64 - ( NumFloppy And 1 );
If HandleIsConsole(StdOutHandle) Then
  Writeln ('     BZSoft 1990. ( ', NumDr, ' active logical (disk) drives found.)');
Halt(NumDr);
End......