2010-02-12 21:01 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* include/hbdefs.h
* HB_BYTE made a synonym for HB_UCHAR.
HB_BYTE is only there for convenience, HB_UCHAR is recommended
for unsigned byte streams.
* HB_U8 now based on HB_UCHAR.
! Fixed UINT64/INT64 left defined in some cases.
* contrib/hbwin/hbwin.h
* contrib/hbwin/hbwin.ch
* contrib/hbwin/tests/testdll.prg
* contrib/hbwin/win_dll.c
* contrib/hbwin/legacycd.c
+ Added LONGLONG C types.
+ Added support for user-specifiable parameter types.
This works now in low-level C dll call function and also
on high level in HB_DLLCALL().
+ Added support for LONGLONG/int64 integers.
+ Added support for raw strings. (no UNICODE or codepage
conversion).
! Fixed typo in iRetTypeRaw assigment.
+ Added one new test for param type spec test. (pretty bare)
! Fixed WAPI_GETPROCADDRESS() to GETPROCADDRESS(). Latter
has some extra features so we still need it.
* GETPROCADDRESS() moved back to non-compatibility.
; Please review the code. There are some integer conversion
which might not be proper (& 0xFFFF).
* utils/hbmk2/hbmk2.prg
! Typo in recently added help text.
* contrib/Makefile
- contrib/hbbmcdx
+ contrib/rddbmcdx
* contrib/rddbmcdx/bmdbfcdx.c
* contrib/rddbmcdx/Makefile
* Renamed hbbmcdx to rddbmcdx.
* More cleanup to RDD code. (sync with rddcdx, deleted
unnecessary lines)
- Deleted "turbo" functionality. BM_TURBO() is now a dummy.
AFAIR this isn't safe, and even if it is it should be
implemented differently, not as a static variable.
This commit is contained in:
@@ -17,6 +17,49 @@
|
||||
past entries belonging to author(s): Viktor Szakats.
|
||||
*/
|
||||
|
||||
2010-02-12 21:01 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* include/hbdefs.h
|
||||
* HB_BYTE made a synonym for HB_UCHAR.
|
||||
HB_BYTE is only there for convenience, HB_UCHAR is recommended
|
||||
for unsigned byte streams.
|
||||
* HB_U8 now based on HB_UCHAR.
|
||||
! Fixed UINT64/INT64 left defined in some cases.
|
||||
|
||||
* contrib/hbwin/hbwin.h
|
||||
* contrib/hbwin/hbwin.ch
|
||||
* contrib/hbwin/tests/testdll.prg
|
||||
* contrib/hbwin/win_dll.c
|
||||
* contrib/hbwin/legacycd.c
|
||||
+ Added LONGLONG C types.
|
||||
+ Added support for user-specifiable parameter types.
|
||||
This works now in low-level C dll call function and also
|
||||
on high level in HB_DLLCALL().
|
||||
+ Added support for LONGLONG/int64 integers.
|
||||
+ Added support for raw strings. (no UNICODE or codepage
|
||||
conversion).
|
||||
! Fixed typo in iRetTypeRaw assigment.
|
||||
+ Added one new test for param type spec test. (pretty bare)
|
||||
! Fixed WAPI_GETPROCADDRESS() to GETPROCADDRESS(). Latter
|
||||
has some extra features so we still need it.
|
||||
* GETPROCADDRESS() moved back to non-compatibility.
|
||||
; Please review the code. There are some integer conversion
|
||||
which might not be proper (& 0xFFFF).
|
||||
|
||||
* utils/hbmk2/hbmk2.prg
|
||||
! Typo in recently added help text.
|
||||
|
||||
* contrib/Makefile
|
||||
- contrib/hbbmcdx
|
||||
+ contrib/rddbmcdx
|
||||
* contrib/rddbmcdx/bmdbfcdx.c
|
||||
* contrib/rddbmcdx/Makefile
|
||||
* Renamed hbbmcdx to rddbmcdx.
|
||||
* More cleanup to RDD code. (sync with rddcdx, deleted
|
||||
unnecessary lines)
|
||||
- Deleted "turbo" functionality. BM_TURBO() is now a dummy.
|
||||
AFAIR this isn't safe, and even if it is it should be
|
||||
implemented differently, not as a static variable.
|
||||
|
||||
2010-02-12 12:49 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* contrib/hbwin/Makefile
|
||||
* contrib/hbwin/win_dll.c
|
||||
|
||||
@@ -7,7 +7,6 @@ ROOT := ../
|
||||
# contribs _without_ external dependencies
|
||||
DIRS := \
|
||||
gtwvg \
|
||||
hbbmcdx \
|
||||
hbbtree \
|
||||
hbclipsm \
|
||||
hbct \
|
||||
@@ -24,6 +23,7 @@ DIRS := \
|
||||
hbtpathy \
|
||||
hbwin \
|
||||
hbziparc \
|
||||
rddbmcdx \
|
||||
xhb \
|
||||
xpp \
|
||||
|
||||
|
||||
@@ -78,10 +78,14 @@
|
||||
#define HB_WIN_DLL_CTYPE_LONG_UNSIGNED 0x0014
|
||||
#define HB_WIN_DLL_CTYPE_LONG_PTR 0x0104
|
||||
#define HB_WIN_DLL_CTYPE_LONG_UNSIGNED_PTR 0x0114
|
||||
#define HB_WIN_DLL_CTYPE_FLOAT 0x0005
|
||||
#define HB_WIN_DLL_CTYPE_FLOAT_PTR 0x0105
|
||||
#define HB_WIN_DLL_CTYPE_DOUBLE 0x0006
|
||||
#define HB_WIN_DLL_CTYPE_DOUBLE_PTR 0x0106
|
||||
#define HB_WIN_DLL_CTYPE_LLONG 0x0005
|
||||
#define HB_WIN_DLL_CTYPE_LLONG_UNSIGNED 0x0015
|
||||
#define HB_WIN_DLL_CTYPE_LLONG_PTR 0x0105
|
||||
#define HB_WIN_DLL_CTYPE_LLONG_UNSIGNED_PTR 0x0115
|
||||
#define HB_WIN_DLL_CTYPE_FLOAT 0x0006
|
||||
#define HB_WIN_DLL_CTYPE_FLOAT_PTR 0x0106
|
||||
#define HB_WIN_DLL_CTYPE_DOUBLE 0x0007
|
||||
#define HB_WIN_DLL_CTYPE_DOUBLE_PTR 0x0107
|
||||
#define HB_WIN_DLL_CTYPE_BOOL 0x0008
|
||||
#define HB_WIN_DLL_CTYPE_BOOL_PTR 0x0108
|
||||
#define HB_WIN_DLL_CTYPE_VOID 0x0009
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
HB_EXTERN_BEGIN
|
||||
|
||||
extern HB_EXPORT int hbwin_bitmapType( const void * pImgBuf, HB_SIZE size );
|
||||
extern HB_EXPORT void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFunction, int iParams, int iFirst, int * iParTypes );
|
||||
extern HB_EXPORT void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFunction, int iParams, int iFirst, int * piArgType );
|
||||
|
||||
extern FARPROC hbwin_getprocaddress( HMODULE hDLL, int iParam, HB_BOOL * pbUNICODE );
|
||||
|
||||
|
||||
@@ -97,18 +97,6 @@ HB_FUNC( FREELIBRARY )
|
||||
hb_retl( HB_FALSE );
|
||||
}
|
||||
|
||||
HB_FUNC( GETPROCADDRESS )
|
||||
{
|
||||
HMODULE hDLL;
|
||||
|
||||
if( HB_ISNUM( 1 ) )
|
||||
hDLL = ( HMODULE ) ( HB_PTRDIFF ) hb_parnint( 1 );
|
||||
else
|
||||
hDLL = ( HMODULE ) hb_parptr( 1 );
|
||||
|
||||
hb_retptr( hDLL ? ( void * ) hbwin_getprocaddress( hDLL, 2, NULL ) : NULL );
|
||||
}
|
||||
|
||||
#ifndef HB_WIN_NO_LEGACY
|
||||
#define HB_WIN_NO_LEGACY
|
||||
#endif
|
||||
|
||||
@@ -75,8 +75,8 @@ PROCEDURE Main()
|
||||
|
||||
IF hb_FileExists( "libcurl.dll" )
|
||||
hDLL := wapi_LoadLibrary( "libcurl.dll" )
|
||||
? wapi_GetProcAddress( hDLL, "curl_version" )
|
||||
? win_dllCall( { NIL, HB_WIN_DLL_CTYPE_CHAR_PTR }, wapi_GetProcAddress( hDLL, "curl_version" ) )
|
||||
? GetProcAddress( hDLL, "curl_version" )
|
||||
? win_dllCall( { NIL, HB_WIN_DLL_CTYPE_CHAR_PTR }, GetProcAddress( hDLL, "curl_version" ) )
|
||||
wapi_FreeLibrary( hDLL )
|
||||
ENDIF
|
||||
|
||||
@@ -97,12 +97,15 @@ PROCEDURE Main()
|
||||
hDLL := wapi_LoadLibrary( "shell32.dll" )
|
||||
? "ValType( hDLL ): ", ValType( hDLL )
|
||||
cData := Space( MAX_PATH )
|
||||
? "WIN_DLLCALL (BOOL retval): ", win_dllCall( { NIL, HB_WIN_DLL_CTYPE_BOOL }, wapi_GetProcAddress( hDLL, "SHGetSpecialFolderPath" ), 0, @cData, CSIDL_APPDATA, 0 )
|
||||
? "WIN_DLLCALL (BOOL retval): ", win_dllCall( { NIL, HB_WIN_DLL_CTYPE_BOOL }, GetProcAddress( hDLL, "SHGetSpecialFolderPath" ), 0, @cData, CSIDL_APPDATA, 0 )
|
||||
? "@cData: ", cData
|
||||
? "WIN_DLLCALL: ", win_dllCall( wapi_GetProcAddress( hDLL, "SHGetFolderPath" ), 0, CSIDL_ADMINTOOLS, 0, 0, cData ) // WRONG
|
||||
? "WIN_DLLCALL: ", win_dllCall( GetProcAddress( hDLL, "SHGetFolderPath" ), 0, CSIDL_ADMINTOOLS, 0, 0, cData ) // WRONG
|
||||
? "cData:", cData
|
||||
cData := Space( MAX_PATH )
|
||||
? "WIN_DLLCALL: ", win_dllCall( wapi_GetProcAddress( hDLL, "SHGetFolderPath" ), 0, CSIDL_ADMINTOOLS, 0, 0, @cData )
|
||||
? "WIN_DLLCALL (PARAMS): ", win_dllCall( { NIL, NIL, NIL, HB_WIN_DLL_CTYPE_BOOL }, GetProcAddress( hDLL, "SHGetSpecialFolderPath" ), 0, @cData, CSIDL_APPDATA, 0 )
|
||||
? "@cData: ", cData
|
||||
cData := Space( MAX_PATH )
|
||||
? "WIN_DLLCALL: ", win_dllCall( GetProcAddress( hDLL, "SHGetFolderPath" ), 0, CSIDL_ADMINTOOLS, 0, 0, @cData )
|
||||
? "@cData: ", cData
|
||||
wapi_FreeLibrary( hDLL )
|
||||
|
||||
|
||||
@@ -7,8 +7,6 @@
|
||||
* Windows DLL handling function
|
||||
*
|
||||
* Copyright 2009-2010 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* Based on some original code by:
|
||||
* Copyright 2002 Vic McClung <vicmcclung@vicmcclung.com>
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -71,6 +69,35 @@
|
||||
|
||||
#define _DLLEXEC_MAXPARAM 15
|
||||
|
||||
static int hb_hbtoctype( int iHarbourType )
|
||||
{
|
||||
switch( iHarbourType )
|
||||
{
|
||||
case HB_IT_NIL:
|
||||
return HB_WIN_DLL_CTYPE_VOID;
|
||||
|
||||
case HB_IT_LOGICAL:
|
||||
return HB_WIN_DLL_CTYPE_BOOL;
|
||||
|
||||
case HB_IT_INTEGER:
|
||||
case HB_IT_LONG:
|
||||
case HB_IT_DATE:
|
||||
return HB_WIN_DLL_CTYPE_LONG;
|
||||
|
||||
case HB_IT_DOUBLE:
|
||||
return HB_WIN_DLL_CTYPE_DOUBLE;
|
||||
|
||||
case HB_IT_STRING:
|
||||
case HB_IT_MEMO:
|
||||
return HB_WIN_DLL_CTYPE_CHAR_PTR;
|
||||
|
||||
case HB_IT_POINTER:
|
||||
return HB_WIN_DLL_CTYPE_VOID_PTR;
|
||||
}
|
||||
|
||||
return HB_WIN_DLL_CTYPE_DEFAULT;
|
||||
}
|
||||
|
||||
#if defined( HB_ARCH_64BIT )
|
||||
|
||||
typedef struct
|
||||
@@ -84,6 +111,8 @@ typedef struct
|
||||
{
|
||||
HB_BOOL bUNICODE;
|
||||
int iFirst;
|
||||
int * piArgTypeReq;
|
||||
int * piArgType;
|
||||
HB_WINARG * pArg;
|
||||
} HB_WINCALL, * PHB_WINCALL;
|
||||
|
||||
@@ -94,27 +123,51 @@ static HB_U64 hb_u64par( PHB_WINCALL wcall, int iParam )
|
||||
|
||||
if( pParam )
|
||||
{
|
||||
switch( HB_ITEM_TYPE( pParam ) )
|
||||
switch( wcall->piArgType[ iParam - 1 ] )
|
||||
{
|
||||
case HB_IT_LOGICAL:
|
||||
case HB_WIN_DLL_CTYPE_BOOL:
|
||||
wcall->pArg[ iParam - 1 ].nValue = hb_itemGetL( pParam );
|
||||
r = wcall->pArg[ iParam - 1 ].bByRef ? ( HB_PTRUINT ) &wcall->pArg[ iParam - 1 ].nValue : wcall->pArg[ iParam - 1 ].nValue;
|
||||
break;
|
||||
|
||||
case HB_IT_INTEGER:
|
||||
case HB_IT_LONG:
|
||||
case HB_IT_DATE:
|
||||
case HB_WIN_DLL_CTYPE_CHAR:
|
||||
case HB_WIN_DLL_CTYPE_CHAR_UNSIGNED:
|
||||
wcall->pArg[ iParam - 1 ].nValue = hb_itemGetNI( pParam ) & 0xFF;
|
||||
r = wcall->pArg[ iParam - 1 ].bByRef ? ( HB_PTRUINT ) &wcall->pArg[ iParam - 1 ].nValue : wcall->pArg[ iParam - 1 ].nValue;
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_SHORT:
|
||||
case HB_WIN_DLL_CTYPE_SHORT_UNSIGNED:
|
||||
wcall->pArg[ iParam - 1 ].nValue = hb_itemGetNI( pParam ) & 0xFFFF;
|
||||
r = wcall->pArg[ iParam - 1 ].bByRef ? ( HB_PTRUINT ) &wcall->pArg[ iParam - 1 ].nValue : wcall->pArg[ iParam - 1 ].nValue;
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_INT:
|
||||
case HB_WIN_DLL_CTYPE_INT_UNSIGNED:
|
||||
case HB_WIN_DLL_CTYPE_LONG:
|
||||
case HB_WIN_DLL_CTYPE_LONG_UNSIGNED:
|
||||
wcall->pArg[ iParam - 1 ].nValue = hb_itemGetNL( pParam );
|
||||
r = wcall->pArg[ iParam - 1 ].bByRef ? ( HB_PTRUINT ) &wcall->pArg[ iParam - 1 ].nValue : wcall->pArg[ iParam - 1 ].nValue;
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_LLONG:
|
||||
case HB_WIN_DLL_CTYPE_LLONG_UNSIGNED:
|
||||
wcall->pArg[ iParam - 1 ].nValue = hb_itemGetNInt( pParam );
|
||||
r = wcall->pArg[ iParam - 1 ].bByRef ? ( HB_PTRUINT ) &wcall->pArg[ iParam - 1 ].nValue : wcall->pArg[ iParam - 1 ].nValue;
|
||||
break;
|
||||
|
||||
case HB_IT_DOUBLE:
|
||||
case HB_WIN_DLL_CTYPE_FLOAT:
|
||||
case HB_WIN_DLL_CTYPE_DOUBLE:
|
||||
HB_PUT_LE_DOUBLE( ( BYTE * ) &wcall->pArg[ iParam - 1 ].nValue, hb_itemGetND( pParam ) );
|
||||
r = wcall->pArg[ iParam - 1 ].bByRef ? ( HB_PTRUINT ) &wcall->pArg[ iParam - 1 ].nValue : wcall->pArg[ iParam - 1 ].nValue;
|
||||
break;
|
||||
|
||||
case HB_IT_STRING:
|
||||
case HB_IT_MEMO:
|
||||
case HB_WIN_DLL_CTYPE_CHAR_UNSIGNED_PTR:
|
||||
r = ( HB_PTRUINT ) hb_strunshare( &wcall->pArg[ iParam - 1 ].hString, hb_itemGetCPtr( pParam ), hb_itemGetCLen( pParam ) );
|
||||
wcall->pArg[ iParam - 1 ].nValue = r;
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_CHAR_PTR:
|
||||
if( wcall->bUNICODE )
|
||||
r = ( HB_PTRUINT ) hb_itemGetStrU16( pParam, HB_CDP_ENDIAN_NATIVE, &wcall->pArg[ iParam - 1 ].hString, NULL );
|
||||
else
|
||||
@@ -122,10 +175,31 @@ static HB_U64 hb_u64par( PHB_WINCALL wcall, int iParam )
|
||||
wcall->pArg[ iParam - 1 ].nValue = r;
|
||||
break;
|
||||
|
||||
case HB_IT_POINTER:
|
||||
case HB_WIN_DLL_CTYPE_SHORT_PTR:
|
||||
case HB_WIN_DLL_CTYPE_SHORT_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_INT_PTR:
|
||||
case HB_WIN_DLL_CTYPE_INT_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LONG_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LONG_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LLONG_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LLONG_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_FLOAT_PTR:
|
||||
case HB_WIN_DLL_CTYPE_DOUBLE_PTR:
|
||||
case HB_WIN_DLL_CTYPE_BOOL_PTR:
|
||||
case HB_WIN_DLL_CTYPE_VOID_PTR:
|
||||
case HB_WIN_DLL_CTYPE_STRUCTURE_PTR:
|
||||
wcall->pArg[ iParam - 1 ].nValue = ( HB_PTRUINT ) hb_itemGetPtr( pParam );
|
||||
r = wcall->pArg[ iParam - 1 ].bByRef ? ( HB_PTRUINT ) &wcall->pArg[ iParam - 1 ].nValue : wcall->pArg[ iParam - 1 ].nValue;
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_STRUCTURE:
|
||||
/* TODO */
|
||||
r = wcall->pArg[ iParam - 1 ].nValue = 0;
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_VOID:
|
||||
default:
|
||||
r = wcall->pArg[ iParam - 1 ].nValue = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,34 +247,63 @@ typedef struct
|
||||
{
|
||||
HB_BOOL bUNICODE;
|
||||
int iFirst;
|
||||
int * piArgTypeReq;
|
||||
int * piArgType;
|
||||
HB_WINARG * pArg;
|
||||
} HB_WINCALL, * PHB_WINCALL;
|
||||
|
||||
static void hb_u32par( PHB_WINCALL wcall, int iParam, HB_U32 * r1, HB_U32 * r2, HB_BOOL * b64 )
|
||||
static void hb_u32par( PHB_ITEM pParam, PHB_WINCALL wcall, int iParam, HB_U32 * r1, HB_U32 * r2, HB_BOOL * b64 )
|
||||
{
|
||||
PHB_ITEM pParam = hb_param( wcall->iFirst + iParam, HB_IT_ANY );
|
||||
|
||||
*b64 = HB_FALSE;
|
||||
|
||||
if( pParam )
|
||||
{
|
||||
switch( HB_ITEM_TYPE( pParam ) )
|
||||
switch( wcall->piArgType[ iParam - 1 ] )
|
||||
{
|
||||
/* TODO: Add 64-bit integer support */
|
||||
|
||||
case HB_IT_LOGICAL:
|
||||
case HB_WIN_DLL_CTYPE_BOOL:
|
||||
wcall->pArg[ iParam - 1 ].value.t.n32 = hb_itemGetL( pParam );
|
||||
*r1 = wcall->pArg[ iParam - 1 ].bByRef ? ( HB_U32 ) &wcall->pArg[ iParam - 1 ].value.t.n32 : wcall->pArg[ iParam - 1 ].value.t.n32;
|
||||
break;
|
||||
|
||||
case HB_IT_INTEGER:
|
||||
case HB_IT_LONG:
|
||||
case HB_IT_DATE:
|
||||
case HB_WIN_DLL_CTYPE_CHAR:
|
||||
case HB_WIN_DLL_CTYPE_CHAR_UNSIGNED:
|
||||
wcall->pArg[ iParam - 1 ].value.t.n32 = hb_itemGetNI( pParam ) & 0xFF;
|
||||
*r1 = wcall->pArg[ iParam - 1 ].bByRef ? ( HB_U32 ) &wcall->pArg[ iParam - 1 ].value.t.n32 : wcall->pArg[ iParam - 1 ].value.t.n32;
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_SHORT:
|
||||
case HB_WIN_DLL_CTYPE_SHORT_UNSIGNED:
|
||||
wcall->pArg[ iParam - 1 ].value.t.n32 = hb_itemGetNI( pParam ) & 0xFFFF;
|
||||
*r1 = wcall->pArg[ iParam - 1 ].bByRef ? ( HB_U32 ) &wcall->pArg[ iParam - 1 ].value.t.n32 : wcall->pArg[ iParam - 1 ].value.t.n32;
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_INT:
|
||||
case HB_WIN_DLL_CTYPE_INT_UNSIGNED:
|
||||
case HB_WIN_DLL_CTYPE_LONG:
|
||||
case HB_WIN_DLL_CTYPE_LONG_UNSIGNED:
|
||||
wcall->pArg[ iParam - 1 ].value.t.n32 = hb_itemGetNL( pParam );
|
||||
*r1 = wcall->pArg[ iParam - 1 ].bByRef ? ( HB_U32 ) &wcall->pArg[ iParam - 1 ].value.t.n32 : wcall->pArg[ iParam - 1 ].value.t.n32;
|
||||
break;
|
||||
|
||||
case HB_IT_DOUBLE:
|
||||
case HB_WIN_DLL_CTYPE_LLONG:
|
||||
case HB_WIN_DLL_CTYPE_LLONG_UNSIGNED:
|
||||
wcall->pArg[ iParam - 1 ].value.t.n32 = hb_itemGetNL( pParam );
|
||||
if( wcall->pArg[ iParam - 1 ].bByRef )
|
||||
*r1 = ( HB_U32 ) &wcall->pArg[ iParam - 1 ].value.t.n64;
|
||||
else
|
||||
{
|
||||
*r1 = wcall->pArg[ iParam - 1 ].value.t.n64 & 0xFFFFFFFF;
|
||||
*r2 = ( wcall->pArg[ iParam - 1 ].value.t.n64 >> 32 );
|
||||
*b64 = HB_TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_FLOAT:
|
||||
wcall->pArg[ iParam - 1 ].value.t.nFL = ( float ) hb_itemGetND( pParam );
|
||||
*r1 = wcall->pArg[ iParam - 1 ].bByRef ? ( HB_U32 ) &wcall->pArg[ iParam - 1 ].value.t.nFL : wcall->pArg[ iParam - 1 ].value.t.n32;
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_DOUBLE:
|
||||
wcall->pArg[ iParam - 1 ].value.t.nDB = hb_itemGetND( pParam );
|
||||
if( wcall->pArg[ iParam - 1 ].bByRef )
|
||||
*r1 = ( HB_U32 ) &wcall->pArg[ iParam - 1 ].value.t.nDB;
|
||||
@@ -212,8 +315,12 @@ static void hb_u32par( PHB_WINCALL wcall, int iParam, HB_U32 * r1, HB_U32 * r2,
|
||||
}
|
||||
break;
|
||||
|
||||
case HB_IT_STRING:
|
||||
case HB_IT_MEMO:
|
||||
case HB_WIN_DLL_CTYPE_CHAR_UNSIGNED_PTR:
|
||||
*r1 = ( HB_U32 ) hb_strunshare( &wcall->pArg[ iParam - 1 ].hString, hb_itemGetCPtr( pParam ), hb_itemGetCLen( pParam ) );
|
||||
wcall->pArg[ iParam - 1 ].value.t.n32 = *r1;
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_CHAR_PTR:
|
||||
if( wcall->bUNICODE )
|
||||
*r1 = ( HB_U32 ) hb_itemGetStrU16( pParam, HB_CDP_ENDIAN_NATIVE, &wcall->pArg[ iParam - 1 ].hString, NULL );
|
||||
else
|
||||
@@ -221,10 +328,31 @@ static void hb_u32par( PHB_WINCALL wcall, int iParam, HB_U32 * r1, HB_U32 * r2,
|
||||
wcall->pArg[ iParam - 1 ].value.t.n32 = *r1;
|
||||
break;
|
||||
|
||||
case HB_IT_POINTER:
|
||||
case HB_WIN_DLL_CTYPE_SHORT_PTR:
|
||||
case HB_WIN_DLL_CTYPE_SHORT_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_INT_PTR:
|
||||
case HB_WIN_DLL_CTYPE_INT_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LONG_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LONG_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LLONG_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LLONG_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_FLOAT_PTR:
|
||||
case HB_WIN_DLL_CTYPE_DOUBLE_PTR:
|
||||
case HB_WIN_DLL_CTYPE_BOOL_PTR:
|
||||
case HB_WIN_DLL_CTYPE_VOID_PTR:
|
||||
case HB_WIN_DLL_CTYPE_STRUCTURE_PTR:
|
||||
wcall->pArg[ iParam - 1 ].value.t.n32 = ( HB_U32 ) hb_itemGetPtr( pParam );
|
||||
*r1 = wcall->pArg[ iParam - 1 ].bByRef ? ( HB_U32 ) &wcall->pArg[ iParam - 1 ].value.t.n32 : wcall->pArg[ iParam - 1 ].value.t.n32;
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_STRUCTURE:
|
||||
/* TODO */
|
||||
*r1 = wcall->pArg[ iParam - 1 ].value.t.n32 = 0;
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_VOID:
|
||||
default:
|
||||
*r1 = wcall->pArg[ iParam - 1 ].value.t.n32 = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -480,12 +608,10 @@ typedef float ( _cdecl * WIN32_CFLP30 )( HB_U32, HB_U32, HB_U32, HB_U32, HB_U
|
||||
|
||||
#endif
|
||||
|
||||
void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFunction, int iParams, int iFirst, int * iParTypes )
|
||||
void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFunction, int iParams, int iFirst, int * piArgTypeReq )
|
||||
{
|
||||
int tmp;
|
||||
|
||||
HB_SYMBOL_UNUSED( iParTypes );
|
||||
|
||||
if( ! lpFunction )
|
||||
return;
|
||||
|
||||
@@ -496,7 +622,8 @@ void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFun
|
||||
HB_SYMBOL_UNUSED( iCallConv );
|
||||
|
||||
wcall.bUNICODE = bUNICODE;
|
||||
wcall.iFirst = iFirst - 1;
|
||||
wcall.iFirst = iFirst - 1;
|
||||
wcall.piArgTypeReq = piArgTypeReq;
|
||||
|
||||
iParams -= wcall.iFirst;
|
||||
|
||||
@@ -507,13 +634,26 @@ void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFun
|
||||
if( iParams )
|
||||
{
|
||||
wcall.pArg = ( HB_WINARG * ) hb_xgrab( iParams * sizeof( HB_WINARG ) );
|
||||
wcall.piArgType = ( int * ) hb_xgrab( iParams * sizeof( int ) );
|
||||
memset( wcall.pArg, 0, iParams * sizeof( HB_WINARG ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
wcall.pArg = NULL;
|
||||
wcall.piArgType = NULL;
|
||||
}
|
||||
|
||||
for( tmp = 0; tmp < iParams; ++tmp )
|
||||
{
|
||||
PHB_ITEM pParam = hb_param( iFirst + tmp, HB_IT_ANY );
|
||||
|
||||
wcall.piArgType[ tmp ] = wcall.piArgTypeReq ? wcall.piArgTypeReq[ tmp ] : HB_WIN_DLL_CTYPE_DEFAULT;
|
||||
|
||||
if( wcall.piArgType[ tmp ] == HB_WIN_DLL_CTYPE_DEFAULT )
|
||||
wcall.piArgType[ tmp ] = hb_hbtoctype( HB_ITEM_TYPE( pParam ) );
|
||||
|
||||
wcall.pArg[ tmp ].bByRef = HB_ISBYREF( iFirst + tmp );
|
||||
}
|
||||
|
||||
switch( iParams )
|
||||
{
|
||||
@@ -559,11 +699,16 @@ void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFun
|
||||
|
||||
case HB_WIN_DLL_CTYPE_INT_UNSIGNED:
|
||||
case HB_WIN_DLL_CTYPE_LONG_UNSIGNED:
|
||||
case HB_WIN_DLL_CTYPE_LLONG:
|
||||
case HB_WIN_DLL_CTYPE_LLONG_UNSIGNED:
|
||||
hb_retnint( nRetVal );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_CHAR_PTR:
|
||||
case HB_WIN_DLL_CTYPE_CHAR_UNSIGNED_PTR:
|
||||
hb_retc( ( const char * ) nRetVal );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_CHAR_PTR:
|
||||
if( bUNICODE )
|
||||
hb_retstr_u16( HB_CDP_ENDIAN_NATIVE, ( const HB_WCHAR * ) nRetVal );
|
||||
else
|
||||
@@ -577,6 +722,7 @@ void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFun
|
||||
case HB_WIN_DLL_CTYPE_LONG_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LONG_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_VOID_PTR:
|
||||
case HB_WIN_DLL_CTYPE_BOOL_PTR:
|
||||
case HB_WIN_DLL_CTYPE_FLOAT_PTR:
|
||||
case HB_WIN_DLL_CTYPE_DOUBLE_PTR:
|
||||
hb_retptr( ( void * ) nRetVal );
|
||||
@@ -588,41 +734,73 @@ void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFun
|
||||
break;
|
||||
|
||||
default:
|
||||
hb_retnl( ( long ) nRetVal );
|
||||
hb_retnint( nRetVal );
|
||||
}
|
||||
|
||||
for( tmp = 0; tmp < iParams; ++tmp )
|
||||
{
|
||||
if( wcall.pArg[ tmp ].bByRef )
|
||||
{
|
||||
switch( HB_ITEM_TYPE( hb_param( iFirst + tmp, HB_IT_ANY ) ) )
|
||||
switch( wcall.piArgType[ tmp ] )
|
||||
{
|
||||
case HB_IT_LOGICAL:
|
||||
case HB_WIN_DLL_CTYPE_VOID:
|
||||
hb_stor( iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_BOOL:
|
||||
hb_storl( wcall.pArg[ tmp ].nValue != 0, iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_IT_NIL:
|
||||
case HB_IT_INTEGER:
|
||||
case HB_IT_LONG:
|
||||
case HB_IT_DATE:
|
||||
case HB_WIN_DLL_CTYPE_CHAR:
|
||||
case HB_WIN_DLL_CTYPE_CHAR_UNSIGNED:
|
||||
case HB_WIN_DLL_CTYPE_SHORT:
|
||||
case HB_WIN_DLL_CTYPE_SHORT_UNSIGNED:
|
||||
case HB_WIN_DLL_CTYPE_INT:
|
||||
hb_storni( ( int ) wcall.pArg[ tmp ].nValue, iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_LONG:
|
||||
hb_stornl( ( long ) wcall.pArg[ tmp ].nValue, iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_INT_UNSIGNED:
|
||||
case HB_WIN_DLL_CTYPE_LONG_UNSIGNED:
|
||||
case HB_WIN_DLL_CTYPE_LLONG:
|
||||
case HB_WIN_DLL_CTYPE_LLONG_UNSIGNED:
|
||||
hb_stornint( wcall.pArg[ tmp ].nValue, iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_IT_DOUBLE:
|
||||
hb_stornd( HB_GET_LE_DOUBLE( ( HB_BYTE * ) &wcall.pArg[ tmp ].nValue ), iFirst + tmp );
|
||||
case HB_WIN_DLL_CTYPE_CHAR_UNSIGNED_PTR:
|
||||
hb_storclen( ( const char * ) wcall.pArg[ tmp ].nValue, hb_parclen( iFirst + tmp ), iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_IT_STRING:
|
||||
case HB_IT_MEMO:
|
||||
case HB_WIN_DLL_CTYPE_CHAR_PTR:
|
||||
if( bUNICODE )
|
||||
hb_storstrlen_u16( HB_CDP_ENDIAN_NATIVE, ( const HB_WCHAR * ) wcall.pArg[ tmp ].nValue, hb_parclen( iFirst + tmp ), iFirst + tmp );
|
||||
else
|
||||
hb_storstrlen( hb_setGetOSCP(), ( const char * ) wcall.pArg[ tmp ].nValue, hb_parclen( iFirst + tmp ), iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_IT_POINTER:
|
||||
case HB_WIN_DLL_CTYPE_INT_PTR:
|
||||
case HB_WIN_DLL_CTYPE_SHORT_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_INT_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_STRUCTURE_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LONG_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LONG_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_VOID_PTR:
|
||||
case HB_WIN_DLL_CTYPE_BOOL_PTR:
|
||||
case HB_WIN_DLL_CTYPE_FLOAT_PTR:
|
||||
case HB_WIN_DLL_CTYPE_DOUBLE_PTR:
|
||||
hb_storptr( ( void * ) wcall.pArg[ tmp ].nValue, iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_FLOAT:
|
||||
case HB_WIN_DLL_CTYPE_DOUBLE:
|
||||
hb_stornd( HB_GET_LE_DOUBLE( ( HB_BYTE * ) &wcall.pArg[ tmp ].nValue ), iFirst + tmp );
|
||||
break;
|
||||
|
||||
default:
|
||||
hb_stornint( wcall.pArg[ tmp ].nValue, iFirst + tmp );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -632,6 +810,9 @@ void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFun
|
||||
|
||||
if( wcall.pArg )
|
||||
hb_xfree( wcall.pArg );
|
||||
|
||||
if( wcall.piArgType )
|
||||
hb_xfree( wcall.piArgType );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE( EG_ARG, 2010, "A maximum of 15 parameters is supported", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
|
||||
@@ -641,7 +822,8 @@ void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFun
|
||||
HB_WINCALL wcall;
|
||||
|
||||
wcall.bUNICODE = bUNICODE;
|
||||
wcall.iFirst = iFirst - 1;
|
||||
wcall.iFirst = iFirst - 1;
|
||||
wcall.piArgTypeReq = piArgTypeReq;
|
||||
|
||||
iParams -= wcall.iFirst;
|
||||
|
||||
@@ -657,7 +839,7 @@ void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFun
|
||||
|
||||
if( iRetType == HB_WIN_DLL_CTYPE_DOUBLE )
|
||||
iRetTypeRaw = _RETTYPERAW_DOUBLE;
|
||||
if( iRetType == HB_WIN_DLL_CTYPE_FLOAT )
|
||||
else if( iRetType == HB_WIN_DLL_CTYPE_FLOAT )
|
||||
iRetTypeRaw = _RETTYPERAW_FLOAT;
|
||||
else
|
||||
iRetTypeRaw = _RETTYPERAW_INT32;
|
||||
@@ -665,22 +847,33 @@ void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFun
|
||||
if( iParams )
|
||||
{
|
||||
wcall.pArg = ( HB_WINARG * ) hb_xgrab( iParams * sizeof( HB_WINARG ) );
|
||||
wcall.piArgType = ( int * ) hb_xgrab( iParams * sizeof( int ) );
|
||||
memset( wcall.pArg, 0, iParams * sizeof( HB_WINARG ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
wcall.pArg = NULL;
|
||||
wcall.piArgType = NULL;
|
||||
}
|
||||
|
||||
for( tmp = 0; tmp < iParams; ++tmp )
|
||||
{
|
||||
HB_U32 r1;
|
||||
PHB_ITEM pParam = hb_param( iFirst + tmp, HB_IT_ANY );
|
||||
|
||||
HB_U32 r1 = 0;
|
||||
HB_U32 r2;
|
||||
HB_BOOL b64;
|
||||
|
||||
wcall.piArgType[ tmp ] = wcall.piArgTypeReq ? wcall.piArgTypeReq[ tmp ] : HB_WIN_DLL_CTYPE_DEFAULT;
|
||||
|
||||
if( wcall.piArgType[ tmp ] == HB_WIN_DLL_CTYPE_DEFAULT )
|
||||
wcall.piArgType[ tmp ] = hb_hbtoctype( HB_ITEM_TYPE( pParam ) );
|
||||
|
||||
wcall.pArg[ tmp ].bByRef = HB_ISBYREF( iFirst + tmp );
|
||||
|
||||
hb_u32par( &wcall, tmp + 1, &r1, &r2, &b64 );
|
||||
hb_u32par( pParam, &wcall, tmp + 1, &r1, &r2, &b64 );
|
||||
|
||||
/* TOFIX: Check proper order. */
|
||||
/* TOFIX: Verify proper order. */
|
||||
rawpar[ iParamsRaw++ ] = r1;
|
||||
if( b64 )
|
||||
rawpar[ iParamsRaw++ ] = r2;
|
||||
@@ -989,8 +1182,6 @@ void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFun
|
||||
|
||||
switch( iRetType )
|
||||
{
|
||||
/* TODO: Add 64-bit integer support */
|
||||
|
||||
case HB_WIN_DLL_CTYPE_VOID:
|
||||
hb_ret();
|
||||
break;
|
||||
@@ -1019,9 +1210,17 @@ void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFun
|
||||
hb_retnint( ret.t.n32 );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_CHAR_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LLONG:
|
||||
case HB_WIN_DLL_CTYPE_LLONG_UNSIGNED:
|
||||
hb_retnint( ret.t.n64 );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_CHAR_UNSIGNED_PTR:
|
||||
if( wcall.bUNICODE )
|
||||
hb_retc( ( const char * ) ret.t.n32 );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_CHAR_PTR:
|
||||
if( bUNICODE )
|
||||
hb_retstr_u16( HB_CDP_ENDIAN_NATIVE, ( const HB_WCHAR * ) ret.t.n32 );
|
||||
else
|
||||
hb_retstr( hb_setGetOSCP(), ( const char * ) ret.t.n32 );
|
||||
@@ -1034,6 +1233,7 @@ void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFun
|
||||
case HB_WIN_DLL_CTYPE_LONG_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LONG_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_VOID_PTR:
|
||||
case HB_WIN_DLL_CTYPE_BOOL_PTR:
|
||||
case HB_WIN_DLL_CTYPE_FLOAT_PTR:
|
||||
case HB_WIN_DLL_CTYPE_DOUBLE_PTR:
|
||||
hb_retptr( ( void * ) ret.t.n32 );
|
||||
@@ -1055,36 +1255,75 @@ void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFun
|
||||
{
|
||||
if( wcall.pArg[ tmp ].bByRef )
|
||||
{
|
||||
switch( HB_ITEM_TYPE( hb_param( iFirst + tmp, HB_IT_ANY ) ) )
|
||||
switch( wcall.piArgType[ tmp ] )
|
||||
{
|
||||
/* TODO: Add 64-bit integer support */
|
||||
case HB_WIN_DLL_CTYPE_VOID:
|
||||
hb_stor( iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_IT_LOGICAL:
|
||||
case HB_WIN_DLL_CTYPE_BOOL:
|
||||
hb_storl( wcall.pArg[ tmp ].value.t.n32 != 0, iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_IT_NIL:
|
||||
case HB_IT_INTEGER:
|
||||
case HB_IT_LONG:
|
||||
case HB_IT_DATE:
|
||||
hb_stornint( wcall.pArg[ tmp ].value.t.n32, iFirst + tmp );
|
||||
case HB_WIN_DLL_CTYPE_CHAR:
|
||||
case HB_WIN_DLL_CTYPE_CHAR_UNSIGNED:
|
||||
hb_storni( wcall.pArg[ tmp ].value.t.n32 & 0xFF, iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_IT_DOUBLE:
|
||||
hb_stornd( wcall.pArg[ tmp ].value.t.nDB, iFirst + tmp );
|
||||
case HB_WIN_DLL_CTYPE_SHORT:
|
||||
case HB_WIN_DLL_CTYPE_SHORT_UNSIGNED:
|
||||
case HB_WIN_DLL_CTYPE_INT:
|
||||
hb_storni( wcall.pArg[ tmp ].value.t.n32 & 0xFFFF, iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_IT_STRING:
|
||||
case HB_IT_MEMO:
|
||||
if( wcall.bUNICODE )
|
||||
case HB_WIN_DLL_CTYPE_LONG:
|
||||
hb_stornl( wcall.pArg[ tmp ].value.t.n32, iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_INT_UNSIGNED:
|
||||
case HB_WIN_DLL_CTYPE_LONG_UNSIGNED:
|
||||
hb_stornint( wcall.pArg[ tmp ].value.t.n32 & 0xFFFF, iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_LLONG:
|
||||
case HB_WIN_DLL_CTYPE_LLONG_UNSIGNED:
|
||||
hb_stornint( wcall.pArg[ tmp ].value.t.n64, iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_CHAR_UNSIGNED_PTR:
|
||||
hb_storclen( ( const char * ) wcall.pArg[ tmp ].value.t.n32, hb_parclen( iFirst + tmp ), iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_CHAR_PTR:
|
||||
if( bUNICODE )
|
||||
hb_storstrlen_u16( HB_CDP_ENDIAN_NATIVE, ( const HB_WCHAR * ) wcall.pArg[ tmp ].value.t.n32, hb_parclen( iFirst + tmp ), iFirst + tmp );
|
||||
else
|
||||
hb_storstrlen( hb_setGetOSCP(), ( const char * ) wcall.pArg[ tmp ].value.t.n32, hb_parclen( iFirst + tmp ), iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_IT_POINTER:
|
||||
case HB_WIN_DLL_CTYPE_INT_PTR:
|
||||
case HB_WIN_DLL_CTYPE_SHORT_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_INT_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_STRUCTURE_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LONG_PTR:
|
||||
case HB_WIN_DLL_CTYPE_LONG_UNSIGNED_PTR:
|
||||
case HB_WIN_DLL_CTYPE_VOID_PTR:
|
||||
case HB_WIN_DLL_CTYPE_BOOL_PTR:
|
||||
case HB_WIN_DLL_CTYPE_FLOAT_PTR:
|
||||
case HB_WIN_DLL_CTYPE_DOUBLE_PTR:
|
||||
hb_storptr( ( void * ) wcall.pArg[ tmp ].value.t.n32, iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_FLOAT:
|
||||
hb_stornd( wcall.pArg[ tmp ].value.t.nFL, iFirst + tmp );
|
||||
break;
|
||||
|
||||
case HB_WIN_DLL_CTYPE_DOUBLE:
|
||||
hb_stornd( wcall.pArg[ tmp ].value.t.nDB, iFirst + tmp );
|
||||
break;
|
||||
|
||||
default:
|
||||
hb_stornl( wcall.pArg[ tmp ].value.t.n32, iFirst + tmp );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1094,6 +1333,9 @@ void hbwin_dllCall( int iCallConv, int iRetType, HB_BOOL bUNICODE, FARPROC lpFun
|
||||
|
||||
if( wcall.pArg )
|
||||
hb_xfree( wcall.pArg );
|
||||
|
||||
if( wcall.piArgType )
|
||||
hb_xfree( wcall.piArgType );
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE( EG_ARG, 2010, "A maximum of 15 parameters is supported", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
|
||||
@@ -1157,10 +1399,23 @@ FARPROC hbwin_getprocaddress( HMODULE hDLL, int iParam, HB_BOOL * pbUNICODE )
|
||||
return lpFunction;
|
||||
}
|
||||
|
||||
HB_FUNC( GETPROCADDRESS )
|
||||
{
|
||||
HMODULE hDLL;
|
||||
|
||||
if( HB_ISNUM( 1 ) )
|
||||
hDLL = ( HMODULE ) ( HB_PTRDIFF ) hb_parnint( 1 );
|
||||
else
|
||||
hDLL = ( HMODULE ) hb_parptr( 1 );
|
||||
|
||||
hb_retptr( hDLL ? ( void * ) hbwin_getprocaddress( hDLL, 2, NULL ) : NULL );
|
||||
}
|
||||
|
||||
HB_FUNC( WIN_DLLCALL )
|
||||
{
|
||||
PHB_ITEM pParam = hb_param( 1, HB_IT_ARRAY );
|
||||
int iFirst = 1;
|
||||
int * piArgTypeReq = NULL;
|
||||
|
||||
int iCallConv = HB_WIN_DLL_CALLCONV_STDCALL;
|
||||
int iRetType = HB_WIN_DLL_CTYPE_DEFAULT;
|
||||
@@ -1178,9 +1433,20 @@ HB_FUNC( WIN_DLLCALL )
|
||||
iRetType = hb_arrayGetNI( pParam, 2 );
|
||||
if( nLen >= 3 && HB_IS_LOGICAL( hb_arrayGetItemPtr( pParam, 3 ) ) )
|
||||
bUNICODE = hb_arrayGetL( pParam, 3 );
|
||||
if( nLen >= 4 )
|
||||
{
|
||||
HB_SIZE nPos;
|
||||
HB_SIZE nArgCount = hb_pcount() - iFirst;
|
||||
|
||||
/* TODO: Allow to specify parameter types, too */
|
||||
piArgTypeReq = ( int * ) hb_xgrab( sizeof( int ) * nArgCount );
|
||||
|
||||
for( nPos = 0; nPos < nArgCount; ++nPos )
|
||||
piArgTypeReq[ nPos ] = ( ( nPos + 4 ) <= nLen && HB_IS_NUMERIC( hb_arrayGetItemPtr( pParam, nPos + 4 ) ) ) ? hb_arrayGetNI( pParam, nPos + 4 ) : HB_WIN_DLL_CTYPE_DEFAULT;
|
||||
}
|
||||
}
|
||||
|
||||
hbwin_dllCall( iCallConv, iRetType, bUNICODE, ( FARPROC ) hb_parptr( iFirst ), hb_pcount(), iFirst + 1, NULL );
|
||||
hbwin_dllCall( iCallConv, iRetType, bUNICODE, ( FARPROC ) hb_parptr( iFirst ), hb_pcount(), iFirst + 1, piArgTypeReq );
|
||||
|
||||
if( piArgTypeReq )
|
||||
hb_xfree( piArgTypeReq );
|
||||
}
|
||||
|
||||
@@ -8,6 +8,6 @@ C_SOURCES := \
|
||||
bmdbfcdx.c \
|
||||
bmsixcdx.c
|
||||
|
||||
LIBNAME := hbbmcdx
|
||||
LIBNAME := rddbmcdx
|
||||
|
||||
include $(TOP)$(ROOT)config/lib.mk
|
||||
@@ -134,166 +134,9 @@ static int hb_cdxPageRootSplit( LPCDXPAGE pPage );
|
||||
/* free create index structur */
|
||||
static void hb_cdxSortFree( LPCDXSORTINFO pSort );
|
||||
|
||||
static HB_BOOL hb_cdxPageReadTopKey( LPCDXPAGE pPage );
|
||||
|
||||
static HB_BOOL hb_cdxPageReadNextKey( LPCDXPAGE pPage );
|
||||
|
||||
static LPCDXTAG hb_cdxGetActiveTag( CDXAREAP pArea );
|
||||
|
||||
static void hb_cdxClearLogPosInfo( CDXAREAP pArea );
|
||||
|
||||
static HB_BOOL s_bTurbo = HB_FALSE;
|
||||
static RDDFUNCS cdxSuper;
|
||||
static const RDDFUNCS cdxTable =
|
||||
{
|
||||
|
||||
/* Movement and positioning methods */
|
||||
|
||||
( DBENTRYP_BP ) hb_cdxBof,
|
||||
( DBENTRYP_BP ) hb_cdxEof,
|
||||
( DBENTRYP_BP ) hb_cdxFound,
|
||||
( DBENTRYP_V ) hb_cdxGoBottom,
|
||||
( DBENTRYP_UL ) hb_cdxGoTo,
|
||||
( DBENTRYP_I ) hb_cdxGoToId,
|
||||
( DBENTRYP_V ) hb_cdxGoTop,
|
||||
( DBENTRYP_BIB ) hb_cdxSeek,
|
||||
( DBENTRYP_L ) hb_cdxSkip,
|
||||
( DBENTRYP_L ) hb_cdxSkipFilter,
|
||||
( DBENTRYP_L ) hb_cdxSkipRaw,
|
||||
|
||||
|
||||
/* Data management */
|
||||
|
||||
( DBENTRYP_VF ) hb_cdxAddField,
|
||||
( DBENTRYP_B ) hb_cdxAppend,
|
||||
( DBENTRYP_I ) hb_cdxCreateFields,
|
||||
( DBENTRYP_V ) hb_cdxDeleteRec,
|
||||
( DBENTRYP_BP ) hb_cdxDeleted,
|
||||
( DBENTRYP_SP ) hb_cdxFieldCount,
|
||||
( DBENTRYP_VF ) hb_cdxFieldDisplay,
|
||||
( DBENTRYP_SSI ) hb_cdxFieldInfo,
|
||||
( DBENTRYP_SCP ) hb_cdxFieldName,
|
||||
( DBENTRYP_V ) hb_cdxFlush,
|
||||
( DBENTRYP_PP ) hb_cdxGetRec,
|
||||
( DBENTRYP_SI ) hb_cdxGetValue,
|
||||
( DBENTRYP_SVL ) hb_cdxGetVarLen,
|
||||
( DBENTRYP_V ) hb_cdxGoCold,
|
||||
( DBENTRYP_V ) hb_cdxGoHot,
|
||||
( DBENTRYP_P ) hb_cdxPutRec,
|
||||
( DBENTRYP_SI ) hb_cdxPutValue,
|
||||
( DBENTRYP_V ) hb_cdxRecall,
|
||||
( DBENTRYP_ULP ) hb_cdxRecCount,
|
||||
( DBENTRYP_ISI ) hb_cdxRecInfo,
|
||||
( DBENTRYP_ULP ) hb_cdxRecNo,
|
||||
( DBENTRYP_I ) hb_cdxRecId,
|
||||
( DBENTRYP_S ) hb_cdxSetFieldExtent,
|
||||
|
||||
|
||||
/* WorkArea/Database management */
|
||||
|
||||
( DBENTRYP_CP ) hb_cdxAlias,
|
||||
( DBENTRYP_V ) hb_cdxClose,
|
||||
( DBENTRYP_VO ) hb_cdxCreate,
|
||||
( DBENTRYP_SI ) hb_cdxInfo,
|
||||
( DBENTRYP_V ) hb_cdxNewArea,
|
||||
( DBENTRYP_VO ) hb_cdxOpen,
|
||||
( DBENTRYP_V ) hb_cdxRelease,
|
||||
( DBENTRYP_SP ) hb_cdxStructSize,
|
||||
( DBENTRYP_CP ) hb_cdxSysName,
|
||||
( DBENTRYP_VEI ) hb_cdxEval,
|
||||
( DBENTRYP_V ) hb_cdxPack,
|
||||
( DBENTRYP_LSP ) hb_cdxPackRec,
|
||||
( DBENTRYP_VS ) hb_cdxSort,
|
||||
( DBENTRYP_VT ) hb_cdxTrans,
|
||||
( DBENTRYP_VT ) hb_cdxTransRec,
|
||||
( DBENTRYP_V ) hb_cdxZap,
|
||||
|
||||
|
||||
/* Relational Methods */
|
||||
|
||||
( DBENTRYP_VR ) hb_cdxChildEnd,
|
||||
( DBENTRYP_VR ) hb_cdxChildStart,
|
||||
( DBENTRYP_VR ) hb_cdxChildSync,
|
||||
( DBENTRYP_V ) hb_cdxSyncChildren,
|
||||
( DBENTRYP_V ) hb_cdxClearRel,
|
||||
( DBENTRYP_V ) hb_cdxForceRel,
|
||||
( DBENTRYP_SSP ) hb_cdxRelArea,
|
||||
( DBENTRYP_VR ) hb_cdxRelEval,
|
||||
( DBENTRYP_SI ) hb_cdxRelText,
|
||||
( DBENTRYP_VR ) hb_cdxSetRel,
|
||||
|
||||
|
||||
/* Order Management */
|
||||
|
||||
( DBENTRYP_VOI ) hb_cdxOrderListAdd,
|
||||
( DBENTRYP_V ) hb_cdxOrderListClear,
|
||||
( DBENTRYP_VOI ) hb_cdxOrderListDelete,
|
||||
( DBENTRYP_VOI ) hb_cdxOrderListFocus,
|
||||
( DBENTRYP_V ) hb_cdxOrderListRebuild,
|
||||
( DBENTRYP_VOO ) hb_cdxOrderCondition,
|
||||
( DBENTRYP_VOC ) hb_cdxOrderCreate,
|
||||
( DBENTRYP_VOI ) hb_cdxOrderDestroy,
|
||||
( DBENTRYP_SVOI ) hb_cdxOrderInfo,
|
||||
|
||||
|
||||
/* Filters and Scope Settings */
|
||||
|
||||
( DBENTRYP_V ) hb_cdxClearFilter,
|
||||
( DBENTRYP_V ) hb_cdxClearLocate,
|
||||
( DBENTRYP_V ) hb_cdxClearScope,
|
||||
( DBENTRYP_VPLP ) hb_cdxCountScope,
|
||||
( DBENTRYP_I ) hb_cdxFilterText,
|
||||
( DBENTRYP_SI ) hb_cdxScopeInfo,
|
||||
( DBENTRYP_VFI ) hb_cdxSetFilter,
|
||||
( DBENTRYP_VLO ) hb_cdxSetLocate,
|
||||
( DBENTRYP_VOS ) hb_cdxSetScope,
|
||||
( DBENTRYP_VPL ) hb_cdxSkipScope,
|
||||
( DBENTRYP_B ) hb_cdxLocate,
|
||||
|
||||
|
||||
/* Miscellaneous */
|
||||
|
||||
( DBENTRYP_CC ) hb_cdxCompile,
|
||||
( DBENTRYP_I ) hb_cdxError,
|
||||
( DBENTRYP_I ) hb_cdxEvalBlock,
|
||||
|
||||
|
||||
/* Network operations */
|
||||
|
||||
( DBENTRYP_VSP ) hb_cdxRawLock,
|
||||
( DBENTRYP_VL ) hb_cdxLock,
|
||||
( DBENTRYP_I ) hb_cdxUnLock,
|
||||
|
||||
|
||||
/* Memofile functions */
|
||||
|
||||
( DBENTRYP_V ) hb_cdxCloseMemFile,
|
||||
( DBENTRYP_VO ) hb_cdxCreateMemFile,
|
||||
( DBENTRYP_SCCS ) hb_cdxGetValueFile,
|
||||
( DBENTRYP_VO ) hb_cdxOpenMemFile,
|
||||
( DBENTRYP_SCCS ) hb_cdxPutValueFile,
|
||||
|
||||
|
||||
/* Database file header handling */
|
||||
|
||||
( DBENTRYP_V ) hb_cdxReadDBHeader,
|
||||
( DBENTRYP_V ) hb_cdxWriteDBHeader,
|
||||
|
||||
|
||||
/* non WorkArea functions */
|
||||
( DBENTRYP_R ) hb_cdxInit,
|
||||
( DBENTRYP_R ) hb_cdxExit,
|
||||
( DBENTRYP_RVVL ) hb_cdxDrop,
|
||||
( DBENTRYP_RVVL ) hb_cdxExists,
|
||||
( DBENTRYP_RVVVL ) hb_cdxRename,
|
||||
( DBENTRYP_RSLV ) hb_cdxRddInfo,
|
||||
|
||||
|
||||
/* Special and reserved methods */
|
||||
|
||||
( DBENTRYP_SVP ) hb_cdxWhoCares
|
||||
};
|
||||
|
||||
|
||||
#ifdef HB_CDX_DSPDBG_INFO
|
||||
static void hb_cdxDspTags( LPCDXINDEX pIndex )
|
||||
@@ -1364,14 +1207,6 @@ static HB_BOOL hb_cdxIndexLockRead( LPCDXINDEX pIndex )
|
||||
pIndex->RdLck = HB_TRUE;
|
||||
#endif
|
||||
|
||||
if( s_bTurbo )
|
||||
{
|
||||
pIndex->lockRead++;
|
||||
hb_cdxIndexCheckVersion( pIndex );
|
||||
return HB_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = hb_dbfLockIdxFile( pIndex->pFile, pIndex->pArea->dbfarea.bLockType,
|
||||
FL_LOCK | FLX_SHARED | FLX_WAIT, &pIndex->ulLockPos );
|
||||
if( !ret )
|
||||
@@ -1383,8 +1218,6 @@ static HB_BOOL hb_cdxIndexLockRead( LPCDXINDEX pIndex )
|
||||
hb_cdxIndexCheckVersion( pIndex );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1450,16 +1283,6 @@ static HB_BOOL hb_cdxIndexUnLockRead( LPCDXINDEX pIndex )
|
||||
|
||||
hb_cdxIndexPoolFree( pIndex, CDX_PAGECACHESIZE );
|
||||
|
||||
if( s_bTurbo )
|
||||
{
|
||||
#ifdef HB_CDX_DBGCODE
|
||||
if( pIndex->pArea->dbfarea.fShared && pIndex->fShared &&
|
||||
! HB_DIRTYREAD( &pIndex->pArea->dbfarea ) )
|
||||
pIndex->RdLck = HB_FALSE;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
if( pIndex->pArea->dbfarea.fShared && pIndex->fShared &&
|
||||
!HB_DIRTYREAD( &pIndex->pArea->dbfarea ) )
|
||||
{
|
||||
@@ -1473,7 +1296,7 @@ static HB_BOOL hb_cdxIndexUnLockRead( LPCDXINDEX pIndex )
|
||||
hb_errInternal( 9108, "hb_cdxIndexUnLockRead: unlock error.", NULL, NULL );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return HB_TRUE;
|
||||
}
|
||||
|
||||
@@ -6947,8 +6770,7 @@ static HB_ERRCODE hb_cdxSeekWild( CDXAREAP pArea, HB_BOOL fSoftSeek, PHB_ITEM pK
|
||||
|
||||
HB_FUNC( BM_TURBO )
|
||||
{
|
||||
s_bTurbo = HB_ISLOG( 1 ) ? hb_parl( 1 ) : HB_FALSE;
|
||||
hb_retl( s_bTurbo );
|
||||
hb_retl( HB_FALSE );
|
||||
}
|
||||
|
||||
HB_FUNC( BM_DBGETFILTERARRAY )
|
||||
@@ -10481,11 +10303,157 @@ static void hb_cdxTagDoIndex( LPCDXTAG pTag, HB_BOOL fReindex )
|
||||
hb_cdpSelect( cdpTmp );
|
||||
}
|
||||
|
||||
#define __PRG_SOURCE__ __FILE__
|
||||
#ifdef HB_PCODE_VER
|
||||
#undef HB_PRG_PCODE_VER
|
||||
#define HB_PRG_PCODE_VER HB_PCODE_VER
|
||||
#endif
|
||||
|
||||
static const RDDFUNCS cdxTable =
|
||||
{
|
||||
|
||||
/* Movement and positioning methods */
|
||||
|
||||
( DBENTRYP_BP ) hb_cdxBof,
|
||||
( DBENTRYP_BP ) hb_cdxEof,
|
||||
( DBENTRYP_BP ) hb_cdxFound,
|
||||
( DBENTRYP_V ) hb_cdxGoBottom,
|
||||
( DBENTRYP_UL ) hb_cdxGoTo,
|
||||
( DBENTRYP_I ) hb_cdxGoToId,
|
||||
( DBENTRYP_V ) hb_cdxGoTop,
|
||||
( DBENTRYP_BIB ) hb_cdxSeek,
|
||||
( DBENTRYP_L ) hb_cdxSkip,
|
||||
( DBENTRYP_L ) hb_cdxSkipFilter,
|
||||
( DBENTRYP_L ) hb_cdxSkipRaw,
|
||||
|
||||
|
||||
/* Data management */
|
||||
|
||||
( DBENTRYP_VF ) hb_cdxAddField,
|
||||
( DBENTRYP_B ) hb_cdxAppend,
|
||||
( DBENTRYP_I ) hb_cdxCreateFields,
|
||||
( DBENTRYP_V ) hb_cdxDeleteRec,
|
||||
( DBENTRYP_BP ) hb_cdxDeleted,
|
||||
( DBENTRYP_SP ) hb_cdxFieldCount,
|
||||
( DBENTRYP_VF ) hb_cdxFieldDisplay,
|
||||
( DBENTRYP_SSI ) hb_cdxFieldInfo,
|
||||
( DBENTRYP_SCP ) hb_cdxFieldName,
|
||||
( DBENTRYP_V ) hb_cdxFlush,
|
||||
( DBENTRYP_PP ) hb_cdxGetRec,
|
||||
( DBENTRYP_SI ) hb_cdxGetValue,
|
||||
( DBENTRYP_SVL ) hb_cdxGetVarLen,
|
||||
( DBENTRYP_V ) hb_cdxGoCold,
|
||||
( DBENTRYP_V ) hb_cdxGoHot,
|
||||
( DBENTRYP_P ) hb_cdxPutRec,
|
||||
( DBENTRYP_SI ) hb_cdxPutValue,
|
||||
( DBENTRYP_V ) hb_cdxRecall,
|
||||
( DBENTRYP_ULP ) hb_cdxRecCount,
|
||||
( DBENTRYP_ISI ) hb_cdxRecInfo,
|
||||
( DBENTRYP_ULP ) hb_cdxRecNo,
|
||||
( DBENTRYP_I ) hb_cdxRecId,
|
||||
( DBENTRYP_S ) hb_cdxSetFieldExtent,
|
||||
|
||||
|
||||
/* WorkArea/Database management */
|
||||
|
||||
( DBENTRYP_CP ) hb_cdxAlias,
|
||||
( DBENTRYP_V ) hb_cdxClose,
|
||||
( DBENTRYP_VO ) hb_cdxCreate,
|
||||
( DBENTRYP_SI ) hb_cdxInfo,
|
||||
( DBENTRYP_V ) hb_cdxNewArea,
|
||||
( DBENTRYP_VO ) hb_cdxOpen,
|
||||
( DBENTRYP_V ) hb_cdxRelease,
|
||||
( DBENTRYP_SP ) hb_cdxStructSize,
|
||||
( DBENTRYP_CP ) hb_cdxSysName,
|
||||
( DBENTRYP_VEI ) hb_cdxEval,
|
||||
( DBENTRYP_V ) hb_cdxPack,
|
||||
( DBENTRYP_LSP ) hb_cdxPackRec,
|
||||
( DBENTRYP_VS ) hb_cdxSort,
|
||||
( DBENTRYP_VT ) hb_cdxTrans,
|
||||
( DBENTRYP_VT ) hb_cdxTransRec,
|
||||
( DBENTRYP_V ) hb_cdxZap,
|
||||
|
||||
|
||||
/* Relational Methods */
|
||||
|
||||
( DBENTRYP_VR ) hb_cdxChildEnd,
|
||||
( DBENTRYP_VR ) hb_cdxChildStart,
|
||||
( DBENTRYP_VR ) hb_cdxChildSync,
|
||||
( DBENTRYP_V ) hb_cdxSyncChildren,
|
||||
( DBENTRYP_V ) hb_cdxClearRel,
|
||||
( DBENTRYP_V ) hb_cdxForceRel,
|
||||
( DBENTRYP_SSP ) hb_cdxRelArea,
|
||||
( DBENTRYP_VR ) hb_cdxRelEval,
|
||||
( DBENTRYP_SI ) hb_cdxRelText,
|
||||
( DBENTRYP_VR ) hb_cdxSetRel,
|
||||
|
||||
|
||||
/* Order Management */
|
||||
|
||||
( DBENTRYP_VOI ) hb_cdxOrderListAdd,
|
||||
( DBENTRYP_V ) hb_cdxOrderListClear,
|
||||
( DBENTRYP_VOI ) hb_cdxOrderListDelete,
|
||||
( DBENTRYP_VOI ) hb_cdxOrderListFocus,
|
||||
( DBENTRYP_V ) hb_cdxOrderListRebuild,
|
||||
( DBENTRYP_VOO ) hb_cdxOrderCondition,
|
||||
( DBENTRYP_VOC ) hb_cdxOrderCreate,
|
||||
( DBENTRYP_VOI ) hb_cdxOrderDestroy,
|
||||
( DBENTRYP_SVOI ) hb_cdxOrderInfo,
|
||||
|
||||
|
||||
/* Filters and Scope Settings */
|
||||
|
||||
( DBENTRYP_V ) hb_cdxClearFilter,
|
||||
( DBENTRYP_V ) hb_cdxClearLocate,
|
||||
( DBENTRYP_V ) hb_cdxClearScope,
|
||||
( DBENTRYP_VPLP ) hb_cdxCountScope,
|
||||
( DBENTRYP_I ) hb_cdxFilterText,
|
||||
( DBENTRYP_SI ) hb_cdxScopeInfo,
|
||||
( DBENTRYP_VFI ) hb_cdxSetFilter,
|
||||
( DBENTRYP_VLO ) hb_cdxSetLocate,
|
||||
( DBENTRYP_VOS ) hb_cdxSetScope,
|
||||
( DBENTRYP_VPL ) hb_cdxSkipScope,
|
||||
( DBENTRYP_B ) hb_cdxLocate,
|
||||
|
||||
|
||||
/* Miscellaneous */
|
||||
|
||||
( DBENTRYP_CC ) hb_cdxCompile,
|
||||
( DBENTRYP_I ) hb_cdxError,
|
||||
( DBENTRYP_I ) hb_cdxEvalBlock,
|
||||
|
||||
|
||||
/* Network operations */
|
||||
|
||||
( DBENTRYP_VSP ) hb_cdxRawLock,
|
||||
( DBENTRYP_VL ) hb_cdxLock,
|
||||
( DBENTRYP_I ) hb_cdxUnLock,
|
||||
|
||||
|
||||
/* Memofile functions */
|
||||
|
||||
( DBENTRYP_V ) hb_cdxCloseMemFile,
|
||||
( DBENTRYP_VO ) hb_cdxCreateMemFile,
|
||||
( DBENTRYP_SCCS ) hb_cdxGetValueFile,
|
||||
( DBENTRYP_VO ) hb_cdxOpenMemFile,
|
||||
( DBENTRYP_SCCS ) hb_cdxPutValueFile,
|
||||
|
||||
|
||||
/* Database file header handling */
|
||||
|
||||
( DBENTRYP_V ) hb_cdxReadDBHeader,
|
||||
( DBENTRYP_V ) hb_cdxWriteDBHeader,
|
||||
|
||||
|
||||
/* non WorkArea functions */
|
||||
( DBENTRYP_R ) hb_cdxInit,
|
||||
( DBENTRYP_R ) hb_cdxExit,
|
||||
( DBENTRYP_RVVL ) hb_cdxDrop,
|
||||
( DBENTRYP_RVVL ) hb_cdxExists,
|
||||
( DBENTRYP_RVVVL ) hb_cdxRename,
|
||||
( DBENTRYP_RSLV ) hb_cdxRddInfo,
|
||||
|
||||
|
||||
/* Special and reserved methods */
|
||||
|
||||
( DBENTRYP_SVP ) hb_cdxWhoCares
|
||||
};
|
||||
|
||||
|
||||
HB_FUNC_EXTERN( _DBF );
|
||||
|
||||
@@ -183,8 +183,7 @@
|
||||
|
||||
typedef int HB_BOOL;
|
||||
typedef signed char HB_SCHAR;
|
||||
typedef unsigned char HB_UCHAR; /* QUESTION: HB_BYTE or HB_UCHAR? */
|
||||
typedef unsigned char HB_BYTE; /* QUESTION: HB_BYTE or HB_UCHAR? */
|
||||
typedef unsigned char HB_UCHAR;
|
||||
typedef short HB_SHORT;
|
||||
typedef unsigned short HB_USHORT;
|
||||
typedef long HB_LONG; /* WARNING: These types have a new size in Harbour 2.1.x and upper. */
|
||||
@@ -196,7 +195,10 @@ typedef long HB_ISIZ; /* TODO: Change to HB_SIZE, after
|
||||
|
||||
/* Guaranteed 8-bit types */
|
||||
typedef HB_SCHAR HB_I8;
|
||||
typedef HB_BYTE HB_U8;
|
||||
typedef HB_UCHAR HB_U8;
|
||||
|
||||
/* Convenience */
|
||||
typedef HB_UCHAR HB_BYTE;
|
||||
|
||||
#if ! defined( HB_LEGACY_TYPES_OFF )
|
||||
#if ! defined( HB_DONT_DEFINE_BASIC_TYPES )
|
||||
@@ -455,11 +457,13 @@ typedef HB_BYTE HB_U8;
|
||||
#define HB_I64_MIN LONGLONG_MIN
|
||||
#define HB_I64_MAX LONGLONG_MAX
|
||||
#define HB_U64_MAX ULONGLONG_MAX
|
||||
# if !defined( UINT64 )
|
||||
typedef HB_U64 UINT64;
|
||||
# endif
|
||||
# if !defined( INT64 )
|
||||
typedef HB_I64 INT64;
|
||||
# if ! defined( HB_LEGACY_TYPES_OFF )
|
||||
# if !defined( UINT64 )
|
||||
typedef HB_U64 UINT64;
|
||||
# endif
|
||||
# if !defined( INT64 )
|
||||
typedef HB_I64 INT64;
|
||||
# endif
|
||||
# endif
|
||||
# if !defined( UINT64_MAX )
|
||||
# define UINT64_MAX ULONGLONG_MAX
|
||||
|
||||
@@ -8339,7 +8339,7 @@ STATIC PROCEDURE ShowHelp( lLong )
|
||||
{ "-aflag=<f>" , I_( "pass flag to linker (static library)" ) },;
|
||||
{ "-dflag=<f>" , I_( "pass flag to linker (dynamic library)" ) },;
|
||||
{ "-runflag=<f>" , I_( "pass flag to output executable when -run option is used" ) },;
|
||||
{ "-3rd=<f>" , I_( "options/flags reserved for 3rd party tools, always ignore by hbmk2 itself" ) },;
|
||||
{ "-3rd=<f>" , I_( "options/flags reserved for 3rd party tools, always ignored by hbmk2 itself" ) },;
|
||||
{ "-jobs=<n>" , I_( "start n compilation threads (multiprocess platforms only)" ) },;
|
||||
{ "-inc" , I_( "enable incremental build mode" ) },;
|
||||
{ "-[no]head[=<m>]" , I_( "control source header parsing (in incremental build mode)\n<m> can be: native (uses compiler to extract dependencies), full (uses simple text parser on the whole file), partial (default, uses simple text parser on 1st 16KB chunk of the file), off" ) },;
|
||||
|
||||
Reference in New Issue
Block a user