Updates for Diskspace related functions

This commit is contained in:
Paul Tucker
2000-03-21 21:52:38 +00:00
parent f54922ee4f
commit 54e5294e7d
5 changed files with 63 additions and 40 deletions

View File

@@ -1,3 +1,18 @@
20000321-16:45 EST Paul Tucker <ptucker@sympatico.ca>
* source/rtl/diskspac.c
* Modified code since math wasn't working in '32 bit' mode
* reworked to be consistant amongst platforms.
+ hb_DiskSpace() does the grunt work for all supported platforms
* DiskSpace() calls hb_diskSpace()
* source/tools/io.c
* DiskFree(), DiskUsed, DiskFull() now call hb_DiskSpace()
* include/hbapi.c
+ #define HB_DISK_....
+ declaration for hb_DiskSpace()
! Disk...() functions return a double.
+ tests/tstdspac.prg
* tests for diskspace related functions
20000321-15:08 GMT+1 Victor Szakats <info@szelvesz.hu>
* source/rtl/diskspac.c

View File

@@ -97,6 +97,13 @@
#define PCOUNT hb_pcount()
#define ALENGTH( n ) hb_parinfa( n, 0 )
/* used by DiskSpace(), etc. */
#define HB_DISK_FREE 1
#define HB_DISK_AVAIL 2
#define HB_DISK_TOTAL 4
#define HB_DISK_USED 8
extern double hb_DiskSpace( USHORT, USHORT );
/* forward declarations */
struct _HB_CODEBLOCK;
struct _HB_BASEARRAY;

View File

@@ -122,7 +122,7 @@ HB_FUNC( DISKSPACE )
( PULARGE_INTEGER ) &i64TotalBytes,
( PULARGE_INTEGER ) &i64FreeBytes ) )
dSpaceFree = ( double ) i64FreeBytesToCaller.QuadPart ;
dSpaceFree = ( double ) (unsigned)i64FreeBytesToCaller.QuadPart ;
}
else
{

View File

@@ -39,51 +39,17 @@ HB_FUNC( RD )
HB_FUNC( DISKUSED )
{
#if defined(HB_OS_DOS)
struct diskfree_t disk;
long bytsfree, bytsfull;
_dos_getdiskfree( 0, &disk );
bytsfree = ( long ) disk.avail_clusters *
( long ) disk.sectors_per_cluster *
( long ) disk.bytes_per_sector;
bytsfull = ( long ) disk.total_clusters *
( long ) disk.sectors_per_cluster *
( long ) disk.bytes_per_sector;
hb_retnl( bytsfull - bytsfree );
#else
hb_retnl( 0 );
#endif
hb_retnd( hb_DiskSpace( ISNUM( 1 ) ? hb_parni( 1 ) : 0, HB_DISK_USED ));
}
HB_FUNC( DISKFREE )
{
#if defined(HB_OS_DOS)
struct diskfree_t disk;
_dos_getdiskfree( 0, &disk );
hb_retnl( ( long ) disk.avail_clusters *
( long ) disk.sectors_per_cluster *
( long ) disk.bytes_per_sector );
#else
hb_retnl( 0 );
#endif
hb_retnd( hb_DiskSpace( ISNUM( 1 ) ? hb_parni( 1 ) : 0, HB_DISK_FREE ));
}
HB_FUNC( DISKFULL )
{
#if defined(HB_OS_DOS)
struct diskfree_t disk;
_dos_getdiskfree( 0, &disk );
hb_retnl( ( long ) disk.total_clusters *
( long ) disk.sectors_per_cluster *
( long ) disk.bytes_per_sector );
#else
hb_retnl( 0 );
#endif
hb_retnd( hb_DiskSpace( ISNUM( 1 ) ? hb_parni( 1 ) : 0, HB_DISK_TOTAL ));
}

View File

@@ -0,0 +1,35 @@
/*
$Id$
tstdspac
This program demonstrates that the 4 diskspace related functions work
correctly for disks of any size.
Certain os's may allow limits to the amount of disk space available to
a user. If that is the case, you should see a difference between
the return value of DiskSpace() and DiskFree().
Currently, Disk quota's are only implimented for NT.
NOTE: Unlike Clipper, these functions return a floating point number!
Written by Paul Tucker {ptucker@sympatico.ca>
www - http://www.harbour-project.org
This test program placed in the public domain
*/
proc main( cDisk )
if empty( cDisk )
cDisk := "0"
Endif
cDisk := Val( cDisk )
? "Bytes available on disk: " + Transform( diskspace(cDisk),"999,999,999,999")
? "Bytes available for use: " + Transform( diskfree(cDisk),"999,999,999,999")
? " Bytes used: " + Transform( diskused(cDisk),"999,999,999,999")
? " Total bytes on disk "+PadL(cDisk,2)+": " + Transform( diskFull(cDisk),"999,999,999,999")