diff options
author | marha <marha@users.sourceforge.net> | 2014-08-30 13:45:43 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2014-08-30 13:45:43 +0200 |
commit | 3293021e6f582c7348667e7638941620134525e1 (patch) | |
tree | 5d8d3da8242ff7828fb6964bed19b13d74d48704 | |
parent | 0a9ab140bb01b96888e313466a73e26e5156f22d (diff) | |
parent | e21655632e3fd40b7f6a5cc3c7f3c379d54557c4 (diff) | |
download | vcxsrv-3293021e6f582c7348667e7638941620134525e1.tar.gz vcxsrv-3293021e6f582c7348667e7638941620134525e1.tar.bz2 vcxsrv-3293021e6f582c7348667e7638941620134525e1.zip |
Merge remote-tracking branch 'origin/released'
Conflicts:
xorg-server/hw/kdrive/ephyr/ephyrinit.c
62 files changed, 1901 insertions, 1225 deletions
diff --git a/X11/xtrans/Xtrans.c b/X11/xtrans/Xtrans.c index 30f099255..b373cc417 100755 --- a/X11/xtrans/Xtrans.c +++ b/X11/xtrans/Xtrans.c @@ -190,7 +190,8 @@ TRANS(SelectTransport) (const char *protocol) static #endif /* TEST_t */ int -TRANS(ParseAddress) (char *address, char **protocol, char **host, char **port) +TRANS(ParseAddress) (const char *address, + char **protocol, char **host, char **port) { /* @@ -396,7 +397,7 @@ TRANS(ParseAddress) (char *address, char **protocol, char **host, char **port) */ static XtransConnInfo -TRANS(Open) (int type, char *address) +TRANS(Open) (int type, const char *address) { char *protocol = NULL, *host = NULL, *port = NULL; @@ -494,7 +495,7 @@ TRANS(Open) (int type, char *address) */ static XtransConnInfo -TRANS(Reopen) (int type, int trans_id, int fd, char *port) +TRANS(Reopen) (int type, int trans_id, int fd, const char *port) { XtransConnInfo ciptr = NULL; @@ -568,7 +569,7 @@ TRANS(Reopen) (int type, int trans_id, int fd, char *port) #ifdef TRANS_CLIENT XtransConnInfo -TRANS(OpenCOTSClient) (char *address) +TRANS(OpenCOTSClient) (const char *address) { prmsg (2,"OpenCOTSClient(%s)\n", address); @@ -581,7 +582,7 @@ TRANS(OpenCOTSClient) (char *address) #ifdef TRANS_SERVER XtransConnInfo -TRANS(OpenCOTSServer) (char *address) +TRANS(OpenCOTSServer) (const char *address) { prmsg (2,"OpenCOTSServer(%s)\n", address); @@ -594,7 +595,7 @@ TRANS(OpenCOTSServer) (char *address) #ifdef TRANS_CLIENT XtransConnInfo -TRANS(OpenCLTSClient) (char *address) +TRANS(OpenCLTSClient) (const char *address) { prmsg (2,"OpenCLTSClient(%s)\n", address); @@ -607,7 +608,7 @@ TRANS(OpenCLTSClient) (char *address) #ifdef TRANS_SERVER XtransConnInfo -TRANS(OpenCLTSServer) (char *address) +TRANS(OpenCLTSServer) (const char *address) { prmsg (2,"OpenCLTSServer(%s)\n", address); @@ -620,7 +621,7 @@ TRANS(OpenCLTSServer) (char *address) #ifdef TRANS_REOPEN XtransConnInfo -TRANS(ReopenCOTSServer) (int trans_id, int fd, char *port) +TRANS(ReopenCOTSServer) (int trans_id, int fd, const char *port) { prmsg (2,"ReopenCOTSServer(%d, %d, %s)\n", trans_id, fd, port); @@ -628,7 +629,7 @@ TRANS(ReopenCOTSServer) (int trans_id, int fd, char *port) } XtransConnInfo -TRANS(ReopenCLTSServer) (int trans_id, int fd, char *port) +TRANS(ReopenCLTSServer) (int trans_id, int fd, const char *port) { prmsg (2,"ReopenCLTSServer(%d, %d, %s)\n", trans_id, fd, port); @@ -747,7 +748,7 @@ TRANS(SetOption) (XtransConnInfo ciptr, int option, int arg) #ifdef TRANS_SERVER int -TRANS(CreateListener) (XtransConnInfo ciptr, char *port, unsigned int flags) +TRANS(CreateListener) (XtransConnInfo ciptr, const char *port, unsigned int flags) { return ciptr->transptr->CreateListener (ciptr, port, flags); @@ -856,7 +857,7 @@ TRANS(Accept) (XtransConnInfo ciptr, int *status) #ifdef TRANS_CLIENT int -TRANS(Connect) (XtransConnInfo ciptr, char *address) +TRANS(Connect) (XtransConnInfo ciptr, const char *address) { char *protocol; @@ -1076,7 +1077,8 @@ complete_network_count (void) static int -receive_listening_fds(char* port, XtransConnInfo* temp_ciptrs, int* count_ret) +receive_listening_fds(const char* port, XtransConnInfo* temp_ciptrs, + int* count_ret) { #ifdef HAVE_SYSTEMD_DAEMON @@ -1153,8 +1155,8 @@ extern int xquartz_launchd_fd; #endif int -TRANS(MakeAllCOTSServerListeners) (char *port, int *partial, int *count_ret, - XtransConnInfo **ciptrs_ret) +TRANS(MakeAllCOTSServerListeners) (const char *port, int *partial, + int *count_ret, XtransConnInfo **ciptrs_ret) { char buffer[256]; /* ??? What size ?? */ @@ -1284,8 +1286,8 @@ TRANS(MakeAllCOTSServerListeners) (char *port, int *partial, int *count_ret, } int -TRANS(MakeAllCLTSServerListeners) (char *port, int *partial, int *count_ret, - XtransConnInfo **ciptrs_ret) +TRANS(MakeAllCLTSServerListeners) (const char *port, int *partial, + int *count_ret, XtransConnInfo **ciptrs_ret) { char buffer[256]; /* ??? What size ?? */ diff --git a/X11/xtrans/Xtrans.h b/X11/xtrans/Xtrans.h index 5807b6728..6decc6b3a 100644 --- a/X11/xtrans/Xtrans.h +++ b/X11/xtrans/Xtrans.h @@ -236,7 +236,7 @@ void TRANS(FreeConnInfo) ( #ifdef TRANS_CLIENT XtransConnInfo TRANS(OpenCOTSClient)( - char * /* address */ + const char * /* address */ ); #endif /* TRANS_CLIENT */ @@ -244,7 +244,7 @@ XtransConnInfo TRANS(OpenCOTSClient)( #ifdef TRANS_SERVER XtransConnInfo TRANS(OpenCOTSServer)( - char * /* address */ + const char * /* address */ ); #endif /* TRANS_SERVER */ @@ -252,7 +252,7 @@ XtransConnInfo TRANS(OpenCOTSServer)( #ifdef TRANS_CLIENT XtransConnInfo TRANS(OpenCLTSClient)( - char * /* address */ + const char * /* address */ ); #endif /* TRANS_CLIENT */ @@ -260,7 +260,7 @@ XtransConnInfo TRANS(OpenCLTSClient)( #ifdef TRANS_SERVER XtransConnInfo TRANS(OpenCLTSServer)( - char * /* address */ + const char * /* address */ ); #endif /* TRANS_SERVER */ @@ -270,13 +270,13 @@ XtransConnInfo TRANS(OpenCLTSServer)( XtransConnInfo TRANS(ReopenCOTSServer)( int, /* trans_id */ int, /* fd */ - char * /* port */ + const char * /* port */ ); XtransConnInfo TRANS(ReopenCLTSServer)( int, /* trans_id */ int, /* fd */ - char * /* port */ + const char * /* port */ ); int TRANS(GetReopenInfo)( @@ -299,7 +299,7 @@ int TRANS(SetOption)( int TRANS(CreateListener)( XtransConnInfo, /* ciptr */ - char *, /* port */ + const char *, /* port */ unsigned int /* flags */ ); @@ -330,7 +330,7 @@ XtransConnInfo TRANS(Accept)( int TRANS(Connect)( XtransConnInfo, /* ciptr */ - char * /* address */ + const char * /* address */ ); #endif /* TRANS_CLIENT */ @@ -405,14 +405,14 @@ int TRANS(GetConnectionNumber)( #ifdef TRANS_SERVER int TRANS(MakeAllCOTSServerListeners)( - char *, /* port */ + const char *, /* port */ int *, /* partial */ int *, /* count_ret */ XtransConnInfo ** /* ciptrs_ret */ ); int TRANS(MakeAllCLTSServerListeners)( - char *, /* port */ + const char *, /* port */ int *, /* partial */ int *, /* count_ret */ XtransConnInfo ** /* ciptrs_ret */ diff --git a/X11/xtrans/Xtransint.h b/X11/xtrans/Xtransint.h index 6b2b9ec00..edd53254c 100644 --- a/X11/xtrans/Xtransint.h +++ b/X11/xtrans/Xtransint.h @@ -163,9 +163,9 @@ typedef struct _Xtransport { XtransConnInfo (*OpenCOTSClient)( struct _Xtransport *, /* transport */ - char *, /* protocol */ - char *, /* host */ - char * /* port */ + const char *, /* protocol */ + const char *, /* host */ + const char * /* port */ ); #endif /* TRANS_CLIENT */ @@ -174,9 +174,9 @@ typedef struct _Xtransport { const char ** nolisten; XtransConnInfo (*OpenCOTSServer)( struct _Xtransport *, /* transport */ - char *, /* protocol */ - char *, /* host */ - char * /* port */ + const char *, /* protocol */ + const char *, /* host */ + const char * /* port */ ); #endif /* TRANS_SERVER */ @@ -185,9 +185,9 @@ typedef struct _Xtransport { XtransConnInfo (*OpenCLTSClient)( struct _Xtransport *, /* transport */ - char *, /* protocol */ - char *, /* host */ - char * /* port */ + const char *, /* protocol */ + const char *, /* host */ + const char * /* port */ ); #endif /* TRANS_CLIENT */ @@ -196,9 +196,9 @@ typedef struct _Xtransport { XtransConnInfo (*OpenCLTSServer)( struct _Xtransport *, /* transport */ - char *, /* protocol */ - char *, /* host */ - char * /* port */ + const char *, /* protocol */ + const char *, /* host */ + const char * /* port */ ); #endif /* TRANS_SERVER */ @@ -209,13 +209,13 @@ typedef struct _Xtransport { XtransConnInfo (*ReopenCOTSServer)( struct _Xtransport *, /* transport */ int, /* fd */ - char * /* port */ + const char * /* port */ ); XtransConnInfo (*ReopenCLTSServer)( struct _Xtransport *, /* transport */ int, /* fd */ - char * /* port */ + const char * /* port */ ); #endif /* TRANS_REOPEN */ @@ -233,7 +233,7 @@ typedef struct _Xtransport { int (*CreateListener)( XtransConnInfo, /* connection */ - char *, /* port */ + const char *, /* port */ unsigned int /* flags */ ); @@ -252,8 +252,8 @@ typedef struct _Xtransport { int (*Connect)( XtransConnInfo, /* connection */ - char *, /* host */ - char * /* port */ + const char *, /* host */ + const char * /* port */ ); #endif /* TRANS_CLIENT */ diff --git a/X11/xtrans/Xtranslcl.c b/X11/xtrans/Xtranslcl.c index 65f1957b9..ee4bcd926 100644 --- a/X11/xtrans/Xtranslcl.c +++ b/X11/xtrans/Xtranslcl.c @@ -129,7 +129,7 @@ static int TRANS(LocalClose)(XtransConnInfo ciptr); /* Type Not Supported */ static int -TRANS(OpenFail)(XtransConnInfo ciptr _X_UNUSED, char *port _X_UNUSED) +TRANS(OpenFail)(XtransConnInfo ciptr _X_UNUSED, const char *port _X_UNUSED) { return -1; @@ -138,7 +138,8 @@ TRANS(OpenFail)(XtransConnInfo ciptr _X_UNUSED, char *port _X_UNUSED) #ifdef TRANS_REOPEN static int -TRANS(ReopenFail)(XtransConnInfo ciptr _X_UNUSED, int fd _X_UNUSED, char *port _X_UNUSED) +TRANS(ReopenFail)(XtransConnInfo ciptr _X_UNUSED, int fd _X_UNUSED, + const char *port _X_UNUSED) { return 0; @@ -164,7 +165,8 @@ TRANS(LocalSendFdInvalid)(XtransConnInfo ciptr, int fd, int do_close) static int -TRANS(FillAddrInfo)(XtransConnInfo ciptr, char *sun_path, char *peer_sun_path) +TRANS(FillAddrInfo)(XtransConnInfo ciptr, + const char *sun_path, const char *peer_sun_path) { struct sockaddr_un *sunaddr; @@ -322,7 +324,7 @@ static void _dummy(int sig _X_UNUSED) #ifdef TRANS_CLIENT static int -TRANS(PTSOpenClient)(XtransConnInfo ciptr, char *port) +TRANS(PTSOpenClient)(XtransConnInfo ciptr, const char *port) { #ifdef PTSNODENAME @@ -474,7 +476,7 @@ TRANS(PTSOpenClient)(XtransConnInfo ciptr, char *port) #ifdef TRANS_SERVER static int -TRANS(PTSOpenServer)(XtransConnInfo ciptr, char *port) +TRANS(PTSOpenServer)(XtransConnInfo ciptr, const char *port) { #ifdef PTSNODENAME @@ -675,7 +677,7 @@ TRANS(PTSAccept)(XtransConnInfo ciptr, XtransConnInfo newciptr, int *status) #ifdef TRANS_CLIENT static int -TRANS(NAMEDOpenClient)(XtransConnInfo ciptr, char *port) +TRANS(NAMEDOpenClient)(XtransConnInfo ciptr, const char *port) { #ifdef NAMEDNODENAME @@ -812,7 +814,7 @@ TRANS(NAMEDOpenPipe)(const char *server_path) #endif static int -TRANS(NAMEDOpenServer)(XtransConnInfo ciptr, char *port) +TRANS(NAMEDOpenServer)(XtransConnInfo ciptr, const char *port) { #ifdef NAMEDNODENAME int fd; @@ -1018,7 +1020,7 @@ named_spipe(int fd, char *path) #ifdef TRANS_CLIENT static int -TRANS(SCOOpenClient)(XtransConnInfo ciptr, char *port) +TRANS(SCOOpenClient)(XtransConnInfo ciptr, const char *port) { #ifdef SCORNODENAME int fd, server, fl, ret; @@ -1106,7 +1108,7 @@ TRANS(SCOOpenClient)(XtransConnInfo ciptr, char *port) #ifdef TRANS_SERVER static int -TRANS(SCOOpenServer)(XtransConnInfo ciptr, char *port) +TRANS(SCOOpenServer)(XtransConnInfo ciptr, const char *port) { #ifdef SCORNODENAME char serverR_path[64]; @@ -1282,7 +1284,7 @@ TRANS(SCOAccept)(XtransConnInfo ciptr, XtransConnInfo newciptr, int *status) #ifdef LOCAL_TRANS_PTS static int -TRANS(PTSReopenServer)(XtransConnInfo ciptr, int fd, char *port) +TRANS(PTSReopenServer)(XtransConnInfo ciptr, int fd, const char *port) { #ifdef PTSNODENAME @@ -1323,7 +1325,7 @@ TRANS(PTSReopenServer)(XtransConnInfo ciptr, int fd, char *port) #ifdef LOCAL_TRANS_NAMED static int -TRANS(NAMEDReopenServer)(XtransConnInfo ciptr, int fd _X_UNUSED, char *port) +TRANS(NAMEDReopenServer)(XtransConnInfo ciptr, int fd _X_UNUSED, const char *port) { #ifdef NAMEDNODENAME @@ -1364,7 +1366,7 @@ TRANS(NAMEDReopenServer)(XtransConnInfo ciptr, int fd _X_UNUSED, char *port) #ifdef LOCAL_TRANS_SCO static int -TRANS(SCOReopenServer)(XtransConnInfo ciptr, int fd, char *port) +TRANS(SCOReopenServer)(XtransConnInfo ciptr, int fd, const char *port) { #ifdef SCORNODENAME @@ -1413,7 +1415,7 @@ typedef struct _LOCALtrans2dev { #ifdef TRANS_CLIENT int (*devcotsopenclient)( - XtransConnInfo, char * /*port*/ + XtransConnInfo, const char * /*port*/ ); #endif /* TRANS_CLIENT */ @@ -1421,7 +1423,7 @@ typedef struct _LOCALtrans2dev { #ifdef TRANS_SERVER int (*devcotsopenserver)( - XtransConnInfo, char * /*port*/ + XtransConnInfo, const char * /*port*/ ); #endif /* TRANS_SERVER */ @@ -1429,7 +1431,7 @@ typedef struct _LOCALtrans2dev { #ifdef TRANS_CLIENT int (*devcltsopenclient)( - XtransConnInfo, char * /*port*/ + XtransConnInfo, const char * /*port*/ ); #endif /* TRANS_CLIENT */ @@ -1437,7 +1439,7 @@ typedef struct _LOCALtrans2dev { #ifdef TRANS_SERVER int (*devcltsopenserver)( - XtransConnInfo, char * /*port*/ + XtransConnInfo, const char * /*port*/ ); #endif /* TRANS_SERVER */ @@ -1447,13 +1449,13 @@ typedef struct _LOCALtrans2dev { int (*devcotsreopenserver)( XtransConnInfo, int, /* fd */ - char * /* port */ + const char * /* port */ ); int (*devcltsreopenserver)( XtransConnInfo, int, /* fd */ - char * /* port */ + const char * /* port */ ); #endif /* TRANS_REOPEN */ @@ -1763,7 +1765,7 @@ TRANS(LocalGetNextTransport)(void) */ static int -HostReallyLocal (char *host) +HostReallyLocal (const char *host) { /* @@ -1793,7 +1795,8 @@ HostReallyLocal (char *host) static XtransConnInfo -TRANS(LocalOpenClient)(int type, char *protocol, char *host, char *port) +TRANS(LocalOpenClient)(int type, const char *protocol, + const char *host, const char *port) { LOCALtrans2dev *transptr; @@ -1888,7 +1891,8 @@ TRANS(LocalOpenClient)(int type, char *protocol, char *host, char *port) #ifdef TRANS_SERVER static XtransConnInfo -TRANS(LocalOpenServer)(int type, char *protocol, char *host _X_UNUSED, char *port) +TRANS(LocalOpenServer)(int type, const char *protocol, + const char *host _X_UNUSED, const char *port) { int i; @@ -1951,7 +1955,7 @@ TRANS(LocalOpenServer)(int type, char *protocol, char *host _X_UNUSED, char *por #ifdef TRANS_REOPEN static XtransConnInfo -TRANS(LocalReopenServer)(int type, int index, int fd, char *port) +TRANS(LocalReopenServer)(int type, int index, int fd, const char *port) { XtransConnInfo ciptr; @@ -2003,8 +2007,8 @@ TRANS(LocalReopenServer)(int type, int index, int fd, char *port) #ifdef TRANS_CLIENT static XtransConnInfo -TRANS(LocalOpenCOTSClient)(Xtransport *thistrans _X_UNUSED, char *protocol, - char *host, char *port) +TRANS(LocalOpenCOTSClient)(Xtransport *thistrans _X_UNUSED, const char *protocol, + const char *host, const char *port) { prmsg(2,"LocalOpenCOTSClient(%s,%s,%s)\n",protocol,host,port); @@ -2018,8 +2022,8 @@ TRANS(LocalOpenCOTSClient)(Xtransport *thistrans _X_UNUSED, char *protocol, #ifdef TRANS_SERVER static XtransConnInfo -TRANS(LocalOpenCOTSServer)(Xtransport *thistrans, char *protocol, - char *host, char *port) +TRANS(LocalOpenCOTSServer)(Xtransport *thistrans, const char *protocol, + const char *host, const char *port) { char *typetocheck = NULL; @@ -2062,8 +2066,8 @@ TRANS(LocalOpenCOTSServer)(Xtransport *thistrans, char *protocol, #ifdef TRANS_CLIENT static XtransConnInfo -TRANS(LocalOpenCLTSClient)(Xtransport *thistrans _X_UNUSED, char *protocol, - char *host, char *port) +TRANS(LocalOpenCLTSClient)(Xtransport *thistrans _X_UNUSED, const char *protocol, + const char *host, const char *port) { prmsg(2,"LocalOpenCLTSClient(%s,%s,%s)\n",protocol,host,port); @@ -2077,8 +2081,8 @@ TRANS(LocalOpenCLTSClient)(Xtransport *thistrans _X_UNUSED, char *protocol, #ifdef TRANS_SERVER static XtransConnInfo -TRANS(LocalOpenCLTSServer)(Xtransport *thistrans _X_UNUSED, char *protocol, - char *host, char *port) +TRANS(LocalOpenCLTSServer)(Xtransport *thistrans _X_UNUSED, const char *protocol, + const char *host, const char *port) { prmsg(2,"LocalOpenCLTSServer(%s,%s,%s)\n",protocol,host,port); @@ -2092,7 +2096,7 @@ TRANS(LocalOpenCLTSServer)(Xtransport *thistrans _X_UNUSED, char *protocol, #ifdef TRANS_REOPEN static XtransConnInfo -TRANS(LocalReopenCOTSServer)(Xtransport *thistrans, int fd, char *port) +TRANS(LocalReopenCOTSServer)(Xtransport *thistrans, int fd, const char *port) { int index; @@ -2116,7 +2120,7 @@ TRANS(LocalReopenCOTSServer)(Xtransport *thistrans, int fd, char *port) } static XtransConnInfo -TRANS(LocalReopenCLTSServer)(Xtransport *thistrans, int fd, char *port) +TRANS(LocalReopenCLTSServer)(Xtransport *thistrans, int fd, const char *port) { int index; @@ -2156,7 +2160,8 @@ TRANS(LocalSetOption)(XtransConnInfo ciptr, int option, int arg) #ifdef TRANS_SERVER static int -TRANS(LocalCreateListener)(XtransConnInfo ciptr, char *port, unsigned int flags _X_UNUSED) +TRANS(LocalCreateListener)(XtransConnInfo ciptr, const char *port, + unsigned int flags _X_UNUSED) { prmsg(2,"LocalCreateListener(%p->%d,%s)\n",ciptr,ciptr->fd,port); @@ -2221,7 +2226,8 @@ TRANS(LocalAccept)(XtransConnInfo ciptr, int *status) #ifdef TRANS_CLIENT static int -TRANS(LocalConnect)(XtransConnInfo ciptr, char *host _X_UNUSED, char *port) +TRANS(LocalConnect)(XtransConnInfo ciptr, + const char *host _X_UNUSED, const char *port) { prmsg(2,"LocalConnect(%p->%d,%s)\n", ciptr, ciptr->fd, port); diff --git a/X11/xtrans/Xtranssock.c b/X11/xtrans/Xtranssock.c index 9dda1295f..c71b4cae4 100644 --- a/X11/xtrans/Xtranssock.c +++ b/X11/xtrans/Xtranssock.c @@ -484,7 +484,7 @@ TRANS(SocketOpen) (int i, int type) #ifdef TRANS_REOPEN static XtransConnInfo -TRANS(SocketReopen) (int i _X_UNUSED, int type, int fd, char *port) +TRANS(SocketReopen) (int i _X_UNUSED, int type, int fd, const char *port) { XtransConnInfo ciptr; @@ -607,8 +607,8 @@ TRANS(SocketOpenCOTSClientBase) (const char *transname, const char *protocol, } static XtransConnInfo -TRANS(SocketOpenCOTSClient) (Xtransport *thistrans, char *protocol, - char *host, char *port) +TRANS(SocketOpenCOTSClient) (Xtransport *thistrans, const char *protocol, + const char *host, const char *port) { return TRANS(SocketOpenCOTSClientBase)( thistrans->TransName, protocol, host, port, -1); @@ -621,8 +621,8 @@ TRANS(SocketOpenCOTSClient) (Xtransport *thistrans, char *protocol, #ifdef TRANS_SERVER static XtransConnInfo -TRANS(SocketOpenCOTSServer) (Xtransport *thistrans, char *protocol, - char *host, char *port) +TRANS(SocketOpenCOTSServer) (Xtransport *thistrans, const char *protocol, + const char *host, const char *port) { XtransConnInfo ciptr; @@ -688,8 +688,8 @@ TRANS(SocketOpenCOTSServer) (Xtransport *thistrans, char *protocol, #ifdef TRANS_CLIENT static XtransConnInfo -TRANS(SocketOpenCLTSClient) (Xtransport *thistrans, char *protocol, - char *host, char *port) +TRANS(SocketOpenCLTSClient) (Xtransport *thistrans, const char *protocol, + const char *host, const char *port) { XtransConnInfo ciptr; @@ -727,8 +727,8 @@ TRANS(SocketOpenCLTSClient) (Xtransport *thistrans, char *protocol, #ifdef TRANS_SERVER static XtransConnInfo -TRANS(SocketOpenCLTSServer) (Xtransport *thistrans, char *protocol, - char *host, char *port) +TRANS(SocketOpenCLTSServer) (Xtransport *thistrans, const char *protocol, + const char *host, const char *port) { XtransConnInfo ciptr; @@ -773,7 +773,7 @@ TRANS(SocketOpenCLTSServer) (Xtransport *thistrans, char *protocol, #ifdef TRANS_REOPEN static XtransConnInfo -TRANS(SocketReopenCOTSServer) (Xtransport *thistrans, int fd, char *port) +TRANS(SocketReopenCOTSServer) (Xtransport *thistrans, int fd, const char *port) { XtransConnInfo ciptr; @@ -807,7 +807,7 @@ TRANS(SocketReopenCOTSServer) (Xtransport *thistrans, int fd, char *port) } static XtransConnInfo -TRANS(SocketReopenCLTSServer) (Xtransport *thistrans, int fd, char *port) +TRANS(SocketReopenCLTSServer) (Xtransport *thistrans, int fd, const char *port) { XtransConnInfo ciptr; @@ -962,7 +962,8 @@ TRANS(SocketCreateListener) (XtransConnInfo ciptr, #ifdef TCPCONN static int -TRANS(SocketINETCreateListener) (XtransConnInfo ciptr, char *port, unsigned int flags) +TRANS(SocketINETCreateListener) (XtransConnInfo ciptr, const char *port, + unsigned int flags) { #if defined(IPv6) && defined(AF_INET6) @@ -1090,7 +1091,7 @@ TRANS(SocketINETCreateListener) (XtransConnInfo ciptr, char *port, unsigned int #ifdef UNIXCONN static int -TRANS(SocketUNIXCreateListener) (XtransConnInfo ciptr, char *port, +TRANS(SocketUNIXCreateListener) (XtransConnInfo ciptr, const char *port, unsigned int flags) { @@ -1450,7 +1451,8 @@ static struct addrlist *addrlist = NULL; static int -TRANS(SocketINETConnect) (XtransConnInfo ciptr, char *host, char *port) +TRANS(SocketINETConnect) (XtransConnInfo ciptr, + const char *host, const char *port) { struct sockaddr * socketaddr = NULL; @@ -1832,7 +1834,7 @@ TRANS(SocketINETConnect) (XtransConnInfo ciptr, char *host, char *port) */ static int -UnixHostReallyLocal (char *host) +UnixHostReallyLocal (const char *host) { char hostnamebuf[256]; @@ -1963,7 +1965,8 @@ UnixHostReallyLocal (char *host) } static int -TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port) +TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, + const char *host, const char *port) { struct sockaddr_un sockname; diff --git a/X11/xtrans/doc/xtrans.xml b/X11/xtrans/doc/xtrans.xml index 59daa3fc0..e3bc1c9a0 100644 --- a/X11/xtrans/doc/xtrans.xml +++ b/X11/xtrans/doc/xtrans.xml @@ -187,35 +187,35 @@ points for a single transport. This record is defined as: <synopsis> typedef struct _Xtransport { - char *TransName; + const char *TransName; int flags; XtransConnInfo (*OpenCOTSClient)( - struct _Xtransport *, /* transport */ - char *, /* protocol */ - char *, /* host */ - char * /* port */ + struct _Xtransport *, /* transport */ + const char *, /* protocol */ + const char *, /* host */ + const char * /* port */ ); XtransConnInfo (*OpenCOTSServer)( - struct _Xtransport *, /* transport */ - char *, /* protocol */ - char *, /* host */ - char * /* port */ + struct _Xtransport *, /* transport */ + const char *, /* protocol */ + const char *, /* host */ + const char * /* port */ ); XtransConnInfo (*OpenCLTSClient)( - struct _Xtransport *, /* transport */ - char *, /* protocol */ - char *, /* host */ - char * /* port */ + struct _Xtransport *, /* transport */ + const char *, /* protocol */ + const char *, /* host */ + const char * /* port */ ); XtransConnInfo (*OpenCLTSServer)( - struct _Xtransport *, /* transport */ - char *, /* protocol */ - char *, /* host */ - char * /* port */ + struct _Xtransport *, /* transport */ + const char *, /* protocol */ + const char *, /* host */ + const char * /* port */ ); int (*SetOption)( @@ -226,8 +226,8 @@ typedef struct _Xtransport { int (*CreateListener)( XtransConnInfo, /* connection */ - char *, /* port */ - int /* flags */ + const char *, /* port */ + int /* flags */ ); int (*ResetListener)( @@ -240,8 +240,8 @@ typedef struct _Xtransport { int (*Connect)( XtransConnInfo, /* connection */ - char *, /* host */ - char * /* port */ + const char *, /* host */ + const char * /* port */ ); int (*BytesReadable)( @@ -393,7 +393,7 @@ errno will be available for debugging purposes. <funcsynopsis id='TRANSOpenCOTSClient'> <funcprototype> <funcdef>XtransConnInfo <function>TRANS(OpenCOTSClient)</function></funcdef> - <paramdef>char *<parameter>address</parameter></paramdef> + <paramdef>const char *<parameter>address</parameter></paramdef> </funcprototype> </funcsynopsis> <para> @@ -408,7 +408,7 @@ success, or <constant>NULL</constant> on failure. <funcsynopsis id='TRANSOpenCOTSServer'> <funcprototype> <funcdef>XtransConnInfo <function>TRANS(OpenCOTSServer)</function></funcdef> - <paramdef>char *<parameter>address</parameter></paramdef> + <paramdef>const char *<parameter>address</parameter></paramdef> </funcprototype> </funcsynopsis> <para> @@ -423,7 +423,7 @@ on failure. <funcsynopsis id='TRANSOpenCLTSClient'> <funcprototype> <funcdef>XtransConnInfo <function>TRANS(OpenCLTSClient)</function></funcdef> - <paramdef>char *<parameter>address</parameter></paramdef> + <paramdef>const char *<parameter>address</parameter></paramdef> </funcprototype> </funcsynopsis> <para> @@ -438,7 +438,7 @@ function returns an opaque transport connection object on success, or <funcsynopsis id='TRANSOpenCLTSServer'> <funcprototype> <funcdef>XtransConnInfo <function>TRANS(OpenCLTSServer)</function></funcdef> - <paramdef>char *<parameter>address</parameter></paramdef> + <paramdef>const char *<parameter>address</parameter></paramdef> </funcprototype> </funcsynopsis> <para> @@ -480,7 +480,7 @@ Based on current usage, the complimentary function <funcprototype> <funcdef>int <function>TRANS(CreateListener)</function></funcdef> <paramdef>XtransConnInfo <parameter>connection</parameter></paramdef> - <paramdef>char *<parameter>port</parameter></paramdef> + <paramdef>const char *<parameter>port</parameter></paramdef> <paramdef>int <parameter>flags</parameter></paramdef> </funcprototype> </funcsynopsis> @@ -542,7 +542,7 @@ new opaque transport connection object upon success, <funcprototype> <funcdef>int <function>TRANS(Connect)</function></funcdef> <paramdef>XtransConnInfo <parameter>connection</parameter></paramdef> - <paramdef>char *<parameter>address</parameter></paramdef> + <paramdef>const char *<parameter>address</parameter></paramdef> </funcprototype> </funcsynopsis> <para> @@ -712,7 +712,7 @@ Returns the file descriptor associated with this transport. <funcsynopsis id='TRANSMakeAllCOTSServerListeners'> <funcprototype> <funcdef>int <function>TRANS(MakeAllCOTSServerListeners)</function></funcdef> - <paramdef>char *<parameter>port</parameter></paramdef> + <paramdef>const char *<parameter>port</parameter></paramdef> <paramdef>int *<parameter>partial_ret</parameter></paramdef> <paramdef>int *<parameter>count_ret</parameter></paramdef> <paramdef>XtransConnInfo **<parameter>connections_ret</parameter></paramdef> @@ -731,7 +731,7 @@ is the list of transports. <funcsynopsis id='TRANSMakeAllCLTSServerListeners'> <funcprototype> <funcdef>int <function>TRANS(MakeAllCLTSServerListeners)</function></funcdef> - <paramdef>char *<parameter>port</parameter></paramdef> + <paramdef>const char *<parameter>port</parameter></paramdef> <paramdef>int *<parameter>partial_ret</parameter></paramdef> <paramdef>int *<parameter>count_ret</parameter></paramdef> <paramdef>XtransConnInfo **<parameter>connections_ret</parameter></paramdef> @@ -826,9 +826,9 @@ the <code>#ifdef SUNSYSV</code> should be handled inside these functions. <funcprototype> <funcdef>XtransConnInfo *<function>OpenCOTSClient</function></funcdef> <paramdef>struct _Xtransport *<parameter>thistrans</parameter></paramdef> - <paramdef>char *<parameter>protocol</parameter></paramdef> - <paramdef>char *<parameter>host</parameter></paramdef> - <paramdef>char *<parameter>port</parameter></paramdef> + <paramdef>const char *<parameter>protocol</parameter></paramdef> + <paramdef>const char *<parameter>host</parameter></paramdef> + <paramdef>const char *<parameter>port</parameter></paramdef> </funcprototype> </funcsynopsis> <para> @@ -850,9 +850,9 @@ this function. <funcprototype> <funcdef>XtransConnInfo *<function>OpenCOTSServer</function></funcdef> <paramdef>struct _Xtransport *<parameter>thistrans</parameter></paramdef> - <paramdef>char *<parameter>protocol</parameter></paramdef> - <paramdef>char *<parameter>host</parameter></paramdef> - <paramdef>char *<parameter>port</parameter></paramdef> + <paramdef>const char *<parameter>protocol</parameter></paramdef> + <paramdef>const char *<parameter>host</parameter></paramdef> + <paramdef>const char *<parameter>port</parameter></paramdef> </funcprototype> </funcsynopsis> <para> @@ -872,9 +872,9 @@ will open the transport. <funcprototype> <funcdef>XtransConnInfo *<function>OpenCLTSClient</function></funcdef> <paramdef>struct _Xtransport *<parameter>thistrans</parameter></paramdef> - <paramdef>char *<parameter>protocol</parameter></paramdef> - <paramdef>char *<parameter>host</parameter></paramdef> - <paramdef>char *<parameter>port</parameter></paramdef> + <paramdef>const char *<parameter>protocol</parameter></paramdef> + <paramdef>const char *<parameter>host</parameter></paramdef> + <paramdef>const char *<parameter>port</parameter></paramdef> </funcprototype> </funcsynopsis> <para> @@ -896,9 +896,9 @@ in by this function. <funcprototype> <funcdef>XtransConnInfo *<function>OpenCLTSServer</function></funcdef> <paramdef>struct _Xtransport *<parameter>thistrans</parameter></paramdef> - <paramdef>char *<parameter>protocol</parameter></paramdef> - <paramdef>char *<parameter>host</parameter></paramdef> - <paramdef>char *<parameter>port</parameter></paramdef> + <paramdef>const char *<parameter>protocol</parameter></paramdef> + <paramdef>const char *<parameter>host</parameter></paramdef> + <paramdef>const char *<parameter>port</parameter></paramdef> </funcprototype> </funcsynopsis> <para> @@ -935,7 +935,7 @@ different transport type is added, or a transport dependent option is defined. <funcprototype> <funcdef>int <function>CreateListener</function></funcdef> <paramdef>struct _Xtransport *<parameter>thistrans</parameter></paramdef> - <paramdef>char <parameter>*port</parameter></paramdef> + <paramdef>const char <parameter>*port</parameter></paramdef> <paramdef>int <parameter>flags</parameter></paramdef> </funcprototype> </funcsynopsis> @@ -987,8 +987,8 @@ structure describing the new endpoint is returned from this function <funcprototype> <funcdef>int <function>Connect</function></funcdef> <paramdef>struct _Xtransport *<parameter>thistrans</parameter></paramdef> - <paramdef>char *<parameter>host</parameter></paramdef> - <paramdef>char *<parameter>port</parameter></paramdef> + <paramdef>const char *<parameter>host</parameter></paramdef> + <paramdef>const char *<parameter>port</parameter></paramdef> </funcprototype> </funcsynopsis> <para> diff --git a/libX11/nls/en_US.UTF-8/Compose.pre b/libX11/nls/en_US.UTF-8/Compose.pre index 23829b4cc..4a965708d 100644 --- a/libX11/nls/en_US.UTF-8/Compose.pre +++ b/libX11/nls/en_US.UTF-8/Compose.pre @@ -4535,6 +4535,7 @@ XCOMM Part 3 <Multi_key> <KP_Divide> <U2194> : "↮" U21AE # LEFT RIGHT ARROW WITH STROKE <Multi_key> <less> <minus> : "←" U2190 # LEFTWARDS ARROW <Multi_key> <minus> <greater> : "→" U2192 # RIGHTWARDS ARROW +<Multi_key> <equal> <greater> : "⇒" U21D2 # RIGHTWARDS DOUBLE ARROW <Multi_key> <U2203> <U0338> : "∄" U2204 # THERE DOES NOT EXIST <Multi_key> <braceleft> <braceright> : "∅" U2205 # EMPTY SET <Multi_key> <U2208> <U0338> : "∉" U2209 # NOT AN ELEMENT OF diff --git a/libxcb/src/c_client.py b/libxcb/src/c_client.py index 2f9e36079..27cae36a0 100755 --- a/libxcb/src/c_client.py +++ b/libxcb/src/c_client.py @@ -359,7 +359,7 @@ def _c_type_setup(self, name, postfix): field.c_pointer = '*' field.c_field_const_type = 'const ' + field.c_field_type self.c_need_aux = True - elif not field.type.fixed_size() and not field.type.is_bitcase: + elif not field.type.fixed_size() and not field.type.is_case_or_bitcase: self.c_need_sizeof = True field.c_iterator_type = _t(field.field_type + ('iterator',)) # xcb_fieldtype_iterator_t @@ -408,7 +408,7 @@ def _c_type_setup(self, name, postfix): # no list with switch as element, so no call to # _c_iterator(field.type, field_name) necessary - if not self.is_bitcase: + if not self.is_case_or_bitcase: if self.c_need_serialize: if self.c_serialize_name not in finished_serializers: finished_serializers.append(self.c_serialize_name) @@ -438,7 +438,7 @@ def _c_helper_absolute_name(prefix, field=None): prefix_str += name if '' == sep: sep = '->' - if ((obj.is_bitcase and obj.has_name) or # named bitcase + if ((obj.is_case_or_bitcase and obj.has_name) or # named bitcase (obj.is_switch and len(obj.parents)>1)): sep = '.' prefix_str += sep @@ -471,7 +471,7 @@ def _c_helper_field_mapping(complex_type, prefix, flat=False): all_fields[f.field_name] = (fname, f) if f.type.is_container and flat==False: - if f.type.is_bitcase and not f.type.has_name: + if f.type.is_case_or_bitcase and not f.type.has_name: new_prefix = prefix elif f.type.is_switch and len(f.type.parents)>1: # nested switch gets another separator @@ -494,10 +494,10 @@ def _c_helper_resolve_field_names (prefix): name, sep, obj = p if ''==sep: # sep can be preset in prefix, if not, make a sensible guess - sep = '.' if (obj.is_switch or obj.is_bitcase) else '->' + sep = '.' if (obj.is_switch or obj.is_case_or_bitcase) else '->' # exception: 'toplevel' object (switch as well!) always have sep '->' sep = '->' if idx<1 else sep - if not obj.is_bitcase or (obj.is_bitcase and obj.has_name): + if not obj.is_case_or_bitcase or (obj.is_case_or_bitcase and obj.has_name): tmp_prefix.append((name, sep, obj)) all_fields.update(_c_helper_field_mapping(obj, tmp_prefix, flat=True)) @@ -690,18 +690,29 @@ def _c_serialize_helper_switch(context, self, complex_name, for b in self.bitcases: len_expr = len(b.type.expr) + + compare_operator = '&' + if b.type.is_case: + compare_operator = '==' + else: + compare_operator = '&' + for n, expr in enumerate(b.type.expr): bitcase_expr = _c_accessor_get_expr(expr, None) # only one <enumref> in the <bitcase> if len_expr == 1: - code_lines.append(' if(%s & %s) {' % (switch_expr, bitcase_expr)) + code_lines.append( + ' if(%s %s %s) {' % (switch_expr, compare_operator, bitcase_expr)) # multiple <enumref> in the <bitcase> elif n == 0: # first - code_lines.append(' if((%s & %s) ||' % (switch_expr, bitcase_expr)) + code_lines.append( + ' if((%s %s %s) ||' % (switch_expr, compare_operator, bitcase_expr)) elif len_expr == (n + 1): # last - code_lines.append(' (%s & %s)) {' % (switch_expr, bitcase_expr)) + code_lines.append( + ' (%s %s %s)) {' % (switch_expr, compare_operator, bitcase_expr)) else: # between first and last - code_lines.append(' (%s & %s) ||' % (switch_expr, bitcase_expr)) + code_lines.append( + ' (%s %s %s) ||' % (switch_expr, compare_operator, bitcase_expr)) b_prefix = prefix if b.type.has_name: @@ -711,7 +722,7 @@ def _c_serialize_helper_switch(context, self, complex_name, code_lines, temp_vars, "%s " % space, b_prefix, - is_bitcase = True) + is_case_or_bitcase = True) code_lines.append(' }') # if 'serialize' == context: @@ -835,7 +846,7 @@ def _c_serialize_helper_fields_fixed_size(context, self, field, code_lines, temp_vars, space, prefix): # keep the C code a bit more readable by giving the field name - if not self.is_bitcase: + if not self.is_case_or_bitcase: code_lines.append('%s /* %s.%s */' % (space, self.c_type, field.c_field_name)) else: scoped_name = [p[2].c_type if idx==0 else p[0] for idx, p in enumerate(prefix)] @@ -952,7 +963,7 @@ def _c_serialize_helper_fields_variable_size(context, self, field, def _c_serialize_helper_fields(context, self, code_lines, temp_vars, - space, prefix, is_bitcase): + space, prefix, is_case_or_bitcase): count = 0 need_padding = False prev_field_was_variable = False @@ -964,7 +975,7 @@ def _c_serialize_helper_fields(context, self, # switch/bitcase: fixed size fields must be considered explicitly if field.type.fixed_size(): - if self.is_bitcase or self.c_var_followed_by_fixed_fields: + if self.is_case_or_bitcase or self.c_var_followed_by_fixed_fields: if prev_field_was_variable and need_padding: # insert padding # count += _c_serialize_helper_insert_padding(context, code_lines, space, @@ -990,7 +1001,7 @@ def _c_serialize_helper_fields(context, self, continue else: # switch/bitcase: always calculate padding before and after variable sized fields - if need_padding or is_bitcase: + if need_padding or is_case_or_bitcase: count += _c_serialize_helper_insert_padding(context, code_lines, space, self.c_var_followed_by_fixed_fields) @@ -1004,7 +1015,7 @@ def _c_serialize_helper_fields(context, self, code_lines.append('%s%s' % (space, value)) if field.type.fixed_size(): - if is_bitcase or self.c_var_followed_by_fixed_fields: + if is_case_or_bitcase or self.c_var_followed_by_fixed_fields: # keep track of (un)serialized object's size code_lines.append('%s xcb_block_len += %s;' % (space, length)) if context in ('unserialize', 'unpack', 'sizeof'): @@ -1462,7 +1473,7 @@ def _c_accessors_field(self, field): # special case: switch switch_obj = self if self.is_switch else None - if self.is_bitcase: + if self.is_case_or_bitcase: switch_obj = self.parents[-1] if switch_obj is not None: c_type = switch_obj.c_type @@ -1530,7 +1541,7 @@ def _c_accessors_list(self, field): # the reason is that switch is either a child of a request/reply or nested in another switch, # so whenever we need to access a length field, we might need to refer to some anchestor type switch_obj = self if self.is_switch else None - if self.is_bitcase: + if self.is_case_or_bitcase: switch_obj = self.parents[-1] if switch_obj is not None: c_type = switch_obj.c_type @@ -1562,7 +1573,7 @@ def _c_accessors_list(self, field): for p in parents[2:] + [self]: # the separator between parent and child is always '.' here, # because of nested switch statements - if not p.is_bitcase or (p.is_bitcase and p.has_name): + if not p.is_case_or_bitcase or (p.is_case_or_bitcase and p.has_name): prefix.append((p.name[-1], '.', p)) fields.update(_c_helper_field_mapping(p, prefix, flat=True)) @@ -2365,7 +2376,7 @@ def _man_request(self, name, cookie_type, void, aux): # special case: switch switch_obj = self if self.is_switch else None - if self.is_bitcase: + if self.is_case_or_bitcase: switch_obj = self.parents[-1] if switch_obj is not None: c_type = switch_obj.c_type @@ -2393,7 +2404,7 @@ def _man_request(self, name, cookie_type, void, aux): # the reason is that switch is either a child of a request/reply or nested in another switch, # so whenever we need to access a length field, we might need to refer to some anchestor type switch_obj = self if self.is_switch else None - if self.is_bitcase: + if self.is_case_or_bitcase: switch_obj = self.parents[-1] if switch_obj is not None: c_type = switch_obj.c_type @@ -2425,7 +2436,7 @@ def _man_request(self, name, cookie_type, void, aux): for p in parents[2:] + [self]: # the separator between parent and child is always '.' here, # because of nested switch statements - if not p.is_bitcase or (p.is_bitcase and p.has_name): + if not p.is_case_or_bitcase or (p.is_case_or_bitcase and p.has_name): prefix.append((p.name[-1], '.', p)) fields.update(_c_helper_field_mapping(p, prefix, flat=True)) diff --git a/libxcb/src/xcb_conn.c b/libxcb/src/xcb_conn.c index e9ab62a0d..0ead77671 100644 --- a/libxcb/src/xcb_conn.c +++ b/libxcb/src/xcb_conn.c @@ -70,6 +70,26 @@ typedef struct { uint16_t length; } xcb_setup_generic_t; +static const xcb_setup_t xcb_error_setup = { + 0, /* status: failed (but we wouldn't have a xcb_setup_t in this case) */ + 0, /* pad0 */ + 0, 0, /* protocol version, should be 11.0, but isn't */ + 0, /* length, invalid value */ + 0, /* release_number */ + 0, 0, /* resource_id_{base,mask} */ + 0, /* motion_buffer_size */ + 0, /* vendor_len */ + 0, /* maximum_request_length */ + 0, /* roots_len */ + 0, /* pixmap_formats_len */ + 0, /* image_byte_order */ + 0, /* bitmap_format_bit_order */ + 0, /* bitmap_format_scanline_unit */ + 0, /* bitmap_format_scanline_pad */ + 0, 0, /* {min,max}_keycode */ + { 0, 0, 0, 0 } /* pad1 */ +}; + /* Keep this list in sync with is_static_error_conn()! */ static const int xcb_con_error = XCB_CONN_ERROR; static const int xcb_con_closed_mem_er = XCB_CONN_CLOSED_MEM_INSUFFICIENT; @@ -309,15 +329,15 @@ static int write_vec(xcb_connection_t *c, struct iovec **vector, int *count) const xcb_setup_t *xcb_get_setup(xcb_connection_t *c) { - if(c->has_error) - return 0; + if(is_static_error_conn(c)) + return &xcb_error_setup; /* doesn't need locking because it's never written to. */ return c->setup; } int xcb_get_file_descriptor(xcb_connection_t *c) { - if(c->has_error) + if(is_static_error_conn(c)) return -1; /* doesn't need locking because it's never written to. */ return c->fd; diff --git a/libxcb/xcb-proto/doc/xml-xcb.txt b/libxcb/xcb-proto/doc/xml-xcb.txt index 97ce5bf8e..235958de3 100644 --- a/libxcb/xcb-proto/doc/xml-xcb.txt +++ b/libxcb/xcb-proto/doc/xml-xcb.txt @@ -184,11 +184,12 @@ separated by a single colon. For example, to refer to the PIXMAP type defined in glx rather than the one defined in xproto, use type="glx:PIXMAP" rather than type="PIXMAP". -Note: Most of the below may optionally contain an enum, altenum, or mask +Note: Most of the below may optionally contain an enum, altenum, mask or altmask attribute, which follows the above rules for "type". "enum" is an exhaustive enum; the value is restricted to one of the constants named in the enum. "altenum" may be one of the values contained in the enum, but it need not be. -"mask" refers to an enum to be used as a bitmask. +"mask" refers to an exhaustive enum to be used as a bitmask. +"altmask" may be a mask from the referred enum, but it need not be. <pad bytes="integer" /> @@ -243,18 +244,40 @@ enum; the value is restricted to one of the constants named in the enum. <switch> instead for new protocol definitions. <switch name="identifier"> switch expression - <bitcase> bitcase expression(s), fields </bitcase> </switch> + <bitcase> bitcase expression(s), fields </bitcase> + <case> case expression(s), fields </case> +</switch> This element represents conditional inclusion of fields. It can be viewed - as sequence of multiple ifs: if ( switch expression & bitcase expression ) - is non-zero, bitcase fields are included in structure. It can be used only - as the last field of a structure. + as sequence of multiple ifs: - When a bitcase includes multiple <enumref> clauses, the contents of the - bitcase are only present once regardless of the number of bitcase expressions - that match. + <bitcase>: + if ( switch expression & bitcase expression ) is non-zero, + bitcase fields are included in structure. + + <case>: + if ( switch expression == case expression ) is true, + then case fields are included in structure. + + It can be used only as the last field of a structure. + + When a bitcase or case includes multiple <enumref> clauses, the contents + of the bitcase or case are only present once regardless of the number of + bitcase or case expressions that match. + + <enumref> inside <bitcase> can only refer to an enum's <bit> members. + <enumref> inside <case> can only refer to an enum's <value> members. + + A switch may contain multiple <bitcase> or <case> elements. + Usually it will only contain <bitcase> elements + or only contain <case> elements. + That is, mixing of <case> and <bitcase> usually doesn't make any sense. + + The same value may appear in multiple <case> or <bitcase> elements. + + New protocol definitions should prefer to use this instead of <valueparam> + and instead of <union>. - New protocol definitions should prefer to use this instead of <valueparam>. Expressions ----------- diff --git a/libxcb/xcb-proto/src/xcb.xsd b/libxcb/xcb-proto/src/xcb.xsd index 59bb9a883..85f5bc2af 100644 --- a/libxcb/xcb-proto/src/xcb.xsd +++ b/libxcb/xcb-proto/src/xcb.xsd @@ -54,6 +54,7 @@ authorization from the authors. <xsd:attribute name="enum" type="xsd:string" use="optional" /> <xsd:attribute name="altenum" type="xsd:string" use="optional" /> <xsd:attribute name="mask" type="xsd:string" use="optional" /> + <xsd:attribute name="altmask" type="xsd:string" use="optional" /> </xsd:complexType> <!-- case expression --> @@ -77,7 +78,9 @@ authorization from the authors. <xsd:group ref="expression" minOccurs="1" maxOccurs="1" /> <xsd:choice> <!-- bitcase expression - bit test --> - <xsd:element name="bitcase" type="caseexpr" minOccurs="1" maxOccurs="unbounded" /> + <xsd:element name="bitcase" type="caseexpr" minOccurs="0" maxOccurs="unbounded" /> + <!-- case expression - value test --> + <xsd:element name="case" type="caseexpr" minOccurs="0" maxOccurs="unbounded" /> </xsd:choice> <!-- default: --> <xsd:group ref="fields" minOccurs="0" maxOccurs="1" /> diff --git a/libxcb/xcb-proto/src/xinput.xml b/libxcb/xcb-proto/src/xinput.xml index cdb414db4..dc87e7829 100644 --- a/libxcb/xcb-proto/src/xinput.xml +++ b/libxcb/xcb-proto/src/xinput.xml @@ -32,6 +32,73 @@ authorization from the authors. http://cgit.freedesktop.org/xorg/proto/inputproto/tree/specs/XI2proto.txt --> +<!-- TODO: Things which need to be done for full XInput support + but cannot be done now ( August 18, 2014 ) with the current feature-set + of the xml and the generator: + +***** + +replace "uninterpreted_data" or similar constructs +with a semantic that shows how to interpret this data. +This requires enhancements to the xml-schema and generator such as union with selector. + +This will, e.g., be necessary for automatically generated byte-order conversion code, +which will, e.g., be necessary for server-side xcb. + +This affects the following: +* GetFeedbackControl reply field "feedbacks" ( structs FeedbackState, ... ) +* ChangeFeedbackControl request field "feedback" ( structs FeedbackCtl, ... ) +* QueryDeviceState reply field "classes" ( structs InputState, ... ) +* GetDeviceControl reply field "control" ( structs DeviceState, ... ) +* ChangeDeviceControl request field "control" ( structs ChangeDeviceControl, ... ) +* XIChangeHierarchy request field "changes" ( structs HierarchyChange, ... ) +* struct XIDeviceInfo field "classes" ( structs DeviceClass, ... ) +* SendExtensionEvent member "events" + +***** + +xml and generator have to support <popcount> of all members of a list + +This is needed for the following XI2-events ( and eventcopies thereof ) + KeyPress + ButtonPress + RawKeyPress + RawKeyPress + RawButtonPress + TouchBegin + RawTouchBegin + + +***** + +<sumof> should support fields of listmembers. + +This is needed for request "ListInputDevices" + +***** + +xml and generator should support +switch-case similar to switch-bitcase. + +(and maybe: variable sized unions with a mechanism to define +which union-field is selected.) + +One of these features is needed for the InputInfo type +which is used by request "ListInputDevices" for the list "input_infos". + +***** + +Parametrized structs + +This is needed for being able to use the value of the field +"num_axes" of the GetDeviceMotionEvents-reply +in struct DeviceTimeCoord. + +***** + +--> + + <xcb header="xinput" extension-xname="XInputExtension" extension-name="Input" major-version="2" minor-version="3"> <import>xfixes</import> @@ -63,7 +130,7 @@ authorization from the authors. <fieldref>name_len</fieldref> </list> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD16" name="server_major" /> <field type="CARD16" name="server_minor" /> <field type="BOOL" name="present" /> @@ -89,6 +156,17 @@ authorization from the authors. <item name="Proximity"> <value>4</value> </item> <item name="Focus"> <value>5</value> </item> <item name="Other"> <value>6</value> </item> + <!-- + value Attach=7 is still contained in XI.h as "#define AttachClass" + but it was never transmitted over the protocol. + (It was used to tag a fake class created by libXi). + + Even the creation of that fake class has been dropped + from libXi in 2009 by the following change: + http://cgit.freedesktop.org/xorg/lib/libXi/commit/?id=62858c426e6de1b99df660251737233afd335302 + + <item name="Attach"> <value>7</value> </item> + --> </enum> <enum name="ValuatorMode"> @@ -150,7 +228,7 @@ authorization from the authors. <request name="ListInputDevices" opcode="2"> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD8" name="devices_len" /> <pad bytes="23" /> <list type="DeviceInfo" name="devices"> @@ -173,12 +251,13 @@ authorization from the authors. <field type="CARD8" name="device_id" /> <pad bytes="3" /> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD8" name="num_classes" /> <pad bytes="23" /> <list type="InputClassInfo" name="class_info"> <fieldref>num_classes</fieldref> </list> + <pad align="4" /> </reply> </request> @@ -196,8 +275,9 @@ authorization from the authors. <field type="CARD8" name="mode" enum="ValuatorMode" /> <pad bytes="2" /> <reply> - <pad bytes="1" /> - <field type="CARD8" name="status" altenum="GrabStatus" /> + <field type="CARD8" name="xi_reply_type" /> + <!-- values for status: 0: Success, 1: AlreadyGrabbed --> + <field type="CARD8" name="status" enum="GrabStatus" /> <pad bytes="23" /> </reply> </request> @@ -218,7 +298,7 @@ authorization from the authors. <request name="GetSelectedExtensionEvents" opcode="7"> <field type="WINDOW" name="window" /> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD16" name="num_this_classes" /> <field type="CARD16" name="num_all_classes" /> <pad bytes="20" /> @@ -253,7 +333,7 @@ authorization from the authors. <request name="GetDeviceDontPropagateList" opcode="9"> <field type="WINDOW" name="window" /> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD16" name="num_classes" /> <pad bytes="22" /> <list type="EventClass" name="classes"> @@ -266,7 +346,7 @@ authorization from the authors. <struct name="DeviceTimeCoord"> <field type="TIMESTAMP" name="time" /> - <!-- Uninterpreted: list (axisvalues) of CARD32, + <!-- Uninterpreted: list (axisvalues) of INT32, length is num_axes from GetDeviceMotionEvents --> </struct> @@ -274,8 +354,9 @@ authorization from the authors. <field type="TIMESTAMP" name="start" /> <field type="TIMESTAMP" name="stop" altenum="Time" /> <field type="CARD8" name="device_id" /> + <pad bytes="3"/> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD32" name="num_events" /> <field type="CARD8" name="num_axes" /> <field type="CARD8" name="device_mode" enum="ValuatorMode" /> @@ -290,8 +371,11 @@ authorization from the authors. <field type="CARD8" name="device_id" /> <pad bytes="3" /> <reply> - <pad bytes="1" /> - <field type="CARD8" name="status" altenum="GrabStatus" /> + <field type="CARD8" name="xi_reply_type" /> + <!-- only the following GrabStatus-values are valid here: + "Success", "AlreadyGrabbed", and "Frozen" + --> + <field type="CARD8" name="status" enum="GrabStatus" /> <pad bytes="23" /> </reply> </request> @@ -304,8 +388,11 @@ authorization from the authors. <field type="CARD8" name="device_id" /> <pad bytes="1" /> <reply> - <pad bytes="1" /> - <field type="CARD8" name="status" altenum="GrabStatus" /> + <field type="CARD8" name="xi_reply_type" /> + <!-- only the following GrabStatus-values are valid here: + "Success", "AlreadyGrabbed", and "Frozen" + --> + <field type="CARD8" name="status" enum="GrabStatus" /> <pad bytes="23" /> </reply> </request> @@ -325,7 +412,7 @@ authorization from the authors. <fieldref>num_classes</fieldref> </list> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD8" name="status" enum="GrabStatus" /> <pad bytes="23" /> </reply> @@ -336,15 +423,20 @@ authorization from the authors. <request name="UngrabDevice" opcode="14"> <field type="TIMESTAMP" name="time" altenum="Time" /> <field type="CARD8" name="device_id" /> + <pad bytes="3" /> </request> <!-- GrabDeviceKey --> + <enum name="ModifierDevice"> + <item name="UseXKeyboard"><value>255</value></item> <!-- 0xff --> + </enum> + <request name="GrabDeviceKey" opcode="15"> <field type="WINDOW" name="grab_window" /> <field type="CARD16" name="num_classes" /> <field type="CARD16" name="modifiers" mask="ModMask" /> - <field type="CARD8" name="modifier_device" /> + <field type="CARD8" name="modifier_device" altenum="ModifierDevice" /> <field type="CARD8" name="grabbed_device" /> <field type="CARD8" name="key" altenum="Grab" /> <field type="CARD8" name="this_device_mode" enum="GrabMode" /> @@ -361,7 +453,7 @@ authorization from the authors. <request name="UngrabDeviceKey" opcode="16"> <field type="WINDOW" name="grabWindow" /> <field type="CARD16" name="modifiers" mask="ModMask" /> - <field type="CARD8" name="modifier_device" /> + <field type="CARD8" name="modifier_device" altenum="ModifierDevice" /> <field type="CARD8" name="key" altenum="Grab" /> <field type="CARD8" name="grabbed_device" /> </request> @@ -371,13 +463,13 @@ authorization from the authors. <request name="GrabDeviceButton" opcode="17"> <field type="WINDOW" name="grab_window" /> <field type="CARD8" name="grabbed_device" /> - <field type="CARD8" name="modifier_device" /> + <field type="CARD8" name="modifier_device" altenum="ModifierDevice" /> <field type="CARD16" name="num_classes" /> <field type="CARD16" name="modifiers" mask="ModMask" /> <field type="CARD8" name="this_device_mode" enum="GrabMode" /> <field type="CARD8" name="other_device_mode" enum="GrabMode" /> <field type="CARD8" name="button" altenum="Grab" /> - <field type="CARD8" name="owner_events" /> + <field type="BOOL" name="owner_events" /> <pad bytes="2" /> <list type="EventClass" name="classes"> <fieldref>num_classes</fieldref> @@ -389,9 +481,10 @@ authorization from the authors. <request name="UngrabDeviceButton" opcode="18"> <field type="WINDOW" name="grab_window" /> <field type="CARD16" name="modifiers" mask="ModMask" /> - <field type="CARD8" name="modifier_device" /> + <field type="CARD8" name="modifier_device" altenum="ModifierDevice" /> <field type="CARD8" name="button" altenum="Grab" /> <field type="CARD8" name="grabbed_device" /> + <pad bytes="3" /> </request> <!-- AllowDeviceEvents --> @@ -409,6 +502,7 @@ authorization from the authors. <field type="TIMESTAMP" name="time" altenum="Time" /> <field type="CARD8" name="mode" enum="DeviceInputMode" /> <field type="CARD8" name="device_id" /> + <pad bytes="2" /> </request> <!-- GetDeviceFocus --> @@ -417,7 +511,7 @@ authorization from the authors. <field type="CARD8" name="device_id" /> <pad bytes="3" /> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="WINDOW" name="focus" altenum="InputFocus" /> <field type="TIMESTAMP" name="time" /> <field type="CARD8" name="revert_to" enum="InputFocus" /> @@ -432,6 +526,7 @@ authorization from the authors. <field type="TIMESTAMP" name="time" altenum="Time" /> <field type="CARD8" name="revert_to" enum="InputFocus" /> <field type="CARD8" name="device_id" /> + <pad bytes="2" /> </request> <!-- GetFeedbackControl --> @@ -526,7 +621,7 @@ authorization from the authors. <field type="CARD8" name="device_id" /> <pad bytes="3" /> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD16" name="num_feedbacks" /> <pad bytes="22" /> <list type="FeedbackState" name="feedbacks"> @@ -609,8 +704,24 @@ authorization from the authors. </list> </struct> + <enum name="ChangeFeedbackControlMask"> + <item name="KeyClickPercent"> <bit>0</bit> </item> <!-- 0x01 --> + <item name="Percent"> <bit>1</bit> </item> <!-- 0x02 --> + <item name="Pitch"> <bit>2</bit> </item> <!-- 0x04 --> + <item name="Duration"> <bit>3</bit> </item> <!-- 0x08 --> + <item name="Led"> <bit>4</bit> </item> <!-- 0x10 --> + <item name="LedMode"> <bit>5</bit> </item> <!-- 0x20 --> + <item name="Key"> <bit>6</bit> </item> <!-- 0x40 --> + <item name="AutoRepeatMode"> <bit>7</bit> </item> <!-- 0x80 --> + <item name="String"> <bit>0</bit> </item> <!-- 0x01 --> + <item name="Integer"> <bit>0</bit> </item> <!-- 0x01 --> + <item name="AccelNum"> <bit>0</bit> </item> <!-- 0x01 --> + <item name="AccelDenom"> <bit>1</bit> </item> <!-- 0x02 --> + <item name="Threshold"> <bit>2</bit> </item> <!-- 0x04 --> + </enum> + <request name="ChangeFeedbackControl" opcode="23"> - <field type="CARD32" name="mask" /> + <field type="CARD32" name="mask" mask="ChangeFeedbackControlMask" /> <field type="CARD8" name="device_id" /> <field type="CARD8" name="feedback_id" /> <pad bytes="2" /> @@ -623,8 +734,9 @@ authorization from the authors. <field type="CARD8" name="device_id" /> <field type="KeyCode" name="first_keycode" /> <field type="CARD8" name="count" /> + <pad bytes="1" /> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD8" name="keysyms_per_keycode" /> <pad bytes="23" /> <list type="KEYSYM" name="keysyms"> @@ -655,7 +767,7 @@ authorization from the authors. <field type="CARD8" name="device_id" /> <pad bytes="3" /> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD8" name="keycodes_per_modifier" /> <pad bytes="23" /> <list type="CARD8" name="keymaps"> @@ -680,7 +792,7 @@ authorization from the authors. </op> </list> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD8" name="status" enum="MappingStatus" /> <pad bytes="23" /> </reply> @@ -692,12 +804,13 @@ authorization from the authors. <field type="CARD8" name="device_id" /> <pad bytes="3" /> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD8" name="map_size" /> <pad bytes="23" /> <list type="CARD8" name="map"> <fieldref>map_size</fieldref> </list> + <pad align="4" /> </reply> </request> @@ -711,7 +824,7 @@ authorization from the authors. <fieldref>map_size</fieldref> </list> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD8" name="status" enum="MappingStatus" /> <pad bytes="23" /> </reply> @@ -739,11 +852,16 @@ authorization from the authors. </list> </struct> + <enum name="ValuatorStateModeMask"> + <item name="DeviceModeAbsolute"> <bit>0</bit> </item> + <item name="OutOfProximity"> <bit>1</bit> </item> + </enum> + <struct name="ValuatorState"> <field type="CARD8" name="class_id" enum="InputClass" /> <field type="CARD8" name="len" /> <field type="CARD8" name="num_valuators" /> - <field type="CARD8" name="mode" /> + <field type="CARD8" name="mode" mask="ValuatorStateModeMask" /> <list type="CARD32" name="valuators"> <fieldref>num_valuators</fieldref> </list> @@ -766,7 +884,7 @@ authorization from the authors. <field type="CARD8" name="device_id" /> <pad bytes="3" /> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD8" name="num_classes" /> <pad bytes="23" /> <list type="InputState" name="classes"> @@ -815,7 +933,7 @@ authorization from the authors. <fieldref>num_valuators</fieldref> </list> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD8" name="status" enum="GrabStatus" /> <pad bytes="23" /> </reply> @@ -901,7 +1019,7 @@ authorization from the authors. <field type="CARD8" name="device_id" /> <pad bytes="1" /> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD8" name="status" altenum="GrabStatus" /> <pad bytes="23" /> <field type="DeviceState" name="control" /> @@ -976,7 +1094,7 @@ authorization from the authors. <pad bytes="1" /> <field type="DeviceCtl" name="control" /> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD8" name="status" altenum="GrabStatus" /> <pad bytes="23" /> </reply> @@ -990,7 +1108,7 @@ authorization from the authors. <field type="CARD8" name="device_id" /> <pad bytes="3" /> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="CARD16" name="num_atoms" /> <pad bytes="22" /> <list type="ATOM" name="atoms"> @@ -1017,28 +1135,26 @@ authorization from the authors. <field type="CARD32" name="num_items" /> <switch name="items"> <fieldref>format</fieldref> - <!-- <bitcase> is not correct, this would need <cases>s. - It works in that case, because PropertyFormat items can be - distinguished exactly as their values don't have equal bits. - --> - <bitcase> + <case> <enumref ref="PropertyFormat">8Bits</enumref> <list type="CARD8" name="data8"> <fieldref>num_items</fieldref> </list> - </bitcase> - <bitcase> + <pad align="4" /> + </case> + <case> <enumref ref="PropertyFormat">16Bits</enumref> <list type="CARD16" name="data16"> <fieldref>num_items</fieldref> </list> - </bitcase> - <bitcase> + <pad align="4" /> + </case> + <case> <enumref ref="PropertyFormat">32Bits</enumref> <list type="CARD32" name="data32"> <fieldref>num_items</fieldref> </list> - </bitcase> + </case> </switch> </request> @@ -1061,7 +1177,7 @@ authorization from the authors. <field type="BOOL" name="delete" /> <pad bytes="2" /> <reply> - <pad bytes="1" /> + <field type="CARD8" name="xi_reply_type" /> <field type="ATOM" name="type" /> <field type="CARD32" name="bytes_after" /> <field type="CARD32" name="num_items" /> @@ -1079,12 +1195,14 @@ authorization from the authors. <list type="CARD8" name="data8"> <fieldref>num_items</fieldref> </list> + <pad align="4" /> </bitcase> <bitcase> <enumref ref="PropertyFormat">16Bits</enumref> <list type="CARD16" name="data16"> <fieldref>num_items</fieldref> </list> + <pad align="4" /> </bitcase> <bitcase> <enumref ref="PropertyFormat">32Bits</enumref> @@ -1131,7 +1249,7 @@ authorization from the authors. <field type="FP1616" name="root_y" /> <field type="FP1616" name="win_x" /> <field type="FP1616" name="win_y" /> - <field type="CARD8" name="same_screen" /> + <field type="BOOL" name="same_screen" /> <pad bytes="1" /> <field type="CARD16" name="buttons_len" /> <field type="ModifierInfo" name="mods" /> @@ -1184,11 +1302,12 @@ authorization from the authors. <field type="CARD16" name="type" enum="HierarchyChangeType" /> <field type="CARD16" name="len" /> <field type="CARD16" name="name_len" /> - <field type="CARD8" name="send_core" /> - <field type="CARD8" name="enable" /> + <field type="BOOL" name="send_core" /> + <field type="BOOL" name="enable" /> <list type="char" name="name"> <fieldref>name_len</fieldref> </list> + <pad align="4" /> </struct> <struct name="RemoveMaster"> @@ -1392,7 +1511,7 @@ authorization from the authors. <field type="CARD16" name="number" /> <field type="CARD16" name="scroll_type" enum="ScrollType" /> <pad bytes="2" /> - <field type="CARD32" name="flags" enum="ScrollFlags" /> + <field type="CARD32" name="flags" mask="ScrollFlags" /> <field type="FP3232" name="increment" /> </struct> @@ -1436,26 +1555,16 @@ authorization from the authors. <struct name="XIDeviceInfo"> <field type="DeviceId" name="deviceid" altenum="Device" /> - <field type="CARD16" name="type" altenum="DeviceType" /> + <field type="CARD16" name="type" enum="DeviceType" /> <field type="DeviceId" name="attachment" altenum="Device" /> <field type="CARD16" name="num_classes" /> <field type="CARD16" name="name_len" /> <field type="BOOL" name="enabled" /> <pad bytes="1" /> <list type="char" name="name"> - <!-- name_len is without padding, so we've to pad on our own, - auto align pad after the list would be helpfull --> - <op op="*"> - <op op="/"> - <op op="+"> - <fieldref>name_len</fieldref> - <value>3</value> - </op> - <value>4</value> - </op> - <value>4</value> - </op> + <fieldref>name_len</fieldref> </list> + <pad align="4" /> <list type="DeviceClass" name="classes"> <fieldref>num_classes</fieldref> </list> @@ -1579,6 +1688,7 @@ authorization from the authors. </struct> <request name="XIPassiveGrabDevice" opcode="54"> + <!-- field "time" is unused and its value is undefined --> <field type="TIMESTAMP" name="time" altenum="Time" /> <field type="WINDOW" name="grab_window" /> <field type="CURSOR" name="cursor" /> @@ -1708,12 +1818,14 @@ authorization from the authors. <list type="CARD8" name="data8"> <fieldref>num_items</fieldref> </list> + <pad align="4" /> </bitcase> <bitcase> <enumref ref="PropertyFormat">16Bits</enumref> <list type="CARD16" name="data16"> <fieldref>num_items</fieldref> </list> + <pad align="4" /> </bitcase> <bitcase> <enumref ref="PropertyFormat">32Bits</enumref> @@ -1772,6 +1884,12 @@ authorization from the authors. </list> </event> + <!-- the highest bit in a CARD8 device_id-field indicates that more + events will follow --> + <enum name="MoreEventsMask"> + <item name="MoreEvents"> <bit>7</bit> </item> <!-- 0x80 --> + </enum> + <event name="DeviceKeyPress" number="1"> <field type="BYTE" name="detail" /> <field type="TIMESTAMP" name="time" /> @@ -1782,9 +1900,9 @@ authorization from the authors. <field type="INT16" name="root_y" /> <field type="INT16" name="event_x" /> <field type="INT16" name="event_y" /> - <field type="CARD16" name="state" /> + <field type="CARD16" name="state" mask="KeyButMask" /> <field type="BOOL" name="same_screen" /> - <field type="CARD8" name="device_id" /> + <field type="CARD8" name="device_id" altmask="MoreEventsMask" /> </event> <eventcopy name="DeviceKeyRelease" number="2" ref="DeviceKeyPress" /> @@ -1805,13 +1923,25 @@ authorization from the authors. <eventcopy name="ProximityIn" number="8" ref="DeviceKeyPress" /> <eventcopy name="ProximityOut" number="9" ref="DeviceKeyPress" /> + <enum name="ClassesReportedMask"> + <item name="OutOfProximity"> <bit>7</bit> </item> <!-- 0x80 --> + <!-- 0 = InProxmity, 1 = OutOfProximity --> + + <item name="DeviceModeAbsolute"> <bit>6</bit> </item> <!-- 0x40 --> + <!-- 0 = Relative, 1 = Absolute --> + + <item name="ReportingValuators"> <bit>2</bit> </item> <!-- 0x04 --> + <item name="ReportingButtons"> <bit>1</bit> </item> <!-- 0x02 --> + <item name="ReportingKeys"> <bit>0</bit> </item> <!-- 0x01 --> + </enum> + <event name="DeviceStateNotify" number="10"> - <field type="BYTE" name="device_id" /> + <field type="BYTE" name="device_id" altmask="MoreEventsMask" /> <field type="TIMESTAMP" name="time" /> <field type="CARD8" name="num_keys" /> <field type="CARD8" name="num_buttons" /> <field type="CARD8" name="num_valuators" /> - <field type="CARD8" name="classes_reported" /> + <field type="CARD8" name="classes_reported" mask="ClassesReportedMask" /> <list type="CARD8" name="buttons"> <value>4</value> </list> @@ -1825,7 +1955,7 @@ authorization from the authors. <event name="DeviceMappingNotify" number="11"> <field type="BYTE" name="device_id" /> - <field type="CARD8" name="request" /> + <field type="CARD8" name="request" enum="Mapping" /> <field type="KeyCode" name="first_keycode" /> <field type="CARD8" name="count" /> <pad bytes="1" /> @@ -1833,22 +1963,27 @@ authorization from the authors. <pad bytes="20" /> </event> + <enum name="ChangeDevice"> + <item name="NewPointer"> <value>0</value> </item> + <item name="NewKeyboard"> <value>1</value> </item> + </enum> + <event name="ChangeDeviceNotify" number="12"> <field type="BYTE" name="device_id" /> <field type="TIMESTAMP" name="time" /> - <field type="CARD8" name="request" /> + <field type="CARD8" name="request" enum="ChangeDevice" /> <pad bytes="23" /> </event> <event name="DeviceKeyStateNotify" number="13"> - <field type="BYTE" name="device_id" /> + <field type="BYTE" name="device_id" altmask="MoreEventsMask" /> <list type="CARD8" name="keys"> <value>28</value> </list> </event> <event name="DeviceButtonStateNotify" number="14"> - <field type="BYTE" name="device_id" /> + <field type="BYTE" name="device_id" altmask="MoreEventsMask" /> <list type="CARD8" name="buttons"> <value>28</value> </list> @@ -2016,8 +2151,8 @@ authorization from the authors. <field type="FP1616" name="root_y" /> <field type="FP1616" name="event_x" /> <field type="FP1616" name="event_y" /> - <field type="CARD8" name="same_screen" /> - <field type="CARD8" name="focus" /> + <field type="BOOL" name="same_screen" /> + <field type="BOOL" name="focus" /> <field type="CARD16" name="buttons_len" /> <field type="ModifierInfo" name="mods" /> <field type="GroupInfo" name="group" /> @@ -2208,6 +2343,11 @@ authorization from the authors. <!-- ⋅⋅⋅ Events (v2.3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ --> + <enum name="BarrierFlags"> + <item name="PointerReleased"> <bit>0</bit> </item> + <item name="DeviceIsGrabbed"> <bit>1</bit> </item> + </enum> + <event name="BarrierHit" number="25" xge="true"> <field type="DeviceId" name="deviceid" altenum="Device" /> <field type="TIMESTAMP" name="time" altenum="Time" /> @@ -2218,7 +2358,7 @@ authorization from the authors. <field type="BARRIER" name="barrier" /> <!-- 32 byte boundary --> <field type="CARD32" name="dtime" /> - <field type="CARD32" name="flags" /> + <field type="CARD32" name="flags" mask="BarrierFlags" /> <field type="DeviceId" name="sourceid" altenum="Device" /> <pad bytes="2" /> <field type="FP1616" name="root_x" /> diff --git a/libxcb/xcb-proto/xcbgen/expr.py b/libxcb/xcb-proto/xcbgen/expr.py index f9d5179f0..e4fb06e93 100644 --- a/libxcb/xcb-proto/xcbgen/expr.py +++ b/libxcb/xcb-proto/xcbgen/expr.py @@ -120,7 +120,7 @@ class Expression(object): for p in reversed(parents): fields = dict([(f.field_name, f) for f in p.fields]) if self.lenfield_name in fields.keys(): - if p.is_bitcase: + if p.is_case_or_bitcase: # switch is the anchestor self.lenfield_parent = p.parents[-1] else: diff --git a/libxcb/xcb-proto/xcbgen/xtypes.py b/libxcb/xcb-proto/xcbgen/xtypes.py index 3cd90320e..45d7568f5 100644 --- a/libxcb/xcb-proto/xcbgen/xtypes.py +++ b/libxcb/xcb-proto/xcbgen/xtypes.py @@ -33,7 +33,9 @@ class Type(object): self.is_union = False self.is_pad = False self.is_switch = False + self.is_case_or_bitcase = False self.is_bitcase = False + self.is_case = False def resolve(self, module): ''' @@ -405,16 +407,20 @@ class SwitchType(ComplexType): # Resolve all of our field datatypes. for index, child in enumerate(list(self.elt)): - if child.tag == 'bitcase': + if child.tag == 'bitcase' or child.tag == 'case': field_name = child.get('name') if field_name is None: - field_type = self.name + ('bitcase%d' % index,) + field_type = self.name + ('%s%d' % ( child.tag, index ),) else: field_type = self.name + (field_name,) # use self.parent to indicate anchestor, # as switch does not contain named fields itself - type = BitcaseType(index, field_type, child, *parents) + if child.tag == 'bitcase': + type = BitcaseType(index, field_type, child, *parents) + else: + type = CaseType(index, field_type, child, *parents) + # construct the switch type name from the parent type and the field name if field_name is None: type.has_name = False @@ -497,9 +503,9 @@ class Union(ComplexType): out = __main__.output['union'] -class BitcaseType(ComplexType): +class CaseOrBitcaseType(ComplexType): ''' - Derived class representing a struct data type. + Derived class representing a case or bitcase. ''' def __init__(self, index, name, elt, *parent): elts = list(elt) @@ -515,7 +521,7 @@ class BitcaseType(ComplexType): self.index = 1 self.lenfield_parent = list(parent) + [self] self.parents = list(parent) - self.is_bitcase = True + self.is_case_or_bitcase = True def make_member_of(self, module, switch_type, field_type, field_name, visible, wire, auto, enum=None): ''' @@ -546,6 +552,23 @@ class BitcaseType(ComplexType): ComplexType.resolve(self, module) +class BitcaseType(CaseOrBitcaseType): + ''' + Derived class representing a bitcase. + ''' + def __init__(self, index, name, elt, *parent): + CaseOrBitcaseType.__init__(self, index, name, elt, *parent) + self.is_bitcase = True + +class CaseType(CaseOrBitcaseType): + ''' + Derived class representing a case. + ''' + def __init__(self, index, name, elt, *parent): + CaseOrBitcaseType.__init__(self, index, name, elt, *parent) + self.is_case = True + + class Reply(ComplexType): ''' Derived class representing a reply. Only found as a field of Request. diff --git a/mesalib/configure.ac b/mesalib/configure.ac index be6898f7d..aa7d1f27d 100644 --- a/mesalib/configure.ac +++ b/mesalib/configure.ac @@ -629,7 +629,7 @@ AC_ARG_ENABLE([xvmc], [AS_HELP_STRING([--enable-xvmc], [enable xvmc library @<:@default=auto@:>@])], [enable_xvmc="$enableval"], - [enable_xvmc=no]) + [enable_xvmc=auto]) AC_ARG_ENABLE([vdpau], [AS_HELP_STRING([--enable-vdpau], [enable vdpau library @<:@default=auto@:>@])], diff --git a/mesalib/docs/GL3.txt b/mesalib/docs/GL3.txt index 76412c3dc..56c4994e5 100644 --- a/mesalib/docs/GL3.txt +++ b/mesalib/docs/GL3.txt @@ -18,7 +18,7 @@ are exposed in the 3.0 context as extensions. Feature Status ----------------------------------------------------- ------------------------ -GL 3.0, GLSL 1.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi +GL 3.0, GLSL 1.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi, llvmpipe (*), softpipe (*) glBindFragDataLocation, glGetFragDataLocation DONE Conditional rendering (GL_NV_conditional_render) DONE (r300, swrast) @@ -47,8 +47,10 @@ GL 3.0, GLSL 1.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi GLX_ARB_create_context (GLX 1.4 is required) DONE Multisample anti-aliasing DONE (r300) +(*) llvmpipe and softpipe have fake Multisample anti-aliasing support -GL 3.1, GLSL 1.40 --- all DONE: i965, nv50, nvc0, r600, radeonsi + +GL 3.1, GLSL 1.40 --- all DONE: i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe Forward compatible context support/deprecations DONE () Instanced drawing (GL_ARB_draw_instanced) DONE (swrast) @@ -61,7 +63,7 @@ GL 3.1, GLSL 1.40 --- all DONE: i965, nv50, nvc0, r600, radeonsi Signed normalized textures (GL_EXT_texture_snorm) DONE (r300) -GL 3.2, GLSL 1.50 --- all DONE: i965, nv50, nvc0, r600, radeonsi +GL 3.2, GLSL 1.50 --- all DONE: i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe Core/compatibility profiles DONE Geometry shaders DONE () @@ -76,9 +78,9 @@ GL 3.2, GLSL 1.50 --- all DONE: i965, nv50, nvc0, r600, radeonsi GLX_ARB_create_context_profile DONE -GL 3.3, GLSL 3.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi +GL 3.3, GLSL 3.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe - GL_ARB_blend_func_extended DONE (softpipe) + GL_ARB_blend_func_extended DONE () GL_ARB_explicit_attrib_location DONE (all drivers that support GLSL) GL_ARB_occlusion_query2 DONE (r300, swrast) GL_ARB_sampler_objects DONE (all drivers) @@ -92,8 +94,8 @@ GL 3.3, GLSL 3.30 --- all DONE: i965, nv50, nvc0, r600, radeonsi GL 4.0, GLSL 4.00: - GL_ARB_draw_buffers_blend DONE (i965, nv50, nvc0, r600, radeonsi, softpipe) - GL_ARB_draw_indirect DONE (i965, nvc0, radeonsi, softpipe, llvmpipe) + GL_ARB_draw_buffers_blend DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe) + GL_ARB_draw_indirect DONE (i965, nvc0, radeonsi, llvmpipe, softpipe) GL_ARB_gpu_shader5 DONE (i965, nvc0) - 'precise' qualifier DONE - Dynamically uniform sampler array indices DONE () @@ -110,9 +112,9 @@ GL 4.0, GLSL 4.00: GL_ARB_gpu_shader_fp64 started (Dave) GL_ARB_sample_shading DONE (i965, nv50, nvc0, radeonsi) GL_ARB_shader_subroutine not started - GL_ARB_tessellation_shader started (Fabian) - GL_ARB_texture_buffer_object_rgb32 DONE (i965, nvc0, r600, radeonsi, softpipe) - GL_ARB_texture_cube_map_array DONE (i965, nv50, nvc0, r600, radeonsi, softpipe) + GL_ARB_tessellation_shader started (Chris, Ilia) + GL_ARB_texture_buffer_object_rgb32 DONE (i965, nvc0, r600, radeonsi, llvmpipe, softpipe) + GL_ARB_texture_cube_map_array DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe) GL_ARB_texture_gather DONE (i965, nv50, nvc0, r600, radeonsi) GL_ARB_texture_query_lod DONE (i965, nv50, nvc0, r600, radeonsi) GL_ARB_transform_feedback2 DONE (i965, nv50, nvc0, r600, radeonsi) @@ -121,12 +123,12 @@ GL 4.0, GLSL 4.00: GL 4.1, GLSL 4.10: - GL_ARB_ES2_compatibility DONE (i965, nv50, nvc0, r300, r600, radeonsi) + GL_ARB_ES2_compatibility DONE (i965, nv50, nvc0, r300, r600, radeonsi, llvmpipe, softpipe) GL_ARB_get_program_binary DONE (0 binary formats) GL_ARB_separate_shader_objects DONE (all drivers) GL_ARB_shader_precision started (Micah) GL_ARB_vertex_attrib_64bit started (Dave) - GL_ARB_viewport_array DONE (i965, nv50, nvc0, r600) + GL_ARB_viewport_array DONE (i965, nv50, nvc0, r600, llvmpipe) GL 4.2, GLSL 4.20: @@ -140,7 +142,7 @@ GL 4.2, GLSL 4.20: GL_ARB_shader_image_load_store in progress (curro) GL_ARB_conservative_depth DONE (all drivers that support GLSL 1.30) GL_ARB_shading_language_420pack DONE (all drivers that support GLSL 1.30) - GL_ARB_internalformat_query DONE (i965, nv50, nvc0, r300, r600, radeonsi) + GL_ARB_internalformat_query DONE (i965, nv50, nvc0, r300, r600, radeonsi, llvmpipe, softpipe) GL_ARB_map_buffer_alignment DONE (all drivers) @@ -153,17 +155,17 @@ GL 4.3, GLSL 4.30: GL_ARB_copy_image DONE (i965) GL_KHR_debug DONE (all drivers) GL_ARB_explicit_uniform_location DONE (all drivers that support GLSL) - GL_ARB_fragment_layer_viewport DONE (nv50, nvc0, r600) + GL_ARB_fragment_layer_viewport DONE (nv50, nvc0, r600, llvmpipe) GL_ARB_framebuffer_no_attachments not started GL_ARB_internalformat_query2 not started GL_ARB_invalidate_subdata DONE (all drivers) - GL_ARB_multi_draw_indirect DONE (i965, nvc0, radeonsi, softpipe, llvmpipe) + GL_ARB_multi_draw_indirect DONE (i965, nvc0, radeonsi, llvmpipe, softpipe) GL_ARB_program_interface_query not started GL_ARB_robust_buffer_access_behavior not started GL_ARB_shader_image_size not started GL_ARB_shader_storage_buffer_object not started - GL_ARB_stencil_texturing DONE (i965/gen8+, nv50, nvc0, r600, radeonsi) - GL_ARB_texture_buffer_range DONE (nv50, nvc0, i965, r600, radeonsi) + GL_ARB_stencil_texturing DONE (i965/gen8+, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe) + GL_ARB_texture_buffer_range DONE (nv50, nvc0, i965, r600, radeonsi, llvmpipe) GL_ARB_texture_query_levels DONE (all drivers that support GLSL 1.30) GL_ARB_texture_storage_multisample DONE (all drivers that support GL_ARB_texture_multisample) GL_ARB_texture_view DONE (i965) @@ -172,21 +174,21 @@ GL 4.3, GLSL 4.30: GL 4.4, GLSL 4.40: - GL_MAX_VERTEX_ATTRIB_STRIDE not started + GL_MAX_VERTEX_ATTRIB_STRIDE DONE (all drivers) GL_ARB_buffer_storage DONE (i965, nv30, nv50, nvc0, r300, r600, radeonsi) GL_ARB_clear_texture DONE (i965) GL_ARB_enhanced_layouts not started GL_ARB_multi_bind DONE (all drivers) GL_ARB_query_buffer_object not started - GL_ARB_texture_mirror_clamp_to_edge DONE (i965, nv30, nv50, nvc0, r300, r600, radeonsi, swrast) + GL_ARB_texture_mirror_clamp_to_edge DONE (i965, nv30, nv50, nvc0, r300, r600, radeonsi, swrast, llvmpipe, softpipe) GL_ARB_texture_stencil8 not started - GL_ARB_vertex_type_10f_11f_11f_rev DONE (i965, nv50, nvc0, r600, radeonsi) + GL_ARB_vertex_type_10f_11f_11f_rev DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe) GL 4.5, GLSL 4.50: GL_ARB_ES3_1_compatibility not started GL_ARB_clip_control not started - GL_ARB_conditional_render_inverted DONE (i965, nvc0, softpipe, llvmpipe) + GL_ARB_conditional_render_inverted DONE (i965, nvc0, llvmpipe, softpipe) GL_ARB_cull_distance not started GL_ARB_derivative_control DONE (i965, nv50, nvc0, r600) GL_ARB_direct_state_access not started @@ -208,7 +210,7 @@ GLES3.1, GLSL ES 3.1 GL_ARB_shader_image_load_store in progress (curro) GL_ARB_shader_storage_buffer_object not started GL_ARB_separate_shader_objects DONE (all drivers) - GL_ARB_stencil_texturing DONE (i965/gen8+, nv50, nvc0, r600, radeonsi) + GL_ARB_stencil_texturing DONE (i965/gen8+, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe) GL_ARB_vertex_attrib_binding DONE (all drivers) GS5 Enhanced textureGather DONE (i965, nvc0, r600, radeonsi) GS5 Packing/bitfield/conversion functions DONE (i965, nvc0, r600) diff --git a/mesalib/include/HaikuGL/OpenGLKit.h b/mesalib/include/HaikuGL/OpenGLKit.h index f4828714c..71d983075 100644 --- a/mesalib/include/HaikuGL/OpenGLKit.h +++ b/mesalib/include/HaikuGL/OpenGLKit.h @@ -7,4 +7,4 @@ // Projects needing GL/glu.h and GL/glut.h should now // include these headers independently as glu and glut -// are no longe core parts of mesa +// are no longer core parts of mesa diff --git a/mesalib/src/gallium/Automake.inc b/mesalib/src/gallium/Automake.inc index 74053eb2d..c43f735c3 100644 --- a/mesalib/src/gallium/Automake.inc +++ b/mesalib/src/gallium/Automake.inc @@ -16,6 +16,7 @@ GALLIUM_DRIVER_CFLAGS = \ -I$(top_srcdir)/src/gallium/include \ -I$(top_srcdir)/src/gallium/auxiliary \ -I$(top_srcdir)/src/gallium/drivers \ + -I$(top_srcdir)/src/gallium/winsys \ $(DEFINES) \ $(VISIBILITY_CFLAGS) @@ -26,6 +27,7 @@ GALLIUM_DRIVER_CXXFLAGS = \ -I$(top_srcdir)/src/gallium/include \ -I$(top_srcdir)/src/gallium/auxiliary \ -I$(top_srcdir)/src/gallium/drivers \ + -I$(top_srcdir)/src/gallium/winsys \ $(DEFINES) \ $(VISIBILITY_CXXFLAGS) diff --git a/mesalib/src/gallium/Makefile.am b/mesalib/src/gallium/Makefile.am index 1e1fd43d5..e4ef00346 100644 --- a/mesalib/src/gallium/Makefile.am +++ b/mesalib/src/gallium/Makefile.am @@ -109,6 +109,15 @@ if NEED_WINSYS_WRAPPER SUBDIRS += winsys/sw/wrapper endif +## +## Don't forget to bundle the remaining (non autotools) winsys' +## + +EXTRA_DIST = \ + winsys/sw/android \ + winsys/sw/gdi \ + winsys/sw/hgl + ## ## Gallium state trackers and their users (targets) @@ -164,6 +173,14 @@ SUBDIRS += state_trackers/xvmc targets/xvmc endif ## +## Don't forget to bundle the remaining (non autotools) state-trackers/targets +## + +EXTRA_DIST += \ + state_trackers/hgl targets/haiku-softpipe + + +## ## Gallium tests ## diff --git a/mesalib/src/gallium/SConscript b/mesalib/src/gallium/SConscript index 98d017e4d..977e3fbf4 100644 --- a/mesalib/src/gallium/SConscript +++ b/mesalib/src/gallium/SConscript @@ -85,6 +85,7 @@ if not env['embedded']: if env['platform'] == 'haiku': SConscript([ + 'state_trackers/hgl/SConscript', 'targets/haiku-softpipe/SConscript', ]) diff --git a/mesalib/src/gallium/auxiliary/util/u_vbuf.c b/mesalib/src/gallium/auxiliary/util/u_vbuf.c index c475ee1b3..650df9f6a 100644 --- a/mesalib/src/gallium/auxiliary/util/u_vbuf.c +++ b/mesalib/src/gallium/auxiliary/util/u_vbuf.c @@ -191,47 +191,114 @@ u_vbuf_create_vertex_elements(struct u_vbuf *mgr, unsigned count, const struct pipe_vertex_element *attribs); static void u_vbuf_delete_vertex_elements(struct u_vbuf *mgr, void *cso); +static const struct { + enum pipe_format from, to; +} vbuf_format_fallbacks[] = { + { PIPE_FORMAT_R32_FIXED, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R32G32_FIXED, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R32G32B32_FIXED, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R32G32B32A32_FIXED, PIPE_FORMAT_R32G32B32A32_FLOAT }, + { PIPE_FORMAT_R16_FLOAT, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R16G16_FLOAT, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R16G16B16_FLOAT, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R16G16B16A16_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT }, + { PIPE_FORMAT_R64_FLOAT, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R64G64_FLOAT, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R64G64B64_FLOAT, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R64G64B64A64_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT }, + { PIPE_FORMAT_R32_UNORM, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R32G32_UNORM, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R32G32B32_UNORM, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R32G32B32A32_UNORM, PIPE_FORMAT_R32G32B32A32_FLOAT }, + { PIPE_FORMAT_R32_SNORM, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R32G32_SNORM, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R32G32B32_SNORM, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R32G32B32A32_SNORM, PIPE_FORMAT_R32G32B32A32_FLOAT }, + { PIPE_FORMAT_R32_USCALED, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R32G32_USCALED, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R32G32B32_USCALED, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R32G32B32A32_USCALED, PIPE_FORMAT_R32G32B32A32_FLOAT }, + { PIPE_FORMAT_R32_SSCALED, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R32G32_SSCALED, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R32G32B32_SSCALED, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R32G32B32A32_SSCALED, PIPE_FORMAT_R32G32B32A32_FLOAT }, + { PIPE_FORMAT_R16_UNORM, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R16G16_UNORM, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R16G16B16_UNORM, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R16G16B16A16_UNORM, PIPE_FORMAT_R32G32B32A32_FLOAT }, + { PIPE_FORMAT_R16_SNORM, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R16G16_SNORM, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R16G16B16_SNORM, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R16G16B16A16_SNORM, PIPE_FORMAT_R32G32B32A32_FLOAT }, + { PIPE_FORMAT_R16_USCALED, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R16G16_USCALED, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R16G16B16_USCALED, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R16G16B16A16_USCALED, PIPE_FORMAT_R32G32B32A32_FLOAT }, + { PIPE_FORMAT_R16_SSCALED, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R16G16_SSCALED, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R16G16B16_SSCALED, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R16G16B16A16_SSCALED, PIPE_FORMAT_R32G32B32A32_FLOAT }, + { PIPE_FORMAT_R8_UNORM, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R8G8_UNORM, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R8G8B8_UNORM, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R8G8B8A8_UNORM, PIPE_FORMAT_R32G32B32A32_FLOAT }, + { PIPE_FORMAT_R8_SNORM, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R8G8_SNORM, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R8G8B8_SNORM, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R8G8B8A8_SNORM, PIPE_FORMAT_R32G32B32A32_FLOAT }, + { PIPE_FORMAT_R8_USCALED, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R8G8_USCALED, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R8G8B8_USCALED, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R8G8B8A8_USCALED, PIPE_FORMAT_R32G32B32A32_FLOAT }, + { PIPE_FORMAT_R8_SSCALED, PIPE_FORMAT_R32_FLOAT }, + { PIPE_FORMAT_R8G8_SSCALED, PIPE_FORMAT_R32G32_FLOAT }, + { PIPE_FORMAT_R8G8B8_SSCALED, PIPE_FORMAT_R32G32B32_FLOAT }, + { PIPE_FORMAT_R8G8B8A8_SSCALED, PIPE_FORMAT_R32G32B32A32_FLOAT }, +}; -void u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps) +boolean u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps) { - caps->format_fixed32 = - screen->is_format_supported(screen, PIPE_FORMAT_R32_FIXED, PIPE_BUFFER, - 0, PIPE_BIND_VERTEX_BUFFER); - - caps->format_float16 = - screen->is_format_supported(screen, PIPE_FORMAT_R16_FLOAT, PIPE_BUFFER, - 0, PIPE_BIND_VERTEX_BUFFER); - - caps->format_float64 = - screen->is_format_supported(screen, PIPE_FORMAT_R64_FLOAT, PIPE_BUFFER, - 0, PIPE_BIND_VERTEX_BUFFER); - - caps->format_norm32 = - screen->is_format_supported(screen, PIPE_FORMAT_R32_UNORM, PIPE_BUFFER, - 0, PIPE_BIND_VERTEX_BUFFER) && - screen->is_format_supported(screen, PIPE_FORMAT_R32_SNORM, PIPE_BUFFER, - 0, PIPE_BIND_VERTEX_BUFFER); - - caps->format_scaled32 = - screen->is_format_supported(screen, PIPE_FORMAT_R32_USCALED, PIPE_BUFFER, - 0, PIPE_BIND_VERTEX_BUFFER) && - screen->is_format_supported(screen, PIPE_FORMAT_R32_SSCALED, PIPE_BUFFER, - 0, PIPE_BIND_VERTEX_BUFFER); + unsigned i; + boolean fallback = FALSE; + + /* I'd rather have a bitfield of which formats are supported and a static + * table of the translations indexed by format, but since we don't have C99 + * we can't easily make a sparsely-populated table indexed by format. So, + * we construct the sparse table here. + */ + for (i = 0; i < PIPE_FORMAT_COUNT; i++) + caps->format_translation[i] = i; + + for (i = 0; i < Elements(vbuf_format_fallbacks); i++) { + enum pipe_format format = vbuf_format_fallbacks[i].from; + + if (!screen->is_format_supported(screen, format, PIPE_BUFFER, 0, + PIPE_BIND_VERTEX_BUFFER)) { + caps->format_translation[format] = vbuf_format_fallbacks[i].to; + fallback = TRUE; + } + } caps->buffer_offset_unaligned = !screen->get_param(screen, - PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY); - + PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY); caps->buffer_stride_unaligned = - !screen->get_param(screen, + !screen->get_param(screen, PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY); - caps->velem_src_offset_unaligned = !screen->get_param(screen, - PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY); - + PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY); caps->user_vertex_buffers = screen->get_param(screen, PIPE_CAP_USER_VERTEX_BUFFERS); + + if (!caps->buffer_offset_unaligned || + !caps->buffer_stride_unaligned || + !caps->velem_src_offset_unaligned || + !caps->user_vertex_buffers) { + fallback = TRUE; + } + + return fallback; } struct u_vbuf * @@ -664,9 +731,6 @@ static void u_vbuf_translate_end(struct u_vbuf *mgr) } } -#define FORMAT_REPLACE(what, withwhat) \ - case PIPE_FORMAT_##what: format = PIPE_FORMAT_##withwhat; break - static void * u_vbuf_create_vertex_elements(struct u_vbuf *mgr, unsigned count, const struct pipe_vertex_element *attribs) @@ -695,62 +759,7 @@ u_vbuf_create_vertex_elements(struct u_vbuf *mgr, unsigned count, ve->noninstance_vb_mask_any |= 1 << ve->ve[i].vertex_buffer_index; } - /* Choose a native format. - * For now we don't care about the alignment, that's going to - * be sorted out later. */ - if (!mgr->caps.format_fixed32) { - switch (format) { - FORMAT_REPLACE(R32_FIXED, R32_FLOAT); - FORMAT_REPLACE(R32G32_FIXED, R32G32_FLOAT); - FORMAT_REPLACE(R32G32B32_FIXED, R32G32B32_FLOAT); - FORMAT_REPLACE(R32G32B32A32_FIXED, R32G32B32A32_FLOAT); - default:; - } - } - if (!mgr->caps.format_float16) { - switch (format) { - FORMAT_REPLACE(R16_FLOAT, R32_FLOAT); - FORMAT_REPLACE(R16G16_FLOAT, R32G32_FLOAT); - FORMAT_REPLACE(R16G16B16_FLOAT, R32G32B32_FLOAT); - FORMAT_REPLACE(R16G16B16A16_FLOAT, R32G32B32A32_FLOAT); - default:; - } - } - if (!mgr->caps.format_float64) { - switch (format) { - FORMAT_REPLACE(R64_FLOAT, R32_FLOAT); - FORMAT_REPLACE(R64G64_FLOAT, R32G32_FLOAT); - FORMAT_REPLACE(R64G64B64_FLOAT, R32G32B32_FLOAT); - FORMAT_REPLACE(R64G64B64A64_FLOAT, R32G32B32A32_FLOAT); - default:; - } - } - if (!mgr->caps.format_norm32) { - switch (format) { - FORMAT_REPLACE(R32_UNORM, R32_FLOAT); - FORMAT_REPLACE(R32G32_UNORM, R32G32_FLOAT); - FORMAT_REPLACE(R32G32B32_UNORM, R32G32B32_FLOAT); - FORMAT_REPLACE(R32G32B32A32_UNORM, R32G32B32A32_FLOAT); - FORMAT_REPLACE(R32_SNORM, R32_FLOAT); - FORMAT_REPLACE(R32G32_SNORM, R32G32_FLOAT); - FORMAT_REPLACE(R32G32B32_SNORM, R32G32B32_FLOAT); - FORMAT_REPLACE(R32G32B32A32_SNORM, R32G32B32A32_FLOAT); - default:; - } - } - if (!mgr->caps.format_scaled32) { - switch (format) { - FORMAT_REPLACE(R32_USCALED, R32_FLOAT); - FORMAT_REPLACE(R32G32_USCALED, R32G32_FLOAT); - FORMAT_REPLACE(R32G32B32_USCALED, R32G32B32_FLOAT); - FORMAT_REPLACE(R32G32B32A32_USCALED,R32G32B32A32_FLOAT); - FORMAT_REPLACE(R32_SSCALED, R32_FLOAT); - FORMAT_REPLACE(R32G32_SSCALED, R32G32_FLOAT); - FORMAT_REPLACE(R32G32B32_SSCALED, R32G32B32_FLOAT); - FORMAT_REPLACE(R32G32B32A32_SSCALED,R32G32B32A32_FLOAT); - default:; - } - } + format = mgr->caps.format_translation[format]; driver_attribs[i].src_format = format; ve->native_format[i] = format; diff --git a/mesalib/src/gallium/auxiliary/util/u_vbuf.h b/mesalib/src/gallium/auxiliary/util/u_vbuf.h index a608184e5..9e8b135fb 100644 --- a/mesalib/src/gallium/auxiliary/util/u_vbuf.h +++ b/mesalib/src/gallium/auxiliary/util/u_vbuf.h @@ -35,19 +35,14 @@ #include "pipe/p_context.h" #include "pipe/p_state.h" +#include "pipe/p_format.h" struct cso_context; struct u_vbuf; /* Hardware vertex fetcher limitations can be described by this structure. */ struct u_vbuf_caps { - /* Vertex format CAPs. */ - /* TRUE if hardware supports it. */ - unsigned format_fixed32:1; /* PIPE_FORMAT_*32*_FIXED */ - unsigned format_float16:1; /* PIPE_FORMAT_*16*_FLOAT */ - unsigned format_float64:1; /* PIPE_FORMAT_*64*_FLOAT */ - unsigned format_norm32:1; /* PIPE_FORMAT_*32*NORM */ - unsigned format_scaled32:1; /* PIPE_FORMAT_*32*SCALED */ + enum pipe_format format_translation[PIPE_FORMAT_COUNT]; /* Whether vertex fetches don't have to be 4-byte-aligned. */ /* TRUE if hardware supports it. */ @@ -60,7 +55,7 @@ struct u_vbuf_caps { }; -void u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps); +boolean u_vbuf_get_caps(struct pipe_screen *screen, struct u_vbuf_caps *caps); struct u_vbuf * u_vbuf_create(struct pipe_context *pipe, diff --git a/mesalib/src/glsl/ast_function.cpp b/mesalib/src/glsl/ast_function.cpp index 39c7beeb2..7130d6162 100644 --- a/mesalib/src/glsl/ast_function.cpp +++ b/mesalib/src/glsl/ast_function.cpp @@ -103,35 +103,35 @@ verify_image_parameter(YYLTYPE *loc, _mesa_glsl_parse_state *state, * qualifiers. [...] It is legal to have additional qualifiers * on a formal parameter, but not to have fewer." */ - if (actual->data.image.coherent && !formal->data.image.coherent) { + if (actual->data.image_coherent && !formal->data.image_coherent) { _mesa_glsl_error(loc, state, "function call parameter `%s' drops " "`coherent' qualifier", formal->name); return false; } - if (actual->data.image._volatile && !formal->data.image._volatile) { + if (actual->data.image_volatile && !formal->data.image_volatile) { _mesa_glsl_error(loc, state, "function call parameter `%s' drops " "`volatile' qualifier", formal->name); return false; } - if (actual->data.image.restrict_flag && !formal->data.image.restrict_flag) { + if (actual->data.image_restrict && !formal->data.image_restrict) { _mesa_glsl_error(loc, state, "function call parameter `%s' drops " "`restrict' qualifier", formal->name); return false; } - if (actual->data.image.read_only && !formal->data.image.read_only) { + if (actual->data.image_read_only && !formal->data.image_read_only) { _mesa_glsl_error(loc, state, "function call parameter `%s' drops " "`readonly' qualifier", formal->name); return false; } - if (actual->data.image.write_only && !formal->data.image.write_only) { + if (actual->data.image_write_only && !formal->data.image_write_only) { _mesa_glsl_error(loc, state, "function call parameter `%s' drops " "`writeonly' qualifier", formal->name); diff --git a/mesalib/src/glsl/ast_to_hir.cpp b/mesalib/src/glsl/ast_to_hir.cpp index 30b02d016..897505c60 100644 --- a/mesalib/src/glsl/ast_to_hir.cpp +++ b/mesalib/src/glsl/ast_to_hir.cpp @@ -2360,11 +2360,11 @@ apply_image_qualifier_to_variable(const struct ast_type_qualifier *qual, "global variables"); } - var->data.image.read_only |= qual->flags.q.read_only; - var->data.image.write_only |= qual->flags.q.write_only; - var->data.image.coherent |= qual->flags.q.coherent; - var->data.image._volatile |= qual->flags.q._volatile; - var->data.image.restrict_flag |= qual->flags.q.restrict_flag; + var->data.image_read_only |= qual->flags.q.read_only; + var->data.image_write_only |= qual->flags.q.write_only; + var->data.image_coherent |= qual->flags.q.coherent; + var->data.image_volatile |= qual->flags.q._volatile; + var->data.image_restrict |= qual->flags.q.restrict_flag; var->data.read_only = true; if (qual->flags.q.explicit_image_format) { @@ -2378,7 +2378,7 @@ apply_image_qualifier_to_variable(const struct ast_type_qualifier *qual, "base data type of the image"); } - var->data.image.format = qual->image_format; + var->data.image_format = qual->image_format; } else { if (var->data.mode == ir_var_uniform && !qual->flags.q.write_only) { _mesa_glsl_error(loc, state, "uniforms not qualified with " @@ -2386,7 +2386,7 @@ apply_image_qualifier_to_variable(const struct ast_type_qualifier *qual, "qualifier"); } - var->data.image.format = GL_NONE; + var->data.image_format = GL_NONE; } } } diff --git a/mesalib/src/glsl/builtin_functions.cpp b/mesalib/src/glsl/builtin_functions.cpp index 2cc714a98..a1473d270 100755 --- a/mesalib/src/glsl/builtin_functions.cpp +++ b/mesalib/src/glsl/builtin_functions.cpp @@ -4476,11 +4476,11 @@ builtin_builder::_image_prototype(const glsl_type *image_type, * accept everything that needs to be accepted, and reject cases * like loads from write-only or stores to read-only images. */ - image->data.image.read_only = flags & IMAGE_FUNCTION_READ_ONLY; - image->data.image.write_only = flags & IMAGE_FUNCTION_WRITE_ONLY; - image->data.image.coherent = true; - image->data.image._volatile = true; - image->data.image.restrict_flag = true; + image->data.image_read_only = (flags & IMAGE_FUNCTION_READ_ONLY) != 0; + image->data.image_write_only = (flags & IMAGE_FUNCTION_WRITE_ONLY) != 0; + image->data.image_coherent = true; + image->data.image_volatile = true; + image->data.image_restrict = true; return sig; } diff --git a/mesalib/src/glsl/glcpp/glcpp-lex.l b/mesalib/src/glsl/glcpp/glcpp-lex.l index 98d500ec0..fa9aa5069 100644 --- a/mesalib/src/glsl/glcpp/glcpp-lex.l +++ b/mesalib/src/glsl/glcpp/glcpp-lex.l @@ -289,8 +289,14 @@ HEXADECIMAL_INTEGER 0[xX][0-9a-fA-F]+[uU]? } /* Swallow empty #pragma directives, (to avoid confusing the - * downstream compiler). */ -<HASH>pragma{HSPACE}*/{NEWLINE} { + * downstream compiler). + * + * Note: We use a simple regular expression for the lookahead + * here. Specifically, we cannot use the complete {NEWLINE} expression + * since it uses alternation and we've found that there's a flex bug + * where using alternation in the lookahead portion of a pattern + * triggers a buffer overrun. */ +<HASH>pragma{HSPACE}*/[\r\n] { BEGIN INITIAL; } diff --git a/mesalib/src/glsl/glsl_parser.yy b/mesalib/src/glsl/glsl_parser.yy index beabb5ffd..cef968420 100644 --- a/mesalib/src/glsl/glsl_parser.yy +++ b/mesalib/src/glsl/glsl_parser.yy @@ -25,6 +25,9 @@ #include <stdlib.h> #include <unistd.h> #include <string.h> +#ifndef _MSC_VER +#include <strings.h> +#endif #include <assert.h> #include "ast.h" @@ -180,7 +183,7 @@ static bool match_layout_qualifier(const char *s1, const char *s2, */ %token ASM CLASS UNION ENUM TYPEDEF TEMPLATE THIS PACKED_TOK GOTO %token INLINE_TOK NOINLINE PUBLIC_TOK STATIC EXTERN EXTERNAL -%token LONG_TOK SHORT_TOK DOUBLE_TOK HALF FIXED_TOK UNSIGNED INPUT_TOK OUPTUT +%token LONG_TOK SHORT_TOK DOUBLE_TOK HALF FIXED_TOK UNSIGNED INPUT_TOK %token HVEC2 HVEC3 HVEC4 DVEC2 DVEC3 DVEC4 FVEC2 FVEC3 FVEC4 %token SAMPLER3DRECT %token SIZEOF CAST NAMESPACE USING diff --git a/mesalib/src/glsl/ir.cpp b/mesalib/src/glsl/ir.cpp index c7029dc4c..c2bfda938 100755 --- a/mesalib/src/glsl/ir.cpp +++ b/mesalib/src/glsl/ir.cpp @@ -1551,6 +1551,7 @@ ir_variable::ir_variable(const struct glsl_type *type, const char *name, this->data.has_initializer = false; this->data.location = -1; this->data.location_frac = 0; + this->data.binding = 0; this->warn_extension = NULL; this->constant_value = NULL; this->constant_initializer = NULL; @@ -1566,13 +1567,12 @@ ir_variable::ir_variable(const struct glsl_type *type, const char *name, this->data.mode = mode; this->data.interpolation = INTERP_QUALIFIER_NONE; this->data.max_array_access = 0; - this->data.atomic.buffer_index = 0; this->data.atomic.offset = 0; - this->data.image.read_only = false; - this->data.image.write_only = false; - this->data.image.coherent = false; - this->data.image._volatile = false; - this->data.image.restrict_flag = false; + this->data.image_read_only = false; + this->data.image_write_only = false; + this->data.image_coherent = false; + this->data.image_volatile = false; + this->data.image_restrict = false; if (type != NULL) { if (type->base_type == GLSL_TYPE_SAMPLER) @@ -1678,11 +1678,11 @@ ir_function_signature::qualifiers_match(exec_list *params) a->data.interpolation != b->data.interpolation || a->data.centroid != b->data.centroid || a->data.sample != b->data.sample || - a->data.image.read_only != b->data.image.read_only || - a->data.image.write_only != b->data.image.write_only || - a->data.image.coherent != b->data.image.coherent || - a->data.image._volatile != b->data.image._volatile || - a->data.image.restrict_flag != b->data.image.restrict_flag) { + a->data.image_read_only != b->data.image_read_only || + a->data.image_write_only != b->data.image_write_only || + a->data.image_coherent != b->data.image_coherent || + a->data.image_volatile != b->data.image_volatile || + a->data.image_restrict != b->data.image_restrict) { /* parameter a's qualifiers don't match */ return a->name; diff --git a/mesalib/src/glsl/ir.h b/mesalib/src/glsl/ir.h index 18623b968..e9051732b 100644 --- a/mesalib/src/glsl/ir.h +++ b/mesalib/src/glsl/ir.h @@ -689,6 +689,28 @@ public: unsigned must_be_shader_input:1; /** + * Output index for dual source blending. + * + * \note + * The GLSL spec only allows the values 0 or 1 for the index in \b dual + * source blending. + */ + unsigned index:1; + + + /** + * ARB_shader_image_load_store qualifiers. + */ + unsigned image_read_only:1; /**< "readonly" qualifier. */ + unsigned image_write_only:1; /**< "writeonly" qualifier. */ + unsigned image_coherent:1; + unsigned image_volatile:1; + unsigned image_restrict:1; + + /** Image internal format if specified explicitly, otherwise GL_NONE. */ + uint16_t image_format; + + /** * \brief Layout qualifier for gl_FragDepth. * * This is not equal to \c ir_depth_layout_none if and only if this @@ -722,12 +744,7 @@ public: unsigned stream; /** - * output index for dual source blending. - */ - int index; - - /** - * Initial binding point for a sampler or UBO. + * Initial binding point for a sampler, atomic, or UBO. * * For array types, this represents the binding point for the first element. */ @@ -737,25 +754,10 @@ public: * Location an atomic counter is stored at. */ struct { - unsigned buffer_index; unsigned offset; } atomic; /** - * ARB_shader_image_load_store qualifiers. - */ - struct { - bool read_only; /**< "readonly" qualifier. */ - bool write_only; /**< "writeonly" qualifier. */ - bool coherent; - bool _volatile; - bool restrict_flag; - - /** Image internal format if specified explicitly, otherwise GL_NONE. */ - GLenum format; - } image; - - /** * Highest element accessed with a constant expression array index * * Not used for non-array variables. diff --git a/mesalib/src/glsl/link_atomics.cpp b/mesalib/src/glsl/link_atomics.cpp index 75699fd93..603873a5d 100644 --- a/mesalib/src/glsl/link_atomics.cpp +++ b/mesalib/src/glsl/link_atomics.cpp @@ -201,7 +201,9 @@ link_assign_atomic_counter_resources(struct gl_context *ctx, gl_uniform_storage *const storage = &prog->UniformStorage[id]; mab.Uniforms[j] = id; - var->data.atomic.buffer_index = i; + if (!var->data.explicit_binding) + var->data.binding = i; + storage->atomic_buffer_index = i; storage->offset = var->data.atomic.offset; storage->array_stride = (var->type->is_array() ? diff --git a/mesalib/src/glsl/link_uniforms.cpp b/mesalib/src/glsl/link_uniforms.cpp index f1484617b..1d5b62d71 100644 --- a/mesalib/src/glsl/link_uniforms.cpp +++ b/mesalib/src/glsl/link_uniforms.cpp @@ -829,8 +829,8 @@ link_set_image_access_qualifiers(struct gl_shader_program *prog) (void) found; const gl_uniform_storage *storage = &prog->UniformStorage[id]; const unsigned index = storage->image[i].index; - const GLenum access = (var->data.image.read_only ? GL_READ_ONLY : - var->data.image.write_only ? GL_WRITE_ONLY : + const GLenum access = (var->data.image_read_only ? GL_READ_ONLY : + var->data.image_write_only ? GL_WRITE_ONLY : GL_READ_WRITE); for (unsigned j = 0; j < MAX2(1, storage->array_elements); ++j) diff --git a/mesalib/src/hgl/GLRendererRoster.cpp b/mesalib/src/hgl/GLRendererRoster.cpp index 1712a871c..d29f7ecc8 100644 --- a/mesalib/src/hgl/GLRendererRoster.cpp +++ b/mesalib/src/hgl/GLRendererRoster.cpp @@ -17,7 +17,7 @@ #include <Directory.h> #include <FindDirectory.h> #include <Path.h> -#include <String.h> +#include <strings.h> #include "GLDispatcher.h" #include "GLRendererRoster.h" diff --git a/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml b/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml index 0ee6a3c00..7e6268877 100644 --- a/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml +++ b/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml @@ -53,6 +53,7 @@ <enum name="VERTEX_BINDING_STRIDE" value="0x82D8"/> <enum name="MAX_VERTEX_ATTRIB_RELATIVE_OFFSET" value="0x82D9"/> <enum name="MAX_VERTEX_ATTRIB_BINDINGS" value="0x82DA"/> + <enum name="MAX_VERTEX_ATTRIB_STRIDE" value="0x82E5"/> </category> </OpenGLAPI> diff --git a/mesalib/src/mesa/main/context.c b/mesalib/src/mesa/main/context.c index 232084267..fbdbd680a 100644 --- a/mesalib/src/mesa/main/context.c +++ b/mesalib/src/mesa/main/context.c @@ -670,6 +670,9 @@ _mesa_init_constants(struct gl_constants *consts, gl_api api) ? GL_CONTEXT_CORE_PROFILE_BIT : GL_CONTEXT_COMPATIBILITY_PROFILE_BIT; + /* GL 4.4 */ + consts->MaxVertexAttribStride = 2048; + /** GL_EXT_gpu_shader4 */ consts->MinProgramTexelOffset = -8; consts->MaxProgramTexelOffset = 7; diff --git a/mesalib/src/mesa/main/get_hash_params.py b/mesalib/src/mesa/main/get_hash_params.py index ff858207b..aace8a5b5 100644 --- a/mesalib/src/mesa/main/get_hash_params.py +++ b/mesalib/src/mesa/main/get_hash_params.py @@ -712,6 +712,9 @@ descriptor=[ [ "MAX_GEOMETRY_INPUT_COMPONENTS", "CONTEXT_INT(Const.Program[MESA_SHADER_GEOMETRY].MaxInputComponents), extra_version_32" ], [ "MAX_GEOMETRY_OUTPUT_COMPONENTS", "CONTEXT_INT(Const.Program[MESA_SHADER_GEOMETRY].MaxOutputComponents), extra_version_32" ], +# GL 4.4 + [ "MAX_VERTEX_ATTRIB_STRIDE", "CONTEXT_ENUM(Const.MaxVertexAttribStride), NO_EXTRA" ], + # GL_ARB_robustness [ "RESET_NOTIFICATION_STRATEGY_ARB", "CONTEXT_ENUM(Const.ResetStrategy), NO_EXTRA" ], diff --git a/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h index cb2a4df4f..dc25ea467 100644 --- a/mesalib/src/mesa/main/mtypes.h +++ b/mesalib/src/mesa/main/mtypes.h @@ -2317,9 +2317,6 @@ struct gl_geometry_program_state struct gl_geometry_program *_Current; GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ - - /** Cache of fixed-function programs */ - struct gl_program_cache *Cache; }; /** @@ -3414,6 +3411,9 @@ struct gl_constants /** OpenGL version 3.2 */ GLbitfield ProfileMask; /**< Mask of CONTEXT_x_PROFILE_BIT */ + /** OpenGL version 4.4 */ + GLuint MaxVertexAttribStride; + /** GL_EXT_transform_feedback */ GLuint MaxTransformFeedbackBuffers; GLuint MaxTransformFeedbackSeparateComponents; diff --git a/mesalib/src/mesa/main/texobj.c b/mesalib/src/mesa/main/texobj.c index 2a82c2d4e..923cf60d7 100644 --- a/mesalib/src/mesa/main/texobj.c +++ b/mesalib/src/mesa/main/texobj.c @@ -772,18 +772,21 @@ _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex) { if (!ctx->Shared->FallbackTex[tex]) { /* create fallback texture now */ - const GLsizei width = 1, height = 1, depth = 1; - GLubyte texel[4]; + const GLsizei width = 1, height = 1; + GLsizei depth = 1; + GLubyte texel[24]; struct gl_texture_object *texObj; struct gl_texture_image *texImage; mesa_format texFormat; GLuint dims, face, numFaces = 1; GLenum target; - texel[0] = - texel[1] = - texel[2] = 0x0; - texel[3] = 0xff; + for (face = 0; face < 6; face++) { + texel[4*face + 0] = + texel[4*face + 1] = + texel[4*face + 2] = 0x0; + texel[4*face + 3] = 0xff; + } switch (tex) { case TEXTURE_2D_ARRAY_INDEX: @@ -822,6 +825,7 @@ _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex) case TEXTURE_CUBE_ARRAY_INDEX: dims = 3; target = GL_TEXTURE_CUBE_MAP_ARRAY; + depth = 6; break; case TEXTURE_EXTERNAL_INDEX: dims = 2; diff --git a/mesalib/src/mesa/main/varray.c b/mesalib/src/mesa/main/varray.c index 5d3cc2a70..7d169f9d4 100644 --- a/mesalib/src/mesa/main/varray.c +++ b/mesalib/src/mesa/main/varray.c @@ -424,6 +424,13 @@ update_array(struct gl_context *ctx, return; } + if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 && + stride > ctx->Const.MaxVertexAttribStride) { + _mesa_error(ctx, GL_INVALID_VALUE, "%s(stride=%d > " + "GL_MAX_VERTEX_ATTRIB_STRIDE)", func, stride); + return; + } + /* Page 29 (page 44 of the PDF) of the OpenGL 3.3 spec says: * * "An INVALID_OPERATION error is generated under any of the following @@ -1437,6 +1444,13 @@ _mesa_BindVertexBuffer(GLuint bindingIndex, GLuint buffer, GLintptr offset, return; } + if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 && + stride > ctx->Const.MaxVertexAttribStride) { + _mesa_error(ctx, GL_INVALID_VALUE, "glBindVertexBuffer(stride=%d > " + "GL_MAX_VERTEX_ATTRIB_STRIDE)", stride); + return; + } + if (buffer == vao->VertexBinding[VERT_ATTRIB_GENERIC(bindingIndex)].BufferObj->Name) { vbo = vao->VertexBinding[VERT_ATTRIB_GENERIC(bindingIndex)].BufferObj; } else if (buffer != 0) { @@ -1565,6 +1579,14 @@ _mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers, continue; } + if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 && + strides[i] > ctx->Const.MaxVertexAttribStride) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glBindVertexBuffers(strides[%u]=%d > " + "GL_MAX_VERTEX_ATTRIB_STRIDE)", i, strides[i]); + continue; + } + if (buffers[i]) { struct gl_vertex_buffer_binding *binding = &vao->VertexBinding[VERT_ATTRIB_GENERIC(first + i)]; diff --git a/mesalib/src/mesa/program/program.c b/mesalib/src/mesa/program/program.c index ef5bf6b11..6e17fe65f 100644 --- a/mesalib/src/mesa/program/program.c +++ b/mesalib/src/mesa/program/program.c @@ -100,7 +100,6 @@ _mesa_init_program(struct gl_context *ctx) /* right now by default we don't have a geometry program */ _mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current, NULL); - ctx->GeometryProgram.Cache = _mesa_new_program_cache(); /* XXX probably move this stuff */ ctx->ATIFragmentShader.Enabled = GL_FALSE; @@ -121,7 +120,6 @@ _mesa_free_program_data(struct gl_context *ctx) _mesa_reference_fragprog(ctx, &ctx->FragmentProgram.Current, NULL); _mesa_delete_shader_cache(ctx, ctx->FragmentProgram.Cache); _mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current, NULL); - _mesa_delete_program_cache(ctx, ctx->GeometryProgram.Cache); /* XXX probably move this stuff */ if (ctx->ATIFragmentShader.Current) { diff --git a/mesalib/src/mesa/state_tracker/st_extensions.c b/mesalib/src/mesa/state_tracker/st_extensions.c index 4110eb5dd..9db648c03 100644 --- a/mesalib/src/mesa/state_tracker/st_extensions.c +++ b/mesalib/src/mesa/state_tracker/st_extensions.c @@ -289,6 +289,9 @@ void st_init_limits(struct pipe_screen *screen, /* The vertex stream must fit into pipe_stream_output_info::stream */ assert(c->MaxVertexStreams <= 4); + c->MaxVertexAttribStride + = screen->get_param(screen, PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE); + c->StripTextureBorder = GL_TRUE; c->GLSLSkipStrictMaxUniformLimitCheck = diff --git a/xorg-server/configure.ac b/xorg-server/configure.ac index f3d9654a4..cba7d24ea 100644 --- a/xorg-server/configure.ac +++ b/xorg-server/configure.ac @@ -2364,7 +2364,7 @@ if test "$KDRIVE" = yes; then AC_DEFINE(KDRIVE_MOUSE, 1, [Enable KDrive mouse driver]) fi - XEPHYR_REQUIRED_LIBS="xau xdmcp xcb xcb-shape xcb-aux xcb-image xcb-icccm xcb-shm xcb-keysyms" + XEPHYR_REQUIRED_LIBS="xau xdmcp xcb xcb-shape xcb-aux xcb-image xcb-icccm xcb-shm xcb-keysyms xcb-randr" if test "x$XV" = xyes; then XEPHYR_REQUIRED_LIBS="$XEPHYR_REQUIRED_LIBS xcb-xv" fi diff --git a/xorg-server/dix/devices.c b/xorg-server/dix/devices.c index 01983d75e..ce64dfeda 100644 --- a/xorg-server/dix/devices.c +++ b/xorg-server/dix/devices.c @@ -417,7 +417,7 @@ EnableDevice(DeviceIntPtr dev, BOOL sendevent) XISendDeviceHierarchyEvent(flags); } - if (!IsMaster(dev)) + if (!IsMaster(dev) && !IsFloating(dev)) XkbPushLockedStateToSlaves(GetMaster(dev, MASTER_KEYBOARD), 0, 0); RecalculateMasterButtons(dev); diff --git a/xorg-server/dri3/dri3.c b/xorg-server/dri3/dri3.c index 76e07b40e..385862a3b 100644 --- a/xorg-server/dri3/dri3.c +++ b/xorg-server/dri3/dri3.c @@ -30,6 +30,8 @@ int dri3_request; DevPrivateKeyRec dri3_screen_private_key; DevPrivateKeyRec dri3_window_private_key; +static int dri3_screen_generation; + static Bool dri3_close_screen(ScreenPtr screen) { @@ -44,6 +46,8 @@ dri3_close_screen(ScreenPtr screen) Bool dri3_screen_init(ScreenPtr screen, dri3_screen_info_ptr info) { + dri3_screen_generation = serverGeneration; + if (!dixRegisterPrivateKey(&dri3_screen_private_key, PRIVATE_SCREEN, 0)) return FALSE; @@ -68,6 +72,12 @@ dri3_extension_init(void) ExtensionEntry *extension; int i; + /* If no screens support DRI3, there's no point offering the + * extension at all + */ + if (dri3_screen_generation != serverGeneration) + return; + #ifdef PANORAMIX if (!noPanoramiXExtension) return; diff --git a/xorg-server/fb/fbwindow.c b/xorg-server/fb/fbwindow.c index 368c4b883..c90175faa 100644 --- a/xorg-server/fb/fbwindow.c +++ b/xorg-server/fb/fbwindow.c @@ -33,7 +33,7 @@ fbCreateWindow(WindowPtr pWin) { dixSetPrivate(&pWin->devPrivates, fbGetWinPrivateKey(pWin), fbGetScreenPixmap(pWin->drawable.pScreen)); - if (pWin->drawable.bitsPerPixel == 32) + if (pWin->drawable.bitsPerPixel == 32 && pWin->drawable.depth <= 24) pWin->drawable.bitsPerPixel = fbGetScreenPrivate(pWin->drawable.pScreen)->win32bpp; return TRUE; diff --git a/xorg-server/glamor/glamor_copy.c b/xorg-server/glamor/glamor_copy.c index bfcde43db..6f422d419 100644 --- a/xorg-server/glamor/glamor_copy.c +++ b/xorg-server/glamor/glamor_copy.c @@ -233,6 +233,56 @@ bail: return FALSE; } +/** + * Implements CopyArea from the GPU to the CPU using glReadPixels from the + * source FBO. + */ +static Bool +glamor_copy_fbo_cpu(DrawablePtr src, + DrawablePtr dst, + GCPtr gc, + BoxPtr box, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, + Pixel bitplane, + void *closure) +{ + ScreenPtr screen = dst->pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + PixmapPtr src_pixmap = glamor_get_drawable_pixmap(src); + FbBits *dst_bits; + FbStride dst_stride; + int dst_bpp; + int src_xoff, src_yoff; + int dst_xoff, dst_yoff; + + if (gc && gc->alu != GXcopy) + goto bail; + + if (gc && !glamor_pm_is_solid(dst, gc->planemask)) + goto bail; + + glamor_make_current(glamor_priv); + glamor_prepare_access(dst, GLAMOR_ACCESS_RW); + + glamor_get_drawable_deltas(src, src_pixmap, &src_xoff, &src_yoff); + + fbGetDrawable(dst, dst_bits, dst_stride, dst_bpp, dst_xoff, dst_yoff); + + glamor_download_boxes(src_pixmap, box, nbox, src_xoff + dx, src_yoff + dy, + dst_xoff, dst_yoff, + (uint8_t *) dst_bits, dst_stride * sizeof (FbBits)); + glamor_finish_access(dst); + + return TRUE; + +bail: + return FALSE; +} + /* * Copy from GPU to GPU by using the source * as a texture and painting that into the destination @@ -584,6 +634,11 @@ glamor_copy_gl(DrawablePtr src, if (bitplane == 0) return glamor_copy_cpu_fbo(src, dst, gc, box, nbox, dx, dy, reverse, upsidedown, bitplane, closure); + } else if (GLAMOR_PIXMAP_PRIV_HAS_FBO(src_priv) && + dst_priv->type != GLAMOR_DRM_ONLY && + bitplane == 0) { + return glamor_copy_fbo_cpu(src, dst, gc, box, nbox, dx, dy, + reverse, upsidedown, bitplane, closure); } return FALSE; } diff --git a/xorg-server/glamor/glamor_font.c b/xorg-server/glamor/glamor_font.c index 57c607dc2..0ca91fa2e 100644 --- a/xorg-server/glamor/glamor_font.c +++ b/xorg-server/glamor/glamor_font.c @@ -46,6 +46,8 @@ glamor_font_get(ScreenPtr screen, FontPtr font) CharInfoPtr glyph; unsigned long count; + if (glamor_priv->glsl_version < 130) + return NULL; privates = FontGetPrivate(font, glamor_font_private_index); if (!privates) { @@ -167,6 +169,11 @@ glamor_unrealize_font(ScreenPtr screen, FontPtr font) Bool glamor_font_init(ScreenPtr screen) { + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + + if (glamor_priv->glsl_version < 130) + return TRUE; + if (glamor_font_generation != serverGeneration) { glamor_font_private_index = AllocateFontPrivateIndex(); if (glamor_font_private_index == -1) diff --git a/xorg-server/glamor/glamor_xv.c b/xorg-server/glamor/glamor_xv.c index 3f3e064d5..26bdef66b 100644 --- a/xorg-server/glamor/glamor_xv.c +++ b/xorg-server/glamor/glamor_xv.c @@ -136,6 +136,11 @@ glamor_init_xv_shader(ScreenPtr screen) void glamor_xv_stop_video(glamor_port_private *port_priv) { +} + +static void +glamor_xv_free_port_data(glamor_port_private *port_priv) +{ int i; for (i = 0; i < 3; i++) { @@ -144,6 +149,8 @@ glamor_xv_stop_video(glamor_port_private *port_priv) port_priv->src_pix[i] = NULL; } } + RegionUninit(&port_priv->clip); + RegionNull(&port_priv->clip); } int @@ -381,6 +388,8 @@ glamor_xv_render(glamor_port_private *port_priv) glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); DamageDamageRegion(port_priv->pDraw, &port_priv->clip); + + glamor_xv_free_port_data(port_priv); } int @@ -468,9 +477,7 @@ glamor_xv_put_image(glamor_port_private *port_priv, else port_priv->pPixmap = (PixmapPtr) pDrawable; - if (!RegionEqual(&port_priv->clip, clipBoxes)) { - RegionCopy(&port_priv->clip, clipBoxes); - } + RegionCopy(&port_priv->clip, clipBoxes); port_priv->src_x = src_x; port_priv->src_y = src_y; diff --git a/xorg-server/hw/kdrive/ephyr/ephyr.c b/xorg-server/hw/kdrive/ephyr/ephyr.c index 76cc47efd..ae095c883 100644 --- a/xorg-server/hw/kdrive/ephyr/ephyr.c +++ b/xorg-server/hw/kdrive/ephyr/ephyr.c @@ -114,13 +114,16 @@ Bool ephyrScreenInitialize(KdScreenInfo *screen) { EphyrScrPriv *scrpriv = screen->driver; + int x = 0, y = 0; int width = 640, height = 480; CARD32 redMask, greenMask, blueMask; - if (hostx_want_screen_size(screen, &width, &height) + if (hostx_want_screen_geometry(screen, &width, &height, &x, &y) || !screen->width || !screen->height) { screen->width = width; screen->height = height; + screen->x = x; + screen->y = y; } if (EphyrWantGrayScale) @@ -245,7 +248,8 @@ ephyrMapFramebuffer(KdScreenInfo * screen) buffer_height = ephyrBufferHeight(screen); priv->base = - hostx_screen_init(screen, screen->width, screen->height, buffer_height, + hostx_screen_init(screen, screen->x, screen->y, + screen->width, screen->height, buffer_height, &priv->bytes_per_line, &screen->fb.bitsPerPixel); if ((scrpriv->randr & RR_Rotate_0) && !(scrpriv->randr & RR_Reflect_All)) { diff --git a/xorg-server/hw/kdrive/ephyr/ephyr.h b/xorg-server/hw/kdrive/ephyr/ephyr.h index 59e202095..ffe7db1c2 100644 --- a/xorg-server/hw/kdrive/ephyr/ephyr.h +++ b/xorg-server/hw/kdrive/ephyr/ephyr.h @@ -75,8 +75,11 @@ typedef struct _ephyrScrPriv { xcb_window_t win_pre_existing; /* Set via -parent option like xnest */ xcb_window_t peer_win; /* Used for GL; should be at most one */ xcb_image_t *ximg; + Bool win_explicit_position; + int win_x, win_y; int win_width, win_height; int server_depth; + const char *output; /* Set via -output option */ unsigned char *fb_data; /* only used when host bpp != server bpp */ xcb_shm_segment_info_t shminfo; diff --git a/xorg-server/hw/kdrive/ephyr/ephyrinit.c b/xorg-server/hw/kdrive/ephyr/ephyrinit.c index 8fe45d575..dee15b530 100644..100755 --- a/xorg-server/hw/kdrive/ephyr/ephyrinit.c +++ b/xorg-server/hw/kdrive/ephyr/ephyrinit.c @@ -47,6 +47,8 @@ extern KdPointerDriver LinuxEvdevMouseDriver; extern KdKeyboardDriver LinuxEvdevKeyboardDriver; #endif +void processScreenOrOutputArg(const char *screen_size, const char *output, char *parent_id); +void processOutputArg(const char *output, char *parent_id); void processScreenArg(const char *screen_size, char *parent_id); void @@ -135,6 +137,7 @@ ddxUseMsg(void) ErrorF("-parent <XID> Use existing window as Xephyr root win\n"); ErrorF("-sw-cursor Render cursors in software in Xephyr\n"); ErrorF("-fullscreen Attempt to run Xephyr fullscreen\n"); + ErrorF("-output <NAME> Attempt to run Xephyr fullscreen (restricted to given output geometry)\n"); ErrorF("-grayscale Simulate 8bit grayscale\n"); ErrorF("-resizeable Make Xephyr windows resizeable\n"); #ifdef GLAMOR @@ -156,7 +159,7 @@ ddxUseMsg(void) #endif void -processScreenArg(const char *screen_size, char *parent_id) +processScreenOrOutputArg(const char *screen_size, const char *output, char *parent_id) { KdCardInfo *card; @@ -166,6 +169,7 @@ processScreenArg(const char *screen_size, char *parent_id) if (card) { KdScreenInfo *screen; unsigned long p_id = 0; + Bool use_geometry; screen = KdScreenInfoAdd(card); KdParseScreen(screen, screen_size); @@ -176,14 +180,28 @@ processScreenArg(const char *screen_size, char *parent_id) if (parent_id) { p_id = strtol(parent_id, NULL, 0); } + + use_geometry = (strchr(screen_size, '+') != NULL); EPHYR_DBG("screen number:%d\n", screen->mynum); - hostx_add_screen(screen, p_id, screen->mynum); + hostx_add_screen(screen, p_id, screen->mynum, use_geometry, output); } else { ErrorF("No matching card found!\n"); } } +void +processScreenArg(const char *screen_size, char *parent_id) +{ + processScreenOrOutputArg(screen_size, NULL, parent_id); +} + +void +processOutputArg(const char *output, char *parent_id) +{ + processScreenOrOutputArg("100x100+0+0", output, parent_id); +} + #ifndef _MSC_VER int ddxProcessArgument(int argc, char **argv, int i) @@ -226,6 +244,15 @@ ddxProcessArgument(int argc, char **argv, int i) UseMsg(); exit(1); } + else if (!strcmp(argv[i], "-output")) { + if (i + 1 < argc) { + processOutputArg(argv[i + 1], NULL); + return 2; + } + + UseMsg(); + exit(1); + } else if (!strcmp(argv[i], "-sw-cursor")) { hostx_use_sw_cursor(); return 1; diff --git a/xorg-server/hw/kdrive/ephyr/hostx.c b/xorg-server/hw/kdrive/ephyr/hostx.c index 3048cd087..4b69171a0 100755 --- a/xorg-server/hw/kdrive/ephyr/hostx.c +++ b/xorg-server/hw/kdrive/ephyr/hostx.c @@ -53,6 +53,7 @@ #include <xcb/xcb_image.h> #include <xcb/shape.h> #include <xcb/xcb_keysyms.h> +#include <xcb/randr.h> #ifdef XF86DRI #include <xcb/xf86dri.h> #include <xcb/glx.h> @@ -106,12 +107,15 @@ static void #define host_depth_matches_server(_vars) (HostX.depth == (_vars)->server_depth) int -hostx_want_screen_size(KdScreenInfo *screen, int *width, int *height) +hostx_want_screen_geometry(KdScreenInfo *screen, int *width, int *height, int *x, int *y) { EphyrScrPriv *scrpriv = screen->driver; if (scrpriv && (scrpriv->win_pre_existing != None || + scrpriv->output != NULL || HostX.use_fullscreen == TRUE)) { + *x = scrpriv->win_x; + *y = scrpriv->win_y; *width = scrpriv->win_width; *height = scrpriv->win_height; return 1; @@ -121,7 +125,7 @@ hostx_want_screen_size(KdScreenInfo *screen, int *width, int *height) } void -hostx_add_screen(KdScreenInfo *screen, unsigned long win_id, int screen_num) +hostx_add_screen(KdScreenInfo *screen, unsigned long win_id, int screen_num, Bool use_geometry, const char *output) { EphyrScrPriv *scrpriv = screen->driver; int index = HostX.n_screens; @@ -133,6 +137,8 @@ hostx_add_screen(KdScreenInfo *screen, unsigned long win_id, int screen_num) scrpriv->screen = screen; scrpriv->win_pre_existing = win_id; + scrpriv->win_explicit_position = use_geometry; + scrpriv->output = output; } void @@ -216,6 +222,119 @@ hostx_want_preexisting_window(KdScreenInfo *screen) } void +hostx_get_output_geometry(const char *output, + int *x, int *y, + int *width, int *height) +{ + int i, name_len = 0, output_found = FALSE; + char *name = NULL; + xcb_generic_error_t *error; + xcb_randr_query_version_cookie_t version_c; + xcb_randr_query_version_reply_t *version_r; + xcb_randr_get_screen_resources_cookie_t screen_resources_c; + xcb_randr_get_screen_resources_reply_t *screen_resources_r; + xcb_randr_output_t *randr_outputs; + xcb_randr_get_output_info_cookie_t output_info_c; + xcb_randr_get_output_info_reply_t *output_info_r; + xcb_randr_get_crtc_info_cookie_t crtc_info_c; + xcb_randr_get_crtc_info_reply_t *crtc_info_r; + + /* First of all, check for extension */ + if (!xcb_get_extension_data(HostX.conn, &xcb_randr_id)->present) + { + fprintf(stderr, "\nHost X server does not support RANDR extension (or it's disabled).\n"); + exit(1); + } + + /* Check RandR version */ + version_c = xcb_randr_query_version(HostX.conn, 1, 2); + version_r = xcb_randr_query_version_reply(HostX.conn, + version_c, + &error); + + if (error != NULL || version_r == NULL) + { + fprintf(stderr, "\nFailed to get RandR version supported by host X server.\n"); + exit(1); + } + else if (version_r->major_version < 1 || version_r->minor_version < 2) + { + free(version_r); + fprintf(stderr, "\nHost X server doesn't support RandR 1.2, needed for -output usage.\n"); + exit(1); + } + + free(version_r); + + /* Get list of outputs from screen resources */ + screen_resources_c = xcb_randr_get_screen_resources(HostX.conn, + HostX.winroot); + screen_resources_r = xcb_randr_get_screen_resources_reply(HostX.conn, + screen_resources_c, + NULL); + randr_outputs = xcb_randr_get_screen_resources_outputs(screen_resources_r); + + for (i = 0; !output_found && i < screen_resources_r->num_outputs; i++) + { + /* Get info on the output */ + output_info_c = xcb_randr_get_output_info(HostX.conn, + randr_outputs[i], + XCB_CURRENT_TIME); + output_info_r = xcb_randr_get_output_info_reply(HostX.conn, + output_info_c, + NULL); + + /* Get output name */ + name_len = xcb_randr_get_output_info_name_length(output_info_r); + name = malloc(name_len + 1); + strncpy(name, (char*)xcb_randr_get_output_info_name(output_info_r), name_len); + name[name_len] = '\0'; + + if (!strcmp(name, output)) + { + output_found = TRUE; + + /* Check if output is connected */ + if (output_info_r->crtc == XCB_NONE) + { + free(name); + free(output_info_r); + free(screen_resources_r); + fprintf(stderr, "\nOutput %s is currently disabled (or not connected).\n", output); + exit(1); + } + + /* Get CRTC from output info */ + crtc_info_c = xcb_randr_get_crtc_info(HostX.conn, + output_info_r->crtc, + XCB_CURRENT_TIME); + crtc_info_r = xcb_randr_get_crtc_info_reply(HostX.conn, + crtc_info_c, + NULL); + + /* Get CRTC geometry */ + *x = crtc_info_r->x; + *y = crtc_info_r->y; + *width = crtc_info_r->width; + *height = crtc_info_r->height; + + free(crtc_info_r); + } + + free(name); + free(output_info_r); + } + + free(screen_resources_r); + + if (!output_found) + { + fprintf(stderr, "\nOutput %s not available in host X server.\n", output); + exit(1); + } +} + +void hostx_use_fullscreen(void) { HostX.use_fullscreen = TRUE; @@ -364,6 +483,8 @@ hostx_init(void) scrpriv->win = xcb_generate_id(HostX.conn); scrpriv->server_depth = HostX.depth; scrpriv->ximg = NULL; + scrpriv->win_x = 0; + scrpriv->win_y = 0; if (scrpriv->win_pre_existing != XCB_WINDOW_NONE) { xcb_get_geometry_reply_t *prewin_geom; @@ -421,6 +542,17 @@ hostx_init(void) hostx_set_fullscreen_hint(); } + else if (scrpriv->output) { + hostx_get_output_geometry(scrpriv->output, + &scrpriv->win_x, + &scrpriv->win_y, + &scrpriv->win_width, + &scrpriv->win_height); + + HostX.use_fullscreen = TRUE; + hostx_set_fullscreen_hint(); + } + tmpstr = getenv("RESOURCE_NAME"); if (tmpstr && (!ephyrResNameFromCmd)) @@ -647,6 +779,7 @@ hostx_set_cmap_entry(unsigned char idx, */ void * hostx_screen_init(KdScreenInfo *screen, + int x, int y, int width, int height, int buffer_height, int *bytes_per_line, int *bits_per_pixel) { @@ -658,8 +791,8 @@ hostx_screen_init(KdScreenInfo *screen, exit(1); } - EPHYR_DBG("host_screen=%p wxh=%dx%d, buffer_height=%d", - host_screen, width, height, buffer_height); + EPHYR_DBG("host_screen=%p x=%d, y=%d, wxh=%dx%d, buffer_height=%d", + host_screen, x, y, width, height, buffer_height); if (scrpriv->ximg != NULL) { /* Free up the image data if previously used @@ -758,10 +891,25 @@ __asm int 3; xcb_map_window(HostX.conn, scrpriv->win); + /* Set explicit window position if it was informed in + * -screen option (WxH+X or WxH+X+Y). Otherwise, accept the + * position set by WM. + * The trick here is putting this code after xcb_map_window() call, + * so these values won't be overriden by WM. */ + if (scrpriv->win_explicit_position) + { + uint32_t mask = XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y; + uint32_t values[2] = {x, y}; + xcb_configure_window(HostX.conn, scrpriv->win, mask, values); + } + + xcb_aux_sync(HostX.conn); scrpriv->win_width = width; scrpriv->win_height = height; + scrpriv->win_x = x; + scrpriv->win_y = y; #ifdef GLAMOR if (ephyr_glamor) { diff --git a/xorg-server/hw/kdrive/ephyr/hostx.h b/xorg-server/hw/kdrive/ephyr/hostx.h index f2350efba..d108d48be 100644 --- a/xorg-server/hw/kdrive/ephyr/hostx.h +++ b/xorg-server/hw/kdrive/ephyr/hostx.h @@ -78,7 +78,7 @@ typedef struct { } EphyrRect; int -hostx_want_screen_size(KdScreenInfo *screen, int *width, int *height); +hostx_want_screen_geometry(KdScreenInfo *screen, int *width, int *height, int *x, int *y); int hostx_want_host_cursor(void); @@ -87,6 +87,11 @@ void hostx_use_sw_cursor(void); void + hostx_get_output_geometry(const char *output, + int *x, int *y, + int *width, int *height); + +void hostx_use_fullscreen(void); int @@ -111,7 +116,7 @@ int hostx_init(void); void -hostx_add_screen(KdScreenInfo *screen, unsigned long win_id, int screen_num); +hostx_add_screen(KdScreenInfo *screen, unsigned long win_id, int screen_num, Bool use_geometry, const char *output); void hostx_set_display_name(char *name); @@ -140,6 +145,7 @@ hostx_set_cmap_entry(unsigned char idx, unsigned char r, unsigned char g, unsigned char b); void *hostx_screen_init(KdScreenInfo *screen, + int x, int y, int width, int height, int buffer_height, int *bytes_per_line, int *bits_per_pixel); diff --git a/xorg-server/hw/kdrive/src/kdrive.c b/xorg-server/hw/kdrive/src/kdrive.c index bd2238fda..0db52729e 100644 --- a/xorg-server/hw/kdrive/src/kdrive.c +++ b/xorg-server/hw/kdrive/src/kdrive.c @@ -302,6 +302,8 @@ KdParseScreen(KdScreenInfo * screen, const char *arg) screen->softCursor = kdSoftCursor; screen->origin = kdOrigin; screen->randr = RR_Rotate_0; + screen->x = 0; + screen->y = 0; screen->width = 0; screen->height = 0; screen->width_mm = 0; @@ -315,7 +317,7 @@ KdParseScreen(KdScreenInfo * screen, const char *arg) return; for (i = 0; i < 2; i++) { - arg = KdParseFindNext(arg, "x/@XY", save, &delim); + arg = KdParseFindNext(arg, "x/+@XY", save, &delim); if (!save[0]) return; @@ -323,7 +325,7 @@ KdParseScreen(KdScreenInfo * screen, const char *arg) mm = 0; if (delim == '/') { - arg = KdParseFindNext(arg, "x@XY", save, &delim); + arg = KdParseFindNext(arg, "x+@XY", save, &delim); if (!save[0]) return; mm = atoi(save); @@ -337,7 +339,8 @@ KdParseScreen(KdScreenInfo * screen, const char *arg) screen->height = pixels; screen->height_mm = mm; } - if (delim != 'x' && delim != '@' && delim != 'X' && delim != 'Y' && + if (delim != 'x' && delim != '+' && delim != '@' && + delim != 'X' && delim != 'Y' && (delim != '\0' || i == 0)) return; } @@ -348,6 +351,18 @@ KdParseScreen(KdScreenInfo * screen, const char *arg) kdSoftCursor = FALSE; kdSubpixelOrder = SubPixelUnknown; + if (delim == '+') { + arg = KdParseFindNext(arg, "+@xXY", save, &delim); + if (save[0]) + screen->x = atoi(save); + } + + if (delim == '+') { + arg = KdParseFindNext(arg, "@xXY", save, &delim); + if (save[0]) + screen->y = atoi(save); + } + if (delim == '@') { arg = KdParseFindNext(arg, "xXY", save, &delim); if (save[0]) { @@ -427,7 +442,7 @@ KdUseMsg(void) { ErrorF("\nTinyX Device Dependent Usage:\n"); ErrorF - ("-screen WIDTH[/WIDTHMM]xHEIGHT[/HEIGHTMM][@ROTATION][X][Y][xDEPTH/BPP[xFREQ]] Specify screen characteristics\n"); + ("-screen WIDTH[/WIDTHMM]xHEIGHT[/HEIGHTMM][+[-]XOFFSET][+[-]YOFFSET][@ROTATION][X][Y][xDEPTH/BPP[xFREQ]] Specify screen characteristics\n"); ErrorF ("-rgba rgb/bgr/vrgb/vbgr/none Specify subpixel ordering for LCD panels\n"); ErrorF diff --git a/xorg-server/hw/kdrive/src/kdrive.h b/xorg-server/hw/kdrive/src/kdrive.h index 5f5e50b29..0aae8bb56 100644 --- a/xorg-server/hw/kdrive/src/kdrive.h +++ b/xorg-server/hw/kdrive/src/kdrive.h @@ -89,6 +89,8 @@ typedef struct _KdScreenInfo { ScreenPtr pScreen; void *driver; Rotation randr; /* rotation and reflection */ + int x; + int y; int width; int height; int rate; diff --git a/xorg-server/hw/xfree86/common/xf86Bus.c b/xorg-server/hw/xfree86/common/xf86Bus.c index b3b3f8cc5..bd3e4e37b 100644 --- a/xorg-server/hw/xfree86/common/xf86Bus.c +++ b/xorg-server/hw/xfree86/common/xf86Bus.c @@ -210,6 +210,9 @@ xf86BusProbe(void) #if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__) xf86SbusProbe(); #endif +#ifdef XSERVER_PLATFORM_BUS + xf86platformPrimary(); +#endif } /* diff --git a/xorg-server/hw/xfree86/common/xf86Xinput.h b/xorg-server/hw/xfree86/common/xf86Xinput.h index 9fe8c87b6..66a64fb48 100644 --- a/xorg-server/hw/xfree86/common/xf86Xinput.h +++ b/xorg-server/hw/xfree86/common/xf86Xinput.h @@ -51,6 +51,7 @@ #ifndef _xf86Xinput_h #define _xf86Xinput_h +#include "xf86.h" #include "xf86str.h" #include "inputstr.h" #include <X11/extensions/XI.h> @@ -85,7 +86,7 @@ typedef struct _InputDriverRec { /* This is to input devices what the ScrnInfoRec is to screens. */ -typedef struct _InputInfoRec { +struct _InputInfoRec { struct _InputInfoRec *next; char *name; char *driver; @@ -110,7 +111,7 @@ typedef struct _InputInfoRec { void *module; XF86OptionPtr options; InputAttributes *attrs; -} *InputInfoPtr; +}; /* xf86Globals.c */ extern InputInfoPtr xf86InputDevs; diff --git a/xorg-server/hw/xfree86/common/xf86platformBus.c b/xorg-server/hw/xfree86/common/xf86platformBus.c index 946039940..5ad9b7080 100644 --- a/xorg-server/hw/xfree86/common/xf86platformBus.c +++ b/xorg-server/hw/xfree86/common/xf86platformBus.c @@ -435,10 +435,9 @@ xf86platformProbeDev(DriverPtr drvp) /* for non-seat0 servers assume first device is the master */ if (ServerIsNotSeat0()) break; - if (xf86_platform_devices[j].pdev) { - if (xf86IsPrimaryPlatform(&xf86_platform_devices[j])) - break; - } + + if (xf86IsPrimaryPlatform(&xf86_platform_devices[j])) + break; } } @@ -594,4 +593,19 @@ void xf86platformVTProbe(void) xf86PlatformReprobeDevice(i, xf86_platform_devices[i].attribs); } } + +void xf86platformPrimary(void) +{ + /* use the first platform device as a fallback */ + if (primaryBus.type == BUS_NONE) { + xf86Msg(X_INFO, "no primary bus or device found\n"); + + if (xf86_num_platform_devices > 0) { + primaryBus.id.plat = &xf86_platform_devices[0]; + primaryBus.type = BUS_PLATFORM; + + xf86Msg(X_NONE, "\tfalling back to %s\n", primaryBus.id.plat->attribs->syspath); + } + } +} #endif diff --git a/xorg-server/hw/xfree86/common/xf86platformBus.h b/xorg-server/hw/xfree86/common/xf86platformBus.h index 317dd24d5..a7335b9da 100644 --- a/xorg-server/hw/xfree86/common/xf86platformBus.h +++ b/xorg-server/hw/xfree86/common/xf86platformBus.h @@ -155,6 +155,7 @@ extern _X_EXPORT int xf86PlatformMatchDriver(char *matches[], int nmatches); extern void xf86platformVTProbe(void); +extern void xf86platformPrimary(void); #endif #endif diff --git a/xorg-server/hw/xfree86/os-support/bsd/ppc_video.c b/xorg-server/hw/xfree86/os-support/bsd/ppc_video.c index 947a68678..3fd28c3b5 100644 --- a/xorg-server/hw/xfree86/os-support/bsd/ppc_video.c +++ b/xorg-server/hw/xfree86/os-support/bsd/ppc_video.c @@ -76,7 +76,7 @@ ppcMapVidMem(int ScreenNum, unsigned long Base, unsigned long Size, int flags) (flags & VIDMEM_READONLY) ? PROT_READ : (PROT_READ | PROT_WRITE), MAP_SHARED, fd, Base); if (base == MAP_FAILED) - FatalError("%s: could not mmap screen [s=%x,a=%x] (%s)", + FatalError("%s: could not mmap screen [s=%lx,a=%lx] (%s)", "xf86MapVidMem", Size, Base, strerror(errno)); return base; diff --git a/xorg-server/hw/xquartz/xpr/xprScreen.c b/xorg-server/hw/xquartz/xpr/xprScreen.c index 7aa1ae1df..d0a525ff4 100644 --- a/xorg-server/hw/xquartz/xpr/xprScreen.c +++ b/xorg-server/hw/xquartz/xpr/xprScreen.c @@ -169,14 +169,25 @@ displayScreenBounds(CGDirectDisplayID id) (int)frame.size.width, (int)frame.size.height, (int)frame.origin.x, (int)frame.origin.y); - /* Remove menubar to help standard X11 window managers. - * On Mavericks and later, the menu bar is on all displays. - */ - if (XQuartzIsRootless + Boolean spacePerDisplay = false; #if MAC_OS_X_VERSION_MIN_REQUIRED < 1090 - && (NSAppKitVersionNumber >= 1265 || (frame.origin.x == 0 && frame.origin.y == 0)) + if (NSAppKitVersionNumber >= 1265) #endif - ) { + { + Boolean ok; + (void)CFPreferencesAppSynchronize(CFSTR("com.apple.spaces")); + spacePerDisplay = ! CFPreferencesGetAppBooleanValue(CFSTR("spans-displays"), + CFSTR("com.apple.spaces"), + &ok); + if (!ok) + spacePerDisplay = true; + } + + /* Remove menubar to help standard X11 window managers. + * On Mavericks and later, the menu bar is on all displays when spans-displays is false or unset. + */ + if (XQuartzIsRootless && + (spacePerDisplay || (frame.origin.x == 0 && frame.origin.y == 0))) { frame.origin.y += aquaMenuBarHeight; frame.size.height -= aquaMenuBarHeight; } diff --git a/xorg-server/os/connection.c b/xorg-server/os/connection.c index 505552d19..616c201b5 100644 --- a/xorg-server/os/connection.c +++ b/xorg-server/os/connection.c @@ -1354,13 +1354,6 @@ ListenOnOpenFD(int fd, int noxauth) /* Increment the count */ ListenTransCount++; - - /* This *might* not be needed... /shrug */ - ResetAuthorization(); - ResetHosts(display); -#ifdef XDMCP - XdmcpReset(); -#endif } /* based on TRANS(SocketUNIXAccept) (XtransConnInfo ciptr, int *status) */ diff --git a/xorg-server/os/oscolor.c b/xorg-server/os/oscolor.c index a7573d28b..a44ed3f18 100644 --- a/xorg-server/os/oscolor.c +++ b/xorg-server/os/oscolor.c @@ -67,6 +67,7 @@ static const char BuiltinColorNames[] = { "AntiqueWhite2\0" "AntiqueWhite3\0" "AntiqueWhite4\0" + "aqua\0" "aquamarine\0" "aquamarine1\0" "aquamarine2\0" @@ -131,6 +132,7 @@ static const char BuiltinColorNames[] = { "cornsilk2\0" "cornsilk3\0" "cornsilk4\0" + "crimson\0" "cyan\0" "cyan1\0" "cyan2\0" @@ -229,6 +231,7 @@ static const char BuiltinColorNames[] = { "FloralWhite\0" "forest green\0" "ForestGreen\0" + "fuchsia\0" "gainsboro\0" "ghost white\0" "GhostWhite\0" @@ -470,6 +473,7 @@ static const char BuiltinColorNames[] = { "IndianRed2\0" "IndianRed3\0" "IndianRed4\0" + "indigo\0" "ivory\0" "ivory1\0" "ivory2\0" @@ -561,6 +565,7 @@ static const char BuiltinColorNames[] = { "LightYellow2\0" "LightYellow3\0" "LightYellow4\0" + "lime\0" "lime green\0" "LimeGreen\0" "linen\0" @@ -622,6 +627,7 @@ static const char BuiltinColorNames[] = { "NavyBlue\0" "old lace\0" "OldLace\0" + "olive\0" "olive drab\0" "OliveDrab\0" "OliveDrab1\0" @@ -690,6 +696,8 @@ static const char BuiltinColorNames[] = { "purple2\0" "purple3\0" "purple4\0" + "rebecca purple\0" + "RebeccaPurple\0" "red\0" "red1\0" "red2\0" @@ -732,6 +740,7 @@ static const char BuiltinColorNames[] = { "sienna2\0" "sienna3\0" "sienna4\0" + "silver\0" "sky blue\0" "SkyBlue\0" "SkyBlue1\0" @@ -774,6 +783,7 @@ static const char BuiltinColorNames[] = { "tan2\0" "tan3\0" "tan4\0" + "teal\0" "thistle\0" "thistle1\0" "thistle2\0" @@ -796,6 +806,16 @@ static const char BuiltinColorNames[] = { "VioletRed2\0" "VioletRed3\0" "VioletRed4\0" + "web gray\0" + "web green\0" + "web grey\0" + "web maroon\0" + "web purple\0" + "WebGray\0" + "WebGreen\0" + "WebGrey\0" + "WebMaroon\0" + "WebPurple\0" "wheat\0" "wheat1\0" "wheat2\0" @@ -804,9 +824,23 @@ static const char BuiltinColorNames[] = { "white\0" "white smoke\0" "WhiteSmoke\0" + "x11 gray\0" + "x11 green\0" + "x11 grey\0" + "x11 maroon\0" + "x11 purple\0" + "X11Gray\0" + "X11Green\0" + "X11Grey\0" + "X11Maroon\0" + "X11Purple\0" "yellow\0" "yellow green\0" - "yellow1\0" "yellow2\0" "yellow3\0" "yellow4\0" "YellowGreen\0" + "yellow1\0" + "yellow2\0" + "yellow3\0" + "yellow4\0" + "YellowGreen\0" }; static const BuiltinColor BuiltinColors[] = { @@ -818,750 +852,780 @@ static const BuiltinColor BuiltinColors[] = { {238, 223, 204, 62}, /* AntiqueWhite2 */ {205, 192, 176, 76}, /* AntiqueWhite3 */ {139, 131, 120, 90}, /* AntiqueWhite4 */ - {127, 255, 212, 104}, /* aquamarine */ - {127, 255, 212, 115}, /* aquamarine1 */ - {118, 238, 198, 127}, /* aquamarine2 */ - {102, 205, 170, 139}, /* aquamarine3 */ - {69, 139, 116, 151}, /* aquamarine4 */ - {240, 255, 255, 163}, /* azure */ - {240, 255, 255, 169}, /* azure1 */ - {224, 238, 238, 176}, /* azure2 */ - {193, 205, 205, 183}, /* azure3 */ - {131, 139, 139, 190}, /* azure4 */ - {245, 245, 220, 197}, /* beige */ - {255, 228, 196, 203}, /* bisque */ - {255, 228, 196, 210}, /* bisque1 */ - {238, 213, 183, 218}, /* bisque2 */ - {205, 183, 158, 226}, /* bisque3 */ - {139, 125, 107, 234}, /* bisque4 */ - {0, 0, 0, 242}, /* black */ - {255, 235, 205, 248}, /* blanched almond */ - {255, 235, 205, 264}, /* BlanchedAlmond */ - {0, 0, 255, 279}, /* blue */ - {138, 43, 226, 284}, /* blue violet */ - {0, 0, 255, 296}, /* blue1 */ - {0, 0, 238, 302}, /* blue2 */ - {0, 0, 205, 308}, /* blue3 */ - {0, 0, 139, 314}, /* blue4 */ - {138, 43, 226, 320}, /* BlueViolet */ - {165, 42, 42, 331}, /* brown */ - {255, 64, 64, 337}, /* brown1 */ - {238, 59, 59, 344}, /* brown2 */ - {205, 51, 51, 351}, /* brown3 */ - {139, 35, 35, 358}, /* brown4 */ - {222, 184, 135, 365}, /* burlywood */ - {255, 211, 155, 375}, /* burlywood1 */ - {238, 197, 145, 386}, /* burlywood2 */ - {205, 170, 125, 397}, /* burlywood3 */ - {139, 115, 85, 408}, /* burlywood4 */ - {95, 158, 160, 419}, /* cadet blue */ - {95, 158, 160, 430}, /* CadetBlue */ - {152, 245, 255, 440}, /* CadetBlue1 */ - {142, 229, 238, 451}, /* CadetBlue2 */ - {122, 197, 205, 462}, /* CadetBlue3 */ - {83, 134, 139, 473}, /* CadetBlue4 */ - {127, 255, 0, 484}, /* chartreuse */ - {127, 255, 0, 495}, /* chartreuse1 */ - {118, 238, 0, 507}, /* chartreuse2 */ - {102, 205, 0, 519}, /* chartreuse3 */ - {69, 139, 0, 531}, /* chartreuse4 */ - {210, 105, 30, 543}, /* chocolate */ - {255, 127, 36, 553}, /* chocolate1 */ - {238, 118, 33, 564}, /* chocolate2 */ - {205, 102, 29, 575}, /* chocolate3 */ - {139, 69, 19, 586}, /* chocolate4 */ - {255, 127, 80, 597}, /* coral */ - {255, 114, 86, 603}, /* coral1 */ - {238, 106, 80, 610}, /* coral2 */ - {205, 91, 69, 617}, /* coral3 */ - {139, 62, 47, 624}, /* coral4 */ - {100, 149, 237, 631}, /* cornflower blue */ - {100, 149, 237, 647}, /* CornflowerBlue */ - {255, 248, 220, 662}, /* cornsilk */ - {255, 248, 220, 671}, /* cornsilk1 */ - {238, 232, 205, 681}, /* cornsilk2 */ - {205, 200, 177, 691}, /* cornsilk3 */ - {139, 136, 120, 701}, /* cornsilk4 */ - {0, 255, 255, 711}, /* cyan */ - {0, 255, 255, 716}, /* cyan1 */ - {0, 238, 238, 722}, /* cyan2 */ - {0, 205, 205, 728}, /* cyan3 */ - {0, 139, 139, 734}, /* cyan4 */ - {0, 0, 139, 740}, /* dark blue */ - {0, 139, 139, 750}, /* dark cyan */ - {184, 134, 11, 760}, /* dark goldenrod */ - {169, 169, 169, 775}, /* dark gray */ - {0, 100, 0, 785}, /* dark green */ - {169, 169, 169, 796}, /* dark grey */ - {189, 183, 107, 806}, /* dark khaki */ - {139, 0, 139, 817}, /* dark magenta */ - {85, 107, 47, 830}, /* dark olive green */ - {255, 140, 0, 847}, /* dark orange */ - {153, 50, 204, 859}, /* dark orchid */ - {139, 0, 0, 871}, /* dark red */ - {233, 150, 122, 880}, /* dark salmon */ - {143, 188, 143, 892}, /* dark sea green */ - {72, 61, 139, 907}, /* dark slate blue */ - {47, 79, 79, 923}, /* dark slate gray */ - {47, 79, 79, 939}, /* dark slate grey */ - {0, 206, 209, 955}, /* dark turquoise */ - {148, 0, 211, 970}, /* dark violet */ - {0, 0, 139, 982}, /* DarkBlue */ - {0, 139, 139, 991}, /* DarkCyan */ - {184, 134, 11, 1000}, /* DarkGoldenrod */ - {255, 185, 15, 1014}, /* DarkGoldenrod1 */ - {238, 173, 14, 1029}, /* DarkGoldenrod2 */ - {205, 149, 12, 1044}, /* DarkGoldenrod3 */ - {139, 101, 8, 1059}, /* DarkGoldenrod4 */ - {169, 169, 169, 1074}, /* DarkGray */ - {0, 100, 0, 1083}, /* DarkGreen */ - {169, 169, 169, 1093}, /* DarkGrey */ - {189, 183, 107, 1102}, /* DarkKhaki */ - {139, 0, 139, 1112}, /* DarkMagenta */ - {85, 107, 47, 1124}, /* DarkOliveGreen */ - {202, 255, 112, 1139}, /* DarkOliveGreen1 */ - {188, 238, 104, 1155}, /* DarkOliveGreen2 */ - {162, 205, 90, 1171}, /* DarkOliveGreen3 */ - {110, 139, 61, 1187}, /* DarkOliveGreen4 */ - {255, 140, 0, 1203}, /* DarkOrange */ - {255, 127, 0, 1214}, /* DarkOrange1 */ - {238, 118, 0, 1226}, /* DarkOrange2 */ - {205, 102, 0, 1238}, /* DarkOrange3 */ - {139, 69, 0, 1250}, /* DarkOrange4 */ - {153, 50, 204, 1262}, /* DarkOrchid */ - {191, 62, 255, 1273}, /* DarkOrchid1 */ - {178, 58, 238, 1285}, /* DarkOrchid2 */ - {154, 50, 205, 1297}, /* DarkOrchid3 */ - {104, 34, 139, 1309}, /* DarkOrchid4 */ - {139, 0, 0, 1321}, /* DarkRed */ - {233, 150, 122, 1329}, /* DarkSalmon */ - {143, 188, 143, 1340}, /* DarkSeaGreen */ - {193, 255, 193, 1353}, /* DarkSeaGreen1 */ - {180, 238, 180, 1367}, /* DarkSeaGreen2 */ - {155, 205, 155, 1381}, /* DarkSeaGreen3 */ - {105, 139, 105, 1395}, /* DarkSeaGreen4 */ - {72, 61, 139, 1409}, /* DarkSlateBlue */ - {47, 79, 79, 1423}, /* DarkSlateGray */ - {151, 255, 255, 1437}, /* DarkSlateGray1 */ - {141, 238, 238, 1452}, /* DarkSlateGray2 */ - {121, 205, 205, 1467}, /* DarkSlateGray3 */ - {82, 139, 139, 1482}, /* DarkSlateGray4 */ - {47, 79, 79, 1497}, /* DarkSlateGrey */ - {0, 206, 209, 1511}, /* DarkTurquoise */ - {148, 0, 211, 1525}, /* DarkViolet */ - {255, 20, 147, 1536}, /* deep pink */ - {0, 191, 255, 1546}, /* deep sky blue */ - {255, 20, 147, 1560}, /* DeepPink */ - {255, 20, 147, 1569}, /* DeepPink1 */ - {238, 18, 137, 1579}, /* DeepPink2 */ - {205, 16, 118, 1589}, /* DeepPink3 */ - {139, 10, 80, 1599}, /* DeepPink4 */ - {0, 191, 255, 1609}, /* DeepSkyBlue */ - {0, 191, 255, 1621}, /* DeepSkyBlue1 */ - {0, 178, 238, 1634}, /* DeepSkyBlue2 */ - {0, 154, 205, 1647}, /* DeepSkyBlue3 */ - {0, 104, 139, 1660}, /* DeepSkyBlue4 */ - {105, 105, 105, 1673}, /* dim gray */ - {105, 105, 105, 1682}, /* dim grey */ - {105, 105, 105, 1691}, /* DimGray */ - {105, 105, 105, 1699}, /* DimGrey */ - {30, 144, 255, 1707}, /* dodger blue */ - {30, 144, 255, 1719}, /* DodgerBlue */ - {30, 144, 255, 1730}, /* DodgerBlue1 */ - {28, 134, 238, 1742}, /* DodgerBlue2 */ - {24, 116, 205, 1754}, /* DodgerBlue3 */ - {16, 78, 139, 1766}, /* DodgerBlue4 */ - {178, 34, 34, 1778}, /* firebrick */ - {255, 48, 48, 1788}, /* firebrick1 */ - {238, 44, 44, 1799}, /* firebrick2 */ - {205, 38, 38, 1810}, /* firebrick3 */ - {139, 26, 26, 1821}, /* firebrick4 */ - {255, 250, 240, 1832}, /* floral white */ - {255, 250, 240, 1845}, /* FloralWhite */ - {34, 139, 34, 1857}, /* forest green */ - {34, 139, 34, 1870}, /* ForestGreen */ - {220, 220, 220, 1882}, /* gainsboro */ - {248, 248, 255, 1892}, /* ghost white */ - {248, 248, 255, 1904}, /* GhostWhite */ - {255, 215, 0, 1915}, /* gold */ - {255, 215, 0, 1920}, /* gold1 */ - {238, 201, 0, 1926}, /* gold2 */ - {205, 173, 0, 1932}, /* gold3 */ - {139, 117, 0, 1938}, /* gold4 */ - {218, 165, 32, 1944}, /* goldenrod */ - {255, 193, 37, 1954}, /* goldenrod1 */ - {238, 180, 34, 1965}, /* goldenrod2 */ - {205, 155, 29, 1976}, /* goldenrod3 */ - {139, 105, 20, 1987}, /* goldenrod4 */ - {190, 190, 190, 1998}, /* gray */ - {0, 0, 0, 2003}, /* gray0 */ - {3, 3, 3, 2009}, /* gray1 */ - {26, 26, 26, 2015}, /* gray10 */ - {255, 255, 255, 2022}, /* gray100 */ - {28, 28, 28, 2030}, /* gray11 */ - {31, 31, 31, 2037}, /* gray12 */ - {33, 33, 33, 2044}, /* gray13 */ - {36, 36, 36, 2051}, /* gray14 */ - {38, 38, 38, 2058}, /* gray15 */ - {41, 41, 41, 2065}, /* gray16 */ - {43, 43, 43, 2072}, /* gray17 */ - {46, 46, 46, 2079}, /* gray18 */ - {48, 48, 48, 2086}, /* gray19 */ - {5, 5, 5, 2093}, /* gray2 */ - {51, 51, 51, 2099}, /* gray20 */ - {54, 54, 54, 2106}, /* gray21 */ - {56, 56, 56, 2113}, /* gray22 */ - {59, 59, 59, 2120}, /* gray23 */ - {61, 61, 61, 2127}, /* gray24 */ - {64, 64, 64, 2134}, /* gray25 */ - {66, 66, 66, 2141}, /* gray26 */ - {69, 69, 69, 2148}, /* gray27 */ - {71, 71, 71, 2155}, /* gray28 */ - {74, 74, 74, 2162}, /* gray29 */ - {8, 8, 8, 2169}, /* gray3 */ - {77, 77, 77, 2175}, /* gray30 */ - {79, 79, 79, 2182}, /* gray31 */ - {82, 82, 82, 2189}, /* gray32 */ - {84, 84, 84, 2196}, /* gray33 */ - {87, 87, 87, 2203}, /* gray34 */ - {89, 89, 89, 2210}, /* gray35 */ - {92, 92, 92, 2217}, /* gray36 */ - {94, 94, 94, 2224}, /* gray37 */ - {97, 97, 97, 2231}, /* gray38 */ - {99, 99, 99, 2238}, /* gray39 */ - {10, 10, 10, 2245}, /* gray4 */ - {102, 102, 102, 2251}, /* gray40 */ - {105, 105, 105, 2258}, /* gray41 */ - {107, 107, 107, 2265}, /* gray42 */ - {110, 110, 110, 2272}, /* gray43 */ - {112, 112, 112, 2279}, /* gray44 */ - {115, 115, 115, 2286}, /* gray45 */ - {117, 117, 117, 2293}, /* gray46 */ - {120, 120, 120, 2300}, /* gray47 */ - {122, 122, 122, 2307}, /* gray48 */ - {125, 125, 125, 2314}, /* gray49 */ - {13, 13, 13, 2321}, /* gray5 */ - {127, 127, 127, 2327}, /* gray50 */ - {130, 130, 130, 2334}, /* gray51 */ - {133, 133, 133, 2341}, /* gray52 */ - {135, 135, 135, 2348}, /* gray53 */ - {138, 138, 138, 2355}, /* gray54 */ - {140, 140, 140, 2362}, /* gray55 */ - {143, 143, 143, 2369}, /* gray56 */ - {145, 145, 145, 2376}, /* gray57 */ - {148, 148, 148, 2383}, /* gray58 */ - {150, 150, 150, 2390}, /* gray59 */ - {15, 15, 15, 2397}, /* gray6 */ - {153, 153, 153, 2403}, /* gray60 */ - {156, 156, 156, 2410}, /* gray61 */ - {158, 158, 158, 2417}, /* gray62 */ - {161, 161, 161, 2424}, /* gray63 */ - {163, 163, 163, 2431}, /* gray64 */ - {166, 166, 166, 2438}, /* gray65 */ - {168, 168, 168, 2445}, /* gray66 */ - {171, 171, 171, 2452}, /* gray67 */ - {173, 173, 173, 2459}, /* gray68 */ - {176, 176, 176, 2466}, /* gray69 */ - {18, 18, 18, 2473}, /* gray7 */ - {179, 179, 179, 2479}, /* gray70 */ - {181, 181, 181, 2486}, /* gray71 */ - {184, 184, 184, 2493}, /* gray72 */ - {186, 186, 186, 2500}, /* gray73 */ - {189, 189, 189, 2507}, /* gray74 */ - {191, 191, 191, 2514}, /* gray75 */ - {194, 194, 194, 2521}, /* gray76 */ - {196, 196, 196, 2528}, /* gray77 */ - {199, 199, 199, 2535}, /* gray78 */ - {201, 201, 201, 2542}, /* gray79 */ - {20, 20, 20, 2549}, /* gray8 */ - {204, 204, 204, 2555}, /* gray80 */ - {207, 207, 207, 2562}, /* gray81 */ - {209, 209, 209, 2569}, /* gray82 */ - {212, 212, 212, 2576}, /* gray83 */ - {214, 214, 214, 2583}, /* gray84 */ - {217, 217, 217, 2590}, /* gray85 */ - {219, 219, 219, 2597}, /* gray86 */ - {222, 222, 222, 2604}, /* gray87 */ - {224, 224, 224, 2611}, /* gray88 */ - {227, 227, 227, 2618}, /* gray89 */ - {23, 23, 23, 2625}, /* gray9 */ - {229, 229, 229, 2631}, /* gray90 */ - {232, 232, 232, 2638}, /* gray91 */ - {235, 235, 235, 2645}, /* gray92 */ - {237, 237, 237, 2652}, /* gray93 */ - {240, 240, 240, 2659}, /* gray94 */ - {242, 242, 242, 2666}, /* gray95 */ - {245, 245, 245, 2673}, /* gray96 */ - {247, 247, 247, 2680}, /* gray97 */ - {250, 250, 250, 2687}, /* gray98 */ - {252, 252, 252, 2694}, /* gray99 */ - {0, 255, 0, 2701}, /* green */ - {173, 255, 47, 2707}, /* green yellow */ - {0, 255, 0, 2720}, /* green1 */ - {0, 238, 0, 2727}, /* green2 */ - {0, 205, 0, 2734}, /* green3 */ - {0, 139, 0, 2741}, /* green4 */ - {173, 255, 47, 2748}, /* GreenYellow */ - {190, 190, 190, 2760}, /* grey */ - {0, 0, 0, 2765}, /* grey0 */ - {3, 3, 3, 2771}, /* grey1 */ - {26, 26, 26, 2777}, /* grey10 */ - {255, 255, 255, 2784}, /* grey100 */ - {28, 28, 28, 2792}, /* grey11 */ - {31, 31, 31, 2799}, /* grey12 */ - {33, 33, 33, 2806}, /* grey13 */ - {36, 36, 36, 2813}, /* grey14 */ - {38, 38, 38, 2820}, /* grey15 */ - {41, 41, 41, 2827}, /* grey16 */ - {43, 43, 43, 2834}, /* grey17 */ - {46, 46, 46, 2841}, /* grey18 */ - {48, 48, 48, 2848}, /* grey19 */ - {5, 5, 5, 2855}, /* grey2 */ - {51, 51, 51, 2861}, /* grey20 */ - {54, 54, 54, 2868}, /* grey21 */ - {56, 56, 56, 2875}, /* grey22 */ - {59, 59, 59, 2882}, /* grey23 */ - {61, 61, 61, 2889}, /* grey24 */ - {64, 64, 64, 2896}, /* grey25 */ - {66, 66, 66, 2903}, /* grey26 */ - {69, 69, 69, 2910}, /* grey27 */ - {71, 71, 71, 2917}, /* grey28 */ - {74, 74, 74, 2924}, /* grey29 */ - {8, 8, 8, 2931}, /* grey3 */ - {77, 77, 77, 2937}, /* grey30 */ - {79, 79, 79, 2944}, /* grey31 */ - {82, 82, 82, 2951}, /* grey32 */ - {84, 84, 84, 2958}, /* grey33 */ - {87, 87, 87, 2965}, /* grey34 */ - {89, 89, 89, 2972}, /* grey35 */ - {92, 92, 92, 2979}, /* grey36 */ - {94, 94, 94, 2986}, /* grey37 */ - {97, 97, 97, 2993}, /* grey38 */ - {99, 99, 99, 3000}, /* grey39 */ - {10, 10, 10, 3007}, /* grey4 */ - {102, 102, 102, 3013}, /* grey40 */ - {105, 105, 105, 3020}, /* grey41 */ - {107, 107, 107, 3027}, /* grey42 */ - {110, 110, 110, 3034}, /* grey43 */ - {112, 112, 112, 3041}, /* grey44 */ - {115, 115, 115, 3048}, /* grey45 */ - {117, 117, 117, 3055}, /* grey46 */ - {120, 120, 120, 3062}, /* grey47 */ - {122, 122, 122, 3069}, /* grey48 */ - {125, 125, 125, 3076}, /* grey49 */ - {13, 13, 13, 3083}, /* grey5 */ - {127, 127, 127, 3089}, /* grey50 */ - {130, 130, 130, 3096}, /* grey51 */ - {133, 133, 133, 3103}, /* grey52 */ - {135, 135, 135, 3110}, /* grey53 */ - {138, 138, 138, 3117}, /* grey54 */ - {140, 140, 140, 3124}, /* grey55 */ - {143, 143, 143, 3131}, /* grey56 */ - {145, 145, 145, 3138}, /* grey57 */ - {148, 148, 148, 3145}, /* grey58 */ - {150, 150, 150, 3152}, /* grey59 */ - {15, 15, 15, 3159}, /* grey6 */ - {153, 153, 153, 3165}, /* grey60 */ - {156, 156, 156, 3172}, /* grey61 */ - {158, 158, 158, 3179}, /* grey62 */ - {161, 161, 161, 3186}, /* grey63 */ - {163, 163, 163, 3193}, /* grey64 */ - {166, 166, 166, 3200}, /* grey65 */ - {168, 168, 168, 3207}, /* grey66 */ - {171, 171, 171, 3214}, /* grey67 */ - {173, 173, 173, 3221}, /* grey68 */ - {176, 176, 176, 3228}, /* grey69 */ - {18, 18, 18, 3235}, /* grey7 */ - {179, 179, 179, 3241}, /* grey70 */ - {181, 181, 181, 3248}, /* grey71 */ - {184, 184, 184, 3255}, /* grey72 */ - {186, 186, 186, 3262}, /* grey73 */ - {189, 189, 189, 3269}, /* grey74 */ - {191, 191, 191, 3276}, /* grey75 */ - {194, 194, 194, 3283}, /* grey76 */ - {196, 196, 196, 3290}, /* grey77 */ - {199, 199, 199, 3297}, /* grey78 */ - {201, 201, 201, 3304}, /* grey79 */ - {20, 20, 20, 3311}, /* grey8 */ - {204, 204, 204, 3317}, /* grey80 */ - {207, 207, 207, 3324}, /* grey81 */ - {209, 209, 209, 3331}, /* grey82 */ - {212, 212, 212, 3338}, /* grey83 */ - {214, 214, 214, 3345}, /* grey84 */ - {217, 217, 217, 3352}, /* grey85 */ - {219, 219, 219, 3359}, /* grey86 */ - {222, 222, 222, 3366}, /* grey87 */ - {224, 224, 224, 3373}, /* grey88 */ - {227, 227, 227, 3380}, /* grey89 */ - {23, 23, 23, 3387}, /* grey9 */ - {229, 229, 229, 3393}, /* grey90 */ - {232, 232, 232, 3400}, /* grey91 */ - {235, 235, 235, 3407}, /* grey92 */ - {237, 237, 237, 3414}, /* grey93 */ - {240, 240, 240, 3421}, /* grey94 */ - {242, 242, 242, 3428}, /* grey95 */ - {245, 245, 245, 3435}, /* grey96 */ - {247, 247, 247, 3442}, /* grey97 */ - {250, 250, 250, 3449}, /* grey98 */ - {252, 252, 252, 3456}, /* grey99 */ - {240, 255, 240, 3463}, /* honeydew */ - {240, 255, 240, 3472}, /* honeydew1 */ - {224, 238, 224, 3482}, /* honeydew2 */ - {193, 205, 193, 3492}, /* honeydew3 */ - {131, 139, 131, 3502}, /* honeydew4 */ - {255, 105, 180, 3512}, /* hot pink */ - {255, 105, 180, 3521}, /* HotPink */ - {255, 110, 180, 3529}, /* HotPink1 */ - {238, 106, 167, 3538}, /* HotPink2 */ - {205, 96, 144, 3547}, /* HotPink3 */ - {139, 58, 98, 3556}, /* HotPink4 */ - {205, 92, 92, 3565}, /* indian red */ - {205, 92, 92, 3576}, /* IndianRed */ - {255, 106, 106, 3586}, /* IndianRed1 */ - {238, 99, 99, 3597}, /* IndianRed2 */ - {205, 85, 85, 3608}, /* IndianRed3 */ - {139, 58, 58, 3619}, /* IndianRed4 */ - {255, 255, 240, 3630}, /* ivory */ - {255, 255, 240, 3636}, /* ivory1 */ - {238, 238, 224, 3643}, /* ivory2 */ - {205, 205, 193, 3650}, /* ivory3 */ - {139, 139, 131, 3657}, /* ivory4 */ - {240, 230, 140, 3664}, /* khaki */ - {255, 246, 143, 3670}, /* khaki1 */ - {238, 230, 133, 3677}, /* khaki2 */ - {205, 198, 115, 3684}, /* khaki3 */ - {139, 134, 78, 3691}, /* khaki4 */ - {230, 230, 250, 3698}, /* lavender */ - {255, 240, 245, 3707}, /* lavender blush */ - {255, 240, 245, 3722}, /* LavenderBlush */ - {255, 240, 245, 3736}, /* LavenderBlush1 */ - {238, 224, 229, 3751}, /* LavenderBlush2 */ - {205, 193, 197, 3766}, /* LavenderBlush3 */ - {139, 131, 134, 3781}, /* LavenderBlush4 */ - {124, 252, 0, 3796}, /* lawn green */ - {124, 252, 0, 3807}, /* LawnGreen */ - {255, 250, 205, 3817}, /* lemon chiffon */ - {255, 250, 205, 3831}, /* LemonChiffon */ - {255, 250, 205, 3844}, /* LemonChiffon1 */ - {238, 233, 191, 3858}, /* LemonChiffon2 */ - {205, 201, 165, 3872}, /* LemonChiffon3 */ - {139, 137, 112, 3886}, /* LemonChiffon4 */ - {173, 216, 230, 3900}, /* light blue */ - {240, 128, 128, 3911}, /* light coral */ - {224, 255, 255, 3923}, /* light cyan */ - {238, 221, 130, 3934}, /* light goldenrod */ - {250, 250, 210, 3950}, /* light goldenrod yellow */ - {211, 211, 211, 3973}, /* light gray */ - {144, 238, 144, 3984}, /* light green */ - {211, 211, 211, 3996}, /* light grey */ - {255, 182, 193, 4007}, /* light pink */ - {255, 160, 122, 4018}, /* light salmon */ - {32, 178, 170, 4031}, /* light sea green */ - {135, 206, 250, 4047}, /* light sky blue */ - {132, 112, 255, 4062}, /* light slate blue */ - {119, 136, 153, 4079}, /* light slate gray */ - {119, 136, 153, 4096}, /* light slate grey */ - {176, 196, 222, 4113}, /* light steel blue */ - {255, 255, 224, 4130}, /* light yellow */ - {173, 216, 230, 4143}, /* LightBlue */ - {191, 239, 255, 4153}, /* LightBlue1 */ - {178, 223, 238, 4164}, /* LightBlue2 */ - {154, 192, 205, 4175}, /* LightBlue3 */ - {104, 131, 139, 4186}, /* LightBlue4 */ - {240, 128, 128, 4197}, /* LightCoral */ - {224, 255, 255, 4208}, /* LightCyan */ - {224, 255, 255, 4218}, /* LightCyan1 */ - {209, 238, 238, 4229}, /* LightCyan2 */ - {180, 205, 205, 4240}, /* LightCyan3 */ - {122, 139, 139, 4251}, /* LightCyan4 */ - {238, 221, 130, 4262}, /* LightGoldenrod */ - {255, 236, 139, 4277}, /* LightGoldenrod1 */ - {238, 220, 130, 4293}, /* LightGoldenrod2 */ - {205, 190, 112, 4309}, /* LightGoldenrod3 */ - {139, 129, 76, 4325}, /* LightGoldenrod4 */ - {250, 250, 210, 4341}, /* LightGoldenrodYellow */ - {211, 211, 211, 4362}, /* LightGray */ - {144, 238, 144, 4372}, /* LightGreen */ - {211, 211, 211, 4383}, /* LightGrey */ - {255, 182, 193, 4393}, /* LightPink */ - {255, 174, 185, 4403}, /* LightPink1 */ - {238, 162, 173, 4414}, /* LightPink2 */ - {205, 140, 149, 4425}, /* LightPink3 */ - {139, 95, 101, 4436}, /* LightPink4 */ - {255, 160, 122, 4447}, /* LightSalmon */ - {255, 160, 122, 4459}, /* LightSalmon1 */ - {238, 149, 114, 4472}, /* LightSalmon2 */ - {205, 129, 98, 4485}, /* LightSalmon3 */ - {139, 87, 66, 4498}, /* LightSalmon4 */ - {32, 178, 170, 4511}, /* LightSeaGreen */ - {135, 206, 250, 4525}, /* LightSkyBlue */ - {176, 226, 255, 4538}, /* LightSkyBlue1 */ - {164, 211, 238, 4552}, /* LightSkyBlue2 */ - {141, 182, 205, 4566}, /* LightSkyBlue3 */ - {96, 123, 139, 4580}, /* LightSkyBlue4 */ - {132, 112, 255, 4594}, /* LightSlateBlue */ - {119, 136, 153, 4609}, /* LightSlateGray */ - {119, 136, 153, 4624}, /* LightSlateGrey */ - {176, 196, 222, 4639}, /* LightSteelBlue */ - {202, 225, 255, 4654}, /* LightSteelBlue1 */ - {188, 210, 238, 4670}, /* LightSteelBlue2 */ - {162, 181, 205, 4686}, /* LightSteelBlue3 */ - {110, 123, 139, 4702}, /* LightSteelBlue4 */ - {255, 255, 224, 4718}, /* LightYellow */ - {255, 255, 224, 4730}, /* LightYellow1 */ - {238, 238, 209, 4743}, /* LightYellow2 */ - {205, 205, 180, 4756}, /* LightYellow3 */ - {139, 139, 122, 4769}, /* LightYellow4 */ - {50, 205, 50, 4782}, /* lime green */ - {50, 205, 50, 4793}, /* LimeGreen */ - {250, 240, 230, 4803}, /* linen */ - {255, 0, 255, 4809}, /* magenta */ - {255, 0, 255, 4817}, /* magenta1 */ - {238, 0, 238, 4826}, /* magenta2 */ - {205, 0, 205, 4835}, /* magenta3 */ - {139, 0, 139, 4844}, /* magenta4 */ - {176, 48, 96, 4853}, /* maroon */ - {255, 52, 179, 4860}, /* maroon1 */ - {238, 48, 167, 4868}, /* maroon2 */ - {205, 41, 144, 4876}, /* maroon3 */ - {139, 28, 98, 4884}, /* maroon4 */ - {102, 205, 170, 4892}, /* medium aquamarine */ - {0, 0, 205, 4910}, /* medium blue */ - {186, 85, 211, 4922}, /* medium orchid */ - {147, 112, 219, 4936}, /* medium purple */ - {60, 179, 113, 4950}, /* medium sea green */ - {123, 104, 238, 4967}, /* medium slate blue */ - {0, 250, 154, 4985}, /* medium spring green */ - {72, 209, 204, 5005}, /* medium turquoise */ - {199, 21, 133, 5022}, /* medium violet red */ - {102, 205, 170, 5040}, /* MediumAquamarine */ - {0, 0, 205, 5057}, /* MediumBlue */ - {186, 85, 211, 5068}, /* MediumOrchid */ - {224, 102, 255, 5081}, /* MediumOrchid1 */ - {209, 95, 238, 5095}, /* MediumOrchid2 */ - {180, 82, 205, 5109}, /* MediumOrchid3 */ - {122, 55, 139, 5123}, /* MediumOrchid4 */ - {147, 112, 219, 5137}, /* MediumPurple */ - {171, 130, 255, 5150}, /* MediumPurple1 */ - {159, 121, 238, 5164}, /* MediumPurple2 */ - {137, 104, 205, 5178}, /* MediumPurple3 */ - {93, 71, 139, 5192}, /* MediumPurple4 */ - {60, 179, 113, 5206}, /* MediumSeaGreen */ - {123, 104, 238, 5221}, /* MediumSlateBlue */ - {0, 250, 154, 5237}, /* MediumSpringGreen */ - {72, 209, 204, 5255}, /* MediumTurquoise */ - {199, 21, 133, 5271}, /* MediumVioletRed */ - {25, 25, 112, 5287}, /* midnight blue */ - {25, 25, 112, 5301}, /* MidnightBlue */ - {245, 255, 250, 5314}, /* mint cream */ - {245, 255, 250, 5325}, /* MintCream */ - {255, 228, 225, 5335}, /* misty rose */ - {255, 228, 225, 5346}, /* MistyRose */ - {255, 228, 225, 5356}, /* MistyRose1 */ - {238, 213, 210, 5367}, /* MistyRose2 */ - {205, 183, 181, 5378}, /* MistyRose3 */ - {139, 125, 123, 5389}, /* MistyRose4 */ - {255, 228, 181, 5400}, /* moccasin */ - {255, 222, 173, 5409}, /* navajo white */ - {255, 222, 173, 5422}, /* NavajoWhite */ - {255, 222, 173, 5434}, /* NavajoWhite1 */ - {238, 207, 161, 5447}, /* NavajoWhite2 */ - {205, 179, 139, 5460}, /* NavajoWhite3 */ - {139, 121, 94, 5473}, /* NavajoWhite4 */ - {0, 0, 128, 5486}, /* navy */ - {0, 0, 128, 5491}, /* navy blue */ - {0, 0, 128, 5501}, /* NavyBlue */ - {253, 245, 230, 5510}, /* old lace */ - {253, 245, 230, 5519}, /* OldLace */ - {107, 142, 35, 5527}, /* olive drab */ - {107, 142, 35, 5538}, /* OliveDrab */ - {192, 255, 62, 5548}, /* OliveDrab1 */ - {179, 238, 58, 5559}, /* OliveDrab2 */ - {154, 205, 50, 5570}, /* OliveDrab3 */ - {105, 139, 34, 5581}, /* OliveDrab4 */ - {255, 165, 0, 5592}, /* orange */ - {255, 69, 0, 5599}, /* orange red */ - {255, 165, 0, 5610}, /* orange1 */ - {238, 154, 0, 5618}, /* orange2 */ - {205, 133, 0, 5626}, /* orange3 */ - {139, 90, 0, 5634}, /* orange4 */ - {255, 69, 0, 5642}, /* OrangeRed */ - {255, 69, 0, 5652}, /* OrangeRed1 */ - {238, 64, 0, 5663}, /* OrangeRed2 */ - {205, 55, 0, 5674}, /* OrangeRed3 */ - {139, 37, 0, 5685}, /* OrangeRed4 */ - {218, 112, 214, 5696}, /* orchid */ - {255, 131, 250, 5703}, /* orchid1 */ - {238, 122, 233, 5711}, /* orchid2 */ - {205, 105, 201, 5719}, /* orchid3 */ - {139, 71, 137, 5727}, /* orchid4 */ - {238, 232, 170, 5735}, /* pale goldenrod */ - {152, 251, 152, 5750}, /* pale green */ - {175, 238, 238, 5761}, /* pale turquoise */ - {219, 112, 147, 5776}, /* pale violet red */ - {238, 232, 170, 5792}, /* PaleGoldenrod */ - {152, 251, 152, 5806}, /* PaleGreen */ - {154, 255, 154, 5816}, /* PaleGreen1 */ - {144, 238, 144, 5827}, /* PaleGreen2 */ - {124, 205, 124, 5838}, /* PaleGreen3 */ - {84, 139, 84, 5849}, /* PaleGreen4 */ - {175, 238, 238, 5860}, /* PaleTurquoise */ - {187, 255, 255, 5874}, /* PaleTurquoise1 */ - {174, 238, 238, 5889}, /* PaleTurquoise2 */ - {150, 205, 205, 5904}, /* PaleTurquoise3 */ - {102, 139, 139, 5919}, /* PaleTurquoise4 */ - {219, 112, 147, 5934}, /* PaleVioletRed */ - {255, 130, 171, 5948}, /* PaleVioletRed1 */ - {238, 121, 159, 5963}, /* PaleVioletRed2 */ - {205, 104, 137, 5978}, /* PaleVioletRed3 */ - {139, 71, 93, 5993}, /* PaleVioletRed4 */ - {255, 239, 213, 6008}, /* papaya whip */ - {255, 239, 213, 6020}, /* PapayaWhip */ - {255, 218, 185, 6031}, /* peach puff */ - {255, 218, 185, 6042}, /* PeachPuff */ - {255, 218, 185, 6052}, /* PeachPuff1 */ - {238, 203, 173, 6063}, /* PeachPuff2 */ - {205, 175, 149, 6074}, /* PeachPuff3 */ - {139, 119, 101, 6085}, /* PeachPuff4 */ - {205, 133, 63, 6096}, /* peru */ - {255, 192, 203, 6101}, /* pink */ - {255, 181, 197, 6106}, /* pink1 */ - {238, 169, 184, 6112}, /* pink2 */ - {205, 145, 158, 6118}, /* pink3 */ - {139, 99, 108, 6124}, /* pink4 */ - {221, 160, 221, 6130}, /* plum */ - {255, 187, 255, 6135}, /* plum1 */ - {238, 174, 238, 6141}, /* plum2 */ - {205, 150, 205, 6147}, /* plum3 */ - {139, 102, 139, 6153}, /* plum4 */ - {176, 224, 230, 6159}, /* powder blue */ - {176, 224, 230, 6171}, /* PowderBlue */ - {160, 32, 240, 6182}, /* purple */ - {155, 48, 255, 6189}, /* purple1 */ - {145, 44, 238, 6197}, /* purple2 */ - {125, 38, 205, 6205}, /* purple3 */ - {85, 26, 139, 6213}, /* purple4 */ - {255, 0, 0, 6221}, /* red */ - {255, 0, 0, 6225}, /* red1 */ - {238, 0, 0, 6230}, /* red2 */ - {205, 0, 0, 6235}, /* red3 */ - {139, 0, 0, 6240}, /* red4 */ - {188, 143, 143, 6245}, /* rosy brown */ - {188, 143, 143, 6256}, /* RosyBrown */ - {255, 193, 193, 6266}, /* RosyBrown1 */ - {238, 180, 180, 6277}, /* RosyBrown2 */ - {205, 155, 155, 6288}, /* RosyBrown3 */ - {139, 105, 105, 6299}, /* RosyBrown4 */ - {65, 105, 225, 6310}, /* royal blue */ - {65, 105, 225, 6321}, /* RoyalBlue */ - {72, 118, 255, 6331}, /* RoyalBlue1 */ - {67, 110, 238, 6342}, /* RoyalBlue2 */ - {58, 95, 205, 6353}, /* RoyalBlue3 */ - {39, 64, 139, 6364}, /* RoyalBlue4 */ - {139, 69, 19, 6375}, /* saddle brown */ - {139, 69, 19, 6388}, /* SaddleBrown */ - {250, 128, 114, 6400}, /* salmon */ - {255, 140, 105, 6407}, /* salmon1 */ - {238, 130, 98, 6415}, /* salmon2 */ - {205, 112, 84, 6423}, /* salmon3 */ - {139, 76, 57, 6431}, /* salmon4 */ - {244, 164, 96, 6439}, /* sandy brown */ - {244, 164, 96, 6451}, /* SandyBrown */ - {46, 139, 87, 6462}, /* sea green */ - {46, 139, 87, 6472}, /* SeaGreen */ - {84, 255, 159, 6481}, /* SeaGreen1 */ - {78, 238, 148, 6491}, /* SeaGreen2 */ - {67, 205, 128, 6501}, /* SeaGreen3 */ - {46, 139, 87, 6511}, /* SeaGreen4 */ - {255, 245, 238, 6521}, /* seashell */ - {255, 245, 238, 6530}, /* seashell1 */ - {238, 229, 222, 6540}, /* seashell2 */ - {205, 197, 191, 6550}, /* seashell3 */ - {139, 134, 130, 6560}, /* seashell4 */ - {160, 82, 45, 6570}, /* sienna */ - {255, 130, 71, 6577}, /* sienna1 */ - {238, 121, 66, 6585}, /* sienna2 */ - {205, 104, 57, 6593}, /* sienna3 */ - {139, 71, 38, 6601}, /* sienna4 */ - {135, 206, 235, 6609}, /* sky blue */ - {135, 206, 235, 6618}, /* SkyBlue */ - {135, 206, 255, 6626}, /* SkyBlue1 */ - {126, 192, 238, 6635}, /* SkyBlue2 */ - {108, 166, 205, 6644}, /* SkyBlue3 */ - {74, 112, 139, 6653}, /* SkyBlue4 */ - {106, 90, 205, 6662}, /* slate blue */ - {112, 128, 144, 6673}, /* slate gray */ - {112, 128, 144, 6684}, /* slate grey */ - {106, 90, 205, 6695}, /* SlateBlue */ - {131, 111, 255, 6705}, /* SlateBlue1 */ - {122, 103, 238, 6716}, /* SlateBlue2 */ - {105, 89, 205, 6727}, /* SlateBlue3 */ - {71, 60, 139, 6738}, /* SlateBlue4 */ - {112, 128, 144, 6749}, /* SlateGray */ - {198, 226, 255, 6759}, /* SlateGray1 */ - {185, 211, 238, 6770}, /* SlateGray2 */ - {159, 182, 205, 6781}, /* SlateGray3 */ - {108, 123, 139, 6792}, /* SlateGray4 */ - {112, 128, 144, 6803}, /* SlateGrey */ - {255, 250, 250, 6813}, /* snow */ - {255, 250, 250, 6818}, /* snow1 */ - {238, 233, 233, 6824}, /* snow2 */ - {205, 201, 201, 6830}, /* snow3 */ - {139, 137, 137, 6836}, /* snow4 */ - {0, 255, 127, 6842}, /* spring green */ - {0, 255, 127, 6855}, /* SpringGreen */ - {0, 255, 127, 6867}, /* SpringGreen1 */ - {0, 238, 118, 6880}, /* SpringGreen2 */ - {0, 205, 102, 6893}, /* SpringGreen3 */ - {0, 139, 69, 6906}, /* SpringGreen4 */ - {70, 130, 180, 6919}, /* steel blue */ - {70, 130, 180, 6930}, /* SteelBlue */ - {99, 184, 255, 6940}, /* SteelBlue1 */ - {92, 172, 238, 6951}, /* SteelBlue2 */ - {79, 148, 205, 6962}, /* SteelBlue3 */ - {54, 100, 139, 6973}, /* SteelBlue4 */ - {210, 180, 140, 6984}, /* tan */ - {255, 165, 79, 6988}, /* tan1 */ - {238, 154, 73, 6993}, /* tan2 */ - {205, 133, 63, 6998}, /* tan3 */ - {139, 90, 43, 7003}, /* tan4 */ - {216, 191, 216, 7008}, /* thistle */ - {255, 225, 255, 7016}, /* thistle1 */ - {238, 210, 238, 7025}, /* thistle2 */ - {205, 181, 205, 7034}, /* thistle3 */ - {139, 123, 139, 7043}, /* thistle4 */ - {255, 99, 71, 7052}, /* tomato */ - {255, 99, 71, 7059}, /* tomato1 */ - {238, 92, 66, 7067}, /* tomato2 */ - {205, 79, 57, 7075}, /* tomato3 */ - {139, 54, 38, 7083}, /* tomato4 */ - {64, 224, 208, 7091}, /* turquoise */ - {0, 245, 255, 7101}, /* turquoise1 */ - {0, 229, 238, 7112}, /* turquoise2 */ - {0, 197, 205, 7123}, /* turquoise3 */ - {0, 134, 139, 7134}, /* turquoise4 */ - {238, 130, 238, 7145}, /* violet */ - {208, 32, 144, 7152}, /* violet red */ - {208, 32, 144, 7163}, /* VioletRed */ - {255, 62, 150, 7173}, /* VioletRed1 */ - {238, 58, 140, 7184}, /* VioletRed2 */ - {205, 50, 120, 7195}, /* VioletRed3 */ - {139, 34, 82, 7206}, /* VioletRed4 */ - {245, 222, 179, 7217}, /* wheat */ - {255, 231, 186, 7223}, /* wheat1 */ - {238, 216, 174, 7230}, /* wheat2 */ - {205, 186, 150, 7237}, /* wheat3 */ - {139, 126, 102, 7244}, /* wheat4 */ - {255, 255, 255, 7251}, /* white */ - {245, 245, 245, 7257}, /* white smoke */ - {245, 245, 245, 7269}, /* WhiteSmoke */ - {255, 255, 0, 7280}, /* yellow */ - {154, 205, 50, 7287}, /* yellow green */ - {255, 255, 0, 7300}, /* yellow1 */ - {238, 238, 0, 7308}, /* yellow2 */ - {205, 205, 0, 7316}, /* yellow3 */ - {139, 139, 0, 7324}, /* yellow4 */ - {154, 205, 50, 7332}, /* YellowGreen */ + {0, 255, 255, 104}, /* aqua */ + {127, 255, 212, 109}, /* aquamarine */ + {127, 255, 212, 120}, /* aquamarine1 */ + {118, 238, 198, 132}, /* aquamarine2 */ + {102, 205, 170, 144}, /* aquamarine3 */ + {69, 139, 116, 156}, /* aquamarine4 */ + {240, 255, 255, 168}, /* azure */ + {240, 255, 255, 174}, /* azure1 */ + {224, 238, 238, 181}, /* azure2 */ + {193, 205, 205, 188}, /* azure3 */ + {131, 139, 139, 195}, /* azure4 */ + {245, 245, 220, 202}, /* beige */ + {255, 228, 196, 208}, /* bisque */ + {255, 228, 196, 215}, /* bisque1 */ + {238, 213, 183, 223}, /* bisque2 */ + {205, 183, 158, 231}, /* bisque3 */ + {139, 125, 107, 239}, /* bisque4 */ + {0, 0, 0, 247}, /* black */ + {255, 235, 205, 253}, /* blanched almond */ + {255, 235, 205, 269}, /* BlanchedAlmond */ + {0, 0, 255, 284}, /* blue */ + {138, 43, 226, 289}, /* blue violet */ + {0, 0, 255, 301}, /* blue1 */ + {0, 0, 238, 307}, /* blue2 */ + {0, 0, 205, 313}, /* blue3 */ + {0, 0, 139, 319}, /* blue4 */ + {138, 43, 226, 325}, /* BlueViolet */ + {165, 42, 42, 336}, /* brown */ + {255, 64, 64, 342}, /* brown1 */ + {238, 59, 59, 349}, /* brown2 */ + {205, 51, 51, 356}, /* brown3 */ + {139, 35, 35, 363}, /* brown4 */ + {222, 184, 135, 370}, /* burlywood */ + {255, 211, 155, 380}, /* burlywood1 */ + {238, 197, 145, 391}, /* burlywood2 */ + {205, 170, 125, 402}, /* burlywood3 */ + {139, 115, 85, 413}, /* burlywood4 */ + {95, 158, 160, 424}, /* cadet blue */ + {95, 158, 160, 435}, /* CadetBlue */ + {152, 245, 255, 445}, /* CadetBlue1 */ + {142, 229, 238, 456}, /* CadetBlue2 */ + {122, 197, 205, 467}, /* CadetBlue3 */ + {83, 134, 139, 478}, /* CadetBlue4 */ + {127, 255, 0, 489}, /* chartreuse */ + {127, 255, 0, 500}, /* chartreuse1 */ + {118, 238, 0, 512}, /* chartreuse2 */ + {102, 205, 0, 524}, /* chartreuse3 */ + {69, 139, 0, 536}, /* chartreuse4 */ + {210, 105, 30, 548}, /* chocolate */ + {255, 127, 36, 558}, /* chocolate1 */ + {238, 118, 33, 569}, /* chocolate2 */ + {205, 102, 29, 580}, /* chocolate3 */ + {139, 69, 19, 591}, /* chocolate4 */ + {255, 127, 80, 602}, /* coral */ + {255, 114, 86, 608}, /* coral1 */ + {238, 106, 80, 615}, /* coral2 */ + {205, 91, 69, 622}, /* coral3 */ + {139, 62, 47, 629}, /* coral4 */ + {100, 149, 237, 636}, /* cornflower blue */ + {100, 149, 237, 652}, /* CornflowerBlue */ + {255, 248, 220, 667}, /* cornsilk */ + {255, 248, 220, 676}, /* cornsilk1 */ + {238, 232, 205, 686}, /* cornsilk2 */ + {205, 200, 177, 696}, /* cornsilk3 */ + {139, 136, 120, 706}, /* cornsilk4 */ + {220, 20, 60, 716}, /* crimson */ + {0, 255, 255, 724}, /* cyan */ + {0, 255, 255, 729}, /* cyan1 */ + {0, 238, 238, 735}, /* cyan2 */ + {0, 205, 205, 741}, /* cyan3 */ + {0, 139, 139, 747}, /* cyan4 */ + {0, 0, 139, 753}, /* dark blue */ + {0, 139, 139, 763}, /* dark cyan */ + {184, 134, 11, 773}, /* dark goldenrod */ + {169, 169, 169, 788}, /* dark gray */ + {0, 100, 0, 798}, /* dark green */ + {169, 169, 169, 809}, /* dark grey */ + {189, 183, 107, 819}, /* dark khaki */ + {139, 0, 139, 830}, /* dark magenta */ + {85, 107, 47, 843}, /* dark olive green */ + {255, 140, 0, 860}, /* dark orange */ + {153, 50, 204, 872}, /* dark orchid */ + {139, 0, 0, 884}, /* dark red */ + {233, 150, 122, 893}, /* dark salmon */ + {143, 188, 143, 905}, /* dark sea green */ + {72, 61, 139, 920}, /* dark slate blue */ + {47, 79, 79, 936}, /* dark slate gray */ + {47, 79, 79, 952}, /* dark slate grey */ + {0, 206, 209, 968}, /* dark turquoise */ + {148, 0, 211, 983}, /* dark violet */ + {0, 0, 139, 995}, /* DarkBlue */ + {0, 139, 139, 1004}, /* DarkCyan */ + {184, 134, 11, 1013}, /* DarkGoldenrod */ + {255, 185, 15, 1027}, /* DarkGoldenrod1 */ + {238, 173, 14, 1042}, /* DarkGoldenrod2 */ + {205, 149, 12, 1057}, /* DarkGoldenrod3 */ + {139, 101, 8, 1072}, /* DarkGoldenrod4 */ + {169, 169, 169, 1087}, /* DarkGray */ + {0, 100, 0, 1096}, /* DarkGreen */ + {169, 169, 169, 1106}, /* DarkGrey */ + {189, 183, 107, 1115}, /* DarkKhaki */ + {139, 0, 139, 1125}, /* DarkMagenta */ + {85, 107, 47, 1137}, /* DarkOliveGreen */ + {202, 255, 112, 1152}, /* DarkOliveGreen1 */ + {188, 238, 104, 1168}, /* DarkOliveGreen2 */ + {162, 205, 90, 1184}, /* DarkOliveGreen3 */ + {110, 139, 61, 1200}, /* DarkOliveGreen4 */ + {255, 140, 0, 1216}, /* DarkOrange */ + {255, 127, 0, 1227}, /* DarkOrange1 */ + {238, 118, 0, 1239}, /* DarkOrange2 */ + {205, 102, 0, 1251}, /* DarkOrange3 */ + {139, 69, 0, 1263}, /* DarkOrange4 */ + {153, 50, 204, 1275}, /* DarkOrchid */ + {191, 62, 255, 1286}, /* DarkOrchid1 */ + {178, 58, 238, 1298}, /* DarkOrchid2 */ + {154, 50, 205, 1310}, /* DarkOrchid3 */ + {104, 34, 139, 1322}, /* DarkOrchid4 */ + {139, 0, 0, 1334}, /* DarkRed */ + {233, 150, 122, 1342}, /* DarkSalmon */ + {143, 188, 143, 1353}, /* DarkSeaGreen */ + {193, 255, 193, 1366}, /* DarkSeaGreen1 */ + {180, 238, 180, 1380}, /* DarkSeaGreen2 */ + {155, 205, 155, 1394}, /* DarkSeaGreen3 */ + {105, 139, 105, 1408}, /* DarkSeaGreen4 */ + {72, 61, 139, 1422}, /* DarkSlateBlue */ + {47, 79, 79, 1436}, /* DarkSlateGray */ + {151, 255, 255, 1450}, /* DarkSlateGray1 */ + {141, 238, 238, 1465}, /* DarkSlateGray2 */ + {121, 205, 205, 1480}, /* DarkSlateGray3 */ + {82, 139, 139, 1495}, /* DarkSlateGray4 */ + {47, 79, 79, 1510}, /* DarkSlateGrey */ + {0, 206, 209, 1524}, /* DarkTurquoise */ + {148, 0, 211, 1538}, /* DarkViolet */ + {255, 20, 147, 1549}, /* deep pink */ + {0, 191, 255, 1559}, /* deep sky blue */ + {255, 20, 147, 1573}, /* DeepPink */ + {255, 20, 147, 1582}, /* DeepPink1 */ + {238, 18, 137, 1592}, /* DeepPink2 */ + {205, 16, 118, 1602}, /* DeepPink3 */ + {139, 10, 80, 1612}, /* DeepPink4 */ + {0, 191, 255, 1622}, /* DeepSkyBlue */ + {0, 191, 255, 1634}, /* DeepSkyBlue1 */ + {0, 178, 238, 1647}, /* DeepSkyBlue2 */ + {0, 154, 205, 1660}, /* DeepSkyBlue3 */ + {0, 104, 139, 1673}, /* DeepSkyBlue4 */ + {105, 105, 105, 1686}, /* dim gray */ + {105, 105, 105, 1695}, /* dim grey */ + {105, 105, 105, 1704}, /* DimGray */ + {105, 105, 105, 1712}, /* DimGrey */ + {30, 144, 255, 1720}, /* dodger blue */ + {30, 144, 255, 1732}, /* DodgerBlue */ + {30, 144, 255, 1743}, /* DodgerBlue1 */ + {28, 134, 238, 1755}, /* DodgerBlue2 */ + {24, 116, 205, 1767}, /* DodgerBlue3 */ + {16, 78, 139, 1779}, /* DodgerBlue4 */ + {178, 34, 34, 1791}, /* firebrick */ + {255, 48, 48, 1801}, /* firebrick1 */ + {238, 44, 44, 1812}, /* firebrick2 */ + {205, 38, 38, 1823}, /* firebrick3 */ + {139, 26, 26, 1834}, /* firebrick4 */ + {255, 250, 240, 1845}, /* floral white */ + {255, 250, 240, 1858}, /* FloralWhite */ + {34, 139, 34, 1870}, /* forest green */ + {34, 139, 34, 1883}, /* ForestGreen */ + {255, 0, 255, 1895}, /* fuchsia */ + {220, 220, 220, 1903}, /* gainsboro */ + {248, 248, 255, 1913}, /* ghost white */ + {248, 248, 255, 1925}, /* GhostWhite */ + {255, 215, 0, 1936}, /* gold */ + {255, 215, 0, 1941}, /* gold1 */ + {238, 201, 0, 1947}, /* gold2 */ + {205, 173, 0, 1953}, /* gold3 */ + {139, 117, 0, 1959}, /* gold4 */ + {218, 165, 32, 1965}, /* goldenrod */ + {255, 193, 37, 1975}, /* goldenrod1 */ + {238, 180, 34, 1986}, /* goldenrod2 */ + {205, 155, 29, 1997}, /* goldenrod3 */ + {139, 105, 20, 2008}, /* goldenrod4 */ + {190, 190, 190, 2019}, /* gray */ + {0, 0, 0, 2024}, /* gray0 */ + {3, 3, 3, 2030}, /* gray1 */ + {26, 26, 26, 2036}, /* gray10 */ + {255, 255, 255, 2043}, /* gray100 */ + {28, 28, 28, 2051}, /* gray11 */ + {31, 31, 31, 2058}, /* gray12 */ + {33, 33, 33, 2065}, /* gray13 */ + {36, 36, 36, 2072}, /* gray14 */ + {38, 38, 38, 2079}, /* gray15 */ + {41, 41, 41, 2086}, /* gray16 */ + {43, 43, 43, 2093}, /* gray17 */ + {46, 46, 46, 2100}, /* gray18 */ + {48, 48, 48, 2107}, /* gray19 */ + {5, 5, 5, 2114}, /* gray2 */ + {51, 51, 51, 2120}, /* gray20 */ + {54, 54, 54, 2127}, /* gray21 */ + {56, 56, 56, 2134}, /* gray22 */ + {59, 59, 59, 2141}, /* gray23 */ + {61, 61, 61, 2148}, /* gray24 */ + {64, 64, 64, 2155}, /* gray25 */ + {66, 66, 66, 2162}, /* gray26 */ + {69, 69, 69, 2169}, /* gray27 */ + {71, 71, 71, 2176}, /* gray28 */ + {74, 74, 74, 2183}, /* gray29 */ + {8, 8, 8, 2190}, /* gray3 */ + {77, 77, 77, 2196}, /* gray30 */ + {79, 79, 79, 2203}, /* gray31 */ + {82, 82, 82, 2210}, /* gray32 */ + {84, 84, 84, 2217}, /* gray33 */ + {87, 87, 87, 2224}, /* gray34 */ + {89, 89, 89, 2231}, /* gray35 */ + {92, 92, 92, 2238}, /* gray36 */ + {94, 94, 94, 2245}, /* gray37 */ + {97, 97, 97, 2252}, /* gray38 */ + {99, 99, 99, 2259}, /* gray39 */ + {10, 10, 10, 2266}, /* gray4 */ + {102, 102, 102, 2272}, /* gray40 */ + {105, 105, 105, 2279}, /* gray41 */ + {107, 107, 107, 2286}, /* gray42 */ + {110, 110, 110, 2293}, /* gray43 */ + {112, 112, 112, 2300}, /* gray44 */ + {115, 115, 115, 2307}, /* gray45 */ + {117, 117, 117, 2314}, /* gray46 */ + {120, 120, 120, 2321}, /* gray47 */ + {122, 122, 122, 2328}, /* gray48 */ + {125, 125, 125, 2335}, /* gray49 */ + {13, 13, 13, 2342}, /* gray5 */ + {127, 127, 127, 2348}, /* gray50 */ + {130, 130, 130, 2355}, /* gray51 */ + {133, 133, 133, 2362}, /* gray52 */ + {135, 135, 135, 2369}, /* gray53 */ + {138, 138, 138, 2376}, /* gray54 */ + {140, 140, 140, 2383}, /* gray55 */ + {143, 143, 143, 2390}, /* gray56 */ + {145, 145, 145, 2397}, /* gray57 */ + {148, 148, 148, 2404}, /* gray58 */ + {150, 150, 150, 2411}, /* gray59 */ + {15, 15, 15, 2418}, /* gray6 */ + {153, 153, 153, 2424}, /* gray60 */ + {156, 156, 156, 2431}, /* gray61 */ + {158, 158, 158, 2438}, /* gray62 */ + {161, 161, 161, 2445}, /* gray63 */ + {163, 163, 163, 2452}, /* gray64 */ + {166, 166, 166, 2459}, /* gray65 */ + {168, 168, 168, 2466}, /* gray66 */ + {171, 171, 171, 2473}, /* gray67 */ + {173, 173, 173, 2480}, /* gray68 */ + {176, 176, 176, 2487}, /* gray69 */ + {18, 18, 18, 2494}, /* gray7 */ + {179, 179, 179, 2500}, /* gray70 */ + {181, 181, 181, 2507}, /* gray71 */ + {184, 184, 184, 2514}, /* gray72 */ + {186, 186, 186, 2521}, /* gray73 */ + {189, 189, 189, 2528}, /* gray74 */ + {191, 191, 191, 2535}, /* gray75 */ + {194, 194, 194, 2542}, /* gray76 */ + {196, 196, 196, 2549}, /* gray77 */ + {199, 199, 199, 2556}, /* gray78 */ + {201, 201, 201, 2563}, /* gray79 */ + {20, 20, 20, 2570}, /* gray8 */ + {204, 204, 204, 2576}, /* gray80 */ + {207, 207, 207, 2583}, /* gray81 */ + {209, 209, 209, 2590}, /* gray82 */ + {212, 212, 212, 2597}, /* gray83 */ + {214, 214, 214, 2604}, /* gray84 */ + {217, 217, 217, 2611}, /* gray85 */ + {219, 219, 219, 2618}, /* gray86 */ + {222, 222, 222, 2625}, /* gray87 */ + {224, 224, 224, 2632}, /* gray88 */ + {227, 227, 227, 2639}, /* gray89 */ + {23, 23, 23, 2646}, /* gray9 */ + {229, 229, 229, 2652}, /* gray90 */ + {232, 232, 232, 2659}, /* gray91 */ + {235, 235, 235, 2666}, /* gray92 */ + {237, 237, 237, 2673}, /* gray93 */ + {240, 240, 240, 2680}, /* gray94 */ + {242, 242, 242, 2687}, /* gray95 */ + {245, 245, 245, 2694}, /* gray96 */ + {247, 247, 247, 2701}, /* gray97 */ + {250, 250, 250, 2708}, /* gray98 */ + {252, 252, 252, 2715}, /* gray99 */ + {0, 255, 0, 2722}, /* green */ + {173, 255, 47, 2728}, /* green yellow */ + {0, 255, 0, 2741}, /* green1 */ + {0, 238, 0, 2748}, /* green2 */ + {0, 205, 0, 2755}, /* green3 */ + {0, 139, 0, 2762}, /* green4 */ + {173, 255, 47, 2769}, /* GreenYellow */ + {190, 190, 190, 2781}, /* grey */ + {0, 0, 0, 2786}, /* grey0 */ + {3, 3, 3, 2792}, /* grey1 */ + {26, 26, 26, 2798}, /* grey10 */ + {255, 255, 255, 2805}, /* grey100 */ + {28, 28, 28, 2813}, /* grey11 */ + {31, 31, 31, 2820}, /* grey12 */ + {33, 33, 33, 2827}, /* grey13 */ + {36, 36, 36, 2834}, /* grey14 */ + {38, 38, 38, 2841}, /* grey15 */ + {41, 41, 41, 2848}, /* grey16 */ + {43, 43, 43, 2855}, /* grey17 */ + {46, 46, 46, 2862}, /* grey18 */ + {48, 48, 48, 2869}, /* grey19 */ + {5, 5, 5, 2876}, /* grey2 */ + {51, 51, 51, 2882}, /* grey20 */ + {54, 54, 54, 2889}, /* grey21 */ + {56, 56, 56, 2896}, /* grey22 */ + {59, 59, 59, 2903}, /* grey23 */ + {61, 61, 61, 2910}, /* grey24 */ + {64, 64, 64, 2917}, /* grey25 */ + {66, 66, 66, 2924}, /* grey26 */ + {69, 69, 69, 2931}, /* grey27 */ + {71, 71, 71, 2938}, /* grey28 */ + {74, 74, 74, 2945}, /* grey29 */ + {8, 8, 8, 2952}, /* grey3 */ + {77, 77, 77, 2958}, /* grey30 */ + {79, 79, 79, 2965}, /* grey31 */ + {82, 82, 82, 2972}, /* grey32 */ + {84, 84, 84, 2979}, /* grey33 */ + {87, 87, 87, 2986}, /* grey34 */ + {89, 89, 89, 2993}, /* grey35 */ + {92, 92, 92, 3000}, /* grey36 */ + {94, 94, 94, 3007}, /* grey37 */ + {97, 97, 97, 3014}, /* grey38 */ + {99, 99, 99, 3021}, /* grey39 */ + {10, 10, 10, 3028}, /* grey4 */ + {102, 102, 102, 3034}, /* grey40 */ + {105, 105, 105, 3041}, /* grey41 */ + {107, 107, 107, 3048}, /* grey42 */ + {110, 110, 110, 3055}, /* grey43 */ + {112, 112, 112, 3062}, /* grey44 */ + {115, 115, 115, 3069}, /* grey45 */ + {117, 117, 117, 3076}, /* grey46 */ + {120, 120, 120, 3083}, /* grey47 */ + {122, 122, 122, 3090}, /* grey48 */ + {125, 125, 125, 3097}, /* grey49 */ + {13, 13, 13, 3104}, /* grey5 */ + {127, 127, 127, 3110}, /* grey50 */ + {130, 130, 130, 3117}, /* grey51 */ + {133, 133, 133, 3124}, /* grey52 */ + {135, 135, 135, 3131}, /* grey53 */ + {138, 138, 138, 3138}, /* grey54 */ + {140, 140, 140, 3145}, /* grey55 */ + {143, 143, 143, 3152}, /* grey56 */ + {145, 145, 145, 3159}, /* grey57 */ + {148, 148, 148, 3166}, /* grey58 */ + {150, 150, 150, 3173}, /* grey59 */ + {15, 15, 15, 3180}, /* grey6 */ + {153, 153, 153, 3186}, /* grey60 */ + {156, 156, 156, 3193}, /* grey61 */ + {158, 158, 158, 3200}, /* grey62 */ + {161, 161, 161, 3207}, /* grey63 */ + {163, 163, 163, 3214}, /* grey64 */ + {166, 166, 166, 3221}, /* grey65 */ + {168, 168, 168, 3228}, /* grey66 */ + {171, 171, 171, 3235}, /* grey67 */ + {173, 173, 173, 3242}, /* grey68 */ + {176, 176, 176, 3249}, /* grey69 */ + {18, 18, 18, 3256}, /* grey7 */ + {179, 179, 179, 3262}, /* grey70 */ + {181, 181, 181, 3269}, /* grey71 */ + {184, 184, 184, 3276}, /* grey72 */ + {186, 186, 186, 3283}, /* grey73 */ + {189, 189, 189, 3290}, /* grey74 */ + {191, 191, 191, 3297}, /* grey75 */ + {194, 194, 194, 3304}, /* grey76 */ + {196, 196, 196, 3311}, /* grey77 */ + {199, 199, 199, 3318}, /* grey78 */ + {201, 201, 201, 3325}, /* grey79 */ + {20, 20, 20, 3332}, /* grey8 */ + {204, 204, 204, 3338}, /* grey80 */ + {207, 207, 207, 3345}, /* grey81 */ + {209, 209, 209, 3352}, /* grey82 */ + {212, 212, 212, 3359}, /* grey83 */ + {214, 214, 214, 3366}, /* grey84 */ + {217, 217, 217, 3373}, /* grey85 */ + {219, 219, 219, 3380}, /* grey86 */ + {222, 222, 222, 3387}, /* grey87 */ + {224, 224, 224, 3394}, /* grey88 */ + {227, 227, 227, 3401}, /* grey89 */ + {23, 23, 23, 3408}, /* grey9 */ + {229, 229, 229, 3414}, /* grey90 */ + {232, 232, 232, 3421}, /* grey91 */ + {235, 235, 235, 3428}, /* grey92 */ + {237, 237, 237, 3435}, /* grey93 */ + {240, 240, 240, 3442}, /* grey94 */ + {242, 242, 242, 3449}, /* grey95 */ + {245, 245, 245, 3456}, /* grey96 */ + {247, 247, 247, 3463}, /* grey97 */ + {250, 250, 250, 3470}, /* grey98 */ + {252, 252, 252, 3477}, /* grey99 */ + {240, 255, 240, 3484}, /* honeydew */ + {240, 255, 240, 3493}, /* honeydew1 */ + {224, 238, 224, 3503}, /* honeydew2 */ + {193, 205, 193, 3513}, /* honeydew3 */ + {131, 139, 131, 3523}, /* honeydew4 */ + {255, 105, 180, 3533}, /* hot pink */ + {255, 105, 180, 3542}, /* HotPink */ + {255, 110, 180, 3550}, /* HotPink1 */ + {238, 106, 167, 3559}, /* HotPink2 */ + {205, 96, 144, 3568}, /* HotPink3 */ + {139, 58, 98, 3577}, /* HotPink4 */ + {205, 92, 92, 3586}, /* indian red */ + {205, 92, 92, 3597}, /* IndianRed */ + {255, 106, 106, 3607}, /* IndianRed1 */ + {238, 99, 99, 3618}, /* IndianRed2 */ + {205, 85, 85, 3629}, /* IndianRed3 */ + {139, 58, 58, 3640}, /* IndianRed4 */ + {75, 0, 130, 3651}, /* indigo */ + {255, 255, 240, 3658}, /* ivory */ + {255, 255, 240, 3664}, /* ivory1 */ + {238, 238, 224, 3671}, /* ivory2 */ + {205, 205, 193, 3678}, /* ivory3 */ + {139, 139, 131, 3685}, /* ivory4 */ + {240, 230, 140, 3692}, /* khaki */ + {255, 246, 143, 3698}, /* khaki1 */ + {238, 230, 133, 3705}, /* khaki2 */ + {205, 198, 115, 3712}, /* khaki3 */ + {139, 134, 78, 3719}, /* khaki4 */ + {230, 230, 250, 3726}, /* lavender */ + {255, 240, 245, 3735}, /* lavender blush */ + {255, 240, 245, 3750}, /* LavenderBlush */ + {255, 240, 245, 3764}, /* LavenderBlush1 */ + {238, 224, 229, 3779}, /* LavenderBlush2 */ + {205, 193, 197, 3794}, /* LavenderBlush3 */ + {139, 131, 134, 3809}, /* LavenderBlush4 */ + {124, 252, 0, 3824}, /* lawn green */ + {124, 252, 0, 3835}, /* LawnGreen */ + {255, 250, 205, 3845}, /* lemon chiffon */ + {255, 250, 205, 3859}, /* LemonChiffon */ + {255, 250, 205, 3872}, /* LemonChiffon1 */ + {238, 233, 191, 3886}, /* LemonChiffon2 */ + {205, 201, 165, 3900}, /* LemonChiffon3 */ + {139, 137, 112, 3914}, /* LemonChiffon4 */ + {173, 216, 230, 3928}, /* light blue */ + {240, 128, 128, 3939}, /* light coral */ + {224, 255, 255, 3951}, /* light cyan */ + {238, 221, 130, 3962}, /* light goldenrod */ + {250, 250, 210, 3978}, /* light goldenrod yellow */ + {211, 211, 211, 4001}, /* light gray */ + {144, 238, 144, 4012}, /* light green */ + {211, 211, 211, 4024}, /* light grey */ + {255, 182, 193, 4035}, /* light pink */ + {255, 160, 122, 4046}, /* light salmon */ + {32, 178, 170, 4059}, /* light sea green */ + {135, 206, 250, 4075}, /* light sky blue */ + {132, 112, 255, 4090}, /* light slate blue */ + {119, 136, 153, 4107}, /* light slate gray */ + {119, 136, 153, 4124}, /* light slate grey */ + {176, 196, 222, 4141}, /* light steel blue */ + {255, 255, 224, 4158}, /* light yellow */ + {173, 216, 230, 4171}, /* LightBlue */ + {191, 239, 255, 4181}, /* LightBlue1 */ + {178, 223, 238, 4192}, /* LightBlue2 */ + {154, 192, 205, 4203}, /* LightBlue3 */ + {104, 131, 139, 4214}, /* LightBlue4 */ + {240, 128, 128, 4225}, /* LightCoral */ + {224, 255, 255, 4236}, /* LightCyan */ + {224, 255, 255, 4246}, /* LightCyan1 */ + {209, 238, 238, 4257}, /* LightCyan2 */ + {180, 205, 205, 4268}, /* LightCyan3 */ + {122, 139, 139, 4279}, /* LightCyan4 */ + {238, 221, 130, 4290}, /* LightGoldenrod */ + {255, 236, 139, 4305}, /* LightGoldenrod1 */ + {238, 220, 130, 4321}, /* LightGoldenrod2 */ + {205, 190, 112, 4337}, /* LightGoldenrod3 */ + {139, 129, 76, 4353}, /* LightGoldenrod4 */ + {250, 250, 210, 4369}, /* LightGoldenrodYellow */ + {211, 211, 211, 4390}, /* LightGray */ + {144, 238, 144, 4400}, /* LightGreen */ + {211, 211, 211, 4411}, /* LightGrey */ + {255, 182, 193, 4421}, /* LightPink */ + {255, 174, 185, 4431}, /* LightPink1 */ + {238, 162, 173, 4442}, /* LightPink2 */ + {205, 140, 149, 4453}, /* LightPink3 */ + {139, 95, 101, 4464}, /* LightPink4 */ + {255, 160, 122, 4475}, /* LightSalmon */ + {255, 160, 122, 4487}, /* LightSalmon1 */ + {238, 149, 114, 4500}, /* LightSalmon2 */ + {205, 129, 98, 4513}, /* LightSalmon3 */ + {139, 87, 66, 4526}, /* LightSalmon4 */ + {32, 178, 170, 4539}, /* LightSeaGreen */ + {135, 206, 250, 4553}, /* LightSkyBlue */ + {176, 226, 255, 4566}, /* LightSkyBlue1 */ + {164, 211, 238, 4580}, /* LightSkyBlue2 */ + {141, 182, 205, 4594}, /* LightSkyBlue3 */ + {96, 123, 139, 4608}, /* LightSkyBlue4 */ + {132, 112, 255, 4622}, /* LightSlateBlue */ + {119, 136, 153, 4637}, /* LightSlateGray */ + {119, 136, 153, 4652}, /* LightSlateGrey */ + {176, 196, 222, 4667}, /* LightSteelBlue */ + {202, 225, 255, 4682}, /* LightSteelBlue1 */ + {188, 210, 238, 4698}, /* LightSteelBlue2 */ + {162, 181, 205, 4714}, /* LightSteelBlue3 */ + {110, 123, 139, 4730}, /* LightSteelBlue4 */ + {255, 255, 224, 4746}, /* LightYellow */ + {255, 255, 224, 4758}, /* LightYellow1 */ + {238, 238, 209, 4771}, /* LightYellow2 */ + {205, 205, 180, 4784}, /* LightYellow3 */ + {139, 139, 122, 4797}, /* LightYellow4 */ + {0, 255, 0, 4810}, /* lime */ + {50, 205, 50, 4815}, /* lime green */ + {50, 205, 50, 4826}, /* LimeGreen */ + {250, 240, 230, 4836}, /* linen */ + {255, 0, 255, 4842}, /* magenta */ + {255, 0, 255, 4850}, /* magenta1 */ + {238, 0, 238, 4859}, /* magenta2 */ + {205, 0, 205, 4868}, /* magenta3 */ + {139, 0, 139, 4877}, /* magenta4 */ + {176, 48, 96, 4886}, /* maroon */ + {255, 52, 179, 4893}, /* maroon1 */ + {238, 48, 167, 4901}, /* maroon2 */ + {205, 41, 144, 4909}, /* maroon3 */ + {139, 28, 98, 4917}, /* maroon4 */ + {102, 205, 170, 4925}, /* medium aquamarine */ + {0, 0, 205, 4943}, /* medium blue */ + {186, 85, 211, 4955}, /* medium orchid */ + {147, 112, 219, 4969}, /* medium purple */ + {60, 179, 113, 4983}, /* medium sea green */ + {123, 104, 238, 5000}, /* medium slate blue */ + {0, 250, 154, 5018}, /* medium spring green */ + {72, 209, 204, 5038}, /* medium turquoise */ + {199, 21, 133, 5055}, /* medium violet red */ + {102, 205, 170, 5073}, /* MediumAquamarine */ + {0, 0, 205, 5090}, /* MediumBlue */ + {186, 85, 211, 5101}, /* MediumOrchid */ + {224, 102, 255, 5114}, /* MediumOrchid1 */ + {209, 95, 238, 5128}, /* MediumOrchid2 */ + {180, 82, 205, 5142}, /* MediumOrchid3 */ + {122, 55, 139, 5156}, /* MediumOrchid4 */ + {147, 112, 219, 5170}, /* MediumPurple */ + {171, 130, 255, 5183}, /* MediumPurple1 */ + {159, 121, 238, 5197}, /* MediumPurple2 */ + {137, 104, 205, 5211}, /* MediumPurple3 */ + {93, 71, 139, 5225}, /* MediumPurple4 */ + {60, 179, 113, 5239}, /* MediumSeaGreen */ + {123, 104, 238, 5254}, /* MediumSlateBlue */ + {0, 250, 154, 5270}, /* MediumSpringGreen */ + {72, 209, 204, 5288}, /* MediumTurquoise */ + {199, 21, 133, 5304}, /* MediumVioletRed */ + {25, 25, 112, 5320}, /* midnight blue */ + {25, 25, 112, 5334}, /* MidnightBlue */ + {245, 255, 250, 5347}, /* mint cream */ + {245, 255, 250, 5358}, /* MintCream */ + {255, 228, 225, 5368}, /* misty rose */ + {255, 228, 225, 5379}, /* MistyRose */ + {255, 228, 225, 5389}, /* MistyRose1 */ + {238, 213, 210, 5400}, /* MistyRose2 */ + {205, 183, 181, 5411}, /* MistyRose3 */ + {139, 125, 123, 5422}, /* MistyRose4 */ + {255, 228, 181, 5433}, /* moccasin */ + {255, 222, 173, 5442}, /* navajo white */ + {255, 222, 173, 5455}, /* NavajoWhite */ + {255, 222, 173, 5467}, /* NavajoWhite1 */ + {238, 207, 161, 5480}, /* NavajoWhite2 */ + {205, 179, 139, 5493}, /* NavajoWhite3 */ + {139, 121, 94, 5506}, /* NavajoWhite4 */ + {0, 0, 128, 5519}, /* navy */ + {0, 0, 128, 5524}, /* navy blue */ + {0, 0, 128, 5534}, /* NavyBlue */ + {253, 245, 230, 5543}, /* old lace */ + {253, 245, 230, 5552}, /* OldLace */ + {128, 128, 0, 5560}, /* olive */ + {107, 142, 35, 5566}, /* olive drab */ + {107, 142, 35, 5577}, /* OliveDrab */ + {192, 255, 62, 5587}, /* OliveDrab1 */ + {179, 238, 58, 5598}, /* OliveDrab2 */ + {154, 205, 50, 5609}, /* OliveDrab3 */ + {105, 139, 34, 5620}, /* OliveDrab4 */ + {255, 165, 0, 5631}, /* orange */ + {255, 69, 0, 5638}, /* orange red */ + {255, 165, 0, 5649}, /* orange1 */ + {238, 154, 0, 5657}, /* orange2 */ + {205, 133, 0, 5665}, /* orange3 */ + {139, 90, 0, 5673}, /* orange4 */ + {255, 69, 0, 5681}, /* OrangeRed */ + {255, 69, 0, 5691}, /* OrangeRed1 */ + {238, 64, 0, 5702}, /* OrangeRed2 */ + {205, 55, 0, 5713}, /* OrangeRed3 */ + {139, 37, 0, 5724}, /* OrangeRed4 */ + {218, 112, 214, 5735}, /* orchid */ + {255, 131, 250, 5742}, /* orchid1 */ + {238, 122, 233, 5750}, /* orchid2 */ + {205, 105, 201, 5758}, /* orchid3 */ + {139, 71, 137, 5766}, /* orchid4 */ + {238, 232, 170, 5774}, /* pale goldenrod */ + {152, 251, 152, 5789}, /* pale green */ + {175, 238, 238, 5800}, /* pale turquoise */ + {219, 112, 147, 5815}, /* pale violet red */ + {238, 232, 170, 5831}, /* PaleGoldenrod */ + {152, 251, 152, 5845}, /* PaleGreen */ + {154, 255, 154, 5855}, /* PaleGreen1 */ + {144, 238, 144, 5866}, /* PaleGreen2 */ + {124, 205, 124, 5877}, /* PaleGreen3 */ + {84, 139, 84, 5888}, /* PaleGreen4 */ + {175, 238, 238, 5899}, /* PaleTurquoise */ + {187, 255, 255, 5913}, /* PaleTurquoise1 */ + {174, 238, 238, 5928}, /* PaleTurquoise2 */ + {150, 205, 205, 5943}, /* PaleTurquoise3 */ + {102, 139, 139, 5958}, /* PaleTurquoise4 */ + {219, 112, 147, 5973}, /* PaleVioletRed */ + {255, 130, 171, 5987}, /* PaleVioletRed1 */ + {238, 121, 159, 6002}, /* PaleVioletRed2 */ + {205, 104, 137, 6017}, /* PaleVioletRed3 */ + {139, 71, 93, 6032}, /* PaleVioletRed4 */ + {255, 239, 213, 6047}, /* papaya whip */ + {255, 239, 213, 6059}, /* PapayaWhip */ + {255, 218, 185, 6070}, /* peach puff */ + {255, 218, 185, 6081}, /* PeachPuff */ + {255, 218, 185, 6091}, /* PeachPuff1 */ + {238, 203, 173, 6102}, /* PeachPuff2 */ + {205, 175, 149, 6113}, /* PeachPuff3 */ + {139, 119, 101, 6124}, /* PeachPuff4 */ + {205, 133, 63, 6135}, /* peru */ + {255, 192, 203, 6140}, /* pink */ + {255, 181, 197, 6145}, /* pink1 */ + {238, 169, 184, 6151}, /* pink2 */ + {205, 145, 158, 6157}, /* pink3 */ + {139, 99, 108, 6163}, /* pink4 */ + {221, 160, 221, 6169}, /* plum */ + {255, 187, 255, 6174}, /* plum1 */ + {238, 174, 238, 6180}, /* plum2 */ + {205, 150, 205, 6186}, /* plum3 */ + {139, 102, 139, 6192}, /* plum4 */ + {176, 224, 230, 6198}, /* powder blue */ + {176, 224, 230, 6210}, /* PowderBlue */ + {160, 32, 240, 6221}, /* purple */ + {155, 48, 255, 6228}, /* purple1 */ + {145, 44, 238, 6236}, /* purple2 */ + {125, 38, 205, 6244}, /* purple3 */ + {85, 26, 139, 6252}, /* purple4 */ + {102, 51, 153, 6260}, /* rebecca purple */ + {102, 51, 153, 6275}, /* RebeccaPurple */ + {255, 0, 0, 6289}, /* red */ + {255, 0, 0, 6293}, /* red1 */ + {238, 0, 0, 6298}, /* red2 */ + {205, 0, 0, 6303}, /* red3 */ + {139, 0, 0, 6308}, /* red4 */ + {188, 143, 143, 6313}, /* rosy brown */ + {188, 143, 143, 6324}, /* RosyBrown */ + {255, 193, 193, 6334}, /* RosyBrown1 */ + {238, 180, 180, 6345}, /* RosyBrown2 */ + {205, 155, 155, 6356}, /* RosyBrown3 */ + {139, 105, 105, 6367}, /* RosyBrown4 */ + {65, 105, 225, 6378}, /* royal blue */ + {65, 105, 225, 6389}, /* RoyalBlue */ + {72, 118, 255, 6399}, /* RoyalBlue1 */ + {67, 110, 238, 6410}, /* RoyalBlue2 */ + {58, 95, 205, 6421}, /* RoyalBlue3 */ + {39, 64, 139, 6432}, /* RoyalBlue4 */ + {139, 69, 19, 6443}, /* saddle brown */ + {139, 69, 19, 6456}, /* SaddleBrown */ + {250, 128, 114, 6468}, /* salmon */ + {255, 140, 105, 6475}, /* salmon1 */ + {238, 130, 98, 6483}, /* salmon2 */ + {205, 112, 84, 6491}, /* salmon3 */ + {139, 76, 57, 6499}, /* salmon4 */ + {244, 164, 96, 6507}, /* sandy brown */ + {244, 164, 96, 6519}, /* SandyBrown */ + {46, 139, 87, 6530}, /* sea green */ + {46, 139, 87, 6540}, /* SeaGreen */ + {84, 255, 159, 6549}, /* SeaGreen1 */ + {78, 238, 148, 6559}, /* SeaGreen2 */ + {67, 205, 128, 6569}, /* SeaGreen3 */ + {46, 139, 87, 6579}, /* SeaGreen4 */ + {255, 245, 238, 6589}, /* seashell */ + {255, 245, 238, 6598}, /* seashell1 */ + {238, 229, 222, 6608}, /* seashell2 */ + {205, 197, 191, 6618}, /* seashell3 */ + {139, 134, 130, 6628}, /* seashell4 */ + {160, 82, 45, 6638}, /* sienna */ + {255, 130, 71, 6645}, /* sienna1 */ + {238, 121, 66, 6653}, /* sienna2 */ + {205, 104, 57, 6661}, /* sienna3 */ + {139, 71, 38, 6669}, /* sienna4 */ + {192, 192, 192, 6677}, /* silver */ + {135, 206, 235, 6684}, /* sky blue */ + {135, 206, 235, 6693}, /* SkyBlue */ + {135, 206, 255, 6701}, /* SkyBlue1 */ + {126, 192, 238, 6710}, /* SkyBlue2 */ + {108, 166, 205, 6719}, /* SkyBlue3 */ + {74, 112, 139, 6728}, /* SkyBlue4 */ + {106, 90, 205, 6737}, /* slate blue */ + {112, 128, 144, 6748}, /* slate gray */ + {112, 128, 144, 6759}, /* slate grey */ + {106, 90, 205, 6770}, /* SlateBlue */ + {131, 111, 255, 6780}, /* SlateBlue1 */ + {122, 103, 238, 6791}, /* SlateBlue2 */ + {105, 89, 205, 6802}, /* SlateBlue3 */ + {71, 60, 139, 6813}, /* SlateBlue4 */ + {112, 128, 144, 6824}, /* SlateGray */ + {198, 226, 255, 6834}, /* SlateGray1 */ + {185, 211, 238, 6845}, /* SlateGray2 */ + {159, 182, 205, 6856}, /* SlateGray3 */ + {108, 123, 139, 6867}, /* SlateGray4 */ + {112, 128, 144, 6878}, /* SlateGrey */ + {255, 250, 250, 6888}, /* snow */ + {255, 250, 250, 6893}, /* snow1 */ + {238, 233, 233, 6899}, /* snow2 */ + {205, 201, 201, 6905}, /* snow3 */ + {139, 137, 137, 6911}, /* snow4 */ + {0, 255, 127, 6917}, /* spring green */ + {0, 255, 127, 6930}, /* SpringGreen */ + {0, 255, 127, 6942}, /* SpringGreen1 */ + {0, 238, 118, 6955}, /* SpringGreen2 */ + {0, 205, 102, 6968}, /* SpringGreen3 */ + {0, 139, 69, 6981}, /* SpringGreen4 */ + {70, 130, 180, 6994}, /* steel blue */ + {70, 130, 180, 7005}, /* SteelBlue */ + {99, 184, 255, 7015}, /* SteelBlue1 */ + {92, 172, 238, 7026}, /* SteelBlue2 */ + {79, 148, 205, 7037}, /* SteelBlue3 */ + {54, 100, 139, 7048}, /* SteelBlue4 */ + {210, 180, 140, 7059}, /* tan */ + {255, 165, 79, 7063}, /* tan1 */ + {238, 154, 73, 7068}, /* tan2 */ + {205, 133, 63, 7073}, /* tan3 */ + {139, 90, 43, 7078}, /* tan4 */ + {0, 128, 128, 7083}, /* teal */ + {216, 191, 216, 7088}, /* thistle */ + {255, 225, 255, 7096}, /* thistle1 */ + {238, 210, 238, 7105}, /* thistle2 */ + {205, 181, 205, 7114}, /* thistle3 */ + {139, 123, 139, 7123}, /* thistle4 */ + {255, 99, 71, 7132}, /* tomato */ + {255, 99, 71, 7139}, /* tomato1 */ + {238, 92, 66, 7147}, /* tomato2 */ + {205, 79, 57, 7155}, /* tomato3 */ + {139, 54, 38, 7163}, /* tomato4 */ + {64, 224, 208, 7171}, /* turquoise */ + {0, 245, 255, 7181}, /* turquoise1 */ + {0, 229, 238, 7192}, /* turquoise2 */ + {0, 197, 205, 7203}, /* turquoise3 */ + {0, 134, 139, 7214}, /* turquoise4 */ + {238, 130, 238, 7225}, /* violet */ + {208, 32, 144, 7232}, /* violet red */ + {208, 32, 144, 7243}, /* VioletRed */ + {255, 62, 150, 7253}, /* VioletRed1 */ + {238, 58, 140, 7264}, /* VioletRed2 */ + {205, 50, 120, 7275}, /* VioletRed3 */ + {139, 34, 82, 7286}, /* VioletRed4 */ + {128, 128, 128, 7297}, /* web gray */ + {0, 128, 0, 7306}, /* web green */ + {128, 128, 128, 7316}, /* web grey */ + {128, 0, 0, 7325}, /* web maroon */ + {128, 0, 128, 7336}, /* web purple */ + {128, 128, 128, 7347}, /* WebGray */ + {0, 128, 0, 7355}, /* WebGreen */ + {128, 128, 128, 7364}, /* WebGrey */ + {128, 0, 0, 7372}, /* WebMaroon */ + {128, 0, 128, 7382}, /* WebPurple */ + {245, 222, 179, 7392}, /* wheat */ + {255, 231, 186, 7398}, /* wheat1 */ + {238, 216, 174, 7405}, /* wheat2 */ + {205, 186, 150, 7412}, /* wheat3 */ + {139, 126, 102, 7419}, /* wheat4 */ + {255, 255, 255, 7426}, /* white */ + {245, 245, 245, 7432}, /* white smoke */ + {245, 245, 245, 7444}, /* WhiteSmoke */ + {190, 190, 190, 7455}, /* x11 gray */ + {0, 255, 0, 7464}, /* x11 green */ + {190, 190, 190, 7474}, /* x11 grey */ + {176, 48, 96, 7483}, /* x11 maroon */ + {160, 32, 240, 7494}, /* x11 purple */ + {190, 190, 190, 7505}, /* X11Gray */ + {0, 255, 0, 7513}, /* X11Green */ + {190, 190, 190, 7522}, /* X11Grey */ + {176, 48, 96, 7530}, /* X11Maroon */ + {160, 32, 240, 7540}, /* X11Purple */ + {255, 255, 0, 7550}, /* yellow */ + {154, 205, 50, 7557}, /* yellow green */ + {255, 255, 0, 7570}, /* yellow1 */ + {238, 238, 0, 7578}, /* yellow2 */ + {205, 205, 0, 7586}, /* yellow3 */ + {139, 139, 0, 7594}, /* yellow4 */ + {154, 205, 50, 7602}, /* YellowGreen */ }; #define NUM_BUILTIN_COLORS (sizeof (BuiltinColors) / sizeof (BuiltinColors[0])) |