Ns_TclInterpServer.3aolserver

Langue: en

Version: 4.0 (debian - 07/07/09)

Section: 3 (Bibliothèques de fonctions)


 

NAME

Ns_TclInitInterps, Ns_TclInitModule, Ns_TclInterpServer, Ns_TclLibrary - library procedures

SYNOPSIS

 #include "ns.h"
 
 int
 Ns_TclInitInterps(server, initProc, arg)
 
 Ns_TclInitModule(arg, arg)
 
 char *
 Ns_TclInterpServer(interp)
 
 char *
 Ns_TclLibrary(void)
 
 
 

ARGUMENTS

char    *server    (in)
Name of virtual server.
Ns_TclInterpInitProc    *initProc    (in)
Procedure to call to initialize interps.
void    *arg    (in)
Callback data to pass to initProc.
Tcl_Interp    *interp    (in)
Tcl interp to get server.
 

 
 

DESCRIPTION

Ns_TclInitInterps arranges for initProc to be called on the startup initialization interp. initProc should have arguments and result that match the type Ns_TclInterpInitProc:

 
 typedef int Ns_TclInterpInitProc(Tcl_Interp *interp, void *arg);
 
 
The arg parameter to initProc is a copy of the arg argument given to Ns_TclInitInterps. A typical initProc will create new commands in the given interp with Tcl_CreateCommand. The following AOLserver module example results in the msg command being in all interps. The command simply sets the "hello" static string as the interp result:
 
 static Ns_TclInterpInitProc AddCmds;
 static Tcl_CmdProc MsgCmd;
 int
 Ns_ModuleInit(char *server, char *module)
 {
     static char *arg = "hello";
     return Ns_TclInitInterps(server, AddCmds, arg);
 }
 static int
 AddCmds(Tcl_Interp *interp, void *arg)
 {
     Tcl_CreateCommand(interp, "msg", MsgCmd, arg, NULL);
     return TCL_OK;
 }
 static int
 MsgCmd(ClientData arg, Tcl_Interp *interp, int argc, char **argv)
 {
     Tcl_SetResult(interp, (char *) arg, TCL_STATIC);
     return TCL_OK;
 }
 
 
In AOLserver 3.x, the effect of Ns_TclInitInterps is to invoke initProc immediately on the single initializaton interp of the server and the result of Ns_TclInitInterps is the return code of initProc. The state of this interp (command, procedures) will then be copied to other interps when created via the Ns_TclAllocInterp routine. This differs from the original AOLserver 2.0 where initProc was called on each interp in an interp pool, the 2.1-2.3 behavior where initProc was called once on an interp linked to the per-server shared command tables, and the upcoming 4.0 behavior where initProc is called at interp create time. In fact, the 4.0 behavior is that of the Ns_TclRegisterAtCreate routine. In practice, if your initProc does nothing but create commands with NULL or shared client data the effect is the same in all releases.

Ns_TclInterpServer returns the virtual server in which the given interp was created.

Ns_TclLibrary returns the shared Tcl library of the server installation (e.g., /usr/local/aolserver/modules/tcl).

SEE ALSO

Ns_TclRegisterAtCreate(3), Ns_TclAllocInterp(3)

KEYWORDS