* bin/commit.hb
* config/detect.mk
* config/detfun.mk
* config/detplat.mk
* config/dir.mk
* config/dirsh.mk
* config/global.mk
* config/globsh.mk
* config/instsh.mk
* config/lang.hb
* config/lang2po.hb
* config/po2lang.hb
* config/postinst.hb
* contrib/hbexpat/tests/tohash.prg
* contrib/hbformat/utils/hbformat.ini
* contrib/hbmisc/hbedit.prg
* contrib/hbmxml/tests/testmxml.prg
* contrib/hbnetio/utils/hbnetio/_console.prg
* contrib/hbnetio/utils/hbnetio/_winsvc.prg
* contrib/hbnetio/utils/hbnetio/hbnetio.prg
* contrib/hbnetio/utils/hbnetio/netiomgm.hb
* contrib/hbwin/tests/ole.prg
* contrib/hbwin/tests/oletst2.js
* contrib/hbwin/tests/oletst2.vbs
* contrib/hbxpp/doc/en/binnumx.txt
* contrib/hbxpp/doc/en/dbcmdx.txt
* contrib/xhb/htmutil.prg
* contrib/xhb/tfile.prg
* contrib/xhb/tframe.prg
* contrib/xhb/thtm.prg
* ChangeLog.txt
* debian/copyright
* doc/class_tp.txt
* doc/hdr_tpl.txt
* doc/xhb-diff.txt
* LICENSE.txt
* package/harbour-wce.spec.in
* package/harbour-win.spec.in
* package/harbour.spec
* package/mpkg_rpm_wce.sh
* package/mpkg_rpm_win.sh
* package/mpkg_rpm.sh
* package/mpkg_src.sh
* package/mpkg_ver.sh
* src/rtl/achoice.prg
* src/rtl/getsys53.prg
* src/rtl/tgetlist.prg
* src/rtl/tlabel.prg
* src/rtl/tmenusys.prg
* tests/hbdoc.prg
* tests/langmsg.prg
* tests/rto_get.prg
* tests/rto_tb.prg
+ doc/en/ati.txt
+ doc/en/dirdrive.txt
+ doc/en/hashfunc.txt
+ doc/en/hbtoken.txt
+ doc/en/left.txt
+ doc/en/proc.txt
+ doc/en/strtran.txt
+ doc/en/transfrm.txt
+ doc/en/typefile.txt
* doc/en/*
* more partial sync with 3.4 fork
930 lines
27 KiB
Plaintext
930 lines
27 KiB
Plaintext
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 1999 Ryszard Glab <rglab@imid.med.pl>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
__mvPublic()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
Variable management
|
|
$ONELINER$
|
|
This function creates a PUBLIC variable
|
|
$SYNTAX$
|
|
__mvPublic( <variable_name> )
|
|
$ARGUMENTS$
|
|
<variable_name> = either a string that contains the variable's name or
|
|
an one-dimensional array of strings with variable names
|
|
No skeleton are allowed here.
|
|
$RETURNS$
|
|
Nothing
|
|
$DESCRIPTION$
|
|
This function can be called either by the Harbour compiler or by user.
|
|
The compiler always passes the item of HB_IT_SYMBOL type that stores the
|
|
name of variable.
|
|
If a variable with the same name exists already then the new
|
|
variable is not created - the previous value remains unchanged.
|
|
If it is first variable with this name then the variable is
|
|
initialized with .T. value.
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
H
|
|
$FILES$
|
|
Library is core
|
|
$SEEALSO$
|
|
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 1999 Ryszard Glab <rglab@imid.med.pl>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
__mvPrivate()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
Variable management
|
|
$ONELINER$
|
|
This function creates a PRIVATE variable
|
|
$SYNTAX$
|
|
__mvPrivate( <variable_name> )
|
|
$ARGUMENTS$
|
|
<variable_name> = either a string that contains the variable's name or
|
|
an one-dimensional array of strings with variable names
|
|
No skeleton are allowed here.
|
|
$RETURNS$
|
|
Nothing
|
|
$DESCRIPTION$
|
|
This function can be called either by the Harbour compiler or by user.
|
|
The compiler always passes the item of HB_IT_SYMBOL type that stores the
|
|
name of variable.
|
|
If a variable with the same name exists already then the value of old
|
|
variable is hidden until the new variable is released. The new variable
|
|
is always initialized to NIL value.
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
H
|
|
$FILES$
|
|
Library is core
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 1999 Ryszard Glab <rglab@imid.med.pl>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
__mvXRelease()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
Variable management
|
|
$ONELINER$
|
|
This function releases value stored in PRIVATE or PUBLIC variable
|
|
$SYNTAX$
|
|
__mvXRelease( <variable_name> )
|
|
$ARGUMENTS$
|
|
<variable_name> = either a string that contains the variable's name or
|
|
an one-dimensional array of strings with variable names
|
|
No skeleton are allowed here.
|
|
$RETURNS$
|
|
Nothing
|
|
$DESCRIPTION$
|
|
This function releases values stored in memory variable. It shouldn't
|
|
be called directly, rather it should be placed into RELEASE command.
|
|
If the released variable is a PRIVATE variable then previously hidden
|
|
variable with the same name becomes visible after exit from the
|
|
procedure where released variable was created. If you access
|
|
the released variable in the same function/procedure where it
|
|
was created the the NIL value is returned. You can however assign
|
|
a new value to released variable without any side effects.
|
|
|
|
It releases variable even if this variable was created in different
|
|
procedure.
|
|
$EXAMPLES$
|
|
MEMVAR mPrivate
|
|
|
|
PROCEDURE Main()
|
|
|
|
PRIVATE mPrivate := "PRIVATE from Main()"
|
|
|
|
? mPrivate // --> PRIVATE from Main()
|
|
Test()
|
|
? mPrivate // --> PRIVATE from Main()
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE Test()
|
|
|
|
PRIVATE mPrivate := "PRIVATE from Test()"
|
|
|
|
? mPrivate // --> PRIVATE from Test()
|
|
RELEASE mPrivate
|
|
? mPrivate // --> NIL
|
|
mPrivate := "Again in Main()"
|
|
|
|
RETURN
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
H
|
|
$FILES$
|
|
Library is core
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 1999 Ryszard Glab <rglab@imid.med.pl>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
__mvRelease()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
Variable management
|
|
$ONELINER$
|
|
This function releases PRIVATE variables
|
|
$SYNTAX$
|
|
__mvRelease( <skeleton>, <include_exclude_flag> )
|
|
$ARGUMENTS$
|
|
<skeleton> = string that contains the wildcard mask for variables' names
|
|
that will be released. Supported wildcards: '*' and '?'
|
|
<include_exclude_flag> = logical value that specifies if variables
|
|
that match passed skeleton should be either included in deletion
|
|
(if .T.) or excluded from deletion (if .F.)
|
|
$RETURNS$
|
|
Nothing
|
|
$DESCRIPTION$
|
|
This function releases values stored in memory variables. It shouldn't
|
|
be called directly, it should be placed into `RELEASE ALL` command.
|
|
If the released variable is a PRIVATE variable then previously hidden
|
|
variable with the same name becomes visible after exit from the
|
|
procedure where released variable was created. If you access
|
|
the released variable in the same function/procedure where it
|
|
was created the the NIL value is returned. You can however assign
|
|
a new value to released variable without any side effects.
|
|
PUBLIC variables are not changed by this function.
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
H
|
|
$FILES$
|
|
Library is core
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 1999 Ryszard Glab <rglab@imid.med.pl>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
__mvScope()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
Variable management
|
|
$ONELINER$
|
|
If variable exists then returns its scope.
|
|
$SYNTAX$
|
|
__mvScope( <cVarName> )
|
|
$ARGUMENTS$
|
|
<cVarName> = a string with a variable name to check
|
|
$RETURNS$
|
|
The symbolic values are defined in hbmemvar.ch
|
|
<table-noheader>
|
|
HB_MV_NOT_FOUND variable is not declared (not found in symbol table)
|
|
HB_MV_UNKNOWN if variable doesn't exist (but found in symbol table)
|
|
HB_MV_ERROR if information cannot be obtained (memory error or argument error)
|
|
HB_MV_PUBLIC for public variables
|
|
HB_MV_PRIVATE_GLOBAL for private variables declared outside of current function/procedure
|
|
HB_MV_PRIVATE_LOCAL for private variables declared in current function/procedure
|
|
</table>
|
|
$EXAMPLES$
|
|
#include "hbmemvar.ch"
|
|
|
|
MEMVAR pPublic
|
|
MEMVAR mPrivateGlobal
|
|
MEMVAR mPrivateLocal
|
|
|
|
PROCEDURE Main()
|
|
|
|
PUBLIC pPublic
|
|
PRIVATE mPrivateGlobal
|
|
|
|
CallProc()
|
|
? __mvScope( "mPrivateLocal" ) // --> HB_MV_UNKNOWN
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE CallProc()
|
|
|
|
PRIVATE mPrivateLocal
|
|
|
|
? __mvScope( "pPublic" ) // --> HB_MV_PUBLIC
|
|
? __mvScope( "mPrivateGlobal" ) // --> HB_MV_PRIVATE_GLOBAL
|
|
? __mvScope( "mPrivateLocal" ) // --> HB_MV_PRIVATE_LOCAL
|
|
? __mvScope( "mFindMe" ) // --> HB_MV_NOT_FOUND
|
|
|
|
IF __mvScope( "pPublic" ) > HB_MV_ERROR
|
|
? "Variable exists"
|
|
ELSE
|
|
? "Variable not created yet"
|
|
ENDIF
|
|
|
|
RETURN
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
H
|
|
$FILES$
|
|
Library is core
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 1999 Ryszard Glab <rglab@imid.med.pl>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
__mvClear()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
Variable management
|
|
$ONELINER$
|
|
This function releases all PRIVATE and PUBLIC variables
|
|
$SYNTAX$
|
|
__mvClear()
|
|
$ARGUMENTS$
|
|
None
|
|
$RETURNS$
|
|
Nothing
|
|
$DESCRIPTION$
|
|
This function releases all PRIVATE and PUBLIC variables.
|
|
It is used to implement `CLEAR MEMORY` statement.
|
|
The memory occupied by all visible variables are released - any
|
|
attempt to access the variable will result in a runtime error.
|
|
You have to reuse PRIVATE or PUBLIC statement to create again
|
|
the variable that was cleared by this function.
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
H
|
|
$FILES$
|
|
Library is core
|
|
$SEEALSO$
|
|
__mvPublic()
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 1999 Ryszard Glab <rglab@imid.med.pl>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
__mvDbgInfo()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
Internal
|
|
$ONELINER$
|
|
This function returns the information about the variables for debugger
|
|
$SYNTAX$
|
|
__mvDbgInfo( <nScope> [, <nPosition> [, @<cVarName>] ] )
|
|
$ARGUMENTS$
|
|
<nScope> = the scope of variables for which an information is asked
|
|
|
|
Supported values (defined in hbmemvar.ch)
|
|
<table-noheader>
|
|
HB_MV_PUBLIC
|
|
HB_MV_PRIVATE (or any other value)
|
|
</table>
|
|
|
|
<nPosition> = the position of asked variable on the list of variables
|
|
with specified scope - it should start from position 1
|
|
<cVarName> = the value is filled with a variable name if passed by
|
|
reference and <nPosition> is specified
|
|
$RETURNS$
|
|
The return value depends on the number of arguments passed
|
|
$DESCRIPTION$
|
|
This function retrieves the information about memvar variables.
|
|
It returns either the number of variables with given scope (when the
|
|
first argument is passed only) or a value of variable identified by its
|
|
position in the variables' list (when second argument is passed).
|
|
It also returns the name of a variable if optional third argument
|
|
is passed by reference.
|
|
|
|
If requested variable doesn't exist (requested position is
|
|
greater then the number of defined variables) then NIL value is
|
|
returned and variable name is set to `?`.
|
|
|
|
The dynamic symbols table is used to find a PUBLIC variable then
|
|
the PUBLIC variables are always sorted alphabetically. The PRIVATE
|
|
variables are sorted in the creation order.
|
|
|
|
Note:
|
|
|
|
Due to dynamic nature of memvar variables there is no guarantee that
|
|
successive calls to retrieve the value of Nth PUBLIC variable will
|
|
return the value of the same variable.
|
|
$EXAMPLES$
|
|
#include "hbmemvar.ch"
|
|
|
|
MEMVAR cPublic
|
|
MEMVAR cPrivate
|
|
MEMVAR ccPublic
|
|
MEMVAR ccPrivate
|
|
|
|
PROCEDURE Main()
|
|
|
|
LOCAL nCount, tmp, xValue, cName
|
|
|
|
nCount := __mvDbgInfo( HB_MV_PUBLIC )
|
|
FOR tmp := 1 TO nCount
|
|
xValue := __mvDbgInfo( HB_MV_PUBLIC, tmp, @cName )
|
|
? tmp, cName, xValue
|
|
NEXT
|
|
|
|
? "PUBLIC=", __mvDbgInfo( HB_MV_PUBLIC )
|
|
? "PRIVATE=", __mvDbgInfo( HB_MV_PRIVATE )
|
|
|
|
PUBLIC cPublic := "cPublic in MAIN"
|
|
|
|
? "PUBLIC=", __mvDbgInfo( HB_MV_PUBLIC )
|
|
? "PRIVATE=", __mvDbgInfo( HB_MV_PRIVATE )
|
|
|
|
PRIVATE cPrivate := "cPrivate in MAIN"
|
|
|
|
? "PUBLIC=", __mvDbgInfo( HB_MV_PUBLIC )
|
|
? "PRIVATE=", __mvDbgInfo( HB_MV_PRIVATE )
|
|
|
|
CountMemvars()
|
|
|
|
? "Back in Main"
|
|
? "PUBLIC=", __mvDbgInfo( HB_MV_PUBLIC )
|
|
? "PRIVATE=", __mvDbgInfo( HB_MV_PRIVATE )
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE CountMemvars()
|
|
|
|
LOCAL nCount, tmp, xValue, cName
|
|
|
|
PUBLIC ccPublic := "ccPublic"
|
|
PRIVATE ccPrivate := "ccPrivate"
|
|
|
|
? "In CountMemvars"
|
|
? "PUBLIC=", __mvDbgInfo( HB_MV_PUBLIC )
|
|
? "PRIVATE=", __mvDbgInfo( HB_MV_PRIVATE )
|
|
|
|
PRIVATE cPublic := "cPublic"
|
|
|
|
? "PUBLIC=", __mvDbgInfo( HB_MV_PUBLIC )
|
|
? "PRIVATE=", __mvDbgInfo( HB_MV_PRIVATE )
|
|
|
|
nCount := __mvDbgInfo( HB_MV_PRIVATE ) + 1
|
|
FOR tmp := 1 TO nCount
|
|
xValue := __mvDbgInfo( HB_MV_PRIVATE, tmp, @cName )
|
|
? tmp, "=", cName, xValue
|
|
NEXT
|
|
|
|
nCount := __mvDbgInfo( HB_MV_PUBLIC ) + 1
|
|
FOR tmp := 1 TO nCount
|
|
xValue := __mvDbgInfo( HB_MV_PUBLIC, tmp, @cName )
|
|
? tmp, "=", cName, xValue
|
|
NEXT
|
|
|
|
RETURN
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
This function should be called from the debugger only.
|
|
$FILES$
|
|
Library is core
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 1999-2001 Chen Kedem <niki@actcom.co.il>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
__mvExist()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
Variable management
|
|
$ONELINER$
|
|
Determine if a given name is a PUBLIC or PRIVATE memory variable
|
|
$SYNTAX$
|
|
__mvExist( <cVarName> ) --> lVariableExist
|
|
$ARGUMENTS$
|
|
<cVarName> - string that specifies the name of variable to check
|
|
$RETURNS$
|
|
__mvExist() return TRUE (.T.) if a MEMVAR named <cVarName> exist.
|
|
$DESCRIPTION$
|
|
This function determine if a PUBLIC or PRIVATE variable with the
|
|
name <cVarName> exist or not.
|
|
$EXAMPLES$
|
|
LOCAL TheLocal
|
|
STATIC TheStatic
|
|
PUBLIC ThePublic
|
|
PRIVATE ThePrivate
|
|
? __mvExist( "NotExist" ) // --> .F.
|
|
? __mvExist( "TheLocal" ) // --> .F.
|
|
? __mvExist( "TheStatic" ) // --> .F.
|
|
? __mvExist( "ThePublic" ) // --> .T.
|
|
? __mvExist( "ThePrivate" ) // --> .T.
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
H
|
|
$SEEALSO$
|
|
MEMVAR, PRIVATE, PUBLIC
|
|
$FILES$
|
|
Library is core
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 1999 Ryszard Glab <rglab@imid.med.pl>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
__mvGet()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
Variable management
|
|
$ONELINER$
|
|
This function returns value of memory variable
|
|
$SYNTAX$
|
|
__mvGet( <cVarName> ) --> xVar
|
|
$ARGUMENTS$
|
|
<cVarName> - string that specifies the name of variable
|
|
$RETURNS$
|
|
<xVar> The value of variable
|
|
$DESCRIPTION$
|
|
This function returns the value of PRIVATE or PUBLIC variable if
|
|
this variable exists otherwise it generates a runtime error.
|
|
The variable is specified by its name passed as the function parameter.
|
|
$EXAMPLES$
|
|
? ValType( MemVarBlock( "myvar" ) )
|
|
STATIC FUNCTION MemVarBlock( cMemvar )
|
|
RETURN {| x | ;
|
|
iif( PCount() == 0, ;
|
|
__mvGet( cMemvar ), ;
|
|
__mvPut( cMemvar, x ) ) }
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
H
|
|
$SEEALSO$
|
|
__mvPut()
|
|
$FILES$
|
|
Library is core
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 1999 Ryszard Glab <rglab@imid.med.pl>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
__mvPut()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
Variable management
|
|
$ONELINER$
|
|
This function set the value of memory variable
|
|
$SYNTAX$
|
|
__mvPut( <cVarName> [, <xValue>] ) --> xValue
|
|
$ARGUMENTS$
|
|
<cVarName> - string that specifies the name of variable
|
|
<xValue> - a value of any type that will be set - if it is not
|
|
specified then NIL is assumed
|
|
$RETURNS$
|
|
<xValue> A value assigned to the given variable.
|
|
$DESCRIPTION$
|
|
This function sets the value of PRIVATE or PUBLIC variable if
|
|
this variable exists otherwise it generates a runtime error.
|
|
The variable is specified by its name passed as the function
|
|
parameter.
|
|
If a value is not specified then the NIL is assumed
|
|
$EXAMPLES$
|
|
? ValType( MemVarBlock( "myvar" ) )
|
|
STATIC FUNCTION MemVarBlock( cMemvar )
|
|
RETURN {| x | ;
|
|
iif( PCount() == 0, ;
|
|
__mvGet( cMemvar ), ;
|
|
__mvPut( cMemvar, x ) ) }
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
H
|
|
$FILES$
|
|
Library is core
|
|
$SEEALSO$
|
|
__mvPut()
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 1999 Ryszard Glab <rglab@imid.med.pl>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
MemVarBlock()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
Variable management
|
|
$ONELINER$
|
|
Returns a codeblock that sets/gets a value of memvar variable
|
|
$SYNTAX$
|
|
MemVarBlock( <cMemvarName> ) --> bBlock
|
|
$ARGUMENTS$
|
|
<cMemvarName> - a string that contains the name of variable
|
|
$RETURNS$
|
|
<bBlock> a codeblock that sets/get the value of variable
|
|
$DESCRIPTION$
|
|
This function returns a codeblock that sets/gets the value of
|
|
PRIVATE or PUBLIC variable. When this codeblock is evaluated
|
|
without any parameters passed then it returns the current value
|
|
of given variable. If the second parameter is passed for
|
|
the codeblock evaluation then its value is used to set the new
|
|
value of given variable - the passed value is also returned
|
|
as a value of the codeblock evaluation.
|
|
$EXAMPLES$
|
|
LOCAL cbSetGet
|
|
PUBLIC xPublic
|
|
|
|
cbSetGet := MemVarBlock( "xPublic" )
|
|
Eval( cbSetGet, "new value" )
|
|
? "Value of xPublic variable", Eval( cbSetGet )
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
C
|
|
$SEEALSO$
|
|
__mvGet(), __mvPut()
|
|
$FILES$
|
|
Library is core
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 1999-2001 Chen Kedem <niki@actcom.co.il>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
FieldBlock()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
RDD
|
|
$ONELINER$
|
|
Return a code block that sets/gets a value for a given field
|
|
$SYNTAX$
|
|
FieldBlock( <cFieldName> ) --> bFieldBlock
|
|
$ARGUMENTS$
|
|
<cFieldName> is a string that contain the field name.
|
|
$RETURNS$
|
|
FieldBlock() return a code block that when evaluate could retrieve
|
|
a field value or assigning a new value to the field. If <cFieldName>
|
|
is not specified or from type other than character, FieldBlock()
|
|
return NIL.
|
|
$DESCRIPTION$
|
|
FieldBlock() return a code block that sets/gets the value of field.
|
|
When this code block is evaluated without any parameters passed then
|
|
it returns the current value of the given field. If the code block
|
|
is evaluated with a parameter, than its value is used to set a new
|
|
value to the field, this value is also return by the block. If the
|
|
block is evaluate and there is no field with the name <cFieldName>
|
|
in the current work area, the code block return NIL.
|
|
|
|
Note that FieldBlock() works on the current work area, if you need
|
|
a specific work area code block use FieldWBlock() instead.
|
|
$EXAMPLES$
|
|
// open a file named test.dbf that have a field named "first"
|
|
LOCAL bField
|
|
USE test
|
|
bField := FieldBlock( "first" )
|
|
? "Original value of field 'first':", Eval( bField )
|
|
Eval( bField, "Mr X new name" )
|
|
? "New value for the field 'first':", Eval( bField )
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
If the block is evaluate and there is no field with the name
|
|
<cFieldName> in the current work area, the code block return NIL.
|
|
|
|
CA-Cl*pper would raise `BASE/1003` error if the field does not exist.
|
|
$FILES$
|
|
Library is core
|
|
$SEEALSO$
|
|
Eval(), FieldWBlock(), MemVarBlock()
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 1999-2001 Chen Kedem <niki@actcom.co.il>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
FieldWBlock()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
RDD
|
|
$ONELINER$
|
|
Return a sets/gets code block for field in a given work area
|
|
$SYNTAX$
|
|
FieldWBlock( <cFieldName>, <nWorkArea> ) --> bFieldBlock
|
|
$ARGUMENTS$
|
|
<cFieldName> is a string that contain the field name.
|
|
|
|
<nWorkArea> is the work area number in which <cFieldName> exist.
|
|
$RETURNS$
|
|
FieldWBlock() return a code block that when evaluate could retrieve
|
|
field value or assigning a new value for a field in a given work
|
|
area. If <cFieldName> is not specified or from type other than
|
|
character, or if <nWorkArea> is not specified or is not numeric
|
|
FieldWBlock() return NIL.
|
|
$DESCRIPTION$
|
|
FieldWBlock() return a code block that sets/gets the value of field
|
|
from a given work area. When this code block is evaluated without
|
|
any parameters passed then it returns the current value of the given
|
|
field. If the code block is evaluated with a parameter, than its
|
|
value is used to set a new value to the field, this value is also
|
|
return by the block. If the block is evaluate and there is no field
|
|
with the name <cFieldName> in work area number <nWorkArea>, the code
|
|
block return NIL.
|
|
$EXAMPLES$
|
|
LOCAL bField
|
|
// open a file named 'one' in work area 1 that has a field named "first"
|
|
SELECT 1
|
|
USE one
|
|
// open a file named 'two' in work area 2 that also has a field named "first"
|
|
SELECT 2
|
|
USE two
|
|
SELECT 1
|
|
// this block works on the field "first" that exists on work area 2
|
|
bField := FieldWBlock( "first", 2 )
|
|
? "Original 'first' values:", one->first, two->first
|
|
? "'first' value for file 'two':", Eval( bField )
|
|
Eval( bField, "'two' has updated 'first'" )
|
|
? "and now:", one->first, two->first
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
If the block is evaluate and there is no field with the name
|
|
<cFieldName> in the given work area, the code block return NIL.
|
|
|
|
CA-Cl*pper would raise BASE/1003 error if the field does not exist.
|
|
$FILES$
|
|
Library is core
|
|
$SEEALSO$
|
|
Eval(), FieldBlock(), MemVarBlock()
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 1999 Ryszard Glab <rglab@imid.med.pl>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
Type()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
Variable management
|
|
$ONELINER$
|
|
Retrieves the type of an expression
|
|
$SYNTAX$
|
|
Type( <cExp> ) --> cRetType
|
|
$ARGUMENTS$
|
|
<cExp> must be a character expression.
|
|
$RETURNS$
|
|
<cRetType> a string indicating the type of the passed expression.
|
|
|
|
<table>
|
|
<cRetType> Meaning
|
|
|
|
"A" Array
|
|
"B" Block
|
|
"C" Character (string)
|
|
"D" Date
|
|
"L" Logical
|
|
"M" Memo
|
|
"N" Numeric
|
|
"O" Object
|
|
"P" Pointer
|
|
"S" Symbol
|
|
"U" NIL, local or static variable, or not linked-in function
|
|
"UE" syntax error in the expression or invalid arguments
|
|
"UI" function with non-reserved name was requested
|
|
</table>
|
|
$DESCRIPTION$
|
|
This function returns a string which represents the data type
|
|
of the argument. The argument can be any valid Harbour expression.
|
|
If there is a syntax error in passed expression then "UE" is returned.
|
|
If there is a call for any non-reserved Harbour function then "UI"
|
|
is returned (in other words there is no call for passed UDF function
|
|
during a data type determination - this is CA-Cl*pper compatible
|
|
behavior). Additionally if requested user defined function is not
|
|
linked into executable then "U" is returned.
|
|
|
|
The data type of expression is checked by invoking a macro compiler
|
|
and by evaluation of generated code (if there is no syntax errors).
|
|
This causes that Type() cannot determine a type of local or static
|
|
variables - only symbols visible at runtime can be checked.
|
|
|
|
Notice the subtle difference between Type() and ValType() functions.
|
|
ValType() function doesn't call a macro compiler - it simply checks
|
|
the type of passed argument of any type. Type() requires a string
|
|
argument with a valid Harbour expression - the data type of this
|
|
expression is returned.
|
|
$EXAMPLES$
|
|
LOCAL c, cFilter
|
|
MEMVAR a, b
|
|
|
|
? Type( "{ 1, 2 }" ) // --> "A"
|
|
? Type( 'iif( .T., SubStr( "TYPE", 2, 1 ), .F. )' ) // --> "C"
|
|
? Type( 'At( "OK", MyUDF() ) > 0' ) // --> "UI"
|
|
? Type( "{ 1, 2 }[ 5 ]" ) // --> "UE"
|
|
|
|
PRIVATE a := "A", b := "B"
|
|
? Type( "a + b + c" ) // --> "U" ('c' variable is a local one)
|
|
|
|
cFilter := Space( 60 )
|
|
ACCEPT "Enter filter expression:" TO cFilter
|
|
IF Type( cFilter ) $ "CDLMN"
|
|
// this is a valid expression
|
|
SET FILTER TO &cFilter
|
|
ENDIF
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
- Incompatibility with CA-Cl*pper:
|
|
In the following code:
|
|
|
|
```
|
|
PRIVATE lCond := 0
|
|
? Type( "iof( lCond, 'true', MyUDF() )" )
|
|
```
|
|
CA-Cl*pper will print "UE" - in Harbour the output will be "UI"
|
|
|
|
- If "UI" is returned then the syntax of the expression is
|
|
correct. However invalid arguments can be passed to
|
|
function/procedure that will cause runtime errors during
|
|
evaluation of expression.
|
|
|
|
- Harbour supports two new types (Pointer and Symbol) which does
|
|
not exists in CA-Cl*pper.
|
|
$FILES$
|
|
Library is core
|
|
$SEEALSO$
|
|
ValType()
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
ValType()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
Variable management
|
|
$ONELINER$
|
|
Retrieves the data type of an expression
|
|
$SYNTAX$
|
|
ValType( <xExp> ) --> cRetType
|
|
$ARGUMENTS$
|
|
<xExp> is any valid expression.
|
|
$RETURNS$
|
|
<cRetType> a character indicating the type of the passed expression.
|
|
|
|
<table>
|
|
<cRetType> Meaning
|
|
|
|
"A" Array
|
|
"B" Block
|
|
"C" Character (string)
|
|
"D" Date
|
|
"L" Logical
|
|
"M" Memo
|
|
"N" Numeric
|
|
"O" Object
|
|
"P" Pointer
|
|
"S" Symbol
|
|
"U" NIL
|
|
</table>
|
|
$DESCRIPTION$
|
|
This function returns one character which represents the data type
|
|
of the argument.
|
|
$EXAMPLES$
|
|
? ValType( Array( 1 ) ) // --> "A"
|
|
? ValType( {|| 1 + 1 } ) // --> "B"
|
|
? ValType( "Harbour" ) // --> "C"
|
|
? ValType( Date() ) // --> "D"
|
|
? ValType( .T. ) // --> "L"
|
|
? ValType( 1 ) // --> "N"
|
|
? ValType( TBrowse() ) // --> "O"
|
|
? ValType( hb_idleAdd() ) // --> "P" Harbour extension
|
|
? ValType( @QOut() ) // --> "S" Harbour extension
|
|
? ValType( NIL ) // --> "U"
|
|
$STATUS$
|
|
R
|
|
$COMPLIANCE$
|
|
ValType() is CA-Cl*pper compliant, with the addition of the new
|
|
Harbour types: Pointer and Symbol.
|
|
$FILES$
|
|
Library is core
|
|
$SEEALSO$
|
|
Type()
|
|
$END$
|
|
*/
|
|
|
|
/* $DOC$
|
|
$AUTHOR$
|
|
Copyright 2002 Walter Negro <anegro@overnet.com.ar>
|
|
$TEMPLATE$
|
|
Function
|
|
$NAME$
|
|
hb_PIsByRef()
|
|
$CATEGORY$
|
|
API
|
|
$SUBCATEGORY$
|
|
Variable management
|
|
$ONELINER$
|
|
Determine if a parameter is passed by reference.
|
|
$SYNTAX$
|
|
hb_PIsByRef( nParam ) --> lParamIsByRef
|
|
$ARGUMENTS$
|
|
<nParam> is the parameter number to test.
|
|
$RETURNS$
|
|
<lVarIsByRef> a logical value indicating if the parameter is
|
|
passed by reference to actual function or procedure.
|
|
$DESCRIPTION$
|
|
This function return a logical value indicating if the parameter
|
|
is passed by reference to actual function or procedure.
|
|
|
|
This function is based on the form that Harbour manages to the
|
|
variables for reference. When a variable is passed by reference,
|
|
what receives the function or procedure is, a pointer to the
|
|
previous variable, be this the container variable of the data or
|
|
a pointer to another variable. The function observes if the
|
|
variable passed points to a common variable or to a variable
|
|
passed by reference.
|
|
$EXAMPLES$
|
|
PROCEDURE Main()
|
|
|
|
LOCAL cVar := "Test local"
|
|
|
|
MEMVAR m_nVar
|
|
PRIVATE m_nVar := 0
|
|
|
|
Test( @cVar, @m_nVar, cVar, m_nVar )
|
|
|
|
RETURN
|
|
|
|
STATIC PROCEDURE Test( Arg1, Arg2, Arg3, Arg4 )
|
|
? hb_PIsByRef( 1 ) // --> .T.
|
|
? hb_PIsByRef( 2 ) // --> .T.
|
|
? hb_PIsByRef( 3 ) // --> .F.
|
|
? hb_PIsByRef( 4 ) // --> .F.
|
|
RETURN
|
|
$STATUS$
|
|
S
|
|
$COMPLIANCE$
|
|
H
|
|
$FILES$
|
|
Library is core
|
|
$SEEALSO$
|
|
ValType()
|
|
$END$
|
|
*/
|