From 8665e2523b6a13d0bcc28b60bb9e7505dfe66c13 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Fri, 22 Oct 1999 08:46:36 +0000 Subject: [PATCH] 19991022-10:33 GMT+1 --- harbour/ChangeLog | 9 +++++ harbour/doc/funclist.txt | 2 +- harbour/source/rtl/fm.c | 84 +++++++++++++++++++++++++++++++++++----- harbour/tests/Makefile | 1 + harbour/tests/memory.prg | 22 +++++++++++ 5 files changed, 107 insertions(+), 11 deletions(-) create mode 100644 harbour/tests/memory.prg diff --git a/harbour/ChangeLog b/harbour/ChangeLog index db6a8f98d2..2c53cf3d76 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,12 @@ +19991022-10:33 GMT+1 Victor Szel + * source/rtl/fm.c + tests/memory.prg + tests/Makefile + doc/funclist.txt + + MEMORY() support for Win32 platform, it can now return available + physical, page, virtual memory and total physical memory. + + Test program added. + 19991022-10:03 GMT+1 Victor Szel * source/rtl/fm.c + MEMORY() function enhanced internally. diff --git a/harbour/doc/funclist.txt b/harbour/doc/funclist.txt index 00aafac0c7..ebaed87ad5 100644 --- a/harbour/doc/funclist.txt +++ b/harbour/doc/funclist.txt @@ -176,7 +176,7 @@ MAXROW ;R; MEMOEDIT ;N; MEMOLINE ;R; MEMOREAD ;R; -MEMORY ;N; +MEMORY ;S; MEMOTRAN ;R; MEMOWRIT ;R; MEMVARBLOCK ;R; diff --git a/harbour/source/rtl/fm.c b/harbour/source/rtl/fm.c index e37e5244db..51850e3c74 100644 --- a/harbour/source/rtl/fm.c +++ b/harbour/source/rtl/fm.c @@ -54,6 +54,10 @@ This should be normally turned off in a final release */ #define HB_FM_STATISTICS +/* NOTE: The following #include "hbwinapi.h" must + be ahead of any other #include statements! */ +#include "hbwinapi.h" + #ifndef __MPW__ #include #endif @@ -287,43 +291,103 @@ HARBOUR HB_MEMORY( void ) switch( uiMode ) { case 0: /* (Free Variable Space [KB]) */ - ulResult = 9999; + #if defined(_Windows) || defined(WINNT) + { + MEMORYSTATUS memorystatus; + GlobalMemoryStatus( &memorystatus ); + ulResult = memorystatus.dwAvailPhys / 1024; + } + #else + ulResult = 9999; + #endif break; case 1: /* (Largest String [KB]) */ - ulResult = 9999; + #if defined(_Windows) || defined(WINNT) + { + MEMORYSTATUS memorystatus; + GlobalMemoryStatus( &memorystatus ); + ulResult = HB_MIN_( memorystatus.dwAvailPhys, ULONG_MAX ) / 1024; + } + #else + ulResult = 9999; + #endif break; case 2: /* (RUN Memory [KB]) */ - ulResult = 9999; + #if defined(_Windows) || defined(WINNT) + { + MEMORYSTATUS memorystatus; + GlobalMemoryStatus( &memorystatus ); + ulResult = memorystatus.dwAvailPhys / 1024; + } + #else + ulResult = 9999; + #endif break; case 3: /* UNDOCUMENTED! (Virtual Memory [KB]) */ - ulResult = 9999; + #if defined(_Windows) || defined(WINNT) + { + MEMORYSTATUS memorystatus; + GlobalMemoryStatus( &memorystatus ); + ulResult = memorystatus.dwAvailVirtual / 1024; + } + #else + ulResult = 9999; + #endif break; case 4: /* UNDOCUMENTED! (Free Expanded Memory [KB]) (?) */ - ulResult = 9999; + #if defined(_Windows) || defined(WINNT) + ulResult = 0; + #else + ulResult = 9999; + #endif break; case 101: /* UNDOCUMENTED! (Fixed Memory/Heap [KB]) (?) */ - ulResult = 9999; + #if defined(_Windows) || defined(WINNT) + { + MEMORYSTATUS memorystatus; + GlobalMemoryStatus( &memorystatus ); + ulResult = memorystatus.dwTotalPhys / 1024; + } + #else + ulResult = 9999; + #endif break; case 102: /* UNDOCUMENTED! (Segments in Fixed Memory/Heap) (?) */ - ulResult = 9999; + #if defined(_Windows) || defined(WINNT) + ulResult = 1; + #else + ulResult = 9999; + #endif break; case 103: /* UNDOCUMENTED! (Free Swap Memory [KB]) */ - ulResult = 9999; + #if defined(_Windows) || defined(WINNT) + { + MEMORYSTATUS memorystatus; + GlobalMemoryStatus( &memorystatus ); + ulResult = memorystatus.dwAvailPageFile / 1024; + } + #else + ulResult = 9999; + #endif break; case 104: /* UNDOCUMENTED! (Free Conventional [KB]) */ - ulResult = 9999; + #if defined(_Windows) || defined(WINNT) + ulResult = 0; + #else + ulResult = 9999; + #endif break; case 105: /* UNDOCUMENTED! (Used Expanded Memory [KB]) (?) */ - ulResult = ( s_ulMemoryConsumed / 1024 ); + ulResult = 0; break; case 1001: /* Harbour extension (Memory used [bytes]) */ diff --git a/harbour/tests/Makefile b/harbour/tests/Makefile index 631c5a7258..78c69b81e1 100644 --- a/harbour/tests/Makefile +++ b/harbour/tests/Makefile @@ -90,6 +90,7 @@ PRG_SOURCES=\ longstr2.prg \ mathtest.prg \ memfile.prg \ + memory.prg \ memvar.prg \ menutest.prg \ mtran.prg \ diff --git a/harbour/tests/memory.prg b/harbour/tests/memory.prg new file mode 100644 index 0000000000..70da00b056 --- /dev/null +++ b/harbour/tests/memory.prg @@ -0,0 +1,22 @@ +/* + * $Id$ + */ + +/* ; Donated to the public domain by Victor Szel */ + +FUNCTION Main() + + ? 0, MEMORY( 0 ) + ? 1, MEMORY( 1 ) + ? 2, MEMORY( 2 ) + ? 3, MEMORY( 3 ) + ? 4, MEMORY( 4 ) + ? 101, MEMORY( 101 ) + ? 102, MEMORY( 102 ) + ? 103, MEMORY( 103 ) + ? 104, MEMORY( 104 ) + ? 105, MEMORY( 105 ) + ? 1001, MEMORY( 1001 ) + ? 1002, MEMORY( 1002 ) + + RETURN NIL