static PHB_ITEM hbamf_cls_externalizable_instance( PHB_ITEM pClassFuncStr ) { PHB_DYNS pSymbol = hb_dynsymGet( hb_itemGetCPtr( pClassFuncStr ) ); if( pSymbol ) { PHB_ITEM pRetCopy = hb_itemNew( NULL ); PHB_ITEM pNewItem = hb_itemNew( NULL ); hb_itemMove( pRetCopy, hb_stackReturnItem() ); hb_vmPushDynSym( pSymbol ); hb_vmPushNil(); hb_vmDo( 0 ); hb_objSendMsg( hb_stackReturnItem(), "NEW", 0 ); hb_itemMove( pNewItem, hb_stackReturnItem() ); hb_itemMove( hb_stackReturnItem(), pRetCopy ); hb_itemRelease( pRetCopy ); if( pNewItem ) { if( ! HB_IS_OBJECT( pNewItem ) ) { hb_itemRelease( pNewItem ); pNewItem = NULL; } } return pNewItem; } return NULL; }
int hb_sockexSelect( PHB_ITEM pArrayRD, HB_BOOL fSetRD, PHB_ITEM pArrayWR, HB_BOOL fSetWR, PHB_ITEM pArrayEX, HB_BOOL fSetEX, HB_MAXINT timeout, HB_SOCKET_FUNC pFunc ) { int iResult; HB_SIZE nRead = 0, nWrite = 0, nLen, nPos; PHB_SOCKEX pSock; if( pArrayRD ) { nLen = hb_arrayLen( pArrayRD ); for( nPos = 1; nPos <= nLen; ++nPos ) { pSock = hb_sockexItemGet( hb_arrayGetItemPtr( pArrayRD, nPos ) ); if( pSock && pSock->pFilter->CanRead( pSock, HB_TRUE, 0 ) > 0 ) { ++nRead; if( fSetRD && nRead != nPos ) hb_itemMove( hb_arrayGetItemPtr( pArrayRD, nRead ), hb_arrayGetItemPtr( pArrayRD, nPos ) ); } } } if( pArrayWR ) { nLen = hb_arrayLen( pArrayWR ); for( nPos = 1; nPos <= nLen; ++nPos ) { pSock = hb_sockexItemGet( hb_arrayGetItemPtr( pArrayWR, nPos ) ); if( pSock && pSock->pFilter->CanWrite( pSock, HB_TRUE, 0 ) > 0 ) { ++nWrite; if( fSetWR && nWrite != nPos ) hb_itemMove( hb_arrayGetItemPtr( pArrayWR, nWrite ), hb_arrayGetItemPtr( pArrayWR, nPos ) ); } } } if( nRead > 0 || nWrite > 0 ) { if( fSetRD && pArrayRD ) hb_arraySize( pArrayRD, nRead ); if( fSetWR && pArrayWR ) hb_arraySize( pArrayWR, nWrite ); if( fSetEX && pArrayEX ) hb_arraySize( pArrayEX, 0 ); iResult = ( int ) ( nRead + nWrite ); } else { if( pFunc == NULL ) pFunc = s_socketSelectCallback; iResult = hb_socketSelect( pArrayRD, fSetRD, pArrayWR, fSetWR, pArrayEX, fSetEX, timeout, pFunc ); } return iResult; }
HB_BOOL hbamf_is_cls_externalizable( HB_USHORT uiClass ) { PHB_DYNS pSymbol = hb_dynsymGet( "__CLSMSGTYPE" ); HB_BOOL result = HB_FALSE; /* as far as i know, there is no exported Harbour C level api for this */ if( uiClass && pSymbol ) { PHB_ITEM pRetCopy = hb_itemNew( NULL ); hb_itemMove( pRetCopy, hb_stackReturnItem() ); hb_vmPushDynSym( pSymbol ); hb_vmPushNil(); hb_vmPushInteger( uiClass ); hb_vmPushString( "EXTERNALIZABLE", 14 ); hb_vmDo( 2 ); if( hb_itemGetNI( hb_stackReturnItem() ) == HB_OO_MSG_CLASSDATA ) result = HB_TRUE; hb_itemMove( hb_stackReturnItem(), pRetCopy ); hb_itemRelease( pRetCopy ); } return result; }
static void hb_hrbDo( PHRB_BODY pHrbBody, int iPCount, PHB_ITEM * pParams ) { PHB_ITEM pRetVal = NULL; int i; hb_hrbInit( pHrbBody, iPCount, pParams ); /* May not have a startup symbol, if first symbol was an INIT Symbol (was executed already). */ if( pHrbBody->lSymStart >= 0 && hb_vmRequestQuery() == 0 ) { hb_vmPushSymbol( &pHrbBody->pSymRead[ pHrbBody->lSymStart ] ); hb_vmPushNil(); for( i = 0; i < iPCount; i++ ) hb_vmPush( pParams[ i ] ); hb_vmProc( ( HB_USHORT ) iPCount ); pRetVal = hb_itemNew( NULL ); hb_itemMove( pRetVal, hb_stackReturnItem() ); } if( pRetVal ) hb_itemReturnRelease( pRetVal ); }
void hb_errInit( void ) { HB_TRACE( HB_TR_DEBUG, ( "hb_errInit()" ) ); /* error function */ hb_dynsymNew( &s_symErrorNew ); /* Create error class and base object */ s_pError = hb_itemNew( NULL ); hb_clsAssociate( hb_errClassCreate() ); hb_itemMove( s_pError, hb_stackReturnItem() ); }
static HB_ERRCODE adsxOrderInfo( ADSXAREAP pArea, HB_USHORT uiIndex, LPDBORDERINFO pOrderInfo ) { PMIXTAG pTag = pArea->pTagCurrent; /* resolve any pending relations */ if( pArea->adsarea.lpdbPendingRel ) SELF_FORCEREL( ( AREAP ) pArea ); /* all others need an index handle */ if( uiIndex != DBOI_ORDERCOUNT ) { if( pOrderInfo->itmOrder ) { if( HB_IS_STRING( pOrderInfo->itmOrder ) ) { pTag = pArea->pTagList; while( pTag ) { if( ! hb_stricmp( hb_itemGetCPtr( pOrderInfo->itmOrder ), pTag->szName ) ) break; pTag = pTag->pNext; } } else if( HB_IS_NUMERIC( pOrderInfo->itmOrder ) ) { UNSIGNED16 usOrder = 0, usSearch = ( UNSIGNED16 ) hb_itemGetNI( pOrderInfo->itmOrder ); AdsGetNumIndexes( pArea->adsarea.hTable, &usOrder ); pTag = usSearch <= usOrder ? NULL : pArea->pTagList; while( pTag ) { if( ++usOrder == usSearch ) break; pTag = pTag->pNext; } } } if( ! pTag ) return SUPER_ORDINFO( ( AREAP ) pArea, uiIndex, pOrderInfo ); } switch( uiIndex ) { case DBOI_CONDITION: hb_itemPutC( pOrderInfo->itmResult, pTag->szForExpr ); break; case DBOI_EXPRESSION: hb_itemPutC( pOrderInfo->itmResult, pTag->szKeyExpr ); break; case DBOI_ISCOND: hb_itemPutL( pOrderInfo->itmResult, pTag->pForItem != NULL ); break; case DBOI_ISDESC: hb_itemPutL( pOrderInfo->itmResult, HB_FALSE ); break; case DBOI_UNIQUE: hb_itemPutL( pOrderInfo->itmResult, HB_FALSE ); break; case DBOI_KEYTYPE: hb_itemPutCL( pOrderInfo->itmResult, ( char * ) &pTag->bType, 1 ); break; case DBOI_KEYSIZE: hb_itemPutNI( pOrderInfo->itmResult, pTag->uiLen ); break; case DBOI_KEYVAL: { PHB_ITEM pItem; PHB_CODEPAGE pCodepage = hb_cdpSelect( pArea->adsarea.area.cdPage ); pItem = hb_vmEvalBlockOrMacro( pTag->pKeyItem ); hb_cdpSelect( pCodepage ); hb_itemMove( pOrderInfo->itmResult, pItem ); break; } case DBOI_KEYCOUNT: case DBOI_KEYCOUNTRAW: /* ignore filter but RESPECT SCOPE */ hb_itemPutNL( pOrderInfo->itmResult, pTag->ulRecCount ); break; case DBOI_POSITION: case DBOI_RECNO: case DBOI_KEYNORAW: if( uiIndex == DBOI_POSITION && pOrderInfo->itmNewVal && HB_IS_NUMERIC( pOrderInfo->itmNewVal ) ) { HB_ULONG ulPos; ulPos = hb_itemGetNL( pOrderInfo->itmNewVal ); if( ulPos > 0 && ulPos <= pTag->ulRecCount ) SELF_GOTO( ( AREAP ) pArea, pTag->pKeys[ ulPos - 1 ]->rec ); pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, ! pArea->adsarea.area.fEof ); } else { PMIXKEY pKey; HB_ULONG ulKeyPos; if( ! pArea->adsarea.fPositioned ) SELF_GOTO( ( AREAP ) pArea, pArea->adsarea.ulRecNo ); else pArea->adsarea.area.fEof = HB_FALSE; pKey = mixKeyEval( pTag, pArea ); hb_itemPutNL( pOrderInfo->itmResult, mixFindKey( pTag, pKey, &ulKeyPos ) ? ( ulKeyPos + 1 ) : 0 ); mixKeyFree( pKey ); } break; case DBOI_RELKEYPOS: if( pOrderInfo->itmNewVal && HB_IS_NUMERIC( pOrderInfo->itmNewVal ) ) { HB_ULONG ulPos; ulPos = ( HB_ULONG ) ( hb_itemGetND( pOrderInfo->itmNewVal ) * ( double ) pTag->ulRecCount ); if( ulPos > 0 && ulPos <= pTag->ulRecCount ) SELF_GOTO( ( AREAP ) pArea, pTag->pKeys[ ulPos - 1 ]->rec ); pOrderInfo->itmResult = hb_itemPutL( pOrderInfo->itmResult, ! pArea->adsarea.area.fEof ); } else { PMIXKEY pKey; HB_ULONG ulKeyPos; if( ! pArea->adsarea.fPositioned ) SELF_GOTO( ( AREAP ) pArea, pArea->adsarea.ulRecNo ); else pArea->adsarea.area.fEof = HB_FALSE; pKey = mixKeyEval( pTag, pArea ); if( ! mixFindKey( pTag, pKey, &ulKeyPos + 1 ) ) ulKeyPos = 0; mixKeyFree( pKey ); pOrderInfo->itmResult = hb_itemPutND( pOrderInfo->itmResult, ( double ) ulKeyPos / ( double ) pTag->ulRecCount ); } break; case DBOI_NAME: hb_itemPutC( pOrderInfo->itmResult, pTag->szName ); break; case DBOI_BAGNAME: hb_itemPutC( pOrderInfo->itmResult, NULL ); break; case DBOI_FULLPATH: hb_itemPutC( pOrderInfo->itmResult, NULL ); break; case DBOI_BAGEXT: hb_itemPutC( pOrderInfo->itmResult, "mix" ); break; case DBOI_ORDERCOUNT: { UNSIGNED16 usOrder = 0; AdsGetNumIndexes( pArea->adsarea.hTable, &usOrder ); pTag = pArea->pTagList; while( pTag ) { pTag = pTag->pNext; usOrder++; } hb_itemPutNI( pOrderInfo->itmResult, ( int ) usOrder ); break; } case DBOI_NUMBER: { PMIXTAG pTag2; UNSIGNED16 usOrder = 0; AdsGetNumIndexes( pArea->adsarea.hTable, &usOrder ); pTag2 = pArea->pTagList; usOrder++; while( pTag2 && pTag != pTag2 ) { pTag2 = pTag2->pNext; usOrder++; } hb_itemPutNI( pOrderInfo->itmResult, ( int ) usOrder ); break; } case DBOI_CUSTOM: hb_itemPutL( pOrderInfo->itmResult, HB_FALSE ); break; case DBOI_OPTLEVEL: hb_itemPutNI( pOrderInfo->itmResult, DBOI_OPTIMIZED_NONE ); break; case DBOI_KEYADD: hb_itemPutL( pOrderInfo->itmResult, HB_FALSE ); break; case DBOI_KEYDELETE: hb_itemPutL( pOrderInfo->itmResult, HB_FALSE ); break; case DBOI_AUTOOPEN: hb_itemPutL( pOrderInfo->itmResult, HB_FALSE ); break; default: return SUPER_ORDINFO( ( AREAP ) pArea, uiIndex, pOrderInfo ); } return HB_SUCCESS; }