diff --git a/harbour/include/extend.h b/harbour/include/extend.h index 997aa3d1d0..07c84dccb8 100644 --- a/harbour/include/extend.h +++ b/harbour/include/extend.h @@ -165,6 +165,14 @@ PDYNSYM NewDynSym( PSYMBOL pSymbol ); /* creates a new dynamic symbol based on a /* error API */ PITEM _errNew( void ); PITEM _errPutDescription( PITEM pError, char * szDescription ); +PITEM _errPutFileName( PITEM pError, char * szFileName ); +PITEM _errPutGenCode( PITEM pError, USHORT uiGenCode ); +PITEM _errPutOperation( PITEM pError, char * szOperation ); +PITEM _errPutOsCode( PITEM pError, USHORT uiOsCode ); +PITEM _errPutSeverity( PITEM pError, USHORT uiSeverity ); +PITEM _errPutSubCode( PITEM pError, USHORT uiSubCode ); +PITEM _errPutSubSystem( PITEM pError, char * szSubSystem ); +PITEM _errPutTries( PITEM pError, USHORT uiTries ); WORD _errLaunch( PITEM pError ); void _errRelease( PITEM pError ); diff --git a/harbour/source/compiler/genobj32.c b/harbour/source/compiler/genobj32.c index 60fdeb07cf..d8a1941001 100644 --- a/harbour/source/compiler/genobj32.c +++ b/harbour/source/compiler/genobj32.c @@ -524,7 +524,7 @@ static void DataSegment( FILE * hObjFile, BYTE * symbol, WORD wSymLen, WORD wSym while( pSymbol ) { - for( w = 0; w < strlen( pSymbol->szName ); w++ ) + for( w = 0; w < ( WORD ) strlen( pSymbol->szName ); w++ ) { putbyte( pSymbol->szName[ w ], hObjFile ); bCheckSum += pSymbol->szName[ w ]; diff --git a/harbour/source/rtl/arrays.c b/harbour/source/rtl/arrays.c index 99cd9c16da..c5f7ba273e 100644 --- a/harbour/source/rtl/arrays.c +++ b/harbour/source/rtl/arrays.c @@ -112,6 +112,29 @@ ULONG ArrayGetStringLen( PITEM pArray, ULONG ulIndex ) return 0; } +int ArrayGetType( PITEM pArray, ULONG ulIndex ) +{ + PITEM pItem, pError; + + if( IS_ARRAY( pArray ) ) + { + if( ulIndex <= ( unsigned ) ArrayLen( pArray ) ) + { + pItem = ( ( PBASEARRAY ) pArray->value.pBaseArray )->pItems + ulIndex - 1; + + return pItem->wType; + } + else + { + pError = _errNew(); + _errPutDescription( pError, "Bound error: Array access" ); + _errLaunch( pError ); + _errRelease( pError ); + } + } + return 0; +} + void ArrayLast( PITEM pArray, PITEM pResult ) { if( ( ( PBASEARRAY ) pArray->value.pBaseArray )->ulLen ) diff --git a/harbour/source/rtl/errorapi.c b/harbour/source/rtl/errorapi.c index e53fc074a9..5df0b215f1 100644 --- a/harbour/source/rtl/errorapi.c +++ b/harbour/source/rtl/errorapi.c @@ -27,6 +27,14 @@ PITEM _errNew( void ) return &stack.Return; } +char * _errGetDescription( PITEM pError ) +{ + PushSymbol( GetDynSym( "DESCRIPTION" )->pSymbol ); + Push( pError ); + Do( 0 ); + return stack.Return.value.szText; +} + PITEM _errPutDescription( PITEM pError, char * szDescription ) { PushSymbol( GetDynSym( "_DESCRIPTION" )->pSymbol ); @@ -36,6 +44,14 @@ PITEM _errPutDescription( PITEM pError, char * szDescription ) return pError; } +char * _errGetFileName( PITEM pError ) +{ + PushSymbol( GetDynSym( "FILENAME" )->pSymbol ); + Push( pError ); + Do( 0 ); + return stack.Return.value.szText; +} + PITEM _errPutFileName( PITEM pError, char * szFileName ) { PushSymbol( GetDynSym( "_FILENAME" )->pSymbol ); @@ -45,6 +61,14 @@ PITEM _errPutFileName( PITEM pError, char * szFileName ) return pError; } +USHORT _errGetGenCode( PITEM pError ) +{ + PushSymbol( GetDynSym( "GENCODE" )->pSymbol ); + Push( pError ); + Do( 0 ); + return stack.Return.value.iNumber; +} + PITEM _errPutGenCode( PITEM pError, USHORT uiGenCode ) { PushSymbol( GetDynSym( "_GENCODE" )->pSymbol ); @@ -54,6 +78,14 @@ PITEM _errPutGenCode( PITEM pError, USHORT uiGenCode ) return pError; } +char * _errGetOperation( PITEM pError ) +{ + PushSymbol( GetDynSym( "OPERATION" )->pSymbol ); + Push( pError ); + Do( 0 ); + return stack.Return.value.szText; +} + PITEM _errPutOperation( PITEM pError, char * szOperation ) { PushSymbol( GetDynSym( "_OPERATION" )->pSymbol ); @@ -63,6 +95,14 @@ PITEM _errPutOperation( PITEM pError, char * szOperation ) return pError; } +USHORT _errGetOsCode( PITEM pError ) +{ + PushSymbol( GetDynSym( "OSCODE" )->pSymbol ); + Push( pError ); + Do( 0 ); + return stack.Return.value.iNumber; +} + PITEM _errPutOsCode( PITEM pError, USHORT uiOsCode ) { PushSymbol( GetDynSym( "_OSCODE" )->pSymbol ); diff --git a/harbour/source/rtl/extend.c b/harbour/source/rtl/extend.c index ce02c1ce21..186bf6fc6e 100644 --- a/harbour/source/rtl/extend.c +++ b/harbour/source/rtl/extend.c @@ -258,6 +258,21 @@ long _parnl( WORD wParam, ... ) return 0; } +int _parinfa( int iParamNum, ULONG uiArrayIndex ) +{ + PITEM pArray = _param( iParamNum, IT_ARRAY ); + + if( pArray ) + { + if( ! uiArrayIndex ) + return ArrayLen( pArray ); + else + return ArrayGetType( pArray, uiArrayIndex ); + } + else + return 0; /* QUESTION: should we raise an error here ? */ +} + WORD _parinfo( WORD wParam ) { if( ! wParam )