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

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

?? tkunixselect.c

?? linux系統(tǒng)下的音頻通信
?? 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在线一区二区| 欧美a级理论片| 亚洲国产三级在线| 国产精品灌醉下药二区| 久久蜜桃av一区二区天堂| 在线不卡中文字幕播放| 一本久久精品一区二区| 国产 欧美在线| 极品美女销魂一区二区三区| 亚洲午夜激情网站| 一区二区三区久久久| 最近日韩中文字幕| 国产精品欧美久久久久一区二区| 久久这里只有精品6| 欧美zozo另类异族| 日韩一区二区免费高清| 91麻豆精品国产自产在线观看一区| 一本一本大道香蕉久在线精品 | 欧美高清激情brazzers| 色综合久久综合网| 91在线观看高清| 不卡一区二区在线| 成人精品视频一区二区三区尤物| 国产精品66部| 国产一区 二区 三区一级| 国产在线观看免费一区| 久久国产麻豆精品| 精品午夜久久福利影院| 青草av.久久免费一区| 日韩 欧美一区二区三区| 七七婷婷婷婷精品国产| 日韩成人伦理电影在线观看| 成人v精品蜜桃久久一区| 成人午夜看片网址| 成人免费视频免费观看| 色综合天天做天天爱| 91在线视频在线| 一本到三区不卡视频| 一本色道综合亚洲| 欧美性猛片aaaaaaa做受| 欧美三级三级三级| 欧美久久久久久久久久| 日韩一区二区三区高清免费看看| 精品日韩欧美一区二区| 国产午夜精品一区二区| 中文字幕不卡一区| 亚洲男人的天堂网| 亚洲成人激情自拍| 九色综合国产一区二区三区| 国产成人精品综合在线观看| 国产传媒一区在线| 99re成人在线| 欧美日韩久久不卡| 欧美变态tickling挠脚心| 国产色一区二区| 亚洲人成网站在线| 日韩成人免费电影| 国产成人综合精品三级| 91黄色小视频| 欧美一区二区视频网站| 国产亚洲精品7777| 一区二区三区av电影| 日本欧美一区二区三区乱码| 国产精品一二三在| 在线日韩一区二区| 欧美va亚洲va在线观看蝴蝶网| 国产亚洲成aⅴ人片在线观看 | 国产日韩欧美激情| 伊人性伊人情综合网| 日韩黄色小视频| 成人av网址在线| 欧美一区二区三区免费大片 | 国产乱对白刺激视频不卡| 亚洲国产三级在线| 亚洲另类在线视频| 国产麻豆精品95视频| 成人不卡免费av| 欧美精选午夜久久久乱码6080| 精品国产在天天线2019| 国产精品人妖ts系列视频| 亚洲国产精品一区二区久久| 国产又黄又大久久| 欧美日韩亚洲综合一区| 欧美一区二视频| 国内不卡的二区三区中文字幕| 亚洲国产cao| 卡一卡二国产精品 | 国内精品免费在线观看| 91久久精品一区二区| 亚洲精品一区二区精华| 亚洲成人免费电影| av在线播放一区二区三区| 欧美精品aⅴ在线视频| 中文字幕一区二区三区在线播放| 久久精品国产一区二区| 欧美日韩精品一区二区三区| 国产精品美女一区二区在线观看| 日韩电影在线观看一区| 色婷婷综合五月| 久久久99久久精品欧美| 五月天激情综合| 91美女在线视频| 欧美激情在线免费观看| 国内久久婷婷综合| 91精品久久久久久久91蜜桃| 亚洲欧美一区二区三区极速播放| 国产一区二区免费视频| 日韩精品专区在线| 丝瓜av网站精品一区二区 | 成人黄色软件下载| 久久综合九色综合欧美亚洲| 日韩精品一卡二卡三卡四卡无卡| 蜜臀av一级做a爰片久久| 久久色在线观看| 国产一区二区三区美女| 成人动漫av在线| 欧美日韩成人一区| 国产a精品视频| 日韩精品一区二区三区视频| 亚洲高清不卡在线| 欧美群妇大交群的观看方式| 亚洲欧美福利一区二区| 9色porny自拍视频一区二区| 欧美久久高跟鞋激| 国产电影一区二区三区| 亚洲一区在线播放| 亚洲视频在线一区观看| 一本色道久久综合亚洲91| 亚洲国产一区二区视频| 91精品久久久久久久91蜜桃| 九一久久久久久| 亚洲精品自拍动漫在线| 欧美一区二区私人影院日本| 东方aⅴ免费观看久久av| 亚洲免费资源在线播放| 国产日韩欧美精品在线| 91精品国产综合久久精品app| 欧美性videosxxxxx| 97久久精品人人做人人爽50路 | 亚洲精品伦理在线| 日韩美女视频一区二区在线观看| 国产成人aaaa| 日本在线不卡视频一二三区| 69成人精品免费视频| 日韩欧美久久一区| 欧美日韩精品一区视频| 成人污污视频在线观看| 激情成人综合网| 亚洲欧美激情插 | 亚洲精品一二三区| 在线观看日韩精品| 蜜臀av在线播放一区二区三区| 91精品国产色综合久久ai换脸| 日本少妇一区二区| 久久伊99综合婷婷久久伊| 精品一区二区三区视频| 懂色av一区二区三区免费观看| 麻豆91免费观看| 麻豆国产精品官网| 精品在线视频一区| 国产麻豆精品95视频| 国产91丝袜在线18| 国产69精品久久久久777| 精品影视av免费| 91成人网在线| 亚洲精品一区在线观看| 亚洲精品成人悠悠色影视| 久久se精品一区精品二区| 99精品视频在线观看免费| 日韩欧美电影在线| 亚洲宅男天堂在线观看无病毒| 国产一二精品视频| 欧美一级片在线看| 亚洲动漫第一页| 99re这里只有精品视频首页| 欧美成人性战久久| 天涯成人国产亚洲精品一区av| 北岛玲一区二区三区四区| 久久免费国产精品| 国模大尺度一区二区三区| 26uuu欧美| 亚洲三级在线观看| 国产在线播放一区三区四| 色8久久精品久久久久久蜜| 日韩欧美国产系列| 国产精品久久久久久亚洲伦| 91国产免费观看| 国产成人在线影院| 日本不卡高清视频| 亚洲精品久久7777|