* utils/hbmk2/hbmk2.*.po
* utils/hbmk2/hbmk2.prg
% minor optimization to recent patch
+ cleanups in some help items
+ '-?' and '-h' options are now accepted as '-help'
+ '-??' and '-hh' options are now accepted as '-longhelp'
- deleted '-license' option, it's now part of '-longhelp'
! hbshell_gtSelect() parameter fixed to be case insentitive
in an internal check
+ tests/clipper.ch
+ added header file that translates certain Harbour
specific functions to ones understood by Clipper.
Useful to compile lightly Harbour specific code
in Clipper (or other Clipper compatible language),
for comparison.
* tests/*.prg
- tests/exthrb.prg
+ tests/hrbext.prg
* website/samples/*.prg.html
! various cleanups, minor fixes, formatting
+ #included "clipper.ch" to enable running what's
possible to run with Clipper
* src/rtl/gtwin/gtwin.c
* src/rtl/gtwvt/gtwvt.c
! return string type for hb_gtInfo( HB_GTI_FONTSEL )
in sync with GTXWC
* contrib/xhb/xhbfunc.c
* include/hbdefs.h
* HB_FUNC_EXEC() macro value to not end with ';',
now it should be added on usage (almost all usages
were such already). To be code formatter friendly.
* contrib/xhb/xhb.hbp
+ contrib/xhb/xhbdepr.prg
+ added compatiblity stubs for functions deprecated from
Harbour core, but still available in xHarbour. (xHarbour
has yet to deprecate anything)
So here we can gather stuff that's deprecated from Harbour
core (except internal functions - most of them named '__*' -,
and the "evil" ones)
; NOTE: Runtime efficiency is not a goal with these stubs,
only "cheap" long term maintainability.
- contrib/hbblat/tests/blattest.prg
+ contrib/hbblat/tests/test.prg
* extras/guestbk/guestbk.hbp
- extras/guestbk/testcgi.prg
+ extras/guestbk/cgi.prg
* renames
* src/vm/dynsym.c
* contrib/hbfbird/tests/testapi.c
* contrib/xhb/thtm.prg
* minor
133 lines
2.7 KiB
Plaintext
133 lines
2.7 KiB
Plaintext
/*
|
|
* $Id$
|
|
*/
|
|
|
|
#ifndef __HARBOUR__
|
|
#include "clipper.ch"
|
|
#endif
|
|
|
|
// codeblock tests
|
|
|
|
PROCEDURE Main()
|
|
|
|
LOCAL B := "this will never print"
|
|
LOCAL a := {| b, c | OutStd( "I am a codeblock" + b + c ) }
|
|
LOCAL d
|
|
LOCAL de
|
|
LOCAL ar := { 1, 2 }
|
|
LOCAL YY, X
|
|
LOCAL x1, x2
|
|
|
|
HB_SYMBOL_UNUSED( b )
|
|
|
|
OutStd( "this should print first" )
|
|
OutStd( hb_eol() )
|
|
|
|
Eval( a, " with parameters", " ... and it works!" )
|
|
OutStd( hb_eol() )
|
|
|
|
d := "with access to local variables"
|
|
|
|
a := {| b, c | OutStd( "I am a second codeblock " + d + b + ;
|
|
iif( c == NIL, " empty second parameter ", c ) ), OutStd( hb_eol() ), "WITH return value" }
|
|
Eval( a, ", codeblock parameters" )
|
|
OutStd( hb_eol() )
|
|
|
|
Eval( a, ", codeblock parameters ", "and with second parameter" )
|
|
OutStd( hb_eol() )
|
|
|
|
OutStd( MyEval( a ) )
|
|
OutStd( hb_eol() )
|
|
|
|
OtherTest( a )
|
|
OutStd( hb_eol() )
|
|
|
|
AnotherTest( a, "==> Another " )
|
|
OutStd( hb_eol() )
|
|
|
|
a := {| c | iif( c == NIL, {| a | "First " + a }, {| a | "Second " + a } ) }
|
|
a := Eval( a )
|
|
OutStd( hb_eol() )
|
|
OutStd( Eval( a, "codeblock created in a codeblock" ) )
|
|
OutStd( hb_eol() )
|
|
|
|
OutStd( ar[ 1 ] )
|
|
OutStd( hb_eol() )
|
|
a := {|| ar[ 1 ]++ }
|
|
Eval( a )
|
|
OutStd( ar[ 1 ] )
|
|
OutStd( hb_eol() )
|
|
|
|
yy := 5
|
|
x := {| xx | OutStd( hb_ntos( xx ) ), OutStd( "+" ), OutStd( hb_ntos( yy ) ), OutStd( "=" ), xx + yy }
|
|
OutStd( Eval( x, 1 ) ) // this is OK
|
|
OutStd( hb_eol() )
|
|
OutStd( Eval( x, 1, 2 ) ) // this should ignore unnecesary parameters
|
|
|
|
QOut( Eval( RetBlock(), 5 ) )
|
|
|
|
// BugToFix()
|
|
OutStd( hb_eol() )
|
|
|
|
OutStd( "Trying to use detached variable ..." )
|
|
OutStd( hb_eol() )
|
|
x1 := 5
|
|
x2 := 6
|
|
de := DetachLocal( x1, x2 )
|
|
OutStd( Eval( de ) )
|
|
// changing the value of variables
|
|
OutStd( hb_eol() )
|
|
x1 := 10
|
|
x2 := 11
|
|
QOut( Eval( de ) )
|
|
de := DetachLocal( x1, x2 )
|
|
QOut( Eval( de ) )
|
|
|
|
RETURN
|
|
|
|
FUNCTION MyEval( bCodeBlock )
|
|
|
|
LOCAL D := "this is another variable"
|
|
|
|
RETURN Eval( bCodeBlock, " from ", "MyEval Function" )
|
|
|
|
PROCEDURE OtherTest( cblock )
|
|
|
|
LOCAL cb
|
|
|
|
cb := {| a, b | Eval( cblock, a, b ) }
|
|
|
|
Eval( cb, "--> with nested ", "EVAL" )
|
|
|
|
RETURN
|
|
|
|
PROCEDURE AnotherTest( cb, a )
|
|
|
|
OutStd( Eval( cb, a ) )
|
|
OutStd( hb_eol() )
|
|
OutStd( Eval( cb, a, "again and again" ) )
|
|
OutStd( hb_eol() )
|
|
|
|
RETURN
|
|
|
|
FUNCTION DetachLocal( x, y )
|
|
|
|
// NOTE! this should work
|
|
LOCAL z := x + y
|
|
LOCAL cb := {|| QOut( "z=x+y=" ), QOut( z ), QOut( "x*x=" ), QOut( x * x ), QOut( "x*x+z=" ), x * x + z }
|
|
|
|
RETURN cb
|
|
|
|
PROCEDURE BugToFix()
|
|
|
|
LOCAL b, a := {|| a + b }
|
|
|
|
b := "bug "
|
|
Eval( a )
|
|
|
|
RETURN
|
|
|
|
FUNCTION RetBlock()
|
|
|
|
RETURN {| x | x * x }
|