2013-01-22 00:37 UTC+0100 Viktor Szakats (harbour syenar.net)

* utils/hbmk2/hbmk2.prg
    * code cleanup to ease adding linker message exceptions
    * unused functions enclosed in '#if 0' guards
    + show warning for options that are only valid on command line
      and ignored when used inside .hbp/.hbm files.
    - deleted compatibility features:
        - '-arch=' option (use '-platform=' instead)
          Notice it will now be passed to Harbour compiler and possibly
          interpreted as '-a' option, so it's better to update it _now_.
        - '${hb_arch}' compatibility macro (use '${hb_platform}' instead)
        - 'mt=mt' .hbc command (use 'mt=yes' instead)
    * '-mwindows' and '-mconsole' legacy options will now issue
      a warning with suggested replacement options (-gui/-std)
    + hbmk2 will now issue a warning if certain known low-level linker
      options are used. Current list is: -Wl,--allow-multiple-definition,
      -force:multiple, -w-dpl. These options are ideal if the goal
      is to shoot yourself in the foot, otherwise they are not 
      recommended.

  * contrib/hbnf/clrsel.prg
  * contrib/hbnf/tests/clrsel.prg
    ! fixed obscure unicode issue

  * utils/hbtest/rt_class.prg
    * applied tests/fixcase.hb
    % use new Harbour functions in Harbour-only code

  * extras/httpsrv/uhttpd.prg
    % use new Harbour function
This commit is contained in:
Viktor Szakats
2013-01-21 23:41:05 +00:00
parent d7eaeebc6a
commit 07cba6a57f
6 changed files with 198 additions and 136 deletions

View File

@@ -10,6 +10,37 @@
* Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment
*/
2013-01-22 00:37 UTC+0100 Viktor Szakats (harbour syenar.net)
* utils/hbmk2/hbmk2.prg
* code cleanup to ease adding linker message exceptions
* unused functions enclosed in '#if 0' guards
+ show warning for options that are only valid on command line
and ignored when used inside .hbp/.hbm files.
- deleted compatibility features:
- '-arch=' option (use '-platform=' instead)
Notice it will now be passed to Harbour compiler and possibly
interpreted as '-a' option, so it's better to update it _now_.
- '${hb_arch}' compatibility macro (use '${hb_platform}' instead)
- 'mt=mt' .hbc command (use 'mt=yes' instead)
* '-mwindows' and '-mconsole' legacy options will now issue
a warning with suggested replacement options (-gui/-std)
+ hbmk2 will now issue a warning if certain known low-level linker
options are used. Current list is: -Wl,--allow-multiple-definition,
-force:multiple, -w-dpl. These options are ideal if the goal
is to shoot yourself in the foot, otherwise they are not
recommended.
* contrib/hbnf/clrsel.prg
* contrib/hbnf/tests/clrsel.prg
! fixed obscure unicode issue
* utils/hbtest/rt_class.prg
* applied tests/fixcase.hb
% use new Harbour functions in Harbour-only code
* extras/httpsrv/uhttpd.prg
% use new Harbour function
2013-01-21 16:36 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* harbour/src/vm/classes.c
% small speed optimization for inline methods
@@ -47,7 +78,7 @@
2013-01-21 00:10 UTC+0100 Viktor Szakats (harbour syenar.net)
* src/rtl/hbfilehi.prg
! hb_PathRelativize() with a lForceRelative == .T. option
might have return wrong result if the base directory had symlinks.
might have returned wrong result if the base directory had symlinks.
As a workaround/hack, now the relative path will only be returned
if it actually exists. Otherwise the non-relative variant will
be returned.
@@ -55,7 +86,7 @@
in (default) non-incremental mode.
* utils/hbmk2/hbmk2.prg
! fixed to list missing symbols once even reported multiple
! fixed to list missing symbols once even if reported multiple
times in the linker output.
! fixed to not list symbols as missing if reported in certain
different error situations (f.e. as doubly defined symbol).

View File

