* INSTALL
* make_gnu.bat
+ Added support for Cygwin builds (passes call to make_gnu.sh).
+ Added Cygwin build starter example.
+ Cygwin mentioned as a requirement for mingwarm builds,
also added to PATH.
! Fixed cygwin autodetection.
! Fixed wrong PATH order in 'MinGW GCC + MSYS' example.
* Merged mingw+msys and cygwin bash based build methods,
and titled as "alternate" method.
Now all supported compilers work by starting up make_gnu.bat.
* utils/hbmk2/hbmk2.prg
! Change compiler autodetection to work for cygwin.
* mpkg_dos.bat
* mpkg_win.bat
* make_gnu.bat
! Fixed build process to work in paths containing spaces.
I didn't test the batch in pure DOS, so I may have broken it.
* config/win/install.cf
* config/wce/install.cf
! Fixed 'install' to work when there is a space in install path.
* make_gnu.bat
* INSTALL
+ Added support for HB_BUILD_LOG envvar. If set to 'yes',
it will automatically set log output filename to:
'log-<arch>-<comp>.txt'
if set to 'no' it will no make any extra redirection,
if set to any other value, it will be used for output
(both std and err). The batch will set HB_BUILD_LOGFILE
to the filename used for output for processing.
This feature requires Windows NT or upper host.
I didn't enable this feature yet by default to not break
existing user setups, but maybe I'll do it before the
final release.
* Modified text shown (+ beep thrown) when build failed.
* Messages now all start with 'Harbour'.
* Do not do the second build pass if the first one failed.
* contrib/hbwin/legacy.prg
! Fixed CreateObject() not working due to typo.
Thanks to Itamar Lins for the report.
* mpkg_dos.bat
* mpkg_win.bat
* mpkg_win.nsi
+ Enabled HB_BUILD_LOG=yes.
* Silenced copy, zip, makensis commands.
+ Added message about failed build process.
* Changed to use 'copy' instead of 'xcopy'
* Changed internals so now they don't require HB_COMPILER
and HB_ARCHITECTURE to be set. This means that now
we can rely on autodetection even for mpkg_*.bat files.
Creating an installer is very easy now for most cases.
Just type:
mpkg_gnu.bat
* source/vm/set.c
+ Added file commit support to __MVSAVE(), if Set( _SET_HARDCOMMIT )
is set to .T.. This is the default which means by default we aren't
CA-Cl*pper compatible. Addition protected by HB_C52_STRICT.
* source/rdd/dbf1.c
! Minor typo in comment.
* doc/en-EN/hb_apiit.txt
* include/hbapi.h
* include/hbapiitm.h
* source/vm/itemapi.c
* source/vm/extend.c
* source/rtl/gtwvt/gtwvt.c
* source/rdd/dbf1.c
* contrib/gtqtc/gtqtc.cpp
* contrib/gtwvg/gtwvg.c
* contrib/gtwvg/wvggui.c
* contrib/hbwin/olecore.c
* examples/hboleold/win_ole.c
* Finishing long planned function renames to clear up
a very (10 years) old naming inconsistency.
To adapt you code to this, please do changes below:
1) hb_itemPutCPtr() (with three parameters) -> hb_itemPutCLPtr()
2) hb_itemPutCPtr2() -> hb_itemPutCPtr()
Unmodified code will generate compile time errors, so it's easy
to spot where the modifications need to be done. For most users,
only case 1) will need to be dealt with.
; INCOMPATIBLE. Please update your code.
* source/rtl/hbi18n1.c
* source/rdd/dbfnsx/dbfnsx1.c
* hb_itemPutCPtr() (with three parameters) -> hb_itemPutCLPtr()
* contrib/gtwvg/wvggui.c
* contrib/gtqtc/gtqtc.cpp
! Fixed GPF in hb_gtInfo( HB_GTI_SCREENSIZE ) call with wrong
parameter.
2386 lines
56 KiB
C
2386 lines
56 KiB
C
/*
|
|
* $Id$
|
|
*/
|
|
|
|
/*
|
|
* Harbour Project source code:
|
|
* The Extend API
|
|
*
|
|
* Copyright 1999 Antonio Linares <alinares@fivetech.com>
|
|
* www - http://www.harbour-project.org
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this software; see the file COPYING. If not, write to
|
|
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
|
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
|
|
*
|
|
* As a special exception, the Harbour Project gives permission for
|
|
* additional uses of the text contained in its release of Harbour.
|
|
*
|
|
* The exception is that, if you link the Harbour libraries with other
|
|
* files to produce an executable, this does not by itself cause the
|
|
* resulting executable to be covered by the GNU General Public License.
|
|
* Your use of that executable is in no way restricted on account of
|
|
* linking the Harbour library code into it.
|
|
*
|
|
* This exception does not however invalidate any other reasons why
|
|
* the executable file might be covered by the GNU General Public License.
|
|
*
|
|
* This exception applies only to the code released by the Harbour
|
|
* Project under the name Harbour. If you copy code from other
|
|
* Harbour Project or Free Software Foundation releases into a copy of
|
|
* Harbour, as the General Public License permits, the exception does
|
|
* not apply to the code that you add in this way. To avoid misleading
|
|
* anyone as to the status of such modified files, you must delete
|
|
* this exception notice from them.
|
|
*
|
|
* If you write modifications of your own for Harbour, it is your choice
|
|
* whether to permit this exception to apply to your modifications.
|
|
* If you do not wish that, delete this exception notice.
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* The following parts are Copyright of the individual authors.
|
|
* www - http://www.harbour-project.org
|
|
*
|
|
* Copyright 1999-2001 Viktor Szakats (harbour.01 syenar.hu)
|
|
* hb_retnlen()
|
|
* hb_retnilen()
|
|
* hb_retnllen()
|
|
* hb_retndlen()
|
|
* hb_retdl()
|
|
*
|
|
* Copyright 2000 Jose Lalin <dezac@corevia.com>
|
|
* hb_retd()
|
|
*
|
|
* See COPYING for licensing terms.
|
|
*
|
|
*/
|
|
|
|
#include "hbvmopt.h"
|
|
#include "hbapi.h"
|
|
#include "hbapiitm.h"
|
|
#include "hbset.h"
|
|
#include "hbdate.h"
|
|
#include "hbstack.h"
|
|
|
|
/* NOTE: iParam = -1 can be used to access the return value. */
|
|
/* NOTE: iParam = 0 can be used to access the SELF object. */
|
|
|
|
PHB_ITEM hb_param( int iParam, long lMask )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_param(%d, %ld)", iParam, lMask));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( pItem->type & HB_IT_BYREF )
|
|
{
|
|
pItem = hb_itemUnRef( pItem );
|
|
if( ( HB_TYPE ) lMask == HB_IT_BYREF )
|
|
return pItem;
|
|
}
|
|
|
|
if( ( pItem->type & ( HB_TYPE ) lMask ) || ( HB_TYPE ) lMask == HB_IT_ANY )
|
|
return pItem;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
PHB_ITEM hb_paramError( int iParam )
|
|
{
|
|
static HB_ITEM s_NIL;
|
|
|
|
PHB_ITEM pParam = hb_param( iParam, HB_IT_ANY );
|
|
|
|
if( pParam == NULL )
|
|
{
|
|
hb_itemClear( &s_NIL );
|
|
pParam = &s_NIL;
|
|
}
|
|
|
|
return pParam;
|
|
}
|
|
|
|
ULONG hb_parinfo( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parinfo(%d)", iParam));
|
|
|
|
if( iParam == 0 )
|
|
return ( ULONG ) hb_pcount();
|
|
else
|
|
{
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
HB_TYPE uiType = HB_ITEM_TYPE( pItem );
|
|
|
|
if( uiType & HB_IT_BYREF )
|
|
uiType |= HB_ITEM_TYPE( hb_itemUnRef( pItem ) );
|
|
|
|
return ( ULONG ) uiType;
|
|
}
|
|
else
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
ULONG hb_parinfa( int iParamNum, ULONG uiArrayIndex )
|
|
{
|
|
PHB_ITEM pArray;
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parinfa(%d, %lu)", iParamNum, uiArrayIndex));
|
|
|
|
pArray = hb_param( iParamNum, HB_IT_ARRAY );
|
|
|
|
if( pArray )
|
|
{
|
|
if( uiArrayIndex == 0 )
|
|
return hb_arrayLen( pArray );
|
|
else
|
|
return ( long ) hb_arrayGetType( pArray, uiArrayIndex );
|
|
}
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
/* function to be called from pcode DLLs to detect if the extend system
|
|
* is going to use an array item */
|
|
|
|
BOOL hb_extIsArray( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
PHB_ITEM pItem;
|
|
|
|
if( iParam == -1 )
|
|
pItem = hb_stackReturnItem();
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
pItem = hb_stackItemFromBase( iParam );
|
|
else
|
|
return FALSE;
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
return HB_IS_ARRAY( pItem ) && !HB_ARRAY_OBJ( pItem );
|
|
}
|
|
|
|
/* function to be called from pcode DLLs to detect if the extend system
|
|
* is going to use an object item */
|
|
|
|
BOOL hb_extIsObject( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
PHB_ITEM pItem;
|
|
|
|
if( iParam == -1 )
|
|
pItem = hb_stackReturnItem();
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
pItem = hb_stackItemFromBase( iParam );
|
|
else
|
|
return FALSE;
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
return HB_IS_OBJECT( pItem );
|
|
}
|
|
|
|
/* NOTE: Caller should not modify the buffer returned by this function.
|
|
[vszakats] */
|
|
|
|
const char * hb_parc( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parc(%d)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_STRING( pItem ) )
|
|
return pItem->item.asString.value;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
const char * hb_parcx( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parcx(%d)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_STRING( pItem ) )
|
|
return pItem->item.asString.value;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
ULONG hb_parclen( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parclen(%d)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_STRING( pItem ) )
|
|
return pItem->item.asString.length;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* NOTE: Similar to _parclen() but returns the length including the
|
|
terminating zero byte, and it only works for parameters passed by
|
|
reference. [vszakats] */
|
|
|
|
ULONG hb_parcsiz( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parcsiz(%d)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
/* NOTE: hb_parcsiz() will only work for strings passed by reference.
|
|
CA-Cl*pper works like this. [vszakats] */
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_STRING( pItem ) )
|
|
return pItem->item.asString.length + 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* NOTE: Using hb_stackDateBuffer() a temporary date buffer guaranties
|
|
good behavior when multithreading. */
|
|
|
|
char * hb_pards( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_pards(%d)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_DATETIME( pItem ) )
|
|
return hb_dateDecStr( hb_stackDateBuffer(), pItem->item.asDateTime.julian );
|
|
}
|
|
|
|
return hb_dateDecStr( hb_stackDateBuffer(), 0 );
|
|
}
|
|
|
|
/* NOTE: szDate must be a 9 chars wide buffer. [vszakats] */
|
|
|
|
char * hb_pardsbuff( char * szDate, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_pardsbuff(%p, %d)", szDate, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_DATETIME( pItem ) )
|
|
return hb_dateDecStr( szDate, pItem->item.asDateTime.julian );
|
|
}
|
|
|
|
return hb_dateDecStr( szDate, 0 );
|
|
}
|
|
|
|
/* retrieve a date as long integer - number of days from Julian's day */
|
|
|
|
LONG hb_pardl( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_pardl(%d)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_DATETIME( pItem ) )
|
|
return pItem->item.asDateTime.julian;
|
|
}
|
|
|
|
return hb_itemGetDL( NULL );
|
|
}
|
|
|
|
double hb_partd( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_partd(%d)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_DATETIME( pItem ) )
|
|
return hb_timeStampPackDT( pItem->item.asDateTime.julian,
|
|
pItem->item.asDateTime.time );
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
BOOL hb_partdt( LONG * plJulian, LONG * plMilliSec , int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_partdt(%p,%p,%d)", plJulian, plMilliSec, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_DATETIME( pItem ) )
|
|
{
|
|
*plJulian = pItem->item.asDateTime.julian;
|
|
*plMilliSec = pItem->item.asDateTime.time;
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
int hb_parl( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parl(%d)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_LOGICAL( pItem ) )
|
|
return pItem->item.asLogical.value ? 1 : 0;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
double hb_parnd( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parnd(%d)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_DOUBLE( pItem ) )
|
|
return pItem->item.asDouble.value;
|
|
else if( HB_IS_INTEGER( pItem ) )
|
|
return ( double ) pItem->item.asInteger.value;
|
|
else if( HB_IS_LONG( pItem ) )
|
|
return ( double ) pItem->item.asLong.value;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_parni( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parni(%d)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_INTEGER( pItem ) )
|
|
return pItem->item.asInteger.value;
|
|
else if( HB_IS_LONG( pItem ) )
|
|
return ( int ) pItem->item.asLong.value;
|
|
else if( HB_IS_DOUBLE( pItem ) )
|
|
#ifdef __GNUC__
|
|
return ( int ) ( unsigned int ) pItem->item.asDouble.value;
|
|
#else
|
|
return ( int ) pItem->item.asDouble.value;
|
|
#endif
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
long hb_parnl( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parnl(%d)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_LONG( pItem ) )
|
|
return ( long ) pItem->item.asLong.value;
|
|
else if( HB_IS_INTEGER( pItem ) )
|
|
return ( long ) pItem->item.asInteger.value;
|
|
else if( HB_IS_DOUBLE( pItem ) )
|
|
#ifdef __GNUC__
|
|
return ( long ) ( unsigned long ) pItem->item.asDouble.value;
|
|
#else
|
|
return ( long ) pItem->item.asDouble.value;
|
|
#endif
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
#ifndef HB_LONG_LONG_OFF
|
|
LONGLONG hb_parnll( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parnll(%d)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_LONG( pItem ) )
|
|
return ( LONGLONG ) pItem->item.asLong.value;
|
|
else if( HB_IS_INTEGER( pItem ) )
|
|
return ( LONGLONG ) pItem->item.asInteger.value;
|
|
else if( HB_IS_DOUBLE( pItem ) )
|
|
#ifdef __GNUC__
|
|
return ( LONGLONG ) ( ULONGLONG ) pItem->item.asDouble.value;
|
|
#else
|
|
return ( LONGLONG ) pItem->item.asDouble.value;
|
|
#endif
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
HB_LONG hb_parnint( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parnint(%d)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_LONG( pItem ) )
|
|
return ( HB_LONG ) pItem->item.asLong.value;
|
|
else if( HB_IS_INTEGER( pItem ) )
|
|
return ( HB_LONG ) pItem->item.asInteger.value;
|
|
else if( HB_IS_DOUBLE( pItem ) )
|
|
#ifdef __GNUC__
|
|
return ( HB_LONG ) ( HB_ULONG ) pItem->item.asDouble.value;
|
|
#else
|
|
return ( HB_LONG ) pItem->item.asDouble.value;
|
|
#endif
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void * hb_parptr( int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parptr(%d)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_POINTER( pItem ) )
|
|
return pItem->item.asPointer.value;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void * hb_parptrGC( HB_GARBAGE_FUNC_PTR pFunc, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parptrGC(%p,%d)", pFunc, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_POINTER( pItem ) && pItem->item.asPointer.collect &&
|
|
hb_gcFunc( pItem->item.asPointer.value ) == pFunc )
|
|
return pItem->item.asPointer.value;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/* NOTE: Caller should not modify the buffer returned by this function.
|
|
[vszakats] */
|
|
|
|
char * hb_parvc( int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvc(%d, ...)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_STRING( pItem ) )
|
|
return pItem->item.asString.value;
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
pItem = hb_arrayGetItemPtr( pItem, ulArrayIndex );
|
|
return pItem && HB_IS_STRING( pItem ) ? ( char * ) hb_itemGetCPtr( pItem ) : NULL;
|
|
}
|
|
}
|
|
|
|
return ( char * ) NULL;
|
|
}
|
|
|
|
char * hb_parvcx( int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvcx(%d, ...)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_STRING( pItem ) )
|
|
return pItem->item.asString.value;
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return ( char * ) hb_arrayGetCPtr( pItem, ulArrayIndex );
|
|
}
|
|
}
|
|
|
|
return ( char * ) "";
|
|
}
|
|
|
|
ULONG hb_parvclen( int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvclen(%d, ...)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_STRING( pItem ) )
|
|
return pItem->item.asString.length;
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return hb_arrayGetCLen( pItem, ulArrayIndex );
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* NOTE: Similar to _parclen() but returns the length including the
|
|
terminating zero byte, and it only works for parameters passed by
|
|
reference. [vszakats] */
|
|
|
|
ULONG hb_parvcsiz( int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvcsiz(%d, ...)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
/* NOTE: hb_parvcsiz() will only work for strings passed by reference.
|
|
CA-Cl*pper works like this. [vszakats] */
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_STRING( pItem ) )
|
|
return pItem->item.asString.length + 1;
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return hb_arrayGetCLen( pItem, ulArrayIndex ) + 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* NOTE: Using hb_stackDateBuffer() a temporary date buffer guaranties
|
|
good behavior when multithreading. */
|
|
|
|
char * hb_parvds( int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvds(%d, ...)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_DATETIME( pItem ) )
|
|
return hb_dateDecStr( hb_stackDateBuffer(), pItem->item.asDateTime.julian );
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return hb_arrayGetDS( pItem, ulArrayIndex, hb_stackDateBuffer() );
|
|
}
|
|
}
|
|
|
|
return hb_dateDecStr( hb_stackDateBuffer(), 0 );
|
|
}
|
|
|
|
/* NOTE: szDate must be a 9 chars wide buffer. [vszakats] */
|
|
|
|
char * hb_parvdsbuff( char * szDate, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvdsbuff(%p, %d, ...)", szDate, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_DATETIME( pItem ) )
|
|
return hb_dateDecStr( szDate, pItem->item.asDateTime.julian );
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return hb_arrayGetDS( pItem, ulArrayIndex, szDate );
|
|
}
|
|
}
|
|
|
|
return hb_dateDecStr( szDate, 0 );
|
|
}
|
|
|
|
/* retrieve a date as long integer - number of days from Julian's day */
|
|
|
|
LONG hb_parvdl( int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvdl(%d, ...)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_DATETIME( pItem ) )
|
|
return pItem->item.asDateTime.julian;
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return hb_arrayGetDL( pItem, ulArrayIndex );
|
|
}
|
|
}
|
|
|
|
return hb_itemGetDL( NULL );
|
|
}
|
|
|
|
double hb_parvtd( int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvtd(%d, ...)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_DATETIME( pItem ) )
|
|
return hb_timeStampPackDT( pItem->item.asDateTime.julian,
|
|
pItem->item.asDateTime.time );
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return hb_arrayGetTD( pItem, ulArrayIndex );
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
BOOL hb_parvtdt( LONG * plJulian, LONG * plMilliSec , int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvtdt(%p,%p,%d, ...)", plJulian, plMilliSec, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_DATETIME( pItem ) )
|
|
{
|
|
*plJulian = pItem->item.asDateTime.julian;
|
|
*plMilliSec = pItem->item.asDateTime.time;
|
|
return TRUE;
|
|
}
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return hb_arrayGetTDT( pItem, ulArrayIndex, plJulian, plMilliSec );
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
int hb_parvl( int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvl(%d, ...)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_LOGICAL( pItem ) )
|
|
return pItem->item.asLogical.value ? 1 : 0;
|
|
else if( HB_IS_INTEGER( pItem ) )
|
|
return pItem->item.asInteger.value != 0 ? 1 : 0;
|
|
else if( HB_IS_LONG( pItem ) )
|
|
return pItem->item.asLong.value != 0 ? 1 : 0;
|
|
else if( HB_IS_DOUBLE( pItem ) )
|
|
return pItem->item.asDouble.value != 0.0 ? 1 : 0;
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return hb_arrayGetL( pItem, ulArrayIndex ) ? 1 : 0;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
double hb_parvnd( int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvnd(%d, ...)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_DOUBLE( pItem ) )
|
|
return pItem->item.asDouble.value;
|
|
else if( HB_IS_INTEGER( pItem ) )
|
|
return ( double ) pItem->item.asInteger.value;
|
|
else if( HB_IS_LONG( pItem ) )
|
|
return ( double ) pItem->item.asLong.value;
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return hb_arrayGetND( pItem, ulArrayIndex );
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_parvni( int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvni(%d, ...)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_INTEGER( pItem ) )
|
|
return pItem->item.asInteger.value;
|
|
else if( HB_IS_LONG( pItem ) )
|
|
return ( int ) pItem->item.asLong.value;
|
|
else if( HB_IS_DOUBLE( pItem ) )
|
|
#ifdef __GNUC__
|
|
return ( int ) ( unsigned int ) pItem->item.asDouble.value;
|
|
#else
|
|
return ( int ) pItem->item.asDouble.value;
|
|
#endif
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return hb_arrayGetNI( pItem, ulArrayIndex );
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
long hb_parvnl( int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvnl(%d, ...)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_LONG( pItem ) )
|
|
return ( long ) pItem->item.asLong.value;
|
|
else if( HB_IS_INTEGER( pItem ) )
|
|
return ( long ) pItem->item.asInteger.value;
|
|
else if( HB_IS_DOUBLE( pItem ) )
|
|
#ifdef __GNUC__
|
|
return ( long ) ( unsigned long ) pItem->item.asDouble.value;
|
|
#else
|
|
return ( long ) pItem->item.asDouble.value;
|
|
#endif
|
|
/* CA-Cl*pper does it */
|
|
else if( HB_IS_DATETIME( pItem ) )
|
|
return ( long ) pItem->item.asDateTime.julian;
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return hb_arrayGetNL( pItem, ulArrayIndex );
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
#ifndef HB_LONG_LONG_OFF
|
|
LONGLONG hb_parvnll( int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvnll(%d, ...)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_LONG( pItem ) )
|
|
return ( LONGLONG ) pItem->item.asLong.value;
|
|
else if( HB_IS_INTEGER( pItem ) )
|
|
return ( LONGLONG ) pItem->item.asInteger.value;
|
|
else if( HB_IS_DOUBLE( pItem ) )
|
|
#ifdef __GNUC__
|
|
return ( LONGLONG ) ( ULONGLONG ) pItem->item.asDouble.value;
|
|
#else
|
|
return ( LONGLONG ) pItem->item.asDouble.value;
|
|
#endif
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return hb_arrayGetNLL( pItem, ulArrayIndex );
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
HB_LONG hb_parvnint( int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvnint(%d, ...)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_LONG( pItem ) )
|
|
return ( HB_LONG ) pItem->item.asLong.value;
|
|
else if( HB_IS_INTEGER( pItem ) )
|
|
return ( HB_LONG ) pItem->item.asInteger.value;
|
|
else if( HB_IS_DOUBLE( pItem ) )
|
|
#ifdef __GNUC__
|
|
return ( HB_LONG ) ( HB_ULONG ) pItem->item.asDouble.value;
|
|
#else
|
|
return ( HB_LONG ) pItem->item.asDouble.value;
|
|
#endif
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return hb_arrayGetNInt( pItem, ulArrayIndex );
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void * hb_parvptr( int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvptr(%d, ...)", iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_POINTER( pItem ) )
|
|
return pItem->item.asPointer.value;
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
return hb_arrayGetPtr( pItem, ulArrayIndex );
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void * hb_parvptrGC( HB_GARBAGE_FUNC_PTR pFunc, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_parvptrGC(%p,%d, ...)", pFunc, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_POINTER( pItem ) )
|
|
{
|
|
if( pItem->item.asPointer.collect &&
|
|
hb_gcFunc( pItem->item.asPointer.value ) == pFunc )
|
|
return pItem->item.asPointer.value;
|
|
}
|
|
else if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
va_list va;
|
|
ULONG ulArrayIndex;
|
|
|
|
va_start( va, iParam );
|
|
ulArrayIndex = va_arg( va, ULONG );
|
|
va_end( va );
|
|
|
|
pItem = hb_arrayGetItemPtr( pItem, ulArrayIndex );
|
|
if( pItem && HB_IS_POINTER( pItem ) &&
|
|
pItem->item.asPointer.collect &&
|
|
hb_gcFunc( pItem->item.asPointer.value ) == pFunc )
|
|
return pItem->item.asPointer.value;
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
#undef hb_ret
|
|
void hb_ret( void )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_ret()"));
|
|
|
|
hb_itemClear( hb_stackReturnItem() );
|
|
}
|
|
|
|
#undef hb_reta
|
|
void hb_reta( ULONG ulLen ) /* undocumented hb_reta() */
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_reta(%lu)", ulLen));
|
|
|
|
hb_arrayNew( hb_stackReturnItem(), ulLen );
|
|
}
|
|
|
|
#undef hb_retc
|
|
void hb_retc( const char * szText )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retc(%s)", szText));
|
|
|
|
hb_itemPutC( hb_stackReturnItem(), szText );
|
|
}
|
|
|
|
#undef hb_retc_null
|
|
void hb_retc_null( void )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retc_null()"));
|
|
|
|
hb_itemPutC( hb_stackReturnItem(), NULL );
|
|
}
|
|
|
|
#undef hb_retc_buffer
|
|
void hb_retc_buffer( char * szText )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retc_buffer(%s)", szText));
|
|
|
|
hb_itemPutCPtr( hb_stackReturnItem(), szText );
|
|
}
|
|
|
|
#undef hb_retc_const
|
|
void hb_retc_const( const char * szText )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retc_const(%s)", szText));
|
|
|
|
hb_itemPutCConst( hb_stackReturnItem(), szText );
|
|
}
|
|
|
|
#undef hb_retclen
|
|
void hb_retclen( const char * szText, ULONG ulLen )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retclen(%s, %lu)", szText, ulLen));
|
|
|
|
hb_itemPutCL( hb_stackReturnItem(), szText, ulLen );
|
|
}
|
|
|
|
#undef hb_retclen_buffer
|
|
void hb_retclen_buffer( char * szText, ULONG ulLen )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retclen_buffer(%s, %lu)", szText, ulLen));
|
|
|
|
hb_itemPutCLPtr( hb_stackReturnItem(), szText, ulLen );
|
|
}
|
|
|
|
/* szDate must have YYYYMMDD format */
|
|
|
|
#undef hb_retds
|
|
void hb_retds( const char * szDate )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retds(%s)", szDate));
|
|
|
|
hb_itemPutDS( hb_stackReturnItem(), szDate );
|
|
}
|
|
|
|
#undef hb_retd
|
|
void hb_retd( int iYear, int iMonth, int iDay )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retd(%04i, %02i, %02i)", iYear, iMonth, iDay));
|
|
|
|
hb_itemPutD( hb_stackReturnItem(), iYear, iMonth, iDay );
|
|
}
|
|
|
|
#undef hb_retdl
|
|
void hb_retdl( long lJulian )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retdl(%ld)", lJulian));
|
|
|
|
hb_itemPutDL( hb_stackReturnItem(), lJulian );
|
|
}
|
|
|
|
#undef hb_rettd
|
|
void hb_rettd( double dTimeStamp )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_rettd(%lf)", dTimeStamp));
|
|
|
|
hb_itemPutTD( hb_stackReturnItem(), dTimeStamp );
|
|
}
|
|
|
|
#undef hb_rettdt
|
|
void hb_rettdt( LONG lJulian, LONG lMilliSec )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_rettdt(%ld, %ld)", lJulian, lMilliSec));
|
|
|
|
hb_itemPutTDT( hb_stackReturnItem(), lJulian, lMilliSec );
|
|
}
|
|
|
|
#undef hb_retl
|
|
void hb_retl( int iLogical )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retl(%d)", iLogical));
|
|
|
|
hb_itemPutL( hb_stackReturnItem(), iLogical ? TRUE : FALSE );
|
|
}
|
|
|
|
#undef hb_retnd
|
|
void hb_retnd( double dNumber )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retnd(%lf)", dNumber));
|
|
|
|
hb_itemPutND( hb_stackReturnItem(), dNumber );
|
|
}
|
|
|
|
#undef hb_retni
|
|
void hb_retni( int iNumber )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retni(%d)", iNumber));
|
|
|
|
hb_itemPutNI( hb_stackReturnItem(), iNumber );
|
|
}
|
|
|
|
#undef hb_retnl
|
|
void hb_retnl( long lNumber )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retnl(%ld)", lNumber));
|
|
|
|
hb_itemPutNL( hb_stackReturnItem(), lNumber );
|
|
}
|
|
|
|
#ifndef HB_LONG_LONG_OFF
|
|
#undef hb_retnll
|
|
void hb_retnll( LONGLONG llNumber )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retnll(%" PFLL "d)", llNumber));
|
|
|
|
hb_itemPutNLL( hb_stackReturnItem(), llNumber );
|
|
}
|
|
#endif
|
|
|
|
#undef hb_retnint
|
|
void hb_retnint( HB_LONG lNumber )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retnl(%" PFHL "d )", lNumber));
|
|
|
|
hb_itemPutNInt( hb_stackReturnItem(), lNumber );
|
|
}
|
|
|
|
#undef hb_retnlen
|
|
void hb_retnlen( double dNumber, int iWidth, int iDec )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retnlen(%lf, %d, %d)", dNumber, iWidth, iDec));
|
|
|
|
hb_itemPutNLen( hb_stackReturnItem(), dNumber, iWidth, iDec );
|
|
}
|
|
|
|
#undef hb_retndlen
|
|
void hb_retndlen( double dNumber, int iWidth, int iDec )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retndlen(%lf, %d, %d)", dNumber, iWidth, iDec));
|
|
|
|
hb_itemPutNDLen( hb_stackReturnItem(), dNumber, iWidth, iDec );
|
|
}
|
|
|
|
#undef hb_retnilen
|
|
void hb_retnilen( int iNumber, int iWidth )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retnilen(%d, %d)", iNumber, iWidth));
|
|
|
|
hb_itemPutNILen( hb_stackReturnItem(), iNumber, iWidth );
|
|
}
|
|
|
|
#undef hb_retnllen
|
|
void hb_retnllen( long lNumber, int iWidth )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retnllen(%ld, %d)", lNumber, iWidth));
|
|
|
|
hb_itemPutNLLen( hb_stackReturnItem(), lNumber, iWidth );
|
|
}
|
|
|
|
#ifndef HB_LONG_LONG_OFF
|
|
#undef hb_retnlllen
|
|
void hb_retnlllen( LONGLONG llNumber, int iWidth )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retnlllen(%" PFLL "d, %d)", llNumber, iWidth));
|
|
|
|
hb_itemPutNLLLen( hb_stackReturnItem(), llNumber, iWidth );
|
|
}
|
|
#endif
|
|
|
|
#undef hb_retnintlen
|
|
void hb_retnintlen( HB_LONG lNumber, int iWidth )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retnintlen(%" PFHL "d, %d)", lNumber, iWidth));
|
|
|
|
hb_itemPutNIntLen( hb_stackReturnItem(), lNumber, iWidth );
|
|
}
|
|
|
|
#undef hb_retptr
|
|
void hb_retptr( void * pointer )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retptr(%p)", pointer));
|
|
|
|
hb_itemPutPtr( hb_stackReturnItem(), pointer );
|
|
}
|
|
|
|
#undef hb_retptrGC
|
|
void hb_retptrGC( void * pointer )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_retptrGC(%p)", pointer));
|
|
|
|
hb_itemPutPtrGC( hb_stackReturnItem(), pointer );
|
|
}
|
|
|
|
|
|
int hb_storc( const char * szText, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storc(%s, %d )", szText, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutC( hb_stackReturnItem(), szText );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutC( hb_itemUnRef( pItem ), szText );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storclen( const char * szText, ULONG ulLen, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storclen(%s, %lu, %d)", szText, ulLen, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutCL( hb_stackReturnItem(), szText, ulLen );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutCL( hb_itemUnRef( pItem ), szText, ulLen );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storclen_buffer( char * szText, ULONG ulLen, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storclen_buffer(%s, %lu, %d)", szText, ulLen, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutCLPtr( hb_stackReturnItem(), szText, ulLen );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutCLPtr( hb_itemUnRef( pItem ), szText, ulLen );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* szDate must have YYYYMMDD format */
|
|
|
|
int hb_stords( const char * szDate, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_stords(%s, %d)", szDate, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutDS( hb_stackReturnItem(), szDate );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutDS( hb_itemUnRef( pItem ), szDate );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_stordl( long lJulian, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_stordl(%ld, %d)", lJulian, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutDL( hb_stackReturnItem(), lJulian );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutDL( hb_itemUnRef( pItem ), lJulian );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_stortd( double dTimeStamp, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_stortd(%lf, %d)", dTimeStamp, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutTD( hb_stackReturnItem(), dTimeStamp );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutTD( hb_itemUnRef( pItem ), dTimeStamp );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_stortdt( LONG lJulian, LONG lMilliSec, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_stortd(%ld, %ld, %d)", lJulian, lMilliSec, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutTDT( hb_stackReturnItem(), lJulian, lMilliSec );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutTDT( hb_itemUnRef( pItem ), lJulian, lMilliSec );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storl( int iLogical, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storl(%d, %d)", iLogical, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutL( hb_stackReturnItem(), iLogical ? TRUE : FALSE );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutL( hb_itemUnRef( pItem ), iLogical ? TRUE : FALSE );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storni( int iValue, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storni(%d, %d)", iValue, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutNI( hb_stackReturnItem(), iValue );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutNI( hb_itemUnRef( pItem ), iValue );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_stornl( long lValue, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_stornl(%ld, %d)", lValue, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutNL( hb_stackReturnItem(), lValue );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutNL( hb_itemUnRef( pItem ), lValue );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
#ifndef HB_LONG_LONG_OFF
|
|
int hb_stornll( LONGLONG llValue, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_stornll(%" PFLL "d, %d)", llValue, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutNLL( hb_stackReturnItem(), llValue );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutNLL( hb_itemUnRef( pItem ), llValue );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
int hb_stornint( HB_LONG lValue, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_stornint(%" PFHL "d, %d)", lValue, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutNInt( hb_stackReturnItem(), lValue );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutNInt( hb_itemUnRef( pItem ), lValue );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_stornd( double dNumber, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_stornd(%lf, %d)", dNumber, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutND( hb_stackReturnItem(), dNumber );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutND( hb_itemUnRef( pItem ), dNumber );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storptr( void * pointer, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storptr(%p, %d)", pointer, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutPtr( hb_stackReturnItem(), pointer );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutPtr( hb_itemUnRef( pItem ), pointer );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storptrGC( void * pointer, int iParam )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storptrGC(%p, %d)", pointer, iParam));
|
|
|
|
if( iParam == -1 )
|
|
{
|
|
hb_itemPutPtrGC( hb_stackReturnItem(), pointer );
|
|
return 1;
|
|
}
|
|
else if( iParam >= 0 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = hb_stackItemFromBase( iParam );
|
|
|
|
if( HB_IS_BYREF( pItem ) )
|
|
{
|
|
hb_itemPutPtrGC( hb_itemUnRef( pItem ), pointer );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* hb_storv*() similar to hb_stor*() but they accepts optional array index
|
|
* just like Cl*pper's _stor*() functions
|
|
*/
|
|
|
|
int hb_storvc( const char * szText, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvc(%s, %d, ...)", szText, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetC( pItem, va_arg( va, ULONG ), szText ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutC( pItem, szText );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storvclen( const char * szText, ULONG ulLen, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvclen(%s, %lu, %d, ...)", szText, ulLen, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetCL( pItem, va_arg( va, ULONG ), szText, ulLen ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutCL( pItem, szText, ulLen );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storvclen_buffer( char * szText, ULONG ulLen, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvclen_buffer(%s, %lu, %d, ...)", szText, ulLen, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetCPtr( pItem, va_arg( va, ULONG ), szText, ulLen ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutCLPtr( pItem, szText, ulLen );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* szDate must have YYYYMMDD format */
|
|
|
|
int hb_storvds( const char * szDate, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvds(%s, %d, ...)", szDate, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetDS( pItem, va_arg( va, ULONG ), szDate ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutDS( pItem, szDate );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storvdl( long lJulian, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvdl(%ld, %d, ...)", lJulian, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetDL( pItem, va_arg( va, ULONG ), lJulian ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutDL( pItem, lJulian );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storvtd( double dTimeStamp, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvtd(%lf, %d, ...)", dTimeStamp, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetTD( pItem, va_arg( va, ULONG ), dTimeStamp ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutTD( pItem, dTimeStamp );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storvtdt( LONG lJulian, LONG lMilliSec, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvtd(%ld, %ld, %d, ...)", lJulian, lMilliSec, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetTDT( pItem, va_arg( va, ULONG ), lJulian, lMilliSec ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutTDT( pItem, lJulian, lMilliSec );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storvl( int iLogical, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvl(%d, %d, ...)", iLogical, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetL( pItem, va_arg( va, ULONG ), iLogical ? TRUE : FALSE ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutL( pItem, iLogical ? TRUE : FALSE );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storvni( int iValue, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvni(%d, %d, ...)", iValue, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetNI( pItem, va_arg( va, ULONG ), iValue ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutNI( pItem, iValue );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storvnl( long lValue, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvnl(%ld, %d, ...)", lValue, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetNL( pItem, va_arg( va, ULONG ), lValue ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutNL( pItem, lValue );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
#ifndef HB_LONG_LONG_OFF
|
|
int hb_storvnll( LONGLONG llValue, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvnll(%" PFLL "d, %d, ...)", llValue, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetNLL( pItem, va_arg( va, ULONG ), llValue ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutNLL( pItem, llValue );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
int hb_storvnint( HB_LONG lValue, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvnint(%" PFHL "d, %d, ...)", lValue, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetNInt( pItem, va_arg( va, ULONG ), lValue ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutNInt( pItem, lValue );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storvnd( double dNumber, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvnd(%lf, %d, ...)", dNumber, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetND( pItem, va_arg( va, ULONG ), dNumber ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutND( pItem, dNumber );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storvptr( void * pointer, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvptr(%p, %d, ...)", pointer, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetPtr( pItem, va_arg( va, ULONG ), pointer ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutPtr( pItem, pointer );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int hb_storvptrGC( void * pointer, int iParam, ... )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_storvptrGC(%p, %d, ...)", pointer, iParam));
|
|
|
|
if( iParam >= -1 && iParam <= hb_pcount() )
|
|
{
|
|
PHB_ITEM pItem = ( iParam == -1 ) ? hb_stackReturnItem() : hb_stackItemFromBase( iParam );
|
|
BOOL bByRef = HB_IS_BYREF( pItem );
|
|
|
|
if( bByRef )
|
|
pItem = hb_itemUnRef( pItem );
|
|
|
|
if( HB_IS_ARRAY( pItem ) )
|
|
{
|
|
int iRetVal;
|
|
va_list va;
|
|
va_start( va, iParam );
|
|
iRetVal = hb_arraySetPtrGC( pItem, va_arg( va, ULONG ), pointer ) ? 1 : 0;
|
|
va_end( va );
|
|
return iRetVal;
|
|
}
|
|
else if( bByRef || iParam == -1 )
|
|
{
|
|
hb_itemPutPtrGC( pItem, pointer );
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
#undef hb_pcount
|
|
int hb_pcount( void )
|
|
{
|
|
HB_STACK_TLS_PRELOAD
|
|
|
|
HB_TRACE(HB_TR_DEBUG, ("hb_pcount()"));
|
|
|
|
return ( int ) ( hb_stackBaseItem() )->item.asSymbol.paramcnt;
|
|
}
|