int DoGraphCmd(CLIENT_ARGS) { SimGraph *graph = (SimGraph *) clientData; Tcl_HashEntry *ent; int result = TCL_OK; int (*cmd)(); if (argc < 2) { return TCL_ERROR; } if (ent = Tcl_FindHashEntry(&GraphCmds, argv[1])) { cmd = (int (*)())ent->clientData; Tk_Preserve((ClientData) graph); result = cmd(graph, interp, argc, argv); Tk_Release((ClientData) graph); } else { Tcl_AppendResult(interp, "unknown command name: \"", argv[0], " ", argv[1], "\".", (char *) NULL); result = TCL_ERROR; } return result; }
static int OpenGLWidgetCmd(ClientData clientData, Tcl_Interp *interp, int argc, CONST84 char** argv) { OpenGLClientData *OpenGLPtr = (OpenGLClientData *) clientData; int result = TCL_OK; size_t length; // int id; char c; if (argc < 2) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " option ?arg arg ...?\"", (char *) NULL); return TCL_ERROR; } Tk_Preserve((ClientData) OpenGLPtr); c = argv[1][0]; length = strlen(argv[1]); if ((c == 'c') && (strncmp(argv[1], "configure", length) == 0)) { if (argc == 2) { result = Tk_ConfigureInfo(interp, OpenGLPtr->tkwin, configSpecs, (char *) OpenGLPtr, (char *) NULL, 0); } else if (argc == 3) { result = Tk_ConfigureInfo(interp, OpenGLPtr->tkwin, configSpecs, (char *) OpenGLPtr, argv[2], 0); } else { result = OpenGLConfigure(interp, OpenGLPtr, argc-2, argv+2, TK_CONFIG_ARGV_ONLY); } } else if ((c == 'c') && (strncmp(argv[1], "cget", length) == 0)) { if (argc == 3) { result = Tk_ConfigureValue(interp, OpenGLPtr->tkwin, configSpecs, (char *) OpenGLPtr, argv[2], 0); } else { Tcl_AppendResult(interp, "bad cget command \"", argv[1], "", (char *) NULL); result = TCL_ERROR; } } else if ((c == 'l') && (strncmp(argv[1], "listvisuals", length) == 0)) { result = OpenGLListVisuals(interp, OpenGLPtr); } else { Tcl_AppendResult(interp, "bad option \"", argv[1], "\": must be configure, cget, position, or size", (char *) NULL); result = TCL_ERROR; } Tk_Release((ClientData) OpenGLPtr); return result; }
static int paxwidget_widget_cmd(ClientData data, Tcl_Interp * interp, int argc, char** argv) { PaxWidget * paxwidget = (PaxWidget*)data; int result = TCL_OK; size_t length; char c; if (argc < 2) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " option ?arg arg ...?\"", (char *) NULL); return TCL_ERROR; } Tk_Preserve((ClientData) paxwidget); c = argv[1][0]; length = strlen(argv[1]); if (c == 'b' && strncmp(argv[1], "bgpixel", length) == 0) { sprintf(Tcl_GetStringResult(interp), "%ld", Tk_3DBorderColor(paxwidget->background)->pixel); } else if ((c == 'c') && (strncmp(argv[1], "cget", length) == 0) && (length >= 2)) { if (argc != 3) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " cget option\"", (char *) NULL); goto error; } result = Tk_ConfigureValue(interp, paxwidget->tkwin, configSpecs, (char *) paxwidget, argv[2], 0); } else if ((c == 'c') && (strncmp(argv[1], "configure", length) == 0) && (length >= 2)) { if (argc == 2) { result = Tk_ConfigureInfo(interp, paxwidget->tkwin, configSpecs, (char *) paxwidget, (char *) NULL, 0); } else if (argc == 3) { result = Tk_ConfigureInfo(interp, paxwidget->tkwin, configSpecs, (char *) paxwidget, argv[2], 0); } else { result = PaxWidgetConfigure(interp, paxwidget, argc-2, argv+2, TK_CONFIG_ARGV_ONLY); } } else if ((c == 'm') && (strncmp(argv[1], "motionhints", length) == 0)) { XSetWindowAttributes* attr; if (argc != 2) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " motionhints\"", (char *) NULL); goto error; } attr = Tk_Attributes(paxwidget->tkwin); XSelectInput(Tk_Display(paxwidget->tkwin), Tk_WindowId(paxwidget->tkwin), attr->event_mask | PointerMotionHintMask); } else if ((c == 'u') && (strncmp(argv[1], "update", length) == 0)) { if (argc != 2) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " update\"", (char *) NULL); goto error; } PaxWidget_RegisterUpdate(paxwidget); } else if ((c == 'x') && (strncmp(argv[1], "xview", length) == 0)) { int count, type; double fraction; type = Tk_GetScrollInfo(interp, argc, argv, &fraction, &count); switch (type) { case TK_SCROLL_ERROR: goto error; case TK_SCROLL_MOVETO: paxWidget_CallMethodArgs(paxwidget->obj, ScrollXMoveIdx, Py_BuildValue("(d)", fraction)); break; case TK_SCROLL_PAGES: paxWidget_CallMethodArgs(paxwidget->obj, ScrollXPagesIdx, Py_BuildValue("(i)", count)); break; case TK_SCROLL_UNITS: paxWidget_CallMethodArgs(paxwidget->obj, ScrollXUnitsIdx, Py_BuildValue("(i)", count)); break; } } else if ((c == 'y') && (strncmp(argv[1], "yview", length) == 0)) { int count, type; double fraction; type = Tk_GetScrollInfo(interp, argc, argv, &fraction, &count); switch (type) { case TK_SCROLL_ERROR: goto error; case TK_SCROLL_MOVETO: paxWidget_CallMethodArgs(paxwidget->obj, ScrollYMoveIdx, Py_BuildValue("(d)", fraction)); break; case TK_SCROLL_PAGES: paxWidget_CallMethodArgs(paxwidget->obj, ScrollYPagesIdx, Py_BuildValue("(i)", count)); break; case TK_SCROLL_UNITS: paxWidget_CallMethodArgs(paxwidget->obj, ScrollYUnitsIdx, Py_BuildValue("(i)", count)); break; } } Tk_Release((ClientData) paxwidget); return result; error: Tk_Release((ClientData) paxwidget); return TCL_ERROR; }