static HB_SIZE s_fileReadAt( PHB_FILE pFile, void * buffer, HB_SIZE nSize, HB_FOFFSET nOffset ) { PHB_IOUSR pIO = ( PHB_IOUSR ) pFile->pFuncs; HB_SIZE nResult; int iOffset; iOffset = ( int ) ( hb_stackTopOffset() - hb_stackBaseOffset() ); memset( buffer, 0, nSize ); hb_vmPushString( ( const char * ) buffer, nSize ); s_pushMethod( pIO, IOUSR_READAT ); hb_vmPush( pFile->pFileItm ); hb_xvmPushLocalByRef( ( HB_SHORT ) iOffset ); hb_vmPushSize( nSize ); hb_vmPushNumInt( ( HB_MAXINT ) nOffset ); hb_vmDo( 4 ); nResult = hb_parns( -1 ); if( nResult > 0 ) { nSize = hb_itemGetCLen( hb_stackItemFromBase( iOffset ) ); if( nResult > nSize ) nResult = nSize; memcpy( buffer, hb_itemGetCPtr( hb_stackItemFromBase( iOffset ) ), nSize ); } hb_stackPop(); return nResult; }
static HB_BOOL s_fileTimeGet( PHB_FILE_FUNCS pFuncs, const char * pszFileName, long * plJulian, long * plMillisec ) { PHB_IOUSR pIO = ( PHB_IOUSR ) pFuncs; HB_BOOL fResult; int iOffset; iOffset = ( int ) ( hb_stackTopOffset() - hb_stackBaseOffset() ); hb_vmPushNil(); hb_vmPushNil(); s_pushMethod( pIO, IOUSR_TIMEGET ); hb_vmPushString( pszFileName, strlen( pszFileName ) ); hb_xvmPushLocalByRef( ( HB_SHORT ) iOffset ); hb_xvmPushLocalByRef( ( HB_SHORT ) ( iOffset + 1 ) ); hb_vmDo( 3 ); fResult = hb_parl( -1 ); if( fResult ) { *plJulian = hb_itemGetNL( hb_stackItemFromBase( iOffset ) ); *plMillisec = hb_itemGetNL( hb_stackItemFromBase( iOffset + 1 ) ); } hb_stackPop(); hb_stackPop(); return fResult; }
/* * Returns params plus locals amount of the nProcLevel function * hb_stackLen( <nProcLevel> ) --> <nVars> */ static HB_ISIZ hb_stackLen( int iLevel ) { HB_ISIZ nBaseOffset, nPrevOffset, nLen; HB_TRACE( HB_TR_DEBUG, ( "hb_stackLen()" ) ); nBaseOffset = hb_stackBaseOffset(); while( --iLevel > 0 && nBaseOffset > 1 ) nBaseOffset = hb_stackItem( nBaseOffset - 1 )->item.asSymbol.stackstate->nBaseItem + 1; if( nBaseOffset > 1 ) { nPrevOffset = hb_stackItem( nBaseOffset - 1 )->item.asSymbol.stackstate->nBaseItem; nLen = nBaseOffset - nPrevOffset - 3; } else nLen = 0; return nLen; }
static HB_BOOL s_fileAttrGet( PHB_FILE_FUNCS pFuncs, const char * pszFileName, HB_FATTR * pnAttr ) { PHB_IOUSR pIO = ( PHB_IOUSR ) pFuncs; HB_BOOL fResult; int iOffset; iOffset = ( int ) ( hb_stackTopOffset() - hb_stackBaseOffset() ); hb_vmPushNil(); s_pushMethod( pIO, IOUSR_ATTRGET ); hb_vmPushString( pszFileName, strlen( pszFileName ) ); hb_xvmPushLocalByRef( ( HB_SHORT ) iOffset ); hb_vmDo( 2 ); fResult = hb_parl( -1 ); if( fResult ) *pnAttr = ( HB_FATTR ) hb_itemGetNL( hb_stackItemFromBase( iOffset ) ); hb_stackPop(); return fResult; }
PHB_ITEM hb_dbg_vmVarLGet( int iLevel, int iLocal ) { PHB_ITEM pLocal = NULL; HB_ISIZ nBaseOffset; nBaseOffset = hb_stackBaseOffset(); while( iLevel-- > 0 && nBaseOffset > 1 ) nBaseOffset = hb_stackItem( nBaseOffset - 1 )->item.asSymbol.stackstate->nBaseItem + 1; if( iLevel < 0 ) { if( iLocal > SHRT_MAX ) { iLocal -= USHRT_MAX; iLocal--; } if( iLocal >= 0 ) { PHB_ITEM pBase = hb_stackItem( nBaseOffset - 1 ); if( pBase->item.asSymbol.paramcnt > pBase->item.asSymbol.paramdeclcnt && iLocal > pBase->item.asSymbol.paramdeclcnt ) iLocal += pBase->item.asSymbol.paramcnt - pBase->item.asSymbol.paramdeclcnt; pLocal = hb_stackItem( nBaseOffset + iLocal ); } else pLocal = hb_codeblockGetRef( hb_stackItem( nBaseOffset )->item.asBlock.value, iLocal ); if( HB_IS_BYREF( pLocal ) ) pLocal = hb_itemUnRef( pLocal ); } return pLocal; }