2010-05-17 13:37 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
* harbour/src/vm/dynsym.c
+ added to C functions:
int hb_dynsymToNum( PHB_DYNS pDynSym );
PHB_DYNS hb_dynsymFromNum( int iSymNum );
which can be used to make conversion between dynamic symbols and
numbers
This commit is contained in:
@@ -17,6 +17,15 @@
|
||||
past entries belonging to author(s): Viktor Szakats.
|
||||
*/
|
||||
|
||||
2010-05-17 13:37 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/include/hbapi.h
|
||||
* harbour/src/vm/dynsym.c
|
||||
+ added to C functions:
|
||||
int hb_dynsymToNum( PHB_DYNS pDynSym );
|
||||
PHB_DYNS hb_dynsymFromNum( int iSymNum );
|
||||
which can be used to make conversion between dynamic symbols and
|
||||
numbers
|
||||
|
||||
2010-15-16 23:02 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
|
||||
* contrib/hbide/hbide.prg
|
||||
* contrib/hbide/idemisc.prg
|
||||
|
||||
@@ -987,6 +987,8 @@ extern HB_EXPORT HB_BOOL hb_dynsymIsFunction( PHB_DYNS pDynSym );
|
||||
extern HB_EXPORT HB_BOOL hb_dynsymIsMemvar( PHB_DYNS pDynSym );
|
||||
extern HB_EXPORT int hb_dynsymAreaHandle( PHB_DYNS pDynSym ); /* return work area number bound with given dynamic symbol */
|
||||
extern HB_EXPORT void hb_dynsymSetAreaHandle( PHB_DYNS pDynSym, int iArea ); /* set work area number for a given dynamic symbol */
|
||||
extern HB_EXPORT int hb_dynsymToNum( PHB_DYNS pDynSym );
|
||||
extern HB_EXPORT PHB_DYNS hb_dynsymFromNum( int iSymNum );
|
||||
#ifdef _HB_API_INTERNAL_
|
||||
extern PHB_ITEM hb_dynsymGetMemvar( PHB_DYNS pDynSym ); /* return memvar handle number bound with given dynamic symbol */
|
||||
extern void hb_dynsymSetMemvar( PHB_DYNS pDynSym, PHB_ITEM pMemvar ); /* set memvar handle for a given dynamic symbol */
|
||||
|
||||
@@ -94,6 +94,10 @@ static HB_USHORT s_uiDynSymbols = 0; /* Number of symbols present */
|
||||
|
||||
static PHB_SYM_HOLDER s_pAllocSyms = NULL;/* symbols allocated dynamically */
|
||||
|
||||
/* table index for dynamic symbol to number conversions */
|
||||
static PDYNHB_ITEM s_pDynIndex = NULL;
|
||||
static int s_iDynIdxSize = 0;
|
||||
|
||||
/* Insert new symbol into dynamic symbol table.
|
||||
* In MT mode caller should protected it by HB_DYNSYM_LOCK
|
||||
*/
|
||||
@@ -528,6 +532,48 @@ long hb_dynsymCount( void )
|
||||
return s_uiDynSymbols;
|
||||
}
|
||||
|
||||
int hb_dynsymToNum( PHB_DYNS pDynSym )
|
||||
{
|
||||
int iSymNum;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_dynsymToNum(%p)", pDynSym));
|
||||
|
||||
HB_DYNSYM_LOCK
|
||||
|
||||
iSymNum = pDynSym->uiSymNum;
|
||||
|
||||
if( iSymNum > s_iDynIdxSize )
|
||||
{
|
||||
s_pDynIndex = hb_xrealloc( s_pDynIndex, iSymNum * sizeof( DYNHB_ITEM ) );
|
||||
memset( &s_pDynIndex[ s_iDynIdxSize ], 0, ( iSymNum - s_iDynIdxSize ) *
|
||||
sizeof( DYNHB_ITEM ) );
|
||||
s_iDynIdxSize = iSymNum;
|
||||
}
|
||||
|
||||
if( s_pDynIndex[ iSymNum - 1 ].pDynSym == NULL )
|
||||
s_pDynIndex[ iSymNum - 1 ].pDynSym = pDynSym;
|
||||
|
||||
HB_DYNSYM_UNLOCK
|
||||
|
||||
return iSymNum;
|
||||
}
|
||||
|
||||
PHB_DYNS hb_dynsymFromNum( int iSymNum )
|
||||
{
|
||||
PHB_DYNS pDynSym;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_dynsymFromNum(%d)", iSymNum));
|
||||
|
||||
HB_DYNSYM_LOCK
|
||||
|
||||
pDynSym = iSymNum > 0 && iSymNum <= s_iDynIdxSize ?
|
||||
s_pDynIndex[ iSymNum - 1 ].pDynSym : NULL;
|
||||
|
||||
HB_DYNSYM_UNLOCK
|
||||
|
||||
return pDynSym;
|
||||
}
|
||||
|
||||
void hb_dynsymEval( PHB_DYNS_FUNC pFunction, void * Cargo )
|
||||
{
|
||||
PHB_DYNS pDynSym = NULL;
|
||||
@@ -586,6 +632,13 @@ void hb_dynsymRelease( void )
|
||||
|
||||
HB_DYNSYM_LOCK
|
||||
|
||||
if( s_iDynIdxSize )
|
||||
{
|
||||
hb_xfree( s_pDynIndex );
|
||||
s_pDynIndex = NULL;
|
||||
s_iDynIdxSize = 0;
|
||||
}
|
||||
|
||||
if( s_uiDynSymbols )
|
||||
{
|
||||
do
|
||||
|
||||
Reference in New Issue
Block a user