#include <dos.h>
#include <bios.h>
#include <conio.h>
#include <stdio.h>

void main(void)
{
  struct diskfree_t dinfo;
  unsigned drive, drivecount;

  printf("\n"
    "\nОпределение параметров текущего логического диска"
    "\n  (C)Фролов А., 1995\n");

  // Определяем номер текущего диска
  _dos_getdrive(&drive);

  // Выводим на экран обозначение текущего диска
  printf("\nТекущий диск:                        %c:\n",
    'A' + drive - 1);

  // Вызываем функцию установки текущего диска.
  // Мы не изменяем текущий диск, вызов этой функции
  // нужен нам для определения количества установленных
  // в системе логических дисков
  _dos_setdrive(drive, &drivecount);

  // Получаем характеристики текущего диска
  _dos_getdiskfree(drive, &dinfo);

  printf("\nОбщее количество кластеров на диске: %u"
    "\nКоличество свободных кластеров:      %u"
    "\nКоличество секторов в кластере:      %u"
    "\nКоличество байт   в секторе:         %u"
    "\nРазмер свободного пространства в байтах: %ld"
    "\n",
    dinfo.total_clusters, dinfo.avail_clusters,
    dinfo.sectors_per_cluster, dinfo.bytes_per_sector,
    (long)dinfo.avail_clusters *  dinfo.sectors_per_cluster *
    dinfo.bytes_per_sector );

    printf("\nКоличество логических дисков:        %d"
      "\n", drivecount);
}
