CrtSlave
Tcl_CreateSlave(3) Tcl Library Procedures Tcl_CreateSlave(3)
______________________________________________________________________________
NAME
Tcl_IsSafe, Tcl_MakeSafe, Tcl_CreateSlave, Tcl_GetSlave, Tcl_GetMaster,
Tcl_GetInterpPath, Tcl_CreateAlias, Tcl_CreateAliasObj, Tcl_GetAlias,
Tcl_GetAliasObj, Tcl_ExposeCommand, Tcl_HideCommand - manage multiple
Tcl interpreters, aliases and hidden commands.
SYNOPSIS
#include <tcl.h>
int
Tcl_IsSafe(interp)
int
Tcl_MakeSafe(interp)
Tcl_Interp *
Tcl_CreateSlave(interp, slaveName, isSafe)
Tcl_Interp *
Tcl_GetSlave(interp, slaveName)
Tcl_Interp *
Tcl_GetMaster(interp)
int
Tcl_GetInterpPath(askingInterp, slaveInterp)
int |
Tcl_CreateAlias(slaveInterp, srcCmd, targetInterp, targetCmd, argc, argv)|
int |
Tcl_CreateAliasObj(slaveInterp, srcCmd, targetInterp, targetCmd, objc, objv)|
int
Tcl_GetAlias(interp, srcCmd, targetInterpPtr, targetCmdPtr, argcPtr, argvPtr)
int |
Tcl_GetAliasObj(interp, srcCmd, targetInterpPtr, targetCmdPtr, objcPtr, objvPtr)|
int |
Tcl_ExposeCommand(interp, hiddenCmdName, cmdName) |
int |
Tcl_HideCommand(interp, cmdName, hiddenCmdName) |
ARGUMENTS |
Tcl_Interp *interp (in) ||
Interpreter in which |
to execute the spec- |
ified command. |
char *slave- |
Name (in) | |
Name of slave inter- |
preter to create or |
manipulate. |
int isSafe (in) ||
If non-zero, a |
``safe'' slave that |
is suitable for run- |
ning untrusted code |
is created, other- |
wise a trusted slave |
is created. |
Tcl_Interp *slaveIn- |
terp (in) | |
Interpreter to use |
for creating the |
source command for |
an alias (see |
below). |
char *src- |
Cmd (in) | |
Name of source com- |
mand for alias. |
Tcl_Interp *target- |
Interp (in) | |
Interpreter that |
contains the target |
command for an |
alias. |
char *tar- |
getCmd (in) | |
Name of target com- |
mand for alias in |
targetInterp. |
int argc (in) ||
Count of additional |
arguments to pass to |
the alias command. |
char **argv (in) ||
Vector of strings, |
the additional argu- |
ments to pass to the |
alias command. This |
storage is owned by |
the caller. |
int objc (in) ||
Count of additional |
object arguments to |
pass to the alias |
object command. |
Tcl_Object **objv (in) ||
Vector of Tcl_Obj |
structures, the |
additional object |
argumenst to pass to |
the alias object |
command. This stor- |
age is owned by the |
caller. |
Tcl_Interp **target- |
InterpPtr (in) | |
Pointer to location |
to store the address |
of the interpreter |
where a target com- |
mand is defined for |
an alias. |
char **tar- |
getCmdPtr (out) | |
Pointer to location |
to store the address |
of the name of the |
target command for |
an alias. |
int *argcPtr (out) ||
Pointer to location |
to store count of |
additional arguments |
to be passed to the |
alias. The location |
is in storage owned |
by the caller. |
char ***argvPtr (out) ||
Pointer to location |
to store a vector of |
strings, the addi- |
tional arguments to |
pass to an alias. |
The location is in |
storage owned by the |
caller, the vector |
of strings is owned |
by the called func- |
tion. |
int *objcPtr (out) ||
Pointer to location |
to store count of |
additional object |
arguments to be |
passed to the alias. |
The location is in |
storage owned by the |
caller. |
Tcl_Obj ***objvPtr (out) ||
Pointer to location |
to store a vector of |
Tcl_Obj structures, |
the additional argu- |
ments to pass to an |
object alias com- |
mand. The location |
is in storage owned |
by the caller, the |
vector of Tcl_Obj |
structures is owned |
by the called func- |
tion. |
char *cmd- |
Name (in) | |
Name of an exposed |
command to hide or |
create. |
char *hiddenCmd- |
Name (in) | |
Name under which a |
hidden command is |
stored and with |
which it can be |
exposed or invoked.
_________________________________________________________________
DESCRIPTION
These procedures are intended for access to the multiple interpreter
facility from inside C programs. They enable managing multiple inter-
preters in a hierarchical relationship, and the management of aliases,
commands that when invoked in one interpreter execute a command in
another interpreter. The return value for those procedures that return
an int is either TCL_OK or TCL_ERROR. If TCL_ERROR is returned then the
result field of the interpreter contains an error message.
Tcl_CreateSlave creates a new interpreter as a slave of interp. It
also creates a slave command named slaveName in interp which allows
interp to manipulate the new slave. If isSafe is zero, the command
creates a trusted slave in which Tcl code has access to all the Tcl
commands. If it is 1, the command creates a ``safe'' slave in which
Tcl code has access only to set of Tcl commands defined as ``Safe
Tcl''; see the manual entry for the Tcl interp command for details. If
the creation of the new slave interpreter failed, NULL is returned.
Tcl_IsSafe returns 1 if interp is ``safe'' (was created with the
TCL_SAFE_INTERPRETER flag specified), 0 otherwise.
Tcl_MakeSafe makes interp ``safe'' by removing all non-core and core
unsafe functionality. Note that if you call this after adding some
extension to an interpreter, all traces of that extension will be
removed from the interpreter.
Tcl_GetSlave returns a pointer to a slave interpreter of interp. The
slave interpreter is identified by slaveName. If no such slave inter-
preter exists, NULL is returned.
Tcl_GetMaster returns a pointer to the master interpreter of interp. If
interp has no master (it is a top-level interpreter) then NULL is
returned.
Tcl_GetInterpPath sets the result field in askingInterp to the relative
path between askingInterp and slaveInterp; slaveInterp must be a slave
of askingInterp. If the computation of the relative path succeeds,
TCL_OK is returned, else TCL_ERROR is returned and the result field in
askingInterp contains the error message.
Tcl_CreateAlias creates an object command named srcCmd in slaveInterp |
that when invoked, will cause the command targetCmd to be invoked in |
targetInterp. The arguments specified by the strings contained in argv |
are always prepended to any arguments supplied in the invocation of |
srcCmd and passed to targetCmd. This operation returns TCL_OK if it |
succeeds, or TCL_ERROR if it fails; in that case, an error message is |
left in the object result of slaveInterp. Note that there are no |
restrictions on the ancestry relationship (as created by Tcl_Cre- |
ateSlave) between slaveInterp and targetInterp. Any two interpreters |
can be used, without any restrictions on how they are related. |
Tcl_CreateAliasObj is similar to Tcl_CreateAlias except that it takes a |
vector of objects to pass as additional arguments instead of a vector |
of strings.
Tcl_GetAlias returns information about an alias aliasName in interp.
Any of the result fields can be NULL, in which case the corresponding
datum is not returned. If a result field is non-NULL, the address indi-
cated is set to the corresponding datum. For example, if targetNamePtr
is non-NULL it is set to a pointer to the string containing the name of
the target command. |
Tcl_GetAliasObj is similar to Tcl_GetAlias except that it returns a |
pointer to a vector of Tcl_Obj structures instead of a vector of |
strings. |
Tcl_ExposeCommand moves the command named hiddenCmdName from the set of |
hidden commands to the set of exposed commands, putting it under the |
name cmdName. HiddenCmdName must be the name of an existing hidden |
command, or the operation will return TCL_ERROR and leave an error mes- |
sage in the result field in interp. If an exposed command named cmd- |
Name already exists, the operation returns TCL_ERROR and leaves an |
error message in the object result of interp. If the operation suc- |
ceeds, it returns TCL_OK. After executing this command, attempts to |
use cmdName in a call to Tcl_Eval or with the Tcl eval command will |
again succeed. |
Tcl_HideCommand moves the command named cmdName from the set of exposed |
commands to the set of hidden commands, under the name hiddenCmdName. |
CmdName must be the name of an existing exposed command, or the opera- |
tion will return TCL_ERROR and leave an error message in the object |
result of interp. Currently both cmdName and hiddenCmdName must not |
contain namespace qualifiers, or the operation will return TCL_ERROR |
and leave an error message in the object result of interp. The CmdName |
will be looked up in the global namespace, and not relative to the cur- |
rent namespace, even if the current namespace is not the global one. |
If a hidden command whose name is hiddenCmdName already exists, the |
operation also returns TCL_ERROR and the result field in interp con- |
tains an error message. If the operation succeeds, it returns TCL_OK. |
After executing this command, attempts to use cmdName in a call to |
Tcl_Eval or with the Tcl eval command will fail. |
For a description of the Tcl interface to multiple interpreters, see |
interp(n). |
SEE ALSO |
interp |
KEYWORDS |
alias, command, exposed commands, hidden commands, interpreter, invoke, |
master, slave, |
Tcl 7.6 Tcl_CreateSlave(3)