100 lines
2.4 KiB
C
100 lines
2.4 KiB
C
/*
|
||
* dpInit.c --
|
||
*
|
||
* Initialize the Tcl-DP extension.
|
||
*
|
||
* Copyright (c) 1995-1996 Cornell University.
|
||
*
|
||
* See the file "license.terms" for information on usage and redistribution
|
||
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||
*
|
||
*/
|
||
|
||
#include "generic/dpPort.h"
|
||
#include "generic/dpPatch.h"
|
||
#include "generic/dpInt.h"
|
||
|
||
/*
|
||
* The following structure defines all of the commands supported by
|
||
* Dp, and the C procedures that execute them.
|
||
*/
|
||
|
||
typedef struct {
|
||
char *name; /* Name of command. */
|
||
Tcl_CmdProc *cmdProc; /* Command procedure. */
|
||
} DpCmd;
|
||
|
||
static DpCmd commands[] = {
|
||
{"dp_accept", Dp_AcceptCmd},
|
||
{"dp_connect", Dp_ConnectCmd},
|
||
{"dp_copy", Dp_CopyCmd},
|
||
{"dp_netinfo", Dp_NetInfoCmd},
|
||
{"dp_RDO", Dp_RDOCmd},
|
||
{"dp_RPC", Dp_RPCCmd},
|
||
{"dp_admin", Dp_AdminCmd},
|
||
{"dp_CancelRPC", Dp_CancelRPCCmd},
|
||
{"dp_send", Dp_SendCmd},
|
||
{"dp_recv", Dp_RecvCmd},
|
||
{(char *) NULL, (Tcl_CmdProc *) NULL}
|
||
};
|
||
|
||
|
||
/*
|
||
*----------------------------------------------------------------------
|
||
*
|
||
* Dp_Init --
|
||
*
|
||
* This procedure is invoked to add DP to an interpreter. It
|
||
* incorporates all of DP's commands into the interpreter.
|
||
*
|
||
* Results:
|
||
* Returns a standard Tcl completion code and sets interp->result
|
||
* if there is an error.
|
||
*
|
||
* Side effects:
|
||
* Depends on various initialization scripts that get invoked.
|
||
*
|
||
*----------------------------------------------------------------------
|
||
*/
|
||
|
||
EXPORT(int,Dp_Init)(interp)
|
||
Tcl_Interp *interp; /* (in) Interpreter to initialize. */
|
||
{
|
||
DpCmd *cmdPtr;
|
||
|
||
if (Tcl_PkgRequire(interp, "Tcl", TCL_VERSION, 1) == NULL) {
|
||
return TCL_ERROR;
|
||
}
|
||
if (TclHasSockets(interp) != TCL_OK) {
|
||
return TCL_ERROR;
|
||
}
|
||
|
||
Tcl_SetVar(interp, "dp_patchLevel", DP_PATCH_LEVEL, TCL_GLOBAL_ONLY);
|
||
Tcl_SetVar(interp, "dp_version", DP_VERSION, TCL_GLOBAL_ONLY);
|
||
|
||
if (Tcl_PkgProvide(interp, "dp", DP_VERSION) != TCL_OK) {
|
||
return TCL_ERROR;
|
||
}
|
||
for (cmdPtr = commands; cmdPtr->name != NULL; cmdPtr++) {
|
||
Tcl_CreateCommand(interp, cmdPtr->name, cmdPtr->cmdProc,
|
||
(ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
|
||
}
|
||
|
||
if (DpInitChannels(interp) != TCL_OK) {
|
||
return TCL_ERROR;
|
||
}
|
||
if (DppInit(interp) != TCL_OK) {
|
||
return TCL_ERROR;
|
||
}
|
||
if (DpRPCInit(interp) != TCL_OK) {
|
||
return TCL_ERROR;
|
||
}
|
||
if (DpInitPlugIn(interp) != TCL_OK) {
|
||
return TCL_ERROR;
|
||
}
|
||
|
||
return TCL_OK;
|
||
}
|
||
|
||
|