@@ -277,7 +277,7 @@ STATIC FUNCTION _ftShowIt( aOpt )
CASE "D" // Desktop Background
SetColor( aClr[ 1 ] )
BkGrnd( 19, 43, 22, 64, hb_UTF8ToStrBox( aOpt[ C_CHAR ] ) )
BkGrnd( 19, 43, 22, 64, aOpt[ C_CHAR ] )
EXIT
CASE "T" // Title
@@ -462,7 +462,11 @@ STATIC FUNCTION _ftClrPut( cClrStr, nElem, cClr )
STATIC FUNCTION _ftDeskChar( aOpt )
LOCAL aChar := { " ", "░", "▒", "▓" }
LOCAL aChar := { ;
hb_UTF8ToStrBox( " " ), ;
hb_UTF8ToStrBox( "░" ), ;
hb_UTF8ToStrBox( "▒" ), ;
hb_UTF8ToStrBox( "▓" ) }
LOCAL cChar := aOpt[ C_CHAR ]
LOCAL cClr := aOpt[ C_CLR ]
LOCAL nElem := hb_AScan( aChar, cChar,,, .T. )
@@ -476,7 +480,7 @@ STATIC FUNCTION _ftDeskChar( aOpt )
// .... draw the choices on the screen
SetColor( cClr )
FOR n := 1 TO Len( aChar )
hb_DispOutAt( n + 18, 29, Replicate( hb_UTF8ToStr( aChar[ n ] ), 10 ) )
hb_DispOutAtBox( n + 18, 29, Replicate( aChar[ n ], 10 ) )
NEXT
n := nElem + 18

View File

