2008-11-04 23:03 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* common.mak
* source/vm/Makefile
* source/vm/vmmt/Makefile
* source/vm/fm.c
+ source/vm/fmhb.c
+ source/vm/hbmem.c
+ Moved functions not depending on FM_STATISTICS setting,
to separate files.
; NOTE: MEMORY() function should IMO move to rtl, and
hb_xmem*() functions to common lib.
This commit is contained in:
@@ -8,6 +8,18 @@
|
||||
2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
|
||||
*/
|
||||
|
||||
2008-11-04 23:03 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
|
||||
* common.mak
|
||||
* source/vm/Makefile
|
||||
* source/vm/vmmt/Makefile
|
||||
* source/vm/fm.c
|
||||
+ source/vm/fmhb.c
|
||||
+ source/vm/hbmem.c
|
||||
+ Moved functions not depending on FM_STATISTICS setting,
|
||||
to separate files.
|
||||
; NOTE: MEMORY() function should IMO move to rtl, and
|
||||
hb_xmem*() functions to common lib.
|
||||
|
||||
2008-11-04 22:53 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
|
||||
* include/hbextern.ch
|
||||
+ Added new HB_H*() functions.
|
||||
|
||||
@@ -421,9 +421,11 @@ VM_COMMON_LIB_OBJS = \
|
||||
$(OBJ_DIR)\extend$(OBJEXT) \
|
||||
$(OBJ_DIR)\extrap$(OBJEXT) \
|
||||
$(OBJ_DIR)\fm$(OBJEXT) \
|
||||
$(OBJ_DIR)\fmhb$(OBJEXT) \
|
||||
$(OBJ_DIR)\garbage$(OBJEXT) \
|
||||
$(OBJ_DIR)\hashes$(OBJEXT) \
|
||||
$(OBJ_DIR)\hashfunc$(OBJEXT) \
|
||||
$(OBJ_DIR)\hbmem$(OBJEXT) \
|
||||
$(OBJ_DIR)\hvm$(OBJEXT) \
|
||||
$(OBJ_DIR)\initexit$(OBJEXT) \
|
||||
$(OBJ_DIR)\initsymb$(OBJEXT) \
|
||||
|
||||
@@ -42,9 +42,11 @@ C_SOURCES=\
|
||||
extend.c \
|
||||
extrap.c \
|
||||
fm.c \
|
||||
fmhb.c \
|
||||
garbage.c \
|
||||
hashes.c \
|
||||
hashfunc.c \
|
||||
hbmem.c \
|
||||
hvm.c \
|
||||
initexit.c \
|
||||
initsymb.c \
|
||||
|
||||
@@ -54,13 +54,8 @@
|
||||
* The following parts are Copyright of the individual authors.
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* Copyright 1999 David G. Holm <dholm@jsd-llc.com>
|
||||
* hb_xmemcpy()
|
||||
* hb_xmemset()
|
||||
*
|
||||
* Copyright 1999-2001 Viktor Szakats <viktor.szakats@syenar.hu>
|
||||
* hb_xquery()
|
||||
* MEMORY()
|
||||
*
|
||||
* See doc/license.txt for licensing terms.
|
||||
*
|
||||
@@ -837,86 +832,6 @@ HB_EXPORT void hb_xexit( void ) /* Deinitialize fixed memory subsystem */
|
||||
|
||||
#endif
|
||||
|
||||
/* hb_xmemcpy and hb_xmemset are only needed when
|
||||
unsigned int and unsigned long differ in length */
|
||||
|
||||
/* unfortunately it's not true - on 64bit platforms int is 32 bit
|
||||
and long is 64.
|
||||
we need these functions only when max(size_t) < max(long)
|
||||
what could be detected and set in header files. Here check
|
||||
only for hb_xmem* macro definition
|
||||
|
||||
#if UINT_MAX != ULONG_MAX
|
||||
*/
|
||||
#ifndef hb_xmemcpy
|
||||
void * hb_xmemcpy( void * pDestArg, void * pSourceArg, ULONG ulLen )
|
||||
{
|
||||
BYTE * pDest;
|
||||
BYTE * pSource;
|
||||
ULONG ulRemaining;
|
||||
int iCopySize;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xmemcpy(%p, %p, %lu)", pDestArg, pSourceArg, ulLen));
|
||||
|
||||
pDest = ( BYTE * ) pDestArg;
|
||||
pSource = ( BYTE * ) pSourceArg;
|
||||
ulRemaining = ulLen;
|
||||
|
||||
while( ulRemaining )
|
||||
{
|
||||
/* Overcome the memcpy() size_t limitation */
|
||||
if( ulRemaining > UINT_MAX )
|
||||
{
|
||||
iCopySize = UINT_MAX;
|
||||
ulRemaining -= ( ULONG ) iCopySize;
|
||||
}
|
||||
else
|
||||
{
|
||||
iCopySize = ( int ) ulRemaining;
|
||||
ulRemaining = 0;
|
||||
}
|
||||
memcpy( pDest, pSource, iCopySize );
|
||||
pDest += iCopySize;
|
||||
pSource += iCopySize;
|
||||
}
|
||||
|
||||
return pDestArg;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef hb_xmemset
|
||||
void * hb_xmemset( void * pDestArg, int iFill, ULONG ulLen )
|
||||
{
|
||||
BYTE * pDest;
|
||||
ULONG ulRemaining;
|
||||
int iSetSize;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xmemset(%p, %d, %lu)", pDestArg, iFill, ulLen));
|
||||
|
||||
pDest = ( BYTE * ) pDestArg;
|
||||
ulRemaining = ulLen;
|
||||
|
||||
while( ulRemaining )
|
||||
{
|
||||
/* Overcome the memset() size_t limitation */
|
||||
if( ulRemaining > UINT_MAX )
|
||||
{
|
||||
iSetSize = UINT_MAX;
|
||||
ulRemaining -= ( ULONG ) iSetSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
iSetSize = ( int ) ulRemaining;
|
||||
ulRemaining = 0;
|
||||
}
|
||||
memset( pDest, iFill, iSetSize );
|
||||
pDest += iSetSize;
|
||||
}
|
||||
|
||||
return pDestArg;
|
||||
}
|
||||
#endif
|
||||
|
||||
ULONG hb_xquery( USHORT uiMode )
|
||||
{
|
||||
ULONG ulResult;
|
||||
@@ -927,7 +842,7 @@ ULONG hb_xquery( USHORT uiMode )
|
||||
|
||||
switch( uiMode )
|
||||
{
|
||||
case HB_MEM_CHAR: /* (Free Variable Space [KB]) */
|
||||
case HB_MEM_CHAR: /* (Free Variable Space [KB]) */
|
||||
#if defined(HB_OS_WIN_32)
|
||||
{
|
||||
MEMORYSTATUS memorystatus;
|
||||
@@ -948,7 +863,7 @@ ULONG hb_xquery( USHORT uiMode )
|
||||
#endif
|
||||
break;
|
||||
|
||||
case HB_MEM_BLOCK: /* (Largest String [KB]) */
|
||||
case HB_MEM_BLOCK: /* (Largest String [KB]) */
|
||||
#if defined(HB_OS_WIN_32)
|
||||
{
|
||||
MEMORYSTATUS memorystatus;
|
||||
@@ -969,7 +884,7 @@ ULONG hb_xquery( USHORT uiMode )
|
||||
#endif
|
||||
break;
|
||||
|
||||
case HB_MEM_RUN: /* (RUN Memory [KB]) */
|
||||
case HB_MEM_RUN: /* (RUN Memory [KB]) */
|
||||
#if defined(HB_OS_WIN_32)
|
||||
{
|
||||
MEMORYSTATUS memorystatus;
|
||||
@@ -990,7 +905,7 @@ ULONG hb_xquery( USHORT uiMode )
|
||||
#endif
|
||||
break;
|
||||
|
||||
case HB_MEM_VM: /* UNDOCUMENTED! (Virtual Memory [KB]) */
|
||||
case HB_MEM_VM: /* UNDOCUMENTED! (Virtual Memory [KB]) */
|
||||
#if defined(HB_OS_WIN_32)
|
||||
{
|
||||
MEMORYSTATUS memorystatus;
|
||||
@@ -1011,7 +926,7 @@ ULONG hb_xquery( USHORT uiMode )
|
||||
#endif
|
||||
break;
|
||||
|
||||
case HB_MEM_EMS: /* UNDOCUMENTED! (Free Expanded Memory [KB]) (?) */
|
||||
case HB_MEM_EMS: /* UNDOCUMENTED! (Free Expanded Memory [KB]) (?) */
|
||||
#if defined(HB_OS_WIN_32) || defined(HB_OS_OS2)
|
||||
ulResult = 0;
|
||||
#else
|
||||
@@ -1019,7 +934,7 @@ ULONG hb_xquery( USHORT uiMode )
|
||||
#endif
|
||||
break;
|
||||
|
||||
case HB_MEM_FM: /* UNDOCUMENTED! (Fixed Memory/Heap [KB]) (?) */
|
||||
case HB_MEM_FM: /* UNDOCUMENTED! (Fixed Memory/Heap [KB]) (?) */
|
||||
#if defined(HB_OS_WIN_32)
|
||||
{
|
||||
MEMORYSTATUS memorystatus;
|
||||
@@ -1048,7 +963,7 @@ ULONG hb_xquery( USHORT uiMode )
|
||||
#endif
|
||||
break;
|
||||
|
||||
case HB_MEM_SWAP: /* UNDOCUMENTED! (Free Swap Memory [KB]) */
|
||||
case HB_MEM_SWAP: /* UNDOCUMENTED! (Free Swap Memory [KB]) */
|
||||
#if defined(HB_OS_WIN_32)
|
||||
{
|
||||
MEMORYSTATUS memorystatus;
|
||||
@@ -1067,7 +982,7 @@ ULONG hb_xquery( USHORT uiMode )
|
||||
#endif
|
||||
break;
|
||||
|
||||
case HB_MEM_CONV: /* UNDOCUMENTED! (Free Conventional [KB]) */
|
||||
case HB_MEM_CONV: /* UNDOCUMENTED! (Free Conventional [KB]) */
|
||||
#if defined(HB_OS_WIN_32) || defined(HB_OS_OS2)
|
||||
ulResult = 0;
|
||||
#else
|
||||
@@ -1075,11 +990,11 @@ ULONG hb_xquery( USHORT uiMode )
|
||||
#endif
|
||||
break;
|
||||
|
||||
case HB_MEM_EMSUSED: /* UNDOCUMENTED! (Used Expanded Memory [KB]) (?) */
|
||||
case HB_MEM_EMSUSED: /* UNDOCUMENTED! (Used Expanded Memory [KB]) (?) */
|
||||
ulResult = 0;
|
||||
break;
|
||||
|
||||
case HB_MEM_USED: /* Harbour extension (Memory used [bytes]) */
|
||||
case HB_MEM_USED: /* Harbour extension (Memory used [bytes]) */
|
||||
#ifdef HB_FM_STATISTICS
|
||||
ulResult = s_lMemoryConsumed;
|
||||
#else
|
||||
@@ -1087,7 +1002,7 @@ ULONG hb_xquery( USHORT uiMode )
|
||||
#endif
|
||||
break;
|
||||
|
||||
case HB_MEM_BLOCKS: /* Harbour extension (Memory blocks used) */
|
||||
case HB_MEM_BLOCKS: /* Harbour extension (Memory blocks used) */
|
||||
#ifdef HB_FM_STATISTICS
|
||||
ulResult = s_lMemoryBlocks;
|
||||
#else
|
||||
@@ -1095,7 +1010,7 @@ ULONG hb_xquery( USHORT uiMode )
|
||||
#endif
|
||||
break;
|
||||
|
||||
case HB_MEM_USEDMAX: /* Harbour extension (Maximum memory used [bytes]) */
|
||||
case HB_MEM_USEDMAX: /* Harbour extension (Maximum memory used [bytes]) */
|
||||
#ifdef HB_FM_STATISTICS
|
||||
ulResult = s_lMemoryMaxConsumed;
|
||||
#else
|
||||
@@ -1103,7 +1018,7 @@ ULONG hb_xquery( USHORT uiMode )
|
||||
#endif
|
||||
break;
|
||||
|
||||
case HB_MEM_STACKITEMS: /* Harbour extension (Total items allocated for the stack) */
|
||||
case HB_MEM_STACKITEMS: /* Harbour extension (Total items allocated for the stack) */
|
||||
ulResult = hb_stackTotalItems();
|
||||
break;
|
||||
|
||||
@@ -1111,7 +1026,7 @@ ULONG hb_xquery( USHORT uiMode )
|
||||
ulResult = hb_stackTotalItems() * sizeof( HB_ITEM );
|
||||
break;
|
||||
|
||||
case HB_MEM_STACK_TOP : /* Harbour extension (Total items currently on the stack) */
|
||||
case HB_MEM_STACK_TOP : /* Harbour extension (Total items currently on the stack) */
|
||||
ulResult = hb_stackTopOffset( );
|
||||
break;
|
||||
|
||||
|
||||
58
harbour/source/vm/fmhb.c
Normal file
58
harbour/source/vm/fmhb.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
* MEMORY() function.
|
||||
*
|
||||
* Copyright 1999-2001 Viktor Szakats <viktor.szakats@syenar.hu>
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
|
||||
*
|
||||
* As a special exception, the Harbour Project gives permission for
|
||||
* additional uses of the text contained in its release of Harbour.
|
||||
*
|
||||
* The exception is that, if you link the Harbour libraries with other
|
||||
* files to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the Harbour library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the Harbour
|
||||
* Project under the name Harbour. If you copy code from other
|
||||
* Harbour Project or Free Software Foundation releases into a copy of
|
||||
* Harbour, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for Harbour, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "hbapi.h"
|
||||
|
||||
HB_FUNC( MEMORY )
|
||||
{
|
||||
hb_retnint( hb_xquery( ( USHORT ) hb_parni( 1 ) ) );
|
||||
}
|
||||
133
harbour/source/vm/hbmem.c
Normal file
133
harbour/source/vm/hbmem.c
Normal file
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
* hb_xmemcpy(), hb_xmemset()
|
||||
*
|
||||
* Copyright 1999 David G. Holm <dholm@jsd-llc.com>
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
|
||||
*
|
||||
* As a special exception, the Harbour Project gives permission for
|
||||
* additional uses of the text contained in its release of Harbour.
|
||||
*
|
||||
* The exception is that, if you link the Harbour libraries with other
|
||||
* files to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the Harbour library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the Harbour
|
||||
* Project under the name Harbour. If you copy code from other
|
||||
* Harbour Project or Free Software Foundation releases into a copy of
|
||||
* Harbour, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for Harbour, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "hbapi.h"
|
||||
|
||||
/* hb_xmemcpy() and hb_xmemset() are only needed when
|
||||
unsigned int and unsigned long differ in length */
|
||||
|
||||
/* unfortunately it's not true - on 64bit platforms int is 32 bit
|
||||
and long is 64.
|
||||
we need these functions only when max(size_t) < max(long)
|
||||
what could be detected and set in header files. Here check
|
||||
only for hb_xmem* macro definition
|
||||
|
||||
#if UINT_MAX != ULONG_MAX
|
||||
*/
|
||||
#ifndef hb_xmemcpy
|
||||
void * hb_xmemcpy( void * pDestArg, void * pSourceArg, ULONG ulLen )
|
||||
{
|
||||
BYTE * pDest;
|
||||
BYTE * pSource;
|
||||
ULONG ulRemaining;
|
||||
int iCopySize;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xmemcpy(%p, %p, %lu)", pDestArg, pSourceArg, ulLen));
|
||||
|
||||
pDest = ( BYTE * ) pDestArg;
|
||||
pSource = ( BYTE * ) pSourceArg;
|
||||
ulRemaining = ulLen;
|
||||
|
||||
while( ulRemaining )
|
||||
{
|
||||
/* Overcome the memcpy() size_t limitation */
|
||||
if( ulRemaining > UINT_MAX )
|
||||
{
|
||||
iCopySize = UINT_MAX;
|
||||
ulRemaining -= ( ULONG ) iCopySize;
|
||||
}
|
||||
else
|
||||
{
|
||||
iCopySize = ( int ) ulRemaining;
|
||||
ulRemaining = 0;
|
||||
}
|
||||
memcpy( pDest, pSource, iCopySize );
|
||||
pDest += iCopySize;
|
||||
pSource += iCopySize;
|
||||
}
|
||||
|
||||
return pDestArg;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef hb_xmemset
|
||||
void * hb_xmemset( void * pDestArg, int iFill, ULONG ulLen )
|
||||
{
|
||||
BYTE * pDest;
|
||||
ULONG ulRemaining;
|
||||
int iSetSize;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xmemset(%p, %d, %lu)", pDestArg, iFill, ulLen));
|
||||
|
||||
pDest = ( BYTE * ) pDestArg;
|
||||
ulRemaining = ulLen;
|
||||
|
||||
while( ulRemaining )
|
||||
{
|
||||
/* Overcome the memset() size_t limitation */
|
||||
if( ulRemaining > UINT_MAX )
|
||||
{
|
||||
iSetSize = UINT_MAX;
|
||||
ulRemaining -= ( ULONG ) iSetSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
iSetSize = ( int ) ulRemaining;
|
||||
ulRemaining = 0;
|
||||
}
|
||||
memset( pDest, iFill, iSetSize );
|
||||
pDest += iSetSize;
|
||||
}
|
||||
|
||||
return pDestArg;
|
||||
}
|
||||
#endif
|
||||
@@ -43,9 +43,11 @@ C_SOURCES=\
|
||||
extend.c \
|
||||
extrap.c \
|
||||
fm.c \
|
||||
fmhb.c \
|
||||
garbage.c \
|
||||
hashes.c \
|
||||
hashfunc.c \
|
||||
hbmem.c \
|
||||
hvm.c \
|
||||
initexit.c \
|
||||
initsymb.c \
|
||||
|
||||
Reference in New Issue
Block a user