diff --git a/harbour/ChangeLog b/harbour/ChangeLog index ea1e341373..5324b9bcd7 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,12 @@ The license applies to all entries newer than 2009-04-28. */ +2012-07-19 22:09 UTC+0200 Viktor Szakats (harbour syenar.net) + * contrib/hbfbird/tests/testapi.c + * uncrustified + * contrib/hbwin/olecore.c + * minor formatting + 2012-07-19 21:10 UTC+0200 Viktor Szakats (harbour syenar.net) * contrib/hbnf/descendn.c * contrib/hbnf/dispc.c diff --git a/harbour/contrib/hbfbird/tests/testapi.c b/harbour/contrib/hbfbird/tests/testapi.c index 53b43bc41a..275ce6ba2a 100644 --- a/harbour/contrib/hbfbird/tests/testapi.c +++ b/harbour/contrib/hbfbird/tests/testapi.c @@ -11,391 +11,415 @@ #ifndef ISC_INT64_FORMAT -#if (defined(_MSC_VER) && defined(WIN32)) || (defined(__BORLANDC__) && defined(__WIN32__)) +#if ( defined( _MSC_VER ) && defined( WIN32 ) ) || ( defined( __BORLANDC__ ) && defined( __WIN32__ ) ) #define ISC_INT64_FORMAT "I64" #else #define ISC_INT64_FORMAT "ll" #endif #endif -#define USER "sysdba" -#define PASSWORD "masterkey" -#define DATABASE "127.0.0.1:d:\\fontes\\lixo\\test.gdb" -#define ERREXIT(status, rc) {isc_print_status(status); return rc;} -#define MAX_BUFFER 1024 +#define USER "sysdba" +#define PASSWORD "masterkey" +#define DATABASE "127.0.0.1:d:\\fontes\\lixo\\test.gdb" +#define ERREXIT( status, rc ) { isc_print_status( status ); return rc; } +#define MAX_BUFFER 1024 -int execute( char *exec_str ); -int query( char *sel_str ); +int execute( char * exec_str ); +int query( char * sel_str ); int fetch( void ); int qclose( void ); -char *getdata(int pos); +char * getdata( int pos ); -isc_db_handle db = NULL; -int dialect = 1; -XSQLDA ISC_FAR * sqlda; -isc_stmt_handle stmt = NULL; -isc_tr_handle trans = NULL; +isc_db_handle db = NULL; +int dialect = 1; +XSQLDA ISC_FAR * sqlda; +isc_stmt_handle stmt = NULL; +isc_tr_handle trans = NULL; -int main () +int main() { - char dpb[48]; - int i = 0, len; - long status[20]; + char dpb[ 48 ]; + int i = 0, len; + long status[ 20 ]; - dpb[i++] = isc_dpb_version1; + dpb[ i++ ] = isc_dpb_version1; - dpb[i++] = isc_dpb_user_name; - len = strlen(USER); - dpb[i++] = (char) len; - strncpy(&(dpb[i]), USER, len); - i += len; + dpb[ i++ ] = isc_dpb_user_name; + len = strlen( USER ); + dpb[ i++ ] = ( char ) len; + strncpy( &( dpb[ i ] ), USER, len ); + i += len; - dpb[i++] = isc_dpb_password; - len = strlen (PASSWORD); - dpb[i++] = len; - strncpy(&(dpb[i]), PASSWORD, len); - i += len; + dpb[ i++ ] = isc_dpb_password; + len = strlen( PASSWORD ); + dpb[ i++ ] = len; + strncpy( &( dpb[ i ] ), PASSWORD, len ); + i += len; - if (isc_attach_database(status, 0, DATABASE, &db, i, dpb)) - ERREXIT(status, 1); + if( isc_attach_database( status, 0, DATABASE, &db, i, dpb ) ) + ERREXIT( status, 1 ); - execute("DROP TABLE TESTE"); + execute( "DROP TABLE TESTE" ); - execute("CREATE TABLE TESTE (code smallint)"); + execute( "CREATE TABLE TESTE (code smallint)" ); - execute("INSERT INTO TESTE (code) VALUES (100)"); + execute( "INSERT INTO TESTE (code) VALUES (100)" ); - query("SELECT * FROM TESTE"); - while (fetch() == 0) - printf("%s\n", getdata(0)); - qclose(); + query( "SELECT * FROM TESTE" ); + while( fetch() == 0 ) + printf( "%s\n", getdata( 0 ) ); + qclose(); - if (isc_detach_database(status, &db)) - ERREXIT(status, 1); + if( isc_detach_database( status, &db ) ) + ERREXIT( status, 1 ); - return 1; + return 1; } -int execute( char *exec_str ) +int execute( char * exec_str ) { - isc_tr_handle trans = NULL; - long status[20]; + isc_tr_handle trans = NULL; + long status[ 20 ]; - if (isc_start_transaction(status, &trans, 1, &db, 0, NULL)) - ERREXIT(status, 1); + if( isc_start_transaction( status, &trans, 1, &db, 0, NULL ) ) + ERREXIT( status, 1 ); - if (isc_dsql_execute_immediate(status, &db, &trans, 0, exec_str, dialect, NULL)) - ERREXIT(status, 1); + if( isc_dsql_execute_immediate( status, &db, &trans, 0, exec_str, dialect, NULL ) ) + ERREXIT( status, 1 ); - if (isc_commit_transaction(status, &trans)) - ERREXIT(status, 1); + if( isc_commit_transaction( status, &trans ) ) + ERREXIT( status, 1 ); - return 1; + return 1; } -int query( char *sel_str ) +int query( char * sel_str ) { - ISC_STATUS status[20]; - XSQLVAR *var; + ISC_STATUS status[ 20 ]; + XSQLVAR * var; - int n, i, dtype; + int n, i, dtype; - if ( isc_start_transaction ( status, &trans, 1, &db, 0, NULL ) ) - ERREXIT(status, 1); + if( isc_start_transaction( status, &trans, 1, &db, 0, NULL ) ) + ERREXIT( status, 1 ); - /* Allocate an output SQLDA. Just to check number of columns */ - sqlda = ( XSQLDA * ) malloc( XSQLDA_LENGTH ( 1 ) ); - sqlda->sqln = 1; - sqlda->version = 1; + /* Allocate an output SQLDA. Just to check number of columns */ + sqlda = ( XSQLDA * ) malloc( XSQLDA_LENGTH( 1 ) ); + sqlda->sqln = 1; + sqlda->version = 1; - /* Allocate a statement */ - if (isc_dsql_allocate_statement(status, &db, &stmt)) - ERREXIT(status, 1); + /* Allocate a statement */ + if( isc_dsql_allocate_statement( status, &db, &stmt ) ) + ERREXIT( status, 1 ); - /* Prepare the statement. */ - if (isc_dsql_prepare(status, &trans, &stmt, 0, sel_str, dialect, sqlda)) - ERREXIT(status, 1); + /* Prepare the statement. */ + if( isc_dsql_prepare( status, &trans, &stmt, 0, sel_str, dialect, sqlda ) ) + ERREXIT( status, 1 ); - /* Describe sql contents */ - if (isc_dsql_describe(status, &stmt, dialect, sqlda)) - ERREXIT(status, 1); + /* Describe sql contents */ + if( isc_dsql_describe( status, &stmt, dialect, sqlda ) ) + ERREXIT( status, 1 ); - /* Relocate necessary number of columns */ - if ( sqlda->sqld > sqlda->sqln ) { - free( sqlda ); - n = sqlda->sqld; - sqlda = ( XSQLDA * ) malloc( XSQLDA_LENGTH ( n ) ); - sqlda->sqln = n; - sqlda->version = 1; + /* Relocate necessary number of columns */ + if( sqlda->sqld > sqlda->sqln ) + { + free( sqlda ); + n = sqlda->sqld; + sqlda = ( XSQLDA * ) malloc( XSQLDA_LENGTH( n ) ); + sqlda->sqln = n; + sqlda->version = 1; - if (isc_dsql_describe(status, &stmt, dialect, sqlda)) - ERREXIT(status, 1); - } + if( isc_dsql_describe( status, &stmt, dialect, sqlda ) ) + ERREXIT( status, 1 ); + } - for ( i = 0, var = sqlda->sqlvar; i < sqlda->sqld; i++, var++ ) { - dtype = ( var->sqltype & ~1 ); - switch ( dtype ) { - case SQL_VARYING: - var->sqltype = SQL_TEXT; - var->sqldata = ( char * ) malloc( sizeof ( char ) * var->sqllen + 2 ); + for( i = 0, var = sqlda->sqlvar; i < sqlda->sqld; i++, var++ ) + { + dtype = ( var->sqltype & ~1 ); + switch( dtype ) + { + case SQL_VARYING: + var->sqltype = SQL_TEXT; + var->sqldata = ( char * ) malloc( sizeof( char ) * var->sqllen + 2 ); break; - case SQL_TEXT: - var->sqldata = ( char * ) malloc( sizeof ( char ) * var->sqllen + 2 ); + case SQL_TEXT: + var->sqldata = ( char * ) malloc( sizeof( char ) * var->sqllen + 2 ); break; - case SQL_LONG: - var->sqltype = SQL_LONG; - var->sqldata = ( char * ) malloc( sizeof ( long ) ); + case SQL_LONG: + var->sqltype = SQL_LONG; + var->sqldata = ( char * ) malloc( sizeof( long ) ); break; - default: - var->sqldata = ( char * ) malloc( sizeof ( char ) * var->sqllen ); + default: + var->sqldata = ( char * ) malloc( sizeof( char ) * var->sqllen ); break; - } - if ( var->sqltype & 1 ) { - var->sqlind = ( short * ) malloc( sizeof ( short ) ); - } - } + } + if( var->sqltype & 1 ) + { + var->sqlind = ( short * ) malloc( sizeof( short ) ); + } + } - if ( !sqlda->sqld ) { - /* Execute and commit non-select querys */ - if ( isc_dsql_execute ( status, &trans, &stmt, dialect, NULL ) ) - ERREXIT(status, 1); + if( ! sqlda->sqld ) + { + /* Execute and commit non-select querys */ + if( isc_dsql_execute( status, &trans, &stmt, dialect, NULL ) ) + ERREXIT( status, 1 ); - if (isc_commit_transaction(status, &trans)) - ERREXIT(status, 1); + if( isc_commit_transaction( status, &trans ) ) + ERREXIT( status, 1 ); - trans = NULL; + trans = NULL; - } else { - if ( isc_dsql_execute ( status, &trans, &stmt, dialect, sqlda ) ) - ERREXIT(status, 1); - } + } + else + { + if( isc_dsql_execute( status, &trans, &stmt, dialect, sqlda ) ) + ERREXIT( status, 1 ); + } - return 1; + return 1; } int fetch( void ) { - long fetch_stat; - long status[20]; + long fetch_stat; + long status[ 20 ]; - fetch_stat = isc_dsql_fetch(status, &stmt, dialect, sqlda); + fetch_stat = isc_dsql_fetch( status, &stmt, dialect, sqlda ); - if (fetch_stat != 100L) - ERREXIT(status, 1); + if( fetch_stat != 100L ) + ERREXIT( status, 1 ); - return fetch_stat; + return fetch_stat; } int qclose( void ) { - long status[20]; + long status[ 20 ]; - if (isc_dsql_free_statement(status, &stmt, DSQL_drop)) - ERREXIT(status, 1); + if( isc_dsql_free_statement( status, &stmt, DSQL_drop ) ) + ERREXIT( status, 1 ); - if (trans) - if (isc_commit_transaction(status, &trans)) - ERREXIT(status, 1); + if( trans ) + if( isc_commit_transaction( status, &trans ) ) + ERREXIT( status, 1 ); - if ( sqlda ) - free( sqlda ); + if( sqlda ) + free( sqlda ); - return 1; + return 1; } -char *getdata(int pos) +char * getdata( int pos ) { - short dtype; - char data[MAX_BUFFER], *p; - char blob_s[20], date_s[25]; - short len; - long status[20]; + short dtype; + char data[ MAX_BUFFER ], * p; + char blob_s[ 20 ], date_s[ 25 ]; + short len; + long status[ 20 ]; - struct tm times; - ISC_QUAD bid; - XSQLVAR *var; + struct tm times; + ISC_QUAD bid; + XSQLVAR * var; - if ( ( pos + 1 ) > sqlda->sqln ) - return "error"; + if( ( pos + 1 ) > sqlda->sqln ) + return "error"; - var = sqlda->sqlvar; + var = sqlda->sqlvar; - var += pos; + var += pos; dtype = var->sqltype & ~1; - p = data; + p = data; - if ( ( var->sqltype & 1 ) && ( *var->sqlind < 0 ) ) { - switch ( dtype ) { - case SQL_TEXT: - case SQL_VARYING: - len = var->sqllen; - break; - case SQL_SHORT: - len = 6; - if ( var->sqlscale > 0 ) - len += var->sqlscale; - break; - case SQL_LONG: - len = 11; - if ( var->sqlscale > 0 ) - len += var->sqlscale; - break; - case SQL_INT64: - len = 21; - if ( var->sqlscale > 0 ) - len += var->sqlscale; - break; - case SQL_FLOAT: - len = 15; - break; - case SQL_DOUBLE: - len = 24; - break; - case SQL_TIMESTAMP: - len = 24; - break; - case SQL_TYPE_DATE: - len = 10; - break; - case SQL_TYPE_TIME: - len = 13; - break; - case SQL_BLOB: - case SQL_ARRAY: - default: - len = 17; - break; - } - if ( ( dtype == SQL_TEXT ) || ( dtype == SQL_VARYING ) ) - sprintf ( p, "%-*s ", len, "NULL" ); - else - sprintf ( p, "%*s ", len, "NULL" ); - } else { - switch ( dtype ) { - case SQL_TEXT: - sprintf ( p, "%.*s ", var->sqllen, var->sqldata ); - break; - - case SQL_VARYING: - sprintf ( p, "%.*s ", var->sqllen, var->sqldata ); - break; - - case SQL_SHORT: - case SQL_LONG: - case SQL_INT64: + if( ( var->sqltype & 1 ) && ( *var->sqlind < 0 ) ) + { + switch( dtype ) { - ISC_INT64 value = 0; - short field_width = 0; - short dscale; - - switch ( dtype ) { + case SQL_TEXT: + case SQL_VARYING: + len = var->sqllen; + break; case SQL_SHORT: - value = ( ISC_INT64 ) * ( short ISC_FAR * ) var->sqldata; - field_width = 6; + len = 6; + if( var->sqlscale > 0 ) + len += var->sqlscale; break; case SQL_LONG: - value = ( ISC_INT64 ) * ( long ISC_FAR * ) var->sqldata; - field_width = 11; + len = 11; + if( var->sqlscale > 0 ) + len += var->sqlscale; break; case SQL_INT64: - value = ( ISC_INT64 ) * ( ISC_INT64 ISC_FAR * ) var->sqldata; - field_width = 21; + len = 21; + if( var->sqlscale > 0 ) + len += var->sqlscale; + break; + case SQL_FLOAT: + len = 15; + break; + case SQL_DOUBLE: + len = 24; + break; + case SQL_TIMESTAMP: + len = 24; + break; + case SQL_TYPE_DATE: + len = 10; + break; + case SQL_TYPE_TIME: + len = 13; + break; + case SQL_BLOB: + case SQL_ARRAY: + default: + len = 17; + break; + } + if( ( dtype == SQL_TEXT ) || ( dtype == SQL_VARYING ) ) + sprintf( p, "%-*s ", len, "NULL" ); + else + sprintf( p, "%*s ", len, "NULL" ); + } + else + { + switch( dtype ) + { + case SQL_TEXT: + sprintf( p, "%.*s ", var->sqllen, var->sqldata ); break; - } - dscale = var->sqlscale; - if ( dscale < 0 ) { - ISC_INT64 tens; - short i; - tens = 1; - for ( i = 0; i > dscale; i-- ) { - tens *= 10; + case SQL_VARYING: + sprintf( p, "%.*s ", var->sqllen, var->sqldata ); + break; - if ( value >= 0 ) { + case SQL_SHORT: + case SQL_LONG: + case SQL_INT64: + { + ISC_INT64 value = 0; + short field_width = 0; + short dscale; - sprintf ( p, - "%*" ISC_INT64_FORMAT "d.%0*" - ISC_INT64_FORMAT "d", - field_width - 1 + dscale, - ( ISC_INT64 ) ( value / tens ), -dscale, - ( ISC_INT64 ) ( value % tens ) ); - } else if ( ( value / tens ) != 0 ) { + switch( dtype ) + { + case SQL_SHORT: + value = ( ISC_INT64 ) *( short ISC_FAR * ) var->sqldata; + field_width = 6; + break; + case SQL_LONG: + value = ( ISC_INT64 ) *( long ISC_FAR * ) var->sqldata; + field_width = 11; + break; + case SQL_INT64: + value = ( ISC_INT64 ) *( ISC_INT64 ISC_FAR * ) var->sqldata; + field_width = 21; + break; + } + dscale = var->sqlscale; + if( dscale < 0 ) + { + ISC_INT64 tens; + short i; - sprintf ( p, - "%*" ISC_INT64_FORMAT "d.%0*" - ISC_INT64_FORMAT "d", - field_width - 1 + dscale, - ( ISC_INT64 ) ( value / tens ), -dscale, - ( ISC_INT64 ) - ( value % tens ) ); - } else { + tens = 1; + for( i = 0; i > dscale; i-- ) + { + tens *= 10; - sprintf ( p, "%*s.%0*" ISC_INT64_FORMAT "d", - field_width - 1 + dscale, - "-0", -dscale, - ( ISC_INT64 ) - ( value % tens ) ); + if( value >= 0 ) + { + + sprintf( p, + "%*" ISC_INT64_FORMAT "d.%0*" + ISC_INT64_FORMAT "d", + field_width - 1 + dscale, + ( ISC_INT64 ) ( value / tens ), -dscale, + ( ISC_INT64 ) ( value % tens ) ); + } + else if( ( value / tens ) != 0 ) + { + + sprintf( p, + "%*" ISC_INT64_FORMAT "d.%0*" + ISC_INT64_FORMAT "d", + field_width - 1 + dscale, + ( ISC_INT64 ) ( value / tens ), -dscale, + ( ISC_INT64 ) -( value % tens ) ); + } + else + { + + sprintf( p, "%*s.%0*" ISC_INT64_FORMAT "d", + field_width - 1 + dscale, + "-0", -dscale, + ( ISC_INT64 ) -( value % tens ) ); + } } } - } else if ( dscale ) { - sprintf ( p, "%*" ISC_INT64_FORMAT "d%0*d", - field_width, ( ISC_INT64 ) value, dscale, 0 ); - } else { - sprintf ( p, "%*" ISC_INT64_FORMAT "d", - field_width, ( ISC_INT64 ) value ); - } - }; - break; + else if( dscale ) + { + sprintf( p, "%*" ISC_INT64_FORMAT "d%0*d", + field_width, ( ISC_INT64 ) value, dscale, 0 ); + } + else + { + sprintf( p, "%*" ISC_INT64_FORMAT "d", + field_width, ( ISC_INT64 ) value ); + } + }; + break; - case SQL_FLOAT: - sprintf ( p, "%15g ", *( float ISC_FAR * ) ( var->sqldata ) ); - break; + case SQL_FLOAT: + sprintf( p, "%15g ", *( float ISC_FAR * ) ( var->sqldata ) ); + break; - case SQL_DOUBLE: - sprintf ( p, "%24f ", *( double ISC_FAR * ) ( var->sqldata ) ); - break; + case SQL_DOUBLE: + sprintf( p, "%24f ", *( double ISC_FAR * ) ( var->sqldata ) ); + break; - case SQL_TIMESTAMP: - isc_decode_timestamp ( ( ISC_TIMESTAMP ISC_FAR * ) var->sqldata, × ); - sprintf ( date_s, "%04d-%02d-%02d %02d:%02d:%02d.%04lui", - times.tm_year + 1900, - times.tm_mon + 1, - times.tm_mday, - times.tm_hour, - times.tm_min, - times.tm_sec, - ( ( ISC_TIMESTAMP * ) var->sqldata )->timestamp_time % 10000 ); - sprintf ( p, "%*s ", 24, date_s ); - break; + case SQL_TIMESTAMP: + isc_decode_timestamp( ( ISC_TIMESTAMP ISC_FAR * ) var->sqldata, × ); + sprintf( date_s, "%04d-%02d-%02d %02d:%02d:%02d.%04lui", + times.tm_year + 1900, + times.tm_mon + 1, + times.tm_mday, + times.tm_hour, + times.tm_min, + times.tm_sec, + ( ( ISC_TIMESTAMP * ) var->sqldata )->timestamp_time % 10000 ); + sprintf( p, "%*s ", 24, date_s ); + break; - case SQL_TYPE_DATE: - isc_decode_sql_date ( ( ISC_DATE ISC_FAR * ) var->sqldata, × ); - sprintf ( date_s, "%04d-%02d-%02d", - times.tm_year + 1900, times.tm_mon + 1, times.tm_mday ); - sprintf ( p, "%*s ", 10, date_s ); - break; + case SQL_TYPE_DATE: + isc_decode_sql_date( ( ISC_DATE ISC_FAR * ) var->sqldata, × ); + sprintf( date_s, "%04d-%02d-%02d", + times.tm_year + 1900, times.tm_mon + 1, times.tm_mday ); + sprintf( p, "%*s ", 10, date_s ); + break; - case SQL_TYPE_TIME: - isc_decode_sql_time ( ( ISC_TIME ISC_FAR * ) var->sqldata, × ); - sprintf ( date_s, "%02d:%02d:%02d.%04lui", - times.tm_hour, - times.tm_min, - times.tm_sec, ( *( ( ISC_TIME * ) var->sqldata ) ) % 10000 ); - sprintf ( p, "%*s ", 13, date_s ); - break; + case SQL_TYPE_TIME: + isc_decode_sql_time( ( ISC_TIME ISC_FAR * ) var->sqldata, × ); + sprintf( date_s, "%02d:%02d:%02d.%04lui", + times.tm_hour, + times.tm_min, + times.tm_sec, ( *( ( ISC_TIME * ) var->sqldata ) ) % 10000 ); + sprintf( p, "%*s ", 13, date_s ); + break; - case SQL_BLOB: - case SQL_ARRAY: - /* Print the blob id on blobs or arrays */ - bid = *( ISC_QUAD ISC_FAR * ) var->sqldata; - sprintf ( blob_s, "%08x:%08x", ( unsigned int ) bid.gds_quad_high, - ( unsigned int ) bid.gds_quad_low ); - sprintf ( p, "%17s ", blob_s ); - break; + case SQL_BLOB: + case SQL_ARRAY: + /* Print the blob id on blobs or arrays */ + bid = *( ISC_QUAD ISC_FAR * ) var->sqldata; + sprintf( blob_s, "%08x:%08x", ( unsigned int ) bid.gds_quad_high, + ( unsigned int ) bid.gds_quad_low ); + sprintf( p, "%17s ", blob_s ); + break; - default: - break; + default: + break; } } diff --git a/harbour/contrib/hbwin/olecore.c b/harbour/contrib/hbwin/olecore.c index 2113d25f31..c28410f0f5 100644 --- a/harbour/contrib/hbwin/olecore.c +++ b/harbour/contrib/hbwin/olecore.c @@ -1442,7 +1442,7 @@ HB_FUNC( __OLEGETACTIVEOBJECT ) /* ( cOleName | cCLSID [, cIID ] ) */ { lOleError = GetActiveObject( HB_ID_REF( ClassID ), NULL, &pUnk ); - if ( lOleError == S_OK ) + if( lOleError == S_OK ) { lOleError = HB_VTBL( pUnk )->QueryInterface( HB_THIS_( pUnk ) HB_ID_REF( iid ), ( void** ) ( void * ) &pDisp ); HB_VTBL( pUnk )->Release( HB_THIS( pUnk ) ); @@ -1602,7 +1602,7 @@ HB_FUNC( WIN_OLEERRORTEXT ) /* -VBScript and Harbour syntax and IDispatch:Invoke() usage differences +VBScript and Harbour syntax and IDispatch:Invoke() usage differences VBScript syntax dispid DISPATCH_* flags argcnt | Harbour syntax :Invoke parameters ================================================================+======================================= @@ -1837,7 +1837,7 @@ HB_FUNC( WIN_OLEAUTO___OPINDEX ) VariantClear( &variant ); hb_errRT_OLE( lOleErrorEnum == S_OK ? EG_BOUND : EG_ARG, 1016, ( HB_ERRCODE ) lOleError, - lOleErrorEnum == S_OK ? hb_langDGetErrorDesc( fAssign ? EG_ARRASSIGN : EG_ARRACCESS ) : szDescription, + lOleErrorEnum == S_OK ? hb_langDGetErrorDesc( fAssign ? EG_ARRASSIGN : EG_ARRACCESS ) : szDescription, NULL, szSource ); if( szDescription )