Files
harbour-core/harbour/extras/hbapollo/replace.c
Viktor Szakats 340318e66d 2012-07-21 19:09 UTC+0200 Viktor Szakats (vszakats syenar.net)
+ extras
  - examples
  * doc/dirstruc.txt
    * renamed 'examples' to what it is more: 'extras'
2012-07-21 17:10:27 +00:00

330 lines
9.4 KiB
C

/*
* $Id$
*/
/*
* SixAPI Project source code:
*
* Copyright 2010 Andi Jahja <xharbour@telkom.net.id>
*
* 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/).
*/
#include "sxapi.h"
HB_FUNC_EXTERN( SX_REPLACEARRAY );
HB_FUNC( SX_REPLACE ) /* ( cpFieldName, xData, cArea ) */
{
PHB_ITEM pItem = hb_param( 2, HB_IT_ANY );
if( ! _sx_Used() )
hb_errRT_DBCMD( EG_NOTABLE, EDBCMD_NOTABLE, NULL, "SX_REPLACE" );
if( HB_ISCHAR( 1 ) )
{
WORD wPreviousArea = SX_DUMMY_NUMBER;
PBYTE cFieldName = ( PBYTE ) hb_parc( 1 );
if( ! HB_ISNIL( 3 ) )
wPreviousArea = _sx_select( hb_param( 3, HB_IT_ANY ) );
switch( hb_itemType( pItem ) )
{
case HB_IT_ARRAY:
{
PHB_ITEM pAlias = hb_itemNew( NULL );
PHB_ITEM pFieldName = hb_itemNew( NULL );
PHB_ITEM pResult;
hb_itemPutC( pAlias, (const char*) sx_Alias( 0 ) );
hb_itemPutC( pFieldName, (const char*) cFieldName );
pResult = hb_itemDoC( "SX_REPLACEARRAY", 3, pFieldName, hb_param( 2, HB_IT_ARRAY ), pAlias );
hb_itemRelease( pAlias );
hb_itemRelease( pFieldName );
hb_itemRelease( pResult );
break;
}
case HB_IT_STRING:
{
PVOID pValue = ( PVOID ) hb_parc( 2 );
char * cFieldType = ( char * ) sx_FieldType( cFieldName );
switch( *cFieldType )
{
case 'C':
sx_Replace( cFieldName, R_CHAR, pValue );
break;
case 'D':
sx_Replace( cFieldName, R_DATESTR, pValue );
break;
case 'M':
sx_Replace( cFieldName, R_MEMO, pValue );
break;
}
hb_retc( ( char * ) pValue );
break;
} /* enf of if( HB_IS_STRING( vData ) ) */
case HB_IT_DOUBLE:
{
double pValue = hb_parnd( 2 );
sx_Replace( cFieldName, R_DOUBLE, ( PVOID ) &pValue );
hb_retnd( pValue );
break;
}
case HB_IT_LONG:
{
long pValue = hb_parnl( 2 );
sx_Replace( cFieldName, R_LONG, ( PVOID ) &pValue );
hb_retnl( pValue );
break;
}
case HB_IT_INTEGER:
{
int pValue = hb_parni( 2 );
sx_Replace( cFieldName, R_INTEGER, ( PVOID ) &pValue );
hb_retni( pValue );
break;
}
case HB_IT_LOGICAL:
{
HB_BOOL pValue = hb_parl( 2 );
sx_Replace( cFieldName, R_LOGICAL, ( PVOID ) &pValue );
hb_retl( pValue );
break;
} /* end of else if( HB_IS_LOGICAL( vData ) ) */
case HB_IT_DATE:
{
long lJulian = hb_itemGetDL( pItem );
sx_Replace( cFieldName, R_JULIAN, ( PVOID ) &lJulian );
break;
} /* end of else if( HB_IS_DATE( vData ) ) */
}
/* Back to Previous Area */
if( ! ( wPreviousArea == SX_DUMMY_NUMBER ) )
sx_Select( wPreviousArea );
}
}
HB_FUNC( SX_FIELDPUT )
{
HB_FUNCNAME( SX_REPLACE ) ();
}
HB_FUNC( SX_REPLACEBITMAP ) /* ( cpFieldName, xData, cArea ) */
{
if( ! _sx_Used() )
hb_errRT_DBCMD( EG_NOTABLE, EDBCMD_NOTABLE, NULL, "SX_REPLACEBITMAP" );
if( HB_ISCHAR( 1 ) && HB_ISCHAR( 2 ) )
{
WORD wPreviousArea = SX_DUMMY_NUMBER;
PVOID pValue;
PBYTE cFieldName = ( PBYTE ) hb_parc( 1 );
if( ! HB_ISNIL( 3 ) )
wPreviousArea = _sx_select( hb_param( 3, HB_IT_ANY ) );
pValue = ( PVOID ) hb_parc( 2 );
sx_Replace( cFieldName, R_BITMAP, pValue );
/* Back to Previous Area */
if( ! ( wPreviousArea == SX_DUMMY_NUMBER ) )
sx_Select( wPreviousArea );
}
}
HB_FUNC( __SX_FORCELINK_SX_REPLACEARRAY )
{
HB_FUNC_EXEC( SX_REPLACEARRAY );
}
HB_FUNC( SX_REPLACEBLOB ) /* ( cpFieldName, xData, cArea ) */
{
if( ! _sx_Used() )
hb_errRT_DBCMD( EG_NOTABLE, EDBCMD_NOTABLE, NULL, "SX_REPLACEBLOB" );
if( HB_ISCHAR( 1 ) )
{
WORD wPreviousArea = SX_DUMMY_NUMBER;
PVOID pValue;
PBYTE cFieldName = ( PBYTE ) hb_parc( 1 );
long lResult = 0;
if( ! HB_ISNIL( 3 ) )
wPreviousArea = _sx_select( hb_param( 3, HB_IT_ANY ) );
if( HB_ISCHAR( 2 ) )
{
pValue = ( PVOID ) hb_parc( 2 );
sx_Replace( cFieldName, R_BLOBFILE, pValue );
}
else if( HB_ISARRAY( 2 ) )
{
PHB_ITEM pAlias = hb_itemNew( NULL );
PHB_ITEM pFieldName = hb_itemNew( NULL );
PHB_ITEM pResult;
hb_itemPutC( pAlias, (const char*) sx_Alias( 0 ) );
hb_itemPutC( pFieldName, (const char*) cFieldName );
pResult = hb_itemDoC( "SX_REPLACEARRAY", 3, pFieldName, hb_param( 2, HB_IT_ARRAY ), pAlias );
lResult = hb_itemGetL( pResult );
hb_itemRelease( pAlias );
hb_itemRelease( pFieldName );
hb_itemRelease( pResult );
}
/* Back to Previous Area */
if( ! ( wPreviousArea == SX_DUMMY_NUMBER ) )
sx_Select( wPreviousArea );
hb_retnl( lResult );
}
}
HB_FUNC( SX_REPLACEEX ) /* ( aReplace, cArea ) */
{
WORD wPreviousArea = SX_DUMMY_NUMBER;
if( ! _sx_Used() )
hb_errRT_DBCMD( EG_NOTABLE, EDBCMD_NOTABLE, NULL, "SX_REPLACEEX" );
if( HB_ISARRAY( 1 ) )
{
PHB_ITEM pReplace = hb_param( 1, HB_IT_ARRAY );
PHB_ITEM pInfo;
HB_USHORT uiLen = ( HB_USHORT ) hb_arrayLen( pReplace );
HB_USHORT uiSize;
PBYTE cFieldName;
WORD uVarType;
if( ! HB_ISNIL( 2 ) )
wPreviousArea = _sx_select( hb_param( 2, HB_IT_ANY ) );
for( uiSize = 0; uiSize < uiLen; uiSize++ )
{
pInfo = hb_arrayGetItemPtr( pReplace, uiSize + 1 );
/* Give Protection of NOT an array */
if( HB_IS_ARRAY( pInfo ) && hb_arrayLen( pInfo ) >= 2 )
{
/* if( pInfo->item.asArray.value->ulLen >= 2 ) */
cFieldName = ( PBYTE ) hb_arrayGetC( pInfo, 1 );
uVarType = ( WORD ) hb_arrayGetType( pInfo, 2 );
switch( uVarType )
{
case HB_IT_DOUBLE:
case HB_IT_LONG:
case HB_IT_INTEGER:
{
double pDouble = hb_arrayGetND( pInfo, 2 );
sx_Replace( cFieldName, R_DOUBLE, ( PVOID ) &pDouble );
}
hb_xfree( cFieldName );
break;
case HB_IT_DATE:
{
long lJulian = hb_arrayGetDL( pInfo, 2 );
sx_Replace( cFieldName, R_JULIAN, ( PVOID ) &lJulian );
}
hb_xfree( cFieldName );
break;
case HB_IT_LOGICAL:
{
HB_BOOL pValue = hb_arrayGetL( pInfo, 2 );
sx_Replace( cFieldName, R_LOGICAL, ( PVOID ) &pValue );
hb_xfree( cFieldName );
}
break;
case HB_IT_STRING:
{
PBYTE cVar = ( PBYTE ) hb_arrayGetC( pInfo, 2 );
char * cFieldType = ( char * ) sx_FieldType( cFieldName );
switch( *cFieldType )
{
case 'C':
sx_Replace( cFieldName, R_CHAR, cVar );
break;
case 'D':
sx_Replace( cFieldName, R_DATESTR, cVar );
break;
case 'M':
sx_Replace( cFieldName, R_MEMO, cVar );
break;
}
hb_xfree( cVar );
hb_xfree( cFieldName );
}
break;
}
}
}
if( ! ( wPreviousArea == SX_DUMMY_NUMBER ) )
sx_Select( wPreviousArea );
}
}
HB_FUNC( SX_BLOBTOFILE )
{
if( HB_ISCHAR( 1 ) && HB_ISCHAR( 2 ) )
{
WORD iWorkArea = SX_DUMMY_NUMBER;
PBYTE cpFieldName;
char * pFieldType;
cpFieldName = ( PBYTE ) hb_parc( 1 );
/* Work area passed */
if( ! HB_ISNIL( 3 ) )
iWorkArea = _sx_select( hb_param( 1, HB_IT_ANY ) );
/* Check if the field is of MEMO type */
pFieldType = ( char * ) sx_FieldType( cpFieldName );
switch( *pFieldType )
{
case 'P':
case 'B':
hb_retl( sx_BlobToFile( cpFieldName, ( PBYTE ) hb_parc( 2 ) ) );
break;
default:
hb_retl( HB_FALSE );
}
if( ! ( iWorkArea == SX_DUMMY_NUMBER ) )
sx_Select( iWorkArea );
}
else
hb_retl( HB_FALSE );
}