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
This commit is contained in:
Viktor Szakats
2013-02-22 10:07:05 +00:00
parent e85a49339b
commit b2e8dbcea6
6 changed files with 180 additions and 95 deletions

View File

@@ -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

View File

@@ -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 )

View File

@@ -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

View File

@@ -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, ) } )

View File

@@ -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 := { ;
"", ;

View File

@@ -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