@@ -33,7 +33,7 @@ PROCEDURE Main( cVidMode )
// .... a typical application might have the following different settings
// normally these would be stored in a .dbf/.dbv
aClrs := { ;
{ "Desktop", "N/BG", "D", hb_UTF8ToStr( "" ) }, ;
{ "Desktop", "N/BG", "D", hb_UTF8ToStrBox( "" ) }, ;
{ "Title", "N/W", "T" }, ;
{ "Top Menu", "N/BG,N/W,W+/BG,W+/N,GR+/N", "M" }, ;
{ "Sub Menu", "W+/N*,GR+/N*,GR+/N*,W+/R,G+/R", "M" }, ;

View File

@@ -1836,13 +1836,14 @@ FUNCTION uhttpd_join( cSeparator, aData )
LOCAL cRet := "", nI
FOR nI := 1 TO Len( aData )
IF nI > 1; cRet += cSeparator
IF nI > 1
cRet += cSeparator
ENDIF
SWITCH ValType( aData[ nI ] )
CASE "C"
CASE "M"; cRet += aData[ nI ]; EXIT
CASE "N"; cRet += LTrim( Str( aData[ nI ] ) ); EXIT
CASE "D"; cRet += iif( ! Empty( aData[ nI ] ), DToC( aData[ nI ] ), "" ); EXIT
CASE "M" ; cRet += aData[ nI ]; EXIT
CASE "N" ; cRet += hb_ntos( aData[ nI ] ); EXIT
CASE "D" ; cRet += iif( ! Empty( aData[ nI ] ), DToC( aData[ nI ] ), "" ); EXIT
ENDSWITCH
NEXT

View File

@@ -180,6 +180,7 @@ EXTERNAL hbmk_KEYW
#define _TARG_COMP 2
#define _TARG_CPU 3
#define _PAR_NEW( cParam, cFileName, nLine ) { cParam, cFileName, nLine }
#define _PAR_cParam 1
#define _PAR_cFileName 2
#define _PAR_nLine 3
@@ -1413,7 +1414,6 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel )
CASE Left( cParamL, 10 ) == "-compiler=" ; ParseCOMPPLATCPU( hbmk, SubStr( cParam, 11 ), _TARG_COMP )
CASE Left( cParamL, 6 ) == "-plat=" ; ParseCOMPPLATCPU( hbmk, SubStr( cParam, 7 ), _TARG_PLAT )
CASE Left( cParamL, 10 ) == "-platform=" ; ParseCOMPPLATCPU( hbmk, SubStr( cParam, 11 ), _TARG_PLAT )
CASE Left( cParamL, 6 ) == "-arch=" ; ParseCOMPPLATCPU( hbmk, SubStr( cParam, 7 ), _TARG_PLAT ) /* Compatibility */
CASE Left( cParamL, 5 ) == "-cpu=" ; ParseCOMPPLATCPU( hbmk, SubStr( cParam, 6 ), _TARG_CPU )
CASE Left( cParamL, 7 ) == "-build=" ; hbmk[ _HBMK_cBUILD ] := StrTran( PathSepToSelf( SubStr( cParam, 8 ) ), hb_ps() )
CASE Left( cParamL, 6 ) == "-build" ; hbmk[ _HBMK_lStopAfterHarbour ] := .T.
@@ -2284,7 +2284,7 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel )
RETURN tmp
ENDIF
OTHERWISE
AAdd( aParams, { cParam, "", 0 } )
AAdd( aParams, _PAR_NEW( cParam, "", 0 ) )
ENDCASE
NEXT
@@ -2304,7 +2304,6 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel )
Left( cParamL, 10 ) == "-compiler=" .OR. ;
Left( cParamL, 6 ) == "-plat=" .OR. ;
Left( cParamL, 10 ) == "-platform=" .OR. ;
Left( cParamL, 6 ) == "-arch=" .OR. ; /* Compatibility */
Left( cParamL, 5 ) == "-cpu=" .OR. ;
Left( cParamL, 7 ) == "-build=" .OR. ;
Left( cParamL, 6 ) == "-lang=" .OR. ;
@@ -2327,7 +2326,11 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel )
cParamL == "-blinker" .OR. ;
cParamL == "-exospace"
/* Simply ignore. They were already processed in the first pass. */
/* Command line option were already processed in the first pass, ignore those. */
IF ! Empty( aParam[ _PAR_cFileName ] )
_hbmk_OutStd( hbmk, hb_StrFormat( I_( "Warning: Ignored option valid only on command line: %1$s" ), ParamToString( aParam ) ) )
ENDIF
/* -env options used inside makefiles */
CASE Left( cParamL, 5 ) == "-env:"
@@ -2392,10 +2395,10 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel )
hbmk[ _HBMK_lCreateImpLib ] := .T. ; lAcceptIFlag := .T.
ENDIF
CASE cParamL == "-gui" .OR. ;
cParamL == "-mwindows" ; hbmk[ _HBMK_lGUI ] := .T. /* Compatibility */
CASE cParamL == "-std" .OR. ;
cParamL == "-mconsole" ; hbmk[ _HBMK_lGUI ] := .F. /* Compatibility */
CASE cParamL == "-gui" ; hbmk[ _HBMK_lGUI ] := .T.
CASE cParamL == "-mwindows" ; hbmk[ _HBMK_lGUI ] := .T. ; LegacyWarning( hbmk, aParam, "-gui" )
CASE cParamL == "-std" ; hbmk[ _HBMK_lGUI ] := .F.
CASE cParamL == "-mconsole" ; hbmk[ _HBMK_lGUI ] := .F. ; LegacyWarning( hbmk, aParam, "-std" )
CASE cParamL == "-mt" ; hbmk[ _HBMK_lMT ] := .T.
CASE cParamL == "-st" ; hbmk[ _HBMK_lMT ] := .F.
CASE cParamL == "-shared" ; hbmk[ _HBMK_lSHARED ] := .T. ; hbmk[ _HBMK_lSTATICFULL ] := .F. ; hbmk[ _HBMK_lSHAREDDIST ] := NIL
@@ -2958,28 +2961,28 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel )
cParam := MacroProc( hbmk, SubStr( cParam, Len( "-ldflag=" ) + 1 ), aParam[ _PAR_cFileName ] )
IF Left( cParam, 1 ) $ cOptPrefix
AAdd( hbmk[ _HBMK_aOPTL ], PathSepToSelf( cParam, 2 ) )
AAddWithWarning( hbmk, hbmk[ _HBMK_aOPTL ], PathSepToSelf( cParam, 2 ), aParam, .F. )
ENDIF
CASE Left( cParamL, Len( "-ldflag+=" ) ) == "-ldflag+="
cParam := MacroProc( hbmk, SubStr( cParam, Len( "-ldflag+=" ) + 1 ), aParam[ _PAR_cFileName ] )
IF Left( cParam, 1 ) $ cOptPrefix
AAdd( hbmk[ _HBMK_aOPTLPOST ], PathSepToSelf( cParam, 2 ) )
AAddWithWarning( hbmk, hbmk[ _HBMK_aOPTLPOST ], PathSepToSelf( cParam, 2 ), aParam, .F. )
ENDIF
CASE Left( cParamL, Len( "-dflag=" ) ) == "-dflag="
cParam := MacroProc( hbmk, SubStr( cParam, Len( "-dflag=" ) + 1 ), aParam[ _PAR_cFileName ] )
IF Left( cParam, 1 ) $ cOptPrefix
AAdd( hbmk[ _HBMK_aOPTD ], PathSepToSelf( cParam, 2 ) )
AAddWithWarning( hbmk, hbmk[ _HBMK_aOPTD ], PathSepToSelf( cParam, 2 ), aParam, .F. )
ENDIF
CASE Left( cParamL, Len( "-dflag+=" ) ) == "-dflag+="
cParam := MacroProc( hbmk, SubStr( cParam, Len( "-dflag+=" ) + 1 ), aParam[ _PAR_cFileName ] )
IF Left( cParam, 1 ) $ cOptPrefix
AAdd( hbmk[ _HBMK_aOPTDPOST ], PathSepToSelf( cParam, 2 ) )
AAddWithWarning( hbmk, hbmk[ _HBMK_aOPTDPOST ], PathSepToSelf( cParam, 2 ), aParam, .F. )
ENDIF
CASE Left( cParamL, Len( "-aflag=" ) ) == "-aflag="
@@ -3184,7 +3187,7 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel )
DO CASE
CASE lAcceptLDFlag
AAddNotEmpty( hbmk[ _HBMK_aOPTL ], PathSepToSelf( cParam, 2 ) )
AAddWithWarning( hbmk, hbmk[ _HBMK_aOPTL ], PathSepToSelf( cParam, 2 ), aParam, .F. )
CASE lAcceptCFlag
IF SubStr( cParamL, 2 ) == "c"
lStopAfterCComp := .T.
@@ -7227,6 +7230,28 @@ STATIC FUNCTION ParamToString( aParam )
hb_StrFormat( "'%1$s'", aParam[ _PAR_cParam ] ), ; /* on the command line */
hb_StrFormat( "'%1$s' in %2$s:%3$d", aParam[ _PAR_cParam ], aParam[ _PAR_cFileName ], aParam[ _PAR_nLine ] ) )
STATIC FUNCTION LegacyWarning( hbmk, aParam, cSuggestion )
RETURN _hbmk_OutStd( hbmk, hb_StrFormat( I_( "Warning: Deprecated compatibility option: %1$s. Use '%2$s' instead." ), ParamToString( aParam ), cSuggestion ) )
STATIC PROCEDURE AAddWithWarning( hbmk, aArray, cOption, aParam, lNew )
STATIC sc_aWarning := { ;
"-Wl,--allow-multiple-definition", ; /* gcc */
"force:multiple", ; /* msvc */
"w-dpl" } /* bcc */
IF AScan( sc_aWarning, {| tmp | Lower( tmp ) $ Lower( cOption ) } ) > 0
_hbmk_OutStd( hbmk, hb_StrFormat( I_( "Warning: Dangerous low-level option not recommended: %1$s" ), ParamToString( aParam ) ) )
ENDIF
IF lNew
AAddNewNotEmpty( aArray, cOption )
ELSE
AAddNotEmpty( aArray, cOption )
ENDIF
RETURN
STATIC FUNCTION CheckLibParam( hbmk, cLibName )
cLibName := Lower( cLibName )
@@ -9335,14 +9360,14 @@ STATIC FUNCTION FindInPath( cFileName, xPath, aExtDef )
RETURN NIL
/*
#if 0
STATIC FUNCTION ArrayJoinNoClone( arraySrc1, arraySrc2 )
LOCAL nLen1 := Len( arraySrc1 )
ASize( arraySrc1, nLen1 + Len( arraySrc2 ) )
RETURN ACopy( arraySrc2, arraySrc1, , , nLen1 + 1 )
*/
#endif
STATIC FUNCTION ArrayJoin( arraySrc1, arraySrc2 )
@@ -9411,7 +9436,7 @@ STATIC FUNCTION AAddNewNotEmpty( array, xItem )
RETURN array
/*
#if 0
STATIC FUNCTION AAddNewAtTop( array, xItem )
IF AScan( array, {| tmp | tmp == xItem } ) == 0
@@ -9419,7 +9444,7 @@ STATIC FUNCTION AAddNewAtTop( array, xItem )
ENDIF
RETURN array
*/
#endif
STATIC FUNCTION AAddNew( array, xItem )
@@ -9449,14 +9474,14 @@ STATIC FUNCTION AAddNotEmpty( array, xItem )
RETURN array
/*
#if 0
STATIC FUNCTION DepTreeToList( aTree )
LOCAL aList := {}
DepTreeWorker( aList, aTree )
RETURN aList
*/
#endif
STATIC PROCEDURE DepTreeWorker( aList, aTree )
@@ -9890,6 +9915,7 @@ STATIC FUNCTION HBC_ProcessOne( hbmk, cFileName, nNestingLevel )
LOCAL cFile
LOCAL cLine
LOCAL cLineOri
LOCAL cItem
LOCAL cItemL
LOCAL cName
@@ -9923,7 +9949,7 @@ STATIC FUNCTION HBC_ProcessOne( hbmk, cFileName, nNestingLevel )
FOR EACH cLine IN hb_ATokens( cFile, _CHR_EOL )
cLine := AllTrim( ArchCompFilter( hbmk, AllTrim( cLine ), cFileName ) )
cLineOri := cLine := AllTrim( ArchCompFilter( hbmk, AllTrim( cLine ), cFileName ) )
DO CASE
CASE Lower( Left( cLine, Len( "skip=" ) ) ) == "skip=" ; cLine := SubStr( cLine, Len( "skip=" ) + 1 )
@@ -10199,12 +10225,12 @@ STATIC FUNCTION HBC_ProcessOne( hbmk, cFileName, nNestingLevel )
CASE Lower( Left( cLine, Len( "ldflags=" ) ) ) == "ldflags=" ; cLine := SubStr( cLine, Len( "ldflags=" ) + 1 )
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
AAddNewNotEmpty( hbmk[ _HBMK_aOPTL ], MacroProc( hbmk, StrStripQuote( cItem ), cFileName ) )
AAddWithWarning( hbmk, hbmk[ _HBMK_aOPTL ], MacroProc( hbmk, StrStripQuote( cItem ), cFileName ), _PAR_NEW( cLineOri, cFileName, cLine:__enumIndex() ), .T. )
NEXT
CASE Lower( Left( cLine, Len( "ldflags+=" ) ) ) == "ldflags+=" ; cLine := SubStr( cLine, Len( "ldflags+=" ) + 1 )
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
AAddNewNotEmpty( hbmk[ _HBMK_aOPTLPOST ], MacroProc( hbmk, StrStripQuote( cItem ), cFileName ) )
AAddWithWarning( hbmk, hbmk[ _HBMK_aOPTLPOST ], MacroProc( hbmk, StrStripQuote( cItem ), cFileName ), _PAR_NEW( cLineOri, cFileName, cLine:__enumIndex() ), .T. )
NEXT
CASE Lower( Left( cLine, Len( "pflags=" ) ) ) == "pflags=" ; cLine := SubStr( cLine, Len( "pflags=" ) + 1 )
@@ -10228,7 +10254,6 @@ STATIC FUNCTION HBC_ProcessOne( hbmk, cFileName, nNestingLevel )
CASE Lower( Left( cLine, Len( "mt=" ) ) ) == "mt=" ; cLine := SubStr( cLine, Len( "mt=" ) + 1 )
DO CASE
CASE Lower( cLine ) == "mt" ; hbmk[ _HBMK_lMT ] := .T. /* Compatibility */
CASE ValueIsT( cLine ) ; hbmk[ _HBMK_lMT ] := .T.
CASE ValueIsF( cLine ) ; hbmk[ _HBMK_lMT ] := .F.
ENDCASE
@@ -10691,7 +10716,7 @@ STATIC FUNCTION HBM_Load( hbmk, aParams, cFileName, nNestingLevel, lProcHBP, cPa
_hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Project reference (%1$s) ignored in automatic make file: %2$s" ), cHBP, cFileName ) )
ENDIF
OTHERWISE
AAdd( aParams, { cParam, cFileName, cLine:__enumIndex() } )
AAdd( aParams, _PAR_NEW( cParam, cFileName, cLine:__enumIndex() ) )
ENDCASE
ENDIF
NEXT
@@ -10901,7 +10926,6 @@ STATIC FUNCTION MacroGet( hbmk, cMacro, cFileName )
cMacro := hbmk_TARGETTYPE( hbmk ) ; EXIT
CASE "HB_PLAT"
CASE "HB_PLATFORM" /* Compatibility */
CASE "HB_ARCH" /* Compatibility */
cMacro := hbmk[ _HBMK_cPLAT ] ; EXIT
CASE "HB_COMP"
CASE "HB_COMPILER" /* Compatibility */
@@ -11252,7 +11276,7 @@ STATIC PROCEDURE PlatformPRGFlags( hbmk, aOPTPRG )
#define RTLNK_MODE_SKIP 6
#define RTLNK_MODE_SKIPNEXT 7
/*
#if 0
STATIC PROCEDURE rtlnk_libtrans( aLibList )
STATIC s_hTrans := { ;
"CT" => "hbct" , ;
@@ -11334,7 +11358,7 @@ STATIC PROCEDURE rtlnk_filetrans( aFileList )
NEXT
RETURN
*/
#endif
STATIC FUNCTION rtlnk_read( cFileName, aPrevFiles )
@@ -12511,21 +12535,23 @@ STATIC FUNCTION LibReferenceToOption( cLib )
STATIC FUNCTION ExtractHarbourSymbols( cString )
STATIC sc_aException := { ;
"multiple definition", ; /* gcc */
"duplicate symbol", ; /* clang */
"already defined", ; /* msvc */
"defined in both" } /* bcc */
LOCAL aList := {}
LOCAL pRegex
LOCAL tmp
LOCAL cLine, cLineLow
LOCAL cLine
LOCAL cOldCP := hb_cdpSelect( "EN" )
IF ! Empty( pRegex := hb_regexComp( "HB_FUN_([A-Z_][A-Z_0-9]*)", .T., .T. ) )
FOR EACH cLine IN hb_ATokens( StrTran( cString, Chr( 13 ), Chr( 10 ) ), Chr( 10 ) )
cLineLow := Lower( cLine )
IF !( "multiple definition" $ cLineLow ) /* gcc */ .AND. ;
!( "duplicate symbol" $ cLineLow ) /* clang */ .AND. ;
!( "already defined" $ cLineLow ) /* msvc */ .AND. ;
!( "defined in both" $ cLineLow ) /* bcc */
IF AScan( sc_aException, {| tmp | tmp $ Lower( cLine ) } ) == 0
FOR EACH tmp IN hb_regexAll( pRegex, cLine,,,,, .T. )
AAddNew( aList, tmp[ 2 ] )
NEXT

View File

@@ -1094,9 +1094,9 @@ PROCEDURE Main_CLASS()
STATIC FUNCTION INSTANCE_DATA( oValue )
LOCAL cData, i
cData := "[" + LTrim( Str( Len( oValue ) ) ) + "]:"
cData := "[" + hb_ntos( Len( oValue ) ) + "]:"
FOR i := 1 TO Len( oValue )
IF ValType( oValue[ i ] ) == "C"
IF HB_ISSTRING( oValue[ i ] )
cData += " " + oValue[ i ]
ELSEIF oValue[ i ] == NIL
cData += " NIL"
@@ -1251,13 +1251,13 @@ ENDCLASS
METHOD m1 CLASS NVCLASS1
RETURN "NVCLASS1:M1 " + ;
HB_CSTR( ::a ) + " " + ;
HB_CSTR( ::b ) + " " + ;
HB_CSTR( ::c ) + " " + ;
HB_CSTR( ::d ) + " " + ;
HB_CSTR( ::e ) + " " + ;
HB_CSTR( ::f ) + " " + ;
HB_CSTR( ::v ) + "|" + ;
hb_CStr( ::a ) + " " + ;
hb_CStr( ::b ) + " " + ;
hb_CStr( ::c ) + " " + ;
hb_CStr( ::d ) + " " + ;
hb_CStr( ::e ) + " " + ;
hb_CStr( ::f ) + " " + ;
hb_CStr( ::v ) + "|" + ;
::x() + "|" + ;
::y() + "|" + ;
::z()
@@ -1265,35 +1265,35 @@ METHOD m1 CLASS NVCLASS1
METHOD x CLASS NVCLASS1
RETURN "NVCLASS1:X " + ;
HB_CSTR( ::a ) + " " + ;
HB_CSTR( ::b ) + " " + ;
HB_CSTR( ::c ) + " " + ;
HB_CSTR( ::d ) + " " + ;
HB_CSTR( ::e ) + " " + ;
HB_CSTR( ::f ) + " " + ;
HB_CSTR( ::v )
hb_CStr( ::a ) + " " + ;
hb_CStr( ::b ) + " " + ;
hb_CStr( ::c ) + " " + ;
hb_CStr( ::d ) + " " + ;
hb_CStr( ::e ) + " " + ;
hb_CStr( ::f ) + " " + ;
hb_CStr( ::v )
METHOD y CLASS NVCLASS1
RETURN "NVCLASS1:Y " + ;
HB_CSTR( ::a ) + " " + ;
HB_CSTR( ::b ) + " " + ;
HB_CSTR( ::c ) + " " + ;
HB_CSTR( ::d ) + " " + ;
HB_CSTR( ::e ) + " " + ;
HB_CSTR( ::f ) + " " + ;
HB_CSTR( ::v )
hb_CStr( ::a ) + " " + ;
hb_CStr( ::b ) + " " + ;
hb_CStr( ::c ) + " " + ;
hb_CStr( ::d ) + " " + ;
hb_CStr( ::e ) + " " + ;
hb_CStr( ::f ) + " " + ;
hb_CStr( ::v )
METHOD z CLASS NVCLASS1
RETURN "NVCLASS1:Z " + ;
HB_CSTR( ::a ) + " " + ;
HB_CSTR( ::b ) + " " + ;
HB_CSTR( ::c ) + " " + ;
HB_CSTR( ::d ) + " " + ;
HB_CSTR( ::e ) + " " + ;
HB_CSTR( ::f ) + " " + ;
HB_CSTR( ::v )
hb_CStr( ::a ) + " " + ;
hb_CStr( ::b ) + " " + ;
hb_CStr( ::c ) + " " + ;
hb_CStr( ::d ) + " " + ;
hb_CStr( ::e ) + " " + ;
hb_CStr( ::f ) + " " + ;
hb_CStr( ::v )
CREATE CLASS NVCLASS2
@@ -1318,13 +1318,13 @@ ENDCLASS
METHOD m2 CLASS NVCLASS2
RETURN "NVCLASS2:M2 " + ;
HB_CSTR( ::a ) + " " + ;
HB_CSTR( ::b ) + " " + ;
HB_CSTR( ::c ) + " " + ;
HB_CSTR( ::d ) + " " + ;
HB_CSTR( ::e ) + " " + ;
HB_CSTR( ::f ) + " " + ;
HB_CSTR( ::v ) + "|" + ;
hb_CStr( ::a ) + " " + ;
hb_CStr( ::b ) + " " + ;
hb_CStr( ::c ) + " " + ;
hb_CStr( ::d ) + " " + ;
hb_CStr( ::e ) + " " + ;
hb_CStr( ::f ) + " " + ;
hb_CStr( ::v ) + "|" + ;
::x() + "|" + ;
::y() + "|" + ;
::z()
@@ -1332,35 +1332,35 @@ METHOD m2 CLASS NVCLASS2
METHOD x CLASS NVCLASS2
RETURN "NVCLASS2:X " + ;
HB_CSTR( ::a ) + " " + ;
HB_CSTR( ::b ) + " " + ;
HB_CSTR( ::c ) + " " + ;
HB_CSTR( ::d ) + " " + ;
HB_CSTR( ::e ) + " " + ;
HB_CSTR( ::f ) + " " + ;
HB_CSTR( ::v )
hb_CStr( ::a ) + " " + ;
hb_CStr( ::b ) + " " + ;
hb_CStr( ::c ) + " " + ;
hb_CStr( ::d ) + " " + ;
hb_CStr( ::e ) + " " + ;
hb_CStr( ::f ) + " " + ;
hb_CStr( ::v )
METHOD y CLASS NVCLASS2
RETURN "NVCLASS2:Y " + ;
HB_CSTR( ::a ) + " " + ;
HB_CSTR( ::b ) + " " + ;
HB_CSTR( ::c ) + " " + ;
HB_CSTR( ::d ) + " " + ;
HB_CSTR( ::e ) + " " + ;
HB_CSTR( ::f ) + " " + ;
HB_CSTR( ::v )
hb_CStr( ::a ) + " " + ;
hb_CStr( ::b ) + " " + ;
hb_CStr( ::c ) + " " + ;
hb_CStr( ::d ) + " " + ;
hb_CStr( ::e ) + " " + ;
hb_CStr( ::f ) + " " + ;
hb_CStr( ::v )
METHOD z CLASS NVCLASS2
RETURN "NVCLASS2:Z " + ;
HB_CSTR( ::a ) + " " + ;
HB_CSTR( ::b ) + " " + ;
HB_CSTR( ::c ) + " " + ;
HB_CSTR( ::d ) + " " + ;
HB_CSTR( ::e ) + " " + ;
HB_CSTR( ::f ) + " " + ;
HB_CSTR( ::v )
hb_CStr( ::a ) + " " + ;
hb_CStr( ::b ) + " " + ;
hb_CStr( ::c ) + " " + ;
hb_CStr( ::d ) + " " + ;
hb_CStr( ::e ) + " " + ;
hb_CStr( ::f ) + " " + ;
hb_CStr( ::v )
CREATE CLASS NVCLASS3 FROM NVCLASS1, NVCLASS2
@@ -1386,13 +1386,13 @@ ENDCLASS
METHOD m3 CLASS NVCLASS3
RETURN "NVCLASS3:M3 " + ;
HB_CSTR( ::a ) + " " + ;
HB_CSTR( ::b ) + " " + ;
HB_CSTR( ::c ) + " " + ;
HB_CSTR( ::d ) + " " + ;
HB_CSTR( ::e ) + " " + ;
HB_CSTR( ::f ) + " " + ;
HB_CSTR( ::v ) + "|" + ;
hb_CStr( ::a ) + " " + ;
hb_CStr( ::b ) + " " + ;
hb_CStr( ::c ) + " " + ;
hb_CStr( ::d ) + " " + ;
hb_CStr( ::e ) + " " + ;
hb_CStr( ::f ) + " " + ;
hb_CStr( ::v ) + "|" + ;
::x() + "|" + ;
::y() + "|" + ;
::z()
@@ -1400,35 +1400,35 @@ METHOD m3 CLASS NVCLASS3
METHOD x CLASS NVCLASS3
RETURN "NVCLASS3:X " + ;
HB_CSTR( ::a ) + " " + ;
HB_CSTR( ::b ) + " " + ;
HB_CSTR( ::c ) + " " + ;
HB_CSTR( ::d ) + " " + ;
HB_CSTR( ::e ) + " " + ;
HB_CSTR( ::f ) + " " + ;
HB_CSTR( ::v )
hb_CStr( ::a ) + " " + ;
hb_CStr( ::b ) + " " + ;
hb_CStr( ::c ) + " " + ;
hb_CStr( ::d ) + " " + ;
hb_CStr( ::e ) + " " + ;
hb_CStr( ::f ) + " " + ;
hb_CStr( ::v )
METHOD y CLASS NVCLASS3
RETURN "NVCLASS3:Y " + ;
HB_CSTR( ::a ) + " " + ;
HB_CSTR( ::b ) + " " + ;
HB_CSTR( ::c ) + " " + ;
HB_CSTR( ::d ) + " " + ;
HB_CSTR( ::e ) + " " + ;
HB_CSTR( ::f ) + " " + ;
HB_CSTR( ::v )
hb_CStr( ::a ) + " " + ;
hb_CStr( ::b ) + " " + ;
hb_CStr( ::c ) + " " + ;
hb_CStr( ::d ) + " " + ;
hb_CStr( ::e ) + " " + ;
hb_CStr( ::f ) + " " + ;
hb_CStr( ::v )
METHOD z CLASS NVCLASS3
RETURN "NVCLASS3:Z " + ;
HB_CSTR( ::a ) + " " + ;
HB_CSTR( ::b ) + " " + ;
HB_CSTR( ::c ) + " " + ;
HB_CSTR( ::d ) + " " + ;
HB_CSTR( ::e ) + " " + ;
HB_CSTR( ::f ) + " " + ;
HB_CSTR( ::v )
hb_CStr( ::a ) + " " + ;
hb_CStr( ::b ) + " " + ;
hb_CStr( ::c ) + " " + ;
hb_CStr( ::d ) + " " + ;
hb_CStr( ::e ) + " " + ;
hb_CStr( ::f ) + " " + ;
hb_CStr( ::v )
CREATE CLASS NVCLASS4 FROM NVCLASS3
@@ -1438,13 +1438,13 @@ ENDCLASS
METHOD m4
RETURN "NVCLASS4:M4 " + ;
HB_CSTR( ::a ) + " " + ;
HB_CSTR( ::b ) + " " + ;
HB_CSTR( ::c ) + " " + ;
HB_CSTR( ::d ) + " " + ;
HB_CSTR( ::e ) + " " + ;
HB_CSTR( ::f ) + " " + ;
HB_CSTR( ::v ) + "|" + ;
hb_CStr( ::a ) + " " + ;
hb_CStr( ::b ) + " " + ;
hb_CStr( ::c ) + " " + ;
hb_CStr( ::d ) + " " + ;
hb_CStr( ::e ) + " " + ;
hb_CStr( ::f ) + " " + ;
hb_CStr( ::v ) + "|" + ;
::x() + "|" + ;
::y() + "|" + ;
::z()