The widget is packaged as an extension that you can dynamically load into wish. Example 46-1 shows the Clock_Init procedure. It registers two commands, clock and oclock, which use the string-based and Tcl_Obj interfaces, respectively. It also initializes the stub table, which is described in Chapter 45, and declares a package so that scripts can load the widget with package require. Example 46-1 The Clock_Init procedure. int ClockCmd(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); int ClockObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); void ClockObjDelete(ClientData clientData); /* * Clock_Init is called when the package is loaded. */ int Clock_Init(Tcl_Interp *interp) { if (Tcl_InitStubs(interp, "8.1", 0) == NULL) { return TCL_ERROR; } Tcl_CreateCommand(interp, "wclock", ClockCmd, (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL); Tcl_CreateObjCommand(interp, "oclock", ClockObjCmd, (ClientData)NULL, ClockObjDelete); Tcl_PkgProvide(interp, "Tkclock", "1.0"); return TCL_OK; } |