Updates for Diskspace related functions
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -122,7 +122,7 @@ HB_FUNC( DISKSPACE )
|
||||
( PULARGE_INTEGER ) &i64TotalBytes,
|
||||
( PULARGE_INTEGER ) &i64FreeBytes ) )
|
||||
|
||||
dSpaceFree = ( double ) i64FreeBytesToCaller.QuadPart ;
|
||||
dSpaceFree = ( double ) (unsigned)i64FreeBytesToCaller.QuadPart ;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -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 ));
|
||||
}
|
||||
|
||||
35
harbour/tests/tstdspac.prg
Normal file
35
harbour/tests/tstdspac.prg
Normal 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")
|
||||
|
||||
Reference in New Issue
Block a user