亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tkunixselect.c

?? linux系統下的音頻通信
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*  * tkUnixSelect.c -- * *	This file contains X specific routines for manipulating  *	selections. * * Copyright (c) 1995 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * SCCS: @(#) tkUnixSelect.c 1.5 96/03/29 14:14:31 */#include "tkInt.h"#include "tkSelect.h"/* * When handling INCR-style selection retrievals, the selection owner * uses the following data structure to communicate between the * ConvertSelection procedure and TkSelPropProc. */typedef struct IncrInfo {    TkWindow *winPtr;		/* Window that owns selection. */    Atom selection;		/* Selection that is being retrieved. */    Atom *multAtoms;		/* Information about conversions to				 * perform:  one or more pairs of				 * (target, property).  This either				 * points to a retrieved  property (for				 * MULTIPLE retrievals) or to a static				 * array. */    unsigned long numConversions;				/* Number of entries in offsets (same as				 * # of pairs in multAtoms). */    int *offsets;		/* One entry for each pair in				 * multAtoms;  -1 means all data has				 * been transferred for this				 * conversion.  -2 means only the				 * final zero-length transfer still				 * has to be done.  Otherwise it is the				 * offset of the next chunk of data				 * to transfer.  This array is malloc-ed. */    int numIncrs;		/* Number of entries in offsets that				 * aren't -1 (i.e. # of INCR-mode transfers				 * not yet completed). */    Tcl_TimerToken timeout;	/* Token for timer procedure. */    int idleTime;		/* Number of seconds since we heard				 * anything from the selection				 * requestor. */    Window reqWindow;		/* Requestor's window id. */    Time time;			/* Timestamp corresponding to				 * selection at beginning of request;				 * used to abort transfer if selection				 * changes. */    struct IncrInfo *nextPtr;	/* Next in list of all INCR-style				 * retrievals currently pending. */} IncrInfo;static IncrInfo *pendingIncrs = NULL;				/* List of all incr structures				 * currently active. *//* * Largest property that we'll accept when sending or receiving the * selection: */#define MAX_PROP_WORDS 100000static TkSelRetrievalInfo *pendingRetrievals = NULL;				/* List of all retrievals currently				 * being waited for. *//* * Forward declarations for procedures defined in this file: */static void		ConvertSelection _ANSI_ARGS_((TkWindow *winPtr,			    XSelectionRequestEvent *eventPtr));static void		IncrTimeoutProc _ANSI_ARGS_((ClientData clientData));static char *		SelCvtFromX _ANSI_ARGS_((long *propPtr, int numValues,			    Atom type, Tk_Window tkwin));static long *		SelCvtToX _ANSI_ARGS_((char *string, Atom type,			    Tk_Window tkwin, int *numLongsPtr));static int		SelectionSize _ANSI_ARGS_((TkSelHandler *selPtr));static void		SelRcvIncrProc _ANSI_ARGS_((ClientData clientData,			    XEvent *eventPtr));static void		SelTimeoutProc _ANSI_ARGS_((ClientData clientData));/* *---------------------------------------------------------------------- * * TkSelGetSelection -- * *	Retrieve the specified selection from another process. * * Results: *	The return value is a standard Tcl return value. *	If an error occurs (such as no selection exists) *	then an error message is left in interp->result. * * Side effects: *	None. * *---------------------------------------------------------------------- */intTkSelGetSelection(interp, tkwin, selection, target, proc, clientData)    Tcl_Interp *interp;		/* Interpreter to use for reporting				 * errors. */    Tk_Window tkwin;		/* Window on whose behalf to retrieve				 * the selection (determines display				 * from which to retrieve). */    Atom selection;		/* Selection to retrieve. */    Atom target;		/* Desired form in which selection				 * is to be returned. */    Tk_GetSelProc *proc;	/* Procedure to call to process the				 * selection, once it has been retrieved. */    ClientData clientData;	/* Arbitrary value to pass to proc. */{    TkSelRetrievalInfo retr;    TkWindow *winPtr = (TkWindow *) tkwin;    TkDisplay *dispPtr = winPtr->dispPtr;    /*     * The selection is owned by some other process.  To     * retrieve it, first record information about the retrieval     * in progress.  Use an internal window as the requestor.     */    retr.interp = interp;    if (dispPtr->clipWindow == NULL) {	int result;	result = TkClipInit(interp, dispPtr);	if (result != TCL_OK) {	    return result;	}    }    retr.winPtr = (TkWindow *) dispPtr->clipWindow;    retr.selection = selection;    retr.property = selection;    retr.target = target;    retr.proc = proc;    retr.clientData = clientData;    retr.result = -1;    retr.idleTime = 0;    retr.nextPtr = pendingRetrievals;    pendingRetrievals = &retr;    /*     * Initiate the request for the selection.  Note:  can't use     * TkCurrentTime for the time.  If we do, and this application hasn't     * received any X events in a long time, the current time will be way     * in the past and could even predate the time when the selection was     * made;  if this happens, the request will be rejected.     */    XConvertSelection(winPtr->display, retr.selection, retr.target,	    retr.property, retr.winPtr->window, CurrentTime);    /*     * Enter a loop processing X events until the selection     * has been retrieved and processed.  If no response is     * received within a few seconds, then timeout.     */    retr.timeout = Tcl_CreateTimerHandler(1000, SelTimeoutProc,	    (ClientData) &retr);    while (retr.result == -1) {	Tcl_DoOneEvent(0);    }    Tcl_DeleteTimerHandler(retr.timeout);    /*     * Unregister the information about the selection retrieval     * in progress.     */    if (pendingRetrievals == &retr) {	pendingRetrievals = retr.nextPtr;    } else {	TkSelRetrievalInfo *retrPtr;	for (retrPtr = pendingRetrievals; retrPtr != NULL;		retrPtr = retrPtr->nextPtr) {	    if (retrPtr->nextPtr == &retr) {		retrPtr->nextPtr = retr.nextPtr;		break;	    }	}    }    return retr.result;}/* *---------------------------------------------------------------------- * * TkSelPropProc -- * *	This procedure is invoked when property-change events *	occur on windows not known to the toolkit.  Its function *	is to implement the sending side of the INCR selection *	retrieval protocol when the selection requestor deletes *	the property containing a part of the selection. * * Results: *	None. * * Side effects: *	If the property that is receiving the selection was just *	deleted, then a new piece of the selection is fetched and *	placed in the property, until eventually there's no more *	selection to fetch. * *---------------------------------------------------------------------- */voidTkSelPropProc(eventPtr)    register XEvent *eventPtr;		/* X PropertyChange event. */{    register IncrInfo *incrPtr;    int i, format;    Atom target, formatType;    register TkSelHandler *selPtr;    long buffer[TK_SEL_WORDS_AT_ONCE];    int numItems;    char *propPtr;    Tk_ErrorHandler errorHandler;    /*     * See if this event announces the deletion of a property being     * used for an INCR transfer.  If so, then add the next chunk of     * data to the property.     */    if (eventPtr->xproperty.state != PropertyDelete) {	return;    }    for (incrPtr = pendingIncrs; incrPtr != NULL;	    incrPtr = incrPtr->nextPtr) {	if (incrPtr->reqWindow != eventPtr->xproperty.window) {	    continue;	}	for (i = 0; i < incrPtr->numConversions; i++) {	    if ((eventPtr->xproperty.atom != incrPtr->multAtoms[2*i + 1])		    || (incrPtr->offsets[i] == -1)){		continue;	    }	    target = incrPtr->multAtoms[2*i];	    incrPtr->idleTime = 0;	    for (selPtr = incrPtr->winPtr->selHandlerList; ;		    selPtr = selPtr->nextPtr) {		if (selPtr == NULL) {		    incrPtr->multAtoms[2*i + 1] = None;		    incrPtr->offsets[i] = -1;		    incrPtr->numIncrs --;		    return;		}		if ((selPtr->target == target)			&& (selPtr->selection == incrPtr->selection)) {		    formatType = selPtr->format;		    if (incrPtr->offsets[i] == -2) {			numItems = 0;			((char *) buffer)[0] = 0;		    } else {			TkSelInProgress ip;			ip.selPtr = selPtr;			ip.nextPtr = pendingPtr;			pendingPtr = &ip;			numItems = (*selPtr->proc)(selPtr->clientData,				incrPtr->offsets[i], (char *) buffer,				TK_SEL_BYTES_AT_ONCE);			pendingPtr = ip.nextPtr;			if (ip.selPtr == NULL) {			    /*			     * The selection handler deleted itself.			     */			    return;			}			if (numItems > TK_SEL_BYTES_AT_ONCE) {			    panic("selection handler returned too many bytes");			} else {			    if (numItems < 0) {				numItems = 0;			    }			}			((char *) buffer)[numItems] = '\0';		    }		    if (numItems < TK_SEL_BYTES_AT_ONCE) {			if (numItems <= 0) {			    incrPtr->offsets[i] = -1;			    incrPtr->numIncrs--;			} else {			    incrPtr->offsets[i] = -2;			}		    } else {			incrPtr->offsets[i] += numItems;		    }		    if (formatType == XA_STRING) {			propPtr = (char *) buffer;			format = 8;		    } else {			propPtr = (char *) SelCvtToX((char *) buffer,				formatType, (Tk_Window) incrPtr->winPtr,				&numItems);			format = 32;		    }		    errorHandler = Tk_CreateErrorHandler(			    eventPtr->xproperty.display, -1, -1, -1,			    (int (*)()) NULL, (ClientData) NULL);		    XChangeProperty(eventPtr->xproperty.display,			    eventPtr->xproperty.window,			    eventPtr->xproperty.atom, formatType,			    format, PropModeReplace,			    (unsigned char *) propPtr, numItems);		    Tk_DeleteErrorHandler(errorHandler);		    if (propPtr != (char *) buffer) {			ckfree(propPtr);		    }		    return;		}	    }	}    }}/* *-------------------------------------------------------------- * * TkSelEventProc -- * *	This procedure is invoked whenever a selection-related *	event occurs.  It does the lion's share of the work *	in implementing the selection protocol. * * Results: *	None. * * Side effects: *	Lots:  depends on the type of event. * *-------------------------------------------------------------- */voidTkSelEventProc(tkwin, eventPtr)    Tk_Window tkwin;		/* Window for which event was				 * targeted. */    register XEvent *eventPtr;	/* X event:  either SelectionClear,				 * SelectionRequest, or				 * SelectionNotify. */{    register TkWindow *winPtr = (TkWindow *) tkwin;    TkDisplay *dispPtr = winPtr->dispPtr;    Tcl_Interp *interp;    /*     * Case #1: SelectionClear events.     */    if (eventPtr->type == SelectionClear) {	TkSelClearSelection(tkwin, eventPtr);    }    /*     * Case #2: SelectionNotify events.  Call the relevant procedure     * to handle the incoming selection.     */    if (eventPtr->type == SelectionNotify) {	register TkSelRetrievalInfo *retrPtr;	char *propInfo;	Atom type;	int format, result;	unsigned long numItems, bytesAfter;	for (retrPtr = pendingRetrievals; ; retrPtr = retrPtr->nextPtr) {	    if (retrPtr == NULL) {		return;	    }	    if ((retrPtr->winPtr == winPtr)		    && (retrPtr->selection == eventPtr->xselection.selection)		    && (retrPtr->target == eventPtr->xselection.target)		    && (retrPtr->result == -1)) {		if (retrPtr->property == eventPtr->xselection.property) {		    break;		}		if (eventPtr->xselection.property == None) {		    Tcl_SetResult(retrPtr->interp, (char *) NULL, TCL_STATIC);		    Tcl_AppendResult(retrPtr->interp,			    Tk_GetAtomName(tkwin, retrPtr->selection),			    " selection doesn't exist or form \"",

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av电影一区二区| 久久精品国产免费| 夜色激情一区二区| 亚洲黄一区二区三区| 亚洲免费观看高清完整版在线观看 | 夜夜嗨av一区二区三区中文字幕 | 欧美三级日本三级少妇99| 欧美综合欧美视频| 337p亚洲精品色噜噜狠狠| 欧美日韩一区二区在线视频| 欧美日韩不卡一区| 欧美tickle裸体挠脚心vk| 久久婷婷久久一区二区三区| 久久久久久一二三区| ...中文天堂在线一区| 亚洲成人激情社区| 极品尤物av久久免费看| 午夜影院在线观看欧美| 91视频在线观看| 欧美xingq一区二区| 国产精品免费视频网站| 夜色激情一区二区| 国产在线看一区| 欧美影院一区二区| 精品区一区二区| 亚洲色图欧美偷拍| 久久精品理论片| 在线观看一区日韩| 久久精品视频在线看| 亚洲一区二区五区| 成人av资源在线| 欧美电影免费提供在线观看| 一区二区三区.www| 成人在线视频首页| 久久女同精品一区二区| 免费看黄色91| 欧美精品 国产精品| 亚洲一区二区三区四区在线免费观看 | 精品日韩在线观看| 日韩国产高清影视| 欧美电影在哪看比较好| 亚洲色图色小说| 91女人视频在线观看| 国产婷婷色一区二区三区在线| 日欧美一区二区| 欧美精品tushy高清| 日韩在线一区二区三区| 在线成人午夜影院| 日韩电影在线观看一区| 精品久久人人做人人爽| 精品一区二区综合| 久久精品综合网| 国产黄色成人av| 中文无字幕一区二区三区| 国产成人精品免费视频网站| 国产色91在线| 不卡av在线网| 国产精品久久久久久久久免费丝袜 | 日韩视频在线你懂得| 国产一区啦啦啦在线观看| 欧美精品久久99| 麻豆极品一区二区三区| 精品免费99久久| 国产裸体歌舞团一区二区| 精品日韩一区二区三区| 国内精品写真在线观看| 国产精品热久久久久夜色精品三区 | 精品福利av导航| 国产91丝袜在线18| 香蕉成人伊视频在线观看| 国产清纯在线一区二区www| 欧美视频日韩视频在线观看| 国产精品美女久久久久aⅴ| 亚洲国产日韩一级| 亚洲国产精品久久不卡毛片| 午夜精品成人在线| 亚洲高清一区二区三区| 亚洲一级片在线观看| 亚洲一区中文日韩| 一卡二卡欧美日韩| 亚洲午夜日本在线观看| 一级做a爱片久久| 人人爽香蕉精品| 国产在线一区观看| 亚洲国产精品久久久久秋霞影院 | 国产精品久久久久aaaa| 国产色产综合色产在线视频| 国产欧美va欧美不卡在线| 国产丝袜美腿一区二区三区| 中文字幕在线一区二区三区| 尤物在线观看一区| 国产一区二区精品久久91| 色94色欧美sute亚洲线路二| 日韩欧美一区中文| 午夜欧美电影在线观看| 在线欧美日韩国产| 欧美图区在线视频| 欧美人与禽zozo性伦| 日韩一区二区在线观看视频 | 久久久国产午夜精品 | 国产成人免费视频精品含羞草妖精 | 五月婷婷久久综合| 一本色道亚洲精品aⅴ| 欧美一级视频精品观看| 国产精品三级视频| 免费在线看成人av| 91色在线porny| 久久久电影一区二区三区| 日本一区中文字幕| 97成人超碰视| 国产日韩影视精品| 久久99久国产精品黄毛片色诱| 色一情一乱一乱一91av| 久久精品水蜜桃av综合天堂| 午夜伦理一区二区| 色综合中文字幕国产 | 亚洲永久精品大片| 91色在线porny| 日本一区二区视频在线观看| 蜜臀av一区二区在线免费观看| 99久久99久久精品免费观看| 欧美精品一区二区久久久| 丝袜国产日韩另类美女| 欧美日韩中文一区| 亚洲一区二区在线观看视频 | 久久午夜国产精品| 国产一区二区三区日韩 | 免费av成人在线| 制服丝袜成人动漫| 日韩国产精品久久久| 日韩一区国产二区欧美三区| 美女高潮久久久| 亚洲精品一区二区精华| 国产精品一二二区| 一区在线播放视频| 欧美三级资源在线| 日本女优在线视频一区二区| 欧美zozo另类异族| 91丝袜美女网| 亚洲亚洲人成综合网络| 欧美另类z0zxhd电影| 色狠狠av一区二区三区| 亚洲高清免费视频| 亚洲精品在线观| 福利一区在线观看| 亚洲第一电影网| 国产喷白浆一区二区三区| 在线看国产一区二区| 懂色av中文字幕一区二区三区| 亚洲精品国产一区二区精华液 | 亚洲欧美日韩一区二区| 宅男噜噜噜66一区二区66| 国产九九视频一区二区三区| 一个色综合av| 中文字幕在线观看一区二区| 欧美日韩成人综合天天影院| 成人综合婷婷国产精品久久蜜臀 | 欧美一区二区三区日韩视频| 高清不卡一区二区在线| 蜜桃久久久久久| 亚洲国产色一区| 一区二区三区色| 亚洲欧美色一区| 亚洲人成亚洲人成在线观看图片| 欧美α欧美αv大片| 日韩午夜激情视频| 欧美高清一级片在线| 欧美色综合网站| 色94色欧美sute亚洲线路一ni| 成人午夜视频福利| 成人激情小说网站| 色综合天天综合网天天看片| 成人高清视频免费观看| 国产一区二区不卡| 成人综合在线视频| 不卡av免费在线观看| 91在线免费看| 欧美日韩国产成人在线91| 欧美卡1卡2卡| 精品噜噜噜噜久久久久久久久试看| 538prom精品视频线放| 精品99999| 国产精品久久久久aaaa| 一区二区三区精密机械公司| 日产精品久久久久久久性色 | 91麻豆精品国产自产在线| 日韩视频免费观看高清完整版在线观看 | 欧美性受xxxx黑人xyx| 精品国产乱码久久久久久老虎 | 精品在线播放午夜| 国产不卡视频在线播放| 91久久一区二区| 精品国产一区二区三区忘忧草| 国产精品久久久久久一区二区三区| 夜夜揉揉日日人人青青一国产精品| 日本91福利区| 91免费小视频| 国产蜜臀av在线一区二区三区| 一区二区三区欧美久久| 国产不卡在线视频|