From a7a0930e2c358cc3ce25544f9791b0586a2d48af Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Sun, 27 Jun 1999 17:00:13 +0000 Subject: [PATCH] *** empty log message *** --- harbour/ChangeLog | 10 ++ harbour/source/rtl/arrays.c | 66 +++--------- harbour/source/rtl/dates.c | 103 ++++++------------- harbour/source/rtl/environ.c | 7 -- harbour/source/rtl/math.c | 88 ++++------------ harbour/source/rtl/set.c | 49 ++++++++- harbour/source/rtl/strings.c | 185 ++++++++++++---------------------- harbour/source/rtl/transfrm.c | 21 +--- 8 files changed, 189 insertions(+), 340 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 3dae317ac9..4bee059246 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,4 +1,14 @@ 19990627-16:30 CET Victor Szel + * source/rtl/strings.c + source/rtl/set.c (added four Clipper errors) + source/rtl/math.c + source/rtl/environ.c + source/rtl/transfrm.c + source/rtl/dates.c + source/rtl/arrays.c (partially) + + Using error launcher wrapper + + Made launched errors Clipper compatible. + ! Some incompatibilities fixed in error handling (RTRIM, TRIM, ...) * source/rtl/errorsys.prg + Builds error message text like Clipper. * source/rtl/copyfile.c diff --git a/harbour/source/rtl/arrays.c b/harbour/source/rtl/arrays.c index abfb6588a4..cdd2733b35 100644 --- a/harbour/source/rtl/arrays.c +++ b/harbour/source/rtl/arrays.c @@ -96,18 +96,12 @@ void hb_arrayGet( PHB_ITEM pArray, ULONG ulIndex, PHB_ITEM pItem ) ItemCopy( pItem, ( ( PBASEARRAY ) pArray->value.pBaseArray )->pItems + ( ulIndex - 1 ) ); else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription( pError, szBoundError ); - hb_errLaunch( pError ); - hb_errRelease( pError ); + hb_errorRT_BASE(EG_ARG, 1132, "Bound error", "array access"); } } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription( pError, szArgumentError ); - hb_errLaunch( pError ); - hb_errRelease( pError ); + hb_errorRT_BASE(EG_ARG, 1068, "Argument error", "array access"); } } @@ -126,18 +120,12 @@ char *hb_arrayGetString( PHB_ITEM pArray, ULONG ulIndex ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription( pError, szBoundError ); - hb_errLaunch( pError ); - hb_errRelease( pError ); + hb_errorRT_BASE(EG_ARG, 1132, "Bound error", "array access"); } } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription( pError, szArgumentError ); - hb_errLaunch( pError ); - hb_errRelease( pError ); + hb_errorRT_BASE(EG_ARG, 1068, "Argument error", "array access"); } return ""; } @@ -157,18 +145,12 @@ ULONG hb_arrayGetStringLen( PHB_ITEM pArray, ULONG ulIndex ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription( pError, szBoundError ); - hb_errLaunch( pError ); - hb_errRelease( pError ); + hb_errorRT_BASE(EG_ARG, 1132, "Bound error", "array access"); } } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription( pError, szArgumentError ); - hb_errLaunch( pError ); - hb_errRelease( pError ); + hb_errorRT_BASE(EG_ARG, 1068, "Argument error", "array access"); } return 0; } @@ -184,12 +166,13 @@ int hb_arrayGetType( PHB_ITEM pArray, ULONG ulIndex ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription( pError, "Bound error: Array access" ); - hb_errLaunch( pError ); - hb_errRelease( pError ); + hb_errorRT_BASE(EG_ARG, 1132, "Bound error", "array access"); } } + else + { + hb_errorRT_BASE(EG_ARG, 1068, "Argument error", "array access"); + } return 0; } @@ -208,10 +191,7 @@ ULONG hb_arrayLen( PHB_ITEM pArray ) return ( ( PBASEARRAY ) pArray->value.pBaseArray )->ulLen; else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription( pError, szArgumentError ); - hb_errLaunch( pError ); - hb_errRelease( pError ); + hb_errorRT_BASE(EG_ARG, 1068, "Argument error", "array access"); } return 0; } @@ -224,18 +204,12 @@ void hb_arraySet( PHB_ITEM pArray, ULONG ulIndex, PHB_ITEM pItem ) ItemCopy( ( ( PBASEARRAY ) pArray->value.pBaseArray )->pItems + ( ulIndex - 1 ), pItem ); else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription( pError, szBoundError ); - hb_errLaunch( pError ); - hb_errRelease( pError ); + hb_errorRT_BASE(EG_ARG, 1133, "Bound error", "array assign"); } } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription( pError, szArgumentError ); - hb_errLaunch( pError ); - hb_errRelease( pError ); + hb_errorRT_BASE(EG_ARG, 1069, "Argument error", "array assign"); } } @@ -273,13 +247,6 @@ void hb_arraySize( PHB_ITEM pArray, ULONG ulLen ) } pBaseArray->ulLen = ulLen; } - else - { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription( pError, szArgumentError ); - hb_errLaunch( pError ); - hb_errRelease( pError ); - } } void hb_arrayFill( PHB_ITEM pArray, PHB_ITEM pValue, ULONG ulStart, ULONG ulCount ) @@ -488,10 +455,7 @@ void hb_arrayEval( PHB_ITEM pArray, PHB_ITEM bBlock, ULONG ulStart, ULONG ulCoun } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription( pError, szArgumentError ); - hb_errLaunch( pError ); - hb_errRelease( pError ); + hb_errorRT_BASE(EG_ARG, 2017, "Argument error", "AEVAL"); } } diff --git a/harbour/source/rtl/dates.c b/harbour/source/rtl/dates.c index 392f3e2165..c827ca9a28 100644 --- a/harbour/source/rtl/dates.c +++ b/harbour/source/rtl/dates.c @@ -395,19 +395,13 @@ HARBOUR HB_DTOS( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: DTOS"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1120, "Argument error", "DTOS"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: DTOS"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1120, "Incorrect number of arguments", "DTOS"); } #endif } @@ -430,10 +424,7 @@ HARBOUR HB_DAY( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Error BASE/1114 Argument error: DAY"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1114, "Argument error", "DAY"); } } @@ -450,10 +441,7 @@ HARBOUR HB_MONTH( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Error BASE/1113 Argument error: MONTH"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1113, "Argument error", "MONTH"); } } @@ -470,10 +458,7 @@ HARBOUR HB_YEAR( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Error BASE/1112 Argument error: YEAR"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1112, "Argument error", "YEAR"); } } @@ -487,17 +472,13 @@ HARBOUR HB_TIME( void ) time(&t); oTime = localtime(&t); - sprintf(szTime, "%02d:%02d:%02d", oTime->tm_hour, oTime->tm_min, -oTime->tm_sec); + sprintf(szTime, "%02d:%02d:%02d", oTime->tm_hour, oTime->tm_min, oTime->tm_sec); hb_retclen(szTime, 8); } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: TIME"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 9999, "Incorrect number of arguments", "TIME"); } } @@ -511,17 +492,13 @@ HARBOUR HB_DATE( void ) time(&t); oTime = localtime(&t); - sprintf(szTime, "%04d%02d%02d", oTime->tm_year + 1900, oTime->tm_mon + 1, -oTime->tm_mday); + sprintf(szTime, "%04d%02d%02d", oTime->tm_year + 1900, oTime->tm_mon + 1, oTime->tm_mday); hb_retds(szTime); } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: DATE"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 9999, "Incorrect number of arguments", "DATE"); } } long hb_dow( long d, long m, long y ) @@ -556,10 +533,7 @@ HARBOUR HB_DOW( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Error BASE/1115 Argument error: DOW"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1115, "Argument error", "DOW"); } } @@ -570,26 +544,20 @@ HARBOUR HB_CMONTH( void ) if( hb_pcount() ) { - if( pDate ) - { - hb_dateDecode( pDate->value.lDate, &lDay, &lMonth, &lYear ); - hb_retc( hb_cmonth( lMonth ) ); - } - else - { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Error BASE/1116 Argument error: CMONTH"); - hb_errLaunch(pError); - hb_errRelease(pError); - } + if( pDate ) + { + hb_dateDecode( pDate->value.lDate, &lDay, &lMonth, &lYear ); + hb_retc( hb_cmonth( lMonth ) ); + } + else + { + hb_errorRT_BASE(EG_ARG, 1116, "Argument error", "CMONTH"); + } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: CMONTH"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1116, "Incorrect number of arguments", "CMONTH"); } } @@ -600,26 +568,20 @@ HARBOUR HB_CDOW( void ) if( hb_pcount() ) { - if( pDate ) - { - hb_dateDecode( pDate->value.lDate, &lDay, &lMonth, &lYear ); - hb_retc( hb_cdow( hb_dow( lDay, lMonth, lYear ) ) ); - } - else - { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Error BASE/1117 Argument error: CDOW"); - hb_errLaunch(pError); - hb_errRelease(pError); - } + if( pDate ) + { + hb_dateDecode( pDate->value.lDate, &lDay, &lMonth, &lYear ); + hb_retc( hb_cdow( hb_dow( lDay, lMonth, lYear ) ) ); + } + else + { + hb_errorRT_BASE(EG_ARG, 1117, "Argument error", "CDOW"); + } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: CDOW"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1117, "Incorrect number of arguments", "CDOW"); } } @@ -630,9 +592,6 @@ HARBOUR HB_SECONDS( void ) else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: SECONDS"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 9999, "Incorrect number of arguments", "SECONDS"); } } diff --git a/harbour/source/rtl/environ.c b/harbour/source/rtl/environ.c index 006191386f..c8b81cc840 100644 --- a/harbour/source/rtl/environ.c +++ b/harbour/source/rtl/environ.c @@ -263,12 +263,5 @@ HARBOUR HB___RUN( void ) { system( hb_parc( 1 ) ); } - else - { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription( pError, "RUN: Incorrect number of arguments" ); - hb_errLaunch( pError ); - hb_errRelease( pError ); - } #endif } diff --git a/harbour/source/rtl/math.c b/harbour/source/rtl/math.c index 9dc017d527..7cf974a1ac 100644 --- a/harbour/source/rtl/math.c +++ b/harbour/source/rtl/math.c @@ -66,19 +66,13 @@ HARBOUR HB_ABS( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: ABS"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1089, "Argument error", "ABS"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: ABS"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1089, "Incorrect number of arguments", "ABS"); } } @@ -96,19 +90,13 @@ HARBOUR HB_EXP( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: EXP"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1096, "Argument error", "EXP"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: EXP"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1096, "Incorrect number of arguments", "EXP"); } } @@ -120,19 +108,13 @@ HARBOUR HB_INT( void ) hb_retnl( hb_parnd( 1 ) ); else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: INT"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1090, "Argument error", "INT"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: INT"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1090, "Incorrect number of arguments", "INT"); } } @@ -154,19 +136,13 @@ HARBOUR HB_LOG( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: LOG"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1095, "Argument error", "LOG"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: LOG"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1095, "Incorrect number of arguments", "LOG"); } } @@ -193,19 +169,13 @@ HARBOUR HB_MAX( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: MAX"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1093, "Argument error", "MAX"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: MAX"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1093, "Incorrect number of arguments", "MAX"); } } @@ -232,22 +202,19 @@ HARBOUR HB_MIN( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: MIN"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1092, "Argument error", "MIN"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: MIN"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1092, "Incorrect number of arguments", "MIN"); } } +/* TOFIX: In Clipper this is written in Clipper, see the source below, */ +/* and the error handling is NOT made here, but in the % operator */ + HARBOUR HB_MOD( void ) { /* @@ -284,10 +251,7 @@ FUNCTION MOD(cl_num, cl_base) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: %"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1085, "Argument error", "%"); } } @@ -320,19 +284,13 @@ HARBOUR HB_ROUND( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: ROUND"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1094, "Argument error", "ROUND"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: INT"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1094, "Incorrect number of arguments", "ROUND"); } } @@ -358,19 +316,13 @@ HARBOUR HB_SQRT( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: SQRT"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1097, "Argument error", "SQRT"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: SQRT"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1097, "Incorrect number of arguments", "SQRT"); } } diff --git a/harbour/source/rtl/set.c b/harbour/source/rtl/set.c index d16d10da83..d34d027875 100644 --- a/harbour/source/rtl/set.c +++ b/harbour/source/rtl/set.c @@ -158,6 +158,7 @@ static int open_handle (char * file_name, BOOL bMode, char * def_ext) S_IWRITE ); if (handle < 0) { + /* TOFIX: Make this error message Clipper compatible */ char error_message [32]; PHB_ITEM pError = hb_errNew(); sprintf( error_message, "create error %d: SET", errno ); @@ -549,7 +550,17 @@ HARBOUR HB_SET (void) break; case HB_SET_DECIMALS : hb_retni (hb_set.HB_SET_DECIMALS); - if (args > 1) hb_set.HB_SET_DECIMALS = set_number (pArg2, hb_set.HB_SET_DECIMALS); + if (args > 1) + { + if (set_number (pArg2, hb_set.HB_SET_DECIMALS) < 0) + { + hb_errorRT_BASE(EG_ARG, 2020, "Argument error", "SET"); + } + else + { + hb_set.HB_SET_DECIMALS = set_number (pArg2, hb_set.HB_SET_DECIMALS); + } + } break; case HB_SET_DEFAULT : if (hb_set.HB_SET_DEFAULT) hb_retc (hb_set.HB_SET_DEFAULT); @@ -583,7 +594,17 @@ HARBOUR HB_SET (void) break; case HB_SET_EPOCH : hb_retni (hb_set.HB_SET_EPOCH); - if (args > 1) hb_set.HB_SET_EPOCH = set_number (pArg2, hb_set.HB_SET_EPOCH); + if (args > 1) + { + if (set_number (pArg2, hb_set.HB_SET_EPOCH) < 0) + { + hb_errorRT_BASE(EG_ARG, 2020, "Argument error", "SET"); + } + else + { + hb_set.HB_SET_EPOCH = set_number (pArg2, hb_set.HB_SET_EPOCH); + } + } break; case HB_SET_ESCAPE : hb_retl (hb_set.HB_SET_ESCAPE); @@ -628,7 +649,17 @@ HARBOUR HB_SET (void) break; case HB_SET_MARGIN : hb_retni (hb_set.HB_SET_MARGIN); - if (args > 1) hb_set.HB_SET_MARGIN = set_number (pArg2, hb_set.HB_SET_MARGIN); + if (args > 1) + { + if (set_number (pArg2, hb_set.HB_SET_MARGIN) < 0) + { + hb_errorRT_BASE(EG_ARG, 2020, "Argument error", "SET"); + } + else + { + hb_set.HB_SET_MARGIN = set_number (pArg2, hb_set.HB_SET_MARGIN); + } + } break; case HB_SET_MCENTER : hb_retl (hb_set.HB_SET_MCENTER); @@ -636,7 +667,17 @@ HARBOUR HB_SET (void) break; case HB_SET_MESSAGE : hb_retni (hb_set.HB_SET_MESSAGE); - if (args > 1) hb_set.HB_SET_MESSAGE = set_number (pArg2, hb_set.HB_SET_MESSAGE); + if (args > 1) + { + if (set_number (pArg2, hb_set.HB_SET_MESSAGE) < 0) + { + hb_errorRT_BASE(EG_ARG, 2020, "Argument error", "SET"); + } + else + { + hb_set.HB_SET_MESSAGE = set_number (pArg2, hb_set.HB_SET_MESSAGE); + } + } break; case HB_SET_PATH : if (hb_set.HB_SET_PATH) hb_retc (hb_set.HB_SET_PATH); diff --git a/harbour/source/rtl/strings.c b/harbour/source/rtl/strings.c index 945c4d21b1..86de04eba4 100644 --- a/harbour/source/rtl/strings.c +++ b/harbour/source/rtl/strings.c @@ -165,19 +165,13 @@ HARBOUR HB_LTRIM( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: LTRIM"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1101, "Argument error", "LTRIM"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: LTRIM"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1101, "Incorrect number of arguments", "LTRIM"); } } @@ -211,23 +205,43 @@ HARBOUR HB_RTRIM( void ) hb_retclen(pText->value.szText, hb_strRTrimLen(pText->value.szText, pText->wLength, bAnySpace)); } else - /* Clipper doesn't error */ + { +#ifdef HB_STRICT_CLIPPER_COMPATIBILITY + /* Clipper doesn't error, but only in RTRIM. TRIM() throws an error, though */ hb_retc(""); +#else + hb_errorRT_BASE(EG_ARG, 1100, "Argument error", "RTRIM"); +#endif + } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: RTRIM"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1100, "Incorrect number of arguments", "RTRIM"); } } -/* synonymn for RTRIM */ +/* synonymn for RTRIM, with different error handling */ HARBOUR HB_TRIM( void ) { - HB_RTRIM(); + if( hb_pcount() > 0 ) + { + PHB_ITEM pText = hb_param(1, IT_STRING); + if( pText ) + { + BOOL bAnySpace = (hb_pcount() > 1? hb_parl(2): 0); + hb_retclen(pText->value.szText, hb_strRTrimLen(pText->value.szText, pText->wLength, bAnySpace)); + } + else + { + hb_errorRT_BASE(EG_ARG, 1100, "Argument error", "TRIM"); + } + } + else + { + /* QUESTION: Clipper catches this at compile time! */ + hb_errorRT_BASE(EG_ARG, 1100, "Incorrect number of arguments", "TRIM"); + } } /* trims leading and trailing spaces from a string */ @@ -470,19 +484,13 @@ HARBOUR HB_AT( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: AT"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1108, "Argument error", "AT"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: AT"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1108, "Incorrect number of arguments", "AT"); } } @@ -535,19 +543,13 @@ HARBOUR HB_CHR( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: CHR"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1104, "Argument error", "CHR"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: CHR"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1104, "Incorrect number of arguments", "CHR"); } } @@ -567,19 +569,13 @@ HARBOUR HB_ASC(void) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: ASC"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1107, "Argument error", "ASC"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: ASC"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1107, "Incorrect number of arguments", "ASC"); } } @@ -608,27 +604,18 @@ HARBOUR HB_LEFT( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: LEFT"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1124, "Argument error", "LEFT"); } } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: LEFT"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1124, "Argument error", "LEFT"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: LEFT"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1124, "Incorrect number of arguments", "LEFT"); } } @@ -657,27 +644,20 @@ HARBOUR HB_RIGHT( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: RIGHT"); - hb_errLaunch(pError); - hb_errRelease(pError); + /* Clipper doesn't error */ + hb_retc(""); } } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: RIGHT"); - hb_errLaunch(pError); - hb_errRelease(pError); + /* Clipper doesn't error */ + hb_retc(""); } } else { - /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: RIGHT"); - hb_errLaunch(pError); - hb_errRelease(pError); + /* Clipper doesn't error */ + hb_retc(""); } } @@ -729,19 +709,13 @@ HARBOUR HB_SUBSTR( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: SUBSTR"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1110, "Argument error", "SUBSTR"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: SUBSTR"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1110, "Incorrect number of arguments", "SUBSTR"); } } @@ -769,19 +743,13 @@ HARBOUR HB_LOWER( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: LOWER"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1103, "Argument error", "LOWER"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: LOWER"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1103, "Incorrect number of arguments", "LOWER"); } } @@ -809,19 +777,13 @@ HARBOUR HB_UPPER( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: LOWER"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1102, "Argument error", "UPPER"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: LOWER"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1102, "Incorrect number of arguments", "UPPER"); } } @@ -851,6 +813,10 @@ HARBOUR HB_REPLICATE( void ) memcpy(szPtr, szText, lLen); szPtr += lLen; } + + /* TODO: Check for string overflow */ + /* hb_errorRT_BASE(EG_ARG, 1234, "String overflow", "REPLICATE"); */ + hb_retclen(szResult, lLen * lTimes); hb_xfree(szResult); } @@ -859,19 +825,13 @@ HARBOUR HB_REPLICATE( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: REPLICATE"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1106, "Argument error", "REPLICATE"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: REPLICATE"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1106, "Incorrect number of arguments", "REPLICATE"); } } @@ -891,6 +851,9 @@ HARBOUR HB_SPACE( void ) { char *szResult = (char *)hb_xgrab(lLen + 1); + /* TODO: Check for string overflow */ + /* hb_errorRT_BASE(EG_ARG, 1233, "String overflow", "SPACE"); */ + memset(szResult, ' ', lLen); hb_retclen(szResult, lLen); hb_xfree(szResult); @@ -900,19 +863,13 @@ HARBOUR HB_SPACE( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: SPACE"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1105, "Argument error", "SPACE"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: SPACE"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1105, "Incorrect number of arguments", "SPACE"); } } @@ -1138,19 +1095,13 @@ HARBOUR HB_VAL( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: VAL"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1098, "Argument error", "VAL"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: VAL"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1098, "Incorrect number of arguments", "VAL"); } } @@ -1313,18 +1264,12 @@ HARBOUR HB_STR( void ) } else { - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Argument error: STR"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1099, "Argument error", "STR"); } } else { /* QUESTION: Clipper catches this at compile time! */ - PHB_ITEM pError = hb_errNew(); - hb_errPutDescription(pError, "Incorrect number of arguments: STR"); - hb_errLaunch(pError); - hb_errRelease(pError); + hb_errorRT_BASE(EG_ARG, 1099, "Incorrect number of arguments", "STR"); } } diff --git a/harbour/source/rtl/transfrm.c b/harbour/source/rtl/transfrm.c index 9a6fe3e68c..a953d13ecb 100644 --- a/harbour/source/rtl/transfrm.c +++ b/harbour/source/rtl/transfrm.c @@ -625,23 +625,13 @@ HARBOUR HB_TRANSFORM( void ) } default: { - PHB_ITEM pError = hb_errNew(); - - hb_errPutDescription(pError, "Argument error: TRANSFORM"); - hb_errLaunch(pError); - hb_errRelease(pError); - hb_retc(""); + hb_errorRT_BASE(EG_ARG, 1122, "Argument error", "TRANSFORM"); } } } else { - PHB_ITEM pError = hb_errNew(); - - hb_errPutDescription(pError, "Argument error: TRANSFORM"); - hb_errLaunch(pError); - hb_errRelease(pError); - hb_retc(""); + hb_errorRT_BASE(EG_ARG, 1122, "Argument error", "TRANSFORM"); } } else /* No picture supplied */ @@ -688,12 +678,7 @@ HARBOUR HB_TRANSFORM( void ) } default: { - PHB_ITEM pError = hb_errNew(); - - hb_errPutDescription(pError, "Argument error: TRANSFORM"); - hb_errLaunch(pError); - hb_errRelease(pError); - hb_retc(""); + hb_errorRT_BASE(EG_ARG, 1122, "Argument error", "TRANSFORM"); } } }