xscope/xscope-1.1-diff_to_git.patch
2009-07-01 05:08:44 +00:00

16684 lines
450 KiB
Diff
Raw Blame History

diff --git a/AUTHORS b/AUTHORS
index 3dd770c..b3bbcec 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1 +1,2 @@
James Peterson, MCC
+Keith Packard
diff --git a/Makefile.am b/Makefile.am
index 89928cf..7bbf2e6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,5 @@
#
-# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008-2009 Sun Microsystems, Inc. All rights reserved.
# Use subject to license terms.
#
# Permission is hereby granted, free of charge, to any person obtaining a
@@ -30,28 +30,51 @@
bin_PROGRAMS = xscope
-AM_CFLAGS = $(XSCOPE_CFLAGS)
+AM_CFLAGS = $(CWARNFLAGS) $(XSCOPE_CFLAGS)
xscope_LDADD = $(XSCOPE_LIBS)
xscope_SOURCES = \
+ audio.c \
+ bigreqscope.h \
common.c \
decode11.c \
+ decode_bigreq.c \
+ decode_lbx.c \
+ decode_randr.c \
+ decode_render.c \
+ decode_shm.c \
+ decode_wcp.c \
+ decodenas.c \
+ extensions.c \
+ extensions.h \
fd.c \
fd.h \
+ lbxscope.h \
+ nas.h \
print11.c \
+ print_bigreq.c \
+ print_lbx.c \
+ print_randr.c \
+ print_render.c \
+ print_shm.c \
+ print_wcp.c \
+ printnas.c \
proto.h \
prtype.c \
+ randrscope.h \
+ renderscope.h \
+ scope-transport.c \
scope.c \
scope.h \
server.c \
+ shmscope.h \
table11.c \
- x11.h \
- scope-transport.c
+ wcpscope.h \
+ x11.h
appman_PRE = \
xscope.man
-
appmandir = $(APP_MAN_DIR)
appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@)
@@ -63,7 +86,7 @@ MAINTAINERCLEANFILES = ChangeLog
.PHONY: ChangeLog
ChangeLog:
- (GIT_DIR=$(top_srcdir)/.git git-log > .changelog.tmp && mv .changelog.tmp ChangeLog; rm -f .changelog.tmp) || (touch ChangeLog; echo 'git directory not found: installing possibly empty changelog.' >&2)
+ $(CHANGELOG_CMD)
dist-hook: ChangeLog
@@ -90,3 +113,16 @@ SUFFIXES = .$(APP_MAN_SUFFIX) .man
.man.$(APP_MAN_SUFFIX):
sed $(MAN_SUBSTS) < $< > $@
+
+if LINT
+# Check source code with tools like lint & sparse
+
+ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS)
+
+lint: $(BUILT_SOURCES)
+ @for f in $(xscope_SOURCES) ; do \
+ case $$f in *.c) \
+ $(LINT) $(ALL_LINT_FLAGS) $(srcdir)/$$f ;; esac ; \
+ done
+endif LINT
diff --git a/README b/README
index e69de29..39e78b1 100644
--- a/README
+++ b/README
@@ -0,0 +1,91 @@
+
+ XSCOPE -- a program to monitor X11/Client conversations
+
+XSCOPE is a program to monitor the connections between the X11 window
+server and a client program. xscope runs as a separate process. By
+adjusting the host and/or display number that a X11 client attaches
+to, the client is attached to xscope instead of X11. xscope attaches
+to X11 as if it were the client. All bytes from the client are sent
+to xscope which passes them on to X11; All bytes from X11 are sent to
+xscope which sends them on to the client. xscope is transparent to
+the client and X11.
+
+In addition to passing characters back and forth, xscope will print
+information about this traffic on stdout, giving performance and
+debugging information for an X11 client and server.
+
+
+ -------------- -------------- --------------
+ | | | | | |
+ | | ------------> | | ----------> | |
+ | client | | xscope | | server |
+ | | | | | |
+ | | <----------- | | <---------- | |
+ | | | | | |
+ -------------- -------------- --------------
+ |
+ |
+ v
+ trace output to stdout
+
+
+When running with xscope, three processes are involved, potentially all
+on different machines:
+
+X11 -- the X11 window server will be running on machine "A" for Display "B".
+ ("A" is a machine name; "B" is a display number).
+
+xscope -- xscope must be told where the X11 window server is
+ (what machine and what display). The options for xscope are
+ -h<X11-host> and -d<display-number>. In our example, -hA and -dB.
+ Typically the display-number is not given. xscope will not try to
+ connect to X11 until the client connects to xscope.
+
+client -- the client should connect to xscope rather than X11. To avoid
+ changing the code for the client, xscope listens on the same port
+ as X11. If X11 and xscope are on different machines, this works
+ well. However, if X11 and xscope are on the same machine, this
+ creates a port conflict. To resolve this conflict, xscope can
+ be given a different input or output port number, as necessary
+ to avoid the port that X11 is listening to. The client must connect
+ to this offset port number. The input port for xscope is set by
+ -i<port-number>; the output port is set by -o<port-number>. The
+ default input port is 1; the default output port is 0. These ports
+ are offset by the X11 base (6000) and the display number. The client
+ attaches to xscope by changing its display number by the port offset.
+
+For example, with X11 running on "bagel", display 0 (the default), and
+xscope and the client running on "cleo", we would start xscope as
+"xscope -hbagel -i0". The client program could then connect to "X11" on
+"cleo:0", and would be attached to xscope, which would then attach to
+X11 on "bagel:0".
+
+If, however, all three processes were running on "cleo", we would
+start xscope by "xscope -i1". This would cause it to listen on
+port 6001 (which is display 1 for X11). The client would attach to
+X11 on "cleo:1", and xscope would connect through to X11 on "cleo:0".
+
+
+LIMITATIONS:
+
+xscope has been written and used on a Sun3. Additional code may be needed
+for byteswapping on different architectures.
+
+The command line arguments for specifying the real X server should probably
+ be changed to be more consistent with X11R3 applications.
+
+The Imakefile may be incorrect.
+
+The builtin atoms have been wired in directly; they should probably be
+picked up from a header file.
+
+No provision is included for extensions to the base protocol.
+
+There is no code yet to interpret typed commands from the keyboard.
+ It would be possible for a command language at the keyboard to create
+ artificial characters to be sent to X11 or the client as if they were
+ generated by the other, or to dynamically alter requests or replies.
+
+
+
+
diff --git a/audio.c b/audio.c
new file mode 100644
index 0000000..94fd08a
--- /dev/null
+++ b/audio.c
@@ -0,0 +1,500 @@
+/*
+ * $NCDOr: audio.c,v 1.1 1996/07/18 23:25:52 keithp Exp keithp $
+ *
+ * Copyright 1996 Network Computing Devices
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of NCD. not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. NCD. makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * NCD. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL NCD.
+ * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Keith Packard, Network Computing Devices
+ */
+
+#include "scope.h"
+#include "nas.h"
+
+#include <sys/uio.h> /* for struct iovec, used by socket.h */
+#include <sys/socket.h> /* for AF_INET, SOCK_STREAM, ... */
+#include <sys/ioctl.h> /* for FIONCLEX, FIONBIO, ... */
+#ifdef SVR4
+#include <sys/filio.h>
+#endif
+#include <fcntl.h>
+#include <netinet/in.h> /* struct sockaddr_in */
+#include <netinet/tcp.h>
+#include <netdb.h> /* struct servent * and struct hostent * */
+#include <errno.h> /* for EINTR, EADDRINUSE, ... */
+
+static void
+ReportFromAudioClient (
+ FD fd,
+ unsigned char *buf,
+ long n)
+{
+ if (NasVerbose) {
+ if (ScopeEnabled) {
+ PrintTime ();
+ fprintf(stdout, "NAS Client%s --> %4ld %s\n",
+ ClientName(fd), n, (n == 1 ? "byte" : "bytes"));
+ }
+ }
+ ProcessBuffer (fd, buf, n);
+}
+
+static void
+ReportFromAudioServer(
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ if (NasVerbose) {
+ if (ScopeEnabled) {
+ PrintTime();
+ fprintf(stdout, "\t\t\t\t\t%4ld %s <-- NAS Server%s\n",
+ n, (n == 1 ? "byte" : "bytes"), ClientName(fd));
+ }
+ }
+ ProcessBuffer(fd, buf, n);
+}
+
+static long StartAudioSetUpMessage (FD fd, const unsigned char *buf, long n);
+static long FinishAudioSetUpMessage (FD fd, const unsigned char *buf, long n);
+static long StartAudioRequest (FD fd, const unsigned char *buf, long n);
+static long FinishAudioRequest (FD fd, const unsigned char *buf, long n);
+static long StartAudioSetUpReply (FD fd, const unsigned char *buf, long n);
+static long FinishAudioSetUpReply (FD fd, const unsigned char *buf, long n);
+static long FinishAudioReply (FD fd, const unsigned char *buf, long n);
+static long AudioServerPacket (FD fd, const unsigned char *buf, long n);
+
+static void
+StartAudioClientConnection(
+ FD fd)
+{
+ enterprocedure("StartAudioClientConnection");
+ /* when a new connection is started, we have no saved bytes */
+ CS[fd].SavedBytes = NULL;
+ CS[fd].SizeofSavedBytes = 0;
+ CS[fd].NumberofSavedBytes = 0;
+ CS[fd].NumberofBytesProcessed = 0;
+
+ /* when a new connection is started, we have no reply Queue */
+ FlushReplyQ(fd);
+
+ /* each new connection gets a request sequence number */
+ CS[fd].SequenceNumber = 0;
+
+ /* we need 12 bytes to start a SetUp message */
+ CS[fd].ByteProcessing = StartAudioSetUpMessage;
+ CS[fd].NumberofBytesNeeded = 12;
+}
+
+static void
+StopAudioClientConnection(
+ FD fd)
+{
+ enterprocedure("StopAudioClientConnection");
+ /* when a new connection is stopped, discard the old buffer */
+
+ if (CS[fd].SizeofSavedBytes > 0)
+ Free((char*)CS[fd].SavedBytes);
+}
+
+static long
+StartAudioSetUpMessage (
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ short namelength;
+ short datalength;
+
+ enterprocedure("StartSetUpMessage");
+ /*
+ we need the first 12 bytes to be able to determine if, and how many,
+ additional bytes we need for name and data authorization. However, we
+ can't process the first 12 bytes until we get all of them, so
+ return zero bytes used, and increase the number of bytes needed
+ */
+
+ CS[fd].littleEndian = (buf[0] == 'l');
+ CS[ServerHalf(fd)].littleEndian = CS[fd].littleEndian;
+ littleEndian = CS[fd].littleEndian;
+ namelength = IShort(&buf[6]);
+ datalength = IShort(&buf[8]);
+ CS[fd].ByteProcessing = FinishAudioSetUpMessage;
+ CS[fd].NumberofBytesNeeded = n
+ + pad((long)namelength) + pad((long)datalength);
+ debug(8,(stderr, "need %ld bytes to finish startup\n",
+ CS[fd].NumberofBytesNeeded - n));
+ return(0);
+}
+
+static long
+FinishAudioSetUpMessage (
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ enterprocedure("FinishSetUpMessage");
+ if (ScopeEnabled)
+ PrintAudioSetUpMessage(buf);
+
+ /* after a set-up message, we expect a string of requests */
+ CS[fd].ByteProcessing = StartAudioRequest;
+ CS[fd].NumberofBytesNeeded = 4;
+ return(n);
+}
+
+
+static long
+StartAudioRequest (
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ unsigned short requestlength;
+ enterprocedure("StartRequest");
+
+ /* bytes 0,1 are ignored now; bytes 2,3 tell us the request length */
+ requestlength = IShort(&buf[2]);
+ CS[fd].ByteProcessing = FinishAudioRequest;
+ CS[fd].NumberofBytesNeeded = 4 * requestlength;
+ debug(8,(stderr, "need %ld more bytes to finish request\n",
+ CS[fd].NumberofBytesNeeded - n));
+ return(0);
+}
+
+
+static long
+FinishAudioRequest (
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ enterprocedure("FinishRequest");
+ CS[fd].ByteProcessing = StartAudioRequest;
+ CS[fd].NumberofBytesNeeded = 4;
+ if (ScopeEnabled)
+ DecodeAudioRequest(fd, buf, n);
+ return(n);
+}
+
+static void
+StartAudioServerConnection(
+ FD fd)
+{
+ enterprocedure("StartAudioServerConnection");
+ /* when a new connection is started, we have no saved bytes */
+ CS[fd].SavedBytes = NULL;
+ CS[fd].SizeofSavedBytes = 0;
+ CS[fd].NumberofSavedBytes = 0;
+ CS[fd].NumberofBytesProcessed = 0;
+
+ /* when a new connection is started, we have no reply Queue */
+ FlushReplyQ(fd);
+
+ /* we need 8 bytes to start a SetUp reply */
+ CS[fd].ByteProcessing = StartAudioSetUpReply;
+ CS[fd].NumberofBytesNeeded = 8;
+}
+
+static void
+StopAudioServerConnection(
+ FD fd)
+{
+ enterprocedure("StopAudioServerConnection");
+ /* when a new connection is stopped, discard the old buffer */
+
+ if (CS[fd].SizeofSavedBytes > 0)
+ Free((char *)CS[fd].SavedBytes);
+}
+
+static long
+StartAudioSetUpReply (
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ short replylength;
+
+ enterprocedure("StartSetUpReply");
+ replylength = IShort(&buf[6]);
+ CS[fd].ByteProcessing = FinishAudioSetUpReply;
+ CS[fd].NumberofBytesNeeded = n + 4 * replylength;
+ debug(8,(stderr, "need %ld bytes to finish startup reply\n",
+ CS[fd].NumberofBytesNeeded - n));
+ return(0);
+}
+
+static long
+FinishAudioSetUpReply (
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ enterprocedure("FinishSetUpReply");
+ if (ScopeEnabled)
+ PrintAudioSetUpReply(buf);
+ CS[fd].ByteProcessing = AudioServerPacket;
+ CS[fd].NumberofBytesNeeded = 32;
+ return(n);
+}
+
+/* ************************************************************ */
+
+static long
+AudioErrorPacket (
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ CS[fd].ByteProcessing = AudioServerPacket;
+ CS[fd].NumberofBytesNeeded = 32;
+ DecodeAudioError(fd, buf, n);
+ return(n);
+}
+
+
+static long
+AudioEventPacket (
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ CS[fd].ByteProcessing = AudioServerPacket;
+ CS[fd].NumberofBytesNeeded = 32;
+ if (ScopeEnabled)
+ DecodeAudioEvent(fd, buf, n);
+ return(n);
+}
+
+
+static long
+AudioReplyPacket (
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ long replylength;
+
+ replylength = ILong(&buf[4]);
+
+ /*
+ Replies may need more bytes, so we compute how many more
+ bytes are needed and ask for them, not using any of the bytes
+ we were given (return(0) to say that no bytes were used).
+ If the replylength is zero (we don't need any more bytes), the
+ number of bytes needed will be the same as what we have, and
+ so the top-level loop will call the next routine immediately
+ with the same buffer of bytes that we were given.
+ */
+
+ CS[fd].ByteProcessing = FinishAudioReply;
+ CS[fd].NumberofBytesNeeded = n + 4 * replylength;
+ debug(8,(stderr, "need %ld bytes to finish reply\n", (4 * replylength)));
+ return(0);
+}
+
+static long
+FinishAudioReply (
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ CS[fd].ByteProcessing = AudioServerPacket;
+ CS[fd].NumberofBytesNeeded = 32;
+ enterprocedure("FinishAudioReply");
+ if (ScopeEnabled)
+ DecodeAudioReply(fd, buf, n);
+ return(n);
+}
+
+static long
+AudioServerPacket (
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ short PacketType;
+ enterprocedure("ServerPacket");
+
+ PacketType = IByte(&buf[0]);
+ if (PacketType == 0)
+ return(AudioErrorPacket(fd, buf, n));
+ if (PacketType == 1)
+ return(AudioReplyPacket(fd, buf, n));
+ return(AudioEventPacket(fd, buf, n));
+}
+
+static void
+CloseAudioConnection(
+ FD fd)
+{
+ debug(4,(stderr, "close %d and %d\n", fd, FDPair(fd)));
+ StopAudioClientConnection(ServerHalf(fd));
+ StopAudioServerConnection(ClientHalf(fd));
+
+ (void)close(fd);
+ NotUsingFD(fd);
+ (void)close(FDPair(fd));
+ NotUsingFD(FDPair(fd));
+}
+
+/* when we get data from a client, we read it in, copy it to the
+ server for this client, then dump it to the client. Note, we don't
+ have to have a server, if there isn't one. */
+
+static void
+DataFromAudioClient(
+ FD fd)
+{
+ long n;
+ FD ServerFD;
+
+ Verbose = NasVerbose;
+ enterprocedure("DataFromAudioClient");
+ ServerFD = FDPair(fd);
+ if (ServerFD < 0)
+ {
+ ServerFD = ConnectToServer(false);
+ if (ServerFD < 0)
+ {
+ CloseAudioConnection(fd);
+ return;
+ }
+ SetUpPair(fd, ServerFD);
+ }
+
+ n = read(fd, FDinfo[ServerFD].buffer, BUFFER_SIZE);
+ debug(4,(stderr, "read %ld bytes from Client%s\n", n, ClientName(fd)));
+ if (n < 0)
+ {
+ PrintTime();
+ perror("Client --> read error:");
+ CloseAudioConnection(fd);
+ return;
+ }
+ if (n == 0)
+ {
+ PrintTime();
+ if (NasVerbose >= 0)
+ fprintf(stdout, "Client%s --> EOF\n", ClientName(fd));
+ CloseAudioConnection(fd);
+ return;
+ }
+
+ FDinfo[ServerFD].bufcount = n;
+ FDinfo[ServerFD].bufstart = 0;
+
+ FlushFD (ServerFD);
+ /* also report the bytes to standard out */
+ ReportFromAudioClient(fd, FDinfo[ServerFD].buffer, n);
+}
+
+/* ********************************************** */
+/* */
+/* ********************************************** */
+
+/* similar situation for the server, but note that if there is no client,
+ we close the connection down -- don't need a server with no client. */
+
+static void
+DataFromAudioServer(
+ FD fd)
+{
+ long n;
+ FD ClientFD;
+
+ Verbose = NasVerbose;
+ ClientFD = FDPair(fd);
+ if (ClientFD < 0)
+ {
+ CloseAudioConnection(fd);
+ return;
+ }
+
+ enterprocedure("DataFromAudioServer");
+ n = read(fd, (char *)FDinfo[ClientFD].buffer, BUFFER_SIZE);
+ debug(4,(stderr, "read %ld bytes from Server%s\n", n, ClientName(fd)));
+ if (n < 0)
+ {
+ PrintTime();
+ perror("read error <- Server");
+ CloseAudioConnection(fd);
+ return;
+ }
+ if (n == 0)
+ {
+ PrintTime();
+ if (NasVerbose >= 0)
+ fprintf(stdout, "EOF <-- Server%s\n", ClientName(fd));
+ CloseAudioConnection(fd);
+ return;
+ }
+
+ FDinfo[ClientFD].bufcount = n;
+ FDinfo[ClientFD].bufstart = 0;
+ FlushFD (ClientFD);
+
+ /* also report the bytes to standard out */
+ ReportFromAudioServer(fd, FDinfo[ClientFD].buffer, n);
+}
+
+static FD
+ConnectToAudioClient(
+ FD ConnectionSocket)
+{
+ FD ClientFD;
+ ClientFD = AcceptConnection(ConnectionSocket);
+ UsingFD(ClientFD, DataFromAudioClient, FlushFD, NULL);
+ StartAudioClientConnection(ClientFD);
+ return(ClientFD);
+}
+
+static FD ConnectToAudioServer(
+ Boolean report)
+{
+ FD ServerFD;
+ XtransConnInfo trans_conn = NULL; /* transport connection object */
+
+ if (!AudioServerHostName[0])
+ strcpy (AudioServerHostName, ServerHostName);
+ ServerFD = MakeConnection (AudioServerHostName, GetServerport () + 2000, report, &trans_conn);
+ if (ServerFD >= 0)
+ {
+ UsingFD(ServerFD, DataFromAudioServer, FlushFD, trans_conn);
+ StartAudioServerConnection(ServerFD);
+ }
+ return(ServerFD);
+}
+
+void
+NewAudio (
+ FD fd)
+{
+ FD ServerFD = -1;
+ FD ClientFD = -1;
+
+ ClientFD = ConnectToAudioClient(fd);
+ ServerFD = ConnectToAudioServer(true);
+ SetUpPair(ClientFD, ServerFD);
+}
+
+void
+InitializeAudio (void)
+{
+ InitializeAudioDecode ();
+}
diff --git a/bigreqscope.h b/bigreqscope.h
new file mode 100644
index 0000000..0b182c0
--- /dev/null
+++ b/bigreqscope.h
@@ -0,0 +1,22 @@
+#ifndef _BIGREQSCOPE_H_
+#define _BIGREQSCOPE_H_
+
+
+#define BIGREQREQUESTHEADER "BIGREQREQUEST"
+#define BIGREQREPLYHEADER "BIGREQREPLY"
+
+/*
+ To aid in making the choice between level 1 and level 2, we
+ define the following define, which does not print relatively
+ unimportant fields.
+*/
+
+#define printfield(a,b,c,d,e) if (Verbose > 1) PrintField(a,b,c,d,e)
+
+extern unsigned char BIGREQRequest;
+
+extern void BigreqEnable (FD fd, const unsigned char *buf);
+extern void BigreqEnableReply (FD fd, const unsigned char *buf);
+
+#endif
+
diff --git a/common.c b/common.c
index 028578b..8d16e6d 100644
--- a/common.c
+++ b/common.c
@@ -54,6 +54,7 @@
\* *********************************************************** */
#include "scope.h"
+#include <fcntl.h>
#ifdef SYSV
#define bzero(s,l) memset(s, 0, l)
@@ -69,22 +70,19 @@
/* ********************************************** */
void
-enterprocedure(s)
- char *s;
+enterprocedure (char *s)
{
debug(2,(stderr, "-> %s\n", s));
}
void
-warn(s)
- char *s;
+warn (char *s)
{
fprintf(stderr, "####### %s\n", s);
}
void
-panic(s)
- char *s;
+panic (char *s)
{
fprintf(stderr, "%s\n", s);
exit(1);
@@ -96,11 +94,12 @@ panic(s)
/* */
/* ********************************************** */
-void *Malloc (long n)
+void *
+Malloc (long n)
{
void *p;
p = malloc(n);
- debug(64,(stderr, "%x = malloc(%d)\n", p, n));
+ debug(64,(stderr, "%lx = malloc(%ld)\n", (unsigned long) p, n));
if (p == NULL)
panic("no more malloc space");
return(p);
@@ -109,7 +108,7 @@ void *Malloc (long n)
void
Free(void *p)
{
- debug(64,(stderr, "%x = free\n", p));
+ debug(64,(stderr, "%lx = free\n", (unsigned long) p));
free(p);
}
@@ -121,6 +120,7 @@ Free(void *p)
/* */
/* ************************************************************ */
+#define __USE_BSD_SIGNAL
#include <signal.h>
static void SignalURG(int sig)
@@ -130,13 +130,15 @@ static void SignalURG(int sig)
static void SignalPIPE(int sig)
{
+ signal (SIGPIPE, SignalPIPE);
debug(1,(stderr, "==> SIGPIPE received\n"));
}
static void SignalINT(int sig)
{
+ signal (SIGINT, SignalINT);
debug(1,(stderr, "==> SIGINT received\n"));
- exit(1);
+ Interrupt = 1;
}
static void SignalQUIT(int sig)
@@ -161,17 +163,25 @@ static void SignalCONT(int sig)
debug(1,(stderr, "==> SIGCONT received\n"));
}
+static void SignalUSR1(int sig)
+{
+ debug(1,(stderr, "==> SIGCONT received\n"));
+ ScopeEnabled = ! ScopeEnabled;
+}
+
void
-SetSignalHandling()
+SetSignalHandling(void)
{
enterprocedure("SetSignalHandling");
- signal(SIGURG, SignalURG);
- signal(SIGPIPE, SignalPIPE);
- signal(SIGINT, SignalINT);
- signal(SIGQUIT, SignalQUIT);
- signal(SIGTERM, SignalTERM);
- signal(SIGTSTP, SignalTSTP);
- signal(SIGCONT, SignalCONT);
+ (void)signal(SIGURG, SignalURG);
+ (void)signal(SIGPIPE, SignalPIPE);
+ (void)signal(SIGINT, SignalINT);
+ (void)signal(SIGQUIT, SignalQUIT);
+ (void)signal(SIGTERM, SignalTERM);
+ (void)signal(SIGTSTP, SignalTSTP);
+ (void)signal(SIGCONT, SignalCONT);
+ if (HandleSIGUSR1)
+ (void)signal(SIGUSR1, SignalUSR1);
}
@@ -199,36 +209,34 @@ static int ListenTransCount;
#include <sys/socket.h> /* for AF_INET, SOCK_STREAM, ... */
#include <sys/ioctl.h> /* for FIONCLEX, FIONBIO, ... */
#include <sys/fcntl.h> /* for FIONCLEX, FIONBIO, ... */
+#ifdef SVR4
+#include <sys/filio.h>
+#endif
+
#include <netinet/in.h> /* struct sockaddr_in */
#include <netdb.h> /* struct servent * and struct hostent * */
-#ifdef DNETCONN
-#include <X11/dni.h>
-#endif
-#ifdef DNETSVR4
-#include <X11/dni8.h>
-#include <dlfcn.h>
-struct hostent *(*dnet_gethostbyname)();
-int (*dnet_gethostname)();
-short initialize_libdni();
-#endif
static int ON = 1 /* used in ioctl */ ;
#define BACKLOG 5
#endif
void
-SetUpConnectionSocket(iport)
- int iport;
+SetUpConnectionSocket(
+ int iport,
+ void (*connectionFunc)(int))
{
#ifdef USE_XTRANS
char port[20];
int partial;
int i;
- extern long ServerBasePort;
#else
FD ConnectionSocket;
struct sockaddr_in sin;
- short port;
+ short port;
+ int one = 1;
+#ifndef SO_DONTLINGER
+ struct linger linger;
+#endif /* SO_DONTLINGER */
#endif
enterprocedure("SetUpConnectionSocket");
@@ -251,7 +259,7 @@ SetUpConnectionSocket(iport)
ListenTransFds[i] = fd;
debug(4,(stderr, "Listening on FD %d\n", fd));
- UsingFD(fd, NewConnection, ListenTransConns[i]);
+ UsingFD(fd, NewConnection, NULL, ListenTransConns[i]);
}
} else {
panic("Could not open any listening connections");
@@ -265,11 +273,17 @@ SetUpConnectionSocket(iport)
perror("socket");
exit(-1);
}
- (void)setsockopt(ConnectionSocket, SOL_SOCKET, SO_REUSEADDR, (char *)NULL, 0);
+ (void)setsockopt(ConnectionSocket, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof (int));
+#ifdef SO_USELOOPBACK
(void)setsockopt(ConnectionSocket, SOL_SOCKET, SO_USELOOPBACK, (char *)NULL, 0);
-#ifdef SO_DONTLINGER
- (void)setsockopt(ConnectionSocket, SOL_SOCKET, SO_DONTLINGER, (char *)NULL, 0);
#endif
+#ifdef SO_DONTLINGER
+ (void)setsockopt(ConnectionSocket, SOL_SOCKET, SO_DONTLINGER, (char *)NULL, 0);
+#else /* SO_DONTLINGER */
+ linger.l_onoff = 0;
+ linger.l_linger = 0;
+ (void)setsockopt(ConnectionSocket, SOL_SOCKET, SO_LINGER, (char *)&linger, sizeof linger);
+#endif /* SO_DONTLINGER */
/* define the name and port to be used with the connection socket */
bzero((char *)&sin, sizeof(sin));
@@ -318,129 +332,24 @@ SetUpConnectionSocket(iport)
};
/* a few more parameter settings */
- ioctl(ConnectionSocket, FIOCLEX, 0);
- ioctl(ConnectionSocket, FIONBIO, &ON);
-
- debug(4,(stderr, "Listening on FD %d\n", ConnectionSocket));
- UsingFD(ConnectionSocket, NewConnection);
+#ifdef FD_CLOEXEC
+ (void)fcntl(ConnectionSocket, F_SETFD, FD_CLOEXEC);
+#else
+ (void)ioctl(ConnectionSocket, FIOCLEX, 0);
#endif
-
-}
-
-#ifndef USE_XTRANS
-#ifdef DNETSVR4
-SetUpDECnetConnection(display)
-int display;
-{
- struct sockaddr_dn *sdn,sdnn; /* DECnet socket */
- struct hostent *hp;
- int sock;
- char hostname[6];
-
- if (!initialize_libdni()) {
- fprintf(stderr,"Unable to open libdni.so\n");
- exit(0);
- }
- sdn = &sdnn;
- if (!(dnet_gethostname)(hostname)) {
- fprintf(stderr,"Can't get DECnet local host name\n");
- exit(0);
- }
- if ((hp = (struct hostent *)(dnet_gethostbyname)(hostname)) == NULL) {
- fprintf(stderr,"xhost: can't get name %s\n",hostname);
- exit(0);
- }
- sdn->sdn_family = AF_DECnet;
- sdn->sdn_format = DNADDR_FMT1;
- sdn->sdn_port = 0;
- sprintf ((char *)sdn->sdn_name, "X$X%d", display);
- sdn->sdn_namelen = strlen((char *)sdn->sdn_name);
- sdn->sdn_addr = *(u_short *)hp->h_addr_list[0];
-
- if ((sock = socket (AF_DECnet, SOCK_STREAM, 0)) < 0) {
- perror("socket");
- exit(0);
- }
- (void)setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)NULL, 0);
- (void)setsockopt(sock, SOL_SOCKET, SO_USELOOPBACK, (char *)NULL, 0);
-
- if (bind(sock, (struct sockaddr_dn *)sdn,
- sizeof(struct sockaddr_dn)) < 0) {
- perror("DNI Bind");
- exit(0);
- }
- if (listen(sock, 100) < 0) {
- perror("DNI Listen");
- exit(0);
- }
-
- UsingFD(sock, NewConnection);
-}
+ /* ultrix reads hang on Unix sockets, hpux reads fail */
+#if defined(O_NONBLOCK) && (!defined(ultrix) && !defined(hpux))
+ (void) fcntl (ConnectionSocket, F_SETFL, O_NONBLOCK);
+#else
+#ifdef FIOSNBIO
+ (void) ioctl (ConnectionSocket, FIOSNBIO, &ON);
+#else
+ (void) fcntl (ConnectionSocket, F_SETFL, FNDELAY);
#endif
-
-#ifdef DNETCONN
-SetUpDECnetConnection(display)
-int display;
-{
- struct ses_io_type sesopts;
- char objname[6];
- FD fd;
-
- enterprocedure("SetUpDECnetConnection");
- sprintf (objname, "X$X%d", display);
- if ((fd = open("/dev/dni", O_RDWR)) < 0) {
- fprintf(stderr,"xscope: dni: open failed\n");
- exit(-1);
- }
- if (ioctl(fd, SES_GET_LINK, 0)) {
- fprintf(stderr,"xscope: dni: can't get link\n");
- exit(-1);
- }
- /* set nonblocking here since dni ignores fcntls */
- /* set asyncronous to avoid blocking on SES_GET_AI */
- sesopts.io_flags = SES_IO_NBIO + SES_IO_ASYNCH_MODE;
- sesopts.io_io_signal = SIGIO;
- sesopts.io_int_signal = 0;
-
- if (ioctl(fd, SES_IO_TYPE, &sesopts) < 0) {
- fprintf(stderr,"xscope: dni: ioctl failed\n");
- exit(-1);
- }
-
- /* register as server */
- if (ioctl(fd, SES_NAME_SERVER, objname) < 0) {
- fprintf(stderr,"xscope: dni: ioctl failed\n");
- exit(-1);
- }
- debug(4,(stderr, "Listening on DECnet FD %d\n", fd));
- UsingFD(fd, NewConnection);
-}
#endif
-#ifdef DNETSVR4
-short
-initialize_libdni()
-{
- void *handle;
- char *home;
- char *path;
-
- if (dnet_gethostname && dnet_gethostbyname)
- return(1);
- if (!(handle = dlopen("/etc/openwin/lib/libdni.so",RTLD_NOW))) {
- if ((home = (char *)getenv("DNI_X_ENABLE")) == NULL)
- return(0);
- path = (char *)malloc(strlen(home) + 12);
- sprintf(path, "%s%s",home, "/libdni.so");
- if (!(handle = dlopen(path,RTLD_NOW)))
- return(0);
- free(path);
- }
- if (!(dnet_gethostbyname = (struct hostent *(*)())dlsym(handle,"dni_gethostbyname")))
- return(0);
- if (!(dnet_gethostname = (int (*)())dlsym(handle,"dni_gethostname")))
- return(0);
- return(1);
-}
+ debug(4,(stderr, "Listening on FD %d\n", ConnectionSocket));
+ UsingFD(ConnectionSocket, connectionFunc, NULL, NULL);
#endif
-#endif /* USE_XTRANS */
+}
+
diff --git a/configure.ac b/configure.ac
index fd86a54..9f1a922 100644
--- a/configure.ac
+++ b/configure.ac
@@ -37,7 +37,12 @@ AM_MAINTAINER_MODE
AM_CONFIG_HEADER(config.h)
+# Require xorg-macros: XORG_CWARNFLAGS, XORG_CHANGELOG, XORG_WITH_LINT
+m4_ifndef([XORG_MACROS_VERSION], [AC_FATAL([must install xorg-macros 1.2 or later before running autoconf/autogen])])
+XORG_MACROS_VERSION(1.2)
+
AC_PROG_CC
+XORG_CWARNFLAGS
AC_PROG_INSTALL
dnl Issue an error if xtrans.m4 was not found and XTRANS_CONNECTION_FLAGS macro
@@ -60,5 +65,9 @@ AC_SUBST(XSCOPE_LIBS)
XORG_MANPAGE_SECTIONS
XORG_RELEASE_VERSION
+XORG_CHANGELOG
+
+dnl Allow checking code with lint, sparse, etc.
+XORG_WITH_LINT
AC_OUTPUT([Makefile])
diff --git a/decode11.c b/decode11.c
index c3f5a15..1cd9d30 100644
--- a/decode11.c
+++ b/decode11.c
@@ -55,6 +55,8 @@
#include "scope.h"
#include "x11.h"
+#include "extensions.h"
+#include "lbxscope.h"
#ifdef SYSV
#define bzero(s,l) memset(s, 0, l)
@@ -96,6 +98,7 @@ struct QueueEntry
struct QueueEntry *Next;
long SequenceNumber;
short Request;
+ short RequestMinor;
};
/* free space list of Q entries */
@@ -103,9 +106,11 @@ struct QueueEntry
static struct QueueEntry *FreeQEntries = NULL;
/* ************************************************************ */
-static struct QueueEntry *NewQEntry (SequenceNumber, Request)
- long SequenceNumber;
- short Request;
+static struct QueueEntry *
+NewQEntry (
+ long SequenceNumber,
+ short Request,
+ short RequestMinor)
{
struct QueueEntry *p;
@@ -126,6 +131,7 @@ static struct QueueEntry *NewQEntry (SequenceNumber, Request)
p->Next = NULL;
p->SequenceNumber = SequenceNumber;
p->Request = Request;
+ p->RequestMinor = RequestMinor;
return(p);
}
/* ************************************************************ */
@@ -143,7 +149,7 @@ static struct QueueHeader ReplyQ[StaticMaxFD];
/* ************************************************************ */
void
-InitReplyQ()
+InitReplyQ (void)
{
short i;
for (i = 0; i < StaticMaxFD; i++)
@@ -154,8 +160,8 @@ InitReplyQ()
}
void
-FlushReplyQ(fd)
-FD fd;
+FlushReplyQ (
+ FD fd)
{
struct QueueEntry *p;
struct QueueEntry *NextQEntry;
@@ -175,16 +181,18 @@ FD fd;
}
static void
-DumpReplyQ(fd)
- FD fd;
+DumpReplyQ (
+ FD fd)
{
- fprintf(stderr, "ReplyQ[%d] = { Head 0x%x; Tail 0x%x }\n",
- fd, ReplyQ[fd].Head, ReplyQ[fd].Tail);
+ fprintf(stderr, "ReplyQ[%d] = { Head 0x%lx; Tail 0x%lx }\n",
+ fd, (unsigned long)ReplyQ[fd].Head, (unsigned long)ReplyQ[fd].Tail);
{
struct QueueEntry *p;
for (p = ReplyQ[fd].Head; p != NULL; p = p->Next)
- fprintf(stderr, "0x%x = { Next 0x%x; SequenceNumber %d; Request %d }\n",
- p, p->Next, p->SequenceNumber, p->Request);
+ fprintf(stderr,
+ "0x%lx = { Next 0x%lx; SequenceNumber %ld; Request %d }\n",
+ (unsigned long) p, (unsigned long) p->Next,
+ (unsigned long) p->SequenceNumber, p->Request);
}
}
/* ************************************************************ */
@@ -196,17 +204,19 @@ DumpReplyQ(fd)
with this one */
static void
-SequencedReplyExpected(fd, SequenceNumber, RequestType)
- FD fd;
- long SequenceNumber;
- short RequestType;
+SequencedReplyExpected (
+ FD fd,
+ long SequenceNumber,
+ short RequestType,
+ short RequestMinorType)
{
struct QueueEntry *p;
- debug(8,(stderr, "Reply expected: sequence %d and request type %d for fd %d\n",
- SequenceNumber, RequestType, fd));
+ debug(8,(stderr,
+ "Reply expected: sequence %ld and request type %d,%d for fd %d\n",
+ SequenceNumber, RequestType, RequestMinorType, fd));
/* create a new queue entry */
- p = NewQEntry(SequenceNumber, RequestType);
+ p = NewQEntry(SequenceNumber, RequestType, RequestMinorType);
/* find the server associated with this client */
fd = FDPair(fd);
@@ -219,21 +229,24 @@ SequencedReplyExpected(fd, SequenceNumber, RequestType)
ReplyQ[fd].Head = p;
ReplyQ[fd].Tail = p;
- debug(8,(stderr, "Save sequence %d and request type %d for fd %d\n",
- p->SequenceNumber, p->Request, fd));
+ debug(8,(stderr, "Save sequence %ld and request type %d,%d for fd %d\n",
+ p->SequenceNumber, p->Request, p->RequestMinor, fd));
}
static FD Lastfd;
static long LastSequenceNumber;
static short LastReplyType;
+static short LastReplyMinorType;
/* search for the type of request that is associated with a reply
to the given sequence number for this fd */
-static short CheckReplyTable (fd, SequenceNumber)
- FD fd;
- short SequenceNumber;
+short
+CheckReplyTable (
+ FD fd,
+ short SequenceNumber,
+ short *minorp)
{
struct QueueEntry *p;
struct QueueEntry *trailer;
@@ -250,6 +263,7 @@ static short CheckReplyTable (fd, SequenceNumber)
Lastfd = fd;
LastSequenceNumber = p->SequenceNumber;
LastReplyType = p->Request;
+ LastReplyMinorType = p->RequestMinor;
/* pull the queue entry out of the queue for this fd */
if (trailer == NULL)
@@ -263,8 +277,9 @@ static short CheckReplyTable (fd, SequenceNumber)
p->Next = FreeQEntries;
FreeQEntries = p;
- debug(8,(stderr, "Reply on fd %d for sequence %d is type %d\n",
- fd, SequenceNumber, LastReplyType));
+ debug(8,(stderr, "Reply on fd %d for sequence %d is type %d,%x\n",
+ fd, SequenceNumber, LastReplyType, LastReplyMinorType));
+ *minorp = LastReplyMinorType;
return(LastReplyType);
}
}
@@ -280,12 +295,21 @@ static short CheckReplyTable (fd, SequenceNumber)
/* A reply is expected to the type of request given for the
sequence number associated with this fd */
-static void
-ReplyExpected(fd, Request)
- FD fd;
- short Request;
+void
+ReplyExpected (
+ FD fd,
+ short Request)
+{
+ SequencedReplyExpected(fd, CS[fd].SequenceNumber, Request, 0);
+}
+
+void
+ExtendedReplyExpected (
+ FD fd,
+ short Request,
+ short RequestMinor)
{
- SequencedReplyExpected(fd, CS[fd].SequenceNumber, Request);
+ SequencedReplyExpected(fd, CS[fd].SequenceNumber, Request, RequestMinor);
}
/* ************************************************************ */
@@ -293,432 +317,484 @@ ReplyExpected(fd, Request)
/* This is only used with ListFontsWithInfo */
void
-KeepLastReplyExpected()
+KeepLastReplyExpected (void)
{
- SequencedReplyExpected(Lastfd, LastSequenceNumber, LastReplyType);
+ SequencedReplyExpected(Lastfd, LastSequenceNumber, LastReplyType,
+ LastReplyMinorType);
}
+#define DUMP_REQUEST 0
+#define DUMP_REPLY 1
+#define DUMP_EVENT 2
+#define DUMP_ERROR 3
+
+static const char * const simple_names[] = {
+ "REQUEST",
+ "REPLY ",
+ "EVENT ",
+ "ERROR ",
+};
+
+static void
+SimpleDump (int type, FD fd, short Major, short Minor, long bytes)
+{
+ PrintTime ();
+ fprintf (stdout, "@@%s %3d %3d %3d %7ld\n",
+ simple_names[type],
+ ClientNumber(fd),
+ Major, Minor, bytes);
+}
+
/* ************************************************************ */
/* */
/* */
/* ************************************************************ */
void
-DecodeRequest(fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+DecodeRequest (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
short Request = IByte (&buf[0]);
+ short RequestMinor = Request >= 128 ? IByte (&buf[1]) : 0;
+ unsigned long seq;
+
CS[fd].SequenceNumber += 1;
- bcopy ((char *)&(CS[fd].SequenceNumber), (char *)SBf, sizeof(long));
+ seq = CS[fd].SequenceNumber;
+ if (CS[fd].littleEndian) {
+ SBf[0] = seq;
+ SBf[1] = seq >> 8;
+ SBf[2] = seq >> 16;
+ SBf[3] = seq >> 24;
+ } else {
+ SBf[0] = seq >> 24;
+ SBf[1] = seq >> 16;
+ SBf[2] = seq >> 8;
+ SBf[3] = seq;
+ }
SetIndentLevel(PRINTCLIENT);
+ /* Special handling of QueryExtension to save extension names */
+ if (Request == 98)
+ {
+ ProcessQueryExtensionRequest(seq, buf);
+ }
+
+ if (Verbose < 0)
+ {
+ SimpleDump (DUMP_REQUEST, fd, Request, RequestMinor, n);
+ return;
+ }
+
if (Raw || (Verbose > 3))
DumpItem("Request", fd, buf, n);
- if (Request <= 0 || 127 < Request)
- warn("Extended request opcode");
+
+ if (Request < 0 || 127 < Request)
+ {
+ ExtensionRequest(fd, buf, Request);
+ }
else switch (Request)
- {
+ {
case 1:
- CreateWindow(buf);
+ CreateWindow(fd, buf);
break;
case 2:
- ChangeWindowAttributes(buf);
+ ChangeWindowAttributes(fd, buf);
break;
case 3:
- GetWindowAttributes(buf);
+ GetWindowAttributes(fd, buf);
ReplyExpected(fd, Request);
break;
case 4:
- DestroyWindow(buf);
+ DestroyWindow(fd, buf);
break;
case 5:
- DestroySubwindows(buf);
+ DestroySubwindows(fd, buf);
break;
case 6:
- ChangeSaveSet(buf);
+ ChangeSaveSet(fd, buf);
break;
case 7:
- ReparentWindow(buf);
+ ReparentWindow(fd, buf);
break;
case 8:
- MapWindow(buf);
+ MapWindow(fd, buf);
break;
case 9:
- MapSubwindows(buf);
+ MapSubwindows(fd, buf);
break;
case 10:
- UnmapWindow(buf);
+ UnmapWindow(fd, buf);
break;
case 11:
- UnmapSubwindows(buf);
+ UnmapSubwindows(fd, buf);
break;
case 12:
- ConfigureWindow(buf);
+ ConfigureWindow(fd, buf);
break;
case 13:
- CirculateWindow(buf);
+ CirculateWindow(fd, buf);
break;
case 14:
- GetGeometry(buf);
+ GetGeometry(fd, buf);
ReplyExpected(fd, Request);
break;
case 15:
- QueryTree(buf);
+ QueryTree(fd, buf);
ReplyExpected(fd, Request);
break;
case 16:
- InternAtom(buf);
+ InternAtom(fd, buf);
ReplyExpected(fd, Request);
break;
case 17:
- GetAtomName(buf);
+ GetAtomName(fd, buf);
ReplyExpected(fd, Request);
break;
case 18:
- ChangeProperty(buf);
+ ChangeProperty(fd, buf);
break;
case 19:
- DeleteProperty(buf);
+ DeleteProperty(fd, buf);
break;
case 20:
- GetProperty(buf);
+ GetProperty(fd, buf);
ReplyExpected(fd, Request);
break;
case 21:
- ListProperties(buf);
+ ListProperties(fd, buf);
ReplyExpected(fd, Request);
break;
case 22:
- SetSelectionOwner(buf);
+ SetSelectionOwner(fd, buf);
break;
case 23:
- GetSelectionOwner(buf);
+ GetSelectionOwner(fd, buf);
ReplyExpected(fd, Request);
break;
case 24:
- ConvertSelection(buf);
+ ConvertSelection(fd, buf);
break;
case 25:
- SendEvent(buf);
+ SendEvent(fd, buf);
break;
case 26:
- GrabPointer(buf);
+ GrabPointer(fd, buf);
ReplyExpected(fd, Request);
break;
case 27:
- UngrabPointer(buf);
+ UngrabPointer(fd, buf);
break;
case 28:
- GrabButton(buf);
+ GrabButton(fd, buf);
break;
case 29:
- UngrabButton(buf);
+ UngrabButton(fd, buf);
break;
case 30:
- ChangeActivePointerGrab(buf);
+ ChangeActivePointerGrab(fd, buf);
break;
case 31:
- GrabKeyboard(buf);
+ GrabKeyboard(fd, buf);
ReplyExpected(fd, Request);
break;
case 32:
- UngrabKeyboard(buf);
+ UngrabKeyboard(fd, buf);
break;
case 33:
- GrabKey(buf);
+ GrabKey(fd, buf);
break;
case 34:
- UngrabKey(buf);
+ UngrabKey(fd, buf);
break;
case 35:
- AllowEvents(buf);
+ AllowEvents(fd, buf);
break;
case 36:
- GrabServer(buf);
+ GrabServer(fd, buf);
break;
case 37:
- UngrabServer(buf);
+ UngrabServer(fd, buf);
break;
case 38:
- QueryPointer(buf);
+ QueryPointer(fd, buf);
ReplyExpected(fd, Request);
break;
case 39:
- GetMotionEvents(buf);
+ GetMotionEvents(fd, buf);
ReplyExpected(fd, Request);
break;
case 40:
- TranslateCoordinates(buf);
+ TranslateCoordinates(fd, buf);
ReplyExpected(fd, Request);
break;
case 41:
- WarpPointer(buf);
+ WarpPointer(fd, buf);
break;
case 42:
- SetInputFocus(buf);
+ SetInputFocus(fd, buf);
break;
case 43:
- GetInputFocus(buf);
+ GetInputFocus(fd, buf);
ReplyExpected(fd, Request);
break;
case 44:
- QueryKeymap(buf);
+ QueryKeymap(fd, buf);
ReplyExpected(fd, Request);
break;
case 45:
- OpenFont(buf);
+ OpenFont(fd, buf);
break;
case 46:
- CloseFont(buf);
+ CloseFont(fd, buf);
break;
case 47:
- QueryFont(buf);
+ QueryFont(fd, buf);
ReplyExpected(fd, Request);
break;
case 48:
- QueryTextExtents(buf);
+ QueryTextExtents(fd, buf);
ReplyExpected(fd, Request);
break;
case 49:
- ListFonts(buf);
+ ListFonts(fd, buf);
ReplyExpected(fd, Request);
break;
case 50:
- ListFontsWithInfo(buf);
+ ListFontsWithInfo(fd, buf);
ReplyExpected(fd, Request);
break;
case 51:
- SetFontPath(buf);
+ SetFontPath(fd, buf);
break;
case 52:
- GetFontPath(buf);
+ GetFontPath(fd, buf);
ReplyExpected(fd, Request);
break;
case 53:
- CreatePixmap(buf);
+ CreatePixmap(fd, buf);
break;
case 54:
- FreePixmap(buf);
+ FreePixmap(fd, buf);
break;
case 55:
- CreateGC(buf);
+ CreateGC(fd, buf);
break;
case 56:
- ChangeGC(buf);
+ ChangeGC(fd, buf);
break;
case 57:
- CopyGC(buf);
+ CopyGC(fd, buf);
break;
case 58:
- SetDashes(buf);
+ SetDashes(fd, buf);
break;
case 59:
- SetClipRectangles(buf);
+ SetClipRectangles(fd, buf);
break;
case 60:
- FreeGC(buf);
+ FreeGC(fd, buf);
break;
case 61:
- ClearArea(buf);
+ ClearArea(fd, buf);
break;
case 62:
- CopyArea(buf);
+ CopyArea(fd, buf);
break;
case 63:
- CopyPlane(buf);
+ CopyPlane(fd, buf);
break;
case 64:
- PolyPoint(buf);
+ PolyPoint(fd, buf);
break;
case 65:
- PolyLine(buf);
+ PolyLine(fd, buf);
break;
case 66:
- PolySegment(buf);
+ PolySegment(fd, buf);
break;
case 67:
- PolyRectangle(buf);
+ PolyRectangle(fd, buf);
break;
case 68:
- PolyArc(buf);
+ PolyArc(fd, buf);
break;
case 69:
- FillPoly(buf);
+ FillPoly(fd, buf);
break;
case 70:
- PolyFillRectangle(buf);
+ PolyFillRectangle(fd, buf);
break;
case 71:
- PolyFillArc(buf);
+ PolyFillArc(fd, buf);
break;
case 72:
- PutImage(buf);
+ PutImage(fd, buf);
break;
case 73:
- GetImage(buf);
+ GetImage(fd, buf);
ReplyExpected(fd, Request);
break;
case 74:
- PolyText8(buf);
+ PolyText8(fd, buf);
break;
case 75:
- PolyText16(buf);
+ PolyText16(fd, buf);
break;
case 76:
- ImageText8(buf);
+ ImageText8(fd, buf);
break;
case 77:
- ImageText16(buf);
+ ImageText16(fd, buf);
break;
case 78:
- CreateColormap(buf);
+ CreateColormap(fd, buf);
break;
case 79:
- FreeColormap(buf);
+ FreeColormap(fd, buf);
break;
case 80:
- CopyColormapAndFree(buf);
+ CopyColormapAndFree(fd, buf);
break;
case 81:
- InstallColormap(buf);
+ InstallColormap(fd, buf);
break;
case 82:
- UninstallColormap(buf);
+ UninstallColormap(fd, buf);
break;
case 83:
- ListInstalledColormaps(buf);
+ ListInstalledColormaps(fd, buf);
ReplyExpected(fd, Request);
break;
case 84:
- AllocColor(buf);
+ AllocColor(fd, buf);
ReplyExpected(fd, Request);
break;
case 85:
- AllocNamedColor(buf);
+ AllocNamedColor(fd, buf);
ReplyExpected(fd, Request);
break;
case 86:
- AllocColorCells(buf);
+ AllocColorCells(fd, buf);
ReplyExpected(fd, Request);
break;
case 87:
- AllocColorPlanes(buf);
+ AllocColorPlanes(fd, buf);
ReplyExpected(fd, Request);
break;
case 88:
- FreeColors(buf);
+ FreeColors(fd, buf);
break;
case 89:
- StoreColors(buf);
+ StoreColors(fd, buf);
break;
case 90:
- StoreNamedColor(buf);
+ StoreNamedColor(fd, buf);
break;
case 91:
- QueryColors(buf);
+ QueryColors(fd, buf);
ReplyExpected(fd, Request);
break;
case 92:
- LookupColor(buf);
+ LookupColor(fd, buf);
ReplyExpected(fd, Request);
break;
case 93:
- CreateCursor(buf);
+ CreateCursor(fd, buf);
break;
case 94:
- CreateGlyphCursor(buf);
+ CreateGlyphCursor(fd, buf);
break;
case 95:
- FreeCursor(buf);
+ FreeCursor(fd, buf);
break;
case 96:
- RecolorCursor(buf);
+ RecolorCursor(fd, buf);
break;
case 97:
- QueryBestSize(buf);
+ QueryBestSize(fd, buf);
ReplyExpected(fd, Request);
break;
case 98:
- QueryExtension(buf);
+ QueryExtension(fd, buf);
ReplyExpected(fd, Request);
break;
case 99:
- ListExtensions(buf);
+ ListExtensions(fd, buf);
ReplyExpected(fd, Request);
break;
case 100:
- ChangeKeyboardMapping(buf);
+ ChangeKeyboardMapping(fd, buf);
break;
case 101:
- GetKeyboardMapping(buf);
+ GetKeyboardMapping(fd, buf);
ReplyExpected(fd, Request);
break;
case 102:
- ChangeKeyboardControl(buf);
+ ChangeKeyboardControl(fd, buf);
break;
case 103:
- GetKeyboardControl(buf);
+ GetKeyboardControl(fd, buf);
ReplyExpected(fd, Request);
break;
case 104:
- Bell(buf);
+ Bell(fd, buf);
break;
case 105:
- ChangePointerControl(buf);
+ ChangePointerControl(fd, buf);
break;
case 106:
- GetPointerControl(buf);
+ GetPointerControl(fd, buf);
ReplyExpected(fd, Request);
break;
case 107:
- SetScreenSaver(buf);
+ SetScreenSaver(fd, buf);
break;
case 108:
- GetScreenSaver(buf);
+ GetScreenSaver(fd, buf);
ReplyExpected(fd, Request);
break;
case 109:
- ChangeHosts(buf);
+ ChangeHosts(fd, buf);
break;
case 110:
- ListHosts(buf);
+ ListHosts(fd, buf);
ReplyExpected(fd, Request);
break;
case 111:
- SetAccessControl(buf);
+ SetAccessControl(fd, buf);
break;
case 112:
- SetCloseDownMode(buf);
+ SetCloseDownMode(fd, buf);
break;
case 113:
- KillClient(buf);
+ KillClient(fd, buf);
break;
case 114:
- RotateProperties(buf);
+ RotateProperties(fd, buf);
break;
case 115:
- ForceScreenSaver(buf);
+ ForceScreenSaver(fd, buf);
break;
case 116:
- SetPointerMapping(buf);
+ SetPointerMapping(fd, buf);
ReplyExpected(fd, Request);
break;
case 117:
- GetPointerMapping(buf);
+ GetPointerMapping(fd, buf);
ReplyExpected(fd, Request);
break;
case 118:
- SetModifierMapping(buf);
+ SetModifierMapping(fd, buf);
ReplyExpected(fd, Request);
break;
case 119:
- GetModifierMapping(buf);
+ GetModifierMapping(fd, buf);
ReplyExpected(fd, Request);
break;
case 127:
- NoOperation(buf);
+ NoOperation(fd, buf);
break;
default:
warn("Unimplemented request opcode");
@@ -732,26 +808,41 @@ DecodeRequest(fd, buf, n)
/* ************************************************************ */
void
-DecodeReply(fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+DecodeReply (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
short SequenceNumber = IShort (&buf[2]);
- short Request = CheckReplyTable (fd, SequenceNumber);
- if (Request == 0)
- {
- warn("Unexpected reply");
- return;
- }
+ short RequestMinor;
+ short Request = CheckReplyTable (fd, SequenceNumber, &RequestMinor);
+
+ /* Special handling of QueryExtension to save extension names */
+ if (Request == 98)
+ {
+ ProcessQueryExtensionReply(SequenceNumber, buf);
+ }
+
+ if (Verbose < 0)
+ {
+ SimpleDump (DUMP_REPLY, fd, Request, RequestMinor, n);
+ return;
+ }
+
SetIndentLevel(PRINTSERVER);
RBf[0] = Request /* for the PrintField in the Reply procedure */ ;
+ RBf[1] = RequestMinor;
if (Raw || (Verbose > 3))
DumpItem("Reply", fd, buf, n);
- if (Request <= 0 || 127 < Request)
- warn("Extended reply opcode");
+ if (Request < 0 || 127 < Request)
+ {
+ ExtensionReply(fd, buf, Request, RequestMinor);
+ }
else switch (Request)
{
+ case 0:
+ UnknownReply(buf);
+ break;
case 3:
GetWindowAttributesReply(buf);
break;
@@ -884,74 +975,87 @@ DecodeReply(fd, buf, n)
/* ************************************************************ */
void
-DecodeError(fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+DecodeError (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
- short Error = IByte (&buf[1]);
- SetIndentLevel(PRINTSERVER);
- if (Raw || (Verbose > 3))
- DumpItem("Error", fd, buf, n);
- (void)CheckReplyTable (fd, (short)IShort(&buf[2]));
- if (Error < 1 || Error > 17)
- warn("Extended Error code");
- else switch (Error)
+ short Error = IByte (&buf[1]);
+ short Request = 0;
+ short RequestMinor = 0;
+
+ Request = CheckReplyTable (fd, (short)IShort(&buf[2]), &RequestMinor);
+
+ if (Verbose < 0)
{
- case 1:
- RequestError(buf);
- break;
- case 2:
- ValueError(buf);
- break;
- case 3:
- WindowError(buf);
- break;
- case 4:
- PixmapError(buf);
- break;
- case 5:
- AtomError(buf);
- break;
- case 6:
- CursorError(buf);
- break;
- case 7:
- FontError(buf);
- break;
- case 8:
- MatchError(buf);
- break;
- case 9:
- DrawableError(buf);
- break;
- case 10:
- AccessError(buf);
- break;
- case 11:
- AllocError(buf);
- break;
- case 12:
- ColormapError(buf);
- break;
- case 13:
- GContextError(buf);
- break;
- case 14:
- IDChoiceError(buf);
- break;
- case 15:
- NameError(buf);
- break;
- case 16:
- LengthError(buf);
- break;
- case 17:
- ImplementationError(buf);
- break;
- default:
- warn("Unimplemented error code");
- break;
+ SimpleDump (DUMP_ERROR, fd, Request, RequestMinor, n);
+ return;
+ }
+
+ SetIndentLevel(PRINTSERVER);
+ if (Raw || (Verbose > 3))
+ DumpItem("Error", fd, buf, n);
+
+ if (Error < 1 || Error > 17)
+ {
+ ExtensionError(fd, buf, Error);
+ }
+ else switch (Error)
+ {
+ case 1:
+ RequestError(buf);
+ break;
+ case 2:
+ ValueError(buf);
+ break;
+ case 3:
+ WindowError(buf);
+ break;
+ case 4:
+ PixmapError(buf);
+ break;
+ case 5:
+ AtomError(buf);
+ break;
+ case 6:
+ CursorError(buf);
+ break;
+ case 7:
+ FontError(buf);
+ break;
+ case 8:
+ MatchError(buf);
+ break;
+ case 9:
+ DrawableError(buf);
+ break;
+ case 10:
+ AccessError(buf);
+ break;
+ case 11:
+ AllocError(buf);
+ break;
+ case 12:
+ ColormapError(buf);
+ break;
+ case 13:
+ GContextError(buf);
+ break;
+ case 14:
+ IDChoiceError(buf);
+ break;
+ case 15:
+ NameError(buf);
+ break;
+ case 16:
+ LengthError(buf);
+ break;
+ case 17:
+ ImplementationError(buf);
+ break;
+ default:
+ warn("Unimplemented error code");
+ break;
}
}
@@ -961,120 +1065,137 @@ DecodeError(fd, buf, n)
/* ************************************************************ */
void
-DecodeEvent(fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+DecodeEvent (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
- short Event = IByte (&buf[0]);
- SetIndentLevel(PRINTSERVER);
- if (Raw || (Verbose > 3))
- DumpItem("Event", fd, buf, n);
- if (Event < 2 || Event > 34)
- warn("Extended Event code");
- else switch (Event)
+ short Event = IByte (&buf[0]);
+ short EventMinor = Event == LBXEvent ? IByte (&buf[1]) : 0;
+
+ if (Verbose < 0)
{
- case 2:
- KeyPressEvent(buf);
- break;
- case 3:
- KeyReleaseEvent(buf);
- break;
- case 4:
- ButtonPressEvent(buf);
- break;
- case 5:
- ButtonReleaseEvent(buf);
- break;
- case 6:
- MotionNotifyEvent(buf);
- break;
- case 7:
- EnterNotifyEvent(buf);
- break;
- case 8:
- LeaveNotifyEvent(buf);
- break;
- case 9:
- FocusInEvent(buf);
- break;
- case 10:
- FocusOutEvent(buf);
- break;
- case 11:
- KeymapNotifyEvent(buf);
- break;
- case 12:
- ExposeEvent(buf);
- break;
- case 13:
- GraphicsExposureEvent(buf);
- break;
- case 14:
- NoExposureEvent(buf);
- break;
- case 15:
- VisibilityNotifyEvent(buf);
- break;
- case 16:
- CreateNotifyEvent(buf);
- break;
- case 17:
- DestroyNotifyEvent(buf);
- break;
- case 18:
- UnmapNotifyEvent(buf);
- break;
- case 19:
- MapNotifyEvent(buf);
- break;
- case 20:
- MapRequestEvent(buf);
- break;
- case 21:
- ReparentNotifyEvent(buf);
- break;
- case 22:
- ConfigureNotifyEvent(buf);
- break;
- case 23:
- ConfigureRequestEvent(buf);
- break;
- case 24:
- GravityNotifyEvent(buf);
- break;
- case 25:
- ResizeRequestEvent(buf);
- break;
- case 26:
- CirculateNotifyEvent(buf);
- break;
- case 27:
- CirculateRequestEvent(buf);
- break;
- case 28:
- PropertyNotifyEvent(buf);
- break;
- case 29:
- SelectionClearEvent(buf);
- break;
- case 30:
- SelectionRequestEvent(buf);
- break;
- case 31:
- SelectionNotifyEvent(buf);
- break;
- case 32:
- ColormapNotifyEvent(buf);
- break;
- case 33:
- ClientMessageEvent(buf);
- break;
- case 34:
- MappingNotifyEvent(buf);
- break;
- default:
- warn("Unimplemented event code");
- break;
+ SimpleDump (DUMP_EVENT, fd, Event, EventMinor, n);
+ return;
+ }
+
+ SetIndentLevel(PRINTSERVER);
+ if (Raw || (Verbose > 3))
+ DumpItem("Event", fd, buf, n);
+ /* high-order bit means SendEvent generated */
+ if (Event & 0x80)
+ {
+ debug(8,(stderr, "SendEvent generated event 0x%x\n", Event));
+ Event = Event & 0x7F;
+ }
+
+ if (Event < 2 || Event > 34)
+ {
+ ExtensionEvent(fd, buf, Event);
+ }
+ else switch (Event)
+ {
+ case 2:
+ KeyPressEvent(buf);
+ break;
+ case 3:
+ KeyReleaseEvent(buf);
+ break;
+ case 4:
+ ButtonPressEvent(buf);
+ break;
+ case 5:
+ ButtonReleaseEvent(buf);
+ break;
+ case 6:
+ MotionNotifyEvent(buf);
+ break;
+ case 7:
+ EnterNotifyEvent(buf);
+ break;
+ case 8:
+ LeaveNotifyEvent(buf);
+ break;
+ case 9:
+ FocusInEvent(buf);
+ break;
+ case 10:
+ FocusOutEvent(buf);
+ break;
+ case 11:
+ KeymapNotifyEvent(buf);
+ break;
+ case 12:
+ ExposeEvent(buf);
+ break;
+ case 13:
+ GraphicsExposureEvent(buf);
+ break;
+ case 14:
+ NoExposureEvent(buf);
+ break;
+ case 15:
+ VisibilityNotifyEvent(buf);
+ break;
+ case 16:
+ CreateNotifyEvent(buf);
+ break;
+ case 17:
+ DestroyNotifyEvent(buf);
+ break;
+ case 18:
+ UnmapNotifyEvent(buf);
+ break;
+ case 19:
+ MapNotifyEvent(buf);
+ break;
+ case 20:
+ MapRequestEvent(buf);
+ break;
+ case 21:
+ ReparentNotifyEvent(buf);
+ break;
+ case 22:
+ ConfigureNotifyEvent(buf);
+ break;
+ case 23:
+ ConfigureRequestEvent(buf);
+ break;
+ case 24:
+ GravityNotifyEvent(buf);
+ break;
+ case 25:
+ ResizeRequestEvent(buf);
+ break;
+ case 26:
+ CirculateNotifyEvent(buf);
+ break;
+ case 27:
+ CirculateRequestEvent(buf);
+ break;
+ case 28:
+ PropertyNotifyEvent(buf);
+ break;
+ case 29:
+ SelectionClearEvent(buf);
+ break;
+ case 30:
+ SelectionRequestEvent(buf);
+ break;
+ case 31:
+ SelectionNotifyEvent(buf);
+ break;
+ case 32:
+ ColormapNotifyEvent(buf);
+ break;
+ case 33:
+ ClientMessageEvent(buf);
+ break;
+ case 34:
+ MappingNotifyEvent(buf);
+ break;
+ default:
+ warn("Unimplemented event code");
+ break;
}
}
diff --git a/decode_bigreq.c b/decode_bigreq.c
new file mode 100644
index 0000000..be0d597
--- /dev/null
+++ b/decode_bigreq.c
@@ -0,0 +1,81 @@
+/*
+ * $XFree86$
+ *
+ * Copyright <20> 2000 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+
+#include <stdio.h>
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#include "scope.h"
+#include "x11.h"
+#include "bigreqscope.h"
+#include "extensions.h"
+
+unsigned char BIGREQRequest;
+
+void
+bigreq_decode_req (
+ FD fd,
+ const unsigned char *buf)
+{
+ short Major = IByte (&buf[0]);
+ short Minor = IByte (&buf[1]);
+
+ switch (Minor) {
+ case 0:
+ CS[fd].bigreqEnabled = 1;
+ BigreqEnable (fd, buf);
+ ExtendedReplyExpected (fd, Major, Minor); break;
+ default:
+ break;
+ }
+}
+
+void
+bigreq_decode_reply (
+ FD fd,
+ const unsigned char *buf,
+ short RequestMinor)
+{
+ switch (RequestMinor) {
+ case 0: BigreqEnableReply (fd, buf); break;
+ }
+}
+
+void
+InitializeBIGREQ(
+ const unsigned char *buf)
+{
+ TYPE p;
+
+ BIGREQRequest = (unsigned char)(buf[9]);
+
+ DefineEValue (&TD[REQUEST], (unsigned long) BIGREQRequest, "BigreqRequest");
+ DefineEValue (&TD[REPLY], (unsigned long) BIGREQRequest, "BigreqReply");
+
+ p = DefineType(BIGREQREQUEST, ENUMERATED, "BIGREQREQUEST", (PrintProcType) PrintENUMERATED);
+ DefineEValue(p, 0L, "BigreqEnable");
+
+ p = DefineType(BIGREQREPLY, ENUMERATED, "BIGREQREPLY", (PrintProcType) PrintENUMERATED);
+ DefineEValue (p, 0L, "BigreqEnable");
+}
diff --git a/decode_lbx.c b/decode_lbx.c
new file mode 100644
index 0000000..dd74657
--- /dev/null
+++ b/decode_lbx.c
@@ -0,0 +1,152 @@
+/*
+ * $NCDId$
+ *
+ * Copyright 1992 Network Computing Devices
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of NCD. not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. NCD. makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * NCD. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL NCD.
+ * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Keith Packard, Network Computing Devices
+ */
+
+#include <stdio.h>
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#define _XLBX_SERVER_
+#include "scope.h"
+#include "x11.h"
+#include "lbxscope.h"
+#include "extensions.h"
+
+unsigned char LBXRequest, LBXEvent, LBXError;
+
+void
+lbx_decode_req (
+ FD fd,
+ const unsigned char *buf)
+{
+ short Major = IByte (&buf[0]);
+ short Minor = IByte (&buf[1]);
+
+ switch (Minor) {
+ case 0:
+ LbxQueryVersion (fd, buf);
+ ExtendedReplyExpected (fd, Major, Minor);
+ break;
+ case 1:
+ LbxStartProxy (fd, buf);
+ break;
+ case 2:
+ LbxStopProxy (fd, buf);
+ break;
+ case 3:
+ LbxSwitch (fd, buf);
+ break;
+ case 4:
+ LbxNewClient(fd, buf);
+ break;
+ case 5:
+ LbxCloseClient (fd, buf);
+ break;
+ case 6:
+ LbxModifySequence (fd, buf);
+ break;
+ default:
+ break;
+ }
+}
+
+void
+lbx_decode_reply (
+ FD fd,
+ const unsigned char *buf,
+ short RequestMinor)
+{
+ switch (RequestMinor) {
+ case 0:
+ LbxQueryVersionReply (fd, buf);
+ break;
+ default:
+ break;
+ }
+}
+
+void
+lbx_decode_error (
+ FD fd,
+ const unsigned char *buf)
+{
+ short error = IByte(&buf[1]) - LBXError;
+
+ switch (error) {
+ case 0:
+ break;
+ default:
+ break;
+ }
+}
+
+void
+lbx_decode_event (
+ FD fd,
+ const unsigned char *buf)
+{
+ short event = IByte(&buf[0]) - LBXEvent;
+
+ switch (event) {
+ case 0:
+ LbxSwitchEvent (fd, buf);
+ break;
+ case 1:
+ LbxCloseEvent (fd, buf);
+ break;
+ default:
+ break;
+ }
+}
+
+void
+InitializeLBX (
+ const unsigned char *buf)
+{
+ TYPE p;
+
+ LBXRequest = (unsigned char)(buf[9]);
+ LBXEvent = (unsigned char)(buf[10]);
+ LBXError = (unsigned char)(buf[11]);
+
+ DefineEValue (&TD[REQUEST], (unsigned long) LBXRequest, "LbxRequest");
+ DefineEValue (&TD[REPLY], (unsigned long) LBXRequest, "LbxReply");
+ DefineEValue (&TD[EVENT], (unsigned long) LBXEvent, "LbxEvent");
+ DefineEValue (&TD[ERROR], (unsigned long) LBXError, "LbxError");
+
+ p = DefineType(LBXREQUEST, ENUMERATED, "LBXREQUEST", (PrintProcType) PrintENUMERATED);
+ DefineEValue(p, 0L, "QueryVersion");
+ DefineEValue(p, 1L, "StartProxy");
+ DefineEValue(p, 2L, "StopProxy");
+ DefineEValue(p, 3L, "Switch");
+ DefineEValue(p, 4L, "NewClient");
+ DefineEValue(p, 5L, "CloseClient");
+ DefineEValue(p, 6L, "ModifySequence");
+
+ p = DefineType(LBXREPLY, ENUMERATED, "LBXREPLY", (PrintProcType) PrintENUMERATED);
+ DefineEValue (p, 0L, "QueryVersion");
+
+ p = DefineType(LBXEVENT, ENUMERATED, "LBXEVENT", (PrintProcType) PrintENUMERATED);
+ DefineEValue (p, 0L, "SwitchEvent");
+ DefineEValue (p, 1L, "CloseEvent");
+}
diff --git a/decode_randr.c b/decode_randr.c
new file mode 100644
index 0000000..b6a1ce3
--- /dev/null
+++ b/decode_randr.c
@@ -0,0 +1,100 @@
+/*
+ * $XFree86$
+ *
+ * Copyright <20> 2001 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+
+#include <stdio.h>
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#define _RANDR_SERVER_
+#include "scope.h"
+#include "x11.h"
+#include "randrscope.h"
+#include "extensions.h"
+
+unsigned char RANDRRequest, RANDRError, RANDREvent;
+
+void
+randr_decode_req (
+ FD fd,
+ const unsigned char *buf)
+{
+ short Major = IByte (&buf[0]);
+ short Minor = IByte (&buf[1]);
+
+ switch (Minor) {
+ case 0: RandrQueryVersion (fd, buf); ExtendedReplyExpected (fd, Major, Minor); break;
+ case 1: RandrGetScreenInfo (fd, buf); ExtendedReplyExpected (fd, Major, Minor); break;
+ case 2: RandrSetScreenConfig (fd, buf); ExtendedReplyExpected (fd, Major, Minor); break;
+ case 3: RandrScreenChangeSelectInput (fd, buf);
+ default:
+ break;
+ }
+}
+
+void
+randr_decode_reply (
+ FD fd,
+ const unsigned char *buf,
+ short RequestMinor)
+{
+ switch (RequestMinor) {
+ case 0: RandrQueryVersionReply (fd, buf); break;
+ case 1: RandrGetScreenInfoReply (fd, buf); break;
+ case 2: RandrSetScreenConfigReply (fd, buf); break;
+ }
+}
+
+void
+randr_decode_event (
+ FD fd,
+ const unsigned char *buf)
+{
+ RandrScreenChangeNotifyEvent (buf);
+}
+
+void
+InitializeRANDR (
+ const unsigned char *buf)
+{
+ TYPE p;
+
+ RANDRRequest = (unsigned char)(buf[9]);
+ RANDREvent = (unsigned char)(buf[10]);
+ RANDRError = (unsigned char)(buf[11]);
+
+ DefineEValue (&TD[REQUEST], (unsigned long) RANDRRequest, "RandrRequest");
+ DefineEValue (&TD[REPLY], (unsigned long) RANDRRequest, "RandrReply");
+ DefineEValue (&TD[EVENT], (unsigned long) RANDREvent, "RRScreenChangeNotify");
+
+ p = DefineType(RANDRREQUEST, ENUMERATED, "RANDRREQUEST", (PrintProcType) PrintENUMERATED);
+ DefineEValue(p, 0L, "RandrQueryVersion");
+ DefineEValue(p, 1L, "RandrGetScreenInfo");
+ DefineEValue(p, 2L, "RandrSetScreenConfig");
+ DefineEValue(p, 3L, "RandrScreenChangeSelectInput");
+
+ p = DefineType(RANDRREPLY, ENUMERATED, "RANDRREPLY", (PrintProcType) PrintENUMERATED);
+ DefineEValue (p, 0L, "QueryVersion");
+ DefineEValue (p, 1L, "GetScreenInfo");
+ DefineEValue (p, 2L, "SetScreenConfig");
+}
diff --git a/decode_render.c b/decode_render.c
new file mode 100644
index 0000000..e1f5c05
--- /dev/null
+++ b/decode_render.c
@@ -0,0 +1,328 @@
+/*
+ * $XFree86$
+ *
+ * Copyright <20> 2000 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+
+#include <stdio.h>
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#define _RENDER_SERVER_
+#include "scope.h"
+#include "x11.h"
+#include "renderscope.h"
+#include "extensions.h"
+
+unsigned char RENDERRequest, RENDERError;
+
+void
+render_decode_req (
+ FD fd,
+ const unsigned char *buf)
+{
+ short Major = IByte (&buf[0]);
+ short Minor = IByte (&buf[1]);
+
+ switch (Minor) {
+ case 0: RenderQueryVersion (fd, buf); ExtendedReplyExpected (fd, Major, Minor); break;
+ case 1: RenderQueryPictFormats (fd, buf); ExtendedReplyExpected (fd, Major, Minor); break;
+ case 2: RenderQueryPictIndexValues (fd, buf); ExtendedReplyExpected (fd, Major, Minor); break;
+ case 3: RenderQueryDithers (fd, buf); ExtendedReplyExpected (fd, Major, Minor); break;
+ case 4: RenderCreatePicture (fd, buf); break;
+ case 5: RenderChangePicture (fd, buf); break;
+ case 6: RenderSetPictureClipRectangles (fd, buf); break;
+ case 7: RenderFreePicture (fd, buf); break;
+ case 8: RenderComposite (fd, buf); break;
+ case 9: RenderScale (fd, buf); break;
+ case 10: RenderTrapezoids (fd, buf); break;
+ case 11: RenderTriangles (fd, buf); break;
+ case 12: RenderTriStrip (fd, buf); break;
+ case 13: RenderTriFan (fd, buf); break;
+ case 14: RenderColorTrapezoids (fd, buf); break;
+ case 15: RenderColorTriangles (fd, buf); break;
+ case 16: RenderTransform (fd, buf); break;
+ case 17: RenderCreateGlyphSet (fd, buf); break;
+ case 18: RenderReferenceGlyphSet (fd, buf); break;
+ case 19: RenderFreeGlyphSet (fd, buf); break;
+ case 20: RenderAddGlyphs (fd, buf); break;
+ case 21: RenderAddGlyphsFromPicture (fd, buf); break;
+ case 22: RenderFreeGlyphs (fd, buf); break;
+ case 23: RenderCompositeGlyphs8 (fd, buf); break;
+ case 24: RenderCompositeGlyphs16 (fd, buf); break;
+ case 25: RenderCompositeGlyphs32 (fd, buf); break;
+ case 26: RenderFillRectangles (fd, buf); break;
+ default:
+ break;
+ }
+}
+
+void
+render_decode_reply (
+ FD fd,
+ const unsigned char *buf,
+ short RequestMinor)
+{
+ switch (RequestMinor) {
+ case 0: RenderQueryVersionReply (fd, buf); break;
+ case 1: RenderQueryPictFormatsReply (fd, buf); break;
+ case 2: RenderQueryPictIndexValuesReply (fd, buf); break;
+ case 3: RenderQueryDithersReply (fd, buf); break;
+ }
+}
+
+void
+render_decode_error (
+ FD fd,
+ const unsigned char *buf)
+{
+ short error = IByte(&buf[1]) - RENDERError;
+
+ switch (error) {
+ case 0: RenderPictFormatError (fd, buf); break;
+ case 1: RenderPictureError (fd, buf); break;
+ case 2: RenderPictOpError (fd, buf); break;
+ case 3: RenderGlyphSetError (fd, buf); break;
+ case 4: RenderGlyphError (fd, buf); break;
+ default:
+ break;
+ }
+}
+
+static int
+PrintPICTURE (
+ const unsigned char *buf)
+{
+ /* print a WINDOW -- CARD32 plus 0 = None */
+ long n = ILong (buf);
+ if (n == 0)
+ fprintf(stdout, "None");
+ else
+ fprintf(stdout, "PICTURE %08lx", n);
+ return(4);
+}
+
+static int
+PrintPICTFORMAT (
+ const unsigned char *buf)
+{
+ /* print a WINDOW -- CARD32 plus 0 = None */
+ long n = ILong (buf);
+ if (n == 0)
+ fprintf(stdout, "None");
+ else
+ fprintf(stdout, "PICTFORMAT %08lx", n);
+ return(4);
+}
+
+static int
+PrintPICTFORMINFO (
+ const unsigned char *buf)
+{
+ /* print a PictFormInfo */
+ long n = ILong(buf);
+ short t = IByte(buf+4);
+ short d = IByte(buf+5);
+
+ fprintf (stdout, "PICTFORMINFO %08lx %s %d ",
+ n, t == 0 ? "Indexed" : "Direct", d);
+ if (t == 0) {
+ long c = ILong(buf+20);
+ fprintf (stdout, "cmap %08lx", c);
+ } else {
+ short r = IShort(buf+8);
+ short g = IShort(buf+12);
+ short b = IShort(buf+16);
+ short a = IShort(buf+20);
+ fprintf (stdout, "%d %d %d %d", a, r, g, b);
+ }
+ return(28);
+}
+
+static int
+PrintGLYPHSET (
+ const unsigned char *buf)
+{
+ /* print a GLYPHSET -- CARD32 plus 0 = None */
+ long n = ILong (buf);
+ if (n == 0)
+ fprintf(stdout, "None");
+ else
+ fprintf(stdout, "GLYPHSET %08lx", n);
+ return(4);
+}
+
+static int
+PrintRENDERCOLOR (
+ const unsigned char *buf)
+{
+ /* print a RENDERCOLOR */
+ unsigned short r, g, b, a;
+
+ r = IShort(buf);
+ g = IShort(buf+2);
+ b = IShort(buf+4);
+ a = IShort(buf+6);
+ fprintf(stdout, "COLOR r:%04x g:%04x b:%04x a:%04x", r, g, b, a);
+ return(8);
+}
+
+static int
+PrintFIXED (
+ const unsigned char *buf)
+{
+ /* print a PICTURE */
+ long n = ILong (buf);
+ fprintf (stdout, "FIXED %7.2f", n / 65536.0);
+ return 4;
+}
+
+static int
+PrintPOINTFIXED (
+ const unsigned char *buf)
+{
+ long x = ILong (buf);
+ long y = ILong (buf+4);
+ fprintf (stdout, "POINT %7.2f, %7.2f", x / 65536.0, y / 65536.0);
+ return 8;
+}
+
+static int
+PrintTRAPEZOID (
+ const unsigned char *buf)
+{
+ /* print a TRAPEZOID */
+ PrintField (buf, 0, 4, FIXED, "top");
+ PrintField (buf, 4, 4, FIXED, "bottom");
+ PrintField (buf, 8, 8, POINTFIXED, "left top");
+ PrintField (buf, 16, 8, POINTFIXED, "left bottom");
+ PrintField (buf, 24, 8, POINTFIXED, "right top");
+ PrintField (buf, 32, 8, POINTFIXED, "right bottom");
+ return 40;
+}
+
+static int
+PrintTRIANGLE (
+ const unsigned char *buf)
+{
+ /* print a TRIANGLE */
+ PrintField (buf, 0, 8, POINTFIXED, "p1");
+ PrintField (buf, 8, 8, POINTFIXED, "p2");
+ PrintField (buf,16, 8, POINTFIXED, "p3");
+ return 24;
+}
+
+void
+InitializeRENDER (
+ const unsigned char *buf)
+{
+ TYPE p;
+
+ RENDERRequest = (unsigned char)(buf[9]);
+ RENDERError = (unsigned char)(buf[11]);
+
+ DefineEValue (&TD[REQUEST], (unsigned long) RENDERRequest, "RenderRequest");
+ DefineEValue (&TD[REPLY], (unsigned long) RENDERRequest, "RenderReply");
+
+ DefineEValue (&TD[ERROR], (unsigned long) RENDERError + 0, "BadPictFormat");
+ DefineEValue (&TD[ERROR], (unsigned long) RENDERError + 1, "BadPicture");
+ DefineEValue (&TD[ERROR], (unsigned long) RENDERError + 2, "BadPictOp");
+ DefineEValue (&TD[ERROR], (unsigned long) RENDERError + 3, "BadGlyphSet");
+ DefineEValue (&TD[ERROR], (unsigned long) RENDERError + 4, "BadGlyph");
+
+ p = DefineType(RENDERREQUEST, ENUMERATED, "RENDERREQUEST", (PrintProcType) PrintENUMERATED);
+ DefineEValue(p, 0L, "RenderQueryVersion");
+ DefineEValue(p, 1L, "RenderQueryPictFormats");
+ DefineEValue(p, 2L, "RenderQueryPictIndexValues");
+ DefineEValue(p, 3L, "RenderQueryDithers");
+ DefineEValue(p, 4L, "RenderCreatePicture");
+ DefineEValue(p, 5L, "RenderChangePicture");
+ DefineEValue(p, 6L, "RenderSetPictureClipRectangles");
+ DefineEValue(p, 7L, "RenderFreePicture");
+ DefineEValue(p, 8L, "RenderComposite");
+ DefineEValue(p, 9L, "RenderScale");
+ DefineEValue(p, 10L, "RenderTrapezoids");
+ DefineEValue(p, 11L, "RenderTriangles");
+ DefineEValue(p, 12L, "RenderTriStrip");
+ DefineEValue(p, 13L, "RenderTriFan");
+ DefineEValue(p, 14L, "RenderColorTrapezoids");
+ DefineEValue(p, 15L, "RenderColorTriangles");
+ DefineEValue(p, 16L, "RenderTransform");
+ DefineEValue(p, 17L, "RenderCreateGlyphSet");
+ DefineEValue(p, 18L, "RenderReferenceGlyphSet");
+ DefineEValue(p, 19L, "RenderFreeGlyphSet");
+ DefineEValue(p, 20L, "RenderAddGlyphs");
+ DefineEValue(p, 21L, "RenderAddGlyphsFromPicture");
+ DefineEValue(p, 22L, "RenderFreeGlyphs");
+ DefineEValue(p, 23L, "RenderCompositeGlyphs8");
+ DefineEValue(p, 24L, "RenderCompositeGlyphs16");
+ DefineEValue(p, 25L, "RenderCompositeGlyphs32");
+ DefineEValue(p, 26L, "RenderFillRectangles");
+
+ p = DefineType(RENDERREPLY, ENUMERATED, "RENDERREPLY", (PrintProcType) PrintENUMERATED);
+ DefineEValue (p, 0L, "QueryVersion");
+ DefineEValue (p, 1L, "QueryPictFormats");
+ DefineEValue (p, 2L, "QueryPictIndexValues");
+ DefineEValue (p, 3L, "QueryDithers");
+
+ DefineType(PICTURE, BUILTIN, "PICTURE", PrintPICTURE);
+ DefineType(PICTFORMAT, BUILTIN, "PICTFORMAT", PrintPICTFORMAT);
+ DefineType(GLYPHSET, BUILTIN, "GLYPHSET", PrintGLYPHSET);
+ DefineType(RENDERCOLOR, BUILTIN, "RENDERCOLOR", PrintRENDERCOLOR);
+ DefineType(PICTFORMINFO, BUILTIN, "PICTFORMINFO", PrintPICTFORMINFO);
+
+ p = DefineType(PICTURE_BITMASK, SET, "PICTURE_BITMASK", (PrintProcType) PrintSET);
+
+ DefineValues(p, 0x00000001L, 1, BOOL, "repeat");
+ DefineValues(p, 0x00000002L, 1, PICTURE, "alpha-map");
+ DefineValues(p, 0x00000004L, 1, INT16, "alpha-x-origin");
+ DefineValues(p, 0x00000008L, 1, INT16, "alpha-y-origin");
+ DefineValues(p, 0x00000010L, 1, INT16, "clip-x-origin");
+ DefineValues(p, 0x00000020L, 1, INT16, "clip-y-origin");
+ DefineValues(p, 0x00000040L, 1, PIXMAP, "clip-mask");
+ DefineValues(p, 0x00000080L, 1, BOOL, "graphics-exposures");
+ DefineValues(p, 0x00000100L, 1, SUBWINMODE, "repeat");
+ DefineValues(p, 0x00000200L, 1, BOOL, "poly-edge");
+ DefineValues(p, 0x00000400L, 1, BOOL, "poly-mode");
+ DefineValues(p, 0x00000800L, 1, ATOM, "dither");
+ DefineValues(p, 0x00001000L, 1, BOOL, "component-alpha");
+
+ p = DefineType(PICTOP, ENUMERATED, "PICTOP", (PrintProcType) PrintENUMERATED);
+ DefineEValue (p, 0L, "Clear");
+ DefineEValue (p, 1L, "Src");
+ DefineEValue (p, 2L, "Dst");
+ DefineEValue (p, 3L, "Over");
+ DefineEValue (p, 4L, "OverReverse");
+ DefineEValue (p, 5L, "In");
+ DefineEValue (p, 6L, "InReverse");
+ DefineEValue (p, 7L, "Out");
+ DefineEValue (p, 8L, "OutReverse");
+ DefineEValue (p, 9L, "Atop");
+ DefineEValue (p, 10L, "AtopReverse");
+ DefineEValue (p, 11L, "Xor");
+ DefineEValue (p, 12L, "Add");
+ DefineEValue (p, 13L, "Saturate");
+
+ DefineType(FIXED, BUILTIN, "FIXED", PrintFIXED);
+ DefineType(POINTFIXED, BUILTIN, "POINTFIXED", PrintPOINTFIXED);
+ DefineType(TRIANGLE, RECORD, "TRIANGLE", PrintTRIANGLE);
+ DefineType(TRAPEZOID, RECORD, "TRAPEZOID", PrintTRAPEZOID);
+}
diff --git a/decode_shm.c b/decode_shm.c
new file mode 100644
index 0000000..938c770
--- /dev/null
+++ b/decode_shm.c
@@ -0,0 +1,119 @@
+/*
+ * $XFree86$
+ *
+ * Copyright <20> 2000 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+
+#include <stdio.h>
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#include "scope.h"
+#include "x11.h"
+#include "shmscope.h"
+#include "extensions.h"
+
+unsigned char MITSHMRequest, MITSHMError, MITSHMEvent;
+
+void
+mitshm_decode_req (
+ FD fd,
+ const unsigned char *buf)
+{
+ short Major = IByte (&buf[0]);
+ short Minor = IByte (&buf[1]);
+
+ switch (Minor) {
+ case 0: MitshmQueryVersion (fd, buf); ExtendedReplyExpected (fd, Major, Minor); break;
+ case 1: MitshmAttach (fd, buf); break;
+ case 2: MitshmDetach (fd, buf); break;
+ case 3: MitshmPutImage (fd, buf); break;
+ case 4: MitshmGetImage (fd, buf); ExtendedReplyExpected (fd, Major, Minor); break;
+ case 5: MitshmCreatePixmap (fd, buf); break;
+ default:
+ break;
+ }
+}
+
+void
+mitshm_decode_reply (
+ FD fd,
+ const unsigned char *buf,
+ short RequestMinor)
+{
+ switch (RequestMinor) {
+ case 0: MitshmQueryVersionReply (fd, buf); break;
+ case 4: MitshmGetImageReply (fd, buf); break;
+ }
+}
+
+void
+mitshm_decode_event (
+ FD fd,
+ const unsigned char *buf)
+{
+}
+
+void
+mitshm_decode_error (
+ FD fd,
+ const unsigned char *buf)
+{
+ short error = IByte(&buf[0]) - MITSHMError;
+
+ switch (error) {
+ case 0: MitshmShmSegError (fd, buf); break;
+ default:
+ break;
+ }
+}
+
+
+void
+InitializeMITSHM (
+ const unsigned char *buf)
+{
+ TYPE p;
+
+ MITSHMRequest = (unsigned char)(buf[9]);
+ MITSHMEvent = (unsigned char)(buf[10]);
+ MITSHMError = (unsigned char)(buf[11]);
+
+ DefineEValue (&TD[REQUEST], (unsigned long) MITSHMRequest, "MitshmRequest");
+ DefineEValue (&TD[REPLY], (unsigned long) MITSHMRequest, "MitshmReply");
+ DefineEValue (&TD[EVENT], (unsigned long) MITSHMEvent, "MitshmEvent");
+ DefineEValue (&TD[ERROR], (unsigned long) MITSHMError, "MitshmError");
+
+ p = DefineType(MITSHMREQUEST, ENUMERATED, "MITSHMREQUEST", (PrintProcType) PrintENUMERATED);
+ DefineEValue(p, 0L, "MitshmQueryVersion");
+ DefineEValue(p, 1L, "MitshmAttach");
+ DefineEValue(p, 2L, "MitshmDetach");
+ DefineEValue(p, 3L, "MitshmPutImage");
+ DefineEValue(p, 4L, "MitshmGetImage");
+ DefineEValue(p, 5L, "MitshmCreatePixmap");
+
+ p = DefineType(MITSHMREPLY, ENUMERATED, "MITSHMREPLY", (PrintProcType) PrintENUMERATED);
+ DefineEValue (p, 0L, "QueryVersion");
+ DefineEValue (p, 4L, "GetImage");
+
+ p = DefineType(MITSHMEVENT, ENUMERATED, "MITSHMEVENT", (PrintProcType) PrintENUMERATED);
+ DefineEValue (p, 0L, "CompletionEvent");
+}
diff --git a/decode_wcp.c b/decode_wcp.c
new file mode 100644
index 0000000..fdb7664
--- /dev/null
+++ b/decode_wcp.c
@@ -0,0 +1,132 @@
+/*
+ * $NCDOr$
+ *
+ * Copyright 1996 Network Computing Devices
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of NCD. not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. NCD. makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * NCD. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL NCD.
+ * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Keith Packard, Network Computing Devices
+ */
+
+#include <stdio.h>
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#define _WCP_SERVER_
+#include "scope.h"
+#include "x11.h"
+#include "wcpscope.h"
+#include "extensions.h"
+
+unsigned char WCPRequest, WCPError;
+
+void
+wcp_decode_req (
+ FD fd,
+ const unsigned char *buf)
+{
+ short Major = IByte (&buf[0]);
+ short Minor = IByte (&buf[1]);
+
+ switch (Minor) {
+ case 0:
+ WcpQueryVersion (fd, buf);
+ ExtendedReplyExpected (fd, Major, Minor);
+ break;
+ case 1:
+ WcpPutImage (fd, buf);
+ break;
+ case 2:
+ WcpGetImage (fd, buf);
+ ExtendedReplyExpected (fd, Major, Minor);
+ break;
+ case 3:
+ WcpCreateColorCursor (fd, buf);
+ break;
+ case 4:
+ WcpCreateLut (fd, buf);
+ break;
+ case 5:
+ WcpFreeLut (fd, buf);
+ break;
+ case 6:
+ WcpCopyArea (fd, buf);
+ break;
+ default:
+ break;
+ }
+}
+
+void
+wcp_decode_reply (
+ FD fd,
+ const unsigned char *buf,
+ short RequestMinor)
+{
+ switch (RequestMinor) {
+ case 0:
+ WcpQueryVersionReply (fd, buf);
+ break;
+ case 2:
+ WcpGetImageReply (fd, buf);
+ break;
+ default:
+ break;
+ }
+}
+
+void
+wcp_decode_error (
+ FD fd,
+ const unsigned char *buf)
+{
+ short error = IByte(&buf[1]) - WCPError;
+
+ switch (error) {
+ case 0:
+ break;
+ default:
+ break;
+ }
+}
+
+void
+InitializeWCP (
+ const unsigned char *buf)
+{
+ TYPE p;
+
+ WCPRequest = (unsigned char)(buf[9]);
+ WCPError = (unsigned char)(buf[11]);
+
+ DefineEValue (&TD[REQUEST], (unsigned long) WCPRequest, "WcpRequest");
+ DefineEValue (&TD[REPLY], (unsigned long) WCPRequest, "WcpReply");
+ DefineEValue (&TD[ERROR], (unsigned long) WCPError, "WcpError");
+
+ p = DefineType(WCPREQUEST, ENUMERATED, "WCPREQUEST", (PrintProcType) PrintENUMERATED);
+ DefineEValue(p, 0L, "WcpQueryVersion");
+ DefineEValue(p, 1L, "WcpPutImage");
+ DefineEValue(p, 2L, "WcpGetImage");
+ DefineEValue(p, 3L, "WcpCreateColorCursor");
+ DefineEValue(p, 4L, "WcpCreateLut");
+ DefineEValue(p, 5L, "WcpFreeLut");
+ DefineEValue(p, 6L, "WcpCopyArea");
+
+ p = DefineType(WCPREPLY, ENUMERATED, "WCPREPLY", (PrintProcType) PrintENUMERATED);
+ DefineEValue (p, 0L, "QueryVersion");
+
+}
diff --git a/decodenas.c b/decodenas.c
new file mode 100644
index 0000000..befa2eb
--- /dev/null
+++ b/decodenas.c
@@ -0,0 +1,470 @@
+/* ************************************************************ *
+ * *
+ * Decoding and switching routines for the NAS protocol *
+ * *
+ * James Peterson, 1988 *
+ * (c) Copyright MCC, 1988 *
+ * *
+ * ************************************************************ */
+
+#include "scope.h"
+#include "nas.h"
+
+/*
+ There are 4 types of things in NAS: requests, replies, errors, and events.
+
+ Each of them has a format defined by a small integer that defines
+ the type of the thing.
+
+ Requests have an opcode in the first byte.
+ Events have a code in the first byte.
+ Errors have a code in the second byte (the first byte is 0)
+ Replies ...
+
+ Replies have a sequence number in bytes 2 and 3. The sequence
+ number should be used to identify the request that was sent, and
+ from that request we can determine the type of the reply.
+*/
+
+
+/* ************************************************************ */
+/* */
+/* */
+/* ************************************************************ */
+
+
+/*
+ We need to keep the sequence number for a request to match it with
+ an expected reply. The sequence number is associated only with the
+ particular connection that we have. We would expect these replies
+ to be handled as a FIFO queue.
+*/
+
+#define DUMP_REQUEST 0
+#define DUMP_REPLY 1
+#define DUMP_EVENT 2
+#define DUMP_ERROR 3
+
+static const char * const simple_names[] = {
+ "REQUEST",
+ "REPLY ",
+ "EVENT ",
+ "ERROR ",
+};
+
+static void
+AudioSimpleDump (int type, FD fd, short Major, short Minor, long bytes)
+{
+ PrintTime ();
+ fprintf (stdout, "@@%s %3d %3d %3d %7ld\n",
+ simple_names[type],
+ ClientNumber(fd),
+ Major, Minor, bytes);
+}
+
+/* ************************************************************ */
+/* */
+/* */
+/* ************************************************************ */
+
+void
+DecodeAudioRequest(
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ short Request = IByte (&buf[0]);
+ short RequestMinor = Request >= 128 ? IByte (&buf[1]) : 0;
+ unsigned long seq;
+
+ CS[fd].SequenceNumber += 1;
+ seq = CS[fd].SequenceNumber;
+ if (CS[fd].littleEndian) {
+ SBf[0] = seq;
+ SBf[1] = seq >> 8;
+ SBf[2] = seq >> 16;
+ SBf[3] = seq >> 24;
+ } else {
+ SBf[0] = seq >> 24;
+ SBf[1] = seq >> 16;
+ SBf[2] = seq >> 8;
+ SBf[3] = seq;
+ }
+ SetIndentLevel(PRINTCLIENT);
+
+ if (NasVerbose == 0)
+ {
+ AudioSimpleDump (DUMP_REQUEST, fd, Request, RequestMinor, n);
+ return;
+ }
+
+ if (NasVerbose > 3)
+ DumpItem("Request", fd, buf, n);
+ switch (Request)
+ {
+ case 1:
+ AudioListDevices (buf);
+ ReplyExpected(fd, Request);
+ break;
+ case 2:
+ AudioGetDeviceAttributes(buf);
+ ReplyExpected(fd, Request);
+ break;
+ case 3:
+ AudioSetDeviceAttributes (buf);
+ break;
+ case 4:
+ AudioCreateBucket (buf);
+ break;
+ case 5:
+ AudioDestroyBucket (buf);
+ break;
+ case 6:
+ AudioListBuckets (buf);
+ ReplyExpected (fd, Request);
+ break;
+ case 7:
+ AudioGetBucketAttributes (buf);
+ ReplyExpected (fd, Request);
+ break;
+ case 8:
+ AudioSetBucketAttributes (buf);
+ break;
+ case 9:
+ AudioCreateRadio (buf);
+ break;
+ case 10:
+ AudioDestroyRadio (buf);
+ break;
+ case 11:
+ AudioListRadios (buf);
+ ReplyExpected (fd, Request);
+ break;
+ case 12:
+ AudioGetRadioAttributes (buf);
+ ReplyExpected (fd, Request);
+ break;
+ case 13:
+ AudioSetRadioAttributes (buf);
+ break;
+ case 14:
+ AudioCreateFlow (buf);
+ break;
+ case 15:
+ AudioDestroyFlow (buf);
+ break;
+ case 16:
+ AudioGetFlowAttributes (buf);
+ ReplyExpected (fd, Request);
+ break;
+ case 17:
+ AudioSetFlowAttributes (buf);
+ break;
+ case 18:
+ AudioGetElements (buf);
+ ReplyExpected (fd, Request);
+ break;
+ case 19:
+ AudioSetElements (buf);
+ break;
+ case 20:
+ AudioGetElementStates (buf);
+ ReplyExpected (fd, Request);
+ break;
+ case 21:
+ AudioSetElementStates (buf);
+ break;
+ case 22:
+ AudioGetElementParameters (buf);
+ ReplyExpected (fd, Request);
+ break;
+ case 23:
+ AudioSetElementParameters (buf);
+ break;
+ case 24:
+ AudioWriteElement (buf);
+ break;
+ case 25:
+ AudioReadElement (buf);
+ ReplyExpected (fd, Request);
+ break;
+ case 26:
+ AudioGrabComponent (buf);
+ break;
+ case 27:
+ AudioUngrabComponent (buf);
+ break;
+ case 28:
+ AudioSendEvent (buf);
+ break;
+ case 29:
+ AudioGetAllowedUsers (buf);
+ ReplyExpected (fd, Request);
+ break;
+ case 30:
+ AudioSetAllowedUsers (buf);
+ break;
+ case 31:
+ AudioListExtensions (buf);
+ ReplyExpected (fd, Request);
+ break;
+ case 32:
+ AudioQueryExtension (buf);
+ ReplyExpected (fd, Request);
+ break;
+ case 33:
+ AudioGetCloseDownMode (buf);
+ ReplyExpected (fd, Request);
+ break;
+ case 34:
+ AudioSetCloseDownMode (buf);
+ break;
+ case 35:
+ AudioKillClient (buf);
+ break;
+ case 36:
+ AudioGetServerTime (buf);
+ ReplyExpected (fd, Request);
+ break;
+ case 37:
+ AudioNoOperation (buf);
+ break;
+ default:
+ warn("Unimplemented request opcode");
+ break;
+ }
+}
+
+/* ************************************************************ */
+/* */
+/* */
+/* ************************************************************ */
+
+void
+DecodeAudioReply(
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ short SequenceNumber = IShort (&buf[2]);
+ short RequestMinor;
+ short Request = CheckReplyTable (fd, SequenceNumber, &RequestMinor);
+
+ if (NasVerbose == 0)
+ {
+ AudioSimpleDump (DUMP_REPLY, fd, Request, RequestMinor, n);
+ return;
+ }
+
+ SetIndentLevel(PRINTSERVER);
+ RBf[0] = Request /* for the PrintField in the Reply procedure */ ;
+ RBf[1] = RequestMinor;
+ if (NasVerbose > 3)
+ DumpItem("Reply", fd, buf, n);
+ switch (Request)
+ {
+ case 0:
+ UnknownAudioReply(buf);
+ break;
+ case 1:
+ AudioListDevicesReply (buf);
+ break;
+ case 2:
+ AudioGetDeviceAttributesReply (buf);
+ break;
+ case 6:
+ AudioListBucketsReply (buf);
+ break;
+ case 7:
+ AudioGetBucketAttributesReply (buf);
+ break;
+ case 11:
+ AudioListRadiosReply (buf);
+ break;
+ case 12:
+ AudioGetRadioAttributesReply (buf);
+ break;
+ case 16:
+ AudioGetFlowAttributesReply (buf);
+ break;
+ case 18:
+ AudioGetElementsReply (buf);
+ break;
+ case 20:
+ AudioGetElementStatesReply (buf);
+ break;
+ case 22:
+ AudioGetElementParametersReply (buf);
+ break;
+ case 25:
+ AudioReadElementReply (buf);
+ break;
+ case 29:
+ AudioGetAllowedUsersReply (buf);
+ break;
+ case 31:
+ AudioListExtensionsReply (buf);
+ break;
+ case 32:
+ AudioQueryExtensionReply (buf);
+ break;
+ case 33:
+ AudioGetCloseDownModeReply (buf);
+ break;
+ case 36:
+ AudioGetServerTimeReply (buf);
+ break;
+ default:
+ warn("Unimplemented reply opcode");
+ break;
+ }
+}
+
+/* ************************************************************ */
+/* */
+/* */
+/* ************************************************************ */
+
+void
+DecodeAudioError(
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ short Error = IByte (&buf[1]);
+ short Request = 0;
+ short RequestMinor = 0;
+
+ Request = CheckReplyTable (fd, (short)IShort(&buf[2]), &RequestMinor);
+
+ if (NasVerbose == 0)
+ {
+ AudioSimpleDump (DUMP_ERROR, fd, Request, RequestMinor, n);
+ return;
+ }
+
+ SetIndentLevel(PRINTSERVER);
+ if (NasVerbose > 3)
+ DumpItem("Error", fd, buf, n);
+}
+
+/* ************************************************************ */
+/* */
+/* */
+/* ************************************************************ */
+
+void
+DecodeAudioEvent(
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ short Event = IByte (&buf[0]);
+ short EventMinor = 0;
+
+ if (NasVerbose == 0)
+ {
+ AudioSimpleDump (DUMP_EVENT, fd, Event, EventMinor, n);
+ return;
+ }
+
+ SetIndentLevel(PRINTSERVER);
+ if (NasVerbose > 3)
+ DumpItem("Event", fd, buf, n);
+ /* high-order bit means SendEvent generated */
+ if (Event & 0x80)
+ {
+ debug(8,(stderr, "SendEvent generated event 0x%x\n", Event));
+ Event = Event & 0x7F;
+ }
+ switch (Event)
+ {
+ case 2:
+ AudioElementNotify (buf);
+ break;
+ case 3:
+ AudioGrabNotify (buf);
+ break;
+ case 4:
+ AudioMonitorNotify (buf);
+ break;
+ case 5:
+ AudioBucketNotify (buf);
+ break;
+ case 6:
+ AudioDeviceNotify (buf);
+ break;
+ default:
+ warn("Unimplemented event code");
+ break;
+ }
+}
+
+void
+InitializeAudioDecode (void)
+{
+ TYPE p;
+
+ p = DefineType (NASREQUEST, ENUMERATED, "NASREQUEST", (PrintProcType) PrintENUMERATED);
+ DefineEValue (p, 1L, "ListDevices");
+ DefineEValue (p, 2L, "GetDeviceAttributes");
+ DefineEValue (p, 3L, "SetDeviceAttributes");
+ DefineEValue (p, 4L, "CreateBucket");
+ DefineEValue (p, 5L, "DestroyBucket");
+ DefineEValue (p, 6L, "ListBuckets");
+ DefineEValue (p, 7L, "GetBucketAttributes");
+ DefineEValue (p, 8L, "SetBucketAttributes");
+ DefineEValue (p, 9L, "CreateRadio");
+ DefineEValue (p, 10L, "DestroyRadio");
+ DefineEValue (p, 11L, "ListRadios");
+ DefineEValue (p, 12L, "GetRadioAttributes");
+ DefineEValue (p, 13L, "SetRadioAttributes");
+ DefineEValue (p, 14L, "CreateFlow");
+ DefineEValue (p, 15L, "DestroyFlow");
+ DefineEValue (p, 16L, "GetFlowAttributes");
+ DefineEValue (p, 17L, "SetFlowAttributes");
+ DefineEValue (p, 18L, "GetElements");
+ DefineEValue (p, 19L, "SetElements");
+ DefineEValue (p, 20L, "GetElementStates");
+ DefineEValue (p, 21L, "SetElementStates");
+ DefineEValue (p, 22L, "GetElementParameters");
+ DefineEValue (p, 23L, "SetElementParameters");
+ DefineEValue (p, 24L, "WriteElement");
+ DefineEValue (p, 25L, "ReadElement");
+ DefineEValue (p, 26L, "GrabComponent");
+ DefineEValue (p, 27L, "UngrabComponent");
+ DefineEValue (p, 28L, "SendEvent");
+ DefineEValue (p, 29L, "GetAllowedUsers");
+ DefineEValue (p, 30L, "SetAllowedUsers");
+ DefineEValue (p, 31L, "ListExtensions");
+ DefineEValue (p, 32L, "QuerExtension");
+ DefineEValue (p, 33L, "GetCloseDownMode");
+ DefineEValue (p, 34L, "SetCloseDownMode");
+ DefineEValue (p, 35L, "KillClient");
+ DefineEValue (p, 36L, "GetServerTime");
+ DefineEValue (p, 37L, "NoOperation");
+ p = DefineType (NASREPLY, ENUMERATED, "NASREPLY", (PrintProcType) PrintENUMERATED);
+ DefineEValue (p, 1L, "ListDevices");
+ DefineEValue (p, 2L, "GetDeviceAttributes");
+ DefineEValue (p, 6L, "ListBuckets");
+ DefineEValue (p, 7L, "GetBucketAttributes");
+ DefineEValue (p, 11L, "ListRadios");
+ DefineEValue (p, 12L, "GetRadioAttributes");
+ DefineEValue (p, 16L, "GetFlowAttributes");
+ DefineEValue (p, 18L, "GetElements");
+ DefineEValue (p, 20L, "GetElementStates");
+ DefineEValue (p, 22L, "GetElementParameters");
+ DefineEValue (p, 25L, "ReadElement");
+ DefineEValue (p, 29L, "GetAllowedUsers");
+ DefineEValue (p, 31L, "ListExtensions");
+ DefineEValue (p, 32L, "QueryExtension");
+ DefineEValue (p, 33L, "GetCloseDownMode");
+ DefineEValue (p, 36L, "GetServerTime");
+ p = DefineType (NASEVENT, ENUMERATED, "NASEVENT", (PrintProcType) PrintENUMERATED);
+ DefineEValue(p, 2L, "ElementNotify");
+ DefineEValue(p, 3L, "GrabNotify");
+ DefineEValue(p, 4L, "MonitorNotify");
+ DefineEValue(p, 5L, "BucketNotify");
+ DefineEValue(p, 6L, "DeviceNotify");
+
+}
diff --git a/extensions.c b/extensions.c
new file mode 100644
index 0000000..d053c06
--- /dev/null
+++ b/extensions.c
@@ -0,0 +1,233 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, and/or sell copies of the Software, and to permit persons
+ * to whom the Software is furnished to do so, provided that the above
+ * copyright notice(s) and this permission notice appear in all copies of
+ * the Software and that both the above copyright notice(s) and this
+ * permission notice appear in supporting documentation.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+ * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
+ * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
+ * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+ * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale, use
+ * or other dealings in this Software without prior written authorization
+ * of the copyright holder.
+ */
+
+#include "extensions.h"
+#include "bigreqscope.h"
+#include "lbxscope.h"
+#include "randrscope.h"
+#include "renderscope.h"
+#include "shmscope.h"
+#include "wcpscope.h"
+
+/* Extensions we know how to decode */
+struct extension_decoders {
+ const char *name;
+ void (*init_func)(const unsigned char *buf);
+};
+
+static const struct extension_decoders decodable_extensions[] = {
+ { "BIG-REQUESTS", InitializeBIGREQ },
+ { "LBX", InitializeLBX },
+ { "MITSHM", InitializeMITSHM },
+ { "NCD-WinCenterPro", InitializeWCP },
+ { "RANDR", InitializeRANDR },
+ { "RENDER", InitializeRENDER },
+ { NULL, NULL } /* List terminator - keep last */
+};
+
+/* all extensions we know about */
+struct extension_info {
+ const char *name;
+ unsigned char request;
+ unsigned char event;
+ unsigned char error;
+ long query_seq; /* sequence id of QueryExtension request */
+ struct extension_info *next;
+};
+
+struct extension_info *query_list;
+
+struct extension_info *ext_by_request[NUM_EXTENSIONS];
+
+static void
+DefineExtNameValue(int type, unsigned char value, const char *extname)
+{
+ int namelen = strlen(extname) + 1;
+ const char *typename = NULL;
+ char *exttypename;
+
+ switch (type) {
+ case REQUEST:
+ typename = "-Request";
+ break;
+ case REPLY:
+ typename = "-Reply";
+ break;
+ case EVENT:
+ typename = "-Event";
+ break;
+ case ERROR:
+ typename = "-Error";
+ break;
+ default:
+ panic("Impossible argument to DefineExtNameValue");
+ }
+ namelen += strlen(typename);
+ exttypename = Malloc(namelen);
+ snprintf(exttypename, namelen, "%s%s", extname, typename);
+ DefineEValue(&TD[type], (unsigned long) value, exttypename);
+}
+
+void
+ProcessQueryExtensionRequest(long seq, const unsigned char *buf)
+{
+ int namelen = IShort(&buf[4]);
+ char *extname = Malloc(namelen + 1);
+ struct extension_info *qe;
+
+ memcpy(extname, &buf[8], namelen);
+ extname[namelen] = '\0';
+
+ for (qe = query_list; qe != NULL; qe = qe->next) {
+ if (strcmp(extname, qe->name) == 0) {
+ /* already in list, no need to add */
+ Free(extname);
+ return;
+ }
+ }
+
+ /* add to list */
+ qe = Malloc(sizeof(struct extension_info));
+ qe->name = extname;
+ qe->request = 0;
+ qe->event = 0;
+ qe->error = 0;
+ qe->query_seq = seq;
+ qe->next = query_list;
+ query_list = qe;
+}
+
+void
+ProcessQueryExtensionReply(long seq, const unsigned char *buf)
+{
+ struct extension_info *qe;
+ int i;
+
+ for (qe = query_list; qe != NULL; qe = qe->next) {
+ if (qe->query_seq == seq) {
+ qe->request = buf[9];
+ qe->event = buf[10];
+ qe->error = buf[11];
+
+ ext_by_request[qe->request - EXTENSION_MIN] = qe;
+
+ for (i = 0; decodable_extensions[i].name != NULL ; i++) {
+ if (strcmp(qe->name, decodable_extensions[i].name) == 0) {
+ decodable_extensions[i].init_func(buf);
+ break;
+ }
+ }
+ if (decodable_extensions[i].name == NULL) {
+ /* Not found - initialize values as best we can generically */
+ DefineExtNameValue(REQUEST, qe->request, qe->name);
+ DefineExtNameValue(REPLY, qe->request, qe->name);
+ if (qe->event != 0) {
+ DefineExtNameValue(EVENT, qe->event, qe->name);
+ }
+ if (qe->error != 0) {
+ DefineExtNameValue(ERROR, qe->error, qe->name);
+ }
+ }
+
+ return;
+ }
+ }
+}
+
+void
+ExtensionRequest (FD fd, const unsigned char *buf, short Request)
+{
+ if (Request == LBXRequest) {
+ lbx_decode_req(fd, buf);
+ } else if (Request == WCPRequest) {
+ wcp_decode_req(fd, buf);
+ } else if (Request == RENDERRequest) {
+ render_decode_req(fd,buf);
+ } else if (Request == RANDRRequest) {
+ randr_decode_req(fd,buf);
+ } else if (Request == MITSHMRequest) {
+ mitshm_decode_req(fd,buf);
+ } else if (Request == BIGREQRequest) {
+ bigreq_decode_req(fd,buf);
+ } else {
+ ExtendedRequest(fd, buf);
+ ReplyExpected(fd, Request);
+ }
+}
+
+void
+ExtensionReply (FD fd, const unsigned char *buf,
+ short Request, short RequestMinor)
+{
+ if (Request == LBXRequest) {
+ lbx_decode_reply(fd, buf, RequestMinor);
+ } else if (Request == WCPRequest) {
+ wcp_decode_reply(fd, buf, RequestMinor);
+ } else if (Request == RENDERRequest) {
+ render_decode_reply(fd, buf, RequestMinor);
+ } else if (Request == RANDRRequest) {
+ randr_decode_reply(fd, buf, RequestMinor);
+ } else if (Request == MITSHMRequest) {
+ mitshm_decode_reply(fd, buf, RequestMinor);
+ } else if (Request == BIGREQRequest) {
+ bigreq_decode_reply(fd, buf, RequestMinor);
+ } else {
+ warn("Extended reply opcode");
+ }
+}
+
+void
+ExtensionError (FD fd, const unsigned char *buf, short Error)
+{
+ if (Error == LBXError) {
+ lbx_decode_error(fd, buf);
+ } else if (Error == WCPError) {
+ wcp_decode_error(fd, buf);
+ } else if (Error >= RENDERError && Error < RENDERError + RENDERNError) {
+ render_decode_error(fd,buf);
+ } else if (Error == MITSHMError) {
+ mitshm_decode_error(fd, buf);
+ } else {
+ warn("Extended Error code");
+ }
+}
+
+void
+ExtensionEvent (FD fd, const unsigned char *buf, short Event)
+{
+ if (Event == LBXEvent) {
+ lbx_decode_event (fd, buf);
+ } else if (Event == RANDREvent) {
+ randr_decode_event (fd, buf);
+ } else if (Event == MITSHMEvent) {
+ mitshm_decode_event (fd, buf);
+ } else {
+ warn("Extended Event code");
+ }
+}
diff --git a/extensions.h b/extensions.h
new file mode 100644
index 0000000..18107e8
--- /dev/null
+++ b/extensions.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, and/or sell copies of the Software, and to permit persons
+ * to whom the Software is furnished to do so, provided that the above
+ * copyright notice(s) and this permission notice appear in all copies of
+ * the Software and that both the above copyright notice(s) and this
+ * permission notice appear in supporting documentation.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+ * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
+ * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
+ * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+ * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale, use
+ * or other dealings in this Software without prior written authorization
+ * of the copyright holder.
+ */
+
+#ifndef XSCOPE_EXTENSIONS_H
+#define XSCOPE_EXTENSIONS_H
+
+#include "scope.h"
+
+#define EXTENSION_MIN 128 /* lowest possible extension request code */
+#define EXTENSION_MAX 255 /* highest possible extension request code */
+#define NUM_EXTENSIONS 128 /* maximum possible number of extensions */
+
+/* special processing in extensions.c to capture extension info */
+extern void ProcessQueryExtensionRequest(long seq, const unsigned char *buf);
+extern void ProcessQueryExtensionReply(long seq, const unsigned char *buf);
+
+extern void ExtensionRequest(FD fd, const unsigned char *buf, short Request);
+extern void ExtensionReply(FD fd, const unsigned char *buf,
+ short Request, short RequestMinor);
+extern void ExtensionError(FD fd, const unsigned char *buf, short Error);
+extern void ExtensionEvent(FD fd, const unsigned char *buf, short Event);
+
+
+/* X11 Extension decoders in decode_*.c */
+#define extension_decode_prototypes(ext) \
+ extern void ext##_decode_req (FD fd, const unsigned char *buf); \
+ extern void ext##_decode_reply (FD fd, const unsigned char *buf, \
+ short RequestMinor); \
+ extern void ext##_decode_error (FD fd, const unsigned char *buf); \
+ extern void ext##_decode_event (FD fd, const unsigned char *buf)
+
+extension_decode_prototypes(bigreq);
+extension_decode_prototypes(lbx);
+extension_decode_prototypes(mitshm);
+extension_decode_prototypes(randr);
+extension_decode_prototypes(render);
+extension_decode_prototypes(wcp);
+
+extern void InitializeBIGREQ (const unsigned char *buf);
+extern void InitializeLBX (const unsigned char *buf);
+extern void InitializeMITSHM (const unsigned char *buf);
+extern void InitializeRANDR (const unsigned char *buf);
+extern void InitializeRENDER (const unsigned char *buf);
+extern void InitializeWCP (const unsigned char *buf);
+
+#endif /* XSCOPE_EXTENSIONS_H */
diff --git a/fd.c b/fd.c
index 616dc9c..69a00ee 100644
--- a/fd.c
+++ b/fd.c
@@ -53,6 +53,9 @@
*
\* *********************************************************** */
+#include <X11/Xpoll.h> /* for XFD_* macros - must come before
+ scope.h include to avoid INT32 clash */
+
#include "scope.h"
#ifdef SYSV
@@ -62,6 +65,20 @@
#define bcopy(s,d,l) memmove(d,s,l)
#endif
+#include <sys/uio.h> /* for struct iovec, used by socket.h */
+#include <sys/socket.h> /* for AF_INET, SOCK_STREAM, ... */
+#include <sys/ioctl.h> /* for FIONCLEX, FIONBIO, ... */
+#ifdef SVR4
+#include <sys/filio.h>
+#endif
+#include <fcntl.h>
+#include <netinet/in.h> /* struct sockaddr_in */
+#include <sys/un.h> /* struct sockaddr_un */
+#include <netinet/tcp.h>
+#include <netdb.h> /* struct servent * and struct hostent * */
+#include <errno.h> /* for EINTR, EADDRINUSE, ... */
+
+
/*
All of this code is to support the handling of file descriptors (FD).
The idea is to keep a table of the FDs that are in use and why.
@@ -77,16 +94,25 @@
/* ************************************************************ */
void
-InitializeFD()
+InitializeFD(void)
{
register short i;
enterprocedure("InitializeFD");
/* get the number of file descriptors the system will let us use */
+#if defined(hpux) || defined(SVR4)
+ MaxFD = _NFILE - 1;
+#else
MaxFD = getdtablesize();
if (MaxFD > FD_SETSIZE) {
MaxFD = FD_SETSIZE;
}
+#endif
+ if (MaxFD > StaticMaxFD)
+ {
+ fprintf(stderr, "Recompile with larger StaticMaxFD value %d\n", MaxFD);
+ MaxFD = StaticMaxFD;
+ }
/* allocate space for a File Descriptor (FD) Table */
FDD = (struct FDDescriptor *)
@@ -113,18 +139,19 @@ InitializeFD()
FD_ZERO(&ReadDescriptors);
HighestFD = 0;
- UsingFD(fileno(stdin), (void (*)(int))NULL, NULL);
- UsingFD(fileno(stdout), (void (*)(int))NULL, NULL);
- UsingFD(fileno(stderr), (void (*)(int))NULL, NULL);
+ UsingFD(fileno(stdin), NULL, NULL, NULL);
+ UsingFD(fileno(stdout), NULL, NULL, NULL);
+ UsingFD(fileno(stderr), NULL, NULL, NULL);
}
/* ************************************************************ */
void
-UsingFD(fd, Handler, trans_conn)
- FD fd;
- void (*Handler)(int);
- XtransConnInfo trans_conn;
+UsingFD(
+ FD fd,
+ void (*Handler)(int),
+ void (*FlushHandler)(int),
+ XtransConnInfo trans_conn)
{
if (FDD[fd].Busy)
NotUsingFD(fd);
@@ -132,6 +159,7 @@ UsingFD(fd, Handler, trans_conn)
FDD[fd].Busy = true;
FDD[fd].InputHandler = Handler;
+ FDD[fd].FlushHandler = FlushHandler;
#ifdef USE_XTRANS
FDD[fd].trans_conn = trans_conn;
#endif
@@ -152,8 +180,8 @@ UsingFD(fd, Handler, trans_conn)
/* ************************************************************ */
void
-NotUsingFD(fd)
- FD fd;
+NotUsingFD(
+ FD fd)
{
debug(128,(stderr, "Not Using FD %d\n", fd));
@@ -181,8 +209,8 @@ XtransConnInfo GetXTransConnInfo(FD fd)
/* ************************************************************ */
static void
-EOFonFD(fd)
- FD fd;
+EOFonFD (
+ FD fd)
{
enterprocedure("EOFonFD");
debug(128,(stderr, "EOF on %d\n", fd));
@@ -195,16 +223,189 @@ EOFonFD(fd)
NotUsingFD(fd);
}
+FD
+AcceptConnection (
+ FD ConnectionSocket)
+{
+ FD ClientFD;
+ struct sockaddr_in from;
+ int len = sizeof (from);
+ int tmp = 1;
+
+ enterprocedure("ConnectToClient");
+
+ ClientFD = accept(ConnectionSocket, (struct sockaddr *)&from, &len);
+ debug(4,(stderr, "Connect To Client: FD %d\n", ClientFD));
+ if (ClientFD < 0 && errno == EWOULDBLOCK)
+ {
+ debug(4,(stderr, "Almost blocked accepting FD %d\n", ClientFD));
+ panic("Can't connect to Client");
+ }
+ if (ClientFD < 0)
+ {
+ debug(4,(stderr, "NewConnection: error %d\n", errno));
+ panic("Can't connect to Client");
+ }
+
+#ifdef FD_CLOEXEC
+ (void)fcntl(ClientFD, F_SETFD, FD_CLOEXEC);
+#else
+ (void)ioctl(ClientFD, FIOCLEX, 0);
+#endif
+ /* ultrix reads hang on Unix sockets, hpux reads fail */
+#if defined(O_NONBLOCK) && (!defined(ultrix) && !defined(hpux))
+ (void) fcntl (ClientFD, F_SETFL, O_NONBLOCK);
+#else
+#ifdef FIOSNBIO
+ ioctl (ClientFD, FIOSNBIO, &ON);
+#else
+ (void) fcntl (ClientFD, F_SETFL, FNDELAY);
+#endif
+#endif
+ (void) setsockopt(ClientFD, IPPROTO_TCP, TCP_NODELAY, (char *) &tmp, sizeof (int));
+ return(ClientFD);
+}
+
+FD
+MakeConnection(
+ char *server,
+ short port,
+ int report,
+ XtransConnInfo *trans_conn /* transport connection object */
+ )
+{
+ FD ServerFD;
+#ifdef USE_XTRANS
+ char address[256];
+ int connect_stat;
+
+ snprintf (address, sizeof(address), "%s:%ld", server, port - ServerBasePort);
+ if ( (*trans_conn = _X11TransOpenCOTSClient(address)) == NULL ) {
+ debug(1,(stderr, "OpenCOTSClient failed\n"));
+ panic("Can't open connection to Server");
+ }
+ if ((connect_stat = _X11TransConnect(*trans_conn,address)) < 0 ) {
+ _X11TransClose(*trans_conn);
+ *trans_conn = NULL;
+ debug(1,(stderr, "TransConnect failed\n"));
+ panic("Can't open connection to Server");
+ }
+ ServerFD = _X11TransGetConnectionNumber(*trans_conn);
+#else /* !USE_XTRANS */
+ char HostName[512];
+ struct sockaddr_in sin;
+ struct sockaddr_un sun;
+ struct sockaddr *saddr;
+ int salen;
+ struct hostent *hp;
+ int tmp = 1;
+#ifndef SO_DONTLINGER
+ struct linger linger;
+#endif /* SO_DONTLINGER */
+
+ enterprocedure("ConnectToServer");
+
+ /* establish a socket to the name server for this host */
+ /* determine the host machine for this process */
+ if (*server == '\0')
+ {
+ sun.sun_family = AF_UNIX;
+ sprintf (sun.sun_path, "/tmp/.X11-unix/X%d", port - 6000);
+ salen = sizeof (sun.sun_family) + strlen (sun.sun_path) + 1;
+ saddr = (struct sockaddr *) &sun;
+ }
+ else
+ {
+ debug(4,(stderr, "try to connect on %s\n", server));
+
+ bzero((char *)&sin, sizeof(sin));
+ sin.sin_addr.s_addr = inet_addr (server);
+ if ((long) sin.sin_addr.s_addr == -1)
+ {
+ hp = gethostbyname(server);
+ if (hp == 0)
+ {
+ perror("gethostbyname failed");
+ debug(1,(stderr, "gethostbyname failed for %s\n", server));
+ panic("Can't open connection to Server");
+ }
+ bcopy((char *)hp->h_addr, (char *)&sin.sin_addr, hp->h_length);
+ }
+
+ sin.sin_family = AF_INET;
+
+ if (port == ScopePort
+ && strcmp(server, ScopeHost) == 0)
+ {
+ char error_message[100];
+ (void)sprintf(error_message, "Trying to attach to myself: %s,%d\n",
+ server, sin.sin_port);
+ panic(error_message);
+ }
+
+ sin.sin_port = htons (port);
+ salen = sizeof (sin);
+ saddr = (struct sockaddr *) &sin;
+ }
+
+ ServerFD = socket(saddr->sa_family, SOCK_STREAM, 0);
+ if (ServerFD < 0)
+ {
+ perror("socket() to Server failed");
+ debug(1,(stderr, "socket failed\n"));
+ panic("Can't open connection to Server");
+ }
+ (void) setsockopt(ServerFD, SOL_SOCKET, SO_REUSEADDR, (char *) NULL, 0);
+#ifdef SO_USELOOPBACK
+ (void) setsockopt(ServerFD, SOL_SOCKET, SO_USELOOPBACK,(char *) NULL, 0);
+#endif
+ (void) setsockopt(ServerFD, IPPROTO_TCP, TCP_NODELAY, (char *) &tmp, sizeof (int));
+#ifdef SO_DONTLINGER
+ (void) setsockopt(ServerFD, SOL_SOCKET, SO_DONTLINGER, (char *) NULL, 0);
+#else /* SO_DONTLINGER */
+ linger.l_onoff = 0;
+ linger.l_linger = 0;
+ (void) setsockopt(ServerFD, SOL_SOCKET, SO_LINGER, (char *)&linger, sizeof linger);
+#endif /* SO_DONTLINGER */
+
+ /* ******************************************************** */
+ /* try to connect to Server */
+
+ if (connect(ServerFD, saddr, salen) < 0)
+ {
+ debug(4,(stderr, "connect returns errno of %d\n", errno));
+ if (errno != 0)
+ if (report)
+ perror("connect");
+ switch (errno)
+ {
+ case ECONNREFUSED:
+ /* experience says this is because there is no Server
+ to connect to */
+ (void)close(ServerFD);
+ debug(1,(stderr, "No Server\n"));
+ if (report)
+ warn("Can't open connection to Server");
+ return(-1);
+
+ default:
+ (void)close(ServerFD);
+ panic("Can't open connection to Server");
+ }
+ }
+#endif /* USE_XTRANS */
+
+ debug(4,(stderr, "Connect To Server: FD %d\n", ServerFD));
+ return(ServerFD);
+}
+
/* ************************************************************ */
/* */
/* Main Loop -- wait for input from any source and Process */
/* */
/* ************************************************************ */
-#include <errno.h> /* for EINTR, EADDRINUSE, ... */
-extern int errno;
-
int
MainLoop(void)
{
@@ -212,19 +413,33 @@ MainLoop(void)
while (true)
{
- fd_set rfds, xfds;
+ fd_set rfds, wfds, xfds;
short nfds;
short fd;
/* wait for something */
+
+ /* rfds = ReadDescriptors & ~BlockedReadDescriptors; */
rfds = ReadDescriptors;
+ XFD_UNSET(&rfds, &BlockedReadDescriptors);
+
xfds = rfds;
+ /* wfds = ReadDescriptors & WriteDescriptors; */
+ XFD_ANDSET(&wfds, &ReadDescriptors, &WriteDescriptors);
+
+
debug(128,(stderr, "select %d, rfds = 0%o\n", HighestFD + 1, rfds));
- nfds = select(HighestFD + 1, (struct fd_set *) &rfds,
- (struct fd_set *) NULL, (struct fd_set *) &xfds, NULL);
- debug(128,(stderr, "select nfds = 0%o, rfds = 0%o, xfds 0%o\n",
- nfds, rfds, xfds));
+ if (Interrupt || (!XFD_ANYSET(&rfds) && !XFD_ANYSET(&wfds)))
+ {
+ ReadCommands ();
+ Interrupt = 0;
+ continue;
+ }
+ nfds = select(HighestFD + 1, &rfds, &wfds, &xfds, (struct timeval *)NULL);
+ debug(128,(stderr,
+ "select nfds = 0%o, rfds = 0%o, wfds = 0%o, xfds = 0%o\n",
+ nfds, rfds, wfds, xfds));
if (nfds < 0)
{
@@ -239,7 +454,15 @@ MainLoop(void)
continue;
}
- panic("Select returns error");
+ if (Interrupt)
+ {
+ ReadCommands ();
+ Interrupt = 0;
+ }
+ else
+ {
+ panic("Select returns error");
+ }
continue /* to end of while loop */ ;
}
@@ -250,25 +473,32 @@ MainLoop(void)
}
/* check each fd to see if it has input */
- for (fd = 0; 0 < nfds && fd <= HighestFD; fd++)
+ for (fd = 0; fd <= HighestFD; fd++)
{
/*
check all returned fd's; this prevents
starvation of later clients by earlier clients
*/
- if (FD_ISSET(fd,&rfds) == 0)
- continue;
-
- nfds -= 1;
-
- if (FDD[fd].InputHandler == NULL)
+ if (FD_ISSET(fd,&rfds))
+ {
+ if (FDD[fd].InputHandler == NULL)
+ {
+ panic("FD selected with no handler");
+ debug(1,(stderr, "FD %d has NULL handler\n", fd));
+ }
+ else
+ (FDD[fd].InputHandler)(fd);
+ }
+ if (FD_ISSET(fd,&wfds))
+ {
+ if (FDD[fd].FlushHandler == NULL)
{
- panic("FD selected with no handler");
- debug(1,(stderr, "FD %d has NULL handler\n", fd));
+ panic("FD selected with no flush handler");
}
- else
- (FDD[fd].InputHandler)(fd);
+ else
+ (FDD[fd].FlushHandler)(fd);
+ }
}
}
return 0;
diff --git a/fd.h b/fd.h
index 51caf68..bd4f262 100644
--- a/fd.h
+++ b/fd.h
@@ -53,6 +53,8 @@
*
********************************************** */
+#ifndef XSCOPE_FD_H
+#define XSCOPE_FD_H
/*
the following structure remembers for each file descriptor its
@@ -74,25 +76,39 @@ typedef int FD;
struct FDDescriptor
{
Boolean Busy;
- void (*InputHandler)(int);
+ void (*InputHandler)(int);
+ void (*FlushHandler)(int);
#ifdef USE_XTRANS
XtransConnInfo trans_conn;
#endif
};
-struct FDDescriptor *FDD /* array of FD descriptors */ ;
-int MaxFD /* maximum number of FD's possible */ ;
-int nFDsInUse /* number of FD's actually in use */ ;
-fd_set ReadDescriptors /* bit map of FD's in use -- for select */ ;
-int HighestFD /* highest FD in use -- for select */ ;
+extern struct FDDescriptor *FDD /* array of FD descriptors */ ;
+extern short MaxFD /* maximum number of FD's possible */ ;
+
+extern short nFDsInUse /* number of FD's actually in use */ ;
+
+extern fd_set ReadDescriptors /* bit map of FD's in use -- for select */ ;
+extern fd_set WriteDescriptors /* bit map of write blocked FD's -- for select */;
+extern fd_set BlockedReadDescriptors /* bit map of FD's blocked from reading */;
+extern short HighestFD /* highest FD in use -- for select */ ;
/* need to change the MaxFD to allow larger number of fd's */
#define StaticMaxFD FD_SETSIZE
extern void InitializeFD(void);
-extern void UsingFD(FD fd, void (*Handler)(int), XtransConnInfo trans_conn);
+extern void UsingFD(FD fd, void (*Handler)(int), void (*FlushHandler)(int),
+ XtransConnInfo trans_conn);
extern void NotUsingFD(FD fd);
+
+extern FD AcceptConnection (FD ConnectionSocket);
+extern FD MakeConnection (char *server, short port, int report,
+ XtransConnInfo *trans_conn);
+
extern int MainLoop(void);
+
#ifdef USE_XTRANS
extern XtransConnInfo GetXTransConnInfo(FD fd);
#endif
+
+#endif /* XSCOPE_FD_H */
diff --git a/lbxscope.h b/lbxscope.h
new file mode 100644
index 0000000..cf2d5e2
--- /dev/null
+++ b/lbxscope.h
@@ -0,0 +1,58 @@
+/* $XConsortium: pexscope.h,v 5.1 91/02/16 09:31:57 rws Exp $ */
+
+/***********************************************************
+Copyright 1990, 1991 by Sun Microsystems, Inc. and the X Consortium.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the names of Sun Microsystems,
+the X Consortium, and MIT not be used in advertising or publicity
+pertaining to distribution of the software without specific, written
+prior permission.
+
+SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
+SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
+DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+
+#ifndef _LBXSCOPE_H_
+#define _LBXSCOPE_H_
+
+#define LBXREQUESTHEADER "LBXREQUEST"
+#define LBXREPLYHEADER "LBXREPLY"
+#define LBXEVENTHEADER "LBXEVENT"
+
+/*
+ To aid in making the choice between level 1 and level 2, we
+ define the following define, which does not print relatively
+ unimportant fields.
+*/
+
+#define printfield(a,b,c,d,e) if (Verbose > 1) PrintField(a,b,c,d,e)
+
+extern unsigned char LBXRequest;
+extern unsigned char LBXError;
+extern unsigned char LBXEvent;
+
+extern void LbxQueryVersion (FD fd, const unsigned char *buf);
+extern void LbxQueryVersionReply (FD fd, const unsigned char *buf);
+extern void LbxStartProxy (FD fd, const unsigned char *buf);
+extern void LbxStopProxy (FD fd, const unsigned char *buf);
+extern void LbxNewClient (FD fd, const unsigned char *buf);
+extern void LbxCloseClient (FD fd, const unsigned char *buf);
+extern void LbxSwitch (FD fd, const unsigned char *buf);
+extern void LbxModifySequence (FD fd, const unsigned char *buf);
+extern void LbxSwitchEvent (FD fd, const unsigned char *buf);
+extern void LbxCloseEvent (FD fd, const unsigned char *buf);
+
+#endif
+
diff --git a/nas.h b/nas.h
new file mode 100644
index 0000000..04d169f
--- /dev/null
+++ b/nas.h
@@ -0,0 +1,199 @@
+/* ************************************************************ *
+ * *
+ * Type definitions and Connection State for the NAS protocol *
+ * *
+ * James Peterson, 1988 *
+ * (c) Copyright MCC, 1988 *
+ * *
+ * ************************************************************ */
+
+
+#include "x11.h"
+
+/* ************************************************************ */
+/* */
+/* */
+/* ************************************************************ */
+
+/*
+ In general, we are called with a buffer of bytes and are supposed to
+ try to make sense of these bytes according to the NAS protocol. There
+ are two different types of communication: requests from the client to
+ the server and replies/errors/events from the server to the client.
+ We must interpret these two differently.
+
+ Also, we must consider that the bytes on the communication socket may
+ be sent asynchronously in any amount. This means that we must be prepared
+ to read in and save some bytes until we get enough to do something with
+ them. For example, suppose that we get a buffer from a client. We would
+ expect it to be a request. The request may be 24 bytes long. We may find,
+ however, that only 16 bytes have actually arrived -- the other 8 are stuck
+ in a buffer somewhere. We must be prepared to simply hold the 16 bytes we
+ have until more bytes arrive.
+
+ In general, we do two things: we wait for some number of bytes, and
+ then we interpret this set of bytes. To interpret this data we use
+ a modified state machine. We keep two pieces of information:
+
+ (1) the number of bytes that we need
+ (2) what to do with those bytes.
+
+ This last piece of information is the "state" of the interpretation.
+ We keep the state as a pointer to the procedure that is to be executed.
+
+
+ CLIENTS:
+
+ The data going from the client to the x11 server consists of a
+ set-up message followed by an infinite stream of variable length
+ requests.
+
+ Our overall flow is then:
+
+ (a) Wait for 12 bytes.
+ (b) Interpret these first 12 bytes of the set-up message to get the
+ length of the rest of the message.
+ (c) Wait for the rest of the set-up message.
+ (d) Interpret and print the set-up message.
+
+ *** end of set-up phase -- start normal request loop ***
+
+ (e) Wait for 4 bytes.
+ (f) Interpret these 4 bytes to get the length of the rest of the command.
+ (g) Wait for the rest of the command.
+ (h) Interpret and print the command.
+ (i) Go back to step (e).
+
+ SERVERS:
+
+ Again, we have a set-up reply followed by an infinite stream of variable
+ length replies/errors/events.
+
+ Our overall flow is then:
+
+ (a) Wait for 8 bytes.
+ (b) Interpret the 8 bytes to get the length of the rest of the set-up reply.
+ (c) Wait for the rest of the set-up reply.
+ (d) Interpret and print the set-up reply.
+
+ *** end of set-up phase -- start normal reply/error/event loop ***
+
+ We have the following properties of NAS replies, errors, and events:
+
+ Replies: 32 bytes plus a variable amount. Byte 0 is 1.
+ Bytes 2-3 are a sequence number; bytes 4-7 are length (n). The
+ complete length of the reply is 32 + 4 * n.
+
+ Errors: 32 bytes. Byte 0 is 0.
+ Byte 1 is an error code; bytes 2-3 are a sequence number.
+ Bytes 8-9 are a major opcode; byte 10 is a minor opcode.
+
+ Events: 32 bytes. Byte 0 is 2, 3, 4, ....
+
+ Looking at this we have two choices: wait for one byte and then separately
+ wait for replies, errors, and events, or wait for 32 bytes, then separately
+ process each type. We may have to wait for more, in the event of a reply.
+ This latter seems more effective. It appears reply/error/event formats
+ were selected to allow waiting for 32 bytes, and it will allow short packets
+ which are only 32 bytes long, to be processed completely in one step.
+
+ Thus, For normal reply/error/event processing we have
+
+ (e) Wait for 32 bytes.
+ (f) Interpret these 32 bytes. If possible, go back to step (e).
+ (g) If the packet is a reply with bytes 4-7 non-zero, wait for the
+ remainder of the the reply.
+ (h) Interpret and print the longer reply. Go back to step (e).
+
+
+ The similarity in approach to how both the client and server are handled
+ suggests we can use the same control structure to drive the interpretation
+ of both types of communication client->server and server->client.
+ Accordingly, we package up the relevant variables in a ConnState
+ record. The ConnState record contains the buffer of saved bytes (if any),
+ the size and length of this buffer, the number of bytes we are waiting for
+ and what to do when we get them. A separate ConnState record is kept
+ for the client and server.
+
+ In addition, we may have several different client or server connections.
+ Thus we need an array of all the necessary state for each client or server.
+ A client/server is identified with a file descriptor (fd), so we use the
+ fd to identify the client/server and use it as an index into an array of
+ state variables.
+*/
+
+/* audio.c */
+extern void NewAudio (FD fd);
+extern void InitializeAudio (void);
+
+/* decodenas.c */
+extern void DecodeAudioRequest (FD fd, const unsigned char *buf, long n);
+extern void DecodeAudioReply (FD fd, const unsigned char *buf, long n);
+extern void DecodeAudioEvent (FD fd, const unsigned char *buf, long n);
+extern void DecodeAudioError (FD fd, const unsigned char *buf, long n);
+
+extern void InitializeAudioDecode (void);
+
+/* printnas.c */
+extern void PrintAudioSetUpMessage (const unsigned char *buf);
+extern void PrintAudioSetUpReply (const unsigned char *buf);
+extern void AudioElementNotify (const unsigned char *buf);
+extern void AudioGrabNotify (const unsigned char *buf);
+extern void AudioMonitorNotify (const unsigned char *buf);
+extern void AudioBucketNotify (const unsigned char *buf);
+extern void AudioDeviceNotify (const unsigned char *buf);
+extern void UnknownAudioReply (const unsigned char *buf);
+extern void AudioListDevices (const unsigned char *buf);
+extern void AudioListDevicesReply (const unsigned char *buf);
+extern void AudioGetDeviceAttributes (const unsigned char *buf);
+extern void AudioGetDeviceAttributesReply (const unsigned char *buf);
+extern void AudioSetDeviceAttributes (const unsigned char *buf);
+extern void AudioCreateBucket (const unsigned char *buf);
+extern void AudioDestroyBucket (const unsigned char *buf);
+extern void AudioListBuckets (const unsigned char *buf);
+extern void AudioListBucketsReply (const unsigned char *buf);
+extern void AudioGetBucketAttributes (const unsigned char *buf);
+extern void AudioGetBucketAttributesReply (const unsigned char *buf);
+extern void AudioSetBucketAttributes (const unsigned char *buf);
+extern void AudioCreateRadio (const unsigned char *buf);
+extern void AudioDestroyRadio (const unsigned char *buf);
+extern void AudioListRadios (const unsigned char *buf);
+extern void AudioListRadiosReply (const unsigned char *buf);
+extern void AudioGetRadioAttributes (const unsigned char *buf);
+extern void AudioGetRadioAttributesReply (const unsigned char *buf);
+extern void AudioSetRadioAttributes (const unsigned char *buf);
+extern void AudioCreateFlow (const unsigned char *buf);
+extern void AudioDestroyFlow (const unsigned char *buf);
+extern void AudioGetFlowAttributes (const unsigned char *buf);
+extern void AudioGetFlowAttributesReply (const unsigned char *buf);
+extern void AudioSetFlowAttributes (const unsigned char *buf);
+extern void AudioGetElements (const unsigned char *buf);
+extern void AudioGetElementsReply (const unsigned char *buf);
+extern void AudioSetElements (const unsigned char *buf);
+extern void AudioGetElementStates (const unsigned char *buf);
+extern void AudioElementState (const unsigned char *buf);
+extern void AudioGetElementStatesReply (const unsigned char *buf);
+extern void AudioSetElementStates (const unsigned char *buf);
+extern void AudioGetElementParameters (const unsigned char *buf);
+extern void AudioGetElementParametersReply (const unsigned char *buf);
+extern void AudioSetElementParameters (const unsigned char *buf);
+extern void AudioWriteElement (const unsigned char *buf);
+extern void AudioReadElement (const unsigned char *buf);
+extern void AudioReadElementReply (const unsigned char *buf);
+extern void AudioGrabComponent (const unsigned char *buf);
+extern void AudioUngrabComponent (const unsigned char *buf);
+extern void AudioSendEvent (const unsigned char *buf);
+extern void AudioGetAllowedUsers (const unsigned char *buf);
+extern void AudioGetAllowedUsersReply (const unsigned char *buf);
+extern void AudioSetAllowedUsers (const unsigned char *buf);
+extern void AudioListExtensions (const unsigned char *buf);
+extern void AudioListExtensionsReply (const unsigned char *buf);
+extern void AudioQueryExtension (const unsigned char *buf);
+extern void AudioQueryExtensionReply (const unsigned char *buf);
+extern void AudioGetCloseDownMode (const unsigned char *buf);
+extern void AudioGetCloseDownModeReply (const unsigned char *buf);
+extern void AudioSetCloseDownMode (const unsigned char *buf);
+extern void AudioKillClient (const unsigned char *buf);
+extern void AudioGetServerTime (const unsigned char *buf);
+extern void AudioGetServerTimeReply (const unsigned char *buf);
+extern void AudioNoOperation (const unsigned char *buf);
diff --git a/print11.c b/print11.c
index 687bf6c..3d7984a 100644
--- a/print11.c
+++ b/print11.c
@@ -23,7 +23,7 @@
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
* *
- * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2002, 2009 Sun Microsystems, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
@@ -55,10 +55,10 @@
#include "scope.h"
#include "x11.h"
-static void PrintFailedSetUpReply(unsigned char *buf);
-static void PrintSuccessfulSetUpReply(unsigned char *buf);
-static void ListFontsWithInfoReply1(unsigned char *buf);
-static void ListFontsWithInfoReply2(unsigned char *buf);
+static void PrintFailedSetUpReply(const unsigned char *buf);
+static void PrintSuccessfulSetUpReply(const unsigned char *buf);
+static void ListFontsWithInfoReply1(const unsigned char *buf);
+static void ListFontsWithInfoReply2(const unsigned char *buf);
/* ************************************************************ */
@@ -90,15 +90,14 @@ static void ListFontsWithInfoReply2(unsigned char *buf);
#define printfield(a,b,c,d,e) if (Verbose > 1) PrintField(a,b,c,d,e)
-
/* ************************************************************ */
/* */
/* */
/* ************************************************************ */
void
-PrintSetUpMessage(buf)
- unsigned char *buf;
+PrintSetUpMessage (
+ const unsigned char *buf)
{
short n;
short d;
@@ -119,8 +118,8 @@ PrintSetUpMessage(buf)
}
void
-PrintSetUpReply(buf)
- unsigned char *buf;
+PrintSetUpReply (
+ const unsigned char *buf)
{
enterprocedure("PrintSetUpReply");
SetIndentLevel(PRINTSERVER);
@@ -131,8 +130,8 @@ PrintSetUpReply(buf)
}
static void
-PrintFailedSetUpReply(buf)
- unsigned char *buf;
+PrintFailedSetUpReply (
+ const unsigned char *buf)
{
short n;
@@ -148,8 +147,8 @@ PrintFailedSetUpReply(buf)
}
static void
-PrintSuccessfulSetUpReply(buf)
- unsigned char *buf;
+PrintSuccessfulSetUpReply (
+ const unsigned char *buf)
{
short v;
short n;
@@ -187,10 +186,10 @@ PrintSuccessfulSetUpReply(buf)
/* */
/* ************************************************************ */
-static char *REQUESTHEADER = "............REQUEST";
-static char *EVENTHEADER = "..............EVENT";
-static char *ERRORHEADER = "..............ERROR";
-static char *REPLYHEADER = "..............REPLY";
+const char REQUESTHEADER[] = "............REQUEST";
+const char EVENTHEADER[] = "..............EVENT";
+const char ERRORHEADER[] = "..............ERROR";
+const char REPLYHEADER[] = "..............REPLY";
/* ************************************************************ */
@@ -201,8 +200,8 @@ static char *REPLYHEADER = "..............REPLY";
/* Error Printing procedures */
void
-RequestError(buf)
- unsigned char *buf;
+RequestError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Request */ ;
if (Verbose < 1)
@@ -213,8 +212,8 @@ RequestError(buf)
}
void
-ValueError(buf)
- unsigned char *buf;
+ValueError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Value */ ;
if (Verbose < 1)
@@ -226,8 +225,8 @@ ValueError(buf)
}
void
-WindowError(buf)
- unsigned char *buf;
+WindowError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Window */ ;
if (Verbose < 1)
@@ -239,8 +238,8 @@ WindowError(buf)
}
void
-PixmapError(buf)
- unsigned char *buf;
+PixmapError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Pixmap */ ;
if (Verbose < 1)
@@ -252,8 +251,8 @@ PixmapError(buf)
}
void
-AtomError(buf)
- unsigned char *buf;
+AtomError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Atom */ ;
if (Verbose < 1)
@@ -265,8 +264,8 @@ AtomError(buf)
}
void
-CursorError(buf)
- unsigned char *buf;
+CursorError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Cursor */ ;
if (Verbose < 1)
@@ -278,8 +277,8 @@ CursorError(buf)
}
void
-FontError(buf)
- unsigned char *buf;
+FontError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Font */ ;
if (Verbose < 1)
@@ -291,8 +290,8 @@ FontError(buf)
}
void
-MatchError(buf)
- unsigned char *buf;
+MatchError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Match */ ;
if (Verbose < 1)
@@ -303,8 +302,8 @@ MatchError(buf)
}
void
-DrawableError(buf)
- unsigned char *buf;
+DrawableError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Drawable */ ;
if (Verbose < 1)
@@ -316,8 +315,8 @@ DrawableError(buf)
}
void
-AccessError(buf)
- unsigned char *buf;
+AccessError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Access */ ;
if (Verbose < 1)
@@ -328,8 +327,8 @@ AccessError(buf)
}
void
-AllocError(buf)
- unsigned char *buf;
+AllocError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Alloc */ ;
if (Verbose < 1)
@@ -340,8 +339,8 @@ AllocError(buf)
}
void
-ColormapError(buf)
- unsigned char *buf;
+ColormapError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Colormap */ ;
if (Verbose < 1)
@@ -353,8 +352,8 @@ ColormapError(buf)
}
void
-GContextError(buf)
- unsigned char *buf;
+GContextError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* GContext */ ;
if (Verbose < 1)
@@ -366,8 +365,8 @@ GContextError(buf)
}
void
-IDChoiceError(buf)
- unsigned char *buf;
+IDChoiceError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* IDChoice */ ;
if (Verbose < 1)
@@ -379,8 +378,8 @@ IDChoiceError(buf)
}
void
-NameError(buf)
- unsigned char *buf;
+NameError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Name */ ;
if (Verbose < 1)
@@ -391,8 +390,8 @@ NameError(buf)
}
void
-LengthError(buf)
- unsigned char *buf;
+LengthError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Length */ ;
if (Verbose < 1)
@@ -403,8 +402,8 @@ LengthError(buf)
}
void
-ImplementationError(buf)
- unsigned char *buf;
+ImplementationError (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Implementation */ ;
if (Verbose < 1)
@@ -422,8 +421,8 @@ ImplementationError(buf)
/* Event Printing procedures */
void
-KeyPressEvent(buf)
- unsigned char *buf;
+KeyPressEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* KeyPress */ ;
if (Verbose < 1)
@@ -443,8 +442,8 @@ KeyPressEvent(buf)
}
void
-KeyReleaseEvent(buf)
- unsigned char *buf;
+KeyReleaseEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* KeyRelease */ ;
if (Verbose < 1)
@@ -464,8 +463,8 @@ KeyReleaseEvent(buf)
}
void
-ButtonPressEvent(buf)
- unsigned char *buf;
+ButtonPressEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ButtonPress */ ;
if (Verbose < 1)
@@ -485,8 +484,8 @@ ButtonPressEvent(buf)
}
void
-ButtonReleaseEvent(buf)
- unsigned char *buf;
+ButtonReleaseEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ButtonRelease */ ;
if (Verbose < 1)
@@ -506,8 +505,8 @@ ButtonReleaseEvent(buf)
}
void
-MotionNotifyEvent(buf)
- unsigned char *buf;
+MotionNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* MotionNotify */ ;
if (Verbose < 1)
@@ -527,8 +526,8 @@ MotionNotifyEvent(buf)
}
void
-EnterNotifyEvent(buf)
- unsigned char *buf;
+EnterNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* EnterNotify */ ;
if (Verbose < 1)
@@ -549,8 +548,8 @@ EnterNotifyEvent(buf)
}
void
-LeaveNotifyEvent(buf)
- unsigned char *buf;
+LeaveNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* LeaveNotify */ ;
if (Verbose < 1)
@@ -571,8 +570,8 @@ LeaveNotifyEvent(buf)
}
void
-FocusInEvent(buf)
- unsigned char *buf;
+FocusInEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* FocusIn */ ;
if (Verbose < 1)
@@ -584,8 +583,8 @@ FocusInEvent(buf)
}
void
-FocusOutEvent(buf)
- unsigned char *buf;
+FocusOutEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* FocusOut */ ;
if (Verbose < 1)
@@ -597,8 +596,8 @@ FocusOutEvent(buf)
}
void
-KeymapNotifyEvent(buf)
- unsigned char *buf;
+KeymapNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* KeymapNotify */ ;
if (Verbose < 1)
@@ -607,8 +606,8 @@ KeymapNotifyEvent(buf)
}
void
-ExposeEvent(buf)
- unsigned char *buf;
+ExposeEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* Expose */ ;
if (Verbose < 1)
@@ -623,8 +622,8 @@ ExposeEvent(buf)
}
void
-GraphicsExposureEvent(buf)
- unsigned char *buf;
+GraphicsExposureEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* GraphicsExposure */ ;
if (Verbose < 1)
@@ -641,8 +640,8 @@ GraphicsExposureEvent(buf)
}
void
-NoExposureEvent(buf)
- unsigned char *buf;
+NoExposureEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* NoExposure */ ;
if (Verbose < 1)
@@ -654,8 +653,8 @@ NoExposureEvent(buf)
}
void
-VisibilityNotifyEvent(buf)
- unsigned char *buf;
+VisibilityNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* VisibilityNotify */ ;
if (Verbose < 1)
@@ -666,8 +665,8 @@ VisibilityNotifyEvent(buf)
}
void
-CreateNotifyEvent(buf)
- unsigned char *buf;
+CreateNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* CreateNotify */ ;
if (Verbose < 1)
@@ -684,8 +683,8 @@ CreateNotifyEvent(buf)
}
void
-DestroyNotifyEvent(buf)
- unsigned char *buf;
+DestroyNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* DestroyNotify */ ;
if (Verbose < 1)
@@ -696,8 +695,8 @@ DestroyNotifyEvent(buf)
}
void
-UnmapNotifyEvent(buf)
- unsigned char *buf;
+UnmapNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* UnmapNotify */ ;
if (Verbose < 1)
@@ -709,8 +708,8 @@ UnmapNotifyEvent(buf)
}
void
-MapNotifyEvent(buf)
- unsigned char *buf;
+MapNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* MapNotify */ ;
if (Verbose < 1)
@@ -722,8 +721,8 @@ MapNotifyEvent(buf)
}
void
-MapRequestEvent(buf)
- unsigned char *buf;
+MapRequestEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* MapRequest */ ;
if (Verbose < 1)
@@ -734,8 +733,8 @@ MapRequestEvent(buf)
}
void
-ReparentNotifyEvent(buf)
- unsigned char *buf;
+ReparentNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ReparentNotify */ ;
if (Verbose < 1)
@@ -750,8 +749,8 @@ ReparentNotifyEvent(buf)
}
void
-ConfigureNotifyEvent(buf)
- unsigned char *buf;
+ConfigureNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ConfigureNotify */ ;
if (Verbose < 1)
@@ -769,8 +768,8 @@ ConfigureNotifyEvent(buf)
}
void
-ConfigureRequestEvent(buf)
- unsigned char *buf;
+ConfigureRequestEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ConfigureRequest */ ;
if (Verbose < 1)
@@ -789,8 +788,8 @@ ConfigureRequestEvent(buf)
}
void
-GravityNotifyEvent(buf)
- unsigned char *buf;
+GravityNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* GravityNotify */ ;
if (Verbose < 1)
@@ -803,8 +802,8 @@ GravityNotifyEvent(buf)
}
void
-ResizeRequestEvent(buf)
- unsigned char *buf;
+ResizeRequestEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ResizeRequest */ ;
if (Verbose < 1)
@@ -816,8 +815,8 @@ ResizeRequestEvent(buf)
}
void
-CirculateNotifyEvent(buf)
- unsigned char *buf;
+CirculateNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* CirculateNotify */ ;
if (Verbose < 1)
@@ -830,8 +829,8 @@ CirculateNotifyEvent(buf)
}
void
-CirculateRequestEvent(buf)
- unsigned char *buf;
+CirculateRequestEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* CirculateRequest */ ;
if (Verbose < 1)
@@ -843,8 +842,8 @@ CirculateRequestEvent(buf)
}
void
-PropertyNotifyEvent(buf)
- unsigned char *buf;
+PropertyNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* PropertyNotify */ ;
if (Verbose < 1)
@@ -857,8 +856,8 @@ PropertyNotifyEvent(buf)
}
void
-SelectionClearEvent(buf)
- unsigned char *buf;
+SelectionClearEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* SelectionClear */ ;
if (Verbose < 1)
@@ -870,8 +869,8 @@ SelectionClearEvent(buf)
}
void
-SelectionRequestEvent(buf)
- unsigned char *buf;
+SelectionRequestEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* SelectionRequest */ ;
if (Verbose < 1)
@@ -886,8 +885,8 @@ SelectionRequestEvent(buf)
}
void
-SelectionNotifyEvent(buf)
- unsigned char *buf;
+SelectionNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* SelectionNotify */ ;
if (Verbose < 1)
@@ -901,8 +900,8 @@ SelectionNotifyEvent(buf)
}
void
-ColormapNotifyEvent(buf)
- unsigned char *buf;
+ColormapNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ColormapNotify */ ;
if (Verbose < 1)
@@ -915,8 +914,8 @@ ColormapNotifyEvent(buf)
}
void
-ClientMessageEvent(buf)
- unsigned char *buf;
+ClientMessageEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* ClientMessage */ ;
if (Verbose < 1)
@@ -929,8 +928,8 @@ ClientMessageEvent(buf)
}
void
-MappingNotifyEvent(buf)
- unsigned char *buf;
+MappingNotifyEvent (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* MappingNotify */ ;
if (Verbose < 1)
@@ -949,18 +948,51 @@ MappingNotifyEvent(buf)
/* Request and Reply Printing procedures */
void
-CreateWindow(buf)
- unsigned char *buf;
+ExtendedRequest (
+ int fd,
+ const unsigned char *buf)
+{
+ short n;
+ PrintField(buf, 0, 1, REQUEST, REQUESTHEADER);
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ PrintField(buf, 1, 1, CARD8, "minor opcode");
+ printreqlen(buf, fd, DVALUE2(n-1));
+
+ n = CS[fd].requestLen - 1;
+ (void) PrintList (&buf[4], n, CARD32, "data");
+}
+
+void
+UnknownReply (
+ const unsigned char *buf)
+{
+ long n;
+
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER);
+ PrintField(buf, 1, 1, CARD8, "data");
+ printfield (buf, 2, 2, CARD16, "sequence number");
+ printfield (buf, 4, 4, DVALUE4(n), "reply length");
+ n = ILong (&buf[4]) + 6;
+ (void) PrintList (&buf[8], n, CARD32, "data");
+}
+
+void
+CreateWindow (
+ FD fd,
+ const unsigned char *buf)
{
/* Request CreateWindow is opcode 1 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* CreateWindow */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, CARD8, "depth");
- printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+ printreqlen(buf, fd, DVALUE2(8 + n));
PrintField(buf, 4, 4, WINDOW, "wid");
PrintField(buf, 8, 4, WINDOW, "parent");
PrintField(buf, 12, 2, INT16, "x");
@@ -975,40 +1007,42 @@ CreateWindow(buf)
}
void
-ChangeWindowAttributes(buf)
- unsigned char *buf;
+ChangeWindowAttributes (
+ FD fd,
+ const unsigned char *buf)
{
/* Request ChangeWindowAttributes is opcode 2 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ChangeWindowAttributes */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(3 + n), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + n));
PrintField(buf, 4, 4, WINDOW, "window");
PrintField(buf, 8, 4, WINDOW_BITMASK, "value-mask");
PrintValues(&buf[8], 4, WINDOW_BITMASK, &buf[12], "value-list");
}
void
-GetWindowAttributes(buf)
- unsigned char *buf;
+GetWindowAttributes (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetWindowAttributes is opcode 3 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetWindowAttributes */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, WINDOW, "window");
}
void
-GetWindowAttributesReply(buf)
- unsigned char *buf;
+GetWindowAttributesReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GetWindowAttributes */ ;
if (Verbose < 1)
@@ -1033,63 +1067,67 @@ GetWindowAttributesReply(buf)
}
void
-DestroyWindow(buf)
- unsigned char *buf;
+DestroyWindow (
+ FD fd,
+ const unsigned char *buf)
{
/* Request DestroyWindow is opcode 4 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* DestroyWindow */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, WINDOW, "window");
}
void
-DestroySubwindows(buf)
- unsigned char *buf;
+DestroySubwindows (
+ FD fd,
+ const unsigned char *buf)
{
/* Request DestroySubwindows is opcode 5 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* DestroySubwindows */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, WINDOW, "window");
}
void
-ChangeSaveSet(buf)
- unsigned char *buf;
+ChangeSaveSet (
+ FD fd,
+ const unsigned char *buf)
{
/* Request ChangeSaveSet is opcode 6 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ChangeSaveSet */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, INS_DEL, "mode");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, WINDOW, "window");
}
void
-ReparentWindow(buf)
- unsigned char *buf;
+ReparentWindow (
+ FD fd,
+ const unsigned char *buf)
{
/* Request ReparentWindow is opcode 7 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ReparentWindow */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(4), "request length");
+ printreqlen(buf, fd, CONST2(4));
PrintField(buf, 4, 4, WINDOW, "window");
PrintField(buf, 8, 4, WINDOW, "parent");
PrintField(buf, 12, 2, INT16, "x");
@@ -1097,116 +1135,123 @@ ReparentWindow(buf)
}
void
-MapWindow(buf)
- unsigned char *buf;
+MapWindow (
+ FD fd,
+ const unsigned char *buf)
{
/* Request MapWindow is opcode 8 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* MapWindow */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, WINDOW, "window");
}
void
-MapSubwindows(buf)
- unsigned char *buf;
+MapSubwindows (
+ FD fd,
+ const unsigned char *buf)
{
/* Request MapSubwindows is opcode 9 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* MapSubwindows */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, WINDOW, "window");
}
void
-UnmapWindow(buf)
- unsigned char *buf;
+UnmapWindow (
+ FD fd,
+ const unsigned char *buf)
{
/* Request UnmapWindow is opcode 10 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* UnmapWindow */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, WINDOW, "window");
}
void
-UnmapSubwindows(buf)
- unsigned char *buf;
+UnmapSubwindows (
+ FD fd,
+ const unsigned char *buf)
{
/* Request UnmapSubwindows is opcode 11 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* UnmapSubwindows */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, WINDOW, "window");
}
void
-ConfigureWindow(buf)
- unsigned char *buf;
+ConfigureWindow (
+ FD fd,
+ const unsigned char *buf)
{
/* Request ConfigureWindow is opcode 12 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ConfigureWindow */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(3 + n), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + n));
PrintField(buf, 4, 4, WINDOW, "window");
PrintField(buf, 8, 2, CONFIGURE_BITMASK, "value-mask");
PrintValues(&buf[8], 2, CONFIGURE_BITMASK, &buf[12], "value-list");
}
void
-CirculateWindow(buf)
- unsigned char *buf;
+CirculateWindow (
+ FD fd,
+ const unsigned char *buf)
{
/* Request CirculateWindow is opcode 13 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* CirculateWindow */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, CIRMODE, "direction");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, WINDOW, "window");
}
void
-GetGeometry(buf)
- unsigned char *buf;
+GetGeometry (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetGeometry is opcode 14 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetGeometry */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, DRAWABLE, "drawable");
}
void
-GetGeometryReply(buf)
- unsigned char *buf;
+GetGeometryReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GetGeometry */ ;
if (Verbose < 1)
@@ -1223,23 +1268,24 @@ GetGeometryReply(buf)
}
void
-QueryTree(buf)
- unsigned char *buf;
+QueryTree (
+ FD fd,
+ const unsigned char *buf)
{
/* Request QueryTree is opcode 15 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* QueryTree */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, WINDOW, "window");
}
void
-QueryTreeReply(buf)
- unsigned char *buf;
+QueryTreeReply (
+ const unsigned char *buf)
{
short n;
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* QueryTree */ ;
@@ -1255,8 +1301,9 @@ QueryTreeReply(buf)
}
void
-InternAtom(buf)
- unsigned char *buf;
+InternAtom (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request InternAtom is opcode 16 */
@@ -1264,18 +1311,18 @@ InternAtom(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, BOOL, "only-if-exists");
- printfield(buf, 2, 2, DVALUE2(2 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(2 + (n + p) / 4));
printfield(buf, 4, 2, DVALUE2(n), "length of name");
n = IShort(&buf[4]);
PrintString8(&buf[8], n, "name");
}
void
-InternAtomReply(buf)
- unsigned char *buf;
+InternAtomReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* InternAtom */ ;
if (Verbose < 1)
@@ -1286,23 +1333,24 @@ InternAtomReply(buf)
}
void
-GetAtomName(buf)
- unsigned char *buf;
+GetAtomName (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetAtomName is opcode 17 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetAtomName */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, ATOM, "atom");
}
void
-GetAtomNameReply(buf)
- unsigned char *buf;
+GetAtomNameReply (
+ const unsigned char *buf)
{
short n;
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GetAtomName */ ;
@@ -1316,8 +1364,9 @@ GetAtomNameReply(buf)
}
void
-ChangeProperty(buf)
- unsigned char *buf;
+ChangeProperty (
+ FD fd,
+ const unsigned char *buf)
{
long n;
short unit;
@@ -1328,10 +1377,10 @@ ChangeProperty(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, CHANGEMODE, "mode");
- printfield(buf, 2, 2, DVALUE2(6 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(6 + (n + p) / 4));
PrintField(buf, 4, 4, WINDOW, "window");
PrintField(buf, 8, 4, ATOM, "property");
PrintField(buf, 12, 4, ATOM, "type");
@@ -1347,34 +1396,36 @@ ChangeProperty(buf)
}
void
-DeleteProperty(buf)
- unsigned char *buf;
+DeleteProperty (
+ FD fd,
+ const unsigned char *buf)
{
/* Request DeleteProperty is opcode 19 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* DeleteProperty */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(3), "request length");
+ printreqlen(buf, fd, CONST2(3));
PrintField(buf, 4, 4, WINDOW, "window");
PrintField(buf, 8, 4, ATOM, "property");
}
void
-GetProperty(buf)
- unsigned char *buf;
+GetProperty (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetProperty is opcode 20 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetProperty */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, BOOL, "delete");
- printfield(buf, 2, 2, CONST2(6), "request length");
+ printreqlen(buf, fd, CONST2(6));
PrintField(buf, 4, 4, WINDOW, "window");
PrintField(buf, 8, 4, ATOM, "property");
PrintField(buf, 12, 4, ATOMT, "type");
@@ -1383,8 +1434,8 @@ GetProperty(buf)
}
void
-GetPropertyReply(buf)
- unsigned char *buf;
+GetPropertyReply (
+ const unsigned char *buf)
{
long n;
short unit;
@@ -1409,23 +1460,24 @@ GetPropertyReply(buf)
}
void
-ListProperties(buf)
- unsigned char *buf;
+ListProperties (
+ FD fd,
+ const unsigned char *buf)
{
/* Request ListProperties is opcode 21 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ListProperties */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, WINDOW, "window");
}
void
-ListPropertiesReply(buf)
- unsigned char *buf;
+ListPropertiesReply (
+ const unsigned char *buf)
{
short n;
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* ListProperties */ ;
@@ -1439,40 +1491,42 @@ ListPropertiesReply(buf)
}
void
-SetSelectionOwner(buf)
- unsigned char *buf;
+SetSelectionOwner (
+ FD fd,
+ const unsigned char *buf)
{
/* Request SetSelectionOwner is opcode 22 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* SetSelectionOwner */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(4), "request length");
+ printreqlen(buf, fd, CONST2(4));
PrintField(buf, 4, 4, WINDOW, "owner");
PrintField(buf, 8, 4, ATOM, "selection");
PrintField(buf, 12, 4, TIMESTAMP, "time");
}
void
-GetSelectionOwner(buf)
- unsigned char *buf;
+GetSelectionOwner (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetSelectionOwner is opcode 23 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetSelectionOwner */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, ATOM, "selection");
}
void
-GetSelectionOwnerReply(buf)
- unsigned char *buf;
+GetSelectionOwnerReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GetSelectionOwner */ ;
if (Verbose < 1)
@@ -1483,17 +1537,18 @@ GetSelectionOwnerReply(buf)
}
void
-ConvertSelection(buf)
- unsigned char *buf;
+ConvertSelection (
+ FD fd,
+ const unsigned char *buf)
{
/* Request ConvertSelection is opcode 24 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ConvertSelection */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(6), "request length");
+ printreqlen(buf, fd, CONST2(6));
PrintField(buf, 4, 4, WINDOW, "requestor");
PrintField(buf, 8, 4, ATOM, "selection");
PrintField(buf, 12, 4, ATOM, "target");
@@ -1502,36 +1557,38 @@ ConvertSelection(buf)
}
void
-SendEvent(buf)
- unsigned char *buf;
+SendEvent (
+ FD fd,
+ const unsigned char *buf)
{
/* Request SendEvent is opcode 25 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* SendEvent */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, BOOL, "propagate");
- printfield(buf, 2, 2, CONST2(11), "request length");
+ printreqlen(buf, fd, CONST2(11));
PrintField(buf, 4, 4, WINDOWD, "destination");
PrintField(buf, 8, 4, SETofEVENT, "event-mask");
PrintField(buf, 12, 32, EVENTFORM, "event");
}
void
-GrabPointer(buf)
- unsigned char *buf;
+GrabPointer (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GrabPointer is opcode 26 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GrabPointer */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, BOOL, "owner-events");
- printfield(buf, 2, 2, CONST2(6), "request length");
+ printreqlen(buf, fd, CONST2(6));
PrintField(buf, 4, 4, WINDOW, "grab-window");
PrintField(buf, 8, 2, SETofPOINTEREVENT, "event-mask");
PrintField(buf, 10, 1, PK_MODE, "pointer-mode");
@@ -1542,8 +1599,8 @@ GrabPointer(buf)
}
void
-GrabPointerReply(buf)
- unsigned char *buf;
+GrabPointerReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GrabPointer */ ;
if (Verbose < 1)
@@ -1554,33 +1611,35 @@ GrabPointerReply(buf)
}
void
-UngrabPointer(buf)
- unsigned char *buf;
+UngrabPointer (
+ FD fd,
+ const unsigned char *buf)
{
/* Request UngrabPointer is opcode 27 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* UngrabPointer */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, TIMESTAMP, "time");
}
void
-GrabButton(buf)
- unsigned char *buf;
+GrabButton (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GrabButton is opcode 28 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GrabButton */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, BOOL, "owner-events");
- printfield(buf, 2, 2, CONST2(6), "request length");
+ printreqlen(buf, fd, CONST2(6));
PrintField(buf, 4, 4, WINDOW, "grab-window");
PrintField(buf, 8, 2, SETofPOINTEREVENT, "event-mask");
PrintField(buf, 10, 1, PK_MODE, "pointer-mode");
@@ -1592,52 +1651,55 @@ GrabButton(buf)
}
void
-UngrabButton(buf)
- unsigned char *buf;
+UngrabButton (
+ FD fd,
+ const unsigned char *buf)
{
/* Request UngrabButton is opcode 29 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* UngrabButton */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, BUTTONA, "button");
- printfield(buf, 2, 2, CONST2(3), "request length");
+ printreqlen(buf, fd, CONST2(3));
PrintField(buf, 4, 4, WINDOW, "grab-window");
PrintField(buf, 8, 2, SETofKEYMASK, "modifiers");
}
void
-ChangeActivePointerGrab(buf)
- unsigned char *buf;
+ChangeActivePointerGrab (
+ FD fd,
+ const unsigned char *buf)
{
/* Request ChangeActivePointerGrab is opcode 30 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ChangeActivePointerGrab */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(4), "request length");
+ printreqlen(buf, fd, CONST2(4));
PrintField(buf, 4, 4, CURSOR, "cursor");
PrintField(buf, 8, 4, TIMESTAMP, "time");
PrintField(buf, 12, 2, SETofPOINTEREVENT, "event-mask");
}
void
-GrabKeyboard(buf)
- unsigned char *buf;
+GrabKeyboard (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GrabKeyboard is opcode 31 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GrabKeyboard */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, BOOL, "owner-events");
- printfield(buf, 2, 2, CONST2(4), "request length");
+ printreqlen(buf, fd, CONST2(4));
PrintField(buf, 4, 4, WINDOW, "grab-window");
PrintField(buf, 8, 4, TIMESTAMP, "time");
PrintField(buf, 12, 1, PK_MODE, "pointer-mode");
@@ -1645,8 +1707,8 @@ GrabKeyboard(buf)
}
void
-GrabKeyboardReply(buf)
- unsigned char *buf;
+GrabKeyboardReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GrabKeyboard */ ;
if (Verbose < 1)
@@ -1657,33 +1719,35 @@ GrabKeyboardReply(buf)
}
void
-UngrabKeyboard(buf)
- unsigned char *buf;
+UngrabKeyboard (
+ FD fd,
+ const unsigned char *buf)
{
/* Request UngrabKeyboard is opcode 32 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* UngrabKeyboard */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, TIMESTAMP, "time");
}
void
-GrabKey(buf)
- unsigned char *buf;
+GrabKey (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GrabKey is opcode 33 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GrabKey */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, BOOL, "owner-events");
- printfield(buf, 2, 2, CONST2(4), "request length");
+ printreqlen(buf, fd, CONST2(4));
PrintField(buf, 4, 4, WINDOW, "grab-window");
PrintField(buf, 8, 2, SETofKEYMASK, "modifiers");
PrintField(buf, 10, 1, KEYCODEA, "key");
@@ -1692,84 +1756,89 @@ GrabKey(buf)
}
void
-UngrabKey(buf)
- unsigned char *buf;
+UngrabKey (
+ FD fd,
+ const unsigned char *buf)
{
/* Request UngrabKey is opcode 34 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* UngrabKey */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, KEYCODEA, "key");
- printfield(buf, 2, 2, CONST2(3), "request length");
+ printreqlen(buf, fd, CONST2(3));
PrintField(buf, 4, 4, WINDOW, "grab-window");
PrintField(buf, 8, 2, SETofKEYMASK, "modifiers");
}
void
-AllowEvents(buf)
- unsigned char *buf;
+AllowEvents (
+ FD fd,
+ const unsigned char *buf)
{
/* Request AllowEvents is opcode 35 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* AllowEvents */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, EVENTMODE, "mode");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, TIMESTAMP, "time");
}
void
-GrabServer(buf)
- unsigned char *buf;
+GrabServer (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GrabServer is opcode 36 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GrabServer */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-UngrabServer(buf)
- unsigned char *buf;
+UngrabServer (
+ FD fd,
+ const unsigned char *buf)
{
/* Request UngrabServer is opcode 37 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* UngrabServer */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-QueryPointer(buf)
- unsigned char *buf;
+QueryPointer (
+ FD fd,
+ const unsigned char *buf)
{
/* Request QueryPointer is opcode 38 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* QueryPointer */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, WINDOW, "window");
}
void
-QueryPointerReply(buf)
- unsigned char *buf;
+QueryPointerReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* QueryPointer */ ;
if (Verbose < 1)
@@ -1787,25 +1856,26 @@ QueryPointerReply(buf)
}
void
-GetMotionEvents(buf)
- unsigned char *buf;
+GetMotionEvents (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetMotionEvents is opcode 39 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetMotionEvents */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(4), "request length");
+ printreqlen(buf, fd, CONST2(4));
PrintField(buf, 4, 4, WINDOW, "window");
PrintField(buf, 8, 4, TIMESTAMP, "start");
PrintField(buf, 12, 4, TIMESTAMP, "stop");
}
void
-GetMotionEventsReply(buf)
- unsigned char *buf;
+GetMotionEventsReply (
+ const unsigned char *buf)
{
long n;
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GetMotionEvents */ ;
@@ -1819,17 +1889,18 @@ GetMotionEventsReply(buf)
}
void
-TranslateCoordinates(buf)
- unsigned char *buf;
+TranslateCoordinates (
+ FD fd,
+ const unsigned char *buf)
{
/* Request TranslateCoordinates is opcode 40 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* TranslateCoordinates */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(4), "request length");
+ printreqlen(buf, fd, CONST2(4));
PrintField(buf, 4, 4, WINDOW, "src-window");
PrintField(buf, 8, 4, WINDOW, "dst-window");
PrintField(buf, 12, 2, INT16, "src-x");
@@ -1837,8 +1908,8 @@ TranslateCoordinates(buf)
}
void
-TranslateCoordinatesReply(buf)
- unsigned char *buf;
+TranslateCoordinatesReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* TranslateCoordinates */ ;
if (Verbose < 1)
@@ -1852,17 +1923,18 @@ TranslateCoordinatesReply(buf)
}
void
-WarpPointer(buf)
- unsigned char *buf;
+WarpPointer (
+ FD fd,
+ const unsigned char *buf)
{
/* Request WarpPointer is opcode 41 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* WarpPointer */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(6), "request length");
+ printreqlen(buf, fd, CONST2(6));
PrintField(buf, 4, 4, WINDOW, "src-window");
PrintField(buf, 8, 4, WINDOW, "dst-window");
PrintField(buf, 12, 2, INT16, "src-x");
@@ -1874,39 +1946,41 @@ WarpPointer(buf)
}
void
-SetInputFocus(buf)
- unsigned char *buf;
+SetInputFocus (
+ FD fd,
+ const unsigned char *buf)
{
/* Request SetInputFocus is opcode 42 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* SetInputFocus */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, FOCUSAGENT, "revert-to");
- printfield(buf, 2, 2, CONST2(3), "request length");
+ printreqlen(buf, fd, CONST2(3));
PrintField(buf, 4, 4, WINDOWNR, "focus");
PrintField(buf, 8, 4, TIMESTAMP, "time");
}
void
-GetInputFocus(buf)
- unsigned char *buf;
+GetInputFocus (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetInputFocus is opcode 43 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetInputFocus */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-GetInputFocusReply(buf)
- unsigned char *buf;
+GetInputFocusReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GetInputFocus */ ;
if (Verbose < 1)
@@ -1918,22 +1992,23 @@ GetInputFocusReply(buf)
}
void
-QueryKeymap(buf)
- unsigned char *buf;
+QueryKeymap (
+ FD fd,
+ const unsigned char *buf)
{
/* Request QueryKeymap is opcode 44 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* QueryKeymap */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-QueryKeymapReply(buf)
- unsigned char *buf;
+QueryKeymapReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* QueryKeymap */ ;
if (Verbose < 1)
@@ -1944,8 +2019,9 @@ QueryKeymapReply(buf)
}
void
-OpenFont(buf)
- unsigned char *buf;
+OpenFont (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request OpenFont is opcode 45 */
@@ -1953,9 +2029,9 @@ OpenFont(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(3 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + (n + p) / 4));
PrintField(buf, 4, 4, FONT, "font-id");
printfield(buf, 8, 2, DVALUE2(n), "length of name");
n = IShort(&buf[8]);
@@ -1963,38 +2039,40 @@ OpenFont(buf)
}
void
-CloseFont(buf)
- unsigned char *buf;
+CloseFont (
+ FD fd,
+ const unsigned char *buf)
{
/* Request CloseFont is opcode 46 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* CloseFont */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, FONT, "font");
}
void
-QueryFont(buf)
- unsigned char *buf;
+QueryFont (
+ FD fd,
+ const unsigned char *buf)
{
/* Request QueryFont is opcode 47 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* QueryFont */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, FONTABLE, "font");
}
void
-QueryFontReply(buf)
- unsigned char *buf;
+QueryFontReply (
+ const unsigned char *buf)
{
short n;
long m;
@@ -2025,20 +2103,21 @@ QueryFontReply(buf)
}
void
-QueryTextExtents(buf)
- unsigned char *buf;
+QueryTextExtents (
+ FD fd,
+ const unsigned char *buf)
{
- short n;
+ int n;
/* Request QueryTextExtents is opcode 48 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* QueryTextExtents */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
printfield(buf, 1, 1, BOOL, "odd length?");
- printfield(buf, 2, 2, DVALUE2(2 + (2*n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(2 + (2*n + p) / 4));
n = (IShort(&buf[2]) - 2) * 4 / 2;
if (IBool(&buf[1]))
n -= 1;
@@ -2047,8 +2126,8 @@ QueryTextExtents(buf)
}
void
-QueryTextExtentsReply(buf)
- unsigned char *buf;
+QueryTextExtentsReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* QueryTextExtents */ ;
if (Verbose < 1)
@@ -2066,8 +2145,9 @@ QueryTextExtentsReply(buf)
}
void
-ListFonts(buf)
- unsigned char *buf;
+ListFonts (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request ListFonts is opcode 49 */
@@ -2075,9 +2155,9 @@ ListFonts(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(2 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(2 + (n + p) / 4));
PrintField(buf, 4, 2, CARD16, "max-names");
printfield(buf, 6, 2, DVALUE2(n), "length of pattern");
n = IShort(&buf[6]);
@@ -2085,8 +2165,8 @@ ListFonts(buf)
}
void
-ListFontsReply(buf)
- unsigned char *buf;
+ListFontsReply (
+ const unsigned char *buf)
{
short n;
@@ -2101,8 +2181,9 @@ ListFontsReply(buf)
}
void
-ListFontsWithInfo(buf)
- unsigned char *buf;
+ListFontsWithInfo (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request ListFontsWithInfo is opcode 50 */
@@ -2110,9 +2191,9 @@ ListFontsWithInfo(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(2 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(2 + (n + p) / 4));
PrintField(buf, 4, 2, CARD16, "max-names");
printfield(buf, 6, 2, DVALUE2(n), "length of pattern");
n = IShort(&buf[6]);
@@ -2120,8 +2201,8 @@ ListFontsWithInfo(buf)
}
void
-ListFontsWithInfoReply(buf)
- unsigned char *buf;
+ListFontsWithInfoReply (
+ const unsigned char *buf)
{
short which;
@@ -2139,8 +2220,8 @@ ListFontsWithInfoReply(buf)
}
static void
-ListFontsWithInfoReply1(buf)
- unsigned char *buf;
+ListFontsWithInfoReply1 (
+ const unsigned char *buf)
{
short n;
short m;
@@ -2167,8 +2248,8 @@ ListFontsWithInfoReply1(buf)
}
static void
-ListFontsWithInfoReply2(buf)
- unsigned char *buf;
+ListFontsWithInfoReply2 (
+ const unsigned char *buf)
{
PrintField(buf, 1, 1, CONST1(0), "last-reply indicator");
printfield(buf, 2, 2, CARD16, "sequence number");
@@ -2176,8 +2257,9 @@ ListFontsWithInfoReply2(buf)
}
void
-SetFontPath(buf)
- unsigned char *buf;
+SetFontPath (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request SetFontPath is opcode 51 */
@@ -2185,31 +2267,32 @@ SetFontPath(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(2 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(2 + (n + p) / 4));
printfield(buf, 4, 2, CARD16, "number of paths");
n = IShort(&buf[4]);
PrintListSTR(&buf[8], (long)n, "paths");
}
void
-GetFontPath(buf)
- unsigned char *buf;
+GetFontPath (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetFontPath is opcode 52 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetFontPath */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 2, 2, CONST2(1), "request list");
}
void
-GetFontPathReply(buf)
- unsigned char *buf;
+GetFontPathReply (
+ const unsigned char *buf)
{
short n;
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GetFontPath */ ;
@@ -2223,18 +2306,19 @@ GetFontPathReply(buf)
}
void
-CreatePixmap(buf)
- unsigned char *buf;
+CreatePixmap (
+ FD fd,
+ const unsigned char *buf)
{
/* Request CreatePixmap is opcode 53 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* CreatePixmap */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, CARD8, "depth");
- printfield(buf, 2, 2, CONST2(4), "request length");
+ printreqlen(buf, fd, CONST2(4));
PrintField(buf, 4, 4, PIXMAP, "pixmap-id");
PrintField(buf, 8, 4, DRAWABLE, "drawable");
PrintField(buf, 12, 2, CARD16, "width");
@@ -2242,32 +2326,63 @@ CreatePixmap(buf)
}
void
-FreePixmap(buf)
- unsigned char *buf;
+FreePixmap (
+ FD fd,
+ const unsigned char *buf)
{
/* Request FreePixmap is opcode 54 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* FreePixmap */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, PIXMAP, "pixmap");
}
-void
-CreateGC(buf)
- unsigned char *buf;
-{
+static const unsigned long GCDefaults[] = {
+ 3, /* function GXcopy */
+ ~0, /* planemask */
+ 0, /* foreground */
+ 1, /* background */
+ 0, /* line width */
+ 0, /* line style Solid */
+ 1, /* cap style Butt */
+ 0, /* join style Miter */
+ 0, /* fill style Solid */
+ 0, /* fill rule EvenOdd */
+ 0, /* tile */
+ 0, /* stipple */
+ 0, /* ts org x */
+ 0, /* ts org y */
+ 0, /* font */
+ 0, /* sub window mode ClipByChildren */
+ 1, /* graphics expose True */
+ 0, /* clip x org */
+ 0, /* clip y org */
+ 0, /* clip mask */
+ 0, /* dash offset */
+ 4, /* dashes */
+ 1, /* arc mode PieSlice */
+};
+
+void
+CreateGC (
+ FD fd,
+ const unsigned char *buf)
+{
+ CreateValueRec (ILong(buf+4), 23, GCDefaults);
+ SetValueRec (ILong(buf+4), &buf[12], 4, GC_BITMASK, &buf[16]);
+
/* Request CreateGC is opcode 55 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* CreateGC */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(4 + n), "request length");
+ printreqlen(buf, fd, DVALUE2(4 + n));
PrintField(buf, 4, 4, GCONTEXT, "graphic-context-id");
PrintField(buf, 8, 4, DRAWABLE, "drawable");
PrintField(buf, 12, 4, GC_BITMASK, "value-mask");
@@ -2275,42 +2390,47 @@ CreateGC(buf)
}
void
-ChangeGC(buf)
- unsigned char *buf;
+ChangeGC (
+ FD fd,
+ const unsigned char *buf)
{
+ SetValueRec (ILong(buf+4), &buf[8], 4, GC_BITMASK, &buf[12]);
+
/* Request ChangeGC is opcode 56 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ChangeGC */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(3 + n), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + n));
PrintField(buf, 4, 4, GCONTEXT, "gc");
PrintField(buf, 8, 4, GC_BITMASK, "value-mask");
PrintValues(&buf[8], 4, GC_BITMASK, &buf[12], "value-list");
}
void
-CopyGC(buf)
- unsigned char *buf;
+CopyGC (
+ FD fd,
+ const unsigned char *buf)
{
/* Request CopyGC is opcode 57 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* CopyGC */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(4), "request length");
+ printreqlen(buf, fd, CONST2(4));
PrintField(buf, 4, 4, GCONTEXT, "src-gc");
PrintField(buf, 8, 4, GCONTEXT, "dst-gc");
PrintField(buf, 12, 4, GC_BITMASK, "value-mask");
}
void
-SetDashes(buf)
- unsigned char *buf;
+SetDashes (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request SetDashes is opcode 58 */
@@ -2318,9 +2438,9 @@ SetDashes(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(3 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + (n + p) / 4));
PrintField(buf, 4, 4, GCONTEXT, "gc");
PrintField(buf, 8, 2, CARD16, "dash-offset");
printfield(buf, 10, 2, DVALUE2(n), "length of dashes");
@@ -2329,8 +2449,9 @@ SetDashes(buf)
}
void
-SetClipRectangles(buf)
- unsigned char *buf;
+SetClipRectangles (
+ FD fd,
+ const unsigned char *buf)
{
short n;
@@ -2339,10 +2460,10 @@ SetClipRectangles(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, RECTORDER, "ordering");
- printfield(buf, 2, 2, DVALUE2(3 + 2*n), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + 2*n));
n = (IShort(&buf[2]) - 3) / 2;
PrintField(buf, 4, 4, GCONTEXT, "gc");
PrintField(buf, 8, 2, INT16, "clip-x-origin");
@@ -2351,33 +2472,37 @@ SetClipRectangles(buf)
}
void
-FreeGC(buf)
- unsigned char *buf;
+FreeGC (
+ FD fd,
+ const unsigned char *buf)
{
+ DeleteValueRec (ILong (&buf[4]));
+
/* Request FreeGC is opcode 60 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* FreeGC */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, GCONTEXT, "gc");
}
void
-ClearArea(buf)
- unsigned char *buf;
+ClearArea (
+ FD fd,
+ const unsigned char *buf)
{
/* Request ClearArea is opcode 61 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ClearArea */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, BOOL, "exposures");
- printfield(buf, 2, 2, CONST2(4), "request length");
+ printreqlen(buf, fd, CONST2(4));
PrintField(buf, 4, 4, WINDOW, "window");
PrintField(buf, 8, 2, INT16, "x");
PrintField(buf, 10, 2, INT16, "y");
@@ -2386,20 +2511,27 @@ ClearArea(buf)
}
void
-CopyArea(buf)
- unsigned char *buf;
+CopyArea (
+ FD fd,
+ const unsigned char *buf)
{
/* Request CopyArea is opcode 62 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* CopyArea */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(7), "request length");
+ printreqlen(buf, fd, CONST2(7));
PrintField(buf, 4, 4, DRAWABLE, "src-drawable");
PrintField(buf, 8, 4, DRAWABLE, "dst-drawable");
PrintField(buf, 12, 4, GCONTEXT, "gc");
+ if (Verbose > 2)
+ PrintValueRec (ILong (&buf[12]),
+ GC_function|
+ GC_plane_mask|
+ GC_graphics_exposures,
+ GC_BITMASK);
PrintField(buf, 16, 2, INT16, "src-x");
PrintField(buf, 18, 2, INT16, "src-y");
PrintField(buf, 20, 2, INT16, "dst-x");
@@ -2409,20 +2541,29 @@ CopyArea(buf)
}
void
-CopyPlane(buf)
- unsigned char *buf;
+CopyPlane (
+ FD fd,
+ const unsigned char *buf)
{
/* Request CopyPlane is opcode 63 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* CopyPlane */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(8), "request length");
+ printreqlen(buf, fd, CONST2(8));
PrintField(buf, 4, 4, DRAWABLE, "src-drawable");
PrintField(buf, 8, 4, DRAWABLE, "dst-drawable");
PrintField(buf, 12, 4, GCONTEXT, "gc");
+ if (Verbose > 2)
+ PrintValueRec (ILong (&buf[12]),
+ GC_function|
+ GC_plane_mask|
+ GC_foreground|
+ GC_background|
+ GC_graphics_exposures,
+ GC_BITMASK);
PrintField(buf, 16, 2, INT16, "src-x");
PrintField(buf, 18, 2, INT16, "src-y");
PrintField(buf, 20, 2, INT16, "dst-x");
@@ -2433,8 +2574,9 @@ CopyPlane(buf)
}
void
-PolyPoint(buf)
- unsigned char *buf;
+PolyPoint (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request PolyPoint is opcode 64 */
@@ -2442,19 +2584,26 @@ PolyPoint(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, COORMODE, "coordinate-mode");
- printfield(buf, 2, 2, DVALUE2(3 + n), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + n));
n = (IShort(&buf[2]) - 3);
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 4, GCONTEXT, "gc");
- PrintList(&buf[12], (long)n, POINT, "points");
+ if (Verbose > 2)
+ PrintValueRec (ILong (&buf[8]),
+ GC_function|
+ GC_plane_mask|
+ GC_foreground,
+ GC_BITMASK);
+ (void)PrintList(&buf[12], (long)n, POINT, "points");
}
void
-PolyLine(buf)
- unsigned char *buf;
+PolyLine (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request PolyLine is opcode 65 */
@@ -2462,19 +2611,34 @@ PolyLine(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, COORMODE, "coordinate-mode");
- printfield(buf, 2, 2, DVALUE2(3 + n), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + n));
n = (IShort(&buf[2]) - 3);
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 4, GCONTEXT, "gc");
- PrintList(&buf[12], (long)n, POINT, "points");
-}
-
-void
-PolySegment(buf)
- unsigned char *buf;
+ if (Verbose > 2)
+ PrintValueRec (ILong (&buf[8]),
+ GC_function|
+ GC_plane_mask|
+ GC_line_width|
+ GC_line_style|
+ GC_cap_style|
+ GC_join_style|
+ GC_fill_style|
+ GC_foreground|
+ GC_background|
+ GC_tile|
+ GC_stipple,
+ GC_BITMASK);
+ (void)PrintList(&buf[12], (long)n, POINT, "points");
+}
+
+void
+PolySegment (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request PolySegment is opcode 66 */
@@ -2482,18 +2646,32 @@ PolySegment(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(3 + 2*n), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + 2*n));
n = (IShort(&buf[2]) - 3) / 2;
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 4, GCONTEXT, "gc");
- PrintList(&buf[12], (long)n, SEGMENT, "segments");
-}
-
-void
-PolyRectangle(buf)
- unsigned char *buf;
+ if (Verbose > 2)
+ PrintValueRec (ILong (&buf[8]),
+ GC_function|
+ GC_plane_mask|
+ GC_line_width|
+ GC_line_style|
+ GC_cap_style|
+ GC_fill_style|
+ GC_foreground|
+ GC_background|
+ GC_tile|
+ GC_stipple,
+ GC_BITMASK);
+ (void)PrintList(&buf[12], (long)n, SEGMENT, "segments");
+}
+
+void
+PolyRectangle (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request PolyRectangle is opcode 67 */
@@ -2501,18 +2679,33 @@ PolyRectangle(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(3 + 2*n), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + 2*n));
n = (IShort(&buf[2]) - 3) / 2;
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 4, GCONTEXT, "gc");
- PrintList(&buf[12], (long)n, RECTANGLE, "rectangles");
-}
-
-void
-PolyArc(buf)
- unsigned char *buf;
+ if (Verbose > 2)
+ PrintValueRec (ILong (&buf[8]),
+ GC_function|
+ GC_plane_mask|
+ GC_line_width|
+ GC_line_style|
+ GC_cap_style|
+ GC_join_style|
+ GC_fill_style|
+ GC_foreground|
+ GC_background|
+ GC_tile|
+ GC_stipple,
+ GC_BITMASK);
+ (void)PrintList(&buf[12], (long)n, RECTANGLE, "rectangles");
+}
+
+void
+PolyArc (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request PolyArc is opcode 68 */
@@ -2520,18 +2713,33 @@ PolyArc(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(3 + 3*n), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + 3*n));
n = (IShort(&buf[2]) - 3) / 3;
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 4, GCONTEXT, "gc");
- PrintList(&buf[12], (long)n, ARC, "arcs");
-}
-
-void
-FillPoly(buf)
- unsigned char *buf;
+ if (Verbose > 2)
+ PrintValueRec (ILong (&buf[8]),
+ GC_function|
+ GC_plane_mask|
+ GC_line_width|
+ GC_line_style|
+ GC_cap_style|
+ GC_join_style|
+ GC_fill_style|
+ GC_foreground|
+ GC_background|
+ GC_tile|
+ GC_stipple,
+ GC_BITMASK);
+ (void)PrintList(&buf[12], (long)n, ARC, "arcs");
+}
+
+void
+FillPoly (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request FillPoly is opcode 69 */
@@ -2539,20 +2747,32 @@ FillPoly(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(4 + n), "request length");
+ printreqlen(buf, fd, DVALUE2(4 + n));
n = (IShort(&buf[2]) - 4);
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 4, GCONTEXT, "gc");
+ if (Verbose > 2)
+ PrintValueRec (ILong(buf+8),
+ GC_function|
+ GC_plane_mask|
+ GC_fill_style|
+ GC_fill_rule|
+ GC_foreground|
+ GC_background|
+ GC_tile|
+ GC_stipple,
+ GC_BITMASK);
PrintField(buf, 12, 1, POLYSHAPE, "shape");
PrintField(buf, 13, 1, COORMODE, "coordinate-mode");
PrintList(&buf[16], (long)n, POINT, "points");
}
void
-PolyFillRectangle(buf)
- unsigned char *buf;
+PolyFillRectangle (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request PolyFillRectangle is opcode 70 */
@@ -2560,18 +2780,29 @@ PolyFillRectangle(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(3 + 2*n), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + 2*n));
n = (IShort(&buf[2]) - 3) / 2;
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 4, GCONTEXT, "gc");
- PrintList(&buf[12], (long)n, RECTANGLE, "rectangles");
+ if (Verbose > 2)
+ PrintValueRec (ILong(buf+8),
+ GC_function|
+ GC_plane_mask|
+ GC_fill_style|
+ GC_foreground|
+ GC_background|
+ GC_tile|
+ GC_stipple,
+ GC_BITMASK);
+ (void)PrintList(&buf[12], (long)n, RECTANGLE, "rectangles");
}
void
-PolyFillArc(buf)
- unsigned char *buf;
+PolyFillArc (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request PolyFillArc is opcode 71 */
@@ -2579,29 +2810,41 @@ PolyFillArc(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(3 + 3*n), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + 3*n));
n = (IShort(&buf[2]) - 3) / 3;
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 4, GCONTEXT, "gc");
- PrintList(&buf[12], (long)n, ARC, "arcs");
-}
-
-void
-PutImage(buf)
- unsigned char *buf;
-{
- short n;
+ if (Verbose > 2)
+ PrintValueRec (ILong (&buf[8]),
+ GC_function|
+ GC_plane_mask|
+ GC_arc_mode|
+ GC_fill_style|
+ GC_foreground|
+ GC_background|
+ GC_tile|
+ GC_stipple,
+ GC_BITMASK);
+ (void)PrintList(&buf[12], (long)n, ARC, "arcs");
+}
+
+void
+PutImage (
+ FD fd,
+ const unsigned char *buf)
+{
+ int n;
/* Request PutImage is opcode 72 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* PutImage */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, IMAGEMODE, "format");
- printfield(buf, 2, 2, DVALUE2(6 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(6 + (n + p) / 4));
/* the size of the Image is overestimated by the following computation of n,
because we ignore that padding of the request to a multiple of 4 bytes.
@@ -2618,28 +2861,37 @@ PutImage(buf)
n = (IShort(&buf[2]) - 6) * 4;
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 4, GCONTEXT, "gc");
+ if (Verbose > 2)
+ PrintValueRec (ILong (&buf[8]),
+ GC_function|
+ GC_plane_mask|
+ GC_foreground|
+ GC_background,
+ GC_BITMASK);
PrintField(buf, 12, 2, CARD16, "width");
PrintField(buf, 14, 2, CARD16, "height");
PrintField(buf, 16, 2, INT16, "dst-x");
PrintField(buf, 18, 2, INT16, "dst-y");
PrintField(buf, 20, 1, CARD8, "left-pad");
PrintField(buf, 21, 1, CARD8, "depth");
- PrintBytes(&buf[24], (long)n, "data");
+ if (Verbose > 3)
+ PrintBytes(&buf[24], (long)n, "data");
}
void
-GetImage(buf)
- unsigned char *buf;
+GetImage (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetImage is opcode 73 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetImage */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, IMAGEMODE, "format");
- printfield(buf, 2, 2, CONST2(5), "request length");
+ printreqlen(buf, fd, CONST2(5));
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 2, INT16, "x");
PrintField(buf, 10, 2, INT16, "y");
@@ -2649,8 +2901,8 @@ GetImage(buf)
}
void
-GetImageReply(buf)
- unsigned char *buf;
+GetImageReply (
+ const unsigned char *buf)
{
long n;
@@ -2666,56 +2918,82 @@ GetImageReply(buf)
length from the length of the reply */
n = ILong(&buf[4]) * 4;
PrintField(buf, 8, 4, VISUALID, "visual");
- PrintBytes(&buf[32], n, "data");
+ if (Verbose > 3)
+ PrintBytes(&buf[32], n, "data");
}
void
-PolyText8(buf)
- unsigned char *buf;
+PolyText8 (
+ FD fd,
+ const unsigned char *buf)
{
- short n;
+ int n;
/* Request PolyText8 is opcode 74 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* PolyText8 */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(4 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(4 + (n + p) / 4));
n = (IShort(&buf[2]) - 4) * 4;
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 4, GCONTEXT, "gc");
+ if (Verbose > 2)
+ PrintValueRec (ILong (&buf[8]),
+ GC_function|
+ GC_plane_mask|
+ GC_fill_style|
+ GC_font|
+ GC_foreground|
+ GC_background|
+ GC_tile|
+ GC_stipple,
+ GC_BITMASK);
PrintField(buf, 12, 2, INT16, "x");
PrintField(buf, 14, 2, INT16, "y");
PrintTextList8(&buf[16], n, "items");
}
void
-PolyText16(buf)
- unsigned char *buf;
+PolyText16 (
+ FD fd,
+ const unsigned char *buf)
{
- short n;
+ int n;
/* Request PolyText16 is opcode 75 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* PolyText16 */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(4 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(4 + (n + p) / 4));
n = (IShort(&buf[2]) - 4) * 4;
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 4, GCONTEXT, "gc");
+ if (Verbose > 2)
+ PrintValueRec (ILong (&buf[8]),
+ GC_function|
+ GC_plane_mask|
+ GC_fill_style|
+ GC_font|
+ GC_foreground|
+ GC_background|
+ GC_tile|
+ GC_stipple,
+ GC_BITMASK);
PrintField(buf, 12, 2, INT16, "x");
PrintField(buf, 14, 2, INT16, "y");
PrintTextList16(&buf[16], n, "items");
}
void
-ImageText8(buf)
- unsigned char *buf;
+ImageText8 (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request ImageText8 is opcode 76 */
@@ -2723,21 +3001,29 @@ ImageText8(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
printfield(buf, 1, 1, DVALUE1(n), "length of string");
n = IByte(&buf[1]);
- printfield(buf, 2, 2, DVALUE2(4 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(4 + (n + p) / 4));
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 4, GCONTEXT, "gc");
+ if (Verbose > 2)
+ PrintValueRec (ILong (&buf[8]),
+ GC_plane_mask|
+ GC_font|
+ GC_foreground|
+ GC_background,
+ GC_BITMASK);
PrintField(buf, 12, 2, INT16, "x");
PrintField(buf, 14, 2, INT16, "y");
- PrintString8(&buf[16], n, "string");
+ PrintTString8(&buf[16], (long)n, "string");
}
void
-ImageText16(buf)
- unsigned char *buf;
+ImageText16 (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request ImageText16 is opcode 77 */
@@ -2745,115 +3031,128 @@ ImageText16(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
printfield(buf, 1, 1, DVALUE1(n), "length of string");
n = IByte(&buf[1]);
- printfield(buf, 2, 2, DVALUE2(4 + (2*n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(4 + (2*n + p) / 4));
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 4, GCONTEXT, "gc");
+ if (Verbose > 2)
+ PrintValueRec (ILong (&buf[8]),
+ GC_plane_mask|
+ GC_font|
+ GC_foreground|
+ GC_background,
+ GC_BITMASK);
PrintField(buf, 12, 2, INT16, "x");
PrintField(buf, 14, 2, INT16, "y");
- PrintString16(&buf[16], n, "string");
+ PrintTString16(&buf[16], (long)n, "string");
}
void
-CreateColormap(buf)
- unsigned char *buf;
+CreateColormap (
+ FD fd,
+ const unsigned char *buf)
{
/* Request CreateColormap is opcode 78 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* CreateColormap */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, ALLORNONE, "alloc");
- printfield(buf, 2, 2, CONST2(4), "request length");
+ printreqlen(buf, fd, CONST2(4));
PrintField(buf, 4, 4, COLORMAP, "color-map-id");
PrintField(buf, 8, 4, WINDOW, "window");
PrintField(buf, 12, 4, VISUALID, "visual");
}
void
-FreeColormap(buf)
- unsigned char *buf;
+FreeColormap (
+ FD fd,
+ const unsigned char *buf)
{
/* Request FreeColormap is opcode 79 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* FreeColormap */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, COLORMAP, "cmap");
}
void
-CopyColormapAndFree(buf)
- unsigned char *buf;
+CopyColormapAndFree (
+ FD fd,
+ const unsigned char *buf)
{
/* Request CopyColormapAndFree is opcode 80 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* CopyColormapAndFree */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(3), "request length");
+ printreqlen(buf, fd, CONST2(3));
PrintField(buf, 4, 4, COLORMAP, "color-map-id");
PrintField(buf, 8, 4, COLORMAP, "src-cmap");
}
void
-InstallColormap(buf)
- unsigned char *buf;
+InstallColormap (
+ FD fd,
+ const unsigned char *buf)
{
/* Request InstallColormap is opcode 81 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* InstallColormap */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, COLORMAP, "cmap");
}
void
-UninstallColormap(buf)
- unsigned char *buf;
+UninstallColormap (
+ FD fd,
+ const unsigned char *buf)
{
/* Request UninstallColormap is opcode 82 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* UninstallColormap */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, COLORMAP, "cmap");
}
void
-ListInstalledColormaps(buf)
- unsigned char *buf;
+ListInstalledColormaps (
+ FD fd,
+ const unsigned char *buf)
{
/* Request ListInstalledColormaps is opcode 83 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ListInstalledColormaps */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, WINDOW, "window");
}
void
-ListInstalledColormapsReply(buf)
- unsigned char *buf;
+ListInstalledColormapsReply (
+ const unsigned char *buf)
{
short n;
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* ListInstalledColormaps */ ;
@@ -2867,17 +3166,18 @@ ListInstalledColormapsReply(buf)
}
void
-AllocColor(buf)
- unsigned char *buf;
+AllocColor (
+ FD fd,
+ const unsigned char *buf)
{
/* Request AllocColor is opcode 84 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* AllocColor */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(4), "request length");
+ printreqlen(buf, fd, CONST2(4));
PrintField(buf, 4, 4, COLORMAP, "cmap");
PrintField(buf, 8, 2, CARD16, "red");
PrintField(buf, 10, 2, CARD16, "green");
@@ -2885,8 +3185,8 @@ AllocColor(buf)
}
void
-AllocColorReply(buf)
- unsigned char *buf;
+AllocColorReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* AllocColor */ ;
if (Verbose < 1)
@@ -2900,8 +3200,9 @@ AllocColorReply(buf)
}
void
-AllocNamedColor(buf)
- unsigned char *buf;
+AllocNamedColor (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request AllocNamedColor is opcode 85 */
@@ -2909,9 +3210,9 @@ AllocNamedColor(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(3 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + (n + p) / 4));
PrintField(buf, 4, 4, COLORMAP, "cmap");
printfield(buf, 8, 2, DVALUE2(n), "length of name");
n = IShort(&buf[8]);
@@ -2919,8 +3220,8 @@ AllocNamedColor(buf)
}
void
-AllocNamedColorReply(buf)
- unsigned char *buf;
+AllocNamedColorReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* AllocNamedColor */ ;
if (Verbose < 1)
@@ -2937,26 +3238,27 @@ AllocNamedColorReply(buf)
}
void
-AllocColorCells(buf)
- unsigned char *buf;
+AllocColorCells (
+ FD fd,
+ const unsigned char *buf)
{
/* Request AllocColorCells is opcode 86 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* AllocColorCells */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, BOOL, "contiguous");
- printfield(buf, 2, 2, CONST2(3), "request length");
+ printreqlen(buf, fd, CONST2(3));
PrintField(buf, 4, 4, COLORMAP, "cmap");
PrintField(buf, 8, 2, CARD16, "colors");
PrintField(buf, 10, 2, CARD16, "planes");
}
void
-AllocColorCellsReply(buf)
- unsigned char *buf;
+AllocColorCellsReply (
+ const unsigned char *buf)
{
short n;
short m;
@@ -2975,18 +3277,19 @@ AllocColorCellsReply(buf)
}
void
-AllocColorPlanes(buf)
- unsigned char *buf;
+AllocColorPlanes (
+ FD fd,
+ const unsigned char *buf)
{
/* Request AllocColorPlanes is opcode 87 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* AllocColorPlanes */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, BOOL, "contiguous");
- printfield(buf, 2, 2, CONST2(4), "request length");
+ printreqlen(buf, fd, CONST2(4));
PrintField(buf, 4, 4, COLORMAP, "cmap");
PrintField(buf, 8, 2, CARD16, "colors");
PrintField(buf, 10, 2, CARD16, "reds");
@@ -2995,8 +3298,8 @@ AllocColorPlanes(buf)
}
void
-AllocColorPlanesReply(buf)
- unsigned char *buf;
+AllocColorPlanesReply (
+ const unsigned char *buf)
{
short n;
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* AllocColorPlanes */ ;
@@ -3013,8 +3316,9 @@ AllocColorPlanesReply(buf)
}
void
-FreeColors(buf)
- unsigned char *buf;
+FreeColors (
+ FD fd,
+ const unsigned char *buf)
{
short n;
@@ -3023,9 +3327,9 @@ FreeColors(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(3 + n), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + n));
n = IShort(&buf[2]) - 3;
PrintField(buf, 4, 4, COLORMAP, "cmap");
PrintField(buf, 8, 4, CARD32, "plane-mask");
@@ -3033,8 +3337,9 @@ FreeColors(buf)
}
void
-StoreColors(buf)
- unsigned char *buf;
+StoreColors (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request StoreColors is opcode 89 */
@@ -3042,17 +3347,18 @@ StoreColors(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(2 + 3*n), "request length");
+ printreqlen(buf, fd, DVALUE2(2 + 3*n));
n = (IShort(&buf[2]) - 2) / 3;
PrintField(buf, 4, 4, COLORMAP, "cmap");
PrintList(&buf[8], (long)n, COLORITEM, "items");
}
void
-StoreNamedColor(buf)
- unsigned char *buf;
+StoreNamedColor (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request StoreNamedColor is opcode 90 */
@@ -3060,10 +3366,10 @@ StoreNamedColor(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, COLORMASK, "which colors?");
- printfield(buf, 2, 2, DVALUE2(4 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(4 + (n + p) / 4));
PrintField(buf, 4, 4, COLORMAP, "cmap");
PrintField(buf, 8, 4, CARD32, "pixel");
printfield(buf, 12, 2, DVALUE2(n), "length of name");
@@ -3072,8 +3378,9 @@ StoreNamedColor(buf)
}
void
-QueryColors(buf)
- unsigned char *buf;
+QueryColors (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request QueryColors is opcode 91 */
@@ -3081,17 +3388,17 @@ QueryColors(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(2 + n), "request length");
+ printreqlen(buf, fd, DVALUE2(2 + n));
n = IShort(&buf[2]) - 2;
PrintField(buf, 4, 4, COLORMAP, "cmap");
PrintList(&buf[8], (long)n, CARD32, "pixels");
}
void
-QueryColorsReply(buf)
- unsigned char *buf;
+QueryColorsReply (
+ const unsigned char *buf)
{
short n;
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* QueryColors */ ;
@@ -3105,8 +3412,9 @@ QueryColorsReply(buf)
}
void
-LookupColor(buf)
- unsigned char *buf;
+LookupColor (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request LookupColor is opcode 92 */
@@ -3114,9 +3422,9 @@ LookupColor(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(3 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + (n + p) / 4));
PrintField(buf, 4, 4, COLORMAP, "cmap");
printfield(buf, 8, 2, DVALUE2(n), "length of name");
n = IShort(&buf[8]);
@@ -3124,8 +3432,8 @@ LookupColor(buf)
}
void
-LookupColorReply(buf)
- unsigned char *buf;
+LookupColorReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* LookupColor */ ;
if (Verbose < 1)
@@ -3141,17 +3449,18 @@ LookupColorReply(buf)
}
void
-CreateCursor(buf)
- unsigned char *buf;
+CreateCursor (
+ FD fd,
+ const unsigned char *buf)
{
/* Request CreateCursor is opcode 93 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* CreateCursor */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(8), "request length");
+ printreqlen(buf, fd, CONST2(8));
PrintField(buf, 4, 4, CURSOR, "cursor-id");
PrintField(buf, 8, 4, PIXMAP, "source");
PrintField(buf, 12, 4, PIXMAP, "mask");
@@ -3166,17 +3475,18 @@ CreateCursor(buf)
}
void
-CreateGlyphCursor(buf)
- unsigned char *buf;
+CreateGlyphCursor (
+ FD fd,
+ const unsigned char *buf)
{
/* Request CreateGlyphCursor is opcode 94 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* CreateGlyphCursor */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(8), "request length");
+ printreqlen(buf, fd, CONST2(8));
PrintField(buf, 4, 4, CURSOR, "cursor-id");
PrintField(buf, 8, 4, FONT, "source-font");
PrintField(buf, 12, 4, FONT, "mask-font");
@@ -3191,32 +3501,34 @@ CreateGlyphCursor(buf)
}
void
-FreeCursor(buf)
- unsigned char *buf;
+FreeCursor (
+ FD fd,
+ const unsigned char *buf)
{
/* Request FreeCursor is opcode 95 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* FreeCursor */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, CURSOR, "cursor");
}
void
-RecolorCursor(buf)
- unsigned char *buf;
+RecolorCursor (
+ FD fd,
+ const unsigned char *buf)
{
/* Request RecolorCursor is opcode 96 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* RecolorCursor */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(5), "request length");
+ printreqlen(buf, fd, CONST2(5));
PrintField(buf, 4, 4, CURSOR, "cursor");
PrintField(buf, 8, 2, CARD16, "fore-red");
PrintField(buf, 10, 2, CARD16, "fore-green");
@@ -3227,26 +3539,27 @@ RecolorCursor(buf)
}
void
-QueryBestSize(buf)
- unsigned char *buf;
+QueryBestSize (
+ FD fd,
+ const unsigned char *buf)
{
/* Request QueryBestSize is opcode 97 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* QueryBestSize */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, OBJECTCLASS, "class");
- printfield(buf, 2, 2, CONST2(3), "request length");
+ printreqlen(buf, fd, CONST2(3));
PrintField(buf, 4, 4, DRAWABLE, "drawable");
PrintField(buf, 8, 2, CARD16, "width");
PrintField(buf, 10, 2, CARD16, "height");
}
void
-QueryBestSizeReply(buf)
- unsigned char *buf;
+QueryBestSizeReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* QueryBestSize */ ;
if (Verbose < 1)
@@ -3258,8 +3571,9 @@ QueryBestSizeReply(buf)
}
void
-QueryExtension(buf)
- unsigned char *buf;
+QueryExtension (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request QueryExtension is opcode 98 */
@@ -3267,17 +3581,17 @@ QueryExtension(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(2 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(2 + (n + p) / 4));
printfield(buf, 4, 2, DVALUE2(n), "length of name");
n = IShort(&buf[4]);
- PrintString8(&buf[8], n, "name");
+ PrintString8(&buf[8], (long)n, "name");
}
void
-QueryExtensionReply(buf)
- unsigned char *buf;
+QueryExtensionReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* QueryExtension */ ;
if (Verbose < 1)
@@ -3291,22 +3605,23 @@ QueryExtensionReply(buf)
}
void
-ListExtensions(buf)
- unsigned char *buf;
+ListExtensions (
+ FD fd,
+ const unsigned char *buf)
{
/* Request ListExtensions is opcode 99 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ListExtensions */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-ListExtensionsReply(buf)
- unsigned char *buf;
+ListExtensionsReply (
+ const unsigned char *buf)
{
short n;
@@ -3321,8 +3636,9 @@ ListExtensionsReply(buf)
}
void
-ChangeKeyboardMapping(buf)
- unsigned char *buf;
+ChangeKeyboardMapping (
+ FD fd,
+ const unsigned char *buf)
{
short n;
short m;
@@ -3331,11 +3647,11 @@ ChangeKeyboardMapping(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, DVALUE1(n), "keycode-count");
n = IByte(&buf[1]);
- printfield(buf, 2, 2, DVALUE2(2 + nm), "request length");
+ printreqlen(buf, fd, DVALUE2(2 + nm));
PrintField(buf, 4, 1, KEYCODE, "first-keycode");
PrintField(buf, 5, 1, DVALUE1(m), "keysyms-per-keycode");
m = IByte(&buf[5]);
@@ -3343,24 +3659,25 @@ ChangeKeyboardMapping(buf)
}
void
-GetKeyboardMapping(buf)
- unsigned char *buf;
+GetKeyboardMapping (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetKeyboardMapping is opcode 101 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetKeyboardMapping */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 1, KEYCODE, "first-keycode");
PrintField(buf, 5, 1, CARD8, "count");
}
void
-GetKeyboardMappingReply(buf)
- unsigned char *buf;
+GetKeyboardMappingReply (
+ const unsigned char *buf)
{
long n;
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GetKeyboardMapping */ ;
@@ -3374,38 +3691,40 @@ GetKeyboardMappingReply(buf)
}
void
-ChangeKeyboardControl(buf)
- unsigned char *buf;
+ChangeKeyboardControl (
+ FD fd,
+ const unsigned char *buf)
{
/* Request ChangeKeyboardControl is opcode 102 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ChangeKeyboardControl */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(2 + n), "request length");
+ printreqlen(buf, fd, DVALUE2(2 + n));
PrintField(buf, 4, 4, KEYBOARD_BITMASK, "value-mask");
PrintValues(&buf[4], 4, KEYBOARD_BITMASK, &buf[8], "value-list");
}
void
-GetKeyboardControl(buf)
- unsigned char *buf;
+GetKeyboardControl (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetKeyboardControl is opcode 103 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetKeyboardControl */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-GetKeyboardControlReply(buf)
- unsigned char *buf;
+GetKeyboardControlReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GetKeyboardControl */ ;
if (Verbose < 1)
@@ -3422,32 +3741,34 @@ GetKeyboardControlReply(buf)
}
void
-Bell(buf)
- unsigned char *buf;
+Bell (
+ FD fd,
+ const unsigned char *buf)
{
/* Request Bell is opcode 104 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* Bell */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, INT8, "percent");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-ChangePointerControl(buf)
- unsigned char *buf;
+ChangePointerControl (
+ FD fd,
+ const unsigned char *buf)
{
/* Request ChangePointerControl is opcode 105 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ChangePointerControl */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(3), "request length");
+ printreqlen(buf, fd, CONST2(3));
PrintField(buf, 4, 2, INT16, "acceleration-numerator");
PrintField(buf, 6, 2, INT16, "acceleration-denominator");
PrintField(buf, 8, 2, INT16, "threshold");
@@ -3456,22 +3777,23 @@ ChangePointerControl(buf)
}
void
-GetPointerControl(buf)
- unsigned char *buf;
+GetPointerControl (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetPointerControl is opcode 106 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetPointerControl */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-GetPointerControlReply(buf)
- unsigned char *buf;
+GetPointerControlReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GetPointerControl */ ;
if (Verbose < 1)
@@ -3484,17 +3806,18 @@ GetPointerControlReply(buf)
}
void
-SetScreenSaver(buf)
- unsigned char *buf;
+SetScreenSaver (
+ FD fd,
+ const unsigned char *buf)
{
/* Request SetScreenSaver is opcode 107 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* SetScreenSaver */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(3), "request length");
+ printreqlen(buf, fd, CONST2(3));
PrintField(buf, 4, 2, INT16, "timeout");
PrintField(buf, 6, 2, INT16, "interval");
PrintField(buf, 8, 1, NO_YES, "prefer-blanking");
@@ -3502,22 +3825,23 @@ SetScreenSaver(buf)
}
void
-GetScreenSaver(buf)
- unsigned char *buf;
+GetScreenSaver (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetScreenSaver is opcode 108 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetScreenSaver */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-GetScreenSaverReply(buf)
- unsigned char *buf;
+GetScreenSaverReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GetScreenSaver */ ;
if (Verbose < 1)
@@ -3531,8 +3855,9 @@ GetScreenSaverReply(buf)
}
void
-ChangeHosts(buf)
- unsigned char *buf;
+ChangeHosts (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request ChangeHosts is opcode 109 */
@@ -3540,10 +3865,10 @@ ChangeHosts(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, INS_DEL, "mode");
- printfield(buf, 2, 2, DVALUE2(2 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(2 + (n + p) / 4));
n = IShort(&buf[6]);
#if 0
PrintField(buf, 4, 1, HOSTFAMILY, "family");
@@ -3555,22 +3880,23 @@ ChangeHosts(buf)
}
void
-ListHosts(buf)
- unsigned char *buf;
+ListHosts (
+ FD fd,
+ const unsigned char *buf)
{
/* Request ListHosts is opcode 110 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ListHosts */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-ListHostsReply(buf)
- unsigned char *buf;
+ListHostsReply (
+ const unsigned char *buf)
{
short n;
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* ListHosts */ ;
@@ -3585,53 +3911,57 @@ ListHostsReply(buf)
}
void
-SetAccessControl(buf)
- unsigned char *buf;
+SetAccessControl (
+ FD fd,
+ const unsigned char *buf)
{
/* Request SetAccessControl is opcode 111 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* SetAccessControl */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, DIS_EN, "mode");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-SetCloseDownMode(buf)
- unsigned char *buf;
+SetCloseDownMode (
+ FD fd,
+ const unsigned char *buf)
{
/* Request SetCloseDownMode is opcode 112 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* SetCloseDownMode */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, CLOSEMODE, "mode");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-KillClient(buf)
- unsigned char *buf;
+KillClient (
+ FD fd,
+ const unsigned char *buf)
{
/* Request KillClient is opcode 113 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* KillClient */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(2), "request length");
+ printreqlen(buf, fd, CONST2(2));
PrintField(buf, 4, 4, RESOURCEID, "resource");
}
void
-RotateProperties(buf)
- unsigned char *buf;
+RotateProperties (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request RotateProperties is opcode 114 */
@@ -3639,9 +3969,9 @@ RotateProperties(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, DVALUE2(3 + n), "request length");
+ printreqlen(buf, fd, DVALUE2(3 + n));
PrintField(buf, 4, 4, WINDOW, "window");
printfield(buf, 8, 2, DVALUE2(n), "number of properties");
n = IShort(&buf[8]);
@@ -3650,23 +3980,25 @@ RotateProperties(buf)
}
void
-ForceScreenSaver(buf)
- unsigned char *buf;
+ForceScreenSaver (
+ FD fd,
+ const unsigned char *buf)
{
/* Request ForceScreenSaver is opcode 115 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* ForceScreenSaver */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, SAVEMODE, "mode");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-SetPointerMapping(buf)
- unsigned char *buf;
+SetPointerMapping (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request SetPointerMapping is opcode 116 */
@@ -3674,17 +4006,17 @@ SetPointerMapping(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
printfield(buf, 1, 1, DVALUE1(n), "length of map");
n = IByte(&buf[1]);
- printfield(buf, 2, 2, DVALUE2(1 + (n + p) / 4), "request length");
+ printreqlen(buf, fd, DVALUE2(1 + (n + p) / 4));
PrintBytes(&buf[4], (long)n,"map");
}
void
-SetPointerMappingReply(buf)
- unsigned char *buf;
+SetPointerMappingReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* SetPointerMapping */ ;
if (Verbose < 1)
@@ -3695,22 +4027,23 @@ SetPointerMappingReply(buf)
}
void
-GetPointerMapping(buf)
- unsigned char *buf;
+GetPointerMapping (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetPointerMapping is opcode 117 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetPointerMapping */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-GetPointerMappingReply(buf)
- unsigned char *buf;
+GetPointerMappingReply (
+ const unsigned char *buf)
{
short n;
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GetPointerMapping */ ;
@@ -3724,8 +4057,9 @@ GetPointerMappingReply(buf)
}
void
-SetModifierMapping(buf)
- unsigned char *buf;
+SetModifierMapping (
+ FD fd,
+ const unsigned char *buf)
{
short n;
/* Request SetModifierMapping is opcode 118 */
@@ -3733,11 +4067,11 @@ SetModifierMapping(buf)
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
PrintField(buf, 1, 1, DVALUE1(n), "keycodes-per-modifier");
n = IByte(&buf[1]);
- printfield(buf, 2, 2, DVALUE2(1 + 2*n), "request length");
+ printreqlen(buf, fd, DVALUE2(1 + 2*n));
PrintBytes(&buf[4 + 0 * n], (long)n,"Shift keycodes");
PrintBytes(&buf[4 + 1 * n], (long)n,"Lock keycodes");
PrintBytes(&buf[4 + 2 * n], (long)n,"Control keycodes");
@@ -3749,8 +4083,8 @@ SetModifierMapping(buf)
}
void
-SetModifierMappingReply(buf)
- unsigned char *buf;
+SetModifierMappingReply (
+ const unsigned char *buf)
{
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* SetModifierMapping */ ;
if (Verbose < 1)
@@ -3761,22 +4095,23 @@ SetModifierMappingReply(buf)
}
void
-GetModifierMapping(buf)
- unsigned char *buf;
+GetModifierMapping (
+ FD fd,
+ const unsigned char *buf)
{
/* Request GetModifierMapping is opcode 119 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* GetModifierMapping */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
void
-GetModifierMappingReply(buf)
- unsigned char *buf;
+GetModifierMappingReply (
+ const unsigned char *buf)
{
short n;
PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GetModifierMapping */ ;
@@ -3790,15 +4125,16 @@ GetModifierMappingReply(buf)
}
void
-NoOperation(buf)
- unsigned char *buf;
+NoOperation (
+ FD fd,
+ const unsigned char *buf)
{
/* Request NoOperation is opcode 127 */
PrintField(buf, 0, 1, REQUEST, REQUESTHEADER) /* NoOperation */ ;
if (Verbose < 1)
return;
if (Verbose > 1)
- PrintField(SBf, 0, 4, INT32, "sequence number");
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
- printfield(buf, 2, 2, CONST2(1), "request length");
+ printreqlen(buf, fd, CONST2(1));
}
diff --git a/print_bigreq.c b/print_bigreq.c
new file mode 100644
index 0000000..7871826
--- /dev/null
+++ b/print_bigreq.c
@@ -0,0 +1,51 @@
+/*
+ * $XFree86$
+ *
+ * Copyright <20> 2001 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "scope.h"
+#include "x11.h"
+#include "bigreqscope.h"
+
+void
+BigreqEnable (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* BigreqRequest */ ;
+ PrintField (buf, 1, 1, BIGREQREQUEST, BIGREQREQUESTHEADER) /* BigreqSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+BigreqEnableReply (FD fd, const unsigned char *buf)
+{
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* BigreqRequest reply */ ;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4(0), "reply length");
+ PrintField(buf, 8, 4, CARD32, "max-request-size");
+}
diff --git a/print_lbx.c b/print_lbx.c
new file mode 100644
index 0000000..2ec880c
--- /dev/null
+++ b/print_lbx.c
@@ -0,0 +1,210 @@
+/*
+ * $NCDId$
+ *
+ * Copyright 1992 Network Computing Devices
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of NCD. not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. NCD. makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * NCD. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL NCD.
+ * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Keith Packard, Network Computing Devices
+ */
+
+#include "scope.h"
+#include "x11.h"
+#include "lbxscope.h"
+
+static unsigned long sequences[256];
+static unsigned char starting_server[256];
+static unsigned char starting_client[256];
+static int client_client, server_client;
+
+void
+LbxQueryVersion (
+ FD fd,
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* LbxRequest */ ;
+ PrintField (buf, 1, 1, LBXREQUEST, LBXREQUESTHEADER) /* LbxSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+LbxQueryVersionReply (
+ FD fd,
+ const unsigned char *buf)
+{
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* LbxRequest reply */ ;
+ PrintField(RBf, 1, 1, LBXREPLY, LBXREPLYHEADER) /* LbxQueryVersion reply */;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4(0), "reply length");
+ PrintField(buf, 8, 2, CARD16, "major-version");
+ PrintField(buf, 10, 2, CARD16, "minor-version");
+}
+
+void
+LbxStartProxy (
+ FD fd,
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* LbxRequest */ ;
+ PrintField (buf, 1, 1, LBXREQUEST, LBXREQUESTHEADER) /* LbxSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+LbxStopProxy (
+ FD fd,
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* LbxRequest */ ;
+ PrintField (buf, 1, 1, LBXREQUEST, LBXREQUESTHEADER) /* LbxSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+LbxNewClient (
+ FD fd,
+ const unsigned char *buf)
+{
+ unsigned long c;
+
+ c = ILong(&buf[4]);
+ starting_client[c] = 1;
+ starting_server[c] = 1;
+ sequences[c] = 0;
+
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* LbxRequest */ ;
+ PrintField (buf, 1, 1, LBXREQUEST, LBXREQUESTHEADER) /* LbxSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField(buf, 4, 4, CARD32, "new-client-id");
+}
+
+void
+LbxCloseClient (
+ FD fd,
+ const unsigned char *buf)
+{
+}
+
+void
+LbxSwitch (
+ FD fd,
+ const unsigned char *buf)
+{
+ unsigned long c;
+ c = ILong(&buf[4]);
+ CS[fd].SequenceNumber--;
+ sequences[client_client] = CS[fd].SequenceNumber;
+ if (starting_client[c])
+ {
+ CS[fd].ByteProcessing = StartSetUpMessage;
+ CS[fd].NumberofBytesNeeded = 12;
+ starting_client[c] = 0;
+ }
+ CS[fd].SequenceNumber = sequences[c];
+ client_client = c;
+
+
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* LbxRequest */ ;
+ PrintField (buf, 1, 1, LBXREQUEST, LBXREQUESTHEADER) /* LbxSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField(buf, 4, 4, CARD32, "client number");
+}
+
+void
+LbxModifySequence (
+ FD fd,
+ const unsigned char *buf)
+{
+ int mod;
+
+ mod = ILong(&buf[4]);
+ CS[fd].SequenceNumber += mod;
+
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* LbxRequest */ ;
+ PrintField (buf, 1, 1, LBXREQUEST, LBXREQUESTHEADER) /* LbxModifySequence */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ printfield(buf, 4, 4, INT32, "adjustment");
+}
+
+void
+LbxSwitchEvent (
+ FD fd,
+ const unsigned char *buf)
+{
+ unsigned long c;
+
+ c = ILong(&buf[4]);
+ if (starting_server[c])
+ {
+ CS[fd].ByteProcessing = StartSetUpReply;
+ CS[fd].NumberofBytesNeeded = 8;
+ starting_server[c] = 0;
+ }
+
+ PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* LbxEvent */ ;
+ PrintField(buf, 1, 1, LBXEVENT, LBXEVENTHEADER) /* LbxSwitchEvent */ ;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 4, 4, CARD32, "client");
+}
+
+void
+LbxCloseEvent (
+ FD fd,
+ const unsigned char *buf)
+{
+ PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* LbxEvent */ ;
+ PrintField(buf, 1, 1, LBXEVENT, LBXEVENTHEADER) /* LbxSwitchEvent */ ;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 4, 4, CARD32, "client");
+}
diff --git a/print_randr.c b/print_randr.c
new file mode 100644
index 0000000..f987ebc
--- /dev/null
+++ b/print_randr.c
@@ -0,0 +1,168 @@
+/*
+ * $XFree86$
+ *
+ * Copyright <20> 2001 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "scope.h"
+#include "x11.h"
+#include "randrscope.h"
+
+void
+RandrQueryVersion (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RandrRequest */ ;
+ PrintField (buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER) /* RandrSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RandrQueryVersionReply (FD fd, const unsigned char *buf)
+{
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* RandrRequest reply */ ;
+ PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER) /* RandrQueryVersion reply */;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4(0), "reply length");
+ PrintField(buf, 8, 2, CARD16, "major-version");
+ PrintField(buf, 10, 2, CARD16, "minor-version");
+}
+
+void
+RandrGetScreenInfo (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RandrRequest */ ;
+ PrintField (buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER) /* RandrSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField(buf, 4, 4, WINDOW, "window");
+}
+
+void
+RandrGetScreenInfoReply (FD fd, const unsigned char *buf)
+{
+ unsigned short nsize;
+ unsigned short nvg;
+ unsigned short ngvg;
+
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* RandrRequest reply */ ;
+ if (Verbose < 1)
+ return;
+ PrintField(buf, 1, 1, CARD8, "set-of-rotations");
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4(0), "reply length");
+ PrintField(buf, 8, 4, WINDOW, "root");
+ PrintField(buf,12, 4, TIMESTAMP, "timestamp");
+ PrintField(buf,16, 4, TIMESTAMP, "config-timestamp");
+ PrintField(buf,20, 2, CARD16, "num-visual-groups");
+ nvg = IShort (&buf[20]);
+ PrintField(buf,22, 2, CARD16, "num-groups-of-visual-groups");
+ ngvg = IShort (&buf[22]);
+ PrintField(buf,24, 2, CARD16, "num-sizes");
+ nsize = IShort (&buf[24]);
+ PrintField(buf,26, 2, CARD16, "size-id");
+ PrintField(buf,28, 2, CARD16, "visual-group-id");
+ PrintField(buf,30, 2, CARD16, "rotation");
+}
+
+void
+RandrSetScreenConfig (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RandrRequest */ ;
+ PrintField (buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER) /* RandrSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField(buf, 4, 4, DRAWABLE, "drawable");
+ PrintField(buf, 8, 4, TIMESTAMP, "timestamp");
+ PrintField(buf,12, 4, TIMESTAMP, "config-timestamp");
+ PrintField(buf,16, 2, CARD16, "size-id");
+ PrintField(buf,18, 2, CARD16, "rotation");
+ PrintField(buf,20, 2, CARD16, "visual-group-id");
+}
+
+void
+RandrSetScreenConfigReply (FD fd, const unsigned char *buf)
+{
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* RandrRequest reply */ ;
+ PrintField(buf, 1, 1, BOOL, "success") /* RandrQueryVersion reply */;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4(0), "reply length");
+ PrintField(buf, 8, 4, TIMESTAMP, "new-timestamp");
+ PrintField(buf,12, 4, TIMESTAMP, "new-config-timestamp");
+ PrintField(buf,16, 4, WINDOW, "root");
+}
+
+void
+RandrScreenChangeSelectInput (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RandrRequest */ ;
+ PrintField (buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER) /* RandrSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField(buf, 4, 4, WINDOW, "window");
+ PrintField(buf, 8, 1, BOOL, "enable");
+}
+
+void
+RandrScreenSizes (const unsigned char *buf)
+{
+ PrintField(buf, 0, 2, CARD16, "width-in-pixels");
+ PrintField(buf, 2, 2, CARD16, "height-in-pixels");
+ PrintField(buf, 4, 2, CARD16, "width-in-millimeters");
+ PrintField(buf, 6, 2, CARD16, "height-in-millimeters");
+ PrintField(buf, 8, 2, CARD16, "visual-group");
+}
+
+void
+RandrScreenChangeNotifyEvent (const unsigned char *buf)
+{
+ PrintField(buf, 0, 1, EVENT, EVENTHEADER) /* RRScreenChangeNotify */ ;
+ if (Verbose < 1)
+ return;
+ PrintField(buf, 1, 1, BOOL, "resident");
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 4, 4, TIMESTAMP, "timestamp");
+ PrintField(buf, 8, 4, TIMESTAMP, "config-timestamp");
+ PrintField(buf,12, 4, WINDOW, "root");
+ PrintField(buf,16, 2, CARD16, "size id");
+ PrintField(buf,18, 2, CARD16, "rotation");
+ RandrScreenSizes (buf + 20);
+}
diff --git a/print_render.c b/print_render.c
new file mode 100644
index 0000000..212fc27
--- /dev/null
+++ b/print_render.c
@@ -0,0 +1,631 @@
+/*
+ * $XFree86$
+ *
+ * Copyright <20> 2000 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "scope.h"
+#include "x11.h"
+#include "renderscope.h"
+
+void
+RenderQueryVersion (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RenderQueryVersionReply (FD fd, const unsigned char *buf)
+{
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* RenderRequest reply */ ;
+ PrintField(RBf, 1, 1, RENDERREPLY, RENDERREPLYHEADER) /* RenderQueryVersion reply */;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4(0), "reply length");
+ PrintField(buf, 8, 2, CARD16, "major-version");
+ PrintField(buf, 10, 2, CARD16, "minor-version");
+}
+
+void
+RenderQueryPictFormats (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RenderQueryPictFormatsReply (FD fd, const unsigned char *buf)
+{
+ long n;
+ long f;
+ long s;
+ long d;
+ long v;
+
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* RenderRequest reply */ ;
+ PrintField(RBf, 1, 1, RENDERREPLY, RENDERREPLYHEADER) /* RenderQueryVersion reply */;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4(0), "reply length");
+ n = ILong (&buf[4]);
+ f = ILong (&buf[8]);
+ s = ILong (&buf[12]);
+ d = ILong (&buf[16]);
+ v = ILong (&buf[20]);
+ PrintList (&buf[32], (long) f, PICTFORMINFO, "pict-formats");
+}
+
+void
+RenderQueryPictIndexValues (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RenderQueryPictIndexValuesReply (FD fd, const unsigned char *buf)
+{
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* RenderRequest reply */ ;
+ PrintField(RBf, 1, 1, RENDERREPLY, RENDERREPLYHEADER) /* RenderQueryVersion reply */;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4(0), "reply length");
+}
+
+void
+RenderQueryDithers (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RenderQueryDithersReply (FD fd, const unsigned char *buf)
+{
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* RenderRequest reply */ ;
+ PrintField(RBf, 1, 1, RENDERREPLY, RENDERREPLYHEADER) /* RenderQueryVersion reply */;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4(0), "reply length");
+}
+
+void
+RenderCreatePicture (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, DVALUE2(5+n));
+ PrintField(buf, 4, 4, PICTURE, "picture");
+ PrintField(buf, 8, 4, DRAWABLE, "drawable");
+ PrintField(buf, 12, 4, PICTFORMAT, "format");
+ PrintField(buf, 16, 4, PICTURE_BITMASK, "value-mask");
+ PrintValues(&buf[16], 4, PICTURE_BITMASK, &buf[20], "value-list");
+}
+
+void
+RenderChangePicture (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, DVALUE2(3+n));
+ PrintField(buf, 4, 4, PICTURE, "picture");
+ PrintField(buf, 8, 4, PICTURE_BITMASK, "value-mask");
+ PrintValues(&buf[8], 4, PICTURE_BITMASK, &buf[12], "value-list");
+}
+
+void
+RenderSetPictureClipRectangles (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RenderFreePicture (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RenderComposite (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RenderScale (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RenderTrapezoids (FD fd, const unsigned char *buf)
+{
+ int n;
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField (buf, 4, 1, PICTOP, "op");
+ PrintField(buf, 8, 4, PICTURE, "source");
+ PrintField(buf, 12, 4, PICTURE, "dest");
+ PrintField(buf, 16, 4, PICTFORMAT, "mask format");
+ PrintField(buf, 20, 2, CARD16, "source x");
+ PrintField(buf, 22, 2, CARD16, "source y");
+ n = (CS[fd].requestLen - 6) / 10;
+ PrintList(&buf[24], (long)n, TRAPEZOID, "trapezoids");
+}
+
+void
+RenderTriangles (FD fd, const unsigned char *buf)
+{
+ long n;
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField (buf, 4, 1, PICTOP, "op");
+ PrintField(buf, 8, 4, PICTURE, "source");
+ PrintField(buf, 12, 4, PICTURE, "dest");
+ PrintField(buf, 16, 4, PICTFORMAT, "mask format");
+ PrintField(buf, 20, 2, CARD16, "source x");
+ PrintField(buf, 22, 2, CARD16, "source y");
+ n = (CS[fd].requestLen - 6) / 6;
+ PrintList(&buf[24], (long)n, TRIANGLE, "triangles");
+}
+
+void
+RenderTriStrip (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RenderTriFan (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RenderColorTrapezoids (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RenderColorTriangles (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RenderTransform (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RenderCreateGlyphSet (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField(buf, 4, 4, GLYPHSET, "glyphset");
+ PrintField(buf, 8, 4, PICTFORMAT, "format");
+}
+
+void
+RenderReferenceGlyphSet (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+RenderFreeGlyphSet (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField(buf, 4, 4, GLYPHSET, "glyphset");
+}
+
+static void
+PrintGlyphs(const unsigned char *buf, int n, char *name)
+{
+ const unsigned char *gids;
+ const unsigned char *glyphs;
+ int i;
+
+ fprintf(stdout, "%s%20s:\n", Leader, name);
+ gids = buf;
+ glyphs = gids + 4 * n;
+ for (i = 0; i < n; i++)
+ {
+ PrintField(gids, 0, 4, CARD32, "glyphid");
+ PrintField(glyphs, 0, 2, CARD16, "width");
+ PrintField(glyphs, 2, 2, CARD16, "height");
+ PrintField(glyphs, 4, 2, INT16, "x");
+ PrintField(glyphs, 6, 2, INT16, "y");
+ PrintField(glyphs, 8, 2, INT16, "xOff");
+ PrintField(glyphs, 10, 2, INT16, "yOff");
+ glyphs += 12;
+ }
+}
+
+void
+RenderAddGlyphs (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField(buf, 4, 4, GLYPHSET, "glyphset");
+ PrintField(buf, 8, 4, CARD32, "nglyphs");
+ PrintGlyphs(&buf[12], ILong(&buf[8]), "glyphs");
+}
+
+void
+RenderAddGlyphsFromPicture (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+
+}
+
+void
+RenderFreeGlyphs (FD fd, const unsigned char *buf)
+{
+ unsigned short n;
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField(buf, 4, 4, GLYPHSET, "glyphset");
+ n = (IShort(&buf[2]) - 2);
+ (void)PrintList(&buf[8], (long)n, CARD32, "glyphs");
+}
+
+static void
+PrintGlyphList(const unsigned char *buf, int length, char *name, int size)
+{
+ short n;
+
+ fprintf(stdout, "%s%20s:\n", Leader, name);
+ while (length >= 8)
+ {
+ n = IByte(&buf[0]);
+ if (n != 255)
+ {
+ printfield(buf, 0, 1, CARD8, "length");
+ PrintField(buf, 4, 2, INT16, "delta x");
+ PrintField(buf, 6, 2, INT16, "delta y");
+ switch (size) {
+ case 1:
+ PrintTString8(&buf[8], (long) n, "glyph item 8 string"); break;
+ case 2:
+ PrintTString16(&buf[8], (long) n, "glyph item 16 string"); break;
+ case 4:
+ break;
+ }
+ n = ((n * size + 8) + 3) & ~3;
+ buf += n;
+ length -= n;
+ }
+ else
+ {
+ PrintField(buf, 8, 4, GLYPHSET, "glyphset");
+ buf += 12;
+ length -= 12;
+ }
+ }
+}
+
+void
+RenderCompositeGlyphs8 (FD fd, const unsigned char *buf)
+{
+ int n;
+
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ n = (CS[fd].requestLen - 7) * 4;
+ PrintField(buf, 4, 1, PICTOP, "op");
+ PrintField(buf, 8, 4, PICTURE, "source");
+ PrintField(buf, 12, 4, PICTURE, "dest");
+ PrintField(buf, 16, 4, PICTFORMAT, "mask format");
+ PrintField(buf, 20, 4, GLYPHSET, "glyphset");
+ PrintField(buf, 24, 2, INT16, "x-src");
+ PrintField(buf, 26, 2, INT16, "y-src");
+ PrintGlyphList(&buf[28], n, "items", 1);
+}
+
+void
+RenderCompositeGlyphs16 (FD fd, const unsigned char *buf)
+{
+ int n;
+
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ n = (CS[fd].requestLen - 7) * 4;
+
+ PrintField(buf, 4, 1, PICTOP, "op");
+ PrintField(buf, 8, 4, PICTURE, "source");
+ PrintField(buf, 12, 4, PICTURE, "dest");
+ PrintField(buf, 16, 4, PICTFORMAT, "mask format");
+ PrintField(buf, 20, 4, GLYPHSET, "glyphset");
+ PrintField(buf, 24, 2, INT16, "x-src");
+ PrintField(buf, 26, 2, INT16, "y-src");
+ PrintGlyphList(&buf[28], n, "items", 2);
+}
+
+void
+RenderCompositeGlyphs32 (FD fd, const unsigned char *buf)
+{
+ int n;
+
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ n = (CS[fd].requestLen - 7) * 4;
+ PrintField(buf, 4, 1, PICTOP, "op");
+ PrintField(buf, 8, 4, PICTURE, "source");
+ PrintField(buf, 12, 4, PICTURE, "dest");
+ PrintField(buf, 16, 4, PICTFORMAT, "mask format");
+ PrintField(buf, 20, 4, GLYPHSET, "glyphset");
+ PrintField(buf, 24, 2, INT16, "x-src");
+ PrintField(buf, 26, 2, INT16, "y-src");
+ PrintGlyphList(&buf[28], n, "items", 4);
+}
+
+void
+RenderFillRectangles (FD fd, const unsigned char *buf)
+{
+ int n;
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* RenderRequest */ ;
+ PrintField (buf, 1, 1, RENDERREQUEST, RENDERREQUESTHEADER) /* RenderSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ n = (CS[fd].requestLen - 5) / 2;
+ PrintField(buf, 4, 1, PICTOP, "op");
+ PrintField(buf, 8, 4, PICTURE, "dest");
+ PrintField(buf, 12, 8, RENDERCOLOR, "color");
+ (void)PrintList(&buf[20], (long)n, RECTANGLE, "rectangles");
+}
+
+void
+RenderPictFormatError (FD fd, const unsigned char *buf)
+{
+ PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Request */ ;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 4, 4, PICTFORMAT, "format");
+ PrintField(buf, 8, 2, CARD16, "minor opcode");
+ PrintField(buf, 10, 1, CARD8, "major opcode");
+}
+
+void
+RenderPictureError (FD fd, const unsigned char *buf)
+{
+ PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Request */ ;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 4, 4, PICTURE, "picture");
+ PrintField(buf, 8, 2, CARD16, "minor opcode");
+ PrintField(buf, 10, 1, CARD8, "major opcode");
+}
+
+void
+RenderPictOpError (FD fd, const unsigned char *buf)
+{
+ PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Request */ ;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 4, 4, PICTOP, "pictop");
+ PrintField(buf, 8, 2, CARD16, "minor opcode");
+ PrintField(buf, 10, 1, CARD8, "major opcode");
+}
+
+void
+RenderGlyphSetError (FD fd, const unsigned char *buf)
+{
+ PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Request */ ;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 4, 4, GLYPHSET, "glyphset");
+ PrintField(buf, 8, 2, CARD16, "minor opcode");
+ PrintField(buf, 10, 1, CARD8, "major opcode");
+}
+
+void
+RenderGlyphError (FD fd, const unsigned char *buf)
+{
+ PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Request */ ;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 4, 4, CARD32, "glyph");
+ PrintField(buf, 8, 2, CARD16, "minor opcode");
+ PrintField(buf, 10, 1, CARD8, "major opcode");
+}
diff --git a/print_shm.c b/print_shm.c
new file mode 100644
index 0000000..02a30d9
--- /dev/null
+++ b/print_shm.c
@@ -0,0 +1,174 @@
+/*
+ * $XFree86$
+ *
+ * Copyright <20> 2001 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "scope.h"
+#include "x11.h"
+#include "shmscope.h"
+
+void
+MitshmQueryVersion (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* MitshmRequest */ ;
+ PrintField (buf, 1, 1, MITSHMREQUEST, MITSHMREQUESTHEADER) /* MitshmSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+MitshmQueryVersionReply (FD fd, const unsigned char *buf)
+{
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* MitshmRequest reply */ ;
+ if (Verbose < 1)
+ return;
+ PrintField(RBf, 1, 1, BOOL, "shared-pixmaps") /* shared Pixmaps */;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4(0), "reply length");
+ PrintField(buf, 8, 2, CARD16, "major-version");
+ PrintField(buf, 10, 2, CARD16, "minor-version");
+ PrintField(buf, 12, 2, CARD16, "uid");
+ PrintField(buf, 14, 2, CARD16, "gid");
+ PrintField(buf, 16, 1, CARD8, "pxiamp-fromat");
+}
+
+void
+MitshmAttach (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* MitshmRequest */ ;
+ PrintField (buf, 1, 1, MITSHMREQUEST, MITSHMREQUESTHEADER) /* MitshmSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField(buf, 4, 4, CARD32, "shmseg");
+ PrintField(buf, 8, 4, CARD32, "shmid");
+ PrintField(buf, 12, 1, BOOL, "read-only");
+}
+
+void
+MitshmDetach (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* MitshmRequest */ ;
+ PrintField (buf, 1, 1, MITSHMREQUEST, MITSHMREQUESTHEADER) /* MitshmSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField (buf, 4, 4, CARD32, "shmseg");
+}
+
+void
+MitshmPutImage (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* MitshmRequest */ ;
+ PrintField (buf, 1, 1, MITSHMREQUEST, MITSHMREQUESTHEADER) /* MitshmSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField (buf, 4, 4, DRAWABLE, "drawable");
+ PrintField (buf, 8, 4, GCONTEXT, "gc");
+ PrintField (buf, 12, 2, CARD16, "total-width");
+ PrintField (buf, 14, 2, CARD16, "total-width");
+ PrintField (buf, 16, 2, CARD16, "src-x");
+ PrintField (buf, 18, 2, CARD16, "src-y");
+ PrintField (buf, 20, 2, CARD16, "src-width");
+ PrintField (buf, 22, 2, CARD16, "src-height");
+ PrintField (buf, 24, 2, INT16, "dst-x");
+ PrintField (buf, 26, 2, INT16, "dst-y");
+ PrintField (buf, 28, 1, CARD8, "depth");
+ PrintField (buf, 29, 1, CARD8, "format");
+ PrintField (buf, 30, 1, BOOL, "send-event");
+ PrintField (buf, 31, 1, CARD8, "bpad");
+ PrintField (buf, 32, 4, CARD32, "shmseg");
+ PrintField (buf, 36, 4, CARD32, "offset");
+}
+
+void
+MitshmGetImage (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* MitshmRequest */ ;
+ PrintField (buf, 1, 1, MITSHMREQUEST, MITSHMREQUESTHEADER) /* MitshmSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, DVALUE2(5+n));
+ PrintField (buf, 4, 4, DRAWABLE, "drawable");
+ PrintField (buf, 8, 2, INT16, "x");
+ PrintField (buf, 10, 2, INT16, "y");
+ PrintField (buf, 12, 2, CARD16, "width");
+ PrintField (buf, 14, 2, CARD16, "height");
+ PrintField (buf, 16, 4, CARD32, "planemask");
+ PrintField (buf, 20, 1, CARD8, "format");
+ PrintField (buf, 24, 4, CARD32, "shmseg");
+ PrintField (buf, 28, 4, CARD32, "shmseg");
+}
+
+void
+MitshmGetImageReply (FD fd, const unsigned char *buf)
+{
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* MitshmRequest reply */ ;
+ if (Verbose < 1)
+ return;
+ PrintField(RBf, 1, 1, CARD8, "depth") /* shared Pixmaps */;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4(0), "reply length");
+ PrintField(buf, 8, 4, VISUALID, "visual");
+}
+
+void
+MitshmCreatePixmap (FD fd, const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* MitshmRequest */ ;
+ PrintField (buf, 1, 1, MITSHMREQUEST, MITSHMREQUESTHEADER) /* MitshmSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, DVALUE2(3+n));
+ PrintField(buf, 4, 4, PIXMAP, "pid");
+ PrintField(buf, 8, 4, DRAWABLE, "drawable");
+ PrintField(buf, 12, 2, CARD16, "width");
+ PrintField(buf, 14, 2, CARD16, "height");
+ PrintField(buf, 16, 1, CARD8, "depth");
+ PrintField(buf, 20, 4, CARD32, "shmseg");
+ PrintField(buf, 24, 4, CARD32, "offset");
+}
+
+void
+MitshmShmSegError (FD fd, const unsigned char *buf)
+{
+}
diff --git a/print_wcp.c b/print_wcp.c
new file mode 100644
index 0000000..b9bbbc3
--- /dev/null
+++ b/print_wcp.c
@@ -0,0 +1,464 @@
+/*
+ * $NCDOr: print_wcp.c,v 1.1 1996/07/18 23:26:38 keithp Exp keithp $
+ *
+ * Copyright 1996 Network Computing Devices
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of NCD. not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. NCD. makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * NCD. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL NCD.
+ * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Keith Packard, Network Computing Devices
+ */
+
+#include "scope.h"
+#include "x11.h"
+#include "wcpscope.h"
+
+void
+WcpQueryVersion (
+ FD fd,
+ register const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* WcpRequest */ ;
+ PrintField (buf, 1, 1, WCPREQUEST, WCPREQUESTHEADER) /* WcpSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+WcpQueryVersionReply (
+ FD fd,
+ const unsigned char *buf)
+{
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* WcpRequest reply */ ;
+ PrintField(RBf, 1, 1, WCPREPLY, WCPREPLYHEADER) /* WcpQueryVersion reply */;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4(0), "reply length");
+ PrintField(buf, 8, 2, CARD16, "major-version");
+ PrintField(buf, 10, 2, CARD16, "minor-version");
+}
+
+#define NextByte(dst) if (!len--) { error = "Out of data"; break; } dst = *data++;
+
+static void
+WcpAnalyzeImage1RLL (
+ const char *buf,
+ int len,
+ int width,
+ int height)
+{
+ unsigned char byte;
+ unsigned char *data = (unsigned char *) buf;
+ int x, y;
+ const char *error = NULL;
+ int bytewidth;
+ int i;
+ int w;
+
+ y = 0;
+ bytewidth = (width + 7) >> 3;
+ while (!error && height--)
+ {
+ x = 0;
+ if (Verbose > 2)
+ fprintf (stdout, "%s %9d %9d:", Leader, y, (char *) data - buf);
+ NextByte (byte);
+ if (Verbose > 2)
+ fprintf (stdout, " %2x", byte);
+ switch (byte) {
+ case 0xff:
+ for (i = 0; i < bytewidth; i++)
+ {
+ NextByte(byte);
+ }
+ break;
+ default:
+ w = width;
+ while (w)
+ {
+ NextByte(byte);
+ if (Verbose > 2)
+ fprintf (stdout, " %3d", byte);
+ if (byte > w)
+ {
+ error = "bad run";
+ break;
+ }
+ x += byte;
+ w -= byte;
+ }
+ break;
+ }
+ if (Verbose > 2)
+ fprintf (stdout, "\n");
+ y++;
+ }
+ if (error)
+ fprintf (stdout, "%s%20s: %d, %d %d\n", Leader, error,
+ x, y - 1, (char *) data - buf);
+}
+
+static void
+WcpAnalyzeImageNRLL (
+ const char *buf,
+ int len,
+ int width,
+ int height,
+ int bytes)
+{
+}
+
+#define MAX_LRU_SHORT 0xe
+#define LRU_LONG 0xf
+#define MAX_LRU_RUN (MAX_LRU_SHORT + 0xff)
+
+#define LRU_CACHE 0xf
+#define LRU_MISS 0xf
+
+typedef unsigned long PIXEL;
+
+static void
+init_cache (
+ PIXEL cache[LRU_CACHE],
+ int BPP)
+{
+ int e;
+
+ /*
+ * initialize cache values
+ */
+ for (e = 0; e < 8; e++)
+ {
+ cache[e] = e;
+ cache[LRU_CACHE-e-1] = ((1 << BPP) - 1) - e;
+ }
+}
+
+static void
+push (
+ PIXEL cache[LRU_CACHE],
+ PIXEL pixel)
+{
+ int e;
+
+ e = LRU_CACHE - 1;
+ while (--e >= 0)
+ cache[e+1] = cache[e];
+ cache[0] = pixel;
+}
+
+static PIXEL
+use (
+ PIXEL cache[LRU_CACHE],
+ int e)
+{
+ PIXEL tmp;
+
+ tmp = cache[e];
+ if (e)
+ {
+ while (--e >= 0)
+ cache[e+1] = cache[e];
+ cache[0] = tmp;
+ }
+ return tmp;
+}
+
+static void
+WcpAnalyzeImageNLRU (
+ const char *buf,
+ int len,
+ int width,
+ int height,
+ int bytes)
+{
+ unsigned char *data = (unsigned char *) buf;
+ unsigned char byte;
+ int x, y;
+ int w;
+ int i;
+ int bytewidth;
+ int cache;
+ unsigned long run;
+ PIXEL lru[LRU_CACHE];
+ PIXEL pix;
+ const char *error = NULL;
+
+ y = 0;
+ bytewidth = width * bytes;
+ while (!error && height--)
+ {
+ x = 0;
+ if (Verbose > 2)
+ fprintf (stdout, "%s %9d %9d:", Leader, y, (char *) data - buf);
+ NextByte (byte);
+ if (Verbose > 2)
+ fprintf (stdout, " %2x", byte);
+ switch (byte) {
+ case 0xff:
+ for (i = 0; i < bytewidth; i++)
+ {
+ NextByte (byte);
+ }
+ break;
+ default:
+ init_cache (lru, bytes * 8);
+ w = width;
+ while (w)
+ {
+ NextByte (byte);
+ run = byte >> 4;
+ cache = byte & 0xf;
+ if (run == LRU_LONG)
+ {
+ NextByte (byte);
+ run = (int) byte + MAX_LRU_SHORT;
+ }
+ run++;
+ if (cache == LRU_MISS)
+ {
+ pix = 0;
+ for (i = 0; i < bytes; i++)
+ {
+ pix = pix << 8;
+ NextByte (byte);
+ pix |= byte;
+ }
+ push (lru, pix);
+ }
+ else
+ {
+ pix = use (lru, cache);
+ }
+ w -= run;
+ if (w < 0)
+ {
+ error = "bad run";
+ break;
+ }
+ x += run;
+ fprintf (stdout, " %3ld:%0*x", run, bytes * 2, pix);
+ }
+ break;
+ }
+ if (Verbose > 2)
+ fprintf (stdout, "\n");
+ y++;
+ }
+ if (error)
+ fprintf (stdout, "%s%20s: %d, %d %d\n", Leader, error,
+ x, y - 1, (char *) data - buf);
+}
+
+static void
+WcpAnalyzeImage (
+ const char *buf,
+ int len,
+ int depth,
+ int encoding,
+ int width,
+ int height)
+{
+ int bytes;
+
+ bytes = depth / 8;
+ switch (depth) {
+ case 1:
+ switch (encoding) {
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ WcpAnalyzeImage1RLL (buf, len, width, height);
+ return;
+ default:
+ break;
+ }
+ break;
+ case 4:
+ switch (encoding) {
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ default:
+ break;
+ }
+ break;
+ case 8:
+ case 16:
+ case 24:
+ switch (encoding) {
+ case 1:
+ case 2:
+ case 3:
+ WcpAnalyzeImageNRLL (buf, len, width, height, bytes);
+ return;
+ case 4:
+ WcpAnalyzeImageNLRU (buf, len, width, height, bytes);
+ return;
+ default:
+ break;
+ }
+ break;
+ }
+ fprintf (stdout, "%s%20s: ", Leader, "invalid");
+ fprintf (stdout, "encoding %d depth %d\n", encoding, depth);
+}
+
+void
+WcpPutImage (
+ FD fd,
+ const unsigned char *buf)
+{
+ int n;
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* WcpRequest */ ;
+ PrintField (buf, 1, 1, WCPREQUEST, WCPREQUESTHEADER) /* WcpSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ n = (IShort(&buf[2]) - 7) * 4;
+ printreqlen(buf, fd, DVALUE2(7 + (n + p) / 4));
+ PrintField(buf, 4, 4, DRAWABLE, "drawable");
+ PrintField(buf, 8, 4, GCONTEXT, "gc");
+ if (Verbose > 2)
+ PrintValueRec (ILong(&buf[8]),
+ GC_function|
+ GC_plane_mask|
+ GC_foreground|
+ GC_background,
+ GC_BITMASK);
+ PrintField(buf, 12, 4, CARD32, "lut");
+ PrintField(buf, 16, 2, INT16, "dst-x");
+ PrintField(buf, 18, 2, INT16, "dst-y");
+ PrintField(buf, 20, 2, CARD16, "width");
+ PrintField(buf, 22, 2, CARD16, "height");
+ PrintField(buf, 24, 1, CARD8, "depth");
+ PrintField(buf, 25, 1, CARD8, "encoding");
+ PrintField(buf, 26, 1, CARD8, "left-pad");
+ WcpAnalyzeImage ((const char *) &buf[28], (long) n, buf[24], buf[25],
+ IShort(&buf[20]) + buf[26],
+ IShort(&buf[22]));
+ PrintBytes(&buf[28], (long)n, "data");
+}
+
+void
+WcpGetImage (
+ FD fd,
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* WcpRequest */ ;
+ PrintField (buf, 1, 1, WCPREQUEST, WCPREQUESTHEADER) /* WcpSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+ PrintField(buf, 4, 4, DRAWABLE, "drawable");
+ PrintField(buf, 8, 4, CARD32, "lut");
+ PrintField(buf, 12, 2, INT16, "x");
+ PrintField(buf, 14, 2, INT16, "y");
+ PrintField(buf, 16, 2, CARD16, "width");
+ PrintField(buf, 18, 2, CARD16, "height");
+ PrintField(buf, 20, 1, CARD8, "encoding");
+}
+
+void
+WcpGetImageReply (
+ FD fd,
+ const unsigned char *buf)
+{
+ long n;
+
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* WcpRequest reply */ ;
+ PrintField(RBf, 1, 1, WCPREPLY, WCPREPLYHEADER) /* WcpGetImage reply */;
+ if (Verbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4(n), "reply length");
+ PrintField(buf, 8, 4, CARD32, "visual");
+ n = ILong (&buf[4]) * 4;
+ PrintBytes (&buf[32], n, "data");
+}
+
+void
+WcpCreateColorCursor (
+ FD fd,
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* WcpRequest */ ;
+ PrintField (buf, 1, 1, WCPREQUEST, WCPREQUESTHEADER) /* WcpSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+WcpCreateLut (
+ FD fd,
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* WcpRequest */ ;
+ PrintField (buf, 1, 1, WCPREQUEST, WCPREQUESTHEADER) /* WcpSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+WcpFreeLut (
+ FD fd,
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* WcpRequest */ ;
+ PrintField (buf, 1, 1, WCPREQUEST, WCPREQUESTHEADER) /* WcpSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
+
+void
+WcpCopyArea (
+ FD fd,
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, REQUEST, REQUESTHEADER) /* WcpRequest */ ;
+ PrintField (buf, 1, 1, WCPREQUEST, WCPREQUESTHEADER) /* WcpSwitch */ ;
+ if (Verbose < 1)
+ return;
+ if (Verbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+
+ printreqlen(buf, fd, CONST2(2));
+}
diff --git a/printnas.c b/printnas.c
new file mode 100644
index 0000000..64d8dad
--- /dev/null
+++ b/printnas.c
@@ -0,0 +1,1012 @@
+/* ************************************************** *
+ * *
+ * Request, Reply, Event, Error Printing *
+ * *
+ * James Peterson, 1988 *
+ * (c) Copyright MCC, 1988 *
+ * *
+ * ************************************************** */
+
+#include "scope.h"
+#include "nas.h"
+
+
+/* ************************************************************ */
+/* */
+/* */
+/* ************************************************************ */
+
+/*
+ In printing the contents of the fields of the X11 packets, some
+ fields are of obvious value, and others are of lesser value. To
+ control the amount of output, we generate our output according
+ to the level of Verbose-ness that was selected by the user.
+
+ NasVerbose = 0 == Headers only, time and request/reply/... names.
+
+ NasVerbose = 1 == Very useful content fields.
+
+ NasVerbose = 2 == Almost everything.
+
+ NasVerbose = 3 == Every single bit and byte.
+
+*/
+
+/*
+ To aid in making the choice between level 1 and level 2, we
+ define the following define, which does not print relatively
+ unimportant fields.
+*/
+
+#define printfield(a,b,c,d,e) if (NasVerbose > 1) PrintField(a,b,c,d,e)
+
+static void PrintFailedAudioSetUpReply (const unsigned char *buf);
+static void PrintSuccessfulAudioSetUpReply (const unsigned char *buf);
+
+/* ************************************************************ */
+/* */
+/* */
+/* ************************************************************ */
+
+void
+PrintAudioSetUpMessage(
+ const unsigned char *buf)
+{
+ short n;
+ short d;
+
+ enterprocedure("PrintSetUpMessage");
+ if (NasVerbose < 1)
+ return;
+ SetIndentLevel(PRINTCLIENT);
+ PrintField(buf, 0, 1, BYTEMODE, "byte-order");
+ PrintField(buf, 2, 2, CARD16, "major-version");
+ PrintField(buf, 4, 2, CARD16, "minor-version");
+ printfield(buf, 6, 2, DVALUE2(n), "length of name");
+ n = IShort(&buf[6]);
+ printfield(buf, 8, 2, DVALUE2(d), "length of data");
+ d = IShort(&buf[8]);
+ PrintString8(&buf[12], (long)n, "authorization-protocol-name");
+ PrintString8(&buf[pad((long)(12+n))], (long)d, "authorization-protocol-data");
+}
+
+void
+PrintAudioSetUpReply(const unsigned char *buf)
+{
+ enterprocedure("PrintSetUpReply");
+ SetIndentLevel(PRINTSERVER);
+ if (IByte(&buf[0]))
+ PrintSuccessfulAudioSetUpReply(buf);
+ else
+ PrintFailedAudioSetUpReply(buf);
+}
+
+static void
+PrintFailedAudioSetUpReply(const unsigned char *buf)
+{
+ short n;
+
+ PrintField(buf, 0, 1, 0, "SetUp Failed");
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 1, 1, DVALUE1(n), "length of reason in bytes");
+ n = IByte(&buf[1]);
+ PrintField(buf, 2, 2, CARD16, "major-version");
+ PrintField(buf, 4, 2, CARD16, "minor-version");
+ printfield(buf, 6, 2, DVALUE2((n + p) / 4), "length of data");
+ PrintString8(&buf[8], (long)n, "reason");
+}
+
+static void
+PrintSuccessfulAudioSetUpReply(
+ const unsigned char *buf)
+{
+ short v;
+ short n;
+ short m;
+
+ if (NasVerbose < 1)
+ return;
+ PrintField(buf, 2, 2, CARD16, "protocol-major-version");
+ PrintField(buf, 4, 2, CARD16, "protocol-minor-version");
+ printfield(buf, 6, 2, DVALUE2(8 + 2*n + (v + p + m) / 4), "length of data");
+ PrintField(buf, 8, 4, CARD32, "release-number");
+ PrintField(buf, 12, 4, CARD32, "resource-id-base");
+ PrintField(buf, 16, 4, CARD32, "resource-id-mask");
+ PrintField(buf, 20, 2, CARD16, "min-sample-rate");
+ PrintField(buf, 22, 2, CARD16, "max-sample-rate");
+ printfield(buf, 24, 2, DVALUE2(v), "length of vendor");
+ v = IShort(&buf[24]);
+ printfield(buf, 26, 2, CARD16, "maximum-request-length");
+ printfield(buf, 28, 1, CARD8, "max-tracks");
+ m = IByte(&buf[28]);
+ printfield(buf, 29, 1, DVALUE1(n), "number of audio formats");
+ n = IByte(&buf[29]);
+ PrintField(buf, 30, 1, CARD8, "number of element-types");
+ PrintField(buf, 31, 1, CARD8, "number of wave-forms");
+ PrintField(buf, 32, 1, CARD8, "number of actions");
+ PrintField(buf, 33, 1, CARD8, "number of devices");
+ PrintField(buf, 34, 1, CARD8, "number of buckets");
+ PrintField(buf, 35, 1, CARD8, "number of radios");
+ PrintString8(&buf[36], (long)v, "vendor");
+}
+
+
+
+/* ************************************************************ */
+/* */
+/* */
+/* ************************************************************ */
+
+/* Error Printing procedures */
+
+static void
+AudioRequestError(
+ const unsigned char *buf)
+{
+ PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Request */ ;
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 8, 2, CARD16, "minor opcode");
+ PrintField(buf, 10, 1, CARD8, "major opcode");
+}
+
+static void
+AudioValueError(
+ const unsigned char *buf)
+{
+ PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Value */ ;
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 4, 4, INT32, "bad value");
+ PrintField(buf, 8, 2, CARD16, "minor opcode");
+ PrintField(buf, 10, 1, CARD8, "major opcode");
+}
+
+static void
+AudioMatchError(
+ const unsigned char *buf)
+{
+ PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Match */ ;
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 8, 2, CARD16, "minor opcode");
+ PrintField(buf, 10, 1, CARD8, "major opcode");
+}
+
+static void
+AudioAccessError(
+ const unsigned char *buf)
+{
+ PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Access */ ;
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 8, 2, CARD16, "minor opcode");
+ PrintField(buf, 10, 1, CARD8, "major opcode");
+}
+
+static void
+AudioAllocError(
+ const unsigned char *buf)
+{
+ PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Alloc */ ;
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 8, 2, CARD16, "minor opcode");
+ PrintField(buf, 10, 1, CARD8, "major opcode");
+}
+
+static void
+AudioIDChoiceError(
+ const unsigned char *buf)
+{
+ PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* IDChoice */ ;
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 4, 4, CARD32, "bad resource id");
+ PrintField(buf, 8, 2, CARD16, "minor opcode");
+ PrintField(buf, 10, 1, CARD8, "major opcode");
+}
+
+static void
+AudioLengthError(
+ const unsigned char *buf)
+{
+ PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Length */ ;
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 8, 2, CARD16, "minor opcode");
+ PrintField(buf, 10, 1, CARD8, "major opcode");
+}
+
+static void
+AudioImplementationError(
+ const unsigned char *buf)
+{
+ PrintField(buf, 1, 1, ERROR, ERRORHEADER) /* Implementation */ ;
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 8, 2, CARD16, "minor opcode");
+ PrintField(buf, 10, 1, CARD8, "major opcode");
+}
+
+/* ************************************************************ */
+/* */
+/* */
+/* ************************************************************ */
+
+/* Event Printing procedures */
+
+void
+AudioElementNotify (
+ const unsigned char *buf)
+{
+ PrintField(buf, 0, 1, NASEVENT, EVENTHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 1, 1, CARD8, "detail");
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 4, 4, TIMESTAMP, "time");
+ PrintField(buf, 8, 4, CARD32, "flow");
+ printfield(buf, 12, 2, CARD16, "element num");
+ printfield(buf, 14, 2, CARD16, "kind");
+ printfield(buf, 16, 2, CARD16, "prev state");
+ printfield(buf, 18, 2, CARD16, "cur state");
+ printfield(buf, 20, 2, CARD16, "reason");
+ printfield(buf, 24, 4, CARD32, "num bytes");
+}
+
+void
+AudioGrabNotify (
+ const unsigned char *buf)
+{
+}
+
+void
+AudioMonitorNotify (
+ const unsigned char *buf)
+{
+ PrintField(buf, 0, 1, NASEVENT, EVENTHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 1, 1, CARD8, "detail");
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ PrintField(buf, 4, 4, TIMESTAMP, "time");
+ PrintField(buf, 8, 4, CARD32, "flow");
+ printfield(buf, 12, 2, CARD16, "element num");
+ printfield(buf, 14, 1, CARD8, "format");
+ printfield(buf, 15, 1, CARD8, "num tracks");
+ printfield(buf, 16, 2, CARD16, "count");
+ printfield(buf, 18, 2, CARD16, "num fields");
+ PrintField(buf, 20, 4, CARD32, "data");
+ PrintField(buf, 24, 4, CARD32, "date1");
+ PrintField(buf, 28, 4, CARD32, "data2");
+}
+
+void
+AudioBucketNotify (
+ const unsigned char *buf)
+{
+}
+
+void
+AudioDeviceNotify (
+ const unsigned char *buf)
+{
+}
+
+/* ************************************************************ */
+/* */
+/* */
+/* ************************************************************ */
+
+/* Request and Reply Printing procedures */
+
+void
+UnknownAudioReply(
+ const unsigned char *buf)
+{
+ long n;
+
+ PrintField(RBf, 0, 1, NASREPLY, REPLYHEADER);
+ PrintField(buf, 1, 1, CARD8, "data");
+ printfield (buf, 2, 2, CARD16, "sequence number");
+ printfield (buf, 4, 4, DVALUE4(n), "reply length");
+ n = ILong (&buf[4]) + 6;
+ (void) PrintList (&buf[8], n, CARD32, "data");
+}
+
+void
+AudioListDevices (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER) /* ListDevices */;
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioListDevicesReply(
+ const unsigned char *buf)
+{
+ long n;
+ PrintField(RBf, 0, 1, REPLY, REPLYHEADER) /* GetWindowAttributes */ ;
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, CARD32, "reply length");
+ printfield(buf, 8, 4, CARD32, "num devices");
+ n = ILong(&buf[8]);
+}
+
+static long
+AuString (
+ const unsigned char *buf)
+{
+ long n;
+
+ printfield(buf, 0, 1, CARD8, "type");
+ printfield(buf, 4, 4, CARD32, "length");
+ n = ILong(&buf[8]);
+ PrintString8(&buf[8], n, "string");
+ return 8 + pad(n);
+}
+
+static void
+AuDeviceAttributes (
+ const unsigned char *buf)
+{
+ int l;
+ printfield(buf, 0, 4, CARD32, "value mask");
+ printfield(buf, 4, 4, CARD32, "changable mask");
+ printfield(buf, 8, 4, CARD32, "id");
+ printfield(buf, 12, 1, CARD8, "kind");
+ printfield(buf, 13, 1, CARD8, "use");
+ printfield(buf, 14, 1, CARD8, "format");
+ printfield(buf, 15, 1, CARD8, "num tracks");
+ printfield(buf, 16, 4, CARD32, "access");
+ l = 20 + AuString(&buf[20]);
+}
+
+void
+AudioGetDeviceAttributes (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioGetDeviceAttributesReply (
+ const unsigned char *buf)
+{
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+ AuDeviceAttributes (&buf[32]);
+}
+
+void
+AudioSetDeviceAttributes (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+ printfield(buf, 4, 4, CARD32, "device");
+ AuDeviceAttributes (&buf[8]);
+}
+
+void
+AudioCreateBucket (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioDestroyBucket (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioListBuckets (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioListBucketsReply (
+ const unsigned char *buf)
+{
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+}
+
+void
+AudioGetBucketAttributes (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioGetBucketAttributesReply (
+ const unsigned char *buf)
+{
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+}
+
+void
+AudioSetBucketAttributes (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioCreateRadio (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioDestroyRadio (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioListRadios (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioListRadiosReply (
+ const unsigned char *buf)
+{
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+}
+
+void
+AudioGetRadioAttributes (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioGetRadioAttributesReply (
+ const unsigned char *buf)
+{
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+}
+
+void
+AudioSetRadioAttributes (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioCreateFlow (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioDestroyFlow (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioGetFlowAttributes (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioGetFlowAttributesReply (
+ const unsigned char *buf)
+{
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+}
+
+void
+AudioSetFlowAttributes (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioGetElements (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioGetElementsReply (
+ const unsigned char *buf)
+{
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+}
+
+void
+AudioSetElements (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioGetElementStates (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioElementState (
+ const unsigned char *buf)
+{
+ printfield(buf, 0, 4, CARD32, "flow");
+ printfield(buf, 4, 1, CARD8, "element number");
+ printfield(buf, 5, 1, CARD8, "state");
+}
+
+void
+AudioGetElementStatesReply (
+ const unsigned char *buf)
+{
+ int n, i;
+ int o;
+
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+ n = ILong(&buf[8]);
+ o = 32;
+ for (i = 0; i < n; i++)
+ {
+ AudioElementState (buf+o);
+ o += 8;
+ }
+}
+
+void
+AudioSetElementStates (
+ const unsigned char *buf)
+{
+ int nstates, i;
+ int o;
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+ printfield(buf, 4, 4, CARD32, "number states");
+ nstates = ILong(&buf[4]);
+ o = 8;
+ for (i = 0; i < nstates; i++)
+ {
+ AudioElementState (buf+o);
+ o += 8;
+ }
+}
+
+void
+AudioGetElementParameters (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioGetElementParametersReply (
+ const unsigned char *buf)
+{
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+}
+
+void
+AudioSetElementParameters (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioWriteElement (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+ printfield(buf, 4, 4, CARD32, "flow");
+ printfield(buf, 8, 4, CARD32, "num bytes");
+ printfield(buf, 12, 1, CARD8, "state");
+}
+
+void
+AudioReadElement (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioReadElementReply (
+ const unsigned char *buf)
+{
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+}
+
+void
+AudioGrabComponent (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioUngrabComponent (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioSendEvent (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioGetAllowedUsers (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioGetAllowedUsersReply (
+ const unsigned char *buf)
+{
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+}
+
+void
+AudioSetAllowedUsers (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioListExtensions (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioListExtensionsReply (
+ const unsigned char *buf)
+{
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+}
+
+void
+AudioQueryExtension (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioQueryExtensionReply (
+ const unsigned char *buf)
+{
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+}
+
+void
+AudioGetCloseDownMode (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioGetCloseDownModeReply (
+ const unsigned char *buf)
+{
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+}
+
+void
+AudioSetCloseDownMode (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioKillClient (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioGetServerTime (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
+
+void
+AudioGetServerTimeReply (
+ const unsigned char *buf)
+{
+ PrintField (RBf, 0, 1, NASREPLY, REPLYHEADER);
+ if (NasVerbose < 1)
+ return;
+ printfield(buf, 2, 2, CARD16, "sequence number");
+ printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
+}
+
+void
+AudioNoOperation (
+ const unsigned char *buf)
+{
+ PrintField (buf, 0, 1, NASREQUEST, REQUESTHEADER);
+ if (NasVerbose < 1)
+ return;
+ if (NasVerbose > 1)
+ PrintField(SBf, 0, 4, CARD32, "sequence number");
+ printfield(buf, 2, 2, DVALUE2(8 + n), "request length");
+}
diff --git a/proto.h b/proto.h
index 397cb6b..ce30e56 100644
--- a/proto.h
+++ b/proto.h
@@ -1,266 +1,299 @@
#include "x11.h"
/* common.c */
-void enterprocedure(char *s);
-void warn(char *s);
-void panic(char *s);
-void *Malloc(long n);
-void Free(void *p);
-void SetSignalHandling(void);
-void SetUpConnectionSocket(int iport);
+extern void enterprocedure (char *s);
+extern void warn (char *s);
+extern void panic (char *s);
+extern void *Malloc (long n);
+extern void Free (void *p);
+extern void SetSignalHandling (void);
+extern void SetUpConnectionSocket (int iport, void (*connectionFunc) (int));
+
/* decode11.c */
-void InitReplyQ(void);
-void FlushReplyQ(FD fd);
-void KeepLastReplyExpected(void);
-void DecodeRequest(FD fd, unsigned char *buf, long n);
-void DecodeReply(FD fd, unsigned char *buf, long n);
-void DecodeError(FD fd, unsigned char *buf, long n);
-void DecodeEvent(FD fd, unsigned char *buf, long n);
+extern void InitReplyQ (void);
+extern void FlushReplyQ (FD fd);
+extern short CheckReplyTable (FD fd, short SequenceNumber, short *minorp);
+extern void ReplyExpected (FD fd, short Request);
+extern void ExtendedReplyExpected (FD fd, short Request, short RequestMinor);
+extern void KeepLastReplyExpected (void);
+
+extern void DecodeRequest (FD fd, const unsigned char *buf, long n);
+extern void DecodeReply (FD fd, const unsigned char *buf, long n);
+extern void DecodeError (FD fd, const unsigned char *buf, long n);
+extern void DecodeEvent (FD fd, const unsigned char *buf, long n);
+
/* print11.c */
-void PrintSetUpMessage(unsigned char *buf);
-void PrintSetUpReply(unsigned char *buf);
-void RequestError(unsigned char *buf);
-void ValueError(unsigned char *buf);
-void WindowError(unsigned char *buf);
-void PixmapError(unsigned char *buf);
-void AtomError(unsigned char *buf);
-void CursorError(unsigned char *buf);
-void FontError(unsigned char *buf);
-void MatchError(unsigned char *buf);
-void DrawableError(unsigned char *buf);
-void AccessError(unsigned char *buf);
-void AllocError(unsigned char *buf);
-void ColormapError(unsigned char *buf);
-void GContextError(unsigned char *buf);
-void IDChoiceError(unsigned char *buf);
-void NameError(unsigned char *buf);
-void LengthError(unsigned char *buf);
-void ImplementationError(unsigned char *buf);
-void KeyPressEvent(unsigned char *buf);
-void KeyReleaseEvent(unsigned char *buf);
-void ButtonPressEvent(unsigned char *buf);
-void ButtonReleaseEvent(unsigned char *buf);
-void MotionNotifyEvent(unsigned char *buf);
-void EnterNotifyEvent(unsigned char *buf);
-void LeaveNotifyEvent(unsigned char *buf);
-void FocusInEvent(unsigned char *buf);
-void FocusOutEvent(unsigned char *buf);
-void KeymapNotifyEvent(unsigned char *buf);
-void ExposeEvent(unsigned char *buf);
-void GraphicsExposureEvent(unsigned char *buf);
-void NoExposureEvent(unsigned char *buf);
-void VisibilityNotifyEvent(unsigned char *buf);
-void CreateNotifyEvent(unsigned char *buf);
-void DestroyNotifyEvent(unsigned char *buf);
-void UnmapNotifyEvent(unsigned char *buf);
-void MapNotifyEvent(unsigned char *buf);
-void MapRequestEvent(unsigned char *buf);
-void ReparentNotifyEvent(unsigned char *buf);
-void ConfigureNotifyEvent(unsigned char *buf);
-void ConfigureRequestEvent(unsigned char *buf);
-void GravityNotifyEvent(unsigned char *buf);
-void ResizeRequestEvent(unsigned char *buf);
-void CirculateNotifyEvent(unsigned char *buf);
-void CirculateRequestEvent(unsigned char *buf);
-void PropertyNotifyEvent(unsigned char *buf);
-void SelectionClearEvent(unsigned char *buf);
-void SelectionRequestEvent(unsigned char *buf);
-void SelectionNotifyEvent(unsigned char *buf);
-void ColormapNotifyEvent(unsigned char *buf);
-void ClientMessageEvent(unsigned char *buf);
-void MappingNotifyEvent(unsigned char *buf);
-void CreateWindow(unsigned char *buf);
-void ChangeWindowAttributes(unsigned char *buf);
-void GetWindowAttributes(unsigned char *buf);
-void GetWindowAttributesReply(unsigned char *buf);
-void DestroyWindow(unsigned char *buf);
-void DestroySubwindows(unsigned char *buf);
-void ChangeSaveSet(unsigned char *buf);
-void ReparentWindow(unsigned char *buf);
-void MapWindow(unsigned char *buf);
-void MapSubwindows(unsigned char *buf);
-void UnmapWindow(unsigned char *buf);
-void UnmapSubwindows(unsigned char *buf);
-void ConfigureWindow(unsigned char *buf);
-void CirculateWindow(unsigned char *buf);
-void GetGeometry(unsigned char *buf);
-void GetGeometryReply(unsigned char *buf);
-void QueryTree(unsigned char *buf);
-void QueryTreeReply(unsigned char *buf);
-void InternAtom(unsigned char *buf);
-void InternAtomReply(unsigned char *buf);
-void GetAtomName(unsigned char *buf);
-void GetAtomNameReply(unsigned char *buf);
-void ChangeProperty(unsigned char *buf);
-void DeleteProperty(unsigned char *buf);
-void GetProperty(unsigned char *buf);
-void GetPropertyReply(unsigned char *buf);
-void ListProperties(unsigned char *buf);
-void ListPropertiesReply(unsigned char *buf);
-void SetSelectionOwner(unsigned char *buf);
-void GetSelectionOwner(unsigned char *buf);
-void GetSelectionOwnerReply(unsigned char *buf);
-void ConvertSelection(unsigned char *buf);
-void SendEvent(unsigned char *buf);
-void GrabPointer(unsigned char *buf);
-void GrabPointerReply(unsigned char *buf);
-void UngrabPointer(unsigned char *buf);
-void GrabButton(unsigned char *buf);
-void UngrabButton(unsigned char *buf);
-void ChangeActivePointerGrab(unsigned char *buf);
-void GrabKeyboard(unsigned char *buf);
-void GrabKeyboardReply(unsigned char *buf);
-void UngrabKeyboard(unsigned char *buf);
-void GrabKey(unsigned char *buf);
-void UngrabKey(unsigned char *buf);
-void AllowEvents(unsigned char *buf);
-void GrabServer(unsigned char *buf);
-void UngrabServer(unsigned char *buf);
-void QueryPointer(unsigned char *buf);
-void QueryPointerReply(unsigned char *buf);
-void GetMotionEvents(unsigned char *buf);
-void GetMotionEventsReply(unsigned char *buf);
-void TranslateCoordinates(unsigned char *buf);
-void TranslateCoordinatesReply(unsigned char *buf);
-void WarpPointer(unsigned char *buf);
-void SetInputFocus(unsigned char *buf);
-void GetInputFocus(unsigned char *buf);
-void GetInputFocusReply(unsigned char *buf);
-void QueryKeymap(unsigned char *buf);
-void QueryKeymapReply(unsigned char *buf);
-void OpenFont(unsigned char *buf);
-void CloseFont(unsigned char *buf);
-void QueryFont(unsigned char *buf);
-void QueryFontReply(unsigned char *buf);
-void QueryTextExtents(unsigned char *buf);
-void QueryTextExtentsReply(unsigned char *buf);
-void ListFonts(unsigned char *buf);
-void ListFontsReply(unsigned char *buf);
-void ListFontsWithInfo(unsigned char *buf);
-void ListFontsWithInfoReply(unsigned char *buf);
-void SetFontPath(unsigned char *buf);
-void GetFontPath(unsigned char *buf);
-void GetFontPathReply(unsigned char *buf);
-void CreatePixmap(unsigned char *buf);
-void FreePixmap(unsigned char *buf);
-void CreateGC(unsigned char *buf);
-void ChangeGC(unsigned char *buf);
-void CopyGC(unsigned char *buf);
-void SetDashes(unsigned char *buf);
-void SetClipRectangles(unsigned char *buf);
-void FreeGC(unsigned char *buf);
-void ClearArea(unsigned char *buf);
-void CopyArea(unsigned char *buf);
-void CopyPlane(unsigned char *buf);
-void PolyPoint(unsigned char *buf);
-void PolyLine(unsigned char *buf);
-void PolySegment(unsigned char *buf);
-void PolyRectangle(unsigned char *buf);
-void PolyArc(unsigned char *buf);
-void FillPoly(unsigned char *buf);
-void PolyFillRectangle(unsigned char *buf);
-void PolyFillArc(unsigned char *buf);
-void PutImage(unsigned char *buf);
-void GetImage(unsigned char *buf);
-void GetImageReply(unsigned char *buf);
-void PolyText8(unsigned char *buf);
-void PolyText16(unsigned char *buf);
-void ImageText8(unsigned char *buf);
-void ImageText16(unsigned char *buf);
-void CreateColormap(unsigned char *buf);
-void FreeColormap(unsigned char *buf);
-void CopyColormapAndFree(unsigned char *buf);
-void InstallColormap(unsigned char *buf);
-void UninstallColormap(unsigned char *buf);
-void ListInstalledColormaps(unsigned char *buf);
-void ListInstalledColormapsReply(unsigned char *buf);
-void AllocColor(unsigned char *buf);
-void AllocColorReply(unsigned char *buf);
-void AllocNamedColor(unsigned char *buf);
-void AllocNamedColorReply(unsigned char *buf);
-void AllocColorCells(unsigned char *buf);
-void AllocColorCellsReply(unsigned char *buf);
-void AllocColorPlanes(unsigned char *buf);
-void AllocColorPlanesReply(unsigned char *buf);
-void FreeColors(unsigned char *buf);
-void StoreColors(unsigned char *buf);
-void StoreNamedColor(unsigned char *buf);
-void QueryColors(unsigned char *buf);
-void QueryColorsReply(unsigned char *buf);
-void LookupColor(unsigned char *buf);
-void LookupColorReply(unsigned char *buf);
-void CreateCursor(unsigned char *buf);
-void CreateGlyphCursor(unsigned char *buf);
-void FreeCursor(unsigned char *buf);
-void RecolorCursor(unsigned char *buf);
-void QueryBestSize(unsigned char *buf);
-void QueryBestSizeReply(unsigned char *buf);
-void QueryExtension(unsigned char *buf);
-void QueryExtensionReply(unsigned char *buf);
-void ListExtensions(unsigned char *buf);
-void ListExtensionsReply(unsigned char *buf);
-void ChangeKeyboardMapping(unsigned char *buf);
-void GetKeyboardMapping(unsigned char *buf);
-void GetKeyboardMappingReply(unsigned char *buf);
-void ChangeKeyboardControl(unsigned char *buf);
-void GetKeyboardControl(unsigned char *buf);
-void GetKeyboardControlReply(unsigned char *buf);
-void Bell(unsigned char *buf);
-void ChangePointerControl(unsigned char *buf);
-void GetPointerControl(unsigned char *buf);
-void GetPointerControlReply(unsigned char *buf);
-void SetScreenSaver(unsigned char *buf);
-void GetScreenSaver(unsigned char *buf);
-void GetScreenSaverReply(unsigned char *buf);
-void ChangeHosts(unsigned char *buf);
-void ListHosts(unsigned char *buf);
-void ListHostsReply(unsigned char *buf);
-void SetAccessControl(unsigned char *buf);
-void SetCloseDownMode(unsigned char *buf);
-void KillClient(unsigned char *buf);
-void RotateProperties(unsigned char *buf);
-void ForceScreenSaver(unsigned char *buf);
-void SetPointerMapping(unsigned char *buf);
-void SetPointerMappingReply(unsigned char *buf);
-void GetPointerMapping(unsigned char *buf);
-void GetPointerMappingReply(unsigned char *buf);
-void SetModifierMapping(unsigned char *buf);
-void SetModifierMappingReply(unsigned char *buf);
-void GetModifierMapping(unsigned char *buf);
-void GetModifierMappingReply(unsigned char *buf);
-void NoOperation(unsigned char *buf);
+extern void PrintSetUpMessage (const unsigned char *buf);
+extern void PrintSetUpReply (const unsigned char *buf);
+
+extern void RequestError (const unsigned char *buf);
+extern void ValueError (const unsigned char *buf);
+extern void WindowError (const unsigned char *buf);
+extern void PixmapError (const unsigned char *buf);
+extern void AtomError (const unsigned char *buf);
+extern void CursorError (const unsigned char *buf);
+extern void FontError (const unsigned char *buf);
+extern void MatchError (const unsigned char *buf);
+extern void DrawableError (const unsigned char *buf);
+extern void AccessError (const unsigned char *buf);
+extern void AllocError (const unsigned char *buf);
+extern void ColormapError (const unsigned char *buf);
+extern void GContextError (const unsigned char *buf);
+extern void IDChoiceError (const unsigned char *buf);
+extern void NameError (const unsigned char *buf);
+extern void LengthError (const unsigned char *buf);
+extern void ImplementationError (const unsigned char *buf);
+
+extern void KeyPressEvent (const unsigned char *buf);
+extern void KeyReleaseEvent (const unsigned char *buf);
+extern void ButtonPressEvent (const unsigned char *buf);
+extern void ButtonReleaseEvent (const unsigned char *buf);
+extern void MotionNotifyEvent (const unsigned char *buf);
+extern void EnterNotifyEvent (const unsigned char *buf);
+extern void LeaveNotifyEvent (const unsigned char *buf);
+extern void FocusInEvent (const unsigned char *buf);
+extern void FocusOutEvent (const unsigned char *buf);
+extern void KeymapNotifyEvent (const unsigned char *buf);
+extern void ExposeEvent (const unsigned char *buf);
+extern void GraphicsExposureEvent (const unsigned char *buf);
+extern void NoExposureEvent (const unsigned char *buf);
+extern void VisibilityNotifyEvent (const unsigned char *buf);
+extern void CreateNotifyEvent (const unsigned char *buf);
+extern void DestroyNotifyEvent (const unsigned char *buf);
+extern void UnmapNotifyEvent (const unsigned char *buf);
+extern void MapNotifyEvent (const unsigned char *buf);
+extern void MapRequestEvent (const unsigned char *buf);
+extern void ReparentNotifyEvent (const unsigned char *buf);
+extern void ConfigureNotifyEvent (const unsigned char *buf);
+extern void ConfigureRequestEvent (const unsigned char *buf);
+extern void GravityNotifyEvent (const unsigned char *buf);
+extern void ResizeRequestEvent (const unsigned char *buf);
+extern void CirculateNotifyEvent (const unsigned char *buf);
+extern void CirculateRequestEvent (const unsigned char *buf);
+extern void PropertyNotifyEvent (const unsigned char *buf);
+extern void SelectionClearEvent (const unsigned char *buf);
+extern void SelectionRequestEvent (const unsigned char *buf);
+extern void SelectionNotifyEvent (const unsigned char *buf);
+extern void ColormapNotifyEvent (const unsigned char *buf);
+extern void ClientMessageEvent (const unsigned char *buf);
+extern void MappingNotifyEvent (const unsigned char *buf);
+
+extern void ExtendedRequest (int fd, const unsigned char *buf);
+extern void UnknownReply (const unsigned char *buf);
+
+extern void CreateWindow (FD fd, const unsigned char *buf);
+extern void ChangeWindowAttributes (FD fd, const unsigned char *buf);
+extern void GetWindowAttributes (FD fd, const unsigned char *buf);
+extern void GetWindowAttributesReply (const unsigned char *buf);
+extern void DestroyWindow (FD fd, const unsigned char *buf);
+extern void DestroySubwindows (FD fd, const unsigned char *buf);
+extern void ChangeSaveSet (FD fd, const unsigned char *buf);
+extern void ReparentWindow (FD fd, const unsigned char *buf);
+extern void MapWindow (FD fd, const unsigned char *buf);
+extern void MapSubwindows (FD fd, const unsigned char *buf);
+extern void UnmapWindow (FD fd, const unsigned char *buf);
+extern void UnmapSubwindows (FD fd, const unsigned char *buf);
+extern void ConfigureWindow (FD fd, const unsigned char *buf);
+extern void CirculateWindow (FD fd, const unsigned char *buf);
+extern void GetGeometry (FD fd, const unsigned char *buf);
+extern void GetGeometryReply (const unsigned char *buf);
+extern void QueryTree (FD fd, const unsigned char *buf);
+extern void QueryTreeReply (const unsigned char *buf);
+extern void InternAtom (FD fd, const unsigned char *buf);
+extern void InternAtomReply (const unsigned char *buf);
+extern void GetAtomName (FD fd, const unsigned char *buf);
+extern void GetAtomNameReply (const unsigned char *buf);
+extern void ChangeProperty (FD fd, const unsigned char *buf);
+extern void DeleteProperty (FD fd, const unsigned char *buf);
+extern void GetProperty (FD fd, const unsigned char *buf);
+extern void GetPropertyReply (const unsigned char *buf);
+extern void ListProperties (FD fd, const unsigned char *buf);
+extern void ListPropertiesReply (const unsigned char *buf);
+extern void SetSelectionOwner (FD fd, const unsigned char *buf);
+extern void GetSelectionOwner (FD fd, const unsigned char *buf);
+extern void GetSelectionOwnerReply (const unsigned char *buf);
+extern void ConvertSelection (FD fd, const unsigned char *buf);
+extern void SendEvent (FD fd, const unsigned char *buf);
+extern void GrabPointer (FD fd, const unsigned char *buf);
+extern void GrabPointerReply (const unsigned char *buf);
+extern void UngrabPointer (FD fd, const unsigned char *buf);
+extern void GrabButton (FD fd, const unsigned char *buf);
+extern void UngrabButton (FD fd, const unsigned char *buf);
+extern void ChangeActivePointerGrab (FD fd, const unsigned char *buf);
+extern void GrabKeyboard (FD fd, const unsigned char *buf);
+extern void GrabKeyboardReply (const unsigned char *buf);
+extern void UngrabKeyboard (FD fd, const unsigned char *buf);
+extern void GrabKey (FD fd, const unsigned char *buf);
+extern void UngrabKey (FD fd, const unsigned char *buf);
+extern void AllowEvents (FD fd, const unsigned char *buf);
+extern void GrabServer (FD fd, const unsigned char *buf);
+extern void UngrabServer (FD fd, const unsigned char *buf);
+extern void QueryPointer (FD fd, const unsigned char *buf);
+extern void QueryPointerReply (const unsigned char *buf);
+extern void GetMotionEvents (FD fd, const unsigned char *buf);
+extern void GetMotionEventsReply (const unsigned char *buf);
+extern void TranslateCoordinates (FD fd, const unsigned char *buf);
+extern void TranslateCoordinatesReply (const unsigned char *buf);
+extern void WarpPointer (FD fd, const unsigned char *buf);
+extern void SetInputFocus (FD fd, const unsigned char *buf);
+extern void GetInputFocus (FD fd, const unsigned char *buf);
+extern void GetInputFocusReply (const unsigned char *buf);
+extern void QueryKeymap (FD fd, const unsigned char *buf);
+extern void QueryKeymapReply (const unsigned char *buf);
+extern void OpenFont (FD fd, const unsigned char *buf);
+extern void CloseFont (FD fd, const unsigned char *buf);
+extern void QueryFont (FD fd, const unsigned char *buf);
+extern void QueryFontReply (const unsigned char *buf);
+extern void QueryTextExtents (FD fd, const unsigned char *buf);
+extern void QueryTextExtentsReply (const unsigned char *buf);
+extern void ListFonts (FD fd, const unsigned char *buf);
+extern void ListFontsReply (const unsigned char *buf);
+extern void ListFontsWithInfo (FD fd, const unsigned char *buf);
+extern void ListFontsWithInfoReply (const unsigned char *buf);
+extern void SetFontPath (FD fd, const unsigned char *buf);
+extern void GetFontPath (FD fd, const unsigned char *buf);
+extern void GetFontPathReply (const unsigned char *buf);
+extern void CreatePixmap (FD fd, const unsigned char *buf);
+extern void FreePixmap (FD fd, const unsigned char *buf);
+extern void CreateGC (FD fd, const unsigned char *buf);
+extern void ChangeGC (FD fd, const unsigned char *buf);
+extern void CopyGC (FD fd, const unsigned char *buf);
+extern void SetDashes (FD fd, const unsigned char *buf);
+extern void SetClipRectangles (FD fd, const unsigned char *buf);
+extern void FreeGC (FD fd, const unsigned char *buf);
+extern void ClearArea (FD fd, const unsigned char *buf);
+extern void CopyArea (FD fd, const unsigned char *buf);
+extern void CopyPlane (FD fd, const unsigned char *buf);
+extern void PolyPoint (FD fd, const unsigned char *buf);
+extern void PolyLine (FD fd, const unsigned char *buf);
+extern void PolySegment (FD fd, const unsigned char *buf);
+extern void PolyRectangle (FD fd, const unsigned char *buf);
+extern void PolyArc (FD fd, const unsigned char *buf);
+extern void FillPoly (FD fd, const unsigned char *buf);
+extern void PolyFillRectangle (FD fd, const unsigned char *buf);
+extern void PolyFillArc (FD fd, const unsigned char *buf);
+extern void PutImage (FD fd, const unsigned char *buf);
+extern void GetImage (FD fd, const unsigned char *buf);
+extern void GetImageReply (const unsigned char *buf);
+extern void PolyText8 (FD fd, const unsigned char *buf);
+extern void PolyText16 (FD fd, const unsigned char *buf);
+extern void ImageText8 (FD fd, const unsigned char *buf);
+extern void ImageText16 (FD fd, const unsigned char *buf);
+extern void CreateColormap (FD fd, const unsigned char *buf);
+extern void FreeColormap (FD fd, const unsigned char *buf);
+extern void CopyColormapAndFree (FD fd, const unsigned char *buf);
+extern void InstallColormap (FD fd, const unsigned char *buf);
+extern void UninstallColormap (FD fd, const unsigned char *buf);
+extern void ListInstalledColormaps (FD fd, const unsigned char *buf);
+extern void ListInstalledColormapsReply (const unsigned char *buf);
+extern void AllocColor (FD fd, const unsigned char *buf);
+extern void AllocColorReply (const unsigned char *buf);
+extern void AllocNamedColor (FD fd, const unsigned char *buf);
+extern void AllocNamedColorReply (const unsigned char *buf);
+extern void AllocColorCells (FD fd, const unsigned char *buf);
+extern void AllocColorCellsReply (const unsigned char *buf);
+extern void AllocColorPlanes (FD fd, const unsigned char *buf);
+extern void AllocColorPlanesReply (const unsigned char *buf);
+extern void FreeColors (FD fd, const unsigned char *buf);
+extern void StoreColors (FD fd, const unsigned char *buf);
+extern void StoreNamedColor (FD fd, const unsigned char *buf);
+extern void QueryColors (FD fd, const unsigned char *buf);
+extern void QueryColorsReply (const unsigned char *buf);
+extern void LookupColor (FD fd, const unsigned char *buf);
+extern void LookupColorReply (const unsigned char *buf);
+extern void CreateCursor (FD fd, const unsigned char *buf);
+extern void CreateGlyphCursor (FD fd, const unsigned char *buf);
+extern void FreeCursor (FD fd, const unsigned char *buf);
+extern void RecolorCursor (FD fd, const unsigned char *buf);
+extern void QueryBestSize (FD fd, const unsigned char *buf);
+extern void QueryBestSizeReply (const unsigned char *buf);
+extern void QueryExtension (FD fd, const unsigned char *buf);
+extern void QueryExtensionReply (const unsigned char *buf);
+extern void ListExtensions (FD fd, const unsigned char *buf);
+extern void ListExtensionsReply (const unsigned char *buf);
+extern void ChangeKeyboardMapping (FD fd, const unsigned char *buf);
+extern void GetKeyboardMapping (FD fd, const unsigned char *buf);
+extern void GetKeyboardMappingReply (const unsigned char *buf);
+extern void ChangeKeyboardControl (FD fd, const unsigned char *buf);
+extern void GetKeyboardControl (FD fd, const unsigned char *buf);
+extern void GetKeyboardControlReply (const unsigned char *buf);
+extern void Bell (FD fd, const unsigned char *buf);
+extern void ChangePointerControl (FD fd, const unsigned char *buf);
+extern void GetPointerControl (FD fd, const unsigned char *buf);
+extern void GetPointerControlReply (const unsigned char *buf);
+extern void SetScreenSaver (FD fd, const unsigned char *buf);
+extern void GetScreenSaver (FD fd, const unsigned char *buf);
+extern void GetScreenSaverReply (const unsigned char *buf);
+extern void ChangeHosts (FD fd, const unsigned char *buf);
+extern void ListHosts (FD fd, const unsigned char *buf);
+extern void ListHostsReply (const unsigned char *buf);
+extern void SetAccessControl (FD fd, const unsigned char *buf);
+extern void SetCloseDownMode (FD fd, const unsigned char *buf);
+extern void KillClient (FD fd, const unsigned char *buf);
+extern void RotateProperties (FD fd, const unsigned char *buf);
+extern void ForceScreenSaver (FD fd, const unsigned char *buf);
+extern void SetPointerMapping (FD fd, const unsigned char *buf);
+extern void SetPointerMappingReply (const unsigned char *buf);
+extern void GetPointerMapping (FD fd, const unsigned char *buf);
+extern void GetPointerMappingReply (const unsigned char *buf);
+extern void SetModifierMapping (FD fd, const unsigned char *buf);
+extern void SetModifierMappingReply (const unsigned char *buf);
+extern void GetModifierMapping (FD fd, const unsigned char *buf);
+extern void GetModifierMappingReply (const unsigned char *buf);
+extern void NoOperation (FD fd, const unsigned char *buf);
+
/* prtype.c */
-void SetIndentLevel(int which);
-void DumpItem(char *name, FD fd, unsigned char *buf, long n);
-void PrintField(unsigned char *buf, int start, int length, int FieldType, char *name);
-long PrintList(unsigned char *buf, long number, int ListType, char *name);
-long PrintListSTR(unsigned char *buf, long number, char *name);
-int PrintBytes(unsigned char buf[], long number, char *name);
-int PrintString8(unsigned char buf[], int number, char *name);
-int PrintString16(unsigned char buf[], int number, char *name);
-void PrintValues(unsigned char *control, int clength, int ctype, unsigned char *values, char *name);
-int PrintTextList8(unsigned char *buf, int length, char *name);
-int PrintTextList16(unsigned char *buf, int length, char *name);
+extern void SetIndentLevel (short which);
+extern void DumpHexBuffer (const unsigned char *buf, long n);
+extern void DumpItem (const char *name, FD fd,
+ const unsigned char *buf, long n);
+extern void PrintField (const unsigned char *buf, short start, short length,
+ short FieldType, const char *name);
+extern int PrintBytes (const unsigned char *buf, long number,
+ const char *name);
+extern void PrintValues (const unsigned char *control, int clength, int ctype,
+ const unsigned char *values, const char *name);
+extern void PrintTextList8 (const unsigned char *buf, int length,
+ const char *name);
+extern void PrintTextList16 (const unsigned char *buf, int length,
+ const char *name);
+
/* scope.c */
-void TimerExpired(void);
-FD FDPair(FD fd);
-FD ClientHalf(FD fd);
-FD ServerHalf(FD fd);
-char *ClientName(FD fd);
-void NewConnection(FD fd);
+extern void TestBreakPoints (const unsigned char *buf, long n);
+extern void TimerExpired (void);
+extern void SetUpPair (FD client, FD server);
+extern FD FDPair (FD fd);
+extern FD ClientHalf (FD fd);
+extern FD ServerHalf (FD fd);
+extern char *ClientName (FD fd);
+extern int ClientNumber (FD fd);
+extern void NewConnection (FD fd);
+extern void FlushFD (FD fd);
+extern short GetServerport (void);
+extern void ReadCommands (void);
+
/* server.c */
-void ReportFromClient(FD fd, unsigned char *buf, long n);
-void ReportFromServer(FD fd, unsigned char *buf, long n);
-void PrintTime(void);
-long pad(long n);
-unsigned long ILong(unsigned char buf[]);
-unsigned short IShort(unsigned char buf[]);
-unsigned short IByte(unsigned char buf[]);
-short IBool(unsigned char buf[]);
-void StartClientConnection(FD fd);
-void StopClientConnection(FD fd);
-void StartServerConnection(FD fd);
-void StopServerConnection(FD fd);
-/* table11.c */
-void InitializeX11(void);
+extern FD ConnectToServer (Boolean report);
+extern void ProcessBuffer (FD fd, const unsigned char *buf, long n);
+extern void ReportFromClient (FD fd, const unsigned char *buf, long n);
+extern void ReportFromServer (FD fd, const unsigned char *buf, long n);
+extern void PrintTime (void);
+extern void SetBufLimit (FD fd);
+extern void ClearBufLimit (FD fd);
+extern void StartClientConnection (FD fd);
+extern void StopClientConnection (FD fd);
+extern void StartServerConnection (FD fd);
+extern void StopServerConnection (FD fd);
+extern long StartSetUpMessage (FD fd, const unsigned char *buf, long n);
+extern long StartSetUpReply (FD fd, const unsigned char *buf, long n);
+
+extern long GetXRequestFromName (const char *name);
+/* table11.c */
+extern void InitializeX11 (void);
+extern TYPE DefineType (short typeid, short class, const char *name,
+ int (*printproc)(const unsigned char *));
+extern void DefineEValue (TYPE type, long value, const char *name);
+extern void DefineValues (TYPE type, long value, short length,
+ short ctype, const char *name);
+extern long GetEValue (short typeid, const char *name);
diff --git a/prtype.c b/prtype.c
index 4bcfb8b..6be200d 100644
--- a/prtype.c
+++ b/prtype.c
@@ -55,8 +55,6 @@
#include "scope.h"
#include "x11.h"
-static void DumpHexBuffer(unsigned char *buf, long n);
-
/*
For each of the types we need a way to print that type.
Types are of varieties:
@@ -76,8 +74,8 @@ static void DumpHexBuffer(unsigned char *buf, long n);
/* print representation of a character for debugging */
-static char *printrep (c)
- unsigned short c;
+static char *
+printrep (unsigned short c)
{
static char pr[8];
@@ -132,12 +130,12 @@ static char *printrep (c)
*/
#define MaxIndent 10
-static char Leader[MaxIndent + 1];
+char Leader[MaxIndent + 1];
static short CurrentLevel = 0;
void
-SetIndentLevel(which)
- short which;
+SetIndentLevel (
+ short which)
{
short i;
@@ -157,13 +155,14 @@ SetIndentLevel(which)
}
static void
-ModifyIndentLevel(amount)
- short amount;
+ModifyIndentLevel (
+ short amount)
{
SetIndentLevel(CurrentLevel + amount);
}
-static short SizeofLeader ()
+static short
+SizeofLeader (void)
{
return (CurrentLevel * 8);
}
@@ -176,11 +175,11 @@ static short SizeofLeader ()
/* if we want verbose enough output, we will dump the buffer in hex */
void
-DumpItem(name, fd, buf, n)
- char *name;
- FD fd;
- unsigned char *buf;
- long n;
+DumpItem (
+ const char *name,
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
if (n == 0)
return;
@@ -197,64 +196,69 @@ DumpItem(name, fd, buf, n)
/* ************************************************************ */
int
-PrintINT8(unsigned char *buf)
+PrintINT8(const unsigned char *buf)
{
/* print a INT8 -- 8-bit signed integer */
short n = IByte (buf);
if (n > 127)
n = 256 - n;
- return fprintf(stdout, "%d", n);
+ fprintf(stdout, "%d", n);
+ return 1;
}
int
-PrintINT16(unsigned char *buf)
+PrintINT16(const unsigned char *buf)
{
/* print a INT16 -- 16-bit signed integer */
long n = IShort (buf);
if (n > 32767)
n = 65536 - n;
- return fprintf(stdout, "%d", n);
+ fprintf(stdout, "%ld", n);
+ return 2;
}
int
-PrintINT32(unsigned char *buf)
+PrintINT32(const unsigned char *buf)
{
/* print a INT32 -- 32-bit signed integer */
long n = ILong (buf);
- return fprintf(stdout, "%d", n);
+ fprintf(stdout, "%ld", n);
+ return 4;
}
/* ************************************************************ */
int
-PrintCARD8(unsigned char *buf)
+PrintCARD8(const unsigned char *buf)
{
/* print a CARD8 -- 8-bit unsigned integer */
unsigned short n = IByte (buf);
- return fprintf(stdout, "%02x", (unsigned)(n & 0xff));
+ fprintf(stdout, "%02x", (unsigned)(n & 0xff));
+ return 1;
}
int
-PrintCARD16(unsigned char *buf)
+PrintCARD16(const unsigned char *buf)
{
/* print a CARD16 -- 16-bit unsigned integer */
unsigned long n = IShort (buf);
- return fprintf(stdout, "%04x", (unsigned)(n & 0xffff));
+ fprintf(stdout, "%04x", (unsigned)(n & 0xffff));
+ return 1;
}
int
-PrintCARD32(unsigned char *buf)
+PrintCARD32(const unsigned char *buf)
{
/* print a CARD32 -- 32-bit unsigned integer */
unsigned long n = ILong (buf);
- fprintf(stdout, "%08x", n);
+ fprintf(stdout, "%08lx", n);
return(4);
}
/* ************************************************************ */
int
-PrintBYTE(unsigned char *buf)
+PrintBYTE(const unsigned char *buf)
{
/* print a BYTE -- 8-bit value */
short n = IByte (buf);
@@ -264,7 +268,7 @@ PrintBYTE(unsigned char *buf)
int
-PrintCHAR8(unsigned char *buf)
+PrintCHAR8(const unsigned char *buf)
{
/* print a CHAR8 -- 8-bit character */
unsigned short n = IByte (buf);
@@ -274,16 +278,16 @@ PrintCHAR8(unsigned char *buf)
int
-PrintSTRING16(unsigned char *buf)
+PrintSTRING16(const unsigned char *buf)
{
- /* print a CHAR16 -- 16-bit character */
- unsigned short n = IShort (buf);
+ /* print a CHAR2B -- 16-bit character which is never byte-swapped */
+ unsigned short n = IChar2B (buf);
fprintf(stdout, "%s", printrep(n));
- return(1);
+ return 2 + n;
}
int
-PrintSTR(unsigned char *buf)
+PrintSTR(const unsigned char *buf)
{
/* STR have the length (1 byte) then a string of CHAR8 */
short n;
@@ -298,158 +302,169 @@ PrintSTR(unsigned char *buf)
/* ************************************************************ */
int
-PrintWINDOW(unsigned char *buf)
+PrintWINDOW(const unsigned char *buf)
{
/* print a WINDOW -- CARD32 plus 0 = None */
long n = ILong (buf);
if (n == 0)
fprintf(stdout, "None");
else
- fprintf(stdout, "WIN %08x", n);
+ fprintf(stdout, "WIN %08lx", n);
return(4);
}
int
-PrintWINDOWD(unsigned char *buf)
+PrintWINDOWD(const unsigned char *buf)
{
/* print a WINDOWD -- CARD32 plus 0 = PointerWindow, 1 = InputFocus */
long n = ILong (buf);
if (n == 0)
- return fprintf(stdout, "PointerWindow");
+ fprintf(stdout, "PointerWindow");
else if (n == 1)
- return fprintf(stdout, "InputFocus");
+ fprintf(stdout, "InputFocus");
else
- return PrintWINDOW(buf);
+ (void)PrintWINDOW(buf);
+ return 4;
}
int
-PrintWINDOWNR(unsigned char *buf)
+PrintWINDOWNR(const unsigned char *buf)
{
/* print a WINDOWNR -- CARD32 plus 0 = None, 1 = PointerRoot */
long n = ILong (buf);
if (n == 0)
- return fprintf(stdout, "None");
+ fprintf(stdout, "None");
else if (n == 1)
- return fprintf(stdout, "PointerRoot");
+ fprintf(stdout, "PointerRoot");
else
- return PrintWINDOW(buf);
+ (void)PrintWINDOW(buf);
+ return 4;
}
int
-PrintPIXMAP(unsigned char *buf)
+PrintPIXMAP(const unsigned char *buf)
{
/* print a PIXMAP -- CARD32 plus 0 = None */
long n = ILong (buf);
if (n == 0)
- return fprintf(stdout, "None");
+ fprintf(stdout, "None");
else
- return fprintf(stdout, "PXM %08x", n);
+ fprintf(stdout, "PXM %08lx", n);
+ return 4;
}
int
-PrintPIXMAPNPR(unsigned char *buf)
+PrintPIXMAPNPR(const unsigned char *buf)
{
/* print a PIXMAPNPR -- CARD32 plus 0 = None, 1 = ParentRelative */
long n = ILong (buf);
if (n == 0)
- return fprintf(stdout, "None");
+ fprintf(stdout, "None");
else if (n == 1)
- return fprintf(stdout, "ParentRelative");
+ fprintf(stdout, "ParentRelative");
else
- return PrintPIXMAP(buf);
+ PrintPIXMAP(buf);
+ return 4;
}
int
-PrintPIXMAPC(unsigned char *buf)
+PrintPIXMAPC(const unsigned char *buf)
{
/* print a PIXMAPC -- CARD32 plus 0 = CopyFromParent */
long n = ILong (buf);
if (n == 0)
- return fprintf(stdout, "CopyFromParent");
+ fprintf(stdout, "CopyFromParent");
else
- return PrintPIXMAP(buf);
+ PrintPIXMAP(buf);
+ return 4;
}
int
-PrintCURSOR(unsigned char *buf)
+PrintCURSOR(const unsigned char *buf)
{
/* print a CURSOR -- CARD32 plus 0 = None */
long n = ILong (buf);
if (n == 0)
- return fprintf(stdout, "None");
+ fprintf(stdout, "None");
else
- return fprintf(stdout, "CUR %08x", n);
+ fprintf(stdout, "CUR %08lx", n);
+ return 4;
}
int
-PrintFONT(unsigned char *buf)
+PrintFONT(const unsigned char *buf)
{
/* print a FONT -- CARD32 plus 0 = None */
long n = ILong (buf);
if (n == 0)
- return fprintf(stdout, "None");
+ fprintf(stdout, "None");
else
- return fprintf(stdout, "FNT %08x", n);
+ fprintf(stdout, "FNT %08lx", n);
+ return 4;
}
int
-PrintGCONTEXT(unsigned char *buf)
+PrintGCONTEXT(const unsigned char *buf)
{
/* print a GCONTEXT -- CARD32 */
long n = ILong (buf);
- return fprintf(stdout, "GXC %08x", n);
+ fprintf(stdout, "GXC %08lx", n);
+ return 4;
}
int
-PrintCOLORMAP(unsigned char *buf)
+PrintCOLORMAP(const unsigned char *buf)
{
/* print a COLORMAP -- CARD32 plus 0 = None */
long n = ILong (buf);
if (n == 0)
fprintf(stdout, "None");
else
- fprintf(stdout, "CMP %08x", n);
+ fprintf(stdout, "CMP %08lx", n);
return(4);
}
int
-PrintCOLORMAPC(unsigned char *buf)
+PrintCOLORMAPC(const unsigned char *buf)
{
/* print a COLORMAPC -- CARD32 plus 0 = CopyFromParent */
long n = ILong (buf);
if (n == 0)
- return fprintf(stdout, "CopyFromParent");
+ fprintf(stdout, "CopyFromParent");
else
- return PrintCOLORMAP(buf);
+ (void)PrintCOLORMAP(buf);
+ return 4;
}
int
-PrintDRAWABLE(unsigned char *buf)
+PrintDRAWABLE(const unsigned char *buf)
{
/* print a DRAWABLE -- CARD32 */
long n = ILong (buf);
- return fprintf(stdout, "DWB %08x", n);
+ fprintf(stdout, "DWB %08lx", n);
+ return 4;
}
int
-PrintFONTABLE(unsigned char *buf)
+PrintFONTABLE(const unsigned char *buf)
{
/* print a FONTABLE -- CARD32 */
long n = ILong (buf);
- return fprintf(stdout, "FTB %08x", n);
+ fprintf(stdout, "FTB %08lx", n);
+ return 4;
}
/* ************************************************************ */
#define NumberofAtoms 68
-static char *AtomTable[NumberofAtoms + 1] =
+static const char * const AtomTable[NumberofAtoms + 1] =
{
"NONE", "PRIMARY", "SECONDARY", "ARC", "ATOM", "BITMAP", "CARDINAL",
"COLORMAP", "CURSOR", "CUT_BUFFER0", "CUT_BUFFER1", "CUT_BUFFER2",
@@ -472,87 +487,92 @@ static char *AtomTable[NumberofAtoms + 1] =
the user defined ones, too. */
int
-PrintATOM(unsigned char *buf)
+PrintATOM(const unsigned char *buf)
{
/* print a ATOM -- CARD32 plus 0 = None */
long n = ILong (buf);
if (0 <= n && n <= NumberofAtoms)
fprintf(stdout, "<%s>", AtomTable[n]);
else
- fprintf(stdout, "ATM %08x", n);
+ fprintf(stdout, "ATM %08lx", n);
return(4);
}
int
-PrintATOMT(unsigned char *buf)
+PrintATOMT(const unsigned char *buf)
{
/* print a ATOMT -- CARD32 plus 0 = AnyPropertyType */
long n = ILong (buf);
if (n == 0)
- return fprintf(stdout, "AnyPropertyType");
+ fprintf(stdout, "AnyPropertyType");
else
- return PrintATOM(buf);
+ (void)PrintATOM(buf);
+ return 4;
}
int
-PrintVISUALID(unsigned char *buf)
+PrintVISUALID(const unsigned char *buf)
{
/* print a VISUALID -- CARD32 plus 0 = None */
long n = ILong (buf);
if (n == 0)
- return fprintf(stdout, "None");
+ fprintf(stdout, "None");
else
- return fprintf(stdout, "VIS %08x", n);
+ fprintf(stdout, "VIS %08lx", n);
+ return 4;
}
int
-PrintVISUALIDC(unsigned char *buf)
+PrintVISUALIDC(const unsigned char *buf)
{
/* print a VISUALIDC -- CARD32 plus 0 = CopyFromParent */
long n = ILong (buf);
if (n == 0)
- return fprintf(stdout, "CopyFromParent");
+ fprintf(stdout, "CopyFromParent");
else
- return PrintVISUALID(buf);
+ PrintVISUALID(buf);
+ return 4;
}
int
-PrintTIMESTAMP(unsigned char *buf)
+PrintTIMESTAMP(const unsigned char *buf)
{
/* print a TIMESTAMP -- CARD32 plus 0 as the current time */
long n = ILong (buf);
if (n == 0)
- return fprintf(stdout, "CurrentTime");
+ fprintf(stdout, "CurrentTime");
else
- return fprintf(stdout, "TIM %08x", n);
+ fprintf(stdout, "TIM %08lx", n);
+ return 4;
}
int
-PrintRESOURCEID(unsigned char *buf)
+PrintRESOURCEID(const unsigned char *buf)
{
/* print a RESOURCEID -- CARD32 plus 0 = AllTemporary */
long n = ILong (buf);
if (n == 0)
- return fprintf(stdout, "AllTemporary");
+ fprintf(stdout, "AllTemporary");
else
- return fprintf(stdout, "RID %08x", n);
+ fprintf(stdout, "RID %08lx", n);
+ return 4;
}
int
-PrintKEYSYM(unsigned char *buf)
+PrintKEYSYM(const unsigned char *buf)
{
/* print a KEYSYM -- CARD32 */
long n = ILong (buf);
- fprintf(stdout, "KYS %08x", n);
+ fprintf(stdout, "KYS %08lx", n);
return(4);
}
int
-PrintKEYCODE(unsigned char *buf)
+PrintKEYCODE(const unsigned char *buf)
{
/* print a KEYCODE -- CARD8 */
unsigned short n = IByte (buf);
@@ -561,51 +581,55 @@ PrintKEYCODE(unsigned char *buf)
}
int
-PrintKEYCODEA(unsigned char *buf)
+PrintKEYCODEA(const unsigned char *buf)
{
/* print a KEYCODEA -- CARD8 plus 0 = AnyKey */
long n = IByte (buf);
if (n == 0)
- return fprintf(stdout, "AnyKey");
+ fprintf(stdout, "AnyKey");
else
- return PrintKEYCODE(buf);
+ (void)PrintKEYCODE(buf);
+ return 1;
}
int
-PrintBUTTON(unsigned char *buf)
+PrintBUTTON(const unsigned char *buf)
{
/* print a BUTTON -- CARD8 */
unsigned short n = IByte (buf);
- return fprintf(stdout, "%d (%s)", n, printrep(n));
+ fprintf(stdout, "%d (%s)", n, printrep(n));
+ return 1;
}
int
-PrintBUTTONA(unsigned char *buf)
+PrintBUTTONA(const unsigned char *buf)
{
/* print a BUTTONA -- CARD8 plus 0 = AnyButton */
long n = IByte (buf);
if (n == 0)
- return fprintf(stdout, "AnyButton");
+ fprintf(stdout, "AnyButton");
else
- return PrintBUTTON(buf);
+ PrintBUTTON(buf);
+ return 1;
}
/* this is an interesting cheat -- we call DecodeEvent to print an event */
/* should work, but its never been tried */
int
-PrintEVENTFORM(unsigned char *buf)
+PrintEVENTFORM(const unsigned char *buf)
{
/* print an EVENT_FORM -- event format */
DecodeEvent(-1, buf, (long)-1);
+ return 32;
}
/* ************************************************************ */
int
PrintENUMERATED(
- unsigned char *buf,
+ const unsigned char *buf,
short length,
struct ValueListEntry *ValueList)
{
@@ -624,16 +648,16 @@ PrintENUMERATED(
p = p->Next;
if (p != NULL)
- return fprintf(stdout, "%s", p->Name);
+ fprintf(stdout, "%s", p->Name);
else
- return fprintf(stdout, "**INVALID** (%d)", n);
+ fprintf(stdout, "**INVALID** (%ld)", n);
}
/* ************************************************************ */
int
PrintSET(
- unsigned char *buf,
+ const unsigned char *buf,
short length,
struct ValueListEntry *ValueList)
{
@@ -674,9 +698,9 @@ PrintSET(
}
if (MatchesAll)
- return fprintf(stdout, "<ALL>");
+ fprintf(stdout, "<ALL>");
else if (!FoundOne)
- return fprintf(stdout, "0");
+ fprintf(stdout, "0");
}
@@ -686,13 +710,16 @@ PrintSET(
/* ************************************************************ */
void
-PrintField(buf, start, length, FieldType, name)
- unsigned char *buf;
- short start;
- short length;
- short FieldType;
- char *name;
+PrintField (
+ const unsigned char *buf,
+ short start,
+ short length,
+ short FieldType,
+ const char *name)
{
+ if (Verbose == 0)
+ return;
+
if (length == 0)
return;
@@ -736,11 +763,12 @@ PrintField(buf, start, length, FieldType, name)
/* print a list of things. The things are of type <ListType>.
They start at <buf>. There are <number> things in the list */
-long PrintList(buf, number, ListType, name)
- unsigned char *buf;
- long number;
- short ListType;
- char *name;
+long
+PrintList (
+ const unsigned char *buf,
+ long number,
+ short ListType,
+ const char *name)
{
long n;
long i;
@@ -749,7 +777,7 @@ long PrintList(buf, number, ListType, name)
if (number == 0)
return(0);
- fprintf(stdout, "%s%20s: (%d)\n", Leader, name, number);
+ fprintf(stdout, "%s%20s: (%ld)\n", Leader, name, number);
if (Verbose < 2)
return(0);
@@ -787,10 +815,11 @@ long PrintList(buf, number, ListType, name)
/* print a list of STRs. Similar to PrintList
They start at <buf>. There are <number> things in the list */
-long PrintListSTR(buf, number, name)
- unsigned char *buf;
- long number;
- char *name;
+long
+PrintListSTR (
+ const unsigned char *buf,
+ long number,
+ const char *name)
{
long n;
long i;
@@ -799,7 +828,7 @@ long PrintListSTR(buf, number, name)
if (number == 0)
return(0);
- fprintf(stdout, "%s%20s: (%d)\n", Leader, name, number);
+ fprintf(stdout, "%s%20s: (%ld)\n", Leader, name, number);
if (Verbose < 2)
return(0);
@@ -827,9 +856,9 @@ long PrintListSTR(buf, number, name)
int
PrintBytes(
- unsigned char buf[],
+ const unsigned char *buf,
long number,
- char *name)
+ const char *name)
{
/* print a list of BYTE -- 8-bit character */
long i;
@@ -868,9 +897,9 @@ PrintBytes(
int
PrintString8(
- unsigned char buf[],
+ const unsigned char *buf,
int number,
- char *name)
+ const char *name)
{
short i;
@@ -890,11 +919,11 @@ PrintString8(
int
PrintString16(
- unsigned char buf[],
+ const unsigned char *buf,
int number,
- char *name)
+ const char *name)
{
- short i;
+ long i;
unsigned short c;
if (number == 0)
@@ -903,7 +932,7 @@ PrintString16(
fprintf(stdout, "%s%20s: \"", Leader, name);
for (i = 0; i < number; i += 2)
{
- c = IShort(&buf[i]);
+ c = IChar2B(&buf[i]);
fprintf(stdout, "%s", printrep(c));
}
fprintf(stdout, "\"\n");
@@ -911,6 +940,54 @@ PrintString16(
return(number);
}
+void
+PrintTString8(
+ const unsigned char *buf,
+ long number,
+ const char *name)
+{
+ long i;
+ int off;
+
+ if (number == 0)
+ return;
+
+ off = 0;
+ if (TranslateText)
+ off = 0x20;
+ fprintf(stdout, "%s%20s: \"", Leader, name);
+ for (i = 0; i < number; i++)
+ fprintf(stdout, "%s", printrep(buf[i] + off));
+ fprintf(stdout, "\"\n");
+}
+
+
+/* print a String of CHAR2B -- 16-bit characters */
+void
+PrintTString16(
+ const unsigned char *buf,
+ long number,
+ const char *name)
+{
+ long i;
+ unsigned short c;
+ int off;
+
+ if (number == 0)
+ return;
+
+ off = 0;
+ if (TranslateText)
+ off = 0x20;
+ fprintf(stdout, "%s%20s: \"", Leader, name);
+ for (i = 0; i < number; i += 2)
+ {
+ c = IChar2B(&buf[i]);
+ fprintf(stdout, "%s", printrep(c + off));
+ }
+ fprintf(stdout, "\"\n");
+}
+
/* ************************************************************ */
/* */
/* */
@@ -926,11 +1003,11 @@ PrintString16(
void
PrintValues(
- unsigned char *control,
+ const unsigned char *control,
int clength,
int ctype,
- unsigned char *values,
- char *name)
+ const unsigned char *values,
+ const char *name)
{
long cmask;
struct ValueListEntry *p;
@@ -955,7 +1032,11 @@ PrintValues(
{
if ((p->Value & cmask) != 0)
{
- short m = 4 - p->Length;
+ short m;
+ if (littleEndian)
+ m=0;
+ else
+ m = 4 - p->Length;
PrintField(values, m, p->Length, p->Type, p->Name);
values += 4;
}
@@ -972,11 +1053,11 @@ PrintValues(
/* PolyText8 and PolyText16 take lists of characters with possible
font changes in them. */
-int
+void
PrintTextList8(
- unsigned char *buf,
+ const unsigned char *buf,
int length,
- char *name)
+ const char *name)
{
short n;
@@ -987,24 +1068,24 @@ PrintTextList8(
if (n != 255)
{
PrintField(buf, 1, 1, INT8, "delta");
- PrintString8(&buf[2], n, "text item 8 string");
+ PrintTString8(&buf[2], (long)n, "text item 8 string");
buf += n + 2;
length -= n + 2;
}
else
{
PrintField(buf, 1, 4, FONT, "font-shift-id");
- buf += 5;
- length -= 5;
+ buf += 4;
+ length -= 4;
}
}
}
-int
+void
PrintTextList16(
- unsigned char *buf,
+ const unsigned char *buf,
int length,
- char *name)
+ const char *name)
{
short n;
@@ -1015,15 +1096,15 @@ PrintTextList16(
if (n != 255)
{
PrintField(buf, 1, 1, INT8, "delta");
- PrintString16(&buf[2], n, "text item 16 string");
+ PrintTString16(&buf[2], (long)n, "text item 16 string");
buf += n + 2;
length -= n + 2;
}
else
{
PrintField(buf, 1, 4, FONT, "font-shift-id");
- buf += 5;
- length -= 5;
+ buf += 4;
+ length -= 4;
}
}
}
@@ -1036,12 +1117,12 @@ PrintTextList16(
#define MAXline 78
-static void
+void
DumpHexBuffer(
- unsigned char *buf,
+ const unsigned char *buf,
long n)
{
- short i;
+ long i;
short column;
char h[6] /* one hex or octal character */ ;
@@ -1062,3 +1143,41 @@ DumpHexBuffer(
column += 3;
}
}
+
+void
+PrintValueRec (
+ unsigned long key,
+ unsigned long cmask,
+ short ctype)
+{
+ unsigned char *values;
+ struct ValueListEntry *p;
+ ValuePtr value;
+
+ value = GetValueRec (key);
+ if (!value)
+ return;
+ values = (unsigned char *) value->values;
+
+ /* now if it is zero, ignore and return */
+ if (cmask == 0)
+ return;
+
+ /* there are bits in the controlling bitmask, figure out which */
+ /* the ctype is a set type, so this code is similar to PrintSET */
+ ModifyIndentLevel(1);
+ for (p = TD[ctype].ValueList; p != NULL; p = p->Next)
+ {
+ if ((p->Value & cmask) != 0)
+ {
+ short m;
+ if (littleEndian)
+ m=0;
+ else
+ m = 4 - p->Length;
+ PrintField(values, m, p->Length, p->Type, p->Name);
+ }
+ values += 4;
+ }
+ ModifyIndentLevel(-1);
+}
diff --git a/randrscope.h b/randrscope.h
new file mode 100644
index 0000000..5b63b06
--- /dev/null
+++ b/randrscope.h
@@ -0,0 +1,29 @@
+#ifndef _RANDRSCOPE_H_
+#define _RANDRSCOPE_H_
+
+#define RANDRREQUESTHEADER "RANDRREQUEST"
+#define RANDRREPLYHEADER "RANDRREPLY"
+
+/*
+ To aid in making the choice between level 1 and level 2, we
+ define the following define, which does not print relatively
+ unimportant fields.
+*/
+
+#define printfield(a,b,c,d,e) if (Verbose > 1) PrintField(a,b,c,d,e)
+
+extern unsigned char RANDRRequest;
+extern unsigned char RANDREvent;
+
+extern void RandrQueryVersion (FD fd, const unsigned char *buf);
+extern void RandrQueryVersionReply (FD fd, const unsigned char *buf);
+extern void RandrGetScreenInfo (FD fd, const unsigned char *buf);
+extern void RandrGetScreenInfoReply (FD fd, const unsigned char *buf);
+extern void RandrSetScreenConfig (FD fd, const unsigned char *buf);
+extern void RandrSetScreenConfigReply (FD fd, const unsigned char *buf);
+extern void RandrScreenChangeSelectInput (FD fd, const unsigned char *buf);
+extern void RandrScreenSizes (const unsigned char *buf);
+extern void RandrScreenChangeNotifyEvent (const unsigned char *buf);
+
+#endif
+
diff --git a/renderscope.h b/renderscope.h
new file mode 100644
index 0000000..201e339
--- /dev/null
+++ b/renderscope.h
@@ -0,0 +1,58 @@
+#ifndef _RENDERSCOPE_H_
+#define _RENDERSCOPE_H_
+
+#define RENDERREQUESTHEADER "RENDERREQUEST"
+#define RENDERREPLYHEADER "RENDERREPLY"
+
+/*
+ To aid in making the choice between level 1 and level 2, we
+ define the following define, which does not print relatively
+ unimportant fields.
+*/
+
+#define printfield(a,b,c,d,e) if (Verbose > 1) PrintField(a,b,c,d,e)
+
+extern unsigned char RENDERRequest;
+extern unsigned char RENDERError;
+#define RENDERNError 5
+
+extern void RenderQueryVersion (FD fd, const unsigned char *buf);
+extern void RenderQueryVersionReply (FD fd, const unsigned char *buf);
+extern void RenderQueryPictFormats (FD fd, const unsigned char *buf);
+extern void RenderQueryPictFormatsReply (FD fd, const unsigned char *buf);
+extern void RenderQueryPictIndexValues (FD fd, const unsigned char *buf);
+extern void RenderQueryPictIndexValuesReply (FD fd, const unsigned char *buf);
+extern void RenderQueryDithers (FD fd, const unsigned char *buf);
+extern void RenderQueryDithersReply (FD fd, const unsigned char *buf);
+extern void RenderCreatePicture (FD fd, const unsigned char *buf);
+extern void RenderChangePicture (FD fd, const unsigned char *buf);
+extern void RenderSetPictureClipRectangles (FD fd, const unsigned char *buf);
+extern void RenderFreePicture (FD fd, const unsigned char *buf);
+extern void RenderComposite (FD fd, const unsigned char *buf);
+extern void RenderScale (FD fd, const unsigned char *buf);
+extern void RenderTrapezoids (FD fd, const unsigned char *buf);
+extern void RenderTriangles (FD fd, const unsigned char *buf);
+extern void RenderTriStrip (FD fd, const unsigned char *buf);
+extern void RenderTriFan (FD fd, const unsigned char *buf);
+extern void RenderColorTrapezoids (FD fd, const unsigned char *buf);
+extern void RenderColorTriangles (FD fd, const unsigned char *buf);
+extern void RenderTransform (FD fd, const unsigned char *buf);
+extern void RenderCreateGlyphSet (FD fd, const unsigned char *buf);
+extern void RenderReferenceGlyphSet (FD fd, const unsigned char *buf);
+extern void RenderFreeGlyphSet (FD fd, const unsigned char *buf);
+extern void RenderAddGlyphs (FD fd, const unsigned char *buf);
+extern void RenderAddGlyphsFromPicture (FD fd, const unsigned char *buf);
+extern void RenderFreeGlyphs (FD fd, const unsigned char *buf);
+extern void RenderCompositeGlyphs8 (FD fd, const unsigned char *buf);
+extern void RenderCompositeGlyphs16 (FD fd, const unsigned char *buf);
+extern void RenderCompositeGlyphs32 (FD fd, const unsigned char *buf);
+extern void RenderFillRectangles (FD fd, const unsigned char *buf);
+
+extern void RenderPictFormatError (FD fd, const unsigned char *buf);
+extern void RenderPictureError (FD fd, const unsigned char *buf);
+extern void RenderPictOpError (FD fd, const unsigned char *buf);
+extern void RenderGlyphSetError (FD fd, const unsigned char *buf);
+extern void RenderGlyphError (FD fd, const unsigned char *buf);
+
+#endif
+
diff --git a/scope.c b/scope.c
index 32c80c6..45f2724 100644
--- a/scope.c
+++ b/scope.c
@@ -54,89 +54,618 @@
***************************************************** */
#include "scope.h"
+#include "nas.h"
-#include <errno.h>
+#include <ctype.h>
#include <unistd.h>
-#include <netdb.h>
#ifdef SYSV
#define bzero(s,l) memset(s, 0, l)
#define bcopy(s,d,l) memmove(d,s,l)
#endif
+#include <sys/types.h> /* needed by sys/socket.h and netinet/in.h */
+#include <sys/uio.h> /* for struct iovec, used by socket.h */
+#include <sys/socket.h> /* for AF_INET, SOCK_STREAM, ... */
+#include <sys/ioctl.h> /* for FIONCLEX, FIONBIO, ... */
+#ifdef SVR4
+#include <sys/filio.h>
+#endif
+#include <fcntl.h>
+#include <netinet/in.h> /* struct sockaddr_in */
+#include <netinet/tcp.h>
+#include <netdb.h> /* struct servent * and struct hostent * */
+#include <errno.h> /* for EINTR, EADDRINUSE, ... */
+
+
/* ********************************************** */
/* */
/* ********************************************** */
#define DefaultPort 6000
-static char ServerHostName[MAXHOSTNAMELEN];
+ char ServerHostName[MAXHOSTNAMELEN];
+ char AudioServerHostName[MAXHOSTNAMELEN];
long ServerBasePort = DefaultPort;
static long ServerInPort = 1;
static long ServerOutPort = 0;
static long ServerDisplay = 0;
-#ifdef USE_XTRANS
-#undef DNETCONN
-#undef DNETSVR4
-#endif
+static FD ConnectToClient(FD ConnectionSocket);
+static void DataFromClient(FD fd);
+static void SetUpStdin(void);
-#ifdef DNETCONN
-#include <X11/dni.h>
-#include <sys/fcntl.h>
-int decnet_in = 0;
-int decnet_out = 0;
-int decnet_server = 0;
-#endif
-#ifdef DNETSVR4
-#include <X11/dni8.h>
-extern struct hostent *(*dnet_gethostbyname)();
-extern int (*dnet_gethostname)();
-short initialize_libdni();
-int decnet_in = 0;
-int decnet_out = 0;
-int decnet_server = 0;
+long TranslateText = 0;
+char ScopeEnabled = 1;
+char HandleSIGUSR1 = 0;
+char DoAudio = 0;
+char TerminateClose = 0;
+int Interrupt = 0;
+
+struct FDDescriptor *FDD = NULL;
+short MaxFD = 0;
+short nFDsInUse = 0;
+fd_set ReadDescriptors;
+fd_set WriteDescriptors;
+fd_set BlockedReadDescriptors;
+short HighestFD;
+
+short debuglevel = 0;
+short Verbose = 0;
+short XVerbose = 0;
+short NasVerbose = 0;
+int ScopePort = 0;
+char *ScopeHost = NULL;
+
+
+typedef struct _BreakPoint {
+ struct _BreakPoint *next;
+ int number;
+ unsigned char request;
+ Boolean enabled;
+} BP;
+
+typedef enum _CMDResult { CMDProceed, CMDDebug, CMDSyntax, CMDError } CMDResult;
+
+static CMDResult CMDStep (int argc, char **argv);
+static CMDResult CMDCont (int argc, char **argv);
+static CMDResult CMDBreak (int argc, char **argv);
+static CMDResult CMDDelete (int argc, char **argv);
+static CMDResult CMDDisable (int argc, char **argv);
+static CMDResult CMDEnable (int argc, char **argv);
+static CMDResult CMDLevel (int argc, char **argv);
+static CMDResult CMDAudio (int argc, char **argv);
+static CMDResult CMDQuit (int argc, char **argv);
+static CMDResult CMDHelp (int argc, char **argv);
+
+typedef struct _CMDFunc {
+ char *name;
+ char *alias;
+ CMDResult (*func)(int argc, char **argv);
+ char *usage;
+ char *help;
+} CMDFuncRec;
+typedef const CMDFuncRec *CMDFuncPtr;
+
+static const CMDFuncRec CMDFuncs[] = {
+ { "audio", "a", CMDAudio, "[a]udio",
+ "Set audio output level\n" },
+ { "break", "b", CMDBreak, "[b]reak",
+ "Create breakpoints\n" },
+ { "cont", "c", CMDCont, "[c]ont",
+ "Continue scoping\n" },
+ { "delete", "del", CMDDelete, "[del]ete",
+ "Delete breakpoints\n" },
+ { "disable","d", CMDDisable, "[d]isable",
+ "Disable breakpoints\n" },
+ { "enable", "e", CMDEnable, "[e]nable",
+ "Enable breakpoints\n" },
+ { "help", "?", CMDHelp, "help",
+ "Print this list\n" },
+ { "level", "l", CMDLevel, "[l]evel",
+ "Set output level\n" },
+ { "quit", "q", CMDQuit, "[q]uit",
+ "Quit Xscope\n" },
+ { "step", "s", CMDStep, "[s]tep",
+ "Step trace one request\n" },
+};
+
+#define NumCMDFuncs (sizeof CMDFuncs / sizeof CMDFuncs[0])
+
+#ifndef FALSE
+#define FALSE 0
+#define TRUE 1
#endif
-static FD ConnectToClient(FD ConnectionSocket);
-static FD ConnectToServer(int report);
-static void SetUpStdin(void);
+static int
+CMDStringToInt (
+ char *s,
+ int *v)
+{
+ int sign = 1;
+
+ switch (*s) {
+ case '-':
+ sign = -1;
+ s++;
+ break;
+ case '+':
+ s++;
+ break;
+ }
+
+ if (!strncmp (s, "0x", 2))
+ {
+ sscanf (s + 2, "%x", v);
+ }
+ else if (*s == '0')
+ {
+ sscanf (s, "%o", v);
+ }
+ else if (isdigit (*s))
+ {
+ sscanf (s, "%d", v);
+ }
+ else if (*s == '\'')
+ {
+ s++;
+ if (*s == '\\') {
+ s++;
+ switch (*s) {
+ case 'n':
+ *v = '\n';
+ break;
+ case 't':
+ *v = '\t';
+ break;
+ default:
+ *v = (int) *s;
+ break;
+ }
+ } else
+ *v = (int) *s;
+ s++;
+ if (*s != '\'')
+ return FALSE;
+ }
+ else
+ return FALSE;
+ *v *= sign;
+ return TRUE;
+}
+
+static CMDFuncPtr
+CMDStringToFunc (
+ const char *name)
+{
+ int i;
+ for (i = 0; i < NumCMDFuncs; i++)
+ {
+ if (!strcmp (name, CMDFuncs[i].name) ||
+ !strcmp (name, CMDFuncs[i].alias))
+ {
+ return &CMDFuncs[i];
+ }
+ }
+ return NULL;
+}
+
+static int
+CMDSplitIntoWords (
+ char *line,
+ char **argv)
+{
+ char quotechar;
+ int argc;
+
+ argc = 0;
+ while (*line) {
+ while (isspace(*line))
+ line++;
+ if (!*line)
+ break;
+ if (*line == '"')
+ {
+ quotechar = *line++;
+ *argv++ = line;
+ argc++;
+ while (*line && *line != quotechar)
+ line++;
+ if (*line)
+ *line++ = '\0';
+ }
+ else
+ {
+ *argv++ = line;
+ argc++;
+ while (*line && !isspace(*line))
+ line++;
+ if (*line)
+ *line++ = '\0';
+ }
+ }
+ *argv = NULL;
+ return argc;
+}
+
+static CMDResult
+CMDHelp(
+ int argc,
+ char **argv)
+{
+ int i;
+ CMDFuncPtr func;
+
+ if (argc == 1)
+ {
+ for (i = 0; i < NumCMDFuncs; i++)
+ printf("%-10s%s\n", CMDFuncs[i].name, CMDFuncs[i].usage);
+ }
+ else
+ {
+ for (i = 1; i < argc; i++)
+ {
+ func = CMDStringToFunc (argv[i]);
+ if (!func)
+ {
+ printf ("%-10s unknown command\n", argv[i]);
+ return CMDSyntax;
+ }
+ printf ("%-10s %s\n%s", func->name, func->usage, func->help);
+ }
+ }
+ return CMDDebug;
+}
+
+static void
+CMDSyntaxError(
+ int argc,
+ char **argv)
+{
+ printf("Syntax error in:");
+ while (*argv)
+ printf(" %s", *argv++);
+ printf("\n");
+}
+
+void
+ReadCommands (void)
+{
+ int argc;
+ char line[1024];
+ char *argv[20];
+ CMDResult result;
+ CMDFuncPtr func;
+ static int here;
+
+ if (here)
+ return;
+ here = 1;
+ for (;;) {
+ printf ("> ");
+ if (!fgets (line, sizeof line, stdin))
+ break;
+ argc = CMDSplitIntoWords(line, argv);
+ if (argc > 0) {
+ func = CMDStringToFunc (argv[0]);
+ if (!func)
+ CMDSyntaxError (argc, argv);
+ else
+ {
+ result = (*func->func)(argc, argv);
+ switch (result) {
+ case CMDSyntax:
+ CMDSyntaxError(argc, argv);
+ break;
+ case CMDError:
+ printf ("Error\n");
+ break;
+ case CMDProceed:
+ here = 0;
+ return;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ printf("...\n");
+ here = 0;
+}
+
+int SingleStep;
+int BreakPoint;
+BP *breakPoints;
+int breakPointNumber;
+
+void
+TestBreakPoints (
+ const unsigned char *buf,
+ long n)
+{
+ BP *bp;
+
+ for (bp = breakPoints; bp; bp = bp->next)
+ {
+ if (bp->request == buf[0])
+ {
+ break;
+ }
+ }
+ if (bp)
+ {
+ printf ("Breakpoint on request %d\n", bp->request);
+ ReadCommands ();
+ }
+}
+
+static void
+setBreakPoint (void)
+{
+ Boolean b = false;
+ BP *bp;
+ FD fd;
+
+ if (SingleStep)
+ b = true;
+ else
+ {
+ for (bp = breakPoints; bp; bp = bp->next)
+ {
+ if (bp->enabled)
+ {
+ b = true;
+ break;
+ }
+ }
+ }
+ if (b != BreakPoint)
+ {
+ BreakPoint = b;
+ for (fd = 0; fd < HighestFD; fd++)
+ {
+ if (FDD[fd].Busy && FDD[fd].InputHandler == DataFromClient)
+ {
+ if (BreakPoint)
+ SetBufLimit (fd);
+ else
+ ClearBufLimit (fd);
+ }
+ }
+ }
+}
+
+static CMDResult
+CMDBreak (
+ int argc,
+ char **argv)
+{
+ BP *bp, **prev;
+ int request;
+
+ if (argc == 1)
+ {
+ for (bp = breakPoints; bp; bp = bp->next)
+ {
+ printf ("%3d: %3d %s\n", bp->number, bp->request,
+ bp->enabled ? "enabled" : "disabled");
+ }
+ }
+ else
+ {
+ for (prev = &breakPoints; *prev; prev = &(*prev)->next);
+ while (*++argv) {
+ request = GetXRequestFromName (*argv);
+ if (request < 0 && !CMDStringToInt (*argv, &request))
+ return CMDSyntax;
+ bp = (BP *) malloc (sizeof (BP));
+ bp->request = request;
+ bp->number = ++breakPointNumber;
+ bp->enabled = true;
+ bp->next = NULL;
+ *prev = bp;
+ prev = &bp->next;
+ }
+ }
+ setBreakPoint ();
+ return CMDDebug;
+}
+
+static CMDResult
+CMDCont (
+ int argc,
+ char **argv)
+{
+ SingleStep = 0;
+ return CMDProceed;
+}
+
+static CMDResult
+CMDDisable (
+ int argc,
+ char **argv)
+{
+ BP *bp;
+ int number;
+
+ if (argc == 1)
+ {
+ printf ("Disabling all breakpoints...\n");
+ for (bp = breakPoints; bp; bp = bp->next)
+ bp->enabled = false;
+ }
+ else
+ {
+ while (*++argv) {
+ if (!CMDStringToInt (*argv, &number))
+ return CMDSyntax;
+ for (bp = breakPoints; bp; bp = bp->next)
+ if (bp->number == number)
+ {
+ bp->enabled = false;
+ break;
+ }
+ if (!bp)
+ {
+ printf ("No such breakpoint %s\n", *argv);
+ }
+ }
+ }
+ setBreakPoint ();
+ return CMDDebug;
+}
+
+static CMDResult
+CMDDelete (
+ int argc,
+ char **argv)
+{
+ BP *bp, **prev;
+ int number;
+
+ if (argc == 1)
+ {
+ printf ("Deleting all breakpoints...\n");
+ while ((bp = breakPoints) != NULL)
+ {
+ breakPoints = bp->next;
+ free (bp);
+ }
+ }
+ else
+ {
+ while (*++argv) {
+ if (!CMDStringToInt (*argv, &number))
+ return CMDSyntax;
+ for (prev = &breakPoints; bp = *prev; prev = &bp->next)
+ {
+ if (bp->number == number)
+ {
+ *prev = bp->next;
+ free (bp);
+ break;
+ }
+ }
+ if (!bp)
+ {
+ printf ("No such breakpoint %s\n", *argv);
+ }
+ }
+ }
+ setBreakPoint ();
+ return CMDDebug;
+}
+
+static CMDResult
+CMDEnable (
+ int argc,
+ char **argv)
+{
+ BP *bp;
+ int number;
+
+ if (argc == 1)
+ {
+ printf ("Enablingg all breakpoints...\n");
+ for (bp = breakPoints; bp; bp = bp->next)
+ bp->enabled = true;
+ }
+ else
+ {
+ while (*++argv) {
+ if (!CMDStringToInt (*argv, &number))
+ return CMDSyntax;
+ for (bp = breakPoints; bp; bp = bp->next)
+ if (bp->number == number)
+ {
+ bp->enabled = true;
+ break;
+ }
+ if (!bp)
+ {
+ printf ("No such breakpoint %s\n", *argv);
+ }
+ }
+ }
+ setBreakPoint ();
+ return CMDDebug;
+}
+
+static CMDResult
+CMDStep (
+ int argc,
+ char **argv)
+{
+ SingleStep = 1;
+ setBreakPoint ();
+ return CMDProceed;
+}
+
+static CMDResult
+CMDQuit (
+ int argc,
+ char **argv)
+{
+ printf ("exiting...\n");
+ exit (0);
+}
+
+static CMDResult
+CMDLevel (
+ int argc,
+ char **argv)
+{
+ int level;
+
+ if (argc == 1)
+ printf ("Level: %d\n", XVerbose);
+ else if (argc == 2 && CMDStringToInt (argv[1], &level))
+ XVerbose = level;
+ else
+ return CMDSyntax;
+ return CMDDebug;
+}
+
+static CMDResult
+CMDAudio (
+ int argc,
+ char **argv)
+{
+ int level;
+ if (argc == 1)
+ printf ("Audio Level: %d\n", NasVerbose);
+ else if (argc == 2 && CMDStringToInt (argv[1], &level))
+ NasVerbose = level;
+ else
+ return CMDSyntax;
+ return CMDDebug;
+}
/* ********************************************** */
/* */
/* */
/* ********************************************** */
-static short GetServerport ()
+short
+GetServerport (void)
{
short port;
enterprocedure("GetServerport");
-#if defined(DNETCONN) || defined(DNETSVR4)
- if (decnet_server) {
- port = ServerDisplay + ServerOutPort;
- return(port);
- }
-#endif
port = ServerBasePort + ServerOutPort + ServerDisplay;
debug(4,(stderr, "Server service is on port %d\n", port));
return(port);
}
-static short GetScopePort ()
+static short
+GetScopePort (void)
{
short port;
enterprocedure("GetScopePort");
-#if defined(DNETCONN) || defined(DNETSVR4)
- if (decnet_in) {
- port = ServerInPort + ServerDisplay;
- return(port);
- }
-#endif
port = ServerBasePort + ServerInPort + ServerDisplay;
debug(4,(stderr, "scope service is on port %d\n", port));
return(port);
@@ -147,7 +676,7 @@ static short GetScopePort ()
/* ********************************************** */
static void
-Usage()
+Usage(void)
{
fprintf(stderr, "Usage: xscope\n");
fprintf(stderr, " [-h<server-host>]\n");
@@ -158,20 +687,22 @@ Usage()
#ifdef RAW_MODE
fprintf(stderr, " [-r] -- raw output\n");
#endif
+ fprintf(stderr, " [-a<n>] -- audio verbose output\n");
fprintf(stderr, " [-q] -- quiet output\n");
fprintf(stderr, " [-D<debug-level>]\n");
+ fprintf(stderr, " [-S<n>] -- start/stop on SIGUSR1\n");
+ fprintf(stderr, " [-t] -- terminate when all clients close\n");
exit(1);
}
+
static void
-ScanArgs(argc, argv)
- int argc;
- char **argv;
+ScanArgs (
+ int argc,
+ char **argv)
{
-#if defined(DNETCONN) || defined(DNETSVR4)
- char *ss;
-#endif
- Verbose = 1 /* default verbose-ness level */;
+ XVerbose = 1 /* default verbose-ness level */;
+ NasVerbose = 1;
#ifdef RAW_MODE
Raw = 0 ;
#endif
@@ -196,19 +727,18 @@ ScanArgs(argc, argv)
debuglevel = atoi(++*argv);
if (debuglevel == 0)
debuglevel = 255;
- debuglevel |= 1;
- Verbose = 7;
+ XVerbose = 7;
debug(1,(stderr, "debuglevel = %d\n", debuglevel));
break;
- case 'q': /* quiet mode */
- Verbose = 0;
- debug(1,(stderr, "Verbose = %d\n", Verbose));
+ case 'S':
+ HandleSIGUSR1 = 1;
+ ScopeEnabled = atoi(++*argv);
break;
- case 'v': /* verbose mode */
- Verbose = atoi(++*argv);
- debug(1,(stderr, "Verbose = %d\n", Verbose));
+ case 'q': /* quiet mode */
+ XVerbose = 0;
+ debug(1,(stderr, "Verbose = %d\n", XVerbose));
break;
#ifdef RAW_MODE
@@ -218,48 +748,61 @@ ScanArgs(argc, argv)
break;
#endif
+ case 'v': /* verbose mode */
+ XVerbose = atoi(++*argv);
+ debug(1,(stderr, "Verbose = %d\n", XVerbose));
+ break;
+
case 'o':
ServerOutPort = atoi(++*argv);
if (ServerOutPort <= 0)
ServerOutPort = 0;
- debug(1,(stderr, "ServerOutPort = %d\n", ServerOutPort));
+ debug(1,(stderr, "ServerOutPort = %ld\n", ServerOutPort));
break;
case 'd':
ServerDisplay = atoi(++*argv);
if (ServerDisplay <= 0)
ServerDisplay = 0;
- debug(1,(stderr, "ServerDisplay=%d\n", ServerDisplay));
+ debug(1,(stderr, "ServerDisplay = %ld\n", ServerDisplay));
break;
case 'i':
-#if defined(DNETCONN) || defined(DNETSVR4)
- if (ss = (char *)strchr(*argv,':')) {
- decnet_in = 1;
- *ss = NULL;
- }
-#endif
ServerInPort = atoi(++*argv);
if (ServerInPort <= 0)
ServerInPort = 0;
- debug(1,(stderr, "ServerInPort = %d\n", ServerInPort));
+ debug(1,(stderr, "ServerInPort = %ld\n", ServerInPort));
break;
case 'h':
-#if defined(DNETCONN) || defined(DNETSVR4)
- if (ss = (char *)strchr(*argv,':')) {
- decnet_server = 1;
- *ss = NULL;
- strcpy(ServerHostName,++*argv);
- break;
- }
-#endif
if (++*argv != NULL && **argv != '\0'
&& (strlen(*argv) < sizeof(ServerHostName)))
strcpy(ServerHostName, *argv);
debug(1,(stderr, "ServerHostName=%s\n", ServerHostName));
break;
+ case 'T':
+ TranslateText = 1;
+ break;
+
+ case 'A':
+ DoAudio = 1;
+ break;
+
+ case 'a': /* verbose mode */
+ NasVerbose = atoi(++*argv);
+ debug(1,(stderr, "NasVerbose = %d\n", NasVerbose));
+ break;
+
+ case 'n': /* NAS server host */
+ if (++*argv != NULL && **argv != '\0')
+ (void)strcpy(AudioServerHostName, *argv);
+ debug(1,(stderr, "AudioServerHostName=%s\n", AudioServerHostName));
+ break;
+ case 't':
+ TerminateClose = 1;
+ break;
+
default:
fprintf(stderr, "Unknown option %c\n", **argv);
Usage();
@@ -277,7 +820,7 @@ ScanArgs(argc, argv)
if (ServerInPort == ServerOutPort)
if (ServerHostName[0] == '\0')
{
- fprintf(stderr, "Can't have xscope on same port as server (%d)\n",
+ fprintf(stderr, "Can't have xscope on same port as server (%ld)\n",
ServerInPort);
Usage();
}
@@ -289,29 +832,27 @@ ScanArgs(argc, argv)
/* */
/* ********************************************** */
-main(argc, argv)
- int argc;
- char **argv;
+int
+main (
+ int argc,
+ char **argv)
{
ScanArgs(argc, argv);
InitializeFD();
InitializeX11();
+ if (DoAudio)
+ InitializeAudio();
SetUpStdin();
-#if defined(DNETCONN) || defined(DNETSVR4)
- if (decnet_in)
- SetUpDECnetConnection(GetScopePort());
- else
- SetUpConnectionSocket(GetScopePort());
-#else
- SetUpConnectionSocket(GetScopePort());
+ SetUpConnectionSocket(GetScopePort(), NewConnection);
+ if (DoAudio)
+ SetUpConnectionSocket (GetScopePort() + 2000, NewAudio);
SetSignalHandling();
-#endif
return MainLoop();
}
void
-TimerExpired()
+TimerExpired (void)
{
debug(16,(stderr, "Timer tick\n"));
}
@@ -333,22 +874,22 @@ TimerExpired()
*/
static void
-ReadStdin(fd)
- FD fd;
+ReadStdin (
+ FD fd)
{
char buf[2048];
long n;
enterprocedure("ReadStdin");
n = read(fd, buf, 2048);
- debug(4,(stderr, "read %d bytes from stdin\n", n));
+ debug(4,(stderr, "read %ld bytes from stdin\n", n));
}
static void
-SetUpStdin()
+SetUpStdin (void)
{
enterprocedure("SetUpStdin");
- UsingFD(fileno(stdin), ReadStdin, NULL);
+ UsingFD(fileno(stdin), ReadStdin, NULL, NULL);
}
/* ************************************************************ */
@@ -365,32 +906,31 @@ SetUpStdin()
we get input from one, we can write it to the other.
*/
-struct fdinfo
-{
- Boolean Server;
- long ClientNumber;
- FD pair;
-};
-
-static long ClientNumber = 0;
-static struct fdinfo FDinfo[StaticMaxFD];
+static long clientNumber = 0;
+struct fdinfo FDinfo[StaticMaxFD];
-static void
-SetUpPair(client, server)
- FD client;
- FD server;
+void
+SetUpPair(
+ FD client,
+ FD server)
{
if (client >= 0)
{
- ClientNumber += 1;
+ clientNumber += 1;
FDinfo[client].Server = false;
FDinfo[client].pair = server;
- FDinfo[client].ClientNumber = ClientNumber;
+ FDinfo[client].ClientNumber = clientNumber;
+ FDinfo[client].bufcount = 0;
+ FDinfo[client].buflimit = -1;
+ FDinfo[client].bufdelivered = 0;
if (server >= 0)
{
FDinfo[server].Server = true;
FDinfo[server].pair = client;
FDinfo[server].ClientNumber = FDinfo[client].ClientNumber;
+ FDinfo[server].bufcount = 0;
+ FDinfo[server].buflimit = -1;
+ FDinfo[server].bufdelivered = 0;
}
}
else if (server >= 0)
@@ -401,10 +941,30 @@ SetUpPair(client, server)
}
static void
-CloseConnection(fd)
- FD fd;
+ResetPair (
+ FD client,
+ FD server)
+{
+ if (client >= 0)
+ {
+ FDinfo[client].bufcount = 0;
+ FDinfo[client].buflimit = -1;
+ FDinfo[client].bufdelivered = 0;
+ }
+ if (server >= 0)
+ {
+ FDinfo[server].bufcount = 0;
+ FDinfo[server].buflimit = -1;
+ FDinfo[server].bufdelivered = 0;
+ }
+}
+
+static void
+CloseConnection (
+ FD fd)
{
debug(4,(stderr, "close %d and %d\n", fd, FDPair(fd)));
+ ResetPair (ClientHalf(fd), ServerHalf(fd));
StopClientConnection(ServerHalf(fd));
StopServerConnection(ClientHalf(fd));
@@ -417,63 +977,148 @@ CloseConnection(fd)
#endif
NotUsingFD(fd);
NotUsingFD(FDPair(fd));
+ if (TerminateClose)
+ exit (0);
}
/* ************************************************************ */
-FD FDPair(fd)
- FD fd;
+FD
+FDPair (
+ FD fd)
{
return(FDinfo[fd].pair);
}
-FD ClientHalf(fd)
- FD fd;
+FD
+ClientHalf (
+ FD fd)
{
if (FDinfo[fd].Server)
return(FDinfo[fd].pair);
return(fd);
}
-FD ServerHalf(fd)
- FD fd;
+FD
+ServerHalf (
+ FD fd)
{
if (FDinfo[fd].Server)
return(fd);
return(FDinfo[fd].pair);
}
-char *ClientName (fd)
- FD fd;
+char *
+ClientName (
+ FD fd)
{
static char name[12];
- if (ClientNumber <= 1)
+ if (clientNumber <= 1)
return("");
- sprintf(name, " %d", FDinfo[fd].ClientNumber);
+ (void)sprintf(name, " %ld", FDinfo[fd].ClientNumber);
return(name);
}
+int
+ClientNumber (
+ FD fd)
+{
+ return FDinfo[fd].ClientNumber;
+}
/* ********************************************** */
/* */
/* ********************************************** */
+/*
+ * Write as much of the queued data as the receiver will accept
+ * Block reads from the sender until the receiver gets all of the
+ * data
+ */
+void
+FlushFD (
+ FD fd)
+{
+ long BytesToWrite = FDinfo[fd].bufcount - FDinfo[fd].bufstart;
+ unsigned char *p = FDinfo[fd].buffer + FDinfo[fd].bufstart;
+ int PeerFD;
+
+ PeerFD = FDPair (fd);
+ if (FDinfo[fd].buflimit >= 0)
+ {
+ if (FDinfo[fd].bufdelivered + BytesToWrite > FDinfo[fd].buflimit)
+ BytesToWrite = FDinfo[fd].buflimit - FDinfo[fd].bufdelivered;
+ }
+ while (BytesToWrite > 0)
+ {
+ int n1 = write (fd, (char *)p, (int)BytesToWrite);
+ debug(4,(stderr, "write %d bytes\n", n1));
+ if (n1 < 0)
+ {
+ if (errno != EWOULDBLOCK && errno != EAGAIN)
+ {
+ perror("Error on write");
+ if (PeerFD >= 0)
+ CloseConnection(PeerFD);
+ BytesToWrite = 0;
+ }
+ break;
+ }
+ else
+ {
+ FDinfo[fd].bufstart += n1;
+ FDinfo[fd].bufdelivered += n1;
+ BytesToWrite -= n1;
+ p += n1;
+ }
+ }
+ if (FDinfo[fd].bufstart == FDinfo[fd].bufcount)
+ {
+ if (PeerFD >= 0) {
+ FD_CLR(PeerFD, &BlockedReadDescriptors);
+ }
+ FD_CLR(fd, &WriteDescriptors);
+ FDinfo[fd].bufcount = FDinfo[fd].bufstart = 0;
+ }
+ else
+ {
+ if (PeerFD >= 0) {
+ FD_SET(PeerFD, &BlockedReadDescriptors);
+ }
+ if (FDinfo[fd].buflimit != FDinfo[fd].bufdelivered) {
+ FD_SET(PeerFD, &WriteDescriptors);
+ }
+ }
+}
+
/* when we get data from a client, we read it in, copy it to the
server for this client, then dump it to the client. Note, we don't
have to have a server, if there isn't one. */
static void
-DataFromClient(fd)
- FD fd;
+DataFromClient (
+ FD fd)
{
- unsigned char buf[2048];
long n;
FD ServerFD;
+ Verbose = XVerbose;
enterprocedure("DataFromClient");
- n = read(fd, (char *)buf, 2048);
- debug(4,(stderr, "read %d bytes from Client%s\n", n, ClientName(fd)));
+ ServerFD = FDPair(fd);
+ if (ServerFD < 0)
+ {
+ ServerFD = ConnectToServer(false);
+ if (ServerFD < 0)
+ {
+ CloseConnection(fd);
+ return;
+ }
+ SetUpPair(fd, ServerFD);
+ }
+
+ n = read(fd, FDinfo[ServerFD].buffer, BUFFER_SIZE);
+ debug(4,(stderr, "read %ld bytes from Client%s\n", n, ClientName(fd)));
if (n < 0)
{
PrintTime();
@@ -484,58 +1129,18 @@ DataFromClient(fd)
if (n == 0)
{
PrintTime();
- fprintf(stdout, "Client%s --> EOF\n", ClientName(fd));
+ if (Verbose >= 0)
+ fprintf(stdout, "Client%s --> EOF\n", ClientName(fd));
CloseConnection(fd);
return;
}
- ServerFD = FDPair(fd);
- if (ServerFD < 0)
- {
- ServerFD = ConnectToServer(false);
- SetUpPair(fd, ServerFD);
- }
-
- /* write bytes from client to server, allow for server to fail */
- if (ServerFD >= 0)
- {
- long BytesToWrite = n;
- unsigned char *p = buf;
-
- while (BytesToWrite > 0)
- {
- int n1 = write (ServerFD, (char *)p, (int)BytesToWrite);
- debug(4,(stderr, "write %d bytes to Server%s\n", n1, ClientName(fd)));
- if (n1 > 0)
- {
- BytesToWrite -= n1;
- p += n1;
- }
- /*
- B U G : 4156754
-
- Write may fail with an error code of EAGAIN if
- BytesToWrite is less than PIPE_BUF, but bigger
- than available free space. This error says, wait
- and try again till PIPE is flushed and has more
- free space.
- */
- else if (errno == EAGAIN)
- {
- /* Wait for some time and try again */
- sleep (1);
- }
- else
- {
- perror("Error on write to Server");
- CloseConnection(fd);
- BytesToWrite = 0;
- }
- }
- }
+ FDinfo[ServerFD].bufcount = n;
+ FDinfo[ServerFD].bufstart = 0;
+ FlushFD (ServerFD);
/* also report the bytes to standard out */
- ReportFromClient(fd, buf, n);
+ ReportFromClient(fd, FDinfo[ServerFD].buffer, n);
}
/* ********************************************** */
@@ -546,16 +1151,23 @@ DataFromClient(fd)
we close the connection down -- don't need a server with no client. */
static void
-DataFromServer(fd)
- FD fd;
+DataFromServer (
+ FD fd)
{
- unsigned char buf[2048];
long n;
FD ClientFD;
+ Verbose = XVerbose;
+ ClientFD = FDPair(fd);
+ if (ClientFD < 0)
+ {
+ CloseConnection(fd);
+ return;
+ }
+
enterprocedure("DataFromServer");
- n = read(fd, (char *)buf, 2048);
- debug(4,(stderr, "read %d bytes from Server%s\n", n, ClientName(fd)));
+ n = read(fd, (char *)FDinfo[ClientFD].buffer, BUFFER_SIZE);
+ debug(4,(stderr, "read %ld bytes from Server%s\n", n, ClientName(fd)));
if (n < 0)
{
PrintTime();
@@ -566,56 +1178,18 @@ DataFromServer(fd)
if (n == 0)
{
PrintTime();
- fprintf(stdout, "EOF <-- Server%s\n", ClientName(fd));
+ if (Verbose >= 0)
+ fprintf(stdout, "EOF <-- Server%s\n", ClientName(fd));
CloseConnection(fd);
return;
}
- ClientFD = FDPair(fd);
- if (ClientFD < 0)
- {
- CloseConnection(fd);
- return;
- }
-
- /* write bytes from server to client, allow for client to fail */
- {
- long BytesToWrite = n;
- unsigned char *p = buf;
- while (BytesToWrite > 0)
- {
- int n1 = write (ClientFD, (char *)p, (int)BytesToWrite);
- debug(4,(stderr, "write %d bytes to Client%s\n", n1, ClientName(fd)));
- if (n1 > 0)
- {
- BytesToWrite -= n1;
- p += n1;
- }
- /*
- B U G : 4156754
-
- Write may fail with an error code of EAGAIN if
- BytesToWrite is less than PIPE_BUF, but bigger
- than available free space. This error says, wait
- and try again till PIPE is flushed and has more
- free space.
- */
- else if (errno == EAGAIN)
- {
- /* Wait for some time and try again */
- sleep (1);
- }
- else
- {
- perror("Error on write to Client");
- CloseConnection(fd);
- BytesToWrite = 0;
- }
- }
- }
+ FDinfo[ClientFD].bufcount = n;
+ FDinfo[ClientFD].bufstart = 0;
+ FlushFD (ClientFD);
/* also report the bytes to standard out */
- ReportFromServer(fd, buf, n);
+ ReportFromServer(fd, FDinfo[ClientFD].buffer, n);
}
@@ -626,59 +1200,23 @@ DataFromServer(fd)
/* */
/* ************************************************************ */
-#include <sys/types.h> /* needed by sys/socket.h and netinet/in.h */
-#include <sys/uio.h> /* for struct iovec, used by socket.h */
-#include <sys/socket.h> /* for AF_INET, SOCK_STREAM, ... */
-#include <sys/ioctl.h> /* for FIONCLEX, FIONBIO, ... */
-#include <netinet/in.h> /* struct sockaddr_in */
-#include <netdb.h> /* struct servent * and struct hostent * */
-#include <errno.h> /* for EINTR, EADDRINUSE, ... */
-extern int errno;
-
-static int ON = 1 /* used in ioctl */ ;
void
-NewConnection(fd)
- FD fd;
+NewConnection (
+ FD fd)
{
- FD ServerFD = -1;
- FD ClientFD = -1;
-
-#ifdef DNETCONN
- if (decnet_in)
- ClientFD = ConnectToDECnetClient(fd);
- else
- ClientFD = ConnectToClient(fd);
- if (decnet_server)
- ServerFD = ConnectToDECnetServer(true);
- else
- ServerFD = ConnectToServer(true);
-#endif
-#ifdef DNETSVR4
- ClientFD = ConnectToClient(fd);
- if (decnet_server) {
- if (!initialize_libdni()) {
- fprintf(stderr,"Unable to open libdni.so\n");
- exit(0);
- }
- ServerFD = ConnectToDECnetSVR4Server(true);
- }
- else
- ServerFD = ConnectToServer(true);
-#endif
-#if !(defined(DNETCONN)) && !(defined(DNETSVR4))
- ClientFD = ConnectToClient(fd);
- ServerFD = ConnectToServer(true);
+ FD ClientFD = ConnectToClient(fd);
+ FD ServerFD = ConnectToServer(true);
-#endif
SetUpPair(ClientFD, ServerFD);
}
/* ************************************************************ */
-static FD ConnectToClient(ConnectionSocket)
- FD ConnectionSocket;
+static FD
+ConnectToClient (
+ FD ConnectionSocket)
{
FD ClientFD;
XtransConnInfo trans_conn = NULL;
@@ -688,6 +1226,7 @@ static FD ConnectToClient(ConnectionSocket)
#else
struct sockaddr_in from;
int len = sizeof (from);
+ int ON = 1 /* used in ioctl */ ;
#endif
enterprocedure("ConnectToClient");
@@ -701,7 +1240,7 @@ static FD ConnectToClient(ConnectionSocket)
_X11TransSetOption(trans_conn, TRANS_NONBLOCKING, 1);
ClientFD = _X11TransGetConnectionNumber(trans_conn);
#else
- ClientFD = accept(ConnectionSocket, (struct sockaddr *)&from, &len);
+ ClientFD = AcceptConnection(ConnectionSocket);
#endif
debug(4,(stderr, "Connect To Client: FD %d\n", ClientFD));
if (ClientFD < 0 && errno == EWOULDBLOCK)
@@ -715,7 +1254,7 @@ static FD ConnectToClient(ConnectionSocket)
panic("Can't connect to Client");
}
- UsingFD(ClientFD, DataFromClient, trans_conn);
+ UsingFD(ClientFD, DataFromClient, FlushFD, trans_conn);
#ifndef USE_XTRANS
ioctl(ClientFD, FIOCLEX, 0);
ioctl(ClientFD, FIONBIO, &ON);
@@ -731,31 +1270,20 @@ static FD ConnectToClient(ConnectionSocket)
-static FD ConnectToServer(report)
- Boolean report;
+FD
+ConnectToServer (
+ Boolean report)
{
FD ServerFD;
XtransConnInfo trans_conn = NULL; /* transport connection object */
-#ifdef USE_XTRANS
- char address[256];
- int connect_stat;
- extern long ServerBasePort;
-#else
- struct sockaddr_in sin;
- struct hostent *hp;
-#endif
short port;
enterprocedure("ConnectToServer");
- /* determine the host machine for this process */
- if (ServerHostName[0] == '\0')
- (void) gethostname(ServerHostName, sizeof (ServerHostName));
- debug(4,(stderr, "try to connect on %s\n", ServerHostName));
port = GetServerport ();
- if (port == ScopePort
- && strcmp(ServerHostName, ScopeHost) == 0)
+ if (port == ScopePort &&
+ ((ServerHostName[0] == '\0') || strcmp(ServerHostName, ScopeHost) == 0))
{
char error_message[100];
sprintf(error_message, "Trying to attach to myself: %s,%d\n",
@@ -763,233 +1291,13 @@ static FD ConnectToServer(report)
panic(error_message);
}
-#ifdef USE_XTRANS
- snprintf (address, sizeof(address), "%s:%d", ServerHostName,
- port - ServerBasePort);
- if ( (trans_conn = _X11TransOpenCOTSClient(address)) == NULL ) {
- debug(1,(stderr, "OpenCOTSClient failed\n"));
- panic("Can't open connection to Server");
- }
- if ((connect_stat = _X11TransConnect(trans_conn,address)) < 0 ) {
- _X11TransClose(trans_conn);
- trans_conn = NULL;
- debug(1,(stderr, "TransConnect failed\n"));
- panic("Can't open connection to Server");
- }
-
- ServerFD = _X11TransGetConnectionNumber(trans_conn);
-#else
- /* establish a socket to the name server for this host */
- bzero((char *)&sin, sizeof(sin));
- ServerFD = socket(AF_INET, SOCK_STREAM, 0);
- if (ServerFD < 0)
- {
- perror("socket() to Server failed");
- debug(1,(stderr, "socket failed\n"));
- panic("Can't open connection to Server");
- }
- (void) setsockopt(ServerFD, SOL_SOCKET, SO_REUSEADDR, (char *) NULL, 0);
- (void) setsockopt(ServerFD, SOL_SOCKET, SO_USELOOPBACK,(char *) NULL, 0);
-#ifdef SO_DONTLINGER
- (void) setsockopt(ServerFD, SOL_SOCKET, SO_DONTLINGER, (char *) NULL, 0);
-#endif
-
- hp = gethostbyname(ServerHostName);
- if (hp == 0)
- {
- perror("gethostbyname failed");
- debug(1,(stderr, "gethostbyname failed for %s\n", ServerHostName));
- panic("Can't open connection to Server");
- }
-
- sin.sin_family = AF_INET;
- bcopy((char *)hp->h_addr, (char *)&sin.sin_addr, hp->h_length);
- sin.sin_port = htons (port);
-
- /* ******************************************************** */
- /* try to connect to Server */
-
- if (connect(ServerFD, (struct sockaddr *)&sin, sizeof(sin)) < 0)
- {
- debug(4,(stderr, "connect returns errno of %d\n", errno));
- if (errno != 0)
- if (report)
- perror("connect");
- switch (errno)
- {
- case ECONNREFUSED:
- /* experience says this is because there is no Server
- to connect to */
- close(ServerFD);
- debug(1,(stderr, "No Server\n"));
- if (report)
- warn("Can't open connection to Server");
- return(-1);
-
- default:
- close(ServerFD);
- panic("Can't open connection to Server");
- }
- }
-#endif
+ ServerFD = MakeConnection (ServerHostName, port, report, &trans_conn);
debug(4,(stderr, "Connect To Server: FD %d\n", ServerFD));
if (ServerFD >= 0)
{
- UsingFD(ServerFD, DataFromServer, trans_conn);
+ UsingFD(ServerFD, DataFromServer, FlushFD, trans_conn);
StartServerConnection(ServerFD);
}
return(ServerFD);
}
-
-#ifdef DNETSVR4
-FD ConnectToDECnetSVR4Server(report)
- Boolean report;
-{
- FD ServerFD;
- struct sockaddr_dn sdn;
- struct hostent *hp;
-
- enterprocedure("ConnectToServer");
-
- /* establish a socket to the name server for this host */
- ServerFD = socket(AF_DECnet, SOCK_STREAM, 0);
- if (ServerFD < 0)
- {
- perror("socket() to Server failed");
- debug(1,(stderr, "socket failed\n"));
- panic("Can't open connection to Server");
- }
- (void) setsockopt(ServerFD, SOL_SOCKET, SO_REUSEADDR, (char *) NULL, 0);
- (void) setsockopt(ServerFD, SOL_SOCKET, SO_USELOOPBACK,(char *) NULL, 0);
- /* determine the host machine for this process */
- initialize_libdni();
- if (ServerHostName[0] == '\0')
- (dnet_gethostname)(ServerHostName);
- debug(4,(stderr, "try to connect on %s\n", ServerHostName));
-
- hp = (struct hostent *)(dnet_gethostbyname)(ServerHostName);
- if (hp == 0)
- {
- perror("gethostbyname failed");
- debug(1,(stderr, "gethostbyname failed for %s\n", ServerHostName));
- panic("Can't open connection to Server");
- }
-
- sdn.sdn_family = AF_DECnet;
- sdn.sdn_format = DNADDR_FMT1;
- sdn.sdn_port = 0;
- sprintf (sdn.sdn_name, "X$X%d", GetServerport() );
- sdn.sdn_namelen = strlen(sdn.sdn_name);
- sdn.sdn_addr = *(u_short *)hp->h_addr_list[0];
-
- /* ******************************************************** */
- /* try to connect to Server */
-
- if (connect(ServerFD, (struct sockaddr *)&sdn, sizeof(sdn)) < 0)
- {
- debug(4,(stderr, "connect returns errno of %d\n", errno));
- if (errno != 0)
- if (report)
- perror("connect");
- switch (errno)
- {
- case ECONNREFUSED:
- /* experience says this is because there is no Server
- to connect to */
- close(ServerFD);
- debug(1,(stderr, "No Server\n"));
- if (report)
- warn("Can't open connection to Server");
- return(-1);
-
- default:
- close(ServerFD);
- panic("Can't open connection to Server");
- }
- }
-
- debug(4,(stderr, "Connect To Server: FD %d\n", ServerFD));
- if (ServerFD >= 0)
- {
- UsingFD(ServerFD, DataFromServer, NULL);
- StartServerConnection(ServerFD);
- }
- return(ServerFD);
-}
-#endif
-
-/* ********************************************** */
-/* */
-/* ********************************************** */
-
-#ifdef DNETCONN
-FD ConnectToDECnetClient(fd)
- FD fd;
-{
- struct ses_io_type sesopts;
- static SessionData sd= {0, {0, ""}};
-
- if (ioctl(fd, SES_ACCEPT, &sd) < 0) {
- fprintf(stderr,"xscope: dni: SES_ACCEPT failed\n");
- exit(-1);
- }
- UsingFD(fd, DataFromClient, NULL);
- StartClientConnection(fd);
- /* unlike sockets, dni consumes the fd on which it was listening */
- /* in order to accept new logical link requests using the same name */
- /* we must re-open the logical link device and re-supply the */
- /* appropriate access control information */
-
- SetUpDECnetConnection(GetScopePort());
-
- return(fd);
-}
-
-
-FD ConnectToDECnetServer(report)
- Boolean report;
-{
- FD fd;
- OpenBlock opblk;
- struct ses_io_type sesopts;
- struct nodeent *np;
-
- if ((fd = open("/dev/dni", O_RDWR)) < 0) {
- fprintf(stderr,"xscope: dni: open failed\n");
- exit(-1);
- }
- if (ioctl(fd, SES_GET_LINK, 0)) {
- fprintf(stderr,"xscope: dni: can't get link\n");
- exit(-1);
- }
-
- /* set nonblocking here since dni can't handle fcntls */
- sesopts.io_flags = SES_IO_NBIO;
- sesopts.io_io_signal = sesopts.io_int_signal = 0;
-
- if (ioctl(fd, SES_IO_TYPE, &sesopts) < 0) {
- fprintf(stderr,"xscope: dni: ioctl failed\n");
- exit(-1);
- }
-
- strncpy(opblk.op_node_name,ServerHostName , 6); /* dni server name */
- opblk.op_node_name[6] = '\0';
- sprintf(opblk.op_task_name, "X$X%d", GetServerport());
- opblk.op_userid[0] = '\0'; /* No one checks our id */
- opblk.op_object_nbr = 0; /* Any fields not used */
- opblk.op_account[0] = '\0'; /* should be set to zero */
- opblk.op_password[0] = '\0';
- opblk.op_opt_data.im_length = 0;
-
- if (ioctl(fd, SES_LINK_ACCESS, &opblk) == -1) {
- fprintf(stderr,"xscope: dni: cannot connect to server\n");
- exit(-1);
- }
- UsingFD(fd, DataFromServer, NULL);
- StartServerConnection(fd);
- return(fd);
-
-}
-#endif
-
diff --git a/scope.h b/scope.h
index cec14b2..3100559 100644
--- a/scope.h
+++ b/scope.h
@@ -53,7 +53,16 @@
*
********************************************** */
+#ifndef XSCOPE_SCOPE_H
+#define XSCOPE_SCOPE_H
+
+#include <X11/Xos.h>
+#include <X11/Xfuncs.h>
#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <netdb.h>
+#include <sys/param.h>
#ifdef SVR4
#include <sys/filio.h>
#endif /* SVR4 */
@@ -62,39 +71,37 @@
#define true 1
#define false 0
+#include "fd.h"
+
/* ********************************************** */
/* */
/* ********************************************** */
#define Assert(b) (b)
#define debug(n,f) (void)((debuglevel & n) ? (fprintf f,fflush(stderr)) : 0)
-short debuglevel;
+extern short debuglevel;
/* ********************************************** */
/* */
/* ********************************************** */
-short Verbose /* quiet (0) or increasingly verbose ( > 0) */ ;
+extern short Verbose /* quiet (0) or increasingly verbose ( > 0) */ ;
+extern short XVerbose;
+extern short NasVerbose;
#ifdef RAW_MODE
-short Raw /* raw data output only */ ;
+extern short Raw /* raw data output only */ ;
#else
#define Raw 0
#endif
-int ScopePort;
-char *ScopeHost;
-/* external function type declarations */
+extern int ScopePort;
+extern char *ScopeHost;
-extern void *Malloc (long n);
-#ifdef X_NOT_STDC_ENV
-extern char *strcpy();
-extern char *sprintf();
-#else
-#include <stdlib.h>
-#include <string.h>
-#endif
-extern char *ClientName();
+extern int Interrupt, SingleStep, BreakPoint;
+
+extern char ServerHostName[MAXHOSTNAMELEN];
+extern char AudioServerHostName[MAXHOSTNAMELEN];
/* ********************************************** */
/* */
@@ -102,3 +109,29 @@ extern char *ClientName();
#include "fd.h"
#include "proto.h"
+
+#define BUFFER_SIZE (1024 * 32)
+
+struct fdinfo
+{
+ Boolean Server;
+ long ClientNumber;
+ FD pair;
+ unsigned char buffer[BUFFER_SIZE];
+ int bufcount;
+ int bufstart;
+ int buflimit; /* limited writes */
+ int bufdelivered; /* total bytes delivered */
+ Boolean writeblocked;
+};
+
+extern struct fdinfo FDinfo[StaticMaxFD];
+extern int littleEndian;
+extern char HandleSIGUSR1;
+extern char Leader[];
+extern long ServerBasePort;
+extern char ScopeEnabled;
+extern long TranslateText;
+
+
+#endif /* XSCOPE_SCOPE_H */
diff --git a/server.c b/server.c
index 076648d..d04c335 100644
--- a/server.c
+++ b/server.c
@@ -61,7 +61,10 @@
#define bcopy(s,d,l) memmove(d,s,l)
#endif
-static void ProcessBuffer(FD fd, unsigned char *buf, long n);
+struct TypeDef TD[MaxTypes];
+unsigned char RBf[2];
+unsigned char SBf[4];
+struct ConnState CS[StaticMaxFD];
/* ************************************************************ */
/* */
@@ -69,27 +72,36 @@ static void ProcessBuffer(FD fd, unsigned char *buf, long n);
/* ************************************************************ */
void
-ReportFromClient(fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+ReportFromClient(
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
- PrintTime();
- fprintf(stdout, "Client%s --> %4d %s\n",
- ClientName(fd), n, (n == 1 ? "byte" : "bytes"));
- ProcessBuffer(fd, buf, n);
+ if (Verbose > 0)
+ {
+ if (ScopeEnabled) {
+ PrintTime();
+ fprintf(stdout, "Client%s --> %4ld %s\n",
+ ClientName(fd), n, (n == 1 ? "byte" : "bytes"));
+ }
+ }
+ ProcessBuffer(fd, buf, n);
}
void
-ReportFromServer(fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+ReportFromServer (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
- PrintTime();
- fprintf(stdout, "\t\t\t\t\t%4d %s <-- X11 Server%s\n",
- n, (n == 1 ? "byte" : "bytes"), ClientName(fd));
- ProcessBuffer(fd, buf, n);
+ if (Verbose > 0) {
+ if (ScopeEnabled) {
+ PrintTime();
+ fprintf(stdout, "\t\t\t\t\t%4ld %s <-- X11 Server%s\n",
+ n, (n == 1 ? "byte" : "bytes"), ClientName(fd));
+ }
+ }
+ ProcessBuffer(fd, buf, n);
}
@@ -98,7 +110,6 @@ ReportFromServer(fd, buf, n)
/* */
/* ************************************************************ */
-#include <sys/time.h> /* for struct timeval * */
static long ZeroTime1 = -1;
static long ZeroTime2 = -1;
static struct timeval tp;
@@ -106,7 +117,7 @@ static struct timeval tp;
/* print the time since we started in hundredths (1/100) of seconds */
void
-PrintTime()
+PrintTime(void)
{
static long lastsec = 0;
long sec /* seconds */ ;
@@ -127,7 +138,7 @@ PrintTime()
hsec += 100;
sec -= 1;
}
- fprintf(stdout, "%2d.%02ld: ", sec, hsec);
+ fprintf(stdout, "%2ld.%02ld: ", sec, hsec);
}
/* ************************************************************ */
@@ -139,39 +150,52 @@ PrintTime()
requests as various built-in types. The following routines
support the types built into X11 */
-long pad (n)
- long n;
+long
+pad (
+ long n)
{
/* round up to next multiple of 4 */
return((n + 3) & ~0x3);
}
-static int littleEndian;
-
-unsigned long ILong (buf)
- unsigned char buf[];
+unsigned long
+ILong (
+ const unsigned char buf[])
{
+ /* check for byte-swapping */
if (littleEndian)
return((((((buf[3] << 8) | buf[2]) << 8) | buf[1]) << 8) | buf[0]);
return((((((buf[0] << 8) | buf[1]) << 8) | buf[2]) << 8) | buf[3]);
}
-unsigned short IShort (buf)
-unsigned char buf[];
+unsigned short
+IShort (
+ const unsigned char buf[])
{
+ /* check for byte-swapping */
if (littleEndian)
return (buf[1] << 8) | buf[0];
return((buf[0] << 8) | buf[1]);
}
-unsigned short IByte (buf)
-unsigned char buf[];
+unsigned short
+IChar2B (
+ const unsigned char buf[])
+{
+ /* CHAR2B is like an IShort, but not byte-swapped */
+ return((buf[0] << 8) | buf[1]);
+}
+
+unsigned short
+IByte (
+ const unsigned char buf[])
{
return(buf[0]);
}
-Boolean IBool(buf)
- unsigned char buf[];
+Boolean
+IBool (
+ const unsigned char buf[])
{
if (buf[0] != 0)
return(true);
@@ -189,10 +213,10 @@ Boolean IBool(buf)
interpret. The following procedures provide this ability */
static void
-SaveBytes(fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+SaveBytes (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
/* check if there is enough space to hold the bytes we want */
if (CS[fd].NumberofSavedBytes + n > CS[fd].SizeofSavedBytes)
@@ -216,9 +240,9 @@ SaveBytes(fd, buf, n)
}
static void
-RemoveSavedBytes(fd, n)
- FD fd;
- long n;
+RemoveSavedBytes (
+ FD fd,
+ long n)
{
/* check if all bytes are being removed -- easiest case */
if (CS[fd].NumberofSavedBytes <= n)
@@ -246,15 +270,13 @@ RemoveSavedBytes(fd, n)
/* following are the possible values for ByteProcessing */
/* forward declarations */
-static long StartSetUpMessage(FD fd, unsigned char *buf, long n);
-static long FinishSetUpMessage(FD fd, unsigned char *buf, long n);
-static long StartRequest(FD fd, unsigned char *buf, long n);
-static long FinishRequest(FD fd, unsigned char *buf, long n);
+static long FinishSetUpMessage(FD fd, const unsigned char *buf, long n);
+static long StartRequest(FD fd, const unsigned char *buf, long n);
+static long FinishRequest(FD fd, const unsigned char *buf, long n);
-static long StartSetUpReply(FD fd, unsigned char *buf, long n);
-static long FinishSetUpReply(FD fd, unsigned char *buf, long n);
-static long ServerPacket(FD fd, unsigned char *buf, long n);
-static long FinishReply(FD fd, unsigned char *buf, long n);
+static long FinishSetUpReply(FD fd, const unsigned char *buf, long n);
+static long ServerPacket(FD fd, const unsigned char *buf, long n);
+static long FinishReply(FD fd, const unsigned char *buf, long n);
/* ************************************************************ */
@@ -262,18 +284,24 @@ static long FinishReply(FD fd, unsigned char *buf, long n);
/* */
/* ************************************************************ */
-static void
-ProcessBuffer(fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+int littleEndian;
+
+void
+ProcessBuffer (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
- unsigned char *BytesToProcess;
+ const unsigned char *BytesToProcess;
long NumberofUsedBytes;
/* as long as we have enough bytes to do anything -- do it */
- littleEndian = CS[fd].littleEndian;
+ if (Verbose > 4)
+ {
+ fprintf (stdout, "\nRead from fd %d\n", fd);
+ DumpHexBuffer (buf, n);
+ }
while (CS[fd].NumberofSavedBytes + n >= CS[fd].NumberofBytesNeeded)
{
/*
@@ -323,6 +351,7 @@ ProcessBuffer(fd, buf, n)
the state we are in. The processing routine should return the
number of bytes that it actually used.
*/
+ littleEndian = CS[fd].littleEndian;
NumberofUsedBytes = (*CS[fd].ByteProcessing)
(fd, BytesToProcess, CS[fd].NumberofBytesNeeded);
@@ -333,6 +362,7 @@ ProcessBuffer(fd, buf, n)
if (NumberofUsedBytes > 0)
{
+ CS[fd].NumberofBytesProcessed += NumberofUsedBytes;
if (CS[fd].NumberofSavedBytes > 0)
RemoveSavedBytes(fd, NumberofUsedBytes);
else
@@ -345,9 +375,15 @@ ProcessBuffer(fd, buf, n)
}
} /* end of while (NumberofSavedBytes + n >= NumberofBytesNeeded) */
+ if (Verbose > 3)
+ fprintf (stdout, "Have %ld need %ld\n",
+ CS[fd].NumberofSavedBytes + n,
+ CS[fd].NumberofBytesNeeded);
/* not enough bytes -- just save the new bytes for more later */
if (n > 0)
+ {
SaveBytes(fd, buf, n);
+ }
return;
}
@@ -363,14 +399,68 @@ ProcessBuffer(fd, buf, n)
*/
void
-StartClientConnection(fd)
- FD fd;
+SetBufLimit (
+ FD fd)
+{
+ int ServerFD = FDPair (fd);
+ FDinfo[ServerFD].buflimit = (CS[fd].NumberofBytesProcessed +
+ CS[fd].NumberofBytesNeeded);
+}
+
+void
+ClearBufLimit (
+ FD fd)
+{
+ int ServerFD = FDPair (fd);
+ FDinfo[ServerFD].buflimit = -1;
+}
+
+static void
+StartStuff (
+ FD fd)
+{
+ if (BreakPoint)
+ {
+ int ServerFD = FDPair (fd);
+ FDinfo[ServerFD].buflimit = (CS[fd].NumberofBytesProcessed +
+ CS[fd].NumberofBytesNeeded);
+ FlushFD (ServerFD);
+ }
+}
+
+static void
+FinishStuff (
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ if (BreakPoint)
+ {
+ int ServerFD = FDPair (fd);
+
+ FlushFD (ServerFD);
+ if (SingleStep)
+ ReadCommands ();
+ else if (BreakPoint)
+ TestBreakPoints (buf, n);
+ if (!BreakPoint)
+ {
+ FDinfo[ServerFD].buflimit = -1;
+ FlushFD (ServerFD);
+ }
+ }
+}
+
+void
+StartClientConnection (
+ FD fd)
{
enterprocedure("StartClientConnection");
/* when a new connection is started, we have no saved bytes */
CS[fd].SavedBytes = NULL;
CS[fd].SizeofSavedBytes = 0;
CS[fd].NumberofSavedBytes = 0;
+ CS[fd].NumberofBytesProcessed = 0;
/* when a new connection is started, we have no reply Queue */
FlushReplyQ(fd);
@@ -381,11 +471,12 @@ StartClientConnection(fd)
/* we need 12 bytes to start a SetUp message */
CS[fd].ByteProcessing = StartSetUpMessage;
CS[fd].NumberofBytesNeeded = 12;
+ StartStuff (fd);
}
void
-StopClientConnection(fd)
- FD fd;
+StopClientConnection (
+ FD fd)
{
enterprocedure("StopClientConnection");
/* when a new connection is stopped, discard the old buffer */
@@ -394,10 +485,11 @@ StopClientConnection(fd)
Free((char*)CS[fd].SavedBytes);
}
-static long StartSetUpMessage (fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+long
+StartSetUpMessage (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
unsigned short namelength;
unsigned short datalength;
@@ -409,21 +501,26 @@ static long StartSetUpMessage (fd, buf, n)
can't process the first 12 bytes until we get all of them, so
return zero bytes used, and increase the number of bytes needed
*/
-
+ CS[fd].littleEndian = (buf[0] == 'l');
+ CS[ServerHalf(fd)].littleEndian = CS[fd].littleEndian;
+ littleEndian = CS[fd].littleEndian;
+
namelength = IShort(&buf[6]);
datalength = IShort(&buf[8]);
CS[fd].ByteProcessing = FinishSetUpMessage;
CS[fd].NumberofBytesNeeded = n
+ pad((long)namelength) + pad((long)datalength);
- debug(8,(stderr, "need %d bytes to finish startup\n",
+ debug(8,(stderr, "need %ld bytes to finish startup\n",
CS[fd].NumberofBytesNeeded - n));
+ StartStuff (fd);
return(0);
}
-static long FinishSetUpMessage (fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+static long
+FinishSetUpMessage (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
enterprocedure("FinishSetUpMessage");
if( Raw || (Verbose > 3) )
@@ -431,43 +528,76 @@ static long FinishSetUpMessage (fd, buf, n)
CS[fd].littleEndian = (buf[0] == 'l');
CS[ServerHalf(fd)].littleEndian = CS[fd].littleEndian;
littleEndian = CS[fd].littleEndian;
- PrintSetUpMessage(buf);
+ if (ScopeEnabled)
+ PrintSetUpMessage(buf);
/* after a set-up message, we expect a string of requests */
CS[fd].ByteProcessing = StartRequest;
CS[fd].NumberofBytesNeeded = 4;
+ FinishStuff (fd, buf, n);
return(n);
}
-
-static long StartRequest (fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+static long
+StartBigRequest (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
- unsigned short requestlength;
- enterprocedure("StartRequest");
+ enterprocedure("StartBigRequest");
- /* bytes 0,1 are ignored now; bytes 2,3 tell us the request length */
- requestlength = IShort(&buf[2]);
+ /* bytes 0-3 are ignored now; bytes 4-8 tell us the request length */
+ CS[fd].requestLen = ILong(&buf[4]);
CS[fd].ByteProcessing = FinishRequest;
- CS[fd].NumberofBytesNeeded = 4 * requestlength;
- debug(8,(stderr, "need %d more bytes to finish request\n",
+ CS[fd].NumberofBytesNeeded = 4 * CS[fd].requestLen;
+ debug(8,(stderr, "need %ld more bytes to finish request\n",
CS[fd].NumberofBytesNeeded - n));
+ StartStuff (fd);
return(0);
}
+static long
+StartRequest (
+ FD fd,
+ const unsigned char *buf,
+ long n)
+{
+ enterprocedure("StartRequest");
-static long FinishRequest (fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+ /* bytes 0,1 are ignored now; bytes 2,3 tell us the request length */
+ CS[fd].requestLen = IShort(&buf[2]);
+ if (CS[fd].requestLen == 0 && CS[fd].bigreqEnabled)
+ {
+ CS[fd].ByteProcessing = StartBigRequest;
+ CS[fd].NumberofBytesNeeded = 8;
+ }
+ else
+ {
+ if (CS[fd].requestLen == 0)
+ CS[fd].requestLen = 1;
+ CS[fd].ByteProcessing = FinishRequest;
+ CS[fd].NumberofBytesNeeded = 4 * CS[fd].requestLen;
+ debug(8,(stderr, "need %ld more bytes to finish request\n",
+ CS[fd].NumberofBytesNeeded - n));
+ }
+ StartStuff (fd);
+ return(0);
+}
+
+
+static long
+FinishRequest (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
enterprocedure("FinishRequest");
- DecodeRequest(fd, buf, n);
CS[fd].ByteProcessing = StartRequest;
CS[fd].NumberofBytesNeeded = 4;
+ if (ScopeEnabled)
+ DecodeRequest(fd, buf, n);
+ FinishStuff (fd, buf, n);
return(n);
}
@@ -477,14 +607,15 @@ static long FinishRequest (fd, buf, n)
/* ************************************************************ */
void
-StartServerConnection(fd)
- FD fd;
+StartServerConnection (
+ FD fd)
{
enterprocedure("StartServerConnection");
/* when a new connection is started, we have no saved bytes */
CS[fd].SavedBytes = NULL;
CS[fd].SizeofSavedBytes = 0;
CS[fd].NumberofSavedBytes = 0;
+ CS[fd].NumberofBytesProcessed = 0;
/* when a new connection is started, we have no reply Queue */
FlushReplyQ(fd);
@@ -495,8 +626,8 @@ StartServerConnection(fd)
}
void
-StopServerConnection(fd)
- FD fd;
+StopServerConnection (
+ FD fd)
{
enterprocedure("StopServerConnection");
/* when a new connection is stopped, discard the old buffer */
@@ -505,11 +636,11 @@ StopServerConnection(fd)
Free((char *)CS[fd].SavedBytes);
}
-static long
-StartSetUpReply (fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+long
+StartSetUpReply (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
unsigned short replylength;
@@ -517,21 +648,22 @@ StartSetUpReply (fd, buf, n)
replylength = IShort(&buf[6]);
CS[fd].ByteProcessing = FinishSetUpReply;
CS[fd].NumberofBytesNeeded = n + 4 * replylength;
- debug(8,(stderr, "need %d bytes to finish startup reply\n",
+ debug(8,(stderr, "need %ld bytes to finish startup reply\n",
CS[fd].NumberofBytesNeeded - n));
return(0);
}
static long
-FinishSetUpReply (fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+FinishSetUpReply (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
enterprocedure("FinishSetUpReply");
if( Raw || (Verbose > 3) )
DumpItem("Server Connect", fd, buf, n) ;
- PrintSetUpReply(buf);
+ if (ScopeEnabled)
+ PrintSetUpReply(buf);
CS[fd].ByteProcessing = ServerPacket;
CS[fd].NumberofBytesNeeded = 32;
return(n);
@@ -540,44 +672,38 @@ FinishSetUpReply (fd, buf, n)
/* ************************************************************ */
static long
-ErrorPacket (fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+ErrorPacket (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
- fprintf(stdout, "Error: ");
- DecodeError(fd, buf, n);
CS[fd].ByteProcessing = ServerPacket;
CS[fd].NumberofBytesNeeded = 32;
+ DecodeError(fd, buf, n);
return(n);
}
static long
-EventPacket (fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+EventPacket (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
- DecodeEvent(fd, buf, n);
CS[fd].ByteProcessing = ServerPacket;
CS[fd].NumberofBytesNeeded = 32;
+ if (ScopeEnabled)
+ DecodeEvent(fd, buf, n);
return(n);
}
static long
-ReplyPacket (fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+ReplyPacket (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
- /*
- B U G: 4242329
- fix for GetImage packet, where data length is too long
- to handle using a short field.
- */
-
long replylength;
replylength = ILong(&buf[4]);
@@ -594,15 +720,15 @@ ReplyPacket (fd, buf, n)
CS[fd].ByteProcessing = FinishReply;
CS[fd].NumberofBytesNeeded = n + 4 * replylength;
- debug(8,(stderr, "need %d bytes to finish reply\n", (4 * replylength)));
+ debug(8,(stderr, "need %ld bytes to finish reply\n", (4 * replylength)));
return(0);
}
static long
-ServerPacket (fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+ServerPacket (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
short PacketType;
enterprocedure("ServerPacket");
@@ -615,14 +741,23 @@ ServerPacket (fd, buf, n)
return(EventPacket(fd, buf, n));
}
-long FinishReply (fd, buf, n)
- FD fd;
- unsigned char *buf;
- long n;
+long
+FinishReply (
+ FD fd,
+ const unsigned char *buf,
+ long n)
{
- enterprocedure("FinishReply");
- DecodeReply(fd, buf, n);
CS[fd].ByteProcessing = ServerPacket;
CS[fd].NumberofBytesNeeded = 32;
+ enterprocedure("FinishReply");
+ if (ScopeEnabled)
+ DecodeReply(fd, buf, n);
return(n);
}
+
+long
+GetXRequestFromName (
+ const char *name)
+{
+ return GetEValue (REQUEST, name);
+}
diff --git a/shmscope.h b/shmscope.h
new file mode 100644
index 0000000..6d56f4c
--- /dev/null
+++ b/shmscope.h
@@ -0,0 +1,30 @@
+#ifndef _MITSHMSCOPE_H_
+#define _MITSHMSCOPE_H_
+
+#define MITSHMREQUESTHEADER "MITSHMREQUEST"
+#define MITSHMREPLYHEADER "MITSHMREPLY"
+
+/*
+ To aid in making the choice between level 1 and level 2, we
+ define the following define, which does not print relatively
+ unimportant fields.
+*/
+
+#define printfield(a,b,c,d,e) if (Verbose > 1) PrintField(a,b,c,d,e)
+
+extern unsigned char MITSHMRequest;
+extern unsigned char MITSHMError;
+extern unsigned char MITSHMEvent;
+
+extern void MitshmQueryVersion (FD fd, const unsigned char *buf);
+extern void MitshmQueryVersionReply (FD fd, const unsigned char *buf);
+extern void MitshmAttach (FD fd, const unsigned char *buf);
+extern void MitshmDetach (FD fd, const unsigned char *buf);
+extern void MitshmPutImage (FD fd, const unsigned char *buf);
+extern void MitshmGetImage (FD fd, const unsigned char *buf);
+extern void MitshmGetImageReply (FD fd, const unsigned char *buf);
+extern void MitshmCreatePixmap (FD fd, const unsigned char *buf);
+extern void MitshmShmSegError (FD fd, const unsigned char *buf);
+
+#endif
+
diff --git a/table11.c b/table11.c
index eaac5af..56fe988 100644
--- a/table11.c
+++ b/table11.c
@@ -66,21 +66,21 @@ static void InitSetTypes(void);
static void InitRecordTypes(void);
static void InitValuesTypes(void);
-static int PrintCHAR2B(unsigned char *buf);
-static int PrintPOINT(unsigned char *buf);
-static int PrintRECTANGLE(unsigned char *buf);
-static int PrintARC(unsigned char *buf);
-static int PrintHOST(unsigned char *buf);
-static int PrintTIMECOORD(unsigned char *buf);
-static int PrintFONTPROP(unsigned char *buf);
-static int PrintCHARINFO(unsigned char *buf);
-static int PrintSEGMENT(unsigned char *buf);
-static int PrintCOLORITEM(unsigned char *buf);
-static int PrintRGB(unsigned char *buf);
-static int PrintFORMAT(unsigned char *buf);
-static int PrintSCREEN(unsigned char *buf);
-static int PrintDEPTH(unsigned char *buf);
-static int PrintVISUALTYPE(unsigned char *buf);
+static int PrintCHAR2B(const unsigned char *buf);
+static int PrintPOINT(const unsigned char *buf);
+static int PrintRECTANGLE(const unsigned char *buf);
+static int PrintARC(const unsigned char *buf);
+static int PrintHOST(const unsigned char *buf);
+static int PrintTIMECOORD(const unsigned char *buf);
+static int PrintFONTPROP(const unsigned char *buf);
+static int PrintCHARINFO(const unsigned char *buf);
+static int PrintSEGMENT(const unsigned char *buf);
+static int PrintCOLORITEM(const unsigned char *buf);
+static int PrintRGB(const unsigned char *buf);
+static int PrintFORMAT(const unsigned char *buf);
+static int PrintSCREEN(const unsigned char *buf);
+static int PrintDEPTH(const unsigned char *buf);
+static int PrintVISUALTYPE(const unsigned char *buf);
/*
To initialize for the X11 protocol, we need to create data structures
@@ -111,7 +111,7 @@ static int PrintVISUALTYPE(unsigned char *buf);
*/
void
-InitializeX11()
+InitializeX11 (void)
{
InitReplyQ();
@@ -122,6 +122,105 @@ InitializeX11()
InitRecordTypes();
}
+#define HASH_SIZE 997
+
+ValuePtr buckets[HASH_SIZE];
+
+#define HASH(key) ((key) % HASH_SIZE)
+
+ValuePtr
+GetValueRec (
+ unsigned long key)
+{
+ ValuePtr *bucket, value;
+
+ bucket = &buckets[HASH(key)];
+ for (value = *bucket; value; value = value->next)
+ {
+ if (value->key == key)
+ return value;
+ }
+ return NULL;
+}
+
+void
+CreateValueRec (
+ unsigned long key,
+ int size,
+ const unsigned long *def)
+{
+ ValuePtr *bucket, value;
+ int i;
+
+ bucket = &buckets[HASH(key)];
+ value = (ValuePtr) malloc (sizeof (ValueRec) + size * sizeof (unsigned long));
+ if (!value)
+ return;
+ value->values = (unsigned long *) (value + 1);
+ for (i = 0; i < size; i++)
+ value->values[i] = ILong((const unsigned char *) (def + i));
+ value->size = size;
+ value->key = key;
+ value->next = *bucket;
+ *bucket = value;
+}
+
+void
+DeleteValueRec (
+ unsigned long key)
+{
+ ValuePtr *bucket, value;
+
+ for (bucket = &buckets[HASH(key)]; value = *bucket; bucket = &value->next)
+ {
+ if (value->key == key)
+ {
+ *bucket = value->next;
+ free (value);
+ return;
+ }
+ }
+}
+
+void
+SetValueRec (
+ unsigned long key,
+ const unsigned char *control,
+ short clength,
+ short ctype,
+ const unsigned char *values)
+{
+ long cmask;
+ struct ValueListEntry *p;
+ ValuePtr value;
+ int i;
+
+ value = GetValueRec (key);
+ if (!value)
+ return;
+ /* first get the control mask */
+ if (clength == 1)
+ cmask = IByte(control);
+ else if (clength == 2)
+ cmask = IShort(control);
+ else
+ cmask = ILong(control);
+
+ /* now if it is zero, ignore and return */
+ if (cmask == 0)
+ return;
+ /* there are bits in the controlling bitmask, figure out which */
+ /* the ctype is a set type, so this code is similar to PrintSET */
+ for (p = TD[ctype].ValueList, i = 0; p != NULL; p = p->Next, i++)
+ {
+ if ((p->Value & cmask) != 0)
+ {
+ memcpy (&value->values[i], values, sizeof (unsigned long));
+ values += 4;
+ }
+ }
+}
+
/* ************************************************************ */
/* */
/* */
@@ -129,12 +228,12 @@ InitializeX11()
/* define the various types */
-static TYPE
-DefineType(typeid, class, name, printproc)
- short typeid;
- short class;
- char *name;
- int (*printproc)(unsigned char *);
+TYPE
+DefineType (
+ short typeid,
+ short class,
+ const char *name,
+ int (*printproc)(const unsigned char *))
{
TD[typeid].Name = name;
TD[typeid].Type = class;
@@ -146,11 +245,11 @@ DefineType(typeid, class, name, printproc)
/* ************************************************************ */
/* define an Enumerated Value (or a Set Value) */
-static void
-DefineEValue(type, value, name)
- TYPE type;
- long value;
- char *name;
+void
+DefineEValue(
+ TYPE type,
+ long value,
+ const char *name)
{
struct ValueListEntry *p;
@@ -177,6 +276,25 @@ DefineEValue(type, value, name)
}
}
+long
+GetEValue (
+ short typeid,
+ const char *name)
+{
+ TYPE p;
+ struct ValueListEntry *v;
+
+ if (typeid < 0 || MaxTypes <= typeid)
+ return -1;
+ p = &TD[typeid];
+ if (!p)
+ return -2;
+ for (v = p->ValueList; v; v = v->Next)
+ if (!strcmp (name, v->Name))
+ return v->Value;
+ return -3;
+}
+
/* ************************************************************ */
/* a Values list is like an enumerated Value, but has a type and length
in addition to a value and name. It is used to print a Values List */
@@ -185,8 +303,9 @@ DefineEValue(type, value, name)
we have an associated value. We need to know the length and type of the
associated value for each bit */
-static void
-DefineValues(TYPE type, long value, short length, short ctype, char *name)
+void
+DefineValues(TYPE type, long value, short length, short ctype,
+ const char *name)
{
struct ValueListEntry *p;
@@ -219,7 +338,7 @@ DefineValues(TYPE type, long value, short length, short ctype, char *name)
/* ************************************************************ */
static void
-InitBuiltInTypes()
+InitBuiltInTypes (void)
{
(void) DefineType(INT8, BUILTIN, "INT8", PrintINT8);
(void) DefineType(INT16, BUILTIN, "INT16", PrintINT16);
@@ -264,7 +383,7 @@ InitBuiltInTypes()
/* ************************************************************ */
static void
-InitEnumeratedTypes()
+InitEnumeratedTypes (void)
{
TYPE p;
@@ -765,7 +884,7 @@ InitEnumeratedTypes()
/* ************************************************************ */
static void
-InitSetTypes()
+InitSetTypes (void)
{
TYPE p;
@@ -869,8 +988,8 @@ InitSetTypes()
/* Print Routines for builtin record types */
static int
-PrintCHAR2B(buf)
- unsigned char *buf;
+PrintCHAR2B (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, CARD8, "byte1");
PrintField(buf, 1, 1, CARD8, "byte2");
@@ -878,8 +997,8 @@ PrintCHAR2B(buf)
}
static int
-PrintPOINT(buf)
- unsigned char *buf;
+PrintPOINT (
+ const unsigned char *buf)
{
PrintField(buf, 0, 2, INT16, "x");
PrintField(buf, 2, 2, INT16, "y");
@@ -887,8 +1006,8 @@ PrintPOINT(buf)
}
static int
-PrintRECTANGLE(buf)
- unsigned char *buf;
+PrintRECTANGLE (
+ const unsigned char *buf)
{
PrintField(buf, 0, 2, INT16, "x");
PrintField(buf, 2, 2, INT16, "y");
@@ -898,8 +1017,8 @@ PrintRECTANGLE(buf)
}
static int
-PrintARC(buf)
- unsigned char *buf;
+PrintARC (
+ const unsigned char *buf)
{
PrintField(buf, 0, 2, INT16, "x");
PrintField(buf, 2, 2, INT16, "y");
@@ -911,8 +1030,8 @@ PrintARC(buf)
}
static int
-PrintHOST(buf)
- unsigned char *buf;
+PrintHOST (
+ const unsigned char *buf)
{
short n;
PrintField(buf, 0, 1, HOSTFAMILY, "family");
@@ -951,8 +1070,8 @@ PrintHOST(buf)
}
static int
-PrintTIMECOORD(buf)
- unsigned char *buf;
+PrintTIMECOORD (
+ const unsigned char *buf)
{
PrintField(buf, 0, 4, TIMESTAMP, "time");
PrintField(buf, 4, 2, CARD16, "x");
@@ -961,8 +1080,8 @@ PrintTIMECOORD(buf)
}
static int
-PrintFONTPROP(buf)
- unsigned char *buf;
+PrintFONTPROP (
+ const unsigned char *buf)
{
PrintField(buf, 0, 4, ATOM, "name");
PrintField(buf, 4, 4, INT32, "value");
@@ -970,8 +1089,8 @@ PrintFONTPROP(buf)
}
static int
-PrintCHARINFO(buf)
- unsigned char *buf;
+PrintCHARINFO (
+ const unsigned char *buf)
{
PrintField(buf, 0, 2, INT16, "left-side-bearing");
PrintField(buf, 2, 2, INT16, "right-side-bearing");
@@ -983,8 +1102,8 @@ PrintCHARINFO(buf)
}
static int
-PrintSEGMENT(buf)
- unsigned char *buf;
+PrintSEGMENT (
+ const unsigned char *buf)
{
PrintField(buf, 0, 2, INT16, "x1");
PrintField(buf, 2, 2, INT16, "y1");
@@ -994,8 +1113,8 @@ PrintSEGMENT(buf)
}
static int
-PrintCOLORITEM(buf)
- unsigned char *buf;
+PrintCOLORITEM (
+ const unsigned char *buf)
{
PrintField(buf, 0, 4, CARD32, "pixel");
PrintField(buf, 4, 2, CARD16, "red");
@@ -1006,8 +1125,8 @@ PrintCOLORITEM(buf)
}
static int
-PrintRGB(buf)
- unsigned char *buf;
+PrintRGB (
+ const unsigned char *buf)
{
PrintField(buf, 0, 2, CARD16, "red");
PrintField(buf, 2, 2, CARD16, "green");
@@ -1016,8 +1135,8 @@ PrintRGB(buf)
}
static int
-PrintFORMAT(buf)
- unsigned char *buf;
+PrintFORMAT (
+ const unsigned char *buf)
{
PrintField(buf, 0, 1, CARD8, "depth");
PrintField(buf, 1, 1, CARD8, "bits-per-pixel");
@@ -1026,8 +1145,8 @@ PrintFORMAT(buf)
}
static int
-PrintSCREEN(buf)
- unsigned char *buf;
+PrintSCREEN (
+ const unsigned char *buf)
{
short n /* number of elements in List of DEPTH */ ;
long m /* length (in bytes) of List of DEPTH */ ;
@@ -1054,8 +1173,8 @@ PrintSCREEN(buf)
}
static int
-PrintDEPTH(buf)
- unsigned char *buf;
+PrintDEPTH (
+ const unsigned char *buf)
{
short n /* number of elements in List of VISUALTYPE */ ;
short m /* length (in bytes) of List of VISUALTYPE */ ;
@@ -1068,8 +1187,8 @@ PrintDEPTH(buf)
}
static int
-PrintVISUALTYPE(buf)
- unsigned char *buf;
+PrintVISUALTYPE (
+ const unsigned char *buf)
{
PrintField(buf, 0, 4, VISUALID, "visual-id");
PrintField(buf, 4, 1, COLORCLASS, "class");
@@ -1084,7 +1203,7 @@ PrintVISUALTYPE(buf)
/* ************************************************************ */
static void
-InitRecordTypes()
+InitRecordTypes (void)
{
(void) DefineType(CHAR2B, RECORD, "CHAR2B", PrintCHAR2B);
(void) DefineType(POINT, RECORD, "POINT", PrintPOINT);
@@ -1111,7 +1230,7 @@ InitRecordTypes()
/* ************************************************************ */
static void
-InitValuesTypes()
+InitValuesTypes (void)
{
TYPE p;
diff --git a/tablenas.c b/tablenas.c
new file mode 100644
index 0000000..c6d354d
--- /dev/null
+++ b/tablenas.c
@@ -0,0 +1,29 @@
+/*
+ * $NCDOr$
+ *
+ * Copyright 1996 Network Computing Devices
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of NCD. not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. NCD. makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * NCD. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL NCD.
+ * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Keith Packard, Network Computing Devices
+ */
+
+InitializeAudio ()
+{
+ ;
+}
diff --git a/wcpscope.h b/wcpscope.h
new file mode 100644
index 0000000..6556f6f
--- /dev/null
+++ b/wcpscope.h
@@ -0,0 +1,54 @@
+/*
+ * $NCDOr$
+ *
+ * Copyright 1996 Network Computing Devices
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of NCD. not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. NCD. makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * NCD. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL NCD.
+ * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Keith Packard, Network Computing Devices
+ */
+
+#ifndef _WCPSCOPE_H_
+#define _WCPSCOPE_H_
+
+#define WCPREQUESTHEADER "WCPREQUEST"
+#define WCPREPLYHEADER "WCPREPLY"
+
+/*
+ To aid in making the choice between level 1 and level 2, we
+ define the following define, which does not print relatively
+ unimportant fields.
+*/
+
+#define printfield(a,b,c,d,e) if (Verbose > 1) PrintField(a,b,c,d,e)
+
+extern unsigned char WCPRequest;
+extern unsigned char WCPError;
+
+extern void WcpQueryVersion (FD fd, const unsigned char *buf);
+extern void WcpQueryVersionReply (FD fd, const unsigned char *buf);
+extern void WcpPutImage (FD fd, const unsigned char *buf);
+extern void WcpGetImage (FD fd, const unsigned char *buf);
+extern void WcpGetImageReply (FD fd, const unsigned char *buf);
+extern void WcpCreateColorCursor (FD fd, const unsigned char *buf);
+extern void WcpCreateLut (FD fd, const unsigned char *buf);
+extern void WcpFreeLut (FD fd, const unsigned char *buf);
+extern void WcpCopyArea (FD fd, const unsigned char *buf);
+
+#endif
+
diff --git a/x11.h b/x11.h
index 175250b..db5abe7 100644
--- a/x11.h
+++ b/x11.h
@@ -216,8 +216,51 @@
#define ERROR 119
#define EVENT 120
-#define MaxTypes 128
-
+#define LBXREQUEST 121
+#define LBXREPLY 122
+#define LBXEVENT 123
+#define LBXERROR 124
+
+#define NASREQUEST 125
+#define NASREPLY 126
+#define NASEVENT 127
+#define NASERROR 128
+
+#define WCPREQUEST 129
+#define WCPREPLY 130
+#define WCPERROR 131
+
+#define RENDERREQUEST 132
+#define RENDERREPLY 133
+#define RENDERERROR 134
+
+#define PICTURE 135
+#define PICTFORMAT 136
+#define PICTURE_BITMASK 137
+#define PICTOP 138
+#define GLYPHSET 139
+#define RENDERCOLOR 140
+#define PICTFORMINFO 141
+#define TRAPEZOID 142
+#define TRIANGLE 143
+#define POINTFIXED 144
+#define FIXED 145
+
+#define RANDRREQUEST 150
+#define RANDRREPLY 151
+#define RANDRERROR 152
+
+#define MITSHMREQUEST 153
+#define MITSHMREPLY 154
+#define MITSHMEVENT 155
+#define MITSHMERROR 156
+
+#define BIGREQREQUEST 157
+#define BIGREQREPLY 158
+
+#define MaxTypes 256
+
+extern char ScopeEnabled;
/* ************************************************************ */
/* */
@@ -247,17 +290,17 @@
struct ValueListEntry
{
struct ValueListEntry *Next;
- char *Name;
+ const char *Name;
short Type;
short Length;
long Value;
};
-typedef int (*PrintProcType) (unsigned char *);
+typedef int (*PrintProcType) (const unsigned char *);
struct TypeDef
{
- char *Name;
+ const char *Name;
short Type /* BUILTIN, ENUMERATED, SET, or RECORD */ ;
struct ValueListEntry *ValueList;
PrintProcType PrintProc;
@@ -265,7 +308,7 @@ struct TypeDef
typedef struct TypeDef *TYPE;
-struct TypeDef TD[MaxTypes];
+extern struct TypeDef TD[MaxTypes];
/* ************************************************************ */
/* */
@@ -274,45 +317,45 @@ struct TypeDef TD[MaxTypes];
/* declaration of the existance of print routines for the basic types */
-int PrintINT8(unsigned char *buf);
-int PrintINT16(unsigned char *buf);
-int PrintINT32(unsigned char *buf);
-int PrintCARD8(unsigned char *buf);
-int PrintCARD16(unsigned char *buf);
-int PrintCARD32(unsigned char *buf);
-int PrintBYTE(unsigned char *buf);
-int PrintCHAR8(unsigned char *buf);
-int PrintSTRING16(unsigned char *buf);
-int PrintTEXTITEM8(unsigned char *buf);
-int PrintTEXTITEM16(unsigned char *buf);
-int PrintSTR(unsigned char *buf);
-int PrintWINDOW(unsigned char *buf);
-int PrintWINDOWD(unsigned char *buf);
-int PrintWINDOWNR(unsigned char *buf);
-int PrintPIXMAP(unsigned char *buf);
-int PrintPIXMAPNPR(unsigned char *buf);
-int PrintPIXMAPC(unsigned char *buf);
-int PrintCURSOR(unsigned char *buf);
-int PrintFONT(unsigned char *buf);
-int PrintGCONTEXT(unsigned char *buf);
-int PrintCOLORMAP(unsigned char *buf);
-int PrintCOLORMAPC(unsigned char *buf);
-int PrintDRAWABLE(unsigned char *buf);
-int PrintFONTABLE(unsigned char *buf);
-int PrintATOM(unsigned char *buf);
-int PrintATOMT(unsigned char *buf);
-int PrintVISUALID(unsigned char *buf);
-int PrintVISUALIDC(unsigned char *buf);
-int PrintTIMESTAMP(unsigned char *buf);
-int PrintRESOURCEID(unsigned char *buf);
-int PrintKEYSYM(unsigned char *buf);
-int PrintKEYCODE(unsigned char *buf);
-int PrintKEYCODEA(unsigned char *buf);
-int PrintBUTTON(unsigned char *buf);
-int PrintBUTTONA(unsigned char *buf);
-int PrintEVENTFORM(unsigned char *buf);
-int PrintENUMERATED(unsigned char *buf, short length, struct ValueListEntry *ValueList);
-int PrintSET(unsigned char *buf, short length, struct ValueListEntry *ValueList);
+extern int PrintINT8(const unsigned char *buf);
+extern int PrintINT16(const unsigned char *buf);
+extern int PrintINT32(const unsigned char *buf);
+extern int PrintCARD8(const unsigned char *buf);
+extern int PrintCARD16(const unsigned char *buf);
+extern int PrintCARD32(const unsigned char *buf);
+extern int PrintBYTE(const unsigned char *buf);
+extern int PrintCHAR8(const unsigned char *buf);
+extern int PrintSTRING16(const unsigned char *buf);
+extern int PrintTEXTITEM8(const unsigned char *buf);
+extern int PrintTEXTITEM16(const unsigned char *buf);
+extern int PrintSTR(const unsigned char *buf);
+extern int PrintWINDOW(const unsigned char *buf);
+extern int PrintWINDOWD(const unsigned char *buf);
+extern int PrintWINDOWNR(const unsigned char *buf);
+extern int PrintPIXMAP(const unsigned char *buf);
+extern int PrintPIXMAPNPR(const unsigned char *buf);
+extern int PrintPIXMAPC(const unsigned char *buf);
+extern int PrintCURSOR(const unsigned char *buf);
+extern int PrintFONT(const unsigned char *buf);
+extern int PrintGCONTEXT(const unsigned char *buf);
+extern int PrintCOLORMAP(const unsigned char *buf);
+extern int PrintCOLORMAPC(const unsigned char *buf);
+extern int PrintDRAWABLE(const unsigned char *buf);
+extern int PrintFONTABLE(const unsigned char *buf);
+extern int PrintATOM(const unsigned char *buf);
+extern int PrintATOMT(const unsigned char *buf);
+extern int PrintVISUALID(const unsigned char *buf);
+extern int PrintVISUALIDC(const unsigned char *buf);
+extern int PrintTIMESTAMP(const unsigned char *buf);
+extern int PrintRESOURCEID(const unsigned char *buf);
+extern int PrintKEYSYM(const unsigned char *buf);
+extern int PrintKEYCODE(const unsigned char *buf);
+extern int PrintKEYCODEA(const unsigned char *buf);
+extern int PrintBUTTON(const unsigned char *buf);
+extern int PrintBUTTONA(const unsigned char *buf);
+extern int PrintEVENTFORM(const unsigned char *buf);
+extern int PrintENUMERATED(const unsigned char *buf, short length, struct ValueListEntry *ValueList);
+extern int PrintSET(const unsigned char *buf, short length, struct ValueListEntry *ValueList);
/* ************************************************************ */
/* */
@@ -322,13 +365,13 @@ int PrintSET(unsigned char *buf, short length, struct ValueListEntry *ValueList)
/* Reply Buffer: Pseudo-buffer used to provide the opcode for the
request to which this is a reply: Set by DecodeReply
and used in the PrintField of the Reply procedure */
-unsigned char RBf[2];
+extern unsigned char RBf[2];
/* Sequence Buffer: Pseudo-buffer used to provide the sequence number for a
request: Set by DecodeReply and used in a PrintField of
the Request procedure */
-unsigned char SBf[4];
+extern unsigned char SBf[4];
#define PRINTSERVER 5 /* indent output as if it comes from server */
@@ -449,35 +492,101 @@ unsigned char SBf[4];
struct ConnState
{
unsigned char *SavedBytes;
- int littleEndian;
+ int littleEndian;
+ int bigreqEnabled;
+ long requestLen;
long SizeofSavedBytes;
long NumberofSavedBytes;
long NumberofBytesNeeded;
- long (*ByteProcessing)();
+ long NumberofBytesProcessed;
+ long (*ByteProcessing)(FD fd, const unsigned char *buf, long n);
long SequenceNumber;
};
-struct ConnState CS[StaticMaxFD];
-
-
-
+extern struct ConnState CS[StaticMaxFD];
+
+typedef struct _Value {
+ struct _Value *next;
+ unsigned long key;
+ int size;
+ unsigned long *values;
+} ValueRec, *ValuePtr;
+
+extern ValuePtr GetValueRec (unsigned long key);
+extern void CreateValueRec (unsigned long key, int size,
+ const unsigned long *def);
+extern void DeleteValueRec (unsigned long key);
+extern void SetValueRec (unsigned long key, const unsigned char *control,
+ short clength, short ctype,
+ const unsigned char *values);
+extern void PrintValueRec (unsigned long key, unsigned long cmask,
+ short ctype);
/* ************************************************************ */
/* */
/* */
/* ************************************************************ */
-/* declaraction of the types of some common functions */
-
-extern unsigned long ILong();
-extern unsigned short IShort();
-extern unsigned short IByte();
-extern Boolean IBool();
-
-extern long PrintList();
-extern long PrintListSTR();
-extern long pad();
+/* declaration of the types of some common functions */
+
+extern unsigned long ILong(const unsigned char *buf);
+extern unsigned short IShort(const unsigned char *buf);
+extern unsigned short IChar2B(const unsigned char *buf);
+extern unsigned short IByte(const unsigned char *buf);
+extern Boolean IBool(const unsigned char *buf);
+
+extern int PrintString8(const unsigned char *buf, int number,
+ const char *name);
+extern int PrintString16(const unsigned char *buf, int number,
+ const char *name);
+extern void PrintTString8(const unsigned char *buf, long number,
+ const char *name);
+extern void PrintTString16(const unsigned char *buf, long number,
+ const char *name);
+
+extern long PrintList (const unsigned char *buf, long number, short ListType,
+ const char *name);
+extern long PrintListSTR (const unsigned char *buf, long number,
+ const char *name);
+
+extern long pad(long n);
+
+extern const char REQUESTHEADER[], EVENTHEADER[], ERRORHEADER[], REPLYHEADER[];
+
+#define GC_function 0x00000001L
+#define GC_plane_mask 0x00000002L
+#define GC_foreground 0x00000004L
+#define GC_background 0x00000008L
+#define GC_line_width 0x00000010L
+#define GC_line_style 0x00000020L
+#define GC_cap_style 0x00000040L
+#define GC_join_style 0x00000080L
+#define GC_fill_style 0x00000100L
+#define GC_fill_rule 0x00000200L
+#define GC_tile 0x00000400L
+#define GC_stipple 0x00000800L
+#define GC_tile_stipple_x_origin 0x00001000L
+#define GC_tile_stipple_y_origin 0x00002000L
+#define GC_font 0x00004000L
+#define GC_subwindow_mode 0x00008000L
+#define GC_graphics_exposures 0x00010000L
+#define GC_clip_x_origin 0x00020000L
+#define GC_clip_y_origin 0x00040000L
+#define GC_clip_mask 0x00080000L
+#define GC_dash_offset 0x00100000L
+#define GC_dashes 0x00200000L
+#define GC_arc_mode 0x00400000L
+
+#define printreqlen(buf, fd, dvalue) \
+ do { \
+ if (IShort(&(buf)[2]) == 0 && CS[(fd)].bigreqEnabled) { \
+ printfield (buf, 4, 4, CARD32, "request length"); \
+ buf += 4; \
+ } else { \
+ printfield (buf, 2, 2, CARD16, "request length"); \
+ } \
+ } while (0)
#endif /* XSCOPE_X11_H */
diff --git a/xstats.c b/xstats.c
new file mode 100644
index 0000000..33ec4c7
--- /dev/null
+++ b/xstats.c
@@ -0,0 +1,114 @@
+#define REQUEST 0
+#define REPLY 1
+#define ERROR 2
+#define EVENT 3
+
+string_to_action (s)
+ char *s;
+{
+ if (!strcmp (s, "@@REQUEST")) return REQUEST;
+ if (!strcmp (s, "@@REPLY")) return REPLY;
+ if (!strcmp (s, "@@ERROR")) return ERROR;
+ if (!strcmp (s, "@@EVENT")) return EVENT;
+}
+
+typedef struct {
+ double time;
+ int action;
+ int client;
+ int major;
+ int minor;
+ int len;
+} ActionRec, *ActionPtr;
+
+unsigned long requestCount[256][256];
+unsigned long replyCount[256][256];
+unsigned long eventCount[256][256];
+unsigned long errorCount[256][256];
+
+unsigned long requestBytes[256][256];
+unsigned long replyBytes[256][256];
+unsigned long eventBytes[256][256];
+unsigned long errorBytes[256][256];
+
+unsigned long tRequestBytes;
+unsigned long tReplyBytes;
+unsigned long tEventBytes;
+unsigned long tErrorBytes;
+
+unsigned long tRequestCount;
+unsigned long tReplyCount;
+unsigned long tEventCount;
+unsigned long tErrorCount;
+
+dump (c, b)
+ unsigned long c[256][256];
+ unsigned long b[256][256];
+{
+ int i, j;
+ unsigned long count, bytes;
+
+ for (i = 0; i < 256; i++)
+ {
+ for (j = 0; j < 256; j++)
+ {
+ if (count = c[i][j])
+ {
+ bytes = b[i][j];
+ printf ("%3d %3d count %5d bytes %7d\n", i, j, count, bytes);
+ }
+ }
+ }
+}
+
+main ()
+{
+ ActionRec a;
+ char aname[128];
+ int i, j;
+
+ while (scanf ("%lf: %s %d %d %d %d\n",
+ &a.time, aname, &a.client, &a.major, &a.minor, &a.len) == 6)
+ {
+ a.action = string_to_action (aname);
+ switch (a.action) {
+ case REQUEST:
+ requestCount[a.major][a.minor]++;
+ requestBytes[a.major][a.minor] += a.len;
+ tRequestCount++;
+ tRequestBytes += a.len;
+ break;
+ case REPLY:
+ replyCount[a.major][a.minor]++;
+ replyBytes[a.major][a.minor] += a.len;
+ tReplyCount++;
+ tReplyBytes += a.len;
+ break;
+ case EVENT:
+ eventCount[a.major][a.minor]++;
+ eventBytes[a.major][a.minor] += a.len;
+ tEventCount++;
+ tEventBytes += a.len;
+ break;
+ case ERROR:
+ errorCount[a.major][a.minor]++;
+ errorBytes[a.major][a.minor] += a.len;
+ tErrorCount++;
+ tErrorBytes += a.len;
+ break;
+ }
+ }
+ printf ("requests:\n");
+ dump (requestCount, requestBytes);
+ printf ("replies:\n");
+ dump (replyCount, replyBytes);
+ printf ("events:\n");
+ dump (eventCount, eventBytes);
+ printf ("errors:\n");
+ dump (errorCount, errorBytes);
+ printf ("send count %5d bytes %7d\n",
+ tRequestCount, tRequestBytes);
+ printf ("recv count %5d bytes %7d\n",
+ tEventCount + tErrorCount + tReplyCount,
+ tEventBytes + tErrorBytes + tReplyBytes);
+}