/* * allocate and return atomAlias for new workarea or NULL if alias already exist */ void * hb_rddAllocWorkAreaAlias( const char * szAlias, int iArea ) { 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 ); /* Verify if the alias is already in use */ else if( hb_rddGetAliasNumber( szAlias, &iDummyArea ) == HB_SUCCESS ) hb_errRT_DBCMD_Ext( EG_DUPALIAS, EDBCMD_DUPALIAS, NULL, szAlias, EF_CANDEFAULT ); else { PHB_DYNS pSymAlias = hb_dynsymGet( szAlias ); if( hb_dynsymAreaHandle( pSymAlias ) == 0 ) { hb_dynsymSetAreaHandle( pSymAlias, iArea ); return pSymAlias; } hb_errRT_DBCMD_Ext( EG_DUPALIAS, EDBCMD_DUPALIAS, NULL, szAlias, EF_CANDEFAULT ); } return NULL; }
HB_ERRCODE hb_rddGetTempAlias( char * szAliasTmp ) { int i, iArea; for( i = 1; i < 1000; i++ ) { hb_snprintf( szAliasTmp, 11, "__HBTMP%03i", i ); if( hb_rddGetAliasNumber( szAliasTmp, &iArea ) != HB_SUCCESS ) return HB_SUCCESS; } szAliasTmp[ 0 ] = '\0'; return HB_FAILURE; }
/* * Select a WorkArea by the name. */ HB_ERRCODE hb_rddSelectWorkAreaAlias( const char * szAlias ) { HB_ERRCODE errCode; int iArea; HB_TRACE( HB_TR_DEBUG, ( "hb_rddSelectWorkAreaAlias(%s)", szAlias ) ); errCode = hb_rddGetAliasNumber( szAlias, &iArea ); if( errCode == HB_FAILURE ) { /* * generate an error with retry possibility * (user created error handler can open a missing database) */ PHB_ITEM pError = hb_errRT_New( ES_ERROR, NULL, EG_NOALIAS, EDBCMD_NOALIAS, NULL, szAlias, 0, EF_CANRETRY ); do { if( hb_errLaunch( pError ) != E_RETRY ) break; errCode = hb_rddGetAliasNumber( szAlias, &iArea ); } while( errCode == HB_FAILURE ); hb_itemRelease( pError ); } if( errCode == HB_SUCCESS ) { if( iArea < 1 || iArea > HB_RDD_MAX_AREA_NUM ) errCode = hb_rddSelectFirstAvailable(); else errCode = hb_rddSelectWorkAreaNumber( iArea ); } return errCode; }
static AREAP s_foxAreaPointer( int iParam ) { if( HB_ISNIL( iParam ) ) return ( AREAP ) hb_rddGetCurrentWorkAreaPointer(); else { const char * szAlias = hb_parc( iParam ); int iArea; if( szAlias ) hb_rddGetAliasNumber( szAlias, &iArea ); else iArea = hb_parni( iParam ); return ( AREAP ) hb_rddGetWorkAreaPointer( iArea ); } }