diff --git a/harbour/ChangeLog.txt b/harbour/ChangeLog.txt index c502dd4e07..b70a8d6fa7 100644 --- a/harbour/ChangeLog.txt +++ b/harbour/ChangeLog.txt @@ -10,6 +10,35 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2013-02-22 11:06 UTC+0100 Viktor Szakats (harbour syenar.net) + * utils/hbmk2/hbmk2.prg + + support '-version', for local consistency with other + (regular) double dashed options + + will now warn if .lib/.a extension is used with -hblib/-hbimplib + modes or .dll extension with -hbdyn/-hbdynvm modes in -o option value. + It's unnecessary unless you want to make your .hbp file non-portable. + + * contrib/hbtest/core.prg + ! fixed to trim line ending spaces in output + ! fixed to handle RTEs with values containing control chars + * use hb_StrReplace() instead of repeated StrTran()s + ! set language to EN while evaluating the test expressions + so that RTEs come in one common language + ! fixed to escape more control chars in strings + ! control char escaping missing for Memo strings + * hbformatted (with 1 manual correction) + + * utils/hbtest/hbtest.prg + ! fixed to trim line ending spaces in output + ! fixed to handle RTEs with values containing control chars + * made more hbformat friendly + + * contrib/hbtest/tests/test.prg + + added self-tests + + * contrib/xhb/xhbmemo.prg + * space + 2013-02-21 23:31 UTC+0100 Viktor Szakats (harbour syenar.net) * src/compiler/ppcomp.c + '#pragma nostartproc=' / '#pragma -n' will now return diff --git a/harbour/contrib/hbtest/core.prg b/harbour/contrib/hbtest/core.prg index 90121adba3..c80f1bc5b3 100644 --- a/harbour/contrib/hbtest/core.prg +++ b/harbour/contrib/hbtest/core.prg @@ -4,9 +4,9 @@ /* * Harbour Project source code: - * Regression tests for the runtime library (main) + * Regression tests for the runtime library * - * Copyright 1999-2012 Viktor Szakats (harbour syenar.net) + * Copyright 1999-2013 Viktor Szakats (harbour syenar.net) * www - http://harbour-project.org * * This program is free software; you can redistribute it and/or modify @@ -56,7 +56,6 @@ #define TEST_RESULT_COL2_WIDTH 15 #define TEST_RESULT_COL3_WIDTH 40 #define TEST_RESULT_COL4_WIDTH 85 -#define TEST_RESULT_COL5_WIDTH 85 THREAD STATIC t_hParams := { => } @@ -77,10 +76,13 @@ PROCEDURE hbtest_Call( cBlock, bBlock, xResultExpected ) LOCAL xResult LOCAL oError LOCAL lPPError + LOCAL lRTE LOCAL lFailed LOCAL bOut + LOCAL cLangOld + IF HB_ISSTRING( cBlock ) lPPError := .F. ELSE @@ -88,46 +90,59 @@ PROCEDURE hbtest_Call( cBlock, bBlock, xResultExpected ) lPPError := .T. ENDIF + cLangOld := hb_langSelect( "EN" ) /* to always have RTEs in one language */ + BEGIN SEQUENCE WITH ErrorBlock( {| oError | Break( oError ) } ) xResult := Eval( bBlock ) + lRTE := .F. RECOVER USING oError xResult := ErrorMessage( oError ) + lRTE := .T. END SEQUENCE - IF !( ValType( xResult ) == ValType( xResultExpected ) ) - IF HB_ISSTRING( xResultExpected ) .AND. ValType( xResult ) $ "ABOHPS" - lFailed := !( XToStr( xResult, .F. ) == xResultExpected ) - ELSE - lFailed := .T. - ENDIF + hb_langSelect( cLangOld ) + + IF lRTE + lFailed := !( XToStr( xResult, .F. ) == XToStr( xResultExpected, .F. ) ) ELSE - lFailed := !( xResult == xResultExpected ) + IF !( ValType( xResult ) == ValType( xResultExpected ) ) + IF HB_ISSTRING( xResultExpected ) .AND. ValType( xResult ) $ "ABOHPS" + lFailed := !( XToStr( xResult, .F. ) == xResultExpected ) + ELSE + lFailed := .T. + ENDIF + ELSE + lFailed := !( xResult == xResultExpected ) + ENDIF ENDIF IF lFailed .OR. lPPError .OR. hb_HGetDef( t_hParams, "showall", .T. ) bOut := hb_HGetDef( t_hParams, "output", {| cMsg | OutStd( cMsg ) } ) IF lFailed - Eval( bOut, PadR( iif( lFailed, "!", " " ), TEST_RESULT_COL1_WIDTH ) + " " +; - PadR( ProcName( 1 ) + "(" + hb_ntos( ProcLine( 1 ) ) + ")", TEST_RESULT_COL2_WIDTH ) + " " +; - PadR( cBlock, TEST_RESULT_COL3_WIDTH ) +; - hb_eol() +; - Space( 5 ) + " Result: " + XToStr( xResult, .F. ) +; - hb_eol() +; - Space( 5 ) + "Expected: " + XToStr( xResultExpected, .F. ) +; - hb_eol() ) + Eval( bOut, ; + PadR( iif( lFailed, "!", " " ), TEST_RESULT_COL1_WIDTH ) + " " + ; + PadR( ProcName( 1 ) + "(" + hb_ntos( ProcLine( 1 ) ) + ")", TEST_RESULT_COL2_WIDTH ) + " " + ; + RTrim( cBlock ) + ; + hb_eol() + ; + Space( 5 ) + " Result: " + XToStr( xResult, .F. ) + ; + hb_eol() + ; + Space( 5 ) + "Expected: " + XToStr( xResultExpected, .F. ) + ; + hb_eol() ) ELSE - Eval( bOut, PadR( iif( lFailed, "!", " " ), TEST_RESULT_COL1_WIDTH ) + " " +; - PadR( ProcName( 1 ) + "(" + hb_ntos( ProcLine( 1 ) ) + ")", TEST_RESULT_COL2_WIDTH ) + " " +; - PadR( cBlock, TEST_RESULT_COL3_WIDTH ) + " -> " +; - PadR( XToStr( xResult, .F. ), TEST_RESULT_COL4_WIDTH ) + " | " +; - PadR( XToStr( xResultExpected, .F. ), TEST_RESULT_COL5_WIDTH ) +; - hb_eol() ) + Eval( bOut, ; + PadR( iif( lFailed, "!", " " ), TEST_RESULT_COL1_WIDTH ) + " " + ; + PadR( ProcName( 1 ) + "(" + hb_ntos( ProcLine( 1 ) ) + ")", TEST_RESULT_COL2_WIDTH ) + " " + ; + PadR( cBlock, TEST_RESULT_COL3_WIDTH ) + " -> " + ; + PadR( XToStr( xResult, .F. ), TEST_RESULT_COL4_WIDTH ) + " | " + ; + XToStr( xResultExpected, .F. ) + ; + hb_eol() ) ENDIF ENDIF RETURN STATIC FUNCTION ErrorMessage( oError ) + LOCAL cMessage := "" LOCAL tmp @@ -195,21 +210,26 @@ STATIC FUNCTION ErrorMessage( oError ) STATIC FUNCTION XToStr( xValue, lInString ) + STATIC sc_hReplace := { ; + Chr( 0 ) => '" + Chr( 0 ) + "', ; + Chr( 7 ) => '" + Chr( 7 ) + "', ; + Chr( 8 ) => '" + Chr( 8 ) + "', ; + Chr( 9 ) => '" + Chr( 9 ) + "', ; + Chr( 10 ) => '" + Chr( 10 ) + "', ; + Chr( 11 ) => '" + Chr( 11 ) + "', ; + Chr( 12 ) => '" + Chr( 12 ) + "', ; + Chr( 13 ) => '" + Chr( 13 ) + "' } + SWITCH ValType( xValue ) - CASE "C" - - xValue := StrTran( xValue, Chr( 0 ), '" + Chr( 0 ) + "' ) - xValue := StrTran( xValue, Chr( 9 ), '" + Chr( 9 ) + "' ) - xValue := StrTran( xValue, Chr( 10 ), '" + Chr( 10 ) + "' ) - xValue := StrTran( xValue, Chr( 13 ), '" + Chr( 13 ) + "' ) - xValue := StrTran( xValue, Chr( 26 ), '" + Chr( 26 ) + "' ) - - RETURN iif( lInString, xValue, '"' + xValue + '"' ) - CASE "N" ; RETURN hb_ntos( xValue ) - CASE "D" ; RETURN iif( lInString, "0d" + iif( Empty( xValue ), "00000000", DToS( xValue ) ), 'hb_SToD("' + DToS( xValue ) + '")' ) + CASE "D" ; RETURN iif( lInString, "0d" + iif( Empty( xValue ), "00000000", DToS( xValue ) ), 'hb_SToD( "' + DToS( xValue ) + '" )' ) CASE "U" ; RETURN "NIL" - CASE "M" ; RETURN "M:" + iif( lInString, xValue, '"' + xValue + '"' ) + CASE "C" + xValue := hb_StrReplace( xValue, sc_hReplace ) + RETURN iif( lInString, xValue, '"' + xValue + '"' ) + CASE "M" + xValue := hb_StrReplace( xValue, sc_hReplace ) + RETURN "M:" + iif( lInString, xValue, '"' + xValue + '"' ) ENDSWITCH RETURN hb_CStr( xValue ) diff --git a/harbour/contrib/hbtest/tests/test.prg b/harbour/contrib/hbtest/tests/test.prg index b4a6040e22..bcf5d9513c 100644 --- a/harbour/contrib/hbtest/tests/test.prg +++ b/harbour/contrib/hbtest/tests/test.prg @@ -6,7 +6,17 @@ PROCEDURE Main() - HBTEST 2 + 2 IS 4 - HBTEST 2 + 2 IS 5 + HBTEST 2 + 2 IS 4 + HBTEST 2 + 2 IS 5 + HBTEST "a" + "b" IS "ab" + HBTEST 2 + "" IS "E 1 BASE 1081 Argument error (+) OS:0 #:0 A:2:N:2;C: F:S" + HBTEST 2 + Chr( 9 ) IS "E 1 BASE 1081 Argument error (+) OS:0 #:0 A:2:N:2;C:" + Chr( 9 ) + " F:S" + HBTEST Chr( 0 ) IS Chr( 0 ) + HBTEST 0d20111213 IS 0d20111213 + HBTEST NIL IS NIL + HBTEST .T. IS .T. + HBTEST .T. IS .F. + HBTEST .T. - .F. IS "E 1 BASE 1082 Argument error (-) OS:0 #:0 A:2:L:.T.;L:.F. F:S" + HBTEST " " + " " IS " " RETURN diff --git a/harbour/contrib/xhb/xhbmemo.prg b/harbour/contrib/xhb/xhbmemo.prg index 171e85b061..0193f280ce 100644 --- a/harbour/contrib/xhb/xhbmemo.prg +++ b/harbour/contrib/xhb/xhbmemo.prg @@ -104,7 +104,7 @@ METHOD MemoInit( xUDF ) CLASS xhb_TMemoEditor K_BS, ; K_CTRL_BS, ; K_TAB, ; - K_SH_TAB } + K_SH_TAB } ::aAsciiKeys := Array( 255 - 31 ) // asc codes greater than space. AEval( ::aAsciiKeys, {| c, i | iif( Empty( c ), ::aAsciiKeys[ i ] := i + 31, ) } ) diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index 819f0da5df..8d1fbe8983 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -1585,7 +1585,8 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit RETURN _EXIT_OK #endif - CASE cParamL == "--version" + CASE cParamL == "-version" .OR. ; + cParamL == "--version" ShowHeader( hbmk ) RETURN _EXIT_OK @@ -2871,8 +2872,11 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit IF ! Empty( tmp ) tmp := hb_DirSepToOS( tmp ) hb_FNameSplit( tmp, @cDir, @cName, @cExt ) - IF Lower( cExt ) == ".exe" .AND. hbmk_TARGETTYPE( hbmk ) == "hbexe" - _hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Non-portable option value: %1$s. Delete '.exe' extension." ), ParamToString( aParam ) ) ) + tmp1 := hbmk_TARGETTYPE( hbmk ) + IF ( Lower( cExt ) == ".exe" .AND. tmp1 == "hbexe" ) .OR. ; + ( Lower( cExt ) == ".dll" .AND. HBMK_IS_IN( tmp1, "hbdyn|hbdynvm" ) ) .OR. ; + ( HBMK_IS_IN( Lower( cExt ), ".lib|.a" ) .AND. HBMK_IS_IN( tmp1, "hblib|hbimplib" ) ) + _hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Non-portable option value: %1$s. Delete '%2$s' extension." ), ParamToString( aParam ), cExt ) ) ENDIF DO CASE CASE Empty( cDir ) @@ -15443,7 +15447,7 @@ STATIC PROCEDURE ShowHelp( hbmk, lFull, lLong ) { "-harbourhelp" , hb_StrFormat( I_( "Harbour compiler help (all Harbour compiler options are accepted as is by %1$s)" ), _SELF_NAME_ ) }, ; { "-credits" , I_( "display credits (via Harbour compiler)" ) }, ; { "-build" , I_( "display detailed build information (via Harbour compiler)" ) }, ; - { "--version" , I_( "display version header only" ) } } + { "-version|--version" , I_( "display version header only" ) } } LOCAL aHdr_Exit := { ; "", ; diff --git a/harbour/utils/hbtest/hbtest.prg b/harbour/utils/hbtest/hbtest.prg index 24ec750fe2..591beb04ae 100644 --- a/harbour/utils/hbtest/hbtest.prg +++ b/harbour/utils/hbtest/hbtest.prg @@ -198,12 +198,14 @@ STATIC PROCEDURE Main_LAST() RETURN STATIC PROCEDURE TEST_BEGIN( cParam ) + LOCAL bErrorOld s_nStartTime := Seconds() - s_lShowAll := "/ALL" $ Upper( cParam ) .OR. ; - "-ALL" $ Upper( cParam ) + s_lShowAll := ; + "/ALL" $ Upper( cParam ) .OR. ; + "-ALL" $ Upper( cParam ) s_aSkipList := ListToNArray( CMDLGetValue( Upper( cParam ), "/SKIP:", "" ) ) IF Empty( s_aSkipList ) @@ -236,23 +238,27 @@ STATIC PROCEDURE TEST_BEGIN( cParam ) /* Feedback */ - OutMsg( s_nFhnd, "---------------------------------------------------------------------------" + hb_eol() +; - " Version: " + Version() + hb_eol() ) + OutMsg( s_nFhnd, ; + "---------------------------------------------------------------------------" + hb_eol() +; + " Version: " + Version() + hb_eol() ) #ifdef __HARBOUR__ - OutMsg( s_nFhnd, " Compiler: " + hb_Compiler() + hb_eol() ) + OutMsg( s_nFhnd, ; + " Compiler: " + hb_Compiler() + hb_eol() ) #endif - OutMsg( s_nFhnd, " OS: " + OS() + hb_eol() +; - " Date, Time: " + DToC( Date() ) + " " + Time() + hb_eol() +; - "Shortcut opt.: " + iif( s_lShortcut, "ON", "OFF" ) + hb_eol() +; - " Switches: " + cParam + hb_eol() +; - "===========================================================================" + hb_eol() ) + OutMsg( s_nFhnd, ; + " OS: " + OS() + hb_eol() +; + " Date, Time: " + DToC( Date() ) + " " + Time() + hb_eol() +; + "Shortcut opt.: " + iif( s_lShortcut, "ON", "OFF" ) + hb_eol() +; + " Switches: " + cParam + hb_eol() +; + "===========================================================================" + hb_eol() ) - OutMsg( s_nFhnd, PadR( "R", TEST_RESULT_COL1_WIDTH ) + " " +; - PadR( "No. Line", TEST_RESULT_COL2_WIDTH ) + " " +; - PadR( "TestCall()", TEST_RESULT_COL3_WIDTH ) + " -> " +; - PadR( "Result", TEST_RESULT_COL4_WIDTH ) + " | " +; - PadR( "Expected", TEST_RESULT_COL5_WIDTH ) + hb_eol() +; - "---------------------------------------------------------------------------" + hb_eol() ) + OutMsg( s_nFhnd, ; + PadR( "R", TEST_RESULT_COL1_WIDTH ) + " " +; + PadR( "No. Line", TEST_RESULT_COL2_WIDTH ) + " " +; + PadR( "TestCall()", TEST_RESULT_COL3_WIDTH ) + " -> " +; + PadR( "Result", TEST_RESULT_COL4_WIDTH ) + " | " +; + "Expected" + hb_eol() +; + "---------------------------------------------------------------------------" + hb_eol() ) /* NOTE: mxNotHere intentionally not declared */ PUBLIC mcLongerNameThen10Chars := "Long String Name!" @@ -280,7 +286,7 @@ STATIC PROCEDURE TEST_BEGIN( cParam ) PUBLIC maArray := { 9898 } #ifndef __XPP__ - //rddSetDefault( "DBFCDX" ) + // rddSetDefault( "DBFCDX" ) #endif bErrorOld := ErrorBlock( {| oError | Break( oError ) } ) @@ -330,10 +336,12 @@ FUNCTION TEST_DBFAvail() RETURN s_lDBFAvail PROCEDURE TEST_CALL( cBlock, bBlock, xResultExpected ) + LOCAL xResult LOCAL oError LOCAL bOldError LOCAL lPPError + LOCAL lRTE LOCAL lFailed LOCAL lSkipped @@ -359,20 +367,26 @@ PROCEDURE TEST_CALL( cBlock, bBlock, xResultExpected ) BEGIN SEQUENCE xResult := Eval( bBlock ) + lRTE := .F. RECOVER USING oError xResult := ErrorMessage( oError ) + lRTE := .T. END SEQUENCE ErrorBlock( bOldError ) - IF !( ValType( xResult ) == ValType( xResultExpected ) ) - IF ValType( xResultExpected ) == "C" .AND. ValType( xResult ) $ "ABMO" - lFailed := !( XToStr( xResult ) == xResultExpected ) - ELSE - lFailed := .T. - ENDIF + IF lRTE + lFailed := !( XToStr( xResult ) == XToStr( xResultExpected ) ) ELSE - lFailed := !( xResult == xResultExpected ) + IF !( ValType( xResult ) == ValType( xResultExpected ) ) + IF ValType( xResultExpected ) == "C" .AND. ValType( xResult ) $ "ABMO" + lFailed := !( XToStr( xResult ) == xResultExpected ) + ELSE + lFailed := .T. + ENDIF + ELSE + lFailed := !( xResult == xResultExpected ) + ENDIF ENDIF ENDIF @@ -380,25 +394,23 @@ PROCEDURE TEST_CALL( cBlock, bBlock, xResultExpected ) IF s_lShowAll .OR. lFailed .OR. lSkipped .OR. lPPError IF lFailed - - OutMsg( s_nFhnd, PadR( iif( lFailed, "!", iif( lSkipped, "S", " " ) ), TEST_RESULT_COL1_WIDTH ) + " " +; - PadR( Str( s_nCount, 4 ) + " " + ProcName( 1 ) + "(" + LTrim( Str( ProcLine( 1 ), 5 ) ) + ")", TEST_RESULT_COL2_WIDTH ) + " " +; - PadR( cBlock, TEST_RESULT_COL3_WIDTH ) +; - hb_eol() +; - Space( 5 ) + " Result: " + XToStr( xResult ) +; - hb_eol() +; - Space( 5 ) + "Expected: " + XToStr( xResultExpected ) +; - hb_eol() ) - + OutMsg( s_nFhnd, ; + PadR( iif( lFailed, "!", iif( lSkipped, "S", " " ) ), TEST_RESULT_COL1_WIDTH ) + " " +; + PadR( Str( s_nCount, 4 ) + " " + ProcName( 1 ) + "(" + LTrim( Str( ProcLine( 1 ), 5 ) ) + ")", TEST_RESULT_COL2_WIDTH ) + " " +; + RTrim( cBlock ) +; + hb_eol() +; + Space( 5 ) + " Result: " + XToStr( xResult ) +; + hb_eol() +; + Space( 5 ) + "Expected: " + XToStr( xResultExpected ) +; + hb_eol() ) ELSE - - OutMsg( s_nFhnd, PadR( iif( lFailed, "!", iif( lSkipped, "S", " " ) ), TEST_RESULT_COL1_WIDTH ) + " " +; - PadR( Str( s_nCount, 4 ) + " " + ProcName( 1 ) + "(" + LTrim( Str( ProcLine( 1 ), 5 ) ) + ")", TEST_RESULT_COL2_WIDTH ) + " " +; - PadR( cBlock, TEST_RESULT_COL3_WIDTH ) + " -> " +; - PadR( XToStr( xResult ), TEST_RESULT_COL4_WIDTH ) + " | " +; - PadR( XToStr( xResultExpected ), TEST_RESULT_COL5_WIDTH ) +; - hb_eol() ) - + OutMsg( s_nFhnd, ; + PadR( iif( lFailed, "!", iif( lSkipped, "S", " " ) ), TEST_RESULT_COL1_WIDTH ) + " " +; + PadR( Str( s_nCount, 4 ) + " " + ProcName( 1 ) + "(" + LTrim( Str( ProcLine( 1 ), 5 ) ) + ")", TEST_RESULT_COL2_WIDTH ) + " " +; + PadR( cBlock, TEST_RESULT_COL3_WIDTH ) + " -> " +; + PadR( XToStr( xResult ), TEST_RESULT_COL4_WIDTH ) + " | " +; + RTrim( XToStr( xResultExpected ) ) +; + hb_eol() ) ENDIF ENDIF @@ -424,20 +436,23 @@ STATIC PROCEDURE TEST_END() s_nEndTime := Seconds() - OutMsg( s_nFhnd, "===========================================================================" + hb_eol() +; - "Test calls passed: " + Str( s_nPass ) + " ( " + LTrim( Str( ( 1 - ( s_nFail / s_nPass ) ) * 100, 6, 2 ) ) + " % )" + hb_eol() +; - "Test calls failed: " + Str( s_nFail ) + " ( " + LTrim( Str( ( s_nFail / s_nPass ) * 100, 6, 2 ) ) + " % )" + hb_eol() +; - " ----------" + hb_eol() +; - " Total: " + Str( s_nPass + s_nFail ) +; - " ( Time elapsed: " + LTrim( Str( s_nEndTime - s_nStartTime ) ) + " seconds )" + hb_eol() +; - hb_eol() ) + OutMsg( s_nFhnd, ; + "===========================================================================" + hb_eol() +; + "Test calls passed: " + Str( s_nPass ) + " ( " + LTrim( Str( ( 1 - ( s_nFail / s_nPass ) ) * 100, 6, 2 ) ) + " % )" + hb_eol() +; + "Test calls failed: " + Str( s_nFail ) + " ( " + LTrim( Str( ( s_nFail / s_nPass ) * 100, 6, 2 ) ) + " % )" + hb_eol() +; + " ----------" + hb_eol() +; + " Total: " + Str( s_nPass + s_nFail ) +; + " ( Time elapsed: " + LTrim( Str( s_nEndTime - s_nStartTime ) ) + " seconds )" + hb_eol() +; + hb_eol() ) IF s_nFail != 0 IF "CLIPPER (R)" $ Upper( Version() ) - OutMsg( s_nFhnd, "WARNING ! Failures detected using CA-Cl*pper." + hb_eol() +; - "Please fix those expected results which are not bugs in CA-Cl*pper itself." + hb_eol() ) + OutMsg( s_nFhnd, ; + "WARNING ! Failures detected using CA-Cl*pper." + hb_eol() +; + "Please fix those expected results which are not bugs in CA-Cl*pper itself." + hb_eol() ) ELSE - OutMsg( s_nFhnd, "WARNING ! Failures detected" + hb_eol() ) + OutMsg( s_nFhnd, ; + "WARNING ! Failures detected" + hb_eol() ) ENDIF ENDIF @@ -450,6 +465,7 @@ STATIC PROCEDURE TEST_END() RETURN FUNCTION XToStr( xValue ) + LOCAL cType := ValType( xValue ) DO CASE @@ -476,6 +492,7 @@ FUNCTION XToStr( xValue ) RETURN "" FUNCTION XToStrE( xValue ) + LOCAL cType := ValType( xValue ) DO CASE @@ -502,6 +519,7 @@ FUNCTION XToStrE( xValue ) RETURN "" FUNCTION XToStrX( xValue ) + LOCAL cType := ValType( xValue ) LOCAL tmp @@ -543,6 +561,7 @@ FUNCTION XToStrX( xValue ) RETURN "" STATIC FUNCTION ErrorMessage( oError ) + LOCAL cMessage := "" LOCAL tmp @@ -609,6 +628,7 @@ STATIC FUNCTION ErrorMessage( oError ) RETURN cMessage STATIC FUNCTION ListToNArray( cString ) + LOCAL aArray := {} LOCAL nPos @@ -624,6 +644,7 @@ STATIC FUNCTION ListToNArray( cString ) RETURN aArray STATIC FUNCTION CMDLGetValue( cCommandLine, cName, cRetVal ) + LOCAL tmp, tmp1 IF ( tmp := At( cName, cCommandLine ) ) > 0 @@ -645,6 +666,7 @@ FUNCTION hb_SToD( cDate ) #ifndef __XPP__ FUNCTION hb_SToD( cDate ) + LOCAL cOldDateFormat LOCAL dDate