|
|
1.1 root 1: /************************************************************
2: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
3: and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
4:
5: All Rights Reserved
6:
7: Permission to use, copy, modify, and distribute this software and its
8: documentation for any purpose and without fee is hereby granted,
9: provided that the above copyright notice appear in all copies and that
10: both that copyright notice and this permission notice appear in
11: supporting documentation, and that the names of Digital or MIT not be
12: used in advertising or publicity pertaining to distribution of the
13: software without specific, written prior permission.
14:
15: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
16: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
17: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
18: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
19: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
20: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
21: SOFTWARE.
22:
23: ********************************************************/
24:
25: /* $Header: swaprep.c,v 1.27 87/09/05 17:57:32 toddb Exp $ */
26:
27: #include "X.h"
28: #define NEED_REPLIES
29: #define NEED_EVENTS
30: #include "Xproto.h"
31: #include "misc.h"
32: #include "dixstruct.h"
33: #include "scrnintstr.h"
34:
35: void SwapVisual(), SwapConnSetup(), SwapWinRoot(), WriteToClient();
36:
37: /* copy long from src to dst byteswapping on the way */
38: #define cpswapl(src, dst) \
39: ((char *)&(dst))[0] = ((char *) &(src))[3];\
40: ((char *)&(dst))[1] = ((char *) &(src))[2];\
41: ((char *)&(dst))[2] = ((char *) &(src))[1];\
42: ((char *)&(dst))[3] = ((char *) &(src))[0];
43:
44: /* copy short from src to dst byteswapping on the way */
45: #define cpswaps(src, dst)\
46: ((char *) &(dst))[0] = ((char *) &(src))[1];\
47: ((char *) &(dst))[1] = ((char *) &(src))[0];
48:
49: /* Thanks to Jack Palevich for testing and subsequently rewriting all this */
50: void
51: Swap32Write(pClient, size, pbuf)
52: ClientPtr pClient;
53: int size; /* in bytes */
54: register long *pbuf;
55: {
56: int n, i;
57:
58: size >>= 2;
59: for(i = 0; i < size; i++)
60: /* brackets are mandatory here, because "swapl" macro expands
61: to several statements */
62: {
63: swapl(&pbuf[i], n);
64: }
65: WriteToClient(pClient, size << 2, (char *) pbuf);
66: }
67:
68: void
69: CopySwap32Write(pClient, size, pbuf)
70: ClientPtr pClient;
71: int size; /* in bytes */
72: long *pbuf;
73: {
74: int bufsize = size;
75: long *pbufT;
76: register long *from, *to, *fromLast, *toLast;
77:
78: /* Allocate as big a buffer as we can... */
79: while ((pbufT = (long *) ALLOCATE_LOCAL(bufsize)) == NULL)
80: bufsize >>= 1;
81:
82: /* convert lengths from # of bytes to # of longs */
83: size >>= 2;
84: bufsize >>= 2;
85:
86: from = pbuf;
87: fromLast = from + size;
88: while (from < fromLast) {
89: int nbytes;
90: to = pbufT;
91: toLast = to + min (bufsize, fromLast - from);
92: nbytes = (toLast - to) << 2;
93: while (to < toLast) {
94: /* can't write "cpswapl(*from++, *to++)" because cpswapl is a macro
95: that evaulates its args more than once */
96: cpswapl(*from, *to);
97: from++;
98: to++;
99: }
100: WriteToClient (pClient, nbytes, (char *) pbufT);
101: }
102:
103: DEALLOCATE_LOCAL ((char *) pbufT);
104: }
105:
106: void
107: CopySwap16Write(pClient, size, pbuf)
108: ClientPtr pClient;
109: int size; /* in bytes */
110: short *pbuf;
111: {
112: int bufsize = size;
113: short *pbufT;
114: register short *from, *to, *fromLast, *toLast;
115:
116: /* Allocate as big a buffer as we can... */
117: while ((pbufT = (short *) ALLOCATE_LOCAL(bufsize)) == NULL)
118: bufsize >>= 1;
119:
120: /* convert lengths from # of bytes to # of shorts */
121: size >>= 1;
122: bufsize >>= 1;
123:
124: from = pbuf;
125: fromLast = from + size;
126: while (from < fromLast) {
127: int nbytes;
128: to = pbufT;
129: toLast = to + min (bufsize, fromLast - from);
130: nbytes = (toLast - to) << 1;
131: while (to < toLast) {
132: /* can't write "cpswaps(*from++, *to++)" because cpswaps is a macro
133: that evaulates its args more than once */
134: cpswaps(*from, *to);
135: from++;
136: to++;
137: }
138: WriteToClient (pClient, nbytes, (char *) pbufT);
139: }
140:
141: DEALLOCATE_LOCAL ((char *) pbufT);
142: }
143:
144:
145: /* Extra-small reply */
146: void
147: SGenericReply(pClient, size, pRep)
148: ClientPtr pClient;
149: int size;
150: xGenericReply *pRep;
151: {
152: int n;
153:
154: swaps(&pRep->sequenceNumber, n);
155: WriteToClient(pClient, size, (char *) pRep);
156: }
157:
158: /* Extra-large reply */
159: void
160: SGetWindowAttributesReply(pClient, size, pRep)
161: ClientPtr pClient;
162: int size;
163: xGetWindowAttributesReply *pRep;
164: {
165: int n;
166:
167: swaps(&pRep->sequenceNumber, n);
168: swapl(&pRep->length, n);
169: swapl(&pRep->visualID, n);
170: swaps(&pRep->class, n);
171: swapl(&pRep->backingBitPlanes, n);
172: swapl(&pRep->backingPixel, n);
173: swapl(&pRep->colormap, n);
174: swapl(&pRep->allEventMasks, n);
175: swapl(&pRep->yourEventMask, n);
176: swaps(&pRep->doNotPropagateMask, n);
177: WriteToClient(pClient, size, (char *) pRep);
178: }
179:
180: void
181: SGetGeometryReply(pClient, size, pRep)
182: ClientPtr pClient;
183: int size;
184: xGetGeometryReply *pRep;
185: {
186: int n;
187:
188: swaps(&pRep->sequenceNumber, n);
189: swapl(&pRep->root, n);
190: swaps(&pRep->x, n);
191: swaps(&pRep->y, n);
192: swaps(&pRep->width, n);
193: swaps(&pRep->height, n);
194: swaps(&pRep->borderWidth, n);
195: WriteToClient(pClient, size, (char *) pRep);
196: }
197:
198: void
199: SQueryTreeReply(pClient, size, pRep)
200: ClientPtr pClient;
201: int size;
202: xQueryTreeReply *pRep;
203: {
204: int n;
205:
206: swaps(&pRep->sequenceNumber, n);
207: swapl(&pRep->length, n);
208: swapl(&pRep->root, n);
209: swapl(&pRep->parent, n);
210: swaps(&pRep->nChildren, n);
211: WriteToClient(pClient, size, (char *) pRep);
212: }
213:
214: void
215: SInternAtomReply(pClient, size, pRep)
216: ClientPtr pClient;
217: int size;
218: xInternAtomReply *pRep;
219: {
220: int n;
221:
222: swaps(&pRep->sequenceNumber, n);
223: swapl(&pRep->atom, n);
224: WriteToClient(pClient, size, (char *) pRep);
225: }
226:
227: void
228: SGetAtomNameReply(pClient, size, pRep)
229: ClientPtr pClient;
230: int size;
231: xGetAtomNameReply *pRep;
232: {
233: int n;
234:
235: swaps(&pRep->sequenceNumber, n);
236: swapl(&pRep->length, n);
237: swaps(&pRep->nameLength, n);
238: WriteToClient(pClient, size, (char *) pRep);
239: }
240:
241:
242: void
243: SGetPropertyReply(pClient, size, pRep)
244: ClientPtr pClient;
245: int size;
246: xGetPropertyReply *pRep;
247: {
248: int n;
249:
250: swaps(&pRep->sequenceNumber, n);
251: swapl(&pRep->length, n);
252: swapl(&pRep->propertyType, n);
253: swapl(&pRep->bytesAfter, n);
254: swapl(&pRep->nItems, n);
255: WriteToClient(pClient, size, (char *) pRep);
256: }
257:
258: void
259: SListPropertiesReply(pClient, size, pRep)
260: ClientPtr pClient;
261: int size;
262: xListPropertiesReply *pRep;
263: {
264: int n;
265:
266: swaps(&pRep->sequenceNumber, n);
267: swapl(&pRep->length, n);
268: swaps(&pRep->nProperties, n);
269: WriteToClient(pClient, size, (char *) pRep);
270: }
271:
272: void
273: SGetSelectionOwnerReply(pClient, size, pRep)
274: ClientPtr pClient;
275: int size;
276: xGetSelectionOwnerReply *pRep;
277: {
278: int n;
279:
280: swaps(&pRep->sequenceNumber, n);
281: swapl(&pRep->owner, n);
282: WriteToClient(pClient, size, (char *) pRep);
283: }
284:
285:
286: void
287: SQueryPointerReply(pClient, size, pRep)
288: ClientPtr pClient;
289: int size;
290: xQueryPointerReply *pRep;
291: {
292: int n;
293:
294: swaps(&pRep->sequenceNumber, n);
295: swapl(&pRep->root, n);
296: swapl(&pRep->child, n);
297: swaps(&pRep->rootX, n);
298: swaps(&pRep->rootY, n);
299: swaps(&pRep->winX, n);
300: swaps(&pRep->winY, n);
301: swaps(&pRep->mask, n);
302: WriteToClient(pClient, size, (char *) pRep);
303: }
304:
305: void
306: SwapTimeCoordWrite(pClient, size, pRep)
307: ClientPtr pClient;
308: int size;
309: xTimecoord *pRep;
310: {
311: int i, n;
312: xTimecoord *pRepT;
313:
314: n = size / sizeof(xTimecoord);
315: pRepT = pRep;
316: for(i = 0; i < n; i++)
317: {
318: SwapTimecoord(pRepT);
319: pRepT++;
320: }
321: WriteToClient(pClient, size, (char *) pRep);
322:
323: }
324: void
325: SGetMotionEventsReply(pClient, size, pRep)
326: ClientPtr pClient;
327: int size;
328: xGetMotionEventsReply *pRep;
329: {
330: int n;
331:
332: swaps(&pRep->sequenceNumber, n);
333: swapl(&pRep->length, n);
334: swapl(&pRep->nEvents, n);
335: WriteToClient(pClient, size, (char *) pRep);
336: }
337:
338: void
339: STranslateCoordsReply(pClient, size, pRep)
340: ClientPtr pClient;
341: int size;
342: xTranslateCoordsReply *pRep;
343: {
344: int n;
345:
346: swaps(&pRep->sequenceNumber, n);
347: swapl(&pRep->child, n);
348: swaps(&pRep->dstX, n);
349: swaps(&pRep->dstY, n);
350: WriteToClient(pClient, size, (char *) pRep);
351: }
352:
353: void
354: SGetInputFocusReply(pClient, size, pRep)
355: ClientPtr pClient;
356: int size;
357: xGetInputFocusReply *pRep;
358: {
359: int n;
360:
361: swaps(&pRep->sequenceNumber, n);
362: swapl(&pRep->focus, n);
363: WriteToClient(pClient, size, (char *) pRep);
364: }
365:
366: /* extra long reply */
367: void
368: SQueryKeymapReply(pClient, size, pRep)
369: ClientPtr pClient;
370: int size;
371: xQueryKeymapReply *pRep;
372: {
373: int n;
374:
375: swaps(&pRep->sequenceNumber, n);
376: swapl(&pRep->length, n);
377: WriteToClient(pClient, size, (char *) pRep);
378: }
379:
380: void
381: SQueryFontReply(pClient, size, pRep)
382: ClientPtr pClient;
383: int size;
384: xQueryFontReply *pRep;
385: {
386: SwapFont(pRep, TRUE);
387: WriteToClient(pClient, size, (char *) pRep);
388: }
389:
390: void
391: SQueryTextExtentsReply(pClient, size, pRep)
392: ClientPtr pClient;
393: int size;
394: xQueryTextExtentsReply *pRep;
395: {
396: int n;
397:
398: swaps(&pRep->sequenceNumber, n);
399: swaps(&pRep->fontAscent, n);
400: swaps(&pRep->fontDescent, n);
401: swaps(&pRep->overallAscent, n);
402: swaps(&pRep->overallDescent, n);
403: swapl(&pRep->overallWidth, n);
404: swapl(&pRep->overallLeft, n);
405: swapl(&pRep->overallRight, n);
406: WriteToClient(pClient, size, (char *) pRep);
407: }
408:
409: void
410: SListFontsReply(pClient, size, pRep)
411: ClientPtr pClient;
412: int size;
413: xListFontsReply *pRep;
414: {
415: int n;
416:
417: swaps(&pRep->sequenceNumber, n);
418: swapl(&pRep->length, n);
419: swaps(&pRep->nFonts, n);
420: WriteToClient(pClient, size, (char *) pRep);
421: }
422:
423: void
424: SListFontsWithInfoReply(pClient, size, pRep)
425: ClientPtr pClient;
426: int size;
427: xListFontsWithInfoReply *pRep;
428: {
429: SwapFont((xQueryFontReply *)pRep, FALSE);
430: WriteToClient(pClient, size, (char *) pRep);
431: }
432:
433: void
434: SGetFontPathReply(pClient, size, pRep)
435: ClientPtr pClient;
436: int size;
437: xGetFontPathReply *pRep;
438: {
439: int n;
440:
441: swaps(&pRep->sequenceNumber, n);
442: swapl(&pRep->length, n);
443: swaps(&pRep->nPaths, n);
444: WriteToClient(pClient, size, (char *) pRep);
445: }
446:
447: void
448: SGetImageReply(pClient, size, pRep)
449: ClientPtr pClient;
450: int size;
451: xGetImageReply *pRep;
452: {
453: int n;
454:
455: swaps(&pRep->sequenceNumber, n);
456: swapl(&pRep->length, n);
457: swapl(&pRep->visual, n);
458: WriteToClient(pClient, size, (char *) pRep);
459: /* Fortunately, image doesn't need swapping */
460: }
461:
462: void
463: SListInstalledColormapsReply(pClient, size, pRep)
464: ClientPtr pClient;
465: int size;
466: xListInstalledColormapsReply *pRep;
467: {
468: int n;
469:
470: swaps(&pRep->sequenceNumber, n);
471: swapl(&pRep->length, n);
472: swaps(&pRep->nColormaps, n);
473: WriteToClient(pClient, size, (char *) pRep);
474: }
475:
476: void
477: SAllocColorReply(pClient, size, pRep)
478: ClientPtr pClient;
479: int size;
480: xAllocColorReply *pRep;
481: {
482: int n;
483:
484: swaps(&pRep->sequenceNumber, n);
485: swaps(&pRep->red, n);
486: swaps(&pRep->green, n);
487: swaps(&pRep->blue, n);
488: swapl(&pRep->pixel, n);
489: WriteToClient(pClient, size, (char *) pRep);
490: }
491:
492: void
493: SAllocNamedColorReply(pClient, size, pRep)
494: ClientPtr pClient;
495: int size;
496: xAllocNamedColorReply *pRep;
497: {
498: int n;
499:
500: swaps(&pRep->sequenceNumber, n);
501: swapl(&pRep->pixel, n);
502: swaps(&pRep->exactRed, n);
503: swaps(&pRep->exactGreen, n);
504: swaps(&pRep->exactBlue, n);
505: swaps(&pRep->screenRed, n);
506: swaps(&pRep->screenGreen, n);
507: swaps(&pRep->screenBlue, n);
508: WriteToClient(pClient, size, (char *) pRep);
509: }
510:
511: void
512: SAllocColorCellsReply(pClient, size, pRep)
513: ClientPtr pClient;
514: int size;
515: xAllocColorCellsReply *pRep;
516: {
517: int n;
518:
519: swaps(&pRep->sequenceNumber, n);
520: swapl(&pRep->length, n);
521: swaps(&pRep->nPixels, n);
522: swaps(&pRep->nMasks, n);
523: WriteToClient(pClient, size, (char *) pRep);
524: }
525:
526:
527: void
528: SAllocColorPlanesReply(pClient, size, pRep)
529: ClientPtr pClient;
530: int size;
531: xAllocColorPlanesReply *pRep;
532: {
533: int n;
534:
535: swaps(&pRep->sequenceNumber, n);
536: swapl(&pRep->length, n);
537: swaps(&pRep->nPixels, n);
538: swapl(&pRep->redMask, n);
539: swapl(&pRep->greenMask, n);
540: swapl(&pRep->blueMask, n);
541: WriteToClient(pClient, size, (char *) pRep);
542: }
543:
544: void
545: SQColorsExtend(pClient, size, prgb)
546: ClientPtr pClient;
547: int size;
548: xrgb *prgb;
549: {
550: int i, n;
551: xrgb *prgbT;
552:
553: n = size / sizeof(xrgb);
554: prgbT = prgb;
555: for(i = 0; i < n; i++)
556: {
557: SwapRGB(prgbT);
558: prgbT++;
559: }
560: WriteToClient(pClient, size, (char *) prgb);
561: }
562:
563: void
564: SQueryColorsReply(pClient, size, pRep)
565: ClientPtr pClient;
566: int size;
567: xQueryColorsReply *pRep;
568: {
569: int n;
570:
571: swaps(&pRep->sequenceNumber, n);
572: swapl(&pRep->length, n);
573: swaps(&pRep->nColors, n);
574: WriteToClient(pClient, size, (char *) pRep);
575: }
576:
577: void
578: SLookupColorReply(pClient, size, pRep)
579: ClientPtr pClient;
580: int size;
581: xLookupColorReply *pRep;
582: {
583: int n;
584:
585: swaps(&pRep->sequenceNumber, n);
586: swaps(&pRep->exactRed, n);
587: swaps(&pRep->exactGreen, n);
588: swaps(&pRep->exactBlue, n);
589: swaps(&pRep->screenRed, n);
590: swaps(&pRep->screenGreen, n);
591: swaps(&pRep->screenBlue, n);
592: WriteToClient(pClient, size, (char *) pRep);
593: }
594:
595: void
596: SQueryBestSizeReply(pClient, size, pRep)
597: ClientPtr pClient;
598: int size;
599: xQueryBestSizeReply *pRep;
600: {
601: int n;
602:
603: swaps(&pRep->sequenceNumber, n);
604: swaps(&pRep->width, n);
605: swaps(&pRep->height, n);
606: WriteToClient(pClient, size, (char *) pRep);
607: }
608:
609: void
610: SListExtensionsReply(pClient, size, pRep)
611: ClientPtr pClient;
612: int size;
613: xListExtensionsReply *pRep;
614: {
615: int n;
616:
617: swaps(&pRep->sequenceNumber, n);
618: swapl(&pRep->length, n);
619: WriteToClient(pClient, size, (char *) pRep);
620: }
621:
622: void
623: SGetKeyboardMappingReply(pClient, size, pRep)
624: ClientPtr pClient;
625: int size;
626: xGetKeyboardMappingReply *pRep;
627: {
628: int n;
629:
630: swaps(&pRep->sequenceNumber, n);
631: swapl(&pRep->length, n);
632: WriteToClient(pClient, size, (char *) pRep);
633: }
634:
635: void
636: SGetPointerMappingReply(pClient, size, pRep)
637: ClientPtr pClient;
638: int size;
639: xGetPointerMappingReply *pRep;
640: {
641: int n;
642:
643: swaps(&pRep->sequenceNumber, n);
644: swapl(&pRep->length, n);
645: WriteToClient(pClient, size, (char *) pRep);
646: }
647:
648: void
649: SGetModifierMappingReply(pClient, size, pRep)
650: ClientPtr pClient;
651: int size;
652: xGetModifierMappingReply *pRep;
653: {
654: int n;
655:
656: swaps(&pRep->sequenceNumber, n);
657: swapl(&pRep->length, n);
658: WriteToClient(pClient, size, (char *) pRep);
659: }
660:
661: void
662: SGetKeyboardControlReply(pClient, size, pRep)
663: ClientPtr pClient;
664: int size;
665: xGetKeyboardControlReply *pRep;
666: {
667: int n;
668:
669: swaps(&pRep->sequenceNumber, n);
670: swapl(&pRep->length, n);
671: swapl(&pRep->ledMask, n);
672: swaps(&pRep->bellPitch, n);
673: swaps(&pRep->bellDuration, n);
674: WriteToClient(pClient, size, (char *) pRep);
675: }
676:
677: void
678: SGetPointerControlReply(pClient, size, pRep)
679: ClientPtr pClient;
680: int size;
681: xGetPointerControlReply *pRep;
682: {
683: int n;
684:
685: swaps(&pRep->sequenceNumber, n);
686: swaps(&pRep->accelNumerator, n);
687: swaps(&pRep->accelDenominator, n);
688: swaps(&pRep->threshold, n);
689: WriteToClient(pClient, size, (char *) pRep);
690: }
691:
692: void
693: SGetScreenSaverReply(pClient, size, pRep)
694: ClientPtr pClient;
695: int size;
696: xGetScreenSaverReply *pRep;
697: {
698: int n;
699:
700: swaps(&pRep->sequenceNumber, n);
701: swaps(&pRep->timeout, n);
702: swaps(&pRep->interval, n);
703: WriteToClient(pClient, size, (char *) pRep);
704: }
705:
706: void
707: SLHostsExtend(pClient, size, buf)
708: ClientPtr pClient;
709: int size;
710: char *buf;
711: {
712: char *bufT = buf;
713: char *endbuf = buf + size;
714: while (bufT < endbuf) {
715: xHostEntry *host = (xHostEntry *) bufT;
716: int len = host->length;
717: int n;
718: swaps (&host->length, n);
719: bufT += sizeof (xHostEntry) + (((len + 3) >> 2) << 2);
720: }
721: WriteToClient (pClient, size, buf);
722: }
723:
724: void
725: SListHostsReply(pClient, size, pRep)
726: ClientPtr pClient;
727: int size;
728: xListHostsReply *pRep;
729: {
730: int n;
731:
732: swaps(&pRep->sequenceNumber, n);
733: swapl(&pRep->length, n);
734: swaps(&pRep->nHosts, n);
735: WriteToClient(pClient, size, (char *) pRep);
736: }
737:
738:
739:
740: void
741: SErrorEvent(from, to)
742: xError *from, *to;
743: {
744: to->type = X_Error;
745: to->errorCode = from->errorCode;
746: cpswaps(from->sequenceNumber, to->sequenceNumber);
747: cpswapl(from->resourceID, to->resourceID);
748: cpswaps(from->minorCode, to->minorCode);
749: to->majorCode = from->majorCode;
750: }
751:
752: void
753: SKeyButtonPtrEvent(from, to)
754: xEvent *from, *to;
755: {
756: to->u.u.type = from->u.u.type;
757: to->u.u.detail = from->u.u.detail;
758: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
759: cpswapl(from->u.keyButtonPointer.time,
760: to->u.keyButtonPointer.time);
761: cpswapl(from->u.keyButtonPointer.root,
762: to->u.keyButtonPointer.root);
763: cpswapl(from->u.keyButtonPointer.event,
764: to->u.keyButtonPointer.event);
765: cpswapl(from->u.keyButtonPointer.child,
766: to->u.keyButtonPointer.child);
767: cpswaps(from->u.keyButtonPointer.rootX,
768: to->u.keyButtonPointer.rootX);
769: cpswaps(from->u.keyButtonPointer.rootY,
770: to->u.keyButtonPointer.rootY);
771: cpswaps(from->u.keyButtonPointer.eventX,
772: to->u.keyButtonPointer.eventX);
773: cpswaps(from->u.keyButtonPointer.eventY,
774: to->u.keyButtonPointer.eventY);
775: cpswaps(from->u.keyButtonPointer.state,
776: to->u.keyButtonPointer.state);
777: to->u.keyButtonPointer.sameScreen =
778: from->u.keyButtonPointer.sameScreen;
779: }
780:
781: void
782: SEnterLeaveEvent(from, to)
783: xEvent *from, *to;
784: {
785: to->u.u.type = from->u.u.type;
786: to->u.u.detail = from->u.u.detail;
787: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
788: cpswapl(from->u.enterLeave.time, to->u.enterLeave.time);
789: cpswapl(from->u.enterLeave.root, to->u.enterLeave.root);
790: cpswapl(from->u.enterLeave.event, to->u.enterLeave.event);
791: cpswapl(from->u.enterLeave.child, to->u.enterLeave.child);
792: cpswaps(from->u.enterLeave.rootX, to->u.enterLeave.rootX);
793: cpswaps(from->u.enterLeave.rootY, to->u.enterLeave.rootY);
794: cpswaps(from->u.enterLeave.eventX, to->u.enterLeave.eventX);
795: cpswaps(from->u.enterLeave.eventY, to->u.enterLeave.eventY);
796: cpswaps(from->u.enterLeave.state, to->u.enterLeave.state);
797: to->u.enterLeave.mode = from->u.enterLeave.mode;
798: to->u.enterLeave.flags = from->u.enterLeave.flags;
799: }
800:
801: void
802: SFocusEvent(from, to)
803: xEvent *from, *to;
804: {
805: to->u.u.type = from->u.u.type;
806: to->u.u.detail = from->u.u.detail;
807: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
808: cpswapl(from->u.focus.window, to->u.focus.window);
809: to->u.focus.mode = from->u.focus.mode;
810: }
811:
812: void
813: SExposeEvent(from, to)
814: xEvent *from, *to;
815: {
816: to->u.u.type = from->u.u.type;
817: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
818: cpswapl(from->u.expose.window, to->u.expose.window);
819: cpswaps(from->u.expose.x, to->u.expose.x);
820: cpswaps(from->u.expose.y, to->u.expose.y);
821: cpswaps(from->u.expose.width, to->u.expose.width);
822: cpswaps(from->u.expose.height, to->u.expose.height);
823: cpswaps(from->u.expose.count, to->u.expose.count);
824: }
825:
826: void
827: SGraphicsExposureEvent(from, to)
828: xEvent *from, *to;
829: {
830: to->u.u.type = from->u.u.type;
831: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
832: cpswapl(from->u.graphicsExposure.drawable,
833: to->u.graphicsExposure.drawable);
834: cpswaps(from->u.graphicsExposure.x,
835: to->u.graphicsExposure.x);
836: cpswaps(from->u.graphicsExposure.y,
837: to->u.graphicsExposure.y);
838: cpswaps(from->u.graphicsExposure.width,
839: to->u.graphicsExposure.width);
840: cpswaps(from->u.graphicsExposure.height,
841: to->u.graphicsExposure.height);
842: cpswaps(from->u.graphicsExposure.minorEvent,
843: to->u.graphicsExposure.minorEvent);
844: cpswaps(from->u.graphicsExposure.count,
845: to->u.graphicsExposure.count);
846: to->u.graphicsExposure.majorEvent =
847: from->u.graphicsExposure.majorEvent;
848: }
849:
850: void
851: SNoExposureEvent(from, to)
852: xEvent *from, *to;
853: {
854: to->u.u.type = from->u.u.type;
855: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
856: cpswapl(from->u.noExposure.drawable, to->u.noExposure.drawable);
857: cpswaps(from->u.noExposure.minorEvent, to->u.noExposure.minorEvent);
858: to->u.noExposure.majorEvent = from->u.noExposure.majorEvent;
859: }
860:
861: void
862: SVisibilityEvent(from, to)
863: xEvent *from, *to;
864: {
865: to->u.u.type = from->u.u.type;
866: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
867: cpswapl(from->u.visibility.window, to->u.visibility.window);
868: to->u.visibility.state = from->u.visibility.state;
869: }
870:
871: void
872: SCreateNotifyEvent(from, to)
873: xEvent *from, *to;
874: {
875: to->u.u.type = from->u.u.type;
876: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
877: cpswapl(from->u.createNotify.window, to->u.createNotify.window);
878: cpswapl(from->u.createNotify.parent, to->u.createNotify.parent);
879: cpswaps(from->u.createNotify.x, to->u.createNotify.x);
880: cpswaps(from->u.createNotify.y, to->u.createNotify.y);
881: cpswaps(from->u.createNotify.width, to->u.createNotify.width);
882: cpswaps(from->u.createNotify.height, to->u.createNotify.height);
883: cpswaps(from->u.createNotify.borderWidth,
884: to->u.createNotify.borderWidth);
885: to->u.createNotify.override = from->u.createNotify.override;
886: }
887:
888: void
889: SDestroyNotifyEvent(from, to)
890: xEvent *from, *to;
891: {
892: to->u.u.type = from->u.u.type;
893: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
894: cpswapl(from->u.destroyNotify.event, to->u.destroyNotify.event);
895: cpswapl(from->u.destroyNotify.window, to->u.destroyNotify.window);
896: }
897:
898: void
899: SUnmapNotifyEvent(from, to)
900: xEvent *from, *to;
901: {
902: to->u.u.type = from->u.u.type;
903: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
904: cpswapl(from->u.unmapNotify.event, to->u.unmapNotify.event);
905: cpswapl(from->u.unmapNotify.window, to->u.unmapNotify.window);
906: to->u.unmapNotify.fromConfigure = from->u.unmapNotify.fromConfigure;
907: }
908:
909: void
910: SMapNotifyEvent(from, to)
911: xEvent *from, *to;
912: {
913: to->u.u.type = from->u.u.type;
914: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
915: cpswapl(from->u.mapNotify.event, to->u.mapNotify.event);
916: cpswapl(from->u.mapNotify.window, to->u.mapNotify.window);
917: to->u.mapNotify.override = from->u.mapNotify.override;
918: }
919:
920: void
921: SMapRequestEvent(from, to)
922: xEvent *from, *to;
923: {
924: to->u.u.type = from->u.u.type;
925: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
926: cpswapl(from->u.mapRequest.parent, to->u.mapRequest.parent);
927: cpswapl(from->u.mapRequest.window, to->u.mapRequest.window);
928: }
929:
930: void
931: SReparentEvent(from, to)
932: xEvent *from, *to;
933: {
934: to->u.u.type = from->u.u.type;
935: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
936: cpswapl(from->u.reparent.event, to->u.reparent.event);
937: cpswapl(from->u.reparent.window, to->u.reparent.window);
938: cpswapl(from->u.reparent.parent, to->u.reparent.parent);
939: cpswaps(from->u.reparent.x, to->u.reparent.x);
940: cpswaps(from->u.reparent.y, to->u.reparent.y);
941: to->u.reparent.override = from->u.reparent.override;
942: }
943:
944: void
945: SConfigureNotifyEvent(from, to)
946: xEvent *from, *to;
947: {
948: to->u.u.type = from->u.u.type;
949: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
950: cpswapl(from->u.configureNotify.event,
951: to->u.configureNotify.event);
952: cpswapl(from->u.configureNotify.window,
953: to->u.configureNotify.window);
954: cpswapl(from->u.configureNotify.aboveSibling,
955: to->u.configureNotify.aboveSibling);
956: cpswaps(from->u.configureNotify.x, to->u.configureNotify.x);
957: cpswaps(from->u.configureNotify.y, to->u.configureNotify.y);
958: cpswaps(from->u.configureNotify.width, to->u.configureNotify.width);
959: cpswaps(from->u.configureNotify.height,
960: to->u.configureNotify.height);
961: cpswaps(from->u.configureNotify.borderWidth,
962: to->u.configureNotify.borderWidth);
963: to->u.configureNotify.override = from->u.configureNotify.override;
964: }
965:
966: void
967: SConfigureRequestEvent(from, to)
968: xEvent *from, *to;
969: {
970: to->u.u.type = from->u.u.type;
971: to->u.u.detail = from->u.u.detail; /* actually stack-mode */
972: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
973: cpswapl(from->u.configureRequest.parent,
974: to->u.configureRequest.parent);
975: cpswapl(from->u.configureRequest.window,
976: to->u.configureRequest.window);
977: cpswapl(from->u.configureRequest.sibling,
978: to->u.configureRequest.sibling);
979: cpswaps(from->u.configureRequest.x, to->u.configureRequest.x);
980: cpswaps(from->u.configureRequest.y, to->u.configureRequest.y);
981: cpswaps(from->u.configureRequest.width,
982: to->u.configureRequest.width);
983: cpswaps(from->u.configureRequest.height,
984: to->u.configureRequest.height);
985: cpswaps(from->u.configureRequest.borderWidth,
986: to->u.configureRequest.borderWidth);
987: cpswaps(from->u.configureRequest.valueMask,
988: to->u.configureRequest.valueMask);
989: }
990:
991:
992: void
993: SGravityEvent(from, to)
994: xEvent *from, *to;
995: {
996: to->u.u.type = from->u.u.type;
997: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
998: cpswapl(from->u.gravity.event, to->u.gravity.event);
999: cpswapl(from->u.gravity.window, to->u.gravity.window);
1000: cpswaps(from->u.gravity.x, to->u.gravity.x);
1001: cpswaps(from->u.gravity.y, to->u.gravity.y);
1002: }
1003:
1004: void
1005: SResizeRequestEvent(from, to)
1006: xEvent *from, *to;
1007: {
1008: to->u.u.type = from->u.u.type;
1009: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
1010: cpswapl(from->u.resizeRequest.window, to->u.resizeRequest.window);
1011: cpswaps(from->u.resizeRequest.width, to->u.resizeRequest.width);
1012: cpswaps(from->u.resizeRequest.height, to->u.resizeRequest.height);
1013: }
1014:
1015: void
1016: SCirculateEvent(from, to)
1017: xEvent *from, *to;
1018: {
1019: to->u.u.type = from->u.u.type;
1020: to->u.u.detail = from->u.u.detail;
1021: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
1022: cpswapl(from->u.circulate.event, to->u.circulate.event);
1023: cpswapl(from->u.circulate.window, to->u.circulate.window);
1024: cpswapl(from->u.circulate.parent, to->u.circulate.parent);
1025: to->u.circulate.place = from->u.circulate.place;
1026: }
1027:
1028: void
1029: SPropertyEvent(from, to)
1030: xEvent *from, *to;
1031: {
1032: to->u.u.type = from->u.u.type;
1033: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
1034: cpswapl(from->u.property.window, to->u.property.window);
1035: cpswapl(from->u.property.atom, to->u.property.atom);
1036: cpswapl(from->u.property.time, to->u.property.time);
1037: to->u.property.state = from->u.property.state;
1038: }
1039:
1040: void
1041: SSelectionClearEvent(from, to)
1042: xEvent *from, *to;
1043: {
1044: to->u.u.type = from->u.u.type;
1045: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
1046: cpswapl(from->u.selectionClear.time, to->u.selectionClear.time);
1047: cpswapl(from->u.selectionClear.window, to->u.selectionClear.window);
1048: cpswapl(from->u.selectionClear.atom, to->u.selectionClear.atom);
1049: }
1050:
1051: void
1052: SSelectionRequestEvent(from, to)
1053: xEvent *from, *to;
1054: {
1055: to->u.u.type = from->u.u.type;
1056: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
1057: cpswapl(from->u.selectionRequest.time, to->u.selectionRequest.time);
1058: cpswapl(from->u.selectionRequest.owner,
1059: to->u.selectionRequest.owner);
1060: cpswapl(from->u.selectionRequest.requestor,
1061: to->u.selectionRequest.requestor);
1062: cpswapl(from->u.selectionRequest.selection,
1063: to->u.selectionRequest.selection);
1064: cpswapl(from->u.selectionRequest.target,
1065: to->u.selectionRequest.target);
1066: cpswapl(from->u.selectionRequest.property,
1067: to->u.selectionRequest.property);
1068: }
1069:
1070: void
1071: SSelectionNotifyEvent(from, to)
1072: xEvent *from, *to;
1073: {
1074: to->u.u.type = from->u.u.type;
1075: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
1076: cpswapl(from->u.selectionNotify.time, to->u.selectionNotify.time);
1077: cpswapl(from->u.selectionNotify.requestor,
1078: to->u.selectionNotify.requestor);
1079: cpswapl(from->u.selectionNotify.selection,
1080: to->u.selectionNotify.selection);
1081: cpswapl(from->u.selectionNotify.target,
1082: to->u.selectionNotify.target);
1083: cpswapl(from->u.selectionNotify.property,
1084: to->u.selectionNotify.property);
1085: }
1086:
1087: void
1088: SColormapEvent(from, to)
1089: xEvent *from, *to;
1090: {
1091: to->u.u.type = from->u.u.type;
1092: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
1093: cpswapl(from->u.colormap.window, to->u.colormap.window);
1094: cpswapl(from->u.colormap.colormap, to->u.colormap.colormap);
1095: to->u.colormap.new = from->u.colormap.new;
1096: to->u.colormap.state = from->u.colormap.state;
1097: }
1098:
1099: void
1100: SMappingEvent(from, to)
1101: xEvent *from, *to;
1102: {
1103: to->u.u.type = from->u.u.type;
1104: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
1105: to->u.mappingNotify.request = from->u.mappingNotify.request;
1106: to->u.mappingNotify.firstKeyCode =
1107: from->u.mappingNotify.firstKeyCode;
1108: to->u.mappingNotify.count = from->u.mappingNotify.count;
1109: }
1110:
1111: void
1112: SClientMessageEvent(from, to)
1113: xEvent *from, *to;
1114: {
1115: to->u.u.type = from->u.u.type;
1116: to->u.u.detail = from->u.u.detail; /* actually format */
1117: cpswaps(from->u.u.sequenceNumber, to->u.u.sequenceNumber);
1118: cpswapl(from->u.clientMessage.window, to->u.clientMessage.window);
1119: cpswapl(from->u.clientMessage.u.l.type,
1120: to->u.clientMessage.u.l.type);
1121: switch (from->u.u.detail) {
1122: case 8:
1123: bcopy(from->u.clientMessage.u.b.bytes,
1124: to->u.clientMessage.u.b.bytes, 20);
1125: break;
1126: case 16:
1127: cpswaps(from->u.clientMessage.u.s.shorts0,
1128: to->u.clientMessage.u.s.shorts0);
1129: cpswaps(from->u.clientMessage.u.s.shorts1,
1130: to->u.clientMessage.u.s.shorts1);
1131: cpswaps(from->u.clientMessage.u.s.shorts2,
1132: to->u.clientMessage.u.s.shorts2);
1133: cpswaps(from->u.clientMessage.u.s.shorts3,
1134: to->u.clientMessage.u.s.shorts3);
1135: cpswaps(from->u.clientMessage.u.s.shorts4,
1136: to->u.clientMessage.u.s.shorts4);
1137: cpswaps(from->u.clientMessage.u.s.shorts5,
1138: to->u.clientMessage.u.s.shorts5);
1139: cpswaps(from->u.clientMessage.u.s.shorts6,
1140: to->u.clientMessage.u.s.shorts6);
1141: cpswaps(from->u.clientMessage.u.s.shorts7,
1142: to->u.clientMessage.u.s.shorts7);
1143: cpswaps(from->u.clientMessage.u.s.shorts8,
1144: to->u.clientMessage.u.s.shorts8);
1145: cpswaps(from->u.clientMessage.u.s.shorts9,
1146: to->u.clientMessage.u.s.shorts9);
1147: break;
1148: case 32:
1149: cpswaps(from->u.clientMessage.u.l.longs0,
1150: to->u.clientMessage.u.l.longs0);
1151: cpswaps(from->u.clientMessage.u.l.longs1,
1152: to->u.clientMessage.u.l.longs1);
1153: cpswaps(from->u.clientMessage.u.l.longs2,
1154: to->u.clientMessage.u.l.longs2);
1155: cpswaps(from->u.clientMessage.u.l.longs3,
1156: to->u.clientMessage.u.l.longs3);
1157: cpswaps(from->u.clientMessage.u.l.longs4,
1158: to->u.clientMessage.u.l.longs4);
1159: break;
1160: }
1161: }
1162:
1163: void
1164: SKeymapNotifyEvent(from, to)
1165: xEvent *from, *to;
1166: {
1167: /* Keymap notify events are special; they have no
1168: sequence number field, and contain entirely 8-bit data */
1169: *to = *from;
1170: }
1171:
1172: void
1173: WriteSConnectionInfo(pClient, size, pInfo)
1174: ClientPtr pClient;
1175: int size;
1176: char *pInfo;
1177: {
1178: int i, j, k;
1179: ScreenPtr pScreen;
1180: DepthPtr pDepth;
1181: char *pInfoT, *pInfoTBase;
1182: xConnSetup *pConnSetup = (xConnSetup *)pInfo;
1183:
1184: pInfoT = pInfoTBase = (char *) ALLOCATE_LOCAL(size);
1185:
1186: SwapConnSetup(pInfo, pInfoT);
1187: pInfo += sizeof(xConnSetup);
1188: pInfoT += sizeof(xConnSetup);
1189:
1190: /* Copy the vendor string */
1191: i = (pConnSetup->nbytesVendor + 3) & ~3;
1192: bcopy(pInfo, pInfoT, i);
1193: pInfo += i;
1194: pInfoT += i;
1195:
1196: /* The Pixmap formats don't need to be swapped, just copied. */
1197: i = sizeof(xPixmapFormat) * screenInfo.numPixmapFormats;
1198: bcopy(pInfo, pInfoT, i);
1199: pInfo += i;
1200: pInfoT += i;
1201:
1202: for(i = 0; i < screenInfo.numScreens; i++)
1203: {
1204: pScreen = (ScreenPtr)&screenInfo.screen[i];
1205: SwapWinRoot(pInfo, pInfoT);
1206: pInfo += sizeof(xWindowRoot);
1207: pInfoT += sizeof(xWindowRoot);
1208: pDepth = pScreen->allowedDepths;
1209: for(j = 0; j < pScreen->numDepths; j++, pDepth++)
1210: {
1211: ((xDepth *)pInfoT)->depth = ((xDepth *)pInfo)->depth;
1212: cpswaps(((xDepth *)pInfo)->nVisuals, ((xDepth *)pInfoT)->nVisuals);
1213: pInfo += sizeof(xDepth);
1214: pInfoT += sizeof(xDepth);
1215: for(k = 0; k < pDepth->numVids; k++)
1216: {
1217: SwapVisual(pInfo, pInfoT);
1218: pInfo += sizeof(xVisualType);
1219: pInfoT += sizeof(xVisualType);
1220: }
1221: }
1222: }
1223: WriteToClient(pClient, size, (char *) pInfoTBase);
1224: DEALLOCATE_LOCAL(pInfoTBase);
1225: }
1226:
1227: void
1228: SwapConnSetup(pConnSetup, pConnSetupT)
1229: xConnSetup *pConnSetup, *pConnSetupT;
1230: {
1231: cpswapl(pConnSetup->release, pConnSetupT->release);
1232: cpswapl(pConnSetup->ridBase, pConnSetupT->ridBase);
1233: cpswapl(pConnSetup->ridMask, pConnSetupT->ridMask);
1234: cpswapl(pConnSetup->motionBufferSize, pConnSetupT->motionBufferSize);
1235: cpswaps(pConnSetup->nbytesVendor, pConnSetupT->nbytesVendor);
1236: cpswaps(pConnSetup->maxRequestSize, pConnSetupT->maxRequestSize);
1237: pConnSetupT->minKeyCode = pConnSetup->minKeyCode;
1238: pConnSetupT->maxKeyCode = pConnSetup->maxKeyCode;
1239: pConnSetupT->numRoots = pConnSetup->numRoots;
1240: pConnSetupT->numFormats = pConnSetup->numFormats;
1241: pConnSetupT->imageByteOrder = pConnSetup->imageByteOrder;
1242: pConnSetupT->bitmapBitOrder = pConnSetup->bitmapBitOrder;
1243: pConnSetupT->bitmapScanlineUnit = pConnSetup->bitmapScanlineUnit;
1244: pConnSetupT->bitmapScanlinePad = pConnSetup->bitmapScanlinePad;
1245: }
1246:
1247: void
1248: SwapWinRoot(pRoot, pRootT)
1249: xWindowRoot *pRoot, *pRootT;
1250: {
1251: cpswapl(pRoot->windowId, pRootT->windowId);
1252: cpswapl(pRoot->defaultColormap, pRootT->defaultColormap);
1253: cpswapl(pRoot->whitePixel, pRootT->whitePixel);
1254: cpswapl(pRoot->blackPixel, pRootT->blackPixel);
1255: cpswapl(pRoot->currentInputMask, pRootT->currentInputMask);
1256: cpswaps(pRoot->pixWidth, pRootT->pixWidth);
1257: cpswaps(pRoot->pixHeight, pRootT->pixHeight);
1258: cpswaps(pRoot->mmWidth, pRootT->mmWidth);
1259: cpswaps(pRoot->mmHeight, pRootT->mmHeight);
1260: cpswaps(pRoot->minInstalledMaps, pRootT->minInstalledMaps);
1261: cpswaps(pRoot->maxInstalledMaps, pRootT->maxInstalledMaps);
1262: cpswapl(pRoot->rootVisualID, pRootT->rootVisualID);
1263: pRootT->backingStore = pRoot->backingStore;
1264: pRootT->saveUnders = pRoot->saveUnders;
1265: pRootT->rootDepth = pRoot->rootDepth;
1266: pRootT->nDepths = pRoot->nDepths;
1267: }
1268:
1269: void
1270: SwapVisual(pVis, pVisT)
1271: xVisualType *pVis, *pVisT;
1272: {
1273: cpswapl(pVis->visualID, pVisT->visualID);
1274: pVisT->class = pVis->class;
1275: pVisT->bitsPerRGB = pVis->bitsPerRGB;
1276: cpswaps(pVis->colormapEntries, pVisT->colormapEntries);
1277: cpswapl(pVis->redMask, pVisT->redMask);
1278: cpswapl(pVis->greenMask, pVisT->greenMask);
1279: cpswapl(pVis->blueMask, pVisT->blueMask);
1280: }
1281:
1282: void
1283: WriteSConnSetupPrefix(pClient, pcsp)
1284: ClientPtr pClient;
1285: xConnSetupPrefix *pcsp;
1286: {
1287: xConnSetupPrefix cspT;
1288:
1289: cspT.success = pcsp->success;
1290: cpswaps(pcsp->majorVersion, cspT.majorVersion);
1291: cpswaps(pcsp->minorVersion, cspT.minorVersion);
1292: cpswaps(pcsp->length, cspT.length);
1293: WriteToClient(pClient, sizeof(cspT), (char *) &cspT);
1294: }
1295:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.