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:
Marek Paliwoda
2006-11-09 08:38:54 +00:00
parent d1a37718b0
commit 66695f622d
11 changed files with 214 additions and 80 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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 */

View File

@@ -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 );

View File

@@ -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$@

View File

@@ -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$@

View File

@@ -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
}