home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / utility / 252 / gemsrc / disk.mod < prev    next >
Encoding:
Modula Implementation  |  1988-02-13  |  1.9 KB  |  73 lines

  1. IMPLEMENTATION MODULE Disk;
  2.  
  3.  
  4.    FROM SYSTEM IMPORT ADDRESS, ADR;
  5.    IMPORT GEMDOS;
  6.    IMPORT AESForms;
  7.    IMPORT Text;
  8.  
  9.  
  10.    CONST
  11.  
  12.       FullErrorLine1 = "[3][ The disk is full. Please | delete any unnecessary files  |";
  13.       FullErrorLine2 = " before trying this operation. ][ OK ]";
  14.  
  15.    (********************************************************************)
  16.  
  17.    PROCEDURE CheckStatus ( Drive : (* IN *) CARDINAL );
  18.  
  19.    TYPE DTA = RECORD
  20.       Reserved   : ARRAY [0..20] OF CHAR;
  21.       Attributes : CHAR;
  22.       Time       : CARDINAL;
  23.       Date       : CARDINAL;
  24.       Size       : LONGCARD;
  25.       Name       : ARRAY [0..13] OF CHAR;
  26.    END;
  27.  
  28.    VAR
  29.       DriveMap  : LONGCARD;
  30.       SavedDTA  : ADDRESS;
  31.       DTABuffer : DTA;
  32.       Result    : INTEGER;
  33.  
  34.    BEGIN
  35.       GEMDOS.SetDrv ( Drive - 1, DriveMap );
  36.       GEMDOS.GetDTA ( SavedDTA );
  37.       GEMDOS.SetDTA ( ADR (DTABuffer) );
  38.       GEMDOS.SFirst ( "*.*", 010H, Result );
  39.       GEMDOS.SetDTA ( SavedDTA );
  40.    END CheckStatus;
  41.  
  42.    (********************************************************************)
  43.  
  44.    PROCEDURE SpaceAvailable (
  45.       Drive       : (* IN *) CARDINAL;
  46.       BytesNeeded : (* IN *) LONGCARD ) : BOOLEAN;
  47.  
  48.    VAR
  49.       InfoBuffer : GEMDOS.DiskInfoBuffer;
  50.       FreeBytes  : LONGCARD;
  51.       Success    : BOOLEAN;
  52.       FullError  : ARRAY [0..150] OF CHAR;
  53.       Choice     : INTEGER;
  54.  
  55.    BEGIN
  56.       GEMDOS.DFree ( InfoBuffer, Drive );
  57.       WITH InfoBuffer DO
  58.          FreeBytes := freeSpace * clusterSize * sectorSize;
  59.       END;
  60.       IF FreeBytes < BytesNeeded THEN
  61.          FullError := FullErrorLine1;
  62.          Success := Text.ConcatString ( FullError, FullErrorLine2, FullError );
  63.          Choice  := AESForms.FormAlert ( 1, FullError );
  64.          RETURN (FALSE);
  65.       ELSE
  66.          RETURN (TRUE);
  67.       END;
  68.    END SpaceAvailable;
  69.  
  70.  
  71. END Disk.
  72.  
  73.