home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c082_122 / 1.ddi / CLIBSRC1.ZIP / DOSDFREE.C < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-10  |  2.0 KB  |  70 lines

  1. /*---------------------------------------------------------------------------
  2.  * filename - dosdfree.cas
  3.  *
  4.  * function(s)
  5.  *        _dos_getdiskfree - gets disk free space (MSC compatible)
  6.  *--------------------------------------------------------------------------*/
  7.  
  8. /*
  9.  *      C/C++ Run Time Library - Version 5.0
  10.  *
  11.  *      Copyright (c) 1991, 1992 by Borland International
  12.  *      All Rights Reserved.
  13.  *
  14.  */
  15.  
  16.  
  17. #include <dos.h>
  18. #include <errno.h>
  19.  
  20. /*--------------------------------------------------------------------------*
  21.  
  22. Name            _dos_getdiskfree - gets disk free space
  23.  
  24. Usage           #include <dos.h>
  25.                 unsigned _dos_getdiskfree(unsigned drive,
  26.                                         struct diskfree_t *dfreep);
  27.  
  28. Prototype in    dos.h
  29.  
  30. Description     accepts a drive specifier in drive (0 = default, 1 = A, etc.)
  31.                 and fills in the diskfree_t structure pointed to by dfreep with
  32.                 disk characteristics.
  33.  
  34.                 The diskfree_t structure is defined as follows:
  35.  
  36.                 struct diskfree_t {
  37.                         unsigned total_clusters;
  38.                         unsigned avail_clusters;
  39.                         unsigned sectors_per_cluster;
  40.                         unsigned bytes_per_sector;
  41.                 };
  42.  
  43. Return value    Returns 0 on success.  Otherwise, returns non-zero
  44.                 and sets errno to:
  45.  
  46.                         EINVAL  Invalid drive specified
  47.  
  48. *---------------------------------------------------------------------------*/
  49.  
  50. unsigned _dos_getdiskfree(unsigned drive, struct diskfree_t *dtable)
  51. {
  52.     unsigned bx;
  53.  
  54.     _DL = drive;
  55.     _AH = 0x36;
  56.     geninterrupt(0x21);
  57.  
  58.     if (_AX == -1U)     /* error */
  59.         return (errno = EINVAL);
  60.     else                        /* success */
  61.     {
  62.         bx = _BX;
  63.         dtable->total_clusters = _DX;
  64.         dtable->sectors_per_cluster = _AX;
  65.         dtable->bytes_per_sector = _CX;
  66.         dtable->avail_clusters = bx;
  67.         return (0);
  68.     }
  69. }
  70.