2006-11-09 09:45 UTC+0100 Marek Paliwoda (mpaliwoda at interia pl)
* harbour/makefile.bc
* Adapted to the new Preprocessor utility ppgen.exe
* Cleaned hbpp.exe dependecies due to recent changes
* harbour/makefile.vc
* harbour/common.mak
* Cleaned hbpp.exe dependecies due to recent changes
* harbour/include/hbapi.h
* Added HB_EXPORT to hb_gcAlloc()
* harbour/include/hbstack.h
* Added HB_EXPORT to hb_stackSelfItem()
* harbour/source/vm/fm.c
* Added dipslaying contents of unreleased blocks at
program exit, together with logging unreleased memory
blocks report to fm.log file. Borrowed from xharbour.
This commit is contained in:
@@ -8,6 +8,22 @@
|
||||
2002-12-01 13:30 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
- harbour/utils/hbpp/hbpptable.c
|
||||
+ harbour/utils/hbpp/hbpptbl.c
|
||||
* harbour/utils/hbpp/Makefile
|
||||
* harbour/common.mak
|
||||
* Renamed hbpptable.c->hbpptbl.c to follow 8.3 naming convention
|
||||
|
||||
2006-11-09 09:45 UTC+0100 Marek Paliwoda (mpaliwoda at interia pl)
|
||||
* harbour/makefile.bc
|
||||
* Adapted to the new Preprocessor utility ppgen.exe
|
||||
* Cleaned hbpp.exe dependecies due to recent changes
|
||||
* harbour/makefile.vc
|
||||
* harbour/common.mak
|
||||
* Cleaned hbpp.exe dependecies due to recent changes
|
||||
program exit, together with logging unreleased memory
|
||||
blocks report to fm.log file. Borrowed from xharbour.
|
||||
- harbour/utils/hbpp/pptable.c
|
||||
+ harbour/utils/hbpp/hbppcomp.c
|
||||
+ harbour/utils/hbpp/hbppcore.c
|
||||
+ harbour/utils/hbpp/hbpplib.c
|
||||
@@ -17,7 +33,7 @@
|
||||
2006-11-08 00:39 UTC+0200 JF Lefebvre (jflefebv at mafact com)
|
||||
* harbour/makefile.vc
|
||||
* harbour/common.mak
|
||||
|
||||
* Adapted to the new Preprocessor utility ppgen.exe
|
||||
Someone should rename the following files into utils/hbpp
|
||||
ppcomp.c -> hbppcomp.c
|
||||
pplib.c -> hbpplib.c
|
||||
@@ -116,7 +132,7 @@
|
||||
* makefile64.nt
|
||||
* updated with recent changes
|
||||
|
||||
./ppgen$(EXE_EXT) $(TOP)$(ROOT)include/hbstdgen.ch -opptable.c -q
|
||||
2006-02-08 18:02 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/source/rtl/gtwin/gtwin.c
|
||||
+ added PreExt() and PostExt() methods
|
||||
|
||||
|
||||
@@ -155,6 +155,8 @@ GTWVT_LIB = $(LIB_DIR)\gtwvt.lib
|
||||
GTGUI_LIB = $(LIB_DIR)\gtgui.lib
|
||||
|
||||
HARBOUR_EXE = $(BIN_DIR)\harbour.exe
|
||||
# required (intermediate) utility
|
||||
# to generate pptable.c
|
||||
HBPPGEN_EXE = $(BIN_DIR)\ppgen.exe
|
||||
HBPP_EXE = $(BIN_DIR)\hbpp.exe
|
||||
HBPPTEST_EXE = $(BIN_DIR)\hbpptest.exe
|
||||
@@ -235,10 +237,9 @@ COMMON_LIB_OBJS = \
|
||||
#**********************************************************
|
||||
|
||||
PP_LIB_OBJS = \
|
||||
$(OBJ_DIR)\pptable.obj \
|
||||
$(OBJ_DIR)\ppcore.obj \
|
||||
$(OBJ_DIR)\pplib.obj \
|
||||
$(OBJ_DIR)\pptable.obj \
|
||||
$(OBJ_DIR)\pragma.obj \
|
||||
|
||||
#**********************************************************
|
||||
|
||||
@@ -728,7 +729,6 @@ GTGUI_DLL_OBJS = $(GTGUI_LIB_COMMON_OBJS) $(GTGUI_LIB_SHARED_OBJS)
|
||||
#**********************************************************
|
||||
|
||||
HARBOUR_EXE_OBJS = \
|
||||
$(OBJ_DIR)\ppcomp.obj \
|
||||
$(OBJ_DIR)\harbour.obj \
|
||||
$(OBJ_DIR)\harboury.obj \
|
||||
$(OBJ_DIR)\harbourl.obj \
|
||||
@@ -741,7 +741,9 @@ HARBOUR_EXE_OBJS = \
|
||||
$(OBJ_DIR)\hblbl.obj \
|
||||
$(OBJ_DIR)\hbpcode.obj \
|
||||
$(OBJ_DIR)\hbstrong.obj \
|
||||
$(OBJ_DIR)\hbfunchk.obj \
|
||||
$(OBJ_DIR)\hbfix.obj \
|
||||
$(OBJ_DIR)\ppcomp.obj \
|
||||
$(OBJ_DIR)\genc.obj \
|
||||
$(OBJ_DIR)\gencc.obj \
|
||||
$(OBJ_DIR)\gencli.obj \
|
||||
@@ -752,20 +754,22 @@ HARBOUR_EXE_OBJS = \
|
||||
$(OBJ_DIR)\expropta.obj \
|
||||
$(OBJ_DIR)\exproptb.obj \
|
||||
$(OBJ_DIR)\exproptc.obj \
|
||||
$(OBJ_DIR)\hbfunchk.obj \
|
||||
|
||||
#**********************************************************
|
||||
|
||||
HBPP_EXE_OBJS = \
|
||||
$(OBJ_DIR)\hbpp.obj \
|
||||
$(OBJ_DIR)\hbppcore.obj \
|
||||
$(OBJ_DIR)\hbppcomp.obj \
|
||||
$(OBJ_DIR)\hbpptable.obj \
|
||||
$(OBJ_DIR)\hbpptable.obj\
|
||||
$(OBJ_DIR)\hbppcomp.obj \
|
||||
$(OBJ_DIR)\hbppcore.obj \
|
||||
$(OBJ_DIR)\pragma.obj \
|
||||
|
||||
# $(OBJ_DIR)\hbpplib.obj \
|
||||
|
||||
#**********************************************************
|
||||
|
||||
HBPPGEN_EXE_OBJS = \
|
||||
$(OBJ_DIR)\ppgen.obj \
|
||||
$(OBJ_DIR)\ppgen.obj \
|
||||
|
||||
#**********************************************************
|
||||
|
||||
@@ -854,31 +858,31 @@ HBVER_EXE_OBJS = \
|
||||
#
|
||||
|
||||
TMP_DLL_OBJS = \
|
||||
$(COMMON_LIB_OBJS) \
|
||||
$(PP_LIB_OBJS) \
|
||||
$(VM_DLL_OBJS) \
|
||||
$(RTL_LIB_OBJS) \
|
||||
$(MACRO_LIB_OBJS) \
|
||||
$(DEBUG_LIB_OBJS) \
|
||||
$(LANG_LIB_OBJS) \
|
||||
$(CODEPAGE_LIB_OBJS) \
|
||||
$(RDD_LIB_OBJS) \
|
||||
$(DBFNTX_LIB_OBJS) \
|
||||
$(DBFCDX_LIB_OBJS) \
|
||||
$(DBFFPT_LIB_OBJS) \
|
||||
$(HBSIX_LIB_OBJS) \
|
||||
$(HSX_LIB_OBJS) \
|
||||
$(USRRDD_LIB_OBJS) \
|
||||
$(GTCGI_LIB_OBJS) \
|
||||
$(GTPCA_LIB_OBJS) \
|
||||
$(GTSTD_LIB_OBJS) \
|
||||
$(GTWIN_LIB_OBJS) \
|
||||
$(GTWVT_LIB_OBJS) \
|
||||
$(GTGUI_DLL_OBJS) \
|
||||
$(COMMON_LIB_OBJS) \
|
||||
$(PP_LIB_OBJS) \
|
||||
$(VM_DLL_OBJS) \
|
||||
$(RTL_LIB_OBJS) \
|
||||
$(MACRO_LIB_OBJS) \
|
||||
$(DEBUG_LIB_OBJS) \
|
||||
$(LANG_LIB_OBJS) \
|
||||
$(CODEPAGE_LIB_OBJS) \
|
||||
$(RDD_LIB_OBJS) \
|
||||
$(DBFNTX_LIB_OBJS) \
|
||||
$(DBFCDX_LIB_OBJS) \
|
||||
$(DBFFPT_LIB_OBJS) \
|
||||
$(HBSIX_LIB_OBJS) \
|
||||
$(HSX_LIB_OBJS) \
|
||||
$(USRRDD_LIB_OBJS) \
|
||||
$(GTCGI_LIB_OBJS) \
|
||||
$(GTPCA_LIB_OBJS) \
|
||||
$(GTSTD_LIB_OBJS) \
|
||||
$(GTWIN_LIB_OBJS) \
|
||||
$(GTWVT_LIB_OBJS) \
|
||||
$(GTGUI_DLL_OBJS) \
|
||||
|
||||
DISABLED_SHARED_MODULES= \
|
||||
$(NULSYS_LIB_OBJS) \
|
||||
$(GTDOS_LIB_OBJS) \
|
||||
DISABLED_SHARED_MODULES= \
|
||||
$(NULSYS_LIB_OBJS) \
|
||||
$(GTDOS_LIB_OBJS) \
|
||||
|
||||
#**********************************************************
|
||||
#**********************************************************
|
||||
@@ -889,34 +893,35 @@ DISABLED_SHARED_MODULES= \
|
||||
#
|
||||
|
||||
HB_BUILD_TARGETS = \
|
||||
$(COMMON_LIB) \
|
||||
$(HBPPGEN_EXE) \
|
||||
$(PP_LIB) \
|
||||
$(HARBOUR_EXE) \
|
||||
$(HBPP_EXE) \
|
||||
$(COMMON_LIB) \
|
||||
$(HBPPGEN_EXE) \
|
||||
$(PP_LIB) \
|
||||
\
|
||||
$(VM_LIB) \
|
||||
$(RTL_LIB) \
|
||||
$(MACRO_LIB) \
|
||||
$(DEBUG_LIB) \
|
||||
$(LANG_LIB) \
|
||||
$(CODEPAGE_LIB) \
|
||||
$(RDD_LIB) \
|
||||
$(NULSYS_LIB) \
|
||||
$(DBFNTX_LIB) \
|
||||
$(DBFCDX_LIB) \
|
||||
$(DBFFPT_LIB) \
|
||||
$(HBSIX_LIB) \
|
||||
$(HSX_LIB) \
|
||||
$(USRRDD_LIB) \
|
||||
$(HB_GT_LIBS) \
|
||||
$(HARBOUR_EXE) \
|
||||
$(HBPP_EXE) \
|
||||
\
|
||||
$(HBRUN_EXE) \
|
||||
$(HBTEST_EXE) \
|
||||
$(HBPPTEST_EXE) \
|
||||
$(HBDOC_EXE) \
|
||||
$(HBMAKE_EXE) \
|
||||
$(HBVER_EXE) \
|
||||
$(VM_LIB) \
|
||||
$(RTL_LIB) \
|
||||
$(MACRO_LIB) \
|
||||
$(DEBUG_LIB) \
|
||||
$(LANG_LIB) \
|
||||
$(CODEPAGE_LIB) \
|
||||
$(RDD_LIB) \
|
||||
$(NULSYS_LIB) \
|
||||
$(DBFNTX_LIB) \
|
||||
$(DBFCDX_LIB) \
|
||||
$(DBFFPT_LIB) \
|
||||
$(HBSIX_LIB) \
|
||||
$(HSX_LIB) \
|
||||
$(USRRDD_LIB) \
|
||||
$(HB_GT_LIBS) \
|
||||
\
|
||||
$(HBRUN_EXE) \
|
||||
$(HBTEST_EXE) \
|
||||
$(HBPPTEST_EXE) \
|
||||
$(HBDOC_EXE) \
|
||||
$(HBMAKE_EXE) \
|
||||
$(HBVER_EXE) \
|
||||
|
||||
# DLL Target is disabled by default
|
||||
# It can be enabled by setting env
|
||||
|
||||
@@ -562,7 +562,7 @@ extern void hb_gcRegisterSweep( HB_GARBAGE_SWEEPER_PTR pSweep, void * Cargo );
|
||||
extern PHB_ITEM hb_gcGripGet( HB_ITEM_PTR pItem );
|
||||
extern void hb_gcGripDrop( HB_ITEM_PTR pItem );
|
||||
|
||||
extern void * hb_gcAlloc( ULONG ulSize, HB_GARBAGE_FUNC_PTR pFunc ); /* allocates a memory controlled by the garbage collector */
|
||||
extern HB_EXPORT void *hb_gcAlloc( ULONG ulSize, HB_GARBAGE_FUNC_PTR pFunc ); /* allocates a memory controlled by the garbage collector */
|
||||
extern void hb_gcFree( void *pAlloc ); /* deallocates a memory allocated by the garbage collector */
|
||||
extern void * hb_gcLock( void *pAlloc ); /* do not release passed memory block */
|
||||
extern void * hb_gcUnlock( void *pAlloc ); /* passed block is allowed to be released */
|
||||
|
||||
@@ -84,6 +84,8 @@ extern HB_STACK hb_stack;
|
||||
|
||||
#endif
|
||||
|
||||
extern HB_EXPORT HB_ITEM_PTR hb_stackSelfItem( void ); // returns Self object at C function level
|
||||
|
||||
extern HB_ITEM_PTR hb_stackItemFromTop( int nFromTop );
|
||||
extern HB_ITEM_PTR hb_stackItemFromBase( int nFromBase );
|
||||
extern HB_ITEM_PTR hb_stacklocalVariable( int *piFromBase );
|
||||
@@ -91,7 +93,6 @@ extern LONG hb_stackTopOffset( void );
|
||||
extern LONG hb_stackBaseOffset( void );
|
||||
extern LONG hb_stackTotalItems( void );
|
||||
extern HB_ITEM_PTR hb_stackBaseItem( void );
|
||||
extern HB_ITEM_PTR hb_stackSelfItem( void );
|
||||
extern HB_ITEM_PTR hb_stackItem( LONG iItemPos );
|
||||
extern HB_ITEM_PTR hb_stackReturnItem( void );
|
||||
extern char * hb_stackDateBuffer( void );
|
||||
|
||||
@@ -471,6 +471,20 @@ $(PP_LIB)
|
||||
!
|
||||
#**********************************************************
|
||||
#
|
||||
# HBPPGEN build rule
|
||||
#
|
||||
$(HBPPGEN_EXE) :: $(COMMON_LIB)
|
||||
$(HBPPGEN_EXE) :: $(HBPPGEN_EXE_OBJS)
|
||||
IF EXIST "$(HBPPGEN_EXE)" $(DEL) "$(HBPPGEN_EXE)" > NUL
|
||||
$(CC) @&&!
|
||||
$(CFLAGS)
|
||||
-e$(HBPPGEN_EXE)
|
||||
$(**: = ^
|
||||
)
|
||||
$(COMMON_LIB)
|
||||
!
|
||||
#**********************************************************
|
||||
#
|
||||
# HBPP build rule
|
||||
#
|
||||
$(HBPP_EXE) :: BasicLibs
|
||||
@@ -482,7 +496,6 @@ $(CFLAGS)
|
||||
$(**: = ^
|
||||
)
|
||||
$(COMMON_LIB)
|
||||
$(PP_LIB)
|
||||
!
|
||||
#**********************************************************
|
||||
#
|
||||
@@ -605,6 +618,14 @@ $(DLL_OBJ_DIR)\mainstd.obj : $(VM_DIR)\mainstd.c
|
||||
|
||||
#**********************************************************
|
||||
|
||||
# Generated by an intermediate utility ppgen.exe
|
||||
# built at the initial phase of build process
|
||||
$(PP_DIR)\pptable.c : $(BIN_DIR)\ppgen.exe
|
||||
IF EXIST "$(PP_DIR)\pptable.c" $(DEL) "$(PP_DIR)\pptable.c" > nul
|
||||
$(BIN_DIR)\ppgen.exe include/hbstdgen.ch -o$(PP_DIR)/pptable.c -q
|
||||
|
||||
#**********************************************************
|
||||
|
||||
$(OBJ_DIR)\macroy.c : $(MACRO_DIR)\macro.y
|
||||
bison --no-line -p hb_comp -d $** -o$@
|
||||
|
||||
|
||||
@@ -636,7 +636,7 @@ DLL_OBJS = $(TMP_DLL_OBJS:obj\vc=obj\dll\vc)
|
||||
#**********************************************************
|
||||
# General Library BUILD rule
|
||||
#{$(OBJ_DIR)}.obj{$(COMMON_DIR)}.lib:
|
||||
# IF EXIST "$@" $(DEL) "$@" > NUL
|
||||
# IF EXIST "$@" $(DEL) "$@" > nul
|
||||
# $(MKLIB) /out:$@ <<
|
||||
#$**
|
||||
#<<
|
||||
@@ -791,7 +791,7 @@ $(GTGUI_LIB) : $(GTGUI_LIB_OBJS)
|
||||
# HARBOUR build rule
|
||||
#
|
||||
$(HARBOUR_EXE) : $(HARBOUR_EXE_OBJS)
|
||||
IF EXIST "$(HARBOUR_EXE)" $(DEL) "$(HARBOUR_EXE)" > NUL
|
||||
IF EXIST "$(HARBOUR_EXE)" $(DEL) "$(HARBOUR_EXE)" > nul
|
||||
$(LINKER) @<<
|
||||
$(LDFLAGS)
|
||||
/OUT:$(HARBOUR_EXE)
|
||||
@@ -805,7 +805,7 @@ $(PP_LIB)
|
||||
# HBPPGEN build rule
|
||||
#
|
||||
$(HBPPGEN_EXE) : $(HBPPGEN_EXE_OBJS)
|
||||
IF EXIST "$(HBPPGEN_EXE)" $(DEL) "$(HBPPGEN_EXE)" > NUL
|
||||
IF EXIST "$(HBPPGEN_EXE)" $(DEL) "$(HBPPGEN_EXE)" > nul
|
||||
$(LINKER) @<<
|
||||
$(LDFLAGS)
|
||||
/OUT:$(HBPPGEN_EXE)
|
||||
@@ -818,21 +818,20 @@ $(COMMON_LIB)
|
||||
# HBPP build rule
|
||||
#
|
||||
$(HBPP_EXE) : $(HBPP_EXE_OBJS)
|
||||
IF EXIST "$(HBPP_EXE)" $(DEL) "$(HBPP_EXE)" > NUL
|
||||
IF EXIST "$(HBPP_EXE)" $(DEL) "$(HBPP_EXE)" > nul
|
||||
$(LINKER) @<<
|
||||
$(LDFLAGS)
|
||||
/OUT:$(HBPP_EXE)
|
||||
$(**: = ^
|
||||
)
|
||||
$(COMMON_LIB)
|
||||
$(PP_LIB)
|
||||
<<
|
||||
#**********************************************************
|
||||
#
|
||||
# HBPPTEST build rule
|
||||
#
|
||||
$(HBPPTEST_EXE) : $(HBPPTEST_EXE_OBJS)
|
||||
IF EXIST "$(HBPPTEST_EXE)" $(DEL) "$(HBPPTEST_EXE)" > NUL
|
||||
IF EXIST "$(HBPPTEST_EXE)" $(DEL) "$(HBPPTEST_EXE)" > nul
|
||||
$(LINKER) @<<
|
||||
$(LDFLAGS)
|
||||
/OUT:$(HBPPTEST_EXE)
|
||||
@@ -847,7 +846,7 @@ user32.lib winspool.lib
|
||||
# HBRUN build rule
|
||||
#
|
||||
$(HBRUN_EXE) : $(HBRUN_EXE_OBJS)
|
||||
IF EXIST "$(HBRUN_EXE)" $(DEL) "$(HBRUN_EXE)" > NUL
|
||||
IF EXIST "$(HBRUN_EXE)" $(DEL) "$(HBRUN_EXE)" > nul
|
||||
$(LINKER) @<<
|
||||
$(LDFLAGS)
|
||||
/OUT:$(HBRUN_EXE)
|
||||
@@ -861,7 +860,7 @@ user32.lib winspool.lib
|
||||
# HBTEST build rule
|
||||
#
|
||||
$(HBTEST_EXE) : $(HBTEST_EXE_OBJS)
|
||||
IF EXIST "$(HBTEST_EXE)" $(DEL) "$(HBTEST_EXE)" > NUL
|
||||
IF EXIST "$(HBTEST_EXE)" $(DEL) "$(HBTEST_EXE)" > nul
|
||||
$(LINKER) @<<
|
||||
$(LDFLAGS)
|
||||
/OUT:$(HBTEST_EXE)
|
||||
@@ -875,7 +874,7 @@ user32.lib winspool.lib
|
||||
# HBDOC build rule
|
||||
#
|
||||
$(HBDOC_EXE) : $(HBDOC_EXE_OBJS)
|
||||
IF EXIST "$(HBDOC_EXE)" $(DEL) "$(HBDOC_EXE)" > NUL
|
||||
IF EXIST "$(HBDOC_EXE)" $(DEL) "$(HBDOC_EXE)" > nul
|
||||
$(LINKER) @<<
|
||||
$(LDFLAGS)
|
||||
/OUT:$(HBDOC_EXE)
|
||||
@@ -889,7 +888,7 @@ user32.lib winspool.lib
|
||||
# HBMAKE build rule
|
||||
#
|
||||
$(HBMAKE_EXE) : $(HBMAKE_EXE_OBJS)
|
||||
IF EXIST "$(HBMAKE_EXE)" $(DEL) "$(HBMAKE_EXE)" > NUL
|
||||
IF EXIST "$(HBMAKE_EXE)" $(DEL) "$(HBMAKE_EXE)" > nul
|
||||
$(LINKER) @<<
|
||||
$(LDFLAGS)
|
||||
/OUT:$(HBMAKE_EXE)
|
||||
@@ -903,7 +902,7 @@ user32.lib winspool.lib
|
||||
# HBVER build rule
|
||||
#
|
||||
$(HBVER_EXE) : $(HBVER_EXE_OBJS)
|
||||
IF EXIST "$(HBVER_EXE)" $(DEL) "$(HBVER_EXE)" > NUL
|
||||
IF EXIST "$(HBVER_EXE)" $(DEL) "$(HBVER_EXE)" > nul
|
||||
$(LINKER) @<<
|
||||
$(LDFLAGS)
|
||||
/OUT:$(HBVER_EXE)
|
||||
@@ -954,9 +953,13 @@ $(DLL_OBJ_DIR)\mainstd.obj : $(VM_DIR)\mainstd.c
|
||||
#
|
||||
#**********************************************************
|
||||
|
||||
$(PP_DIR)\pptable.c : include\hbstdgen.ch
|
||||
IF EXIST "$(PP_DIR)\pptable.c" $(DEL) "$(PP_DIR)\pptable.c" > NUL
|
||||
bin\$(CC_DIRNAME)\ppgen include\hbstdgen.ch -o$(PP_DIR)\pptable.c -q
|
||||
# Generated by an intermediate utility ppgen.exe
|
||||
# built at the initial phase of build process
|
||||
$(PP_DIR)\pptable.c : include\hbstdgen.ch
|
||||
IF EXIST "$(PP_DIR)\pptable.c" $(DEL) "$(PP_DIR)\pptable.c" > nul
|
||||
$(BIN_DIR)\ppgen.exe include/hbstdgen.ch -o$(PP_DIR)/pptable.c -q
|
||||
|
||||
#**********************************************************
|
||||
|
||||
$(OBJ_DIR)\macroy.c : $(MACRO_DIR)\macro.y
|
||||
bison --no-line -p hb_comp -d $** -o$@
|
||||
|
||||
@@ -85,6 +85,7 @@
|
||||
#include "hbstack.h"
|
||||
#include "hbapierr.h"
|
||||
#include "hbmemory.ch"
|
||||
#include "hbdate.h"
|
||||
|
||||
/* #define HB_PARANOID_MEM_CHECK */
|
||||
|
||||
@@ -514,6 +515,52 @@ HB_EXPORT void hb_xinit( void ) /* Initialize fixed memory subsystem */
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xinit()"));
|
||||
}
|
||||
|
||||
/* Returns pointer to string containing printable version
|
||||
of pMem memory block */
|
||||
|
||||
HB_EXPORT char * hb_mem2str( void * pMem, UINT uiSize )
|
||||
{
|
||||
#define HB_MAX_MEM2STR_BLOCK 256
|
||||
|
||||
static BYTE cBuffer[2*HB_MAX_MEM2STR_BLOCK+1]; /* multiplied by 2 to allow hex format */
|
||||
BYTE *cMem = (BYTE*) pMem;
|
||||
UINT uiIndex, uiPrintable;
|
||||
|
||||
if( uiSize > HB_MAX_MEM2STR_BLOCK )
|
||||
uiSize = HB_MAX_MEM2STR_BLOCK;
|
||||
|
||||
uiPrintable = 0;
|
||||
for( uiIndex=0; uiIndex < uiSize; uiIndex++ )
|
||||
if( cMem[uiIndex] >= ' ' )
|
||||
uiPrintable++;
|
||||
|
||||
if( (uiPrintable*100)/uiSize > 70 ) /* more then 70% printable chars */
|
||||
{
|
||||
/* format as string of original chars */
|
||||
for( uiIndex=0; uiIndex < uiSize; uiIndex++ )
|
||||
if( cMem[uiIndex] >= ' ' )
|
||||
cBuffer[uiIndex] = cMem[uiIndex];
|
||||
else
|
||||
cBuffer[uiIndex] = '.';
|
||||
cBuffer[uiIndex] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
/* format as hex */
|
||||
for( uiIndex=0; uiIndex < uiSize; uiIndex++ )
|
||||
{
|
||||
int lownibble, hinibble;
|
||||
hinibble = (cMem[uiIndex])>>4;
|
||||
lownibble = (cMem[uiIndex]) & 0x0F;
|
||||
cBuffer[uiIndex*2] = (hinibble <= 9) ? ('0'+hinibble) : ('A'+hinibble-10);
|
||||
cBuffer[uiIndex*2+1] = (lownibble <= 9) ? ('0'+lownibble) : ('A'+lownibble-10);
|
||||
}
|
||||
cBuffer[uiIndex*2] = '\0';
|
||||
}
|
||||
|
||||
return (char *)cBuffer;
|
||||
}
|
||||
|
||||
HB_EXPORT void hb_xexit( void ) /* Deinitialize fixed memory subsystem */
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_xexit()"));
|
||||
@@ -524,6 +571,10 @@ HB_EXPORT void hb_xexit( void ) /* Deinitialize fixed memory subsystem */
|
||||
PHB_MEMINFO pMemBlock;
|
||||
USHORT ui;
|
||||
char buffer[ 100 ];
|
||||
FILE *hLog = NULL;
|
||||
|
||||
if( s_lMemoryBlocks )
|
||||
hLog = fopen( "fm.log", "a+" );
|
||||
|
||||
hb_conOutErr( hb_conNewLine(), 0 );
|
||||
hb_conOutErr( "----------------------------------------", 0 );
|
||||
@@ -531,21 +582,58 @@ HB_EXPORT void hb_xexit( void ) /* Deinitialize fixed memory subsystem */
|
||||
sprintf( buffer, "Total memory allocated: %li bytes (%li blocks)", s_lMemoryMaxConsumed, s_lMemoryMaxBlocks );
|
||||
hb_conOutErr( buffer, 0 );
|
||||
|
||||
if ( hLog )
|
||||
{
|
||||
char *szTime = (char *)hb_xgrab(9);
|
||||
int iYear, iMonth, iDay;
|
||||
|
||||
hb_dateToday( &iYear, &iMonth, &iDay );
|
||||
hb_dateTimeStr( szTime );
|
||||
|
||||
fprintf( hLog, "Memory Allocation Report : Application => %s\n", hb_cmdargARGV()[0] );
|
||||
fprintf( hLog, " Application terminated at : %04d.%02d.%02d %s\n", iYear, iMonth, iDay, szTime );
|
||||
fprintf( hLog, "%s\n", buffer );
|
||||
|
||||
hb_xfree( szTime );
|
||||
}
|
||||
|
||||
if( s_lMemoryBlocks )
|
||||
{
|
||||
hb_conOutErr( hb_conNewLine(), 0 );
|
||||
sprintf( buffer, "WARNING! Memory allocated but not released: %li bytes (%li blocks)", s_lMemoryConsumed, s_lMemoryBlocks );
|
||||
hb_conOutErr( buffer, 0 );
|
||||
|
||||
if ( hLog ) fprintf( hLog, "%s\n", buffer );
|
||||
}
|
||||
|
||||
hb_conOutErr( hb_conNewLine(), 0 );
|
||||
|
||||
for( ui = 1, pMemBlock = s_pFirstBlock; pMemBlock; pMemBlock = pMemBlock->pNextBlock )
|
||||
HB_TRACE( HB_TR_ERROR, ( "Block %i (size %lu) %s(%i)",
|
||||
for( ui = 1, pMemBlock = s_pFirstBlock; pMemBlock; pMemBlock = pMemBlock->pNextBlock ) {
|
||||
HB_TRACE( HB_TR_ERROR, ( "Block %i (size %lu) %s(%i), \"%s\"",
|
||||
ui++,
|
||||
pMemBlock->ulSize,
|
||||
pMemBlock->szProcName,
|
||||
pMemBlock->uiProcLine ) );
|
||||
pMemBlock->uiProcLine,
|
||||
hb_mem2str( ( char * ) pMemBlock + HB_MEMINFO_SIZE, pMemBlock->ulSize )
|
||||
) );
|
||||
|
||||
if ( hLog )
|
||||
{
|
||||
fprintf( hLog, "Block %i %p (size %lu) %s(%i), \"%s\"\n",
|
||||
ui-1,
|
||||
(char *) pMemBlock + HB_MEMINFO_SIZE,
|
||||
pMemBlock->ulSize,
|
||||
pMemBlock->szProcName,
|
||||
pMemBlock->uiProcLine,
|
||||
hb_mem2str( ( char * ) pMemBlock + HB_MEMINFO_SIZE, pMemBlock->ulSize ) );
|
||||
}
|
||||
}
|
||||
|
||||
if( hLog )
|
||||
{
|
||||
fprintf( hLog, "--------------------------------------------------------------------------------\n");
|
||||
fclose( hLog );
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user