Tcl_SetVar(3) Tcl Library Procedures Tcl_SetVar(3)______________________________________________________________________________NAME
Tcl_SetVar, Tcl_SetVar2, Tcl_GetVar, Tcl_GetVar2, Tcl_UnsetVar,
Tcl_UnsetVar2 - manipulate Tcl variables
SYNOPSIS
#include <tcl.h>
char *
Tcl_SetVar(interp, varName, newValue, flags)
char *
Tcl_SetVar2(interp, name1, name2, newValue, flags)
char *
Tcl_GetVar(interp, varName, flags)
char *
Tcl_GetVar2(interp, name1, name2, flags)
int
Tcl_UnsetVar(interp, varName, flags)
int
Tcl_UnsetVar2(interp, name1, name2, flags)
ARGUMENTS
Tcl_Interp *interp (in) Interpreter containing variable.
char *varName (in) Name of variable. May include a
series of :: namespace qualifiers to
specify a variable in a particular
namespace. May refer to a scalar
variable or an element of an array
variable. If the name references an
element of an array, then it must be
in writable memory: Tcl will make
temporary modifications to it while
looking up the name.
char *newValue (in) New value for variable.
int flags (in) OR-ed combination of bits providing
additional information for opera‐
tion. See below for valid values.
char *name1 (in) Name of scalar variable, or name of
array variable if name2 is non-NULL.
May include a series of :: namespace
qualifiers to specify a variable in
a particular namespace.
char *name2 (in) If non-NULL, gives name of element
within array and name1 must refer to
an array variable.
_________________________________________________________________DESCRIPTION
These procedures may be used to create, modify, read, and delete Tcl
variables from C code.
Note that Tcl_GetVar and Tcl_SetVar have been largely replaced by the
object-based procedures Tcl_ObjGetVar2 and Tcl_ObjSetVar2. Those
object-based procedures read, modify, and create a variable whose name
is held in a Tcl object instead of a string. They also return a
pointer to the object which is the variable's value instead of return‐
ing a string. Operations on objects can be faster since objects hold
an internal representation that can be manipulated more efficiently.
Tcl_SetVar and Tcl_SetVar2 will create a new variable or modify an
existing one. Both of these procedures set the given variable to the
value given by newValue, and they return a pointer to a copy of the
variable's new value, which is stored in Tcl's variable structure. Tcl
keeps a private copy of the variable's value, so the caller may change
newValue after these procedures return without affecting the value of
the variable. If an error occurs in setting the variable (e.g. an
array variable is referenced without giving an index into the array),
they return NULL.
The name of the variable may be specified to Tcl_SetVar and Tcl_SetVar2
in either of two ways. If Tcl_SetVar is called, the variable name is
given as a single string, varName. If varName contains an open paren‐
thesis and ends with a close parenthesis, then the value between the
parentheses is treated as an index (which can have any string value)
and the characters before the first open parenthesis are treated as the
name of an array variable. If varName doesn't have parentheses as
described above, then the entire string is treated as the name of a
scalar variable. If Tcl_SetVar2 is called, then the array name and
index have been separated by the caller into two separate strings,
name1 and name2 respectively; if name2 is zero it means that a scalar
variable is being referenced.
The flags argument may be used to specify any of several options to the
procedures. It consists of an OR-ed combination of the following bits.
Note that the flag bit TCL_PARSE_PART1 is only meaningful for the pro‐
cedures Tcl_SetVar2 and Tcl_GetVar2.
TCL_GLOBAL_ONLY
Under normal circumstances the procedures look up variables as
follows: If a procedure call is active in interp, a variable is
looked up at the current level of procedure call. Otherwise, a
variable is looked up first in the current namespace, then in
the global namespace. However, if this bit is set in flags then
the variable is looked up only in the global namespace even if
there is a procedure call active. If both TCL_GLOBAL_ONLY and
TCL_NAMESPACE_ONLY are given, TCL_GLOBAL_ONLY is ignored.
TCL_NAMESPACE_ONLY
Under normal circumstances the procedures look up variables as
follows: If a procedure call is active in interp, a variable is
looked up at the current level of procedure call. Otherwise, a
variable is looked up first in the current namespace, then in
the global namespace. However, if this bit is set in flags then
the variable is looked up only in the current namespace even if
there is a procedure call active.
TCL_LEAVE_ERR_MSG
If an error is returned and this bit is set in flags, then an
error message will be left in the interpreter's result, where it
can be retrieved with Tcl_GetObjResult or Tcl_GetStringResult.
If this flag bit isn't set then no error message is left and the
interpreter's result will not be modified.
TCL_APPEND_VALUE
If this bit is set then newValue is appended to the current
value, instead of replacing it. If the variable is currently
undefined, then this bit is ignored.
TCL_LIST_ELEMENT
If this bit is set, then newValue is converted to a valid Tcl
list element before setting (or appending to) the variable. A
separator space is appended before the new list element unless
the list element is going to be the first element in a list or
sublist (i.e. the variable's current value is empty, or contains
the single character ``{'', or ends in `` }'').
TCL_PARSE_PART1
If this bit is set when calling Tcl_SetVar2 and Tcl_GetVar2,
name1 may contain both an array and an element name: if the name
contains an open parenthesis and ends with a close parenthesis,
then the value between the parentheses is treated as an element
name (which can have any string value) and the characters before
the first open parenthesis are treated as the name of an array
variable. If the flag TCL_PARSE_PART1 is given, name2 should be
NULL since the array and element names are taken from name1.
Tcl_GetVar and Tcl_GetVar2 return the current value of a variable. The
arguments to these procedures are treated in the same way as the argu‐
ments to Tcl_SetVar and Tcl_SetVar2. Under normal circumstances, the
return value is a pointer to the variable's value (which is stored in
Tcl's variable structure and will not change before the next call to
Tcl_SetVar or Tcl_SetVar2). Tcl_GetVar and Tcl_GetVar2 use the flag
bits TCL_GLOBAL_ONLY and TCL_LEAVE_ERR_MSG, both of which have the same
meaning as for Tcl_SetVar. In addition, Tcl_GetVar2 uses the bit
TCL_PARSE_PART1, which has the same meaning as for Tcl_SetVar2. If an
error occurs in reading the variable (e.g. the variable doesn't exist
or an array element is specified for a scalar variable), then NULL is
returned.
Tcl_UnsetVar and Tcl_UnsetVar2 may be used to remove a variable, so
that future calls to Tcl_GetVar or Tcl_GetVar2 for the variable will
return an error. The arguments to these procedures are treated in the
same way as the arguments to Tcl_GetVar and Tcl_GetVar2. If the vari‐
able is successfully removed then TCL_OK is returned. If the variable
cannot be removed because it doesn't exist then TCL_ERROR is returned.
If an array element is specified, the given element is removed but the
array remains. If an array name is specified without an index, then
the entire array is removed.
SEE ALSO
Tcl_GetObjResult, Tcl_GetStringResult, Tcl_ObjGetVar2, Tcl_ObjSetVar2,
Tcl_TraceVar
KEYWORDS
array, interpreter, object, scalar, set, unset, variable
Tcl 7.4 Tcl_SetVar(3)