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

📄 xlibint.c

📁 ftam等标准协议服务器和客户端的源代码。
💻 C
📖 第 1 页 / 共 3 页
字号:
			ev->window	= event->u.expose.window;			ev->x		= event->u.expose.x;			ev->y		= event->u.expose.y;			ev->width	= event->u.expose.width;			ev->height	= event->u.expose.height;			ev->count	= event->u.expose.count;		}		break;	      case GraphicsExpose:		{		    register XGraphicsExposeEvent *ev =			(XGraphicsExposeEvent *) re;		    ev->drawable	= event->u.graphicsExposure.drawable;		    ev->x		= event->u.graphicsExposure.x;		    ev->y		= event->u.graphicsExposure.y;		    ev->width		= event->u.graphicsExposure.width;		    ev->height		= event->u.graphicsExposure.height;		    ev->count		= event->u.graphicsExposure.count;		    ev->major_code	= event->u.graphicsExposure.majorEvent;		    ev->minor_code	= event->u.graphicsExposure.minorEvent;		}		break;	      case NoExpose:		{		    register XNoExposeEvent *ev = (XNoExposeEvent *) re;		    ev->drawable	= event->u.noExposure.drawable;		    ev->major_code	= event->u.noExposure.majorEvent;		    ev->minor_code	= event->u.noExposure.minorEvent;		}		break;	      case VisibilityNotify:		{		    register XVisibilityEvent *ev = (XVisibilityEvent *) re;		    ev->window		= event->u.visibility.window;		    ev->state		= event->u.visibility.state;		}		break;	      case CreateNotify:		{		    register XCreateWindowEvent *ev =			 (XCreateWindowEvent *) re;		    ev->window		= event->u.createNotify.window;		    ev->parent		= event->u.createNotify.parent;		    ev->x		= event->u.createNotify.x;		    ev->y		= event->u.createNotify.y;		    ev->width		= event->u.createNotify.width;		    ev->height		= event->u.createNotify.height;		    ev->border_width	= event->u.createNotify.borderWidth;		    ev->override_redirect	= event->u.createNotify.override;		}		break;	      case DestroyNotify:		{		    register XDestroyWindowEvent *ev =				(XDestroyWindowEvent *) re;		    ev->window		= event->u.destroyNotify.window;		    ev->event		= event->u.destroyNotify.event;		}		break;	      case UnmapNotify:		{		    register XUnmapEvent *ev = (XUnmapEvent *) re;		    ev->window		= event->u.unmapNotify.window;		    ev->event		= event->u.unmapNotify.event;		    ev->from_configure	= event->u.unmapNotify.fromConfigure;		}		break;	      case MapNotify:		{		    register XMapEvent *ev = (XMapEvent *) re;		    ev->window		= event->u.mapNotify.window;		    ev->event		= event->u.mapNotify.event;		    ev->override_redirect	= event->u.mapNotify.override;		}		break;	      case MapRequest:		{		    register XMapRequestEvent *ev = (XMapRequestEvent *) re;		    ev->window		= event->u.mapRequest.window;		    ev->parent		= event->u.mapRequest.parent;		}		break;	      case ReparentNotify:		{		    register XReparentEvent *ev = (XReparentEvent *) re;		    ev->event		= event->u.reparent.event;		    ev->window		= event->u.reparent.window;		    ev->parent		= event->u.reparent.parent;		    ev->x		= event->u.reparent.x;		    ev->y		= event->u.reparent.y;		    ev->override_redirect	= event->u.reparent.override;		}		break;	      case ConfigureNotify:		{		    register XConfigureEvent *ev = (XConfigureEvent *) re;		    ev->event	= event->u.configureNotify.event;		    ev->window	= event->u.configureNotify.window;		    ev->above	= event->u.configureNotify.aboveSibling;		    ev->x	= event->u.configureNotify.x;		    ev->y	= event->u.configureNotify.y;		    ev->width	= event->u.configureNotify.width;		    ev->height	= event->u.configureNotify.height;		    ev->border_width  = event->u.configureNotify.borderWidth;		    ev->override_redirect = event->u.configureNotify.override;		}		break;	      case ConfigureRequest:		{		    register XConfigureRequestEvent *ev =		        (XConfigureRequestEvent *) re;		    ev->window		= event->u.configureRequest.window;		    ev->parent		= event->u.configureRequest.parent;		    ev->above		= event->u.configureRequest.sibling;		    ev->x		= event->u.configureRequest.x;		    ev->y		= event->u.configureRequest.y;		    ev->width		= event->u.configureRequest.width;		    ev->height		= event->u.configureRequest.height;		    ev->border_width	= event->u.configureRequest.borderWidth;		    ev->value_mask	= event->u.configureRequest.valueMask;		    ev->detail  	= event->u.u.detail;		}		break;	      case GravityNotify:		{		    register XGravityEvent *ev = (XGravityEvent *) re;		    ev->window		= event->u.gravity.window;		    ev->event		= event->u.gravity.event;		    ev->x		= event->u.gravity.x;		    ev->y		= event->u.gravity.y;		}		break;	      case ResizeRequest:		{		    register XResizeRequestEvent *ev =			(XResizeRequestEvent *) re;		    ev->window		= event->u.resizeRequest.window;		    ev->width		= event->u.resizeRequest.width;		    ev->height		= event->u.resizeRequest.height;		}		break;	      case CirculateNotify:		{		    register XCirculateEvent *ev = (XCirculateEvent *) re;		    ev->window		= event->u.circulate.window;		    ev->event		= event->u.circulate.event;		    ev->place		= event->u.circulate.place;		}		break;	      case CirculateRequest:		{		    register XCirculateRequestEvent *ev =		        (XCirculateRequestEvent *) re;		    ev->window		= event->u.circulate.window;		    ev->parent		= event->u.circulate.event;		    ev->place		= event->u.circulate.place;		}		break;	      case PropertyNotify:		{		    register XPropertyEvent *ev = (XPropertyEvent *) re;		    ev->window		= event->u.property.window;		    ev->atom		= event->u.property.atom;		    ev->time		= event->u.property.time;		    ev->state		= event->u.property.state;		}		break;	      case SelectionClear:		{		    register XSelectionClearEvent *ev =			 (XSelectionClearEvent *) re;		    ev->window		= event->u.selectionClear.window;		    ev->selection	= event->u.selectionClear.atom;		    ev->time		= event->u.selectionClear.time;		}		break;	      case SelectionRequest:		{		    register XSelectionRequestEvent *ev =		        (XSelectionRequestEvent *) re;		    ev->owner		= event->u.selectionRequest.owner;		    ev->requestor	= event->u.selectionRequest.requestor;		    ev->selection	= event->u.selectionRequest.selection;		    ev->target		= event->u.selectionRequest.target;		    ev->property	= event->u.selectionRequest.property;		    ev->time		= event->u.selectionRequest.time;		}		break;	      case SelectionNotify:		{		    register XSelectionEvent *ev = (XSelectionEvent *) re;		    ev->requestor	= event->u.selectionNotify.requestor;		    ev->selection	= event->u.selectionNotify.selection;		    ev->target		= event->u.selectionNotify.target;		    ev->property	= event->u.selectionNotify.property;		    ev->time		= event->u.selectionNotify.time;		}		break;	      case ColormapNotify:		{		    register XColormapEvent *ev = (XColormapEvent *) re;		    ev->window		= event->u.colormap.window;		    ev->colormap	= event->u.colormap.colormap;		    ev->new		= event->u.colormap.new;		    ev->state		= event->u.colormap.state;	        }		break;	      case ClientMessage:		{		   register int i;		   register XClientMessageEvent *ev 		   			= (XClientMessageEvent *) re;		   ev->window		= event->u.clientMessage.window;		   ev->format		= event->u.u.detail;		   switch (ev->format) {			case 8:				   ev->message_type = event->u.clientMessage.u.b.type;			   for (i = 0; i < 20; i++) 				     ev->data.b[i] = event->u.clientMessage.u.b.bytes[i];			   break;			case 16:			   ev->message_type = event->u.clientMessage.u.s.type;			   ev->data.s[0] = event->u.clientMessage.u.s.shorts0;			   ev->data.s[1] = event->u.clientMessage.u.s.shorts1;			   ev->data.s[2] = event->u.clientMessage.u.s.shorts2;			   ev->data.s[3] = event->u.clientMessage.u.s.shorts3;			   ev->data.s[4] = event->u.clientMessage.u.s.shorts4;			   ev->data.s[5] = event->u.clientMessage.u.s.shorts5;			   ev->data.s[6] = event->u.clientMessage.u.s.shorts6;			   ev->data.s[7] = event->u.clientMessage.u.s.shorts7;			   ev->data.s[8] = event->u.clientMessage.u.s.shorts8;			   ev->data.s[9] = event->u.clientMessage.u.s.shorts9;			   break;			case 32:			   ev->message_type = event->u.clientMessage.u.l.type;			   ev->data.l[0] = event->u.clientMessage.u.l.longs0;			   ev->data.l[1] = event->u.clientMessage.u.l.longs1;			   ev->data.l[2] = event->u.clientMessage.u.l.longs2;			   ev->data.l[3] = event->u.clientMessage.u.l.longs3;			   ev->data.l[4] = event->u.clientMessage.u.l.longs4;			   break;			default: /* XXX should never occur */				break;		    }	        }		break;	      case MappingNotify:		{		   register XMappingEvent *ev = (XMappingEvent *)re;		   ev->first_keycode 	= event->u.mappingNotify.firstKeyCode;		   ev->request 		= event->u.mappingNotify.request;		   ev->count 		= event->u.mappingNotify.count;		}		break;	      default:		return(_XUnknownWireEvent(dpy, re, event));	}	return(True);}static char *_SysErrorMsg (n)    int n;{    extern char *sys_errlist[];    extern int sys_nerr;    char *s = ((n >= 0 && n < sys_nerr) ? sys_errlist[n] : "unknown error");    return (s ? s : "no such error");}/* * _XIOError - Default fatal system error reporting routine.  Called when * an X internal system error is encountered. */_XIOError (dpy)	Display *dpy;{	(void) fprintf (stderr, 	 "XIO:  fatal IO error %d (%s) on X server \"%s\"\r\n",			errno, _SysErrorMsg (errno), DisplayString (dpy));	(void) fprintf (stderr, 	 "      after %lu requests (%lu known processed) with %d events remaining.\r\n",			NextRequest(dpy) - 1, LastKnownRequestProcessed(dpy),			QLength(dpy));	if (errno == EPIPE) {	    (void) fprintf (stderr,	 "      The connection was probably broken by a server shutdown or KillClient.\r\n");	}	exit (1);}/* * _XError - Default non-fatal error reporting routine.  Called when an * X_Error packet is encountered in the input stream. */int _XError (dpy, rep)    Display *dpy;    xError *rep;{    XErrorEvent event;    /*      * X_Error packet encountered!  We need to unpack the error before     * giving it to the user.     */    event.display = dpy;    event.type = X_Error;    event.serial = _SetLastRequestRead(dpy, (xGenericReply *)rep);    event.resourceid = rep->resourceID;    event.error_code = rep->errorCode;    event.request_code = rep->majorCode;    event.minor_code = rep->minorCode;    if (_XErrorFunction != NULL) {      	return ((*_XErrorFunction)(dpy, &event));      }    exit(1);    /*NOTREACHED*/}    int _XPrintDefaultError (dpy, event, fp)    Display *dpy;    XErrorEvent *event;    FILE *fp;{    char buffer[BUFSIZ];    char mesg[BUFSIZ];    char number[32];    char *mtype = "XlibMessage";    XGetErrorText(dpy, event->error_code, buffer, BUFSIZ);    XGetErrorDatabaseText(dpy, mtype, "XError", "X Error", mesg, BUFSIZ);    (void) fprintf(fp, "%s:  %s\n  ", mesg, buffer);    XGetErrorDatabaseText(dpy, mtype, "MajorCode", "Request Major code %d", 	mesg, BUFSIZ);    (void) fprintf(fp, mesg, event->request_code);    sprintf(number, "%d", event->request_code);    XGetErrorDatabaseText(dpy, "XRequest", number, "", 	buffer, BUFSIZ);    (void) fprintf(fp, " (%s)", buffer);    fputs("\n  ", fp);    XGetErrorDatabaseText(dpy, mtype, "MinorCode", "Request Minor code", 	mesg, BUFSIZ);    (void) fprintf(fp, mesg, event->minor_code);    fputs("\n  ", fp);    XGetErrorDatabaseText(dpy, mtype, "ResourceID", "ResourceID 0x%x",	mesg, BUFSIZ);    (void) fprintf(fp, mesg, event->resourceid);    fputs("\n  ", fp);    XGetErrorDatabaseText(dpy, mtype, "ErrorSerial", "Error Serial #%d", 	mesg, BUFSIZ);    (void) fprintf(fp, mesg, event->serial);    fputs("\n  ", fp);    XGetErrorDatabaseText(dpy, mtype, "CurrentSerial", "Current Serial #%d",	mesg, BUFSIZ);    (void) fprintf(fp, mesg, dpy->request);    fputs("\n", fp);    if (event->error_code == BadImplementation) return 0;    return 1;}int _XDefaultError(dpy, event)	Display *dpy;	XErrorEvent *event;{    if (_XPrintDefaultError (dpy, event, stderr) == 0) return 0;    exit(1);    /*NOTREACHED*/}int (*_XIOErrorFunction)() = _XIOError;int (*_XErrorFunction)() = _XDefaultError;/* * This routine can be used to (cheaply) get some memory within a single * Xlib routine for scratch space.  It is reallocated from the same place * each time, unless the library needs a large scratch space. */char *_XAllocScratch (dpy, nbytes)	register Display *dpy;	unsigned long nbytes;{	if (nbytes > dpy->scratch_length) {	    if (dpy->scratch_buffer != NULL) Xfree (dpy->scratch_buffer);	    return( dpy->scratch_length = nbytes, 	    dpy->scratch_buffer = Xmalloc ((unsigned)nbytes) );	}	return (dpy->scratch_buffer);}/* * Given a visual id, find the visual structure for this id on this display. */Visual *_XVIDtoVisual (dpy, id)	Display *dpy;	VisualID id;{	register int i, j, k;	register Screen *sp;	register Depth *dp;	register Visual *vp;	for (i = 0; i < dpy->nscreens; i++) {		sp = &dpy->screens[i];		for (j = 0; j < sp->ndepths; j++) {			dp = &sp->depths[j];			for (k = 0; k < dp->nvisuals; k++) {				vp = &dp->visuals[k];				if (vp->visualid == id) return (vp);			}		}	}	return (NULL);}XFree (data)	char *data;{	Xfree (data);}#ifdef DataRoutineIsProcedurevoid Data (dpy, data, len)	Display *dpy;	char *data;	long len;{	if (dpy->bufptr + (len) <= dpy->bufmax) {		bcopy(data, dpy->bufptr, (int)len);		dpy->bufptr += ((len) + 3) & ~3;	} else {		_XSend(dpy, data, len);	}}#endif /* DataRoutineIsProcedure */#ifdef WORD64/* * XXX This is a *really* stupid way of doing this.  It should just use  * dpy->bufptr directly, taking into account where in the word it is. *//* * Data16 - Place 16 bit data in the buffer. * * "dpy" is a pointer to a Display. * "data" is a pointer to the data. * "len" is the length in bytes of the data. */static doData16(dpy, data, len, packbuffer)    register Display *dpy;    short *data;    unsigned len;    char *packbuffer;{    long *lp,*lpack;    long i, nwords,bits;    long mask16 = 0x000000000000ffff;        lp = (long *)data;        lpack = (long *)packbuffer;        *lpack = 0;/*  nwords is the number of 16 bit values to be packed, *  the low order 16 bits of each word will be packed *  into 64 bit words */        nwords = len >> 1;        bits = 48;        for(i=0;i<nwords;i++){           *lpack ^= (*lp & mask16) << bits;           bits -= 16 ;           lp++;           if(bits < 0){               lpack++;               *lpack = 0;               bits = 48;           }        }        Data(dpy, packbuffer, len);}Data16 (dpy, data, len)    Display *dpy;    short *data;    unsigned len;{    char packbuffer[PACKBUFFERSIZE];    unsigned nwords = (PACKBUFFERSIZE >> 1);	/* bytes to CARD16 */    for (; len > nwords; len -= nwords, data += nwords) {	doData16 (dpy, data, nwords, packbuffer);    }    doData16 (dpy, data, len, packbuffer);}/* * Data32 - Place 32 bit data in the buffer. * * "dpy" is a pointer to a Display. * "data" is a pointer to the data. * "len" is the length in bytes of the data. */static doData32 (dpy, data, len, packbuffer)    register Display *dpy;    long *data;    unsigned len;    char *packbuffer;{    long *lp,*lpack;    long i,bits,nwords;    long mask32 = 0x00000000ffffffff;        lpack = (long *) packbuffer;        lp = data;        *lpack = 0;/*  nwords is the number of 32 bit values to be packed *  the low order 32 bits of each word will be packed *  into 64 bit words */        nwords = len >> 2;        bits = 32;        for(i=0;i<nwords;i++){           *lpack ^= (*lp & mask32) << bits;           bits = bits ^32;           lp++;           if(bits){              lpack++;              *lpack = 0;           }        }        Data(dpy, packbuffer, len);}Data32 (dpy, data, len)    Display *dpy;    short *data;    unsigned len;{    char packbuffer[PACKBUFFERSIZE];    unsigned nwords = (PACKBUFFERSIZE >> 2);	/* bytes to CARD32 */    for (; len > nwords; len -= nwords, data += nwords) {	doData32 (dpy, data, nwords, packbuffer);    }    doData32 (dpy, data, len, packbuffer);}#endif /* WORD64 *//* * _XFreeQ - free the queue of events, called by XCloseDisplay when there are * no more displays left on the display list */void _XFreeQ (){    register _XQEvent *qelt = _qfree;      while (qelt) {	register _XQEvent *qnext = qelt->next;	Xfree (qelt);	qelt = qnext;    }    _qfree = NULL;    return;}

⌨️ 快捷键说明

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