diff --git a/harbour/ChangeLog b/harbour/ChangeLog index cb279013b9..26a004660d 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,26 @@ The license applies to all entries newer than 2009-04-28. */ +2012-04-19 02:23 UTC+0200 Viktor Szakats (harbour syenar.net) + * src/3rd/pcre/Makefile + + enabled UTF8 support in PCRE (binary size overhead ~150KB) + + enabled unicode properties support in PCRE (binary size overhead ~50KB) + + * src/rtl/hbregex.c + + added commented logic to detect UTF8 support in PCRE + and enable UTF8 mode when the HVM CP is also UTF8. Latter + logic is missing yet and subject to review. + + * contrib/hbnetio/utils/hbnetio/netiosrv.prg + * contrib/hbnetio/utils/hbnetio/netiocon.prg + * contrib/hbnetio/utils/hbnetio/netiomgm.prg + * contrib/hbrun/hbrun.prg + * tests/ac_test.prg + * tests/ac_test2.prg + * tests/tstmacro.prg + * tests/tstalias.prg + * formatted using automatic tools + 2012-04-18 15:14 UTC+0200 Viktor Szakats (harbour syenar.net) * contrib/xhb/hblognet.prg * contrib/hbssl/tests/test.prg diff --git a/harbour/contrib/hbnetio/utils/hbnetio/netiocon.prg b/harbour/contrib/hbnetio/utils/hbnetio/netiocon.prg index 35a5dd856c..608a73ae76 100644 --- a/harbour/contrib/hbnetio/utils/hbnetio/netiocon.prg +++ b/harbour/contrib/hbnetio/utils/hbnetio/netiocon.prg @@ -164,9 +164,9 @@ PROCEDURE hbnetiocon_cmdUI( cIP, nPort, cPassword ) /* Adjusted the positioning of cursor on navigate through history. [vailtom] */ STATIC PROCEDURE ManageCursor( cCommand ) - hb_keyPut( K_HOME ) + hb_KeyPut( K_HOME ) IF ! Empty( cCommand ) - hb_keyPut( K_END ) + hb_KeyPut( K_END ) ENDIF RETURN diff --git a/harbour/contrib/hbnetio/utils/hbnetio/netiomgm.prg b/harbour/contrib/hbnetio/utils/hbnetio/netiomgm.prg index 9fec271188..c1ee41a537 100644 --- a/harbour/contrib/hbnetio/utils/hbnetio/netiomgm.prg +++ b/harbour/contrib/hbnetio/utils/hbnetio/netiomgm.prg @@ -252,7 +252,7 @@ STATIC PROCEDURE DisconnectLow( netiocli ) netio_OpenItemStream( netiocli[ _NETIOCLI_pConnection ], "hbnetiomgm_regnotif", .F. ) netiocli[ _NETIOCLI_lWaitStream ] := .F. - hb_ThreadJoin( netiocli[ _NETIOCLI_hWaitThread ] ) + hb_threadJoin( netiocli[ _NETIOCLI_hWaitThread ] ) netiocli[ _NETIOCLI_pConnection ] := NIL @@ -264,7 +264,7 @@ STATIC PROCEDURE DisconnectLow( netiocli ) STATIC FUNCTION MyClientInfo() LOCAL hInfo := { => } - hb_hKeepOrder( hInfo, .T. ) + hb_HKeepOrder( hInfo, .T. ) hInfo[ "OS()" ] := OS() hInfo[ "Version()" ] := Version() diff --git a/harbour/contrib/hbnetio/utils/hbnetio/netiosrv.prg b/harbour/contrib/hbnetio/utils/hbnetio/netiosrv.prg index 1c64c8372c..2a26fd5cac 100644 --- a/harbour/contrib/hbnetio/utils/hbnetio/netiosrv.prg +++ b/harbour/contrib/hbnetio/utils/hbnetio/netiosrv.prg @@ -108,7 +108,7 @@ PROCEDURE netiosrv_Main( lUI, ... ) netiosrv[ _NETIOSRV_cName ] := "Data" netiosrv[ _NETIOSRV_nPort ] := _NETIOSRV_PORT_DEF netiosrv[ _NETIOSRV_cIFAddr ] := _NETIOSRV_IPV4_DEF - netiosrv[ _NETIOSRV_cRootDir ] := hb_dirBase() + "data" + netiosrv[ _NETIOSRV_cRootDir ] := hb_DirBase() + "data" netiosrv[ _NETIOSRV_lRPC ] := .F. netiosrv[ _NETIOSRV_lEncryption ] := .F. netiosrv[ _NETIOSRV_lAcceptConn ] := .T. @@ -179,7 +179,7 @@ PROCEDURE netiosrv_Main( lUI, ... ) SWITCH cExt CASE ".prg" CASE ".hbs" - cFile := HB_COMPILEBUF( HB_ARGV( 0 ), "-n2", "-w", "-es2", "-q0",; + cFile := hb_compileBuf( hb_argv( 0 ), "-n2", "-w", "-es2", "-q0",; "-D" + "__HBSCRIPT__HBNETIOSRV", netiosrv[ _NETIOSRV_cRPCFFileName ] ) IF cFile != NIL netiosrv[ _NETIOSRV_hRPCFHRB ] := hb_hrbLoad( HB_HRB_BIND_FORCELOCAL, cFile ) @@ -211,7 +211,7 @@ PROCEDURE netiosrv_Main( lUI, ... ) netiosrv_LogEvent( hb_StrFormat( "Configuration loaded: %1$s", netiosrv_ConfName() ) ) ENDIF - hb_dirBuild( netiosrv[ _NETIOSRV_cRootDir ] ) + hb_DirBuild( netiosrv[ _NETIOSRV_cRootDir ] ) netiosrv[ _NETIOSRV_pListenSocket ] := ; netio_mtserver( netiosrv[ _NETIOSRV_nPort ],; @@ -398,7 +398,7 @@ STATIC PROCEDURE netiosrv_notifyclients( netiomgm, cMsg ) ENDIF NEXT - hb_mutexUnLock( netiomgm[ _NETIOSRV_mtxNotifStream ] ) + hb_mutexUnlock( netiomgm[ _NETIOSRV_mtxNotifStream ] ) RETURN @@ -483,7 +483,7 @@ STATIC PROCEDURE netiosrv_conn_register( netiosrv, pConnectionSocket ) LOCAL nconn[ _NETIOSRV_CONN_MAX_ ] nconn[ _NETIOSRV_CONN_pConnection ] := pConnectionSocket - nconn[ _NETIOSRV_CONN_nThreadID ] := hb_threadID() + nconn[ _NETIOSRV_CONN_nThreadID ] := hb_threadId() nconn[ _NETIOSRV_CONN_tStart ] := hb_DateTime() hb_mutexLock( netiosrv[ _NETIOSRV_mtxConnection ] ) @@ -511,7 +511,7 @@ STATIC PROCEDURE netiosrv_conn_unregister( netiosrv, pConnectionSocket ) /* RPC management interface */ STATIC FUNCTION netiomgm_rpc_regnotif( netiomgm, pConnSock, nStreamID, lRegister ) - LOCAL index := hb_valToStr( pConnSock ) + LOCAL index := hb_ValToStr( pConnSock ) LOCAL cli SWITCH PCount() @@ -550,7 +550,7 @@ STATIC FUNCTION netiomgm_rpc_setclientinfo( netiosrv, hInfo ) hb_mutexLock( netiosrv[ _NETIOSRV_mtxConnection ] ) FOR EACH nconn IN netiosrv[ _NETIOSRV_hConnection ] - IF nconn[ _NETIOSRV_CONN_nThreadID ] == hb_threadID() + IF nconn[ _NETIOSRV_CONN_nThreadID ] == hb_threadId() nconn[ _NETIOSRV_CONN_hInfo ] := hInfo EXIT ENDIF diff --git a/harbour/contrib/hbrun/hbrun.prg b/harbour/contrib/hbrun/hbrun.prg index 9156aaba06..090718c1f3 100644 --- a/harbour/contrib/hbrun/hbrun.prg +++ b/harbour/contrib/hbrun/hbrun.prg @@ -158,14 +158,14 @@ PROCEDURE _APPMAIN( cFile, ... ) EXIT CASE ".prg" CASE ".hbs" - IF Empty( getenv( "HBRUN_NOHEAD" ) ) + IF Empty( GetEnv( "HBRUN_NOHEAD" ) ) hHeaders := __hbrun_CoreHeaderFiles() /* add core header files */ ENDIF - cFile := HB_COMPILEBUF( hHeaders, hb_ProgName(), "-n2", "-w", "-es2", "-q0", ; + cFile := hb_compileBuf( hHeaders, hb_ProgName(), "-n2", "-w", "-es2", "-q0", ; "-I" + hb_FNameDir( cFile ), "-D" + "__HBSCRIPT__HBRUN", cFile ) IF cFile == NIL - ERRORLEVEL( 1 ) + ErrorLevel( 1 ) EXIT ENDIF OTHERWISE @@ -346,7 +346,7 @@ STATIC PROCEDURE hbrun_Prompt( aParams, cCommand ) RETURN ENDIF - hb_GTInfo( HB_GTI_ICONRES, 1 ) + hb_gtInfo( HB_GTI_ICONRES, 1 ) CLEAR SCREEN SET SCOREBOARD OFF @@ -354,7 +354,7 @@ STATIC PROCEDURE hbrun_Prompt( aParams, cCommand ) hbrun_HistoryLoad() - AAdd( s_aHistory, padr( "quit", HB_LINE_LEN ) ) + AAdd( s_aHistory, PadR( "quit", HB_LINE_LEN ) ) nHistIndex := Len( s_aHistory ) + 1 IF ISCHARACTER( cCommand ) @@ -398,9 +398,9 @@ STATIC PROCEDURE hbrun_Prompt( aParams, cCommand ) {|| iif( nHistIndex > 1, ; cLine := s_aHistory[ --nHistIndex ], ) } ) bKeyDown := SetKey( K_DOWN, ; - {|| cLine := iif( nHistIndex < LEN( s_aHistory ), ; + {|| cLine := iif( nHistIndex < Len( s_aHistory ), ; s_aHistory[ ++nHistIndex ], ; - ( nHistIndex := LEN( s_aHistory ) + 1, Space( HB_LINE_LEN ) ) ) } ) + ( nHistIndex := Len( s_aHistory ) + 1, Space( HB_LINE_Len ) ) ) } ) bKeyResize := SetKey( HB_K_RESIZE,; {|| lResize := .T., hb_KeyPut( K_ENTER ) } ) @@ -524,10 +524,10 @@ STATIC PROCEDURE hbrun_Info( cCommand ) ENDIF IF Used() hb_DispOutAt( 1, 0, ; - PadR( "RDD: " + PadR( RddName(), 6 ) + ; + PadR( "RDD: " + PadR( rddName(), 6 ) + ; " | Area:" + Str( Select(), 3 ) + ; " | Dbf: " + PadR( Alias(), 10 ) + ; - " | Index: " + PadR( OrdName( IndexOrd() ), 8 ) + ; + " | Index: " + PadR( ordName( IndexOrd() ), 8 ) + ; " | # " + Str( RecNo(), 7 ) + "/" + Str( RecCount(), 7 ), ; MaxCol() + 1 ), "N/BG" ) ELSE @@ -576,7 +576,7 @@ STATIC PROCEDURE hbrun_Err( oErr, cCommand ) IF ISARRAY( oErr:Args ) .AND. Len( oErr:Args ) > 0 cMessage += ";Arguments:" FOR EACH xArg IN oErr:Args - cMessage += ";" + HB_CStr( xArg ) + cMessage += ";" + hb_CStr( xArg ) NEXT ENDIF ELSEIF ISCHARACTER( oErr ) @@ -586,7 +586,7 @@ STATIC PROCEDURE hbrun_Err( oErr, cCommand ) Alert( cMessage ) - BREAK( oErr ) + Break( oErr ) /* ********************************************************************** */ @@ -604,7 +604,7 @@ STATIC PROCEDURE hbrun_Exec( cCommand ) cHRB := hb_compileFromBuf( cFunc, hb_ProgName(), "-n2", "-q2" ) IF cHRB == NIL - EVAL( ErrorBlock(), "Syntax error." ) + Eval( ErrorBlock(), "Syntax error." ) ELSE pHRB := hb_hrbLoad( cHRB ) IF pHrb != NIL @@ -622,7 +622,7 @@ STATIC PROCEDURE hbrun_Exec( cCommand ) ENDSEQUENCE - __MVSETBASE() + __mvSetBase() RETURN @@ -694,11 +694,11 @@ STATIC FUNCTION hbrun_HistoryFileName() cDir := GetEnv( cEnvVar ) + hb_ps() + ".harbour" #endif ELSE - cDir := hb_dirBase() + cDir := hb_DirBase() ENDIF - IF ! hb_dirExists( cDir ) - hb_dirCreate( cDir ) + IF ! hb_DirExists( cDir ) + hb_DirCreate( cDir ) ENDIF RETURN cDir + hb_ps() + cFileName diff --git a/harbour/src/3rd/pcre/Makefile b/harbour/src/3rd/pcre/Makefile index 40f7548c5e..b70f98798a 100644 --- a/harbour/src/3rd/pcre/Makefile +++ b/harbour/src/3rd/pcre/Makefile @@ -36,6 +36,7 @@ LIBNAME := hbpcre ifneq ($(HB_HAS_PCRE_LOCAL),) HB_CFLAGS += -DHAVE_STDINT_H=0 + HB_CFLAGS += -DSUPPORT_UTF -DSUPPORT_UCP # only needed for win/wce, for other platforms this is noop HB_CFLAGS_STA := -DPCRE_STATIC diff --git a/harbour/src/rtl/hbregex.c b/harbour/src/rtl/hbregex.c index 475371547b..bed8484039 100644 --- a/harbour/src/rtl/hbregex.c +++ b/harbour/src/rtl/hbregex.c @@ -80,6 +80,22 @@ static int hb_regcomp( PHB_REGEX pRegEx, const char * szRegEx ) pRegEx->iEFlags = ( ( pRegEx->iFlags & HBREG_NOTBOL ) ? PCRE_NOTBOL : 0 ) | ( ( pRegEx->iFlags & HBREG_NOTEOL ) ? PCRE_NOTEOL : 0 ); +#if 0 + /* detect UTF-8 support. */ + { + int fUTF8Support; +# if defined( PCRE_CONFIG_UTF8 ) + if( pcre_config( PCRE_CONFIG_UTF8, &fUTF8Support ) != 0 ) + fUTF8Support = 0; +# else + fUTF8Support = 0; +# endif + /* use UTF8 in pcre when available and HVM CP is also UTF8. */ + if( fUTF8Support && hb_cdpIsUTF8() /* TODO */ ) + iCFlags |= PCRE_UTF8; + } +#endif + pRegEx->re_pcre = pcre_compile( szRegEx, iCFlags, &szError, &iErrOffset, pCharTable ); return pRegEx->re_pcre ? 0 : -1; diff --git a/harbour/tests/ac_test.prg b/harbour/tests/ac_test.prg index ed229fb440..e7e45f0d97 100644 --- a/harbour/tests/ac_test.prg +++ b/harbour/tests/ac_test.prg @@ -2,232 +2,235 @@ * $Id$ */ -*+==================================================================== -*+ -*+ Source Module => ac_test.prg -*+ -*+ Released to Public Domain. -*+ -*+ Functions: Procedure test() -*+ Function cUserFunction() -*+ -*+ Tables: use vendor exclusive -*+ -*+ Reformatted by Click! 1.10 on Aug-13-1997 at 11:39 pm -*+ -*+==================================================================== +//+==================================================================== +//+ +//+ Source Module => ac_test.prg +//+ +//+ Released to Public Domain. +//+ +//+ Functions: Procedure test() +//+ Function cUserFunction() +//+ +//+ Tables: use vendor exclusive +//+ +//+ Reformatted by Click! 1.10 on Aug-13-1997 at 11:39 pm +//+ +//+==================================================================== #include "achoice.ch" #include "inkey.ch" -*+-------------------------------------------------------------------- -*+ -*+ Procedure test() -*+ -*+-------------------------------------------------------------------- -*+ -procedure main() +//+-------------------------------------------------------------------- +//+ +//+ Procedure test() +//+ +//+-------------------------------------------------------------------- +//+ -local aPrompts := {; - "AGRI-PLANTS" ,; - "ALAN R. SMITH GREENHOUSES" ,; - "ALLAN MURRAY NURSERY, INC." ,; - "APOPKA FOREST" ,; - "LIGHT HOUSE NURSERIES" ,; - "BAUCOM'S" ,; - "BAY HILL NURSERY, INC." ,; - "BAYWOOD NURSERIES" ,; - "BIG OAK NURSERY" ,; - "C & N NURSERY" ,; - "CHARLES QUALITY PLANTS" ,; - "CONNELL FARMS" ,; - "DEWAR NURSERIES, INC." ,; - "DIAMOND T NURSERY" ,; - "DISTINCTIVE PALMS NURSERIES" ,; - "DONKAY NURSERY" ,; - "DOUG INGRAM & SONS NURSERY" ,; - "DRIFTWOOD GARDENS, INC." ,; - "ELVA PLANT NURSERY, INC." ,; - "ERINON" ,; - "EVANS NURSERY" ,; - "FANCY PLANTS" ,; - "FL.PLANT GROWERSCOOP" ,; - "FLORIDA CACTUS INC." ,; - "FLOWERING TREE GROWERS, INC." ,; - "FLOWERWOOD NURSERY" ,; - "FOLIAGE FACTORY TOO" ,; - "GATOR GROWERS NURSERY, INC." ,; - "GAZEBO LANDSCAPE DESIGN, INC." ,; - "GEM ORNAMENTALS" ,; - "GRANNY'S GARDEN" ,; - "GRAY'S ORNAMENTALS" ,; - "GREEN MASTERS INC." ,; - "GREEN MEADOW NURSERY" ,; - "PIXLEY'S PLANT PLACE" ,; - "HARRISON'S NURSERY, INC." ,; - "G & G FOLIAGE" ,; - "IVEY'S NURSERY, INC." ,; - "JB NURSERIES, INC." ,; - "JON'S NURSERY" ,; - "JONES & JONES NURSERY, INC." ,; - "KAGER'S NURSERY" ,; - "KIRKLAND'S NURSERY" ,; - "LAND OF BROMELIADS" ,; - "LANDSCAPE NURSERY, INC." ,; - "LIEWALD'S NURSERY INC." ,; - "LLOYD & RINGS NURSERY" ,; - "LONG VAN DOUNG" ,; - "MAPEL'S LANDSCAPE NURSERY" ,; - "MILESTONE AGRICULTURE, INC." ,; - "MOJICA NURSERY & FRUITS" ,; - "NELSON'S ROSES" ,; - "PARK GARDENS" ,; - "PAUL LUKAS INC." ,; - "PECKETT'S INC." ,; - "PENANG NURSERY, INC." ,; - "PINES III NURERIES" ,; - "PINEVIEW NURSERY" ,; - "POUL JENSEN NURSERY" ,; - "R.P. WELKER" ,; - "RICHARD ROGERS NURSERY, INC." ,; - "SPRING HILL NURSERY" ,; - "T.O. MAHAFFEY, JR." ,; - "TUCKER NURSERY" ,; - "TURTLE POND NURSERY" ,; - "TUTTLE'S NURSERY INC." ,; - "VALLEY CACTUS" ,; - "WHISPER WINDS, INC." ,; - "WHITE ROSE NURSERIES INC." ,; - "WOODWAY" ,; - "FLORI-DESIGN" ,; - "GREEN ACRES FOLIAGE, INC" ,; - "FLORAL EXPO" ,; - "TORRES NURSERY" ,; - "DARRYL KOON" ,; - "TRISTAR NURSERY" ,; - "KAY WEST NURSERY" ,; - "JAYMAR NURSERY" ,; - "J D F LANDSCAPE NURSERY" ,; - "DEROOSE PLANTS, INC." ,; - "THE TREEHOUSE" ,; - "COSTELLO'S ARECAS, INC." ,; - "FLORICO FOLIAGE" ,; - "THE NATIVES" ,; - "GREENS NURSERY" ,; - "STEWART NURSERIES" ,; - "G & T FOLIAGE, INC." ,; - "GOOD TIMES NURSERY" ,; - "CONCEPTS IN GREENERY, INC." ,; - "DUNN BROTHERS CITRUS, INC." ,; - "JOHN PLANK GREENHOUSES" ,; - "GREENER PASTURES NURSERY" ,; - "MULVEHILL NURSERY" ,; - "A NU LEAF" ,; - "IVY DESIGNS, INC." ,; - "B & C TROPICALS" ,; - "SPANISH RIVER NURSERY, INC." ,; - "JACK CHRISTMAS & ASSOCIATES" ,; - "SPECIALIST GROWERS" ,; - "HOMRICH NURSERY, INC." ,; - "COUNTRYSIDE FOLIAGE, INC." ,; - "RFJ COMPANY" ,; - "LAKE BRANTLEY PLANT CORP." ,; - "MARISTYME" ,; - "MERISTEM NURSERY, INC." ,; - "TROPIC DECOR - EARL WILSON" ,; - "URQUHART'S NURSERY" ,; - "ACE PLANT NURSERY" ,; - "HATTAWAYS GREENHOUSE, INC." ,; - "Florida Plant Growers" ,; - "Junior Nursery" ,; - "Fox's Nurseries, Inc." ,; - "Vaughan Nursery" ,; - "MERRYGRO FARMS" ,; - "ALL SEASONS NURSERY" ,; - "BENCHMARK FOLIAGE" ,; - "SAMMY'S NURSERY" ,; - "SUNSHINE GROWERS" ,; - "Blooming-Fields Nursery" } +PROCEDURE main() -local aPermits := {} -local x -local nChoice -local ncntr + LOCAL aPrompts := { ; + "AGRI-PLANTS" , ; + "ALAN R. SMITH GREENHOUSES" , ; + "ALLAN MURRAY NURSERY, INC." , ; + "APOPKA FOREST" , ; + "LIGHT HOUSE NURSERIES" , ; + "BAUCOM'S" , ; + "BAY HILL NURSERY, INC." , ; + "BAYWOOD NURSERIES" , ; + "BIG OAK NURSERY" , ; + "C & N NURSERY" , ; + "CHARLES QUALITY PLANTS" , ; + "CONNELL FARMS" , ; + "DEWAR NURSERIES, INC." , ; + "DIAMOND T NURSERY" , ; + "DISTINCTIVE PALMS NURSERIES" , ; + "DONKAY NURSERY" , ; + "DOUG INGRAM & SONS NURSERY" , ; + "DRIFTWOOD GARDENS, INC." , ; + "ELVA PLANT NURSERY, INC." , ; + "ERINON" , ; + "EVANS NURSERY" , ; + "FANCY PLANTS" , ; + "FL.PLANT GROWERSCOOP" , ; + "FLORIDA CACTUS INC." , ; + "FLOWERING TREE GROWERS, INC." , ; + "FLOWERWOOD NURSERY" , ; + "FOLIAGE FACTORY TOO" , ; + "GATOR GROWERS NURSERY, INC." , ; + "GAZEBO LANDSCAPE DESIGN, INC." , ; + "GEM ORNAMENTALS" , ; + "GRANNY'S GARDEN" , ; + "GRAY'S ORNAMENTALS" , ; + "GREEN MASTERS INC." , ; + "GREEN MEADOW NURSERY" , ; + "PIXLEY'S PLANT PLACE" , ; + "HARRISON'S NURSERY, INC." , ; + "G & G FOLIAGE" , ; + "IVEY'S NURSERY, INC." , ; + "JB NURSERIES, INC." , ; + "JON'S NURSERY" , ; + "JONES & JONES NURSERY, INC." , ; + "KAGER'S NURSERY" , ; + "KIRKLAND'S NURSERY" , ; + "LAND OF BROMELIADS" , ; + "LANDSCAPE NURSERY, INC." , ; + "LIEWALD'S NURSERY INC." , ; + "LLOYD & RINGS NURSERY" , ; + "LONG VAN DOUNG" , ; + "MAPEL'S LANDSCAPE NURSERY" , ; + "MILESTONE AGRICULTURE, INC." , ; + "MOJICA NURSERY & FRUITS" , ; + "NELSON'S ROSES" , ; + "PARK GARDENS" , ; + "PAUL LUKAS INC." , ; + "PECKETT'S INC." , ; + "PENANG NURSERY, INC." , ; + "PINES III NURERIES" , ; + "PINEVIEW NURSERY" , ; + "POUL JENSEN NURSERY" , ; + "R.P. WELKER" , ; + "RICHARD ROGERS NURSERY, INC." , ; + "SPRING HILL NURSERY" , ; + "T.O. MAHAFFEY, JR." , ; + "TUCKER NURSERY" , ; + "TURTLE POND NURSERY" , ; + "TUTTLE'S NURSERY INC." , ; + "VALLEY CACTUS" , ; + "WHISPER WINDS, INC." , ; + "WHITE ROSE NURSERIES INC." , ; + "WOODWAY" , ; + "FLORI-DESIGN" , ; + "GREEN ACRES FOLIAGE, INC" , ; + "FLORAL EXPO" , ; + "TORRES NURSERY" , ; + "DARRYL KOON" , ; + "TRISTAR NURSERY" , ; + "KAY WEST NURSERY" , ; + "JAYMAR NURSERY" , ; + "J D F LANDSCAPE NURSERY" , ; + "DEROOSE PLANTS, INC." , ; + "THE TREEHOUSE" , ; + "COSTELLO'S ARECAS, INC." , ; + "FLORICO FOLIAGE" , ; + "THE NATIVES" , ; + "GREENS NURSERY" , ; + "STEWART NURSERIES" , ; + "G & T FOLIAGE, INC." , ; + "GOOD TIMES NURSERY" , ; + "CONCEPTS IN GREENERY, INC." , ; + "DUNN BROTHERS CITRUS, INC." , ; + "JOHN PLANK GREENHOUSES" , ; + "GREENER PASTURES NURSERY" , ; + "MULVEHILL NURSERY" , ; + "A NU LEAF" , ; + "IVY DESIGNS, INC." , ; + "B & C TROPICALS" , ; + "SPANISH RIVER NURSERY, INC." , ; + "JACK CHRISTMAS & ASSOCIATES" , ; + "SPECIALIST GROWERS" , ; + "HOMRICH NURSERY, INC." , ; + "COUNTRYSIDE FOLIAGE, INC." , ; + "RFJ COMPANY" , ; + "LAKE BRANTLEY PLANT CORP." , ; + "MARISTYME" , ; + "MERISTEM NURSERY, INC." , ; + "TROPIC DECOR - EARL WILSON" , ; + "URQUHART'S NURSERY" , ; + "ACE PLANT NURSERY" , ; + "HATTAWAYS GREENHOUSE, INC." , ; + "Florida Plant Growers" , ; + "Junior Nursery" , ; + "Fox's Nurseries, Inc." , ; + "Vaughan Nursery" , ; + "MERRYGRO FARMS" , ; + "ALL SEASONS NURSERY" , ; + "BENCHMARK FOLIAGE" , ; + "SAMMY'S NURSERY" , ; + "SUNSHINE GROWERS" , ; + "Blooming-Fields Nursery" } -clear screen + LOCAL aPermits := {} + LOCAL x + LOCAL nChoice + LOCAL ncntr -setcolor( 'GB+/B,GR+/R,,,W/N' ) + CLEAR SCREEN -SET CURSOR ON + SetColor( 'GB+/B,GR+/R,,,W/N' ) -asize( aPermits, Len( aPrompts ) ) + SET CURSOR ON -for x := 1 to Len( aPrompts ) - aPermits[ x ] := !( 'V' $ aPrompts[ x ] ) -next + ASize( aPermits, Len( aPrompts ) ) + + FOR x := 1 TO Len( aPrompts ) + aPermits[ x ] := !( 'V' $ aPrompts[ x ] ) + NEXT #define TEST1 #ifdef TEST1 -for ncntr := 1 to 17 - aPermits[ nCntr ] := .F. - aPermits[ Len( aPrompts ) - nCntr + 1 ] := .F. -next -aPermits[ 32 ] := .F. -aPermits[ 33 ] := .F. -aPermits[ 34 ] := .F. + FOR ncntr := 1 TO 17 + aPermits[ nCntr ] := .F. + aPermits[ Len( aPrompts ) - nCntr + 1 ] := .F. + NEXT + aPermits[ 32 ] := .F. + aPermits[ 33 ] := .F. + aPermits[ 34 ] := .F. #endif -nChoice := achoice( 5, 10, 20, 70, aPrompts, aPermits, "cUserFunction" ) + nChoice := AChoice( 5, 10, 20, 70, aPrompts, aPermits, "cUserFunction" ) -setpos( 0, 0 ) -// clear screen -? nChoice + SetPos( 0, 0 ) + // clear screen + ? nChoice -if nChoice > 0 - ? aPrompts[ nChoice ] -endif -setpos( maxrow() - 2, 0 ) + IF nChoice > 0 + ? aPrompts[ nChoice ] + ENDIF + SetPos( MaxRow() - 2, 0 ) -return + RETURN -*+-------------------------------------------------------------------- -*+ -*+ Function cUserFunction() -*+ -*+-------------------------------------------------------------------- -*+ -function cUserFunction( nMode, nCurElement, nRowPos ) +//+-------------------------------------------------------------------- +//+ +//+ Function cUserFunction() +//+ +//+-------------------------------------------------------------------- +//+ -local nRetVal := AC_CONT // Default, Continue -local nKey := lastkey() +FUNCTION cUserFunction( nMode, nCurElement, nRowPos ) -local nRow := Row() -local nCol := Col() + LOCAL nRetVal := AC_CONT // Default, Continue + LOCAL nKey := LastKey() -HB_SYMBOL_UNUSED( nRowPos ) + LOCAL nRow := Row() + LOCAL nCol := Col() -@ 0, 20 SAY Str( nRow, 3 ) + " " + Str( nCol, 3 ) + HB_SYMBOL_UNUSED( nRowPos ) -do case - // After all pending keys are processed, display message -case nMode == AC_IDLE - @ 0, 0 say padr( ltrim( str( nCurElement ) ), 10 ) - nRetVal := AC_CONT // Continue ACHOICE() -case nMode == AC_HITTOP // Attempt to go past Top - @ 0, 0 say "Hit Top " -// tone( 100, 3 ) -case nMode == AC_HITBOTTOM // Attempt to go past Bottom - @ 0, 0 say "Hit Bottom" -// tone( 100, 3 ) -case nMode == AC_EXCEPT // Key Exception - @ 0, 0 say "Exception " - do case - case nKey == K_RETURN // If RETURN key, select - nRetVal := AC_SELECT - case nKey == K_ESC // If ESCAPE key, abort - nRetVal := AC_ABORT - otherwise - nRetVal := AC_GOTO // Otherwise, go to item - endcase -endcase -return nRetVal + @ 0, 20 SAY Str( nRow, 3 ) + " " + Str( nCol, 3 ) + + DO CASE + // After all pending keys are processed, display message + CASE nMode == AC_IDLE + @ 0, 0 SAY PadR( LTrim( Str( nCurElement ) ), 10 ) + nRetVal := AC_CONT // Continue ACHOICE() + CASE nMode == AC_HITTOP // Attempt to go past Top + @ 0, 0 SAY "Hit Top " + // tone( 100, 3 ) + CASE nMode == AC_HITBOTTOM // Attempt to go past Bottom + @ 0, 0 SAY "Hit Bottom" + // tone( 100, 3 ) + CASE nMode == AC_EXCEPT // Key Exception + @ 0, 0 SAY "Exception " + DO CASE + CASE nKey == K_RETURN // If RETURN key, select + nRetVal := AC_SELECT + CASE nKey == K_ESC // If ESCAPE key, abort + nRetVal := AC_ABORT + OTHERWISE + nRetVal := AC_GOTO // Otherwise, go to item + ENDCASE + ENDCASE + + RETURN nRetVal diff --git a/harbour/tests/ac_test2.prg b/harbour/tests/ac_test2.prg index 4e8291fe36..9a059286e3 100644 --- a/harbour/tests/ac_test2.prg +++ b/harbour/tests/ac_test2.prg @@ -21,107 +21,105 @@ #include "inkey.ch" #include "achoice.ch" -function main() +FUNCTION main() -//NIL, empty, numeric, and "not handled" - items -//must be inaccesible and invisible -local aMenu1 := {" --Visky--", "", "not handled"} -local aMenu2 := {" --Vodka--", " --Water--", NIL, "not handled"} -local aMenu3 := {" --Grapa--", 33, "not handled"} + //NIL, empty, numeric, and "not handled" - items + //must be inaccesible and invisible + LOCAL aMenu1 := { " --Visky--", "", "not handled" } + LOCAL aMenu2 := { " --Vodka--", " --Water--", NIL, "not handled" } + LOCAL aMenu3 := { " --Grapa--", 33, "not handled" } -//for AC_NOITEM mode test -local aMenu4 := {"","not handled"} + //for AC_NOITEM mode test + LOCAL aMenu4 := { "", "not handled" } -local lExit := .F. -local nCounter := 1 -local nKeyPressed + LOCAL lExit := .F. + LOCAL nCounter := 1 + LOCAL nKeyPressed -//set to True for items (de)highlighting -//algoritm in clipper -public lHiLiTest := .F. + //set to True for items (de)highlighting + //algoritm in clipper + PUBLIC lHiLiTest := .F. -setcolor("W+/N, BG+/B, , , W/N") -cls -@ 2,1 SAY " --Visky-- --Vodka-- --Grapa--" -@ 3,14 SAY "--Water--" -do while !lExit + SetColor( "W+/N, BG+/B, , , W/N" ) + cls + @ 2, 1 SAY " --Visky-- --Vodka-- --Grapa--" + @ 3, 14 SAY "--Water--" + DO WHILE !lExit -do case - case nCounter == 1 - achoice(2, 1, 3, 11, aMenu1) - case nCounter == 2 - achoice(2, 13, 3, 23, aMenu2, .T., "cUF") - case nCounter == 3 - achoice(2, 25, 3, 35, aMenu3, .T.) - case nCounter == 4 -//User function cUF2() fill screen with exclamation marks -//in clipper it doe's not called in AC_NOITEM mode - achoice(2, 37, 3, 47, aMenu4, .T., "cUF2") + DO CASE + CASE nCounter == 1 + AChoice( 2, 1, 3, 11, aMenu1 ) + CASE nCounter == 2 + AChoice( 2, 13, 3, 23, aMenu2, .T. , "cUF" ) + CASE nCounter == 3 + AChoice( 2, 25, 3, 35, aMenu3, .T. ) + CASE nCounter == 4 + //User function cUF2() fill screen with exclamation marks + //in clipper it doe's not called in AC_NOITEM mode + AChoice( 2, 37, 3, 47, aMenu4, .T. , "cUF2" ) -endcase + ENDCASE -nKeyPressed := lastkey() -if nKeyPressed == K_ESC - lExit := .T. -elseif nKeyPressed == K_RIGHT - nCounter := iif(nCounter == 4, 1, nCounter+1) -elseif nKeyPressed == K_LEFT - nCounter := iif(nCounter == 1, 4, nCounter-1) -endif + nKeyPressed := LastKey() + IF nKeyPressed == K_ESC + lExit := .T. + ELSEIF nKeyPressed == K_RIGHT + nCounter := iif( nCounter == 4, 1, nCounter + 1 ) + ELSEIF nKeyPressed == K_LEFT + nCounter := iif( nCounter == 1, 4, nCounter - 1 ) + ENDIF -enddo + ENDDO -return NIL + RETURN NIL //Test for current and previous items //highliting-dehighliting algoritm -function cUF( nMode, nCurElement, nRowPos ) + +FUNCTION cUF( nMode, nCurElement, nRowPos ) + + LOCAL nRetVal := AC_CONT + LOCAL nKey := LastKey() + + IF lHiLiTest + DispBox( 0, 0, MaxRow(), MaxCol(), Replicate( "#", 9 ), "GR+/G" ) + ENDIF -local nRetVal := AC_CONT -local nKey := LASTKEY() - -if lHiLiTest - - dispbox( 0, 0, maxrow(), maxcol(), repl("#",9), "GR+/G" ) -endif - - -if nMode == AC_NOITEM - nRetVal := AC_ABORT -elseif nMode == AC_EXCEPT - do case - case nKey == K_RETURN - nRetVal := AC_SELECT - otherwise - nRetVal := AC_ABORT - endcase -endif - -return nRetVal + IF nMode == AC_NOITEM + nRetVal := AC_ABORT + ELSEIF nMode == AC_EXCEPT + DO CASE + CASE nKey == K_RETURN + nRetVal := AC_SELECT + OTHERWISE + nRetVal := AC_ABORT + ENDCASE + ENDIF + RETURN nRetVal //test for AC_NOITEM mode //Clipper in AC_NOITEM mode do not call User Function -function cUF2( nMode, nCurElement, nRowPos ) +FUNCTION cUF2( nMode, nCurElement, nRowPos ) -local nRetVal := AC_CONT -local nKey := LASTKEY() + LOCAL nRetVal := AC_CONT + LOCAL nKey := LastKey() -dispbox( 0, 0, maxrow(), maxcol(), repl("!",9), "GR+/G" ) + DispBox( 0, 0, MaxRow(), MaxCol(), Replicate( "!", 9 ), "GR+/G" ) -if nMode == AC_NOITEM - nRetVal := AC_ABORT -elseif nMode == AC_EXCEPT - do case - case nKey == K_RETURN - nRetVal := AC_SELECT - otherwise - nRetVal := AC_ABORT - endcase -endif + IF nMode == AC_NOITEM + nRetVal := AC_ABORT + ELSEIF nMode == AC_EXCEPT + DO CASE + CASE nKey == K_RETURN + nRetVal := AC_SELECT + OTHERWISE + nRetVal := AC_ABORT + ENDCASE + ENDIF -return nRetVal + RETURN nRetVal diff --git a/harbour/tests/tstalias.prg b/harbour/tests/tstalias.prg index 9d2e617277..d4b1a08ebb 100644 --- a/harbour/tests/tstalias.prg +++ b/harbour/tests/tstalias.prg @@ -7,7 +7,7 @@ FUNCTION Main() USE test REPLACE Age WITH 1 - ? FIELD->Age + ? FIELD -> Age //REPLACE 1->Age WITH 2 // Todo: complete support in harbour.y - AliasAddInt() //? FIELD->Age @@ -15,14 +15,14 @@ FUNCTION Main() //REPLACE 1.5->Age WITH 3 // Will produce "Invalid alias expression" //? FIELD->Age - REPLACE TEST->Age WITH 4 - ? FIELD->Age + REPLACE TEST -> Age WITH 4 + ? FIELD -> Age - TEST->Age := 5 - ? FIELD->Age + TEST -> Age := 5 + ? FIELD -> Age - TEST->( FieldPut( FieldPos( 'AGE' ), 6 ) ) - ? FIELD->Age + TEST -> ( FieldPut( FieldPos( 'AGE' ), 6 ) ) + ? FIELD -> Age dbCloseArea() @@ -30,72 +30,72 @@ FUNCTION Main() USE test -// ? ("0")->FIRST - ? ("B")->FIRST - ? ("2")->FIRST - ? 2->FIRST - ? B->FIRST + // ? ("0")->FIRST + ? ( "B" ) -> FIRST + ? ( "2" ) -> FIRST + ? 2 -> FIRST + ? B -> FIRST Inkey( 0 ) -// ? ("0")->FIRST - ? SELECT() - ? SELECT( 1 ) - ? SELECT( 2 ) + // ? ("0")->FIRST + ? Select() + ? Select( 1 ) + ? Select( 2 ) - ? "0", SELECT( "0" ) - ? "1", SELECT( "1" ) - ? "2", SELECT( "2" ) - ? "A", SELECT( "A" ) - ? "B", SELECT( "B" ) - ? "C", SELECT( "C" ) - ? "D", SELECT( "D" ) - ? "E", SELECT( "E" ) - ? "F", SELECT( "F" ) - ? "G", SELECT( "G" ) - ? "H", SELECT( "H" ) - ? "I", SELECT( "I" ) - ? "J", SELECT( "J" ) - ? "K", SELECT( "K" ) - ? "L", SELECT( "L" ) - ? "M", SELECT( "M" ) - ? "N", SELECT( "N" ) - ? "O", SELECT( "O" ) - ? "P", SELECT( "P" ) - ? "Q", SELECT( "Q" ) - ? "R", SELECT( "R" ) - ? "S", SELECT( "S" ) - ? "T", SELECT( "T" ) - ? "U", SELECT( "U" ) - ? "V", SELECT( "V" ) - ? "W", SELECT( "W" ) - ? "X", SELECT( "X" ) - ? "Y", SELECT( "Y" ) - ? "Z", SELECT( "Z" ) + ? "0", Select( "0" ) + ? "1", Select( "1" ) + ? "2", Select( "2" ) + ? "A", Select( "A" ) + ? "B", Select( "B" ) + ? "C", Select( "C" ) + ? "D", Select( "D" ) + ? "E", Select( "E" ) + ? "F", Select( "F" ) + ? "G", Select( "G" ) + ? "H", Select( "H" ) + ? "I", Select( "I" ) + ? "J", Select( "J" ) + ? "K", Select( "K" ) + ? "L", Select( "L" ) + ? "M", Select( "M" ) + ? "N", Select( "N" ) + ? "O", Select( "O" ) + ? "P", Select( "P" ) + ? "Q", Select( "Q" ) + ? "R", Select( "R" ) + ? "S", Select( "S" ) + ? "T", Select( "T" ) + ? "U", Select( "U" ) + ? "V", Select( "V" ) + ? "W", Select( "W" ) + ? "X", Select( "X" ) + ? "Y", Select( "Y" ) + ? "Z", Select( "Z" ) Inkey( 0 ) - ? "" , dbSelectArea() , SELECT() - ? "" , dbSelectArea( NIL ), SELECT() - ? "" , dbSelectArea( "" ) , SELECT() - ? " " , dbSelectArea( " " ), SELECT() - ? "0" , dbSelectArea( "0" ), SELECT() - ? "1" , dbSelectArea( "1" ), SELECT() - ? "2" , dbSelectArea( "2" ), SELECT() - ? "A" , dbSelectArea( "A" ), SELECT() - ? "B" , dbSelectArea( "B" ), SELECT() - ? "C" , dbSelectArea( "C" ), SELECT() - ? "D" , dbSelectArea( "D" ), SELECT() - ? "E" , dbSelectArea( "E" ), SELECT() - ? "F" , dbSelectArea( "F" ), SELECT() - ? "G" , dbSelectArea( "G" ), SELECT() - ? "H" , dbSelectArea( "H" ), SELECT() - ? "I" , dbSelectArea( "I" ), SELECT() - ? "J" , dbSelectArea( "J" ), SELECT() - ? "K" , dbSelectArea( "K" ), SELECT() - ? "L" , dbSelectArea( "L" ), SELECT() - ? "M" , dbSelectArea( "M" ), SELECT() - ? "Z" , dbSelectArea( "Z" ), SELECT() - ? "AA", dbSelectArea( "AA" ), SELECT() + ? "" , dbSelectArea() , Select() + ? "" , dbSelectArea( NIL ), Select() + ? "" , dbSelectArea( "" ) , Select() + ? " " , dbSelectArea( " " ), Select() + ? "0" , dbSelectArea( "0" ), Select() + ? "1" , dbSelectArea( "1" ), Select() + ? "2" , dbSelectArea( "2" ), Select() + ? "A" , dbSelectArea( "A" ), Select() + ? "B" , dbSelectArea( "B" ), Select() + ? "C" , dbSelectArea( "C" ), Select() + ? "D" , dbSelectArea( "D" ), Select() + ? "E" , dbSelectArea( "E" ), Select() + ? "F" , dbSelectArea( "F" ), Select() + ? "G" , dbSelectArea( "G" ), Select() + ? "H" , dbSelectArea( "H" ), Select() + ? "I" , dbSelectArea( "I" ), Select() + ? "J" , dbSelectArea( "J" ), Select() + ? "K" , dbSelectArea( "K" ), Select() + ? "L" , dbSelectArea( "L" ), Select() + ? "M" , dbSelectArea( "M" ), Select() + ? "Z" , dbSelectArea( "Z" ), Select() + ? "AA", dbSelectArea( "AA" ), Select() -return NIL + RETURN NIL diff --git a/harbour/tests/tstmacro.prg b/harbour/tests/tstmacro.prg index 20afc3779e..560cd0659e 100644 --- a/harbour/tests/tstmacro.prg +++ b/harbour/tests/tstmacro.prg @@ -7,49 +7,49 @@ MEMVAR cStr, cStr_1, cVar_1, aVar, oVar, OtherVar, SomeVar, Private MEMVAR cMainPrivate, GlobalPrivate, BornInRunTimeVar, Public -Function Main( ) +FUNCTION Main( ) - PRIVATE cStr := 'cVar', cStr_1 := 'cVar_1', aVar := { 'cVar_1' }, oVar + PRIVATE cStr := 'cVar', cStr_1 := 'cVar_1', aVar := { 'cVar_1' }, oVar - PRIVATE cVar_1, cMainPrivate := 'cVar_1', GlobalPrivate := 'BornInRunTimeVar' + PRIVATE cVar_1, cMainPrivate := 'cVar_1', GlobalPrivate := 'BornInRunTimeVar' - &cStr_1 = 'Simple ' - ? M->cVar_1 + &cStr_1 = 'Simple ' + ? M -> cVar_1 - &( 'cVar' + '_1' ) := 'Macro' - ?? M->cVar_1 + &( 'cVar' + '_1' ) := 'Macro' + ?? M -> cVar_1 - M->&cStr_1 = 'Aliased' - ? M->cVar_1 + M -> &cStr_1 = 'Aliased' + ? M -> cVar_1 - MEMVAR->&( 'cVar' + '_1' ) := ' Macro' - ?? M->cVar_1 + MEMVAR -> &( 'cVar' + '_1' ) := ' Macro' + ?? M -> cVar_1 - cStr := 'cVar_' - &cStr.1 = 'Concatenated Macro (Numeric)' - ? M->cVar_1 + cStr := 'cVar_' + &cStr.1 = 'Concatenated Macro (Numeric)' + ? M -> cVar_1 - cStr := 'cVar' - &cStr._1 = 'Concatenated Macro (String)' - ? M->cVar_1 + cStr := 'cVar' + &cStr._1 = 'Concatenated Macro (String)' + ? M -> cVar_1 - &( aVar[1] ) := 'Array Macro' - ? M->cVar_1 + &( aVar[1] ) := 'Array Macro' + ? M -> cVar_1 - oVar := TValue():New() - oVar:cVal := 'cVar_1' - &( oVar:cVal ) := 'Class Macro' - ? M->cVar_1 + oVar := TValue():New() + oVar:cVal := 'cVar_1' + &( oVar:cVal ) := 'Class Macro' + ? M -> cVar_1 - SubFun() + SubFun() - ? '"cVar_1" = [' + M->cVar_1 + '] AFTER SubFun() PRIVATE' + ? '"cVar_1" = [' + M -> cVar_1 + '] AFTER SubFun() PRIVATE' - ? M->NewPublicVar + ? M -> NewPublicVar TEST_TYPE() -RETURN NIL + RETURN NIL FUNCTION TValue @@ -61,106 +61,112 @@ FUNCTION TValue oClass:AddData( "cVal" ) oClass:AddMethod( "New", @New() ) // New Method - oClass:Create() + oClass:Create() ENDIF -RETURN( oClass:Instance() ) + RETURN( oClass:Instance() ) STATIC FUNCTION New() LOCAL Self := QSelf() -RETURN Self + RETURN Self -Function SubFun() +FUNCTION SubFun() - ? '"cVar_1" = [' + M->cVar_1 + '] BEFORE SubFun() PRIVATE' + ? '"cVar_1" = [' + M -> cVar_1 + '] BEFORE SubFun() PRIVATE' - // Testing conflict with KEY WORDS - PRIVATE PRIVATE := 'I am a Var named PRIVATE ', &cMainPrivate, SomeVar, OtherVar := 1, &GlobalPrivate := 'I was born in Run Time' - PUBLIC PUBLIC := 'NewPublicVar' - PUBLIC &PUBLIC + // Testing conflict with KEY WORDS + PRIVATE PRIVATE := 'I am a Var named PRIVATE ', &cMainPrivate, SomeVar, OtherVar := 1, &GlobalPrivate := 'I was born in Run Time' + PUBLIC PUBLIC := 'NewPublicVar' + PUBLIC &PUBLIC - ? M->NewPublicVar + ? M -> NewPublicVar - M->NewPublicVar := 'Still Alive because I am PUBLIC' + M -> NewPublicVar := 'Still Alive because I am PUBLIC' - ? M->PRIVATE + PRIVATE - ? PRIVATE + M->PRIVATE + ? M -> PRIVATE + PRIVATE + ? PRIVATE + M -> PRIVATE - ? BornInRunTimeVar + ? BornInRunTimeVar - &cMainPrivate := 'In SubFun()' + &cMainPrivate := 'In SubFun()' - ? '"cVar_1" = [' + M->cVar_1 + '] in SubFun() PRIVATE' + ? '"cVar_1" = [' + M -> cVar_1 + '] in SubFun() PRIVATE' -RETURN NIL + RETURN NIL STATIC PROCEDURE TEST_TYPE() -LOCAL v1, v2, v1a, v2a -LOCAL bErr:=ERRORBLOCK({|e|BREAK(e)}), oE + + LOCAL v1, v2, v1a, v2a + LOCAL bErr := ErrorBlock( { |e|Break( e ) } ), oE ? ? "=========== TYPE() function =================" v1 := "UDF()" - ? "Test for TYPE('UDF()') - should be 'UI': ", TYPE(v1) + ? "Test for TYPE('UDF()') - should be 'UI': ", Type( v1 ) v2 := "UDF_STATIC()" - ? "Test for TYPE('UDF_STATIC()') - should be 'U': ", TYPE(v2) - ? "Test for &"+"'UDF()' - should print 'udf': ", &v1 - ? "Test for &"+"'UDF_STATIC()' - should print 'ERROR: undefined function': " + ? "Test for TYPE('UDF_STATIC()') - should be 'U': ", Type( v2 ) + ? "Test for &" + "'UDF()' - should print 'udf': ", &v1 + ? "Test for &" + "'UDF_STATIC()' - should print 'ERROR: undefined function': " BEGIN SEQUENCE ?? &v2 RECOVER USING oE - ? "ERROR: "+oE:Description + ? "ERROR: " + oE:Description END SEQUENCE - ERRORBLOCK(bErr) + ErrorBlock( bErr ) v1 := "UDF" - ? "Test for TYPE('UDF') - should be 'U': ", TYPE(v1) + ? "Test for TYPE('UDF') - should be 'U': ", Type( v1 ) v2 := "UDF_STATIC" - ? "Test for TYPE('UDF_STATIC') - should be 'U': ", TYPE(v2) + ? "Test for TYPE('UDF_STATIC') - should be 'U': ", Type( v2 ) v1a := "UDF:=1" - ? "Test for TYPE('UDF:=1') - should be 'N': ", TYPE(v1a) + ? "Test for TYPE('UDF:=1') - should be 'N': ", Type( v1a ) v2a := "UDF_STATIC:=1" - ? "Test for TYPE('UDF_STATIC:=1') - should be 'N': ", TYPE(v2a) + ? "Test for TYPE('UDF_STATIC:=1') - should be 'N': ", Type( v2a ) ? "=== after the assignment ===" v1 := "UDF" - ? "Test for TYPE('UDF') - should be 'N': ", TYPE(v1) + ? "Test for TYPE('UDF') - should be 'N': ", Type( v1 ) v2 := "UDF_STATIC" - ? "Test for TYPE('UDF_STATIC') - should be 'N': ", TYPE(v2) + ? "Test for TYPE('UDF_STATIC') - should be 'N': ", Type( v2 ) v1 := "UDF()" - ? "Test for TYPE('UDF()') - should be 'UI': ", TYPE(v1) + ? "Test for TYPE('UDF()') - should be 'UI': ", Type( v1 ) v2 := "UDF_STATIC()" - ? "Test for TYPE('UDF_STATIC()') - should be 'U': ", TYPE(v2) + ? "Test for TYPE('UDF_STATIC()') - should be 'U': ", Type( v2 ) ? "=== declared public variable ===" PUBLIC UDF2, UDF2_STATIC v1 := "UDF2()" - ? "Test for TYPE('UDF2()') - should be 'UI': ", TYPE(v1) + ? "Test for TYPE('UDF2()') - should be 'UI': ", Type( v1 ) v2 := "UDF2_STATIC()" - ? "Test for TYPE('UDF2_STATIC()') - should be 'U': ", TYPE(v2) + ? "Test for TYPE('UDF2_STATIC()') - should be 'U': ", Type( v2 ) v1 := "UDF2" - ? "Test for TYPE('UDF') - should be 'L': ", TYPE(v1) + ? "Test for TYPE('UDF') - should be 'L': ", Type( v1 ) v2 := "UDF2_STATIC" - ? "Test for TYPE('UDF_STATIC') - should be 'L': ", TYPE(v2) + ? "Test for TYPE('UDF_STATIC') - should be 'L': ", Type( v2 ) - ? -RETURN + ? + + RETURN STATIC FUNCTION UDF_STATIC() -RETURN "udf_static" + + RETURN "udf_static" FUNCTION UDF() -RETURN "udf" + + RETURN "udf" STATIC FUNCTION UDF2_STATIC() -RETURN "udf2_static" + + RETURN "udf2_static" FUNCTION UDF2() -RETURN "udf2" + + RETURN "udf2"