home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / bor_tips / ti415.asc < prev    next >
Text File  |  1988-05-02  |  2KB  |  56 lines

  1.   TITLE  :  FREE SPACE ON A DISK
  2. ------------------------------------------------------------------------------
  3. This program demonstrates how to obtain the number of available
  4. bytes on a disk using the REG and CALL INTERRUPT statements.
  5.  
  6. SUB GetFreeSpace(Drive)
  7.   SHARED Sectors,TotalSpace,AvailableSpace
  8.  
  9.                           ' Load the AH register with 36 hex
  10.   REG 1,&H3600            ' The AL register contains 00
  11.  
  12.                           ' Load the DX register with the drive
  13. designator
  14.   REG 4,Drive             ' 0 = default, 1 = A, etc
  15.  
  16.   Call Interrupt &H21     ' Invoke function 36 hex
  17.  
  18.   Sectors = REG(1)        ' sectors-per-allocation unit (cluster)
  19.   FreeAloc = REG(2)       ' number of available clusters
  20.   BytesPerSector = REG(3) ' bytes per sector
  21.   TotalAloc = REG(4)      ' total number of clusters
  22.  
  23.                           ' calculate the total space on the
  24. drive
  25.   TotalSpace = TotalAloc*Sectors*BytesPerSector
  26.  
  27.                           ' calculate the available space on the
  28. drive
  29.   AvailableSpace = FreeAloc*Sectors*BytesPerSector
  30.  
  31. END SUB
  32.  
  33.  
  34. Start:
  35.   CLS
  36.   INPUT "Which Drive (<ENTER> for current):",Ans$
  37.   Ans$ = UCASE$(LEFT$(Ans$,1))
  38.   IF Ans$ = "" THEN
  39.      Drive = 0
  40.    ELSE
  41.      Drive = ASC(Ans$) - &H40
  42.   END IF
  43.  
  44.   Call GetFreeSpace(Drive)
  45.     IF Sectors = -1 THEN         'SECTORS = -1 INDICATES AN
  46.       PRINT "Invalid Drive"      'INVALID DRIVE
  47.       DELAY 2
  48.       GOTO Start
  49.     END IF
  50.  
  51.   PRINT "Total size of the disk is ";TotalSpace;"bytes"
  52.  
  53.   PRINT "Free area on disk is ";AvailableSpace;"bytes"
  54.  
  55. END
  56.