⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tkcmds.c

📁 linux系统下的音频通信
💻 C
📖 第 1 页 / 共 3 页
字号:
 * Side effects: *	See the user documentation. * *---------------------------------------------------------------------- */intTk_TkObjCmd(clientData, interp, objc, objv)    ClientData clientData;	/* Main window associated with interpreter. */    Tcl_Interp *interp;		/* Current interpreter. */    int objc;			/* Number of arguments. */    Tcl_Obj *CONST objv[];	/* Argument objects. */{    int index;    Tk_Window tkwin;    static char *optionStrings[] = {	"appname",	"scaling",	NULL    };    enum options {	TK_APPNAME,	TK_SCALING    };    tkwin = (Tk_Window) clientData;    if (objc < 2) {	Tcl_WrongNumArgs(interp, 1, objv, "option ?arg?");	return TCL_ERROR;    }    if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0,	    &index) != TCL_OK) {	return TCL_ERROR;    }    switch ((enum options) index) {        case TK_APPNAME: {	    TkWindow *winPtr;	    char *string;	    winPtr = (TkWindow *) tkwin;	    if (objc > 3) {	        Tcl_WrongNumArgs(interp, 2, objv, "?newName?");		return TCL_ERROR;	    }	    if (objc == 3) {		string = Tcl_GetStringFromObj(objv[2], NULL);		winPtr->nameUid = Tk_GetUid(Tk_SetAppName(tkwin, string));	    }	    Tcl_SetStringObj(Tcl_GetObjResult(interp), winPtr->nameUid, -1);	    break;	}	case TK_SCALING: {	    Screen *screenPtr;	    int skip, width, height;	    double d;	    	    screenPtr = Tk_Screen(tkwin);	    skip = TkGetDisplayOf(interp, objc - 2, objv + 2, &tkwin);	    if (skip < 0) {		return TCL_ERROR;	    }	    if (objc - skip == 2) {		d = 25.4 / 72;		d *= WidthOfScreen(screenPtr);		d /= WidthMMOfScreen(screenPtr);		Tcl_SetDoubleObj(Tcl_GetObjResult(interp), d);	    } else if (objc - skip == 3) {		if (Tcl_GetDoubleFromObj(interp, objv[2 + skip], &d) != TCL_OK) {		    return TCL_ERROR;		}		d = (25.4 / 72) / d;		width = (int) (d * WidthOfScreen(screenPtr) + 0.5);		if (width <= 0) {		    width = 1;		}		height = (int) (d * HeightOfScreen(screenPtr) + 0.5); 		if (height <= 0) {		    height = 1;		}		WidthMMOfScreen(screenPtr) = width;		HeightMMOfScreen(screenPtr) = height;	    } else {		Tcl_WrongNumArgs(interp, 2, objv,			"?-displayof window? ?factor?");		return TCL_ERROR;	    }	    break;	}    }    return TCL_OK;}/* *---------------------------------------------------------------------- * * Tk_TkwaitCmd -- * *	This procedure is invoked to process the "tkwait" Tcl command. *	See the user documentation for details on what it does. * * Results: *	A standard Tcl result. * * Side effects: *	See the user documentation. * *---------------------------------------------------------------------- */	/* ARGSUSED */intTk_TkwaitCmd(clientData, interp, argc, argv)    ClientData clientData;	/* Main window associated with				 * interpreter. */    Tcl_Interp *interp;		/* Current interpreter. */    int argc;			/* Number of arguments. */    char **argv;		/* Argument strings. */{    Tk_Window tkwin = (Tk_Window) clientData;    int c, done;    size_t length;    if (argc != 3) {	Tcl_AppendResult(interp, "wrong # args: should be \"",		argv[0], " variable|visibility|window name\"", (char *) NULL);	return TCL_ERROR;    }    c = argv[1][0];    length = strlen(argv[1]);    if ((c == 'v') && (strncmp(argv[1], "variable", length) == 0)	    && (length >= 2)) {	if (Tcl_TraceVar(interp, argv[2],		TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,		WaitVariableProc, (ClientData) &done) != TCL_OK) {	    return TCL_ERROR;	}	done = 0;	while (!done) {	    Tcl_DoOneEvent(0);	}	Tcl_UntraceVar(interp, argv[2],		TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,		WaitVariableProc, (ClientData) &done);    } else if ((c == 'v') && (strncmp(argv[1], "visibility", length) == 0)	    && (length >= 2)) {	Tk_Window window;	window = Tk_NameToWindow(interp, argv[2], tkwin);	if (window == NULL) {	    return TCL_ERROR;	}	Tk_CreateEventHandler(window, VisibilityChangeMask|StructureNotifyMask,	    WaitVisibilityProc, (ClientData) &done);	done = 0;	while (!done) {	    Tcl_DoOneEvent(0);	}	if (done != 1) {	    /*	     * Note that we do not delete the event handler because it	     * was deleted automatically when the window was destroyed.	     */	    Tcl_ResetResult(interp);	    Tcl_AppendResult(interp, "window \"", argv[2],		    "\" was deleted before its visibility changed",		    (char *) NULL);	    return TCL_ERROR;	}	Tk_DeleteEventHandler(window, VisibilityChangeMask|StructureNotifyMask,	    WaitVisibilityProc, (ClientData) &done);    } else if ((c == 'w') && (strncmp(argv[1], "window", length) == 0)) {	Tk_Window window;	window = Tk_NameToWindow(interp, argv[2], tkwin);	if (window == NULL) {	    return TCL_ERROR;	}	Tk_CreateEventHandler(window, StructureNotifyMask,	    WaitWindowProc, (ClientData) &done);	done = 0;	while (!done) {	    Tcl_DoOneEvent(0);	}	/*	 * Note:  there's no need to delete the event handler.  It was	 * deleted automatically when the window was destroyed.	 */    } else {	Tcl_AppendResult(interp, "bad option \"", argv[1],		"\": must be variable, visibility, or window", (char *) NULL);	return TCL_ERROR;    }    /*     * Clear out the interpreter's result, since it may have been set     * by event handlers.     */    Tcl_ResetResult(interp);    return TCL_OK;}	/* ARGSUSED */static char *WaitVariableProc(clientData, interp, name1, name2, flags)    ClientData clientData;	/* Pointer to integer to set to 1. */    Tcl_Interp *interp;		/* Interpreter containing variable. */    char *name1;		/* Name of variable. */    char *name2;		/* Second part of variable name. */    int flags;			/* Information about what happened. */{    int *donePtr = (int *) clientData;    *donePtr = 1;    return (char *) NULL;}	/*ARGSUSED*/static voidWaitVisibilityProc(clientData, eventPtr)    ClientData clientData;	/* Pointer to integer to set to 1. */    XEvent *eventPtr;		/* Information about event (not used). */{    int *donePtr = (int *) clientData;    if (eventPtr->type == VisibilityNotify) {	*donePtr = 1;    }    if (eventPtr->type == DestroyNotify) {	*donePtr = 2;    }}static voidWaitWindowProc(clientData, eventPtr)    ClientData clientData;	/* Pointer to integer to set to 1. */    XEvent *eventPtr;		/* Information about event. */{    int *donePtr = (int *) clientData;    if (eventPtr->type == DestroyNotify) {	*donePtr = 1;    }}/* *---------------------------------------------------------------------- * * Tk_UpdateCmd -- * *	This procedure is invoked to process the "update" Tcl command. *	See the user documentation for details on what it does. * * Results: *	A standard Tcl result. * * Side effects: *	See the user documentation. * *---------------------------------------------------------------------- */	/* ARGSUSED */intTk_UpdateCmd(clientData, interp, argc, argv)    ClientData clientData;	/* Main window associated with				 * interpreter. */    Tcl_Interp *interp;		/* Current interpreter. */    int argc;			/* Number of arguments. */    char **argv;		/* Argument strings. */{    int flags;    TkDisplay *dispPtr;    if (argc == 1) {	flags = TCL_DONT_WAIT;    } else if (argc == 2) {	if (strncmp(argv[1], "idletasks", strlen(argv[1])) != 0) {	    Tcl_AppendResult(interp, "bad option \"", argv[1],		    "\": must be idletasks", (char *) NULL);	    return TCL_ERROR;	}	flags = TCL_IDLE_EVENTS;    } else {	Tcl_AppendResult(interp, "wrong # args: should be \"",		argv[0], " ?idletasks?\"", (char *) NULL);	return TCL_ERROR;    }    /*     * Handle all pending events, sync all displays, and repeat over     * and over again until all pending events have been handled.     * Special note:  it's possible that the entire application could     * be destroyed by an event handler that occurs during the update.     * Thus, don't use any information from tkwin after calling     * Tcl_DoOneEvent.     */    while (1) {	while (Tcl_DoOneEvent(flags) != 0) {	    /* Empty loop body */	}	for (dispPtr = tkDisplayList; dispPtr != NULL;		dispPtr = dispPtr->nextPtr) {	    XSync(dispPtr->display, False);	}	if (Tcl_DoOneEvent(flags) == 0) {	    break;	}    }    /*     * Must clear the interpreter's result because event handlers could     * have executed commands.     */    Tcl_ResetResult(interp);    return TCL_OK;}/* *---------------------------------------------------------------------- * * Tk_WinfoObjCmd -- * *	This procedure is invoked to process the "winfo" Tcl command. *	See the user documentation for details on what it does. * * Results: *	A standard Tcl result. * * Side effects: *	See the user documentation. * *---------------------------------------------------------------------- */intTk_WinfoObjCmd(clientData, interp, objc, objv)    ClientData clientData;	/* Main window associated with				 * interpreter. */    Tcl_Interp *interp;		/* Current interpreter. */    int objc;			/* Number of arguments. */    Tcl_Obj *CONST objv[];	/* Argument objects. */{    int index, x, y, width, height, useX, useY, class, skip;    char buf[128];    char *string;    TkWindow *winPtr;    Tk_Window tkwin;    static TkStateMap visualMap[] = {	{PseudoColor,	"pseudocolor"},	{GrayScale,	"grayscale"},	{DirectColor,	"directcolor"},	{TrueColor,	"truecolor"},	{StaticColor,	"staticcolor"},	{StaticGray,	"staticgray"},	{-1,		NULL}    };    static char *optionStrings[] = {	"cells",	"children",	"class",	"colormapfull",	"depth",	"geometry",	"height",	"id",	"ismapped",	"manager",	"name",		"parent",	"pointerx",	"pointery",	"pointerxy",	"reqheight",	"reqwidth",	"rootx",	"rooty",	"screen",	"screencells",	"screendepth",	"screenheight",	"screenwidth",	"screenmmheight","screenmmwidth","screenvisual","server",	"toplevel",	"viewable",	"visual",	"visualid",	"vrootheight",	"vrootwidth",	"vrootx",	"vrooty",	"width",	"x",		"y",		"atom",		"atomname",	"containing",	"interps",	"pathname",	"exists",	"fpixels",	"pixels",	"rgb",	"visualsavailable",	NULL    };    enum options {	WIN_CELLS,	WIN_CHILDREN,	WIN_CLASS,	WIN_COLORMAPFULL,	WIN_DEPTH,	WIN_GEOMETRY,	WIN_HEIGHT,	WIN_ID,	WIN_ISMAPPED,	WIN_MANAGER,	WIN_NAME,	WIN_PARENT,	WIN_POINTERX,	WIN_POINTERY,	WIN_POINTERXY,	WIN_REQHEIGHT,	WIN_REQWIDTH,	WIN_ROOTX,	WIN_ROOTY,	WIN_SCREEN,	WIN_SCREENCELLS,WIN_SCREENDEPTH,WIN_SCREENHEIGHT,WIN_SCREENWIDTH,	WIN_SCREENMMHEIGHT,WIN_SCREENMMWIDTH,WIN_SCREENVISUAL,WIN_SERVER,	WIN_TOPLEVEL,	WIN_VIEWABLE,	WIN_VISUAL,	WIN_VISUALID,	WIN_VROOTHEIGHT,WIN_VROOTWIDTH,	WIN_VROOTX,	WIN_VROOTY,	WIN_WIDTH,	WIN_X,		WIN_Y,		WIN_ATOM,	WIN_ATOMNAME,	WIN_CONTAINING,	WIN_INTERPS,	WIN_PATHNAME,	WIN_EXISTS,	WIN_FPIXELS,	WIN_PIXELS,	WIN_RGB,	WIN_VISUALSAVAILABLE    };    tkwin = (Tk_Window) clientData;        if (objc < 2) {	Tcl_WrongNumArgs(interp, 1, objv, "option ?arg?");	return TCL_ERROR;    }    if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0,	    &index) != TCL_OK) {	return TCL_ERROR;    }    if (index < WIN_ATOM) {	if (objc != 3) {	    Tcl_WrongNumArgs(interp, 2, objv, "window");	    return TCL_ERROR;	}	string = Tcl_GetStringFromObj(objv[2], NULL);	tkwin = Tk_NameToWindow(interp, string, tkwin);	if (tkwin == NULL) {	    return TCL_ERROR;	}    }    winPtr = (TkWindow *) tkwin;    switch ((enum options) index) {	case WIN_CELLS: {	    Tcl_ResetResult(interp);	    Tcl_SetIntObj(Tcl_GetObjResult(interp),		    Tk_Visual(tkwin)->map_entries);	    break;	}	case WIN_CHILDREN: {	    Tcl_Obj *strPtr;	    Tcl_ResetResult(interp);	    winPtr = winPtr->childList;	    for ( ; winPtr != NULL; winPtr = winPtr->nextPtr) {		strPtr = Tcl_NewStringObj(winPtr->pathName, -1);		Tcl_ListObjAppendElement(NULL,		     Tcl_GetObjResult(interp), strPtr);	    }	    break;	}	case WIN_CLASS: {	    Tcl_ResetResult(interp);	    Tcl_SetStringObj(Tcl_GetObjResult(interp), Tk_Class(tkwin), -1);	    break;	}	case WIN_COLORMAPFULL: {	    Tcl_ResetResult(interp);	    Tcl_SetBooleanObj(Tcl_GetObjResult(interp),		    TkpCmapStressed(tkwin, Tk_Colormap(tkwin)));	    break;	}	case WIN_DEPTH: {	    Tcl_ResetResult(interp);	    Tcl_SetIntObj(Tcl_GetObjResult(interp), Tk_Depth(tkwin));	    break;	}	case WIN_GEOMETRY: {	    Tcl_ResetResult(interp);	    sprintf(buf, "%dx%d+%d+%d", Tk_Width(tkwin), Tk_Height(tkwin),		    Tk_X(tkwin), Tk_Y(tkwin));	    Tcl_SetStringObj(Tcl_GetObjResult(interp), buf, -1);	    break;	}	case WIN_HEIGHT: {	    Tcl_ResetResult(interp);	    Tcl_SetIntObj(Tcl_GetObjResult(interp), Tk_Height(tkwin));	    break;	}	case WIN_ID: {	    Tk_MakeWindowExist(tkwin);	    TkpPrintWindowId(buf, Tk_WindowId(tkwin));	    Tcl_ResetResult(interp);	    Tcl_SetStringObj(Tcl_GetObjResult(interp), buf, -1);	    break;	}	case WIN_ISMAPPED: {	    Tcl_ResetResult(interp);	    Tcl_SetBooleanObj(Tcl_GetObjResult(interp),		    (int) Tk_IsMapped(tkwin));	    break;	}	case WIN_MANAGER: {	    Tcl_ResetResult(interp);	    if (winPtr->geomMgrPtr != NULL) {		Tcl_SetStringObj(Tcl_GetObjResult(interp),		        winPtr->geomMgrPtr->name, -1);	    }	    break;	}	case WIN_NAME: {	    Tcl_ResetResult(interp);	    Tcl_SetStringObj(Tcl_GetObjResult(interp), Tk_Name(tkwin), -1);	    break;	}	case WIN_PARENT: {	    Tcl_ResetResult(interp);	    if (winPtr->parentPtr != NULL) {		Tcl_SetStringObj(Tcl_GetObjResult(interp),		        winPtr->parentPtr->pathName, -1);	    }	    break;	}	case WIN_POINTERX: {	    useX = 1;	    useY = 0;	    goto pointerxy;	}	case WIN_POINTERY: {	    useX = 0;	    useY = 1;	    goto pointerxy;	}	case WIN_POINTERXY: {	    useX = 1;	    useY = 1;	    pointerxy:	    winPtr = GetToplevel(tkwin);	    if (winPtr == NULL) {		x = -1;		y = -1;	    } else {		TkGetPointerCoords((Tk_Window) winPtr, &x, &y);	    }	    Tcl_ResetResult(interp);	    if (useX & useY) {		sprintf(buf, "%d %d", x, y);		Tcl_SetStringObj(Tcl_GetObjResult(interp), buf, -1);	    } else if (useX) {		Tcl_SetIntObj(Tcl_GetObjResult(interp), x);	    } else {		Tcl_SetIntObj(Tcl_GetObjResult(interp), y);	    }	    break;	}	case WIN_REQHEIGHT: {	    Tcl_ResetResult(interp);	    Tcl_SetIntObj(Tcl_GetObjResult(interp), Tk_ReqHeight(tkwin));	    break;	}	case WIN_REQWIDTH: {	    Tcl_ResetResult(interp);	    Tcl_SetIntObj(Tcl_GetObjResult(interp), Tk_ReqWidth(tkwin));	    break;	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -