PHB_DYNS hb_dynsymGet_r( const char * szName, PHB_DYNS pDest ) { PHB_DYNS pRet; hb_dynsymLock(); pRet = hb_dynsymGet( szName ); if( pRet ) { HB_MEMCPY( pDest, pRet, sizeof( HB_DYNS ) ); hb_dynsymUnlock(); return pDest; } hb_dynsymUnlock(); return NULL; }
/* * allocate and return atomAlias for new workarea or NULL if alias already exist */ void * hb_rddAllocWorkAreaAlias( const char * szAlias, int iArea ) { PHB_DYNS pSymAlias; int iDummyArea; HB_TRACE( HB_TR_DEBUG, ( "hb_rddAllocWorkAreaAlias(%s, %d)", szAlias, iArea ) ); /* Verify if the alias name is valid symbol */ if( hb_rddVerifyAliasName( szAlias ) != HB_SUCCESS ) { hb_errRT_DBCMD_Ext( EG_BADALIAS, EDBCMD_BADALIAS, NULL, szAlias, EF_CANDEFAULT ); return NULL; } /* Verify if the alias is already in use */ if( hb_rddGetAliasNumber( szAlias, &iDummyArea ) == HB_SUCCESS ) { hb_errRT_DBCMD_Ext( EG_DUPALIAS, EDBCMD_DUPALIAS, NULL, szAlias, EF_CANDEFAULT ); return NULL; } pSymAlias = hb_dynsymGet( szAlias ); if( hb_dynsymAreaHandle( pSymAlias ) != 0 ) { pSymAlias = NULL; } else { hb_dynsymSetAreaHandle( pSymAlias, iArea ); } if( ! pSymAlias ) { hb_errRT_DBCMD_Ext( EG_DUPALIAS, EDBCMD_DUPALIAS, NULL, szAlias, EF_CANDEFAULT ); } return pSymAlias; }
*/ void hb_memvarCreateFromItem( PHB_ITEM pMemvar, int iScope, PHB_ITEM pValue ) { PHB_DYNS pDynVar = NULL; HB_TRACE( HB_TR_DEBUG, ( "hb_memvarCreateFromItem(%p, %d, %p)", pMemvar, iScope, pValue ) ); /* find dynamic symbol or create one */ if( HB_IS_SYMBOL( pMemvar ) ) #if 0 pDynVar = hb_dynsymGet( pMemvar->item.asSymbol.value->szName ); #else pDynVar = pMemvar->item.asSymbol.value->pDynSym; #endif else if( HB_IS_STRING( pMemvar ) ) pDynVar = hb_dynsymGet( pMemvar->item.asString.value ); if( pDynVar ) hb_memvarCreateFromDynSymbol( pDynVar, iScope, pValue ); else hb_errRT_BASE( EG_ARG, 3008, NULL, "&", HB_ERR_ARGS_BASEPARAMS ); } static void hb_memvarCreateFromDynSymbol( PHB_DYNS pDynVar, int iScope, PHB_ITEM pValue ) { HB_TRACE( HB_TR_DEBUG, ( "hb_memvarCreateFromDynSymbol(%p, %d, %p)", pDynVar, iScope, pValue ) ); if( iScope & HB_VSCOMP_PUBLIC ) { /* If the variable with the same name exists already * then the current value have to be unchanged
PHB_SYMB hb_dynsymGetSymbol( const char * szName ) { HB_TRACE( HB_TR_DEBUG, ( "hb_dynsymGetSymbol(%s)", szName ) ); return hb_dynsymGet( szName )->pSymbol; }
HB_BOOL hb_execFromArray( PHB_ITEM pParam ) { PHB_ITEM pArray = NULL; PHB_ITEM pSelf = NULL; HB_ULONG ulParamOffset = 0; if( pParam && HB_IS_ARRAY( pParam ) && ! HB_IS_OBJECT( pParam ) ) { pArray = pParam; pParam = hb_arrayGetItemPtr( pArray, 1 ); if( HB_IS_OBJECT( pParam ) ) { pSelf = pParam; pParam = hb_arrayGetItemPtr( pArray, 2 ); ulParamOffset = 2; } else ulParamOffset = 1; } if( pParam ) { PHB_SYMB pExecSym = NULL; if( HB_IS_SYMBOL( pParam ) ) pExecSym = hb_itemGetSymbol( pParam ); else if( HB_IS_STRING( pParam ) ) pExecSym = hb_dynsymGet( hb_itemGetCPtr( pParam ) )->pSymbol; else if( HB_IS_BLOCK( pParam ) && ! pSelf ) { pSelf = pParam; pExecSym = &hb_symEval; } if( pExecSym ) { int iPCount = 0; hb_vmPushSymbol( pExecSym ); if( pSelf ) hb_vmPush( pSelf ); else hb_vmPushNil(); if( pArray ) { pParam = hb_arrayGetItemPtr( pArray, ++ulParamOffset ); while( pParam && iPCount < 255 ) { hb_vmPush( pParam ); ++iPCount; pParam = hb_arrayGetItemPtr( pArray, ++ulParamOffset ); } } if( pSelf ) hb_vmSend( ( HB_USHORT ) iPCount ); else hb_vmProc( ( HB_USHORT ) iPCount ); return HB_TRUE; } } hb_errRT_BASE_SubstR( EG_ARG, 1099, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); return HB_FALSE; }