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
This commit is contained in:
Viktor Szakats
2012-04-19 00:26:16 +00:00
parent 634d03ea4c
commit b118ac7cdd
11 changed files with 491 additions and 447 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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