2 * Copyright (c) 1999 Greg Haerr <greg@censoft.com>
3 * Copyright (c) 2000 Alex Holden <alex@linuxhacker.org>
5 * Nano-X Core Protocol Header
7 * These structures define the Nano-X client/server protocol.
8 * Much of this has been modeled after the X11 implementation.
9 * Note that all NX Protocol requests should have all data quantities
10 * properly aligned. This is assured by hand-coding each NX request
11 * structure. Unlike Xlib, fixed size request structs don't have to
12 * be a multiple of 4 bytes, since the length field is a byte count
13 * and GetReq() automatically pads all requests to 4-byte boundaries.
14 * Request structs for variable size data, however, must be hand-padded
15 * to 4-byte alignment, as variable data starts after sizeof(structure).
16 * Also, the hilength/length fields store the unaligned byte count, so
17 * that extra code isn't required to de-crypt extra data size or
22 * The following is provided to allow limiting the maximum
23 * request size that will be sent (not received) using this protocol.
24 * The protocol allows for 2^24 byte maximum, but the
25 * server currently allocates the MAXREQUESTSZ in a stack buffer.
26 * Also, the client realloc's the request queue to
27 * the largest size asked for, and currently never reduces it.
29 * Routines like GrArea will split packets to be <= MAXREQUESTSZ
32 * NOTE: MAXREQUESTSZ must be an _aligned_ multiple of 4, meaning
33 * that MAXREQUESTSZ = (MAXREQUESTSZ + 3) & ~3.
35 #define MAXREQUESTSZ 30000 /* max request size (65532)*/
37 typedef unsigned char BYTE8; /* 1 byte*/
38 typedef unsigned short UINT16; /* 2 bytes*/
39 typedef short INT16; /* 2 bytes*/
40 typedef unsigned long UINT32; /* 4 bytes*/
43 typedef UINT16 IDTYPE;
44 #define ALIGNSZ 2 /* 2 byte packet alignment*/
46 typedef UINT32 IDTYPE;
47 #define ALIGNSZ 4 /* 4 byte packet alignment*/
50 /* all requests share this header*/
52 BYTE8 reqType; /* request code*/
53 BYTE8 hilength; /* upper 24 bits of unaligned length*/
54 UINT16 length; /* lower 16 bits of unaligned length*/
57 /* Allocate a fixed size request from request buffer*/
58 #define AllocReq(name) \
59 ((nx##name##Req *)nxAllocReq(GrNum##name,sizeof(nx##name##Req), 0))
61 /* Allocate a request, but allocate n extra bytes*/
62 #define AllocReqExtra(name,n) \
63 ((nx##name##Req *)nxAllocReq(GrNum##name,sizeof(nx##name##Req), n))
65 /* return pointer to variable length data*/
66 #define GetReqData(req) ((void *)((char *)req + sizeof(* (req))))
68 /* FIXME fails when sizeof(int) == 2*/
69 /* get request total valid data length, including header*/
70 #define GetReqLen(req) (((req)->hilength << 16) | (req)->length)
72 /* get request variable data length, not including fixed size structure*/
73 #define GetReqVarLen(req) (GetReqLen(req) - sizeof(* (req)))
75 /* get request total aligned length*/
76 #define GetReqAlignedLen(req) ((GetReqLen(req) + (ALIGNSZ-1)) & ~(ALIGNSZ-1))
78 void * nxAllocReq(int type, long size, long extra);
79 void nxFlushReq(long newsize, int reply_needed);
80 void nxAssignReqbuffer(char *buffer, long size);
81 void nxWriteSocket(char *buf, int todo);
82 int nxCalcStringBytes(void *str, int count, int flags);
85 /* all replies share this header*/
87 BYTE8 repType; /* reply code*/
88 BYTE8 hilength; /* upper 24 bits of unaligned length*/
89 UINT16 length; /* lower 16 bits of unaligned length*/
92 /* reply types if not equal to request type*/
93 #define GrNumErrorReply 255
94 #define GrNumEventReply 254
112 #define GrNumGetScreenInfo 2
117 } nxGetScreenInfoReq;
119 #define GrNumNewWindow 3
129 UINT32 backgroundcolor;
134 #define GrNumNewInputWindow 4
144 } nxNewInputWindowReq;
146 #define GrNumDestroyWindow 5
152 } nxDestroyWindowReq;
161 #define GrNumCopyGC 7
169 #define GrNumGetGCInfo 8
177 #define GrNumDestroyGC 9
185 #define GrNumMapWindow 10
193 #define GrNumUnmapWindow 11
201 #define GrNumRaiseWindow 12
209 #define GrNumLowerWindow 13
217 #define GrNumMoveWindow 14
227 #define GrNumResizeWindow 15
237 #define GrNumGetWindowInfo 16
243 } nxGetWindowInfoReq;
245 #define GrNumGetFontInfo 17
253 #define GrNumSetFocus 18
261 #define GrNumSetWindowCursor 19
268 } nxSetWindowCursorReq;
270 #define GrNumClearArea 20
283 #define GrNumSelectEvents 21
292 #define GrNumGetNextEvent 22
299 #define GrNumCheckNextEvent 23
304 } nxCheckNextEventReq;
306 #define GrNumPeekEvent 24
326 #define GrNumPoint 26
350 #define GrNumFillRect 28
370 /*INT16 pointtable[];*/
373 #define GrNumFillPoly 30
380 /*INT16 pointtable[];*/
383 #define GrNumEllipse 31
396 #define GrNumFillEllipse 32
409 #define GrNumSetGCForeground 33
416 } nxSetGCForegroundReq;
418 #define GrNumSetGCBackground 34
425 } nxSetGCBackgroundReq;
427 #define GrNumSetGCUseBackground 35
434 } nxSetGCUseBackgroundReq;
436 #define GrNumSetGCMode 36
445 #define GrNumSetGCFont 37
454 #define GrNumGetGCTextSize 38
463 } nxGetGCTextSizeReq;
465 #define GrNumReadArea 39
493 #define GrNumBitmap 41
504 /*UINT16 bitmaptable[];*/
521 #define GrNumNewCursor 43
532 /*UINT16 fgbitmap[];*/
533 /*UINT16 bgbitmap[];*/
536 #define GrNumMoveCursor 44
545 #define GrNumGetSystemPalette 45
550 } nxGetSystemPaletteReq;
552 #define GrNumFindColor 46
560 #define GrNumReparentWindow 47
569 } nxReparentWindowReq;
571 #define GrNumDrawImageFromFile 48
584 } nxDrawImageFromFileReq;
586 #define GrNumLoadImageFromFile 49
593 } nxLoadImageFromFileReq;
595 #define GrNumNewPixmap 50
602 /* FIXME: Add support for passing shared memory info */
605 #define GrNumCopyArea 51
622 #define GrNumSetFontSize 52
631 #define GrNumCreateFont 53
641 #define GrNumDestroyFont 54
649 #define GrNumReqShmCmds 55
657 #define GrNumShmCmdsFlush 56
666 #define GrNumSetFontRotation 57
673 } nxSetFontRotationReq;
675 #define GrNumSetFontAttr 58
685 #define GrNumSetSystemPalette 59
692 MWPALENTRY palette[256];
693 } nxSetSystemPaletteReq;
695 #define GrNumInjectEvent 60
696 #define GR_INJECT_EVENT_POINTER 0
697 #define GR_INJECT_EVENT_KEYBOARD 1
720 #define GrNumNewRegion 61
727 #define GrNumDestroyRegion 62
733 } nxDestroyRegionReq;
735 #define GrNumUnionRectWithRegion 63
742 } nxUnionRectWithRegionReq;
744 #define GrNumUnionRegion 64
754 #define GrNumIntersectRegion 65
762 } nxIntersectRegionReq;
764 #define GrNumSetGCRegion 66
773 #define GrNumSubtractRegion 67
781 } nxSubtractRegionReq;
783 #define GrNumXorRegion 68
793 #define GrNumPointInRegion 69
801 } nxPointInRegionReq;
803 #define GrNumRectInRegion 70
815 #define GrNumEmptyRegion 71
823 #define GrNumEqualRegion 72
832 #define GrNumOffsetRegion 73
842 #define GrNumGetRegionBox 74
850 #define GrNumNewPolygonRegion 75
858 } nxNewPolygonRegionReq;
878 #define GrNumArcAngle 77
894 #define GrNumSetWMProperties 78
900 /* GR_WM_PROPERTIES props */
902 } nxSetWMPropertiesReq;
904 #define GrNumGetWMProperties 79
910 } nxGetWMPropertiesReq;
912 #define GrNumCloseWindow 80
920 #define GrNumKillWindow 81
928 #define GrNumDrawImageToFit 82
940 } nxDrawImageToFitReq;
942 #define GrNumFreeImage 83
950 #define GrNumGetImageInfo 84
958 #define GrNumDrawImageBits 85
967 INT16 width; /* MWIMAGEHDR start*/
976 /*MWIMAGEBITS imagebits[];*/
977 /*MWPALENTRY palette[palsize];*/
978 } nxDrawImageBitsReq;
980 #define GrNumPoints 86
987 /*INT16 pointtable[];*/
990 #define GrNumGetFocus 87
997 #define GrNumGetSysColor 88
1005 #define GrNumSetScreenSaverTimeout 89
1011 } nxSetScreenSaverTimeoutReq;
1013 #define GrNumSetSelectionOwner 90
1019 /* GR_CHAR *typelist */
1020 } nxSetSelectionOwnerReq;
1022 #define GrNumGetSelectionOwner 91
1027 } nxGetSelectionOwnerReq;
1029 #define GrNumRequestClientData 92
1038 } nxRequestClientDataReq;
1040 #define GrNumSendClientData 93
1050 } nxSendClientDataReq;
1052 #define GrNumBell 94
1059 #define GrNumSetBackgroundPixmap 95
1067 } nxSetBackgroundPixmapReq;
1069 #define GrNumDestroyCursor 96
1075 } nxDestroyCursorReq;
1077 #define GrNumQueryTree 97
1085 #define GrNumCreateTimer 98
1094 #define GrNumDestroyTimer 99
1100 } nxDestroyTimerReq;
1102 #define GrNumSetPortraitMode 100
1107 UINT32 portraitmode;
1108 } nxSetPortraitModeReq;
1110 #define GrNumImageBufferAlloc 101
1117 } nxImageBufferAllocReq;
1119 #define GrNumImageBufferSend 102
1127 } nxImageBufferSendReq;
1129 #define GrNumLoadImageFromBuffer 103
1137 } nxLoadImageFromBufferReq;
1139 #define GrNumDrawImageFromBuffer 104
1152 } nxDrawImageFromBufferReq;
1154 #define GrNumGetFontList 105
1161 #define GrNumSetGCClipOrigin 106
1170 } nxSetGCClipOriginReq;
1172 #define GrTotalNumCalls 107