🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: vmsnet.sources
Article #110

XSCOPE/VMS 1.0, part 07/08

#110
From: Patrick L. Mahan - TGV Window Wa...
Date: Fri, 04 Sep 1992 05:34
1454 lines
50518 bytes
Submitted-by: mahan@tgv.com (Patrick L. Mahan - TGV Window Washer)
Posting-number: Volume 3, Issue 159
Archive-name: xscope/part07


-+-+-+-+-+-+-+-+ START OF PART 7 -+-+-+-+-+-+-+-+
X  sec = tp.tv_sec - ZeroTime1;
X  hsec = tp.tv_usec / 10000 - ZeroTime2;
X  if (hsec < 0)
X    `7B
X      hsec += 100;
X      sec -= 1;
X    `7D
X  fprintf(stdout, "%2d.%02ld: ", sec, hsec);
X`7D
X
X/* ************************************************************ */
X/*`09`09`09`09`09`09`09`09*/
X/*`09`09`09`09`09`09`09`09*/
X/* ************************************************************ */
X
X/* we will need to be able to interpret the values stored in the
X   requests as various built-in types.  The following routines
X   support the types built into X11 */
X
Xlong    pad (n)
X     long    n;
X`7B
X  /* round up to next multiple of 4 */
X  return((n + 3) & `7E0x3);
X`7D
X
Xextern int  littleEndian;
X
Xunsigned long    ILong (buf)
X     unsigned char   buf`5B`5D;
X`7B
X  if (littleEndian)
X    return((((((buf`5B3`5D << 8) `7C buf`5B2`5D) << 8) `7C buf`5B1`5D) << 8)
V `7C buf`5B0`5D);
X  return((((((buf`5B0`5D << 8) `7C buf`5B1`5D) << 8) `7C buf`5B2`5D) << 8) `
V7C buf`5B3`5D);
X`7D
X
Xunsigned short   IShort (buf)
Xunsigned char   buf`5B`5D;
X`7B
X  if (littleEndian)
X    return (buf`5B1`5D << 8) `7C buf`5B0`5D;
X  return((buf`5B0`5D << 8) `7C buf`5B1`5D);
X`7D
X
Xunsigned short   IByte (buf)
Xunsigned char   buf`5B`5D;
X`7B
X  return(buf`5B0`5D);
X`7D
X
XBoolean IBool(buf)
X     unsigned char   buf`5B`5D;
X`7B
X  if (buf`5B0`5D != 0)
X    return(true);
X  else
X    return(false);
X`7D
X
X
X/* ************************************************************ */
X/*`09`09`09`09`09`09`09`09*/
X/*`09`09`09`09`09`09`09`09*/
X/* ************************************************************ */
X
X/* we will need to save bytes until we get a complete request to
X   interpret.  The following procedures provide this ability */
X
XSaveBytes(fd, buf, n)
X     FD fd;
X     unsigned char *buf;
X     long    n;
X`7B
X  /* check if there is enough space to hold the bytes we want */
X  if (CS`5Bfd`5D.NumberofSavedBytes + n > CS`5Bfd`5D.SizeofSavedBytes)
X    `7B
X      /* not enough room so far; malloc more space and copy */
X      long    SizeofNewBytes = (CS`5Bfd`5D.NumberofSavedBytes + n + 1);
X#ifdef vax11c
X      unsigned char   *NewBytes = (unsigned char *)MyMalloc (SizeofNewBytes)
V;
X#else
X      unsigned char   *NewBytes = (unsigned char *)Malloc (SizeofNewBytes);
X#endif /* vax11c */
X      bcopy(/* from  */(char *)CS`5Bfd`5D.SavedBytes,
X`09    /* to    */(char *)NewBytes,
X`09    /* count */(int)CS`5Bfd`5D.SizeofSavedBytes);
X#ifdef vax11c
X      MyFree((char *)CS`5Bfd`5D.SavedBytes);
X#else
X      Free((char *)CS`5Bfd`5D.SavedBytes);
X#endif /* vax11c */
X      CS`5Bfd`5D.SavedBytes = NewBytes;
X      CS`5Bfd`5D.SizeofSavedBytes = SizeofNewBytes;
X    `7D
X
X  /* now copy the new bytes onto the end of the old bytes */
X  bcopy(/* from  */(char *)buf,
X`09/* to    */(char *)(CS`5Bfd`5D.SavedBytes + CS`5Bfd`5D.NumberofSavedBytes
V),
X`09/* count */(int)n);
X  CS`5Bfd`5D.NumberofSavedBytes += n;
X`7D
X
XRemoveSavedBytes(fd, n)
X     FD fd;
X     long    n;
X`7B
X  /* check if all bytes are being removed -- easiest case */
X  if (CS`5Bfd`5D.NumberofSavedBytes <= n)
X    CS`5Bfd`5D.NumberofSavedBytes = 0;
X  else if (n == 0)
X    return;
X  else
X    `7B
X      /* not all bytes are being removed -- shift the remaining ones down  *
V/
X      register unsigned char  *p = CS`5Bfd`5D.SavedBytes;
X      register unsigned char  *q = CS`5Bfd`5D.SavedBytes + n;
X      register long   i = CS`5Bfd`5D.NumberofSavedBytes - n;
X      while (i-- > 0)
X`09*p++ = *q++;
X      CS`5Bfd`5D.NumberofSavedBytes -= n;
X    `7D
X`7D
X
X
X/* ************************************************************ */
X/*`09`09`09`09`09`09`09`09*/
X/*`09`09`09`09`09`09`09`09*/
X/* ************************************************************ */
X
X
X/* following are the possible values for ByteProcessing */
X/* forward declarations */
Xlong    StartSetUpMessage ();
Xlong    FinishSetUpMessage ();
Xlong    StartRequest ();
Xlong    FinishRequest ();
X
Xlong    StartSetUpReply ();
Xlong    FinishSetUpReply ();
Xlong    ServerPacket ();
Xlong    FinishReply ();
X
X
X/* ************************************************************ */
X/*`09`09`09`09`09`09`09`09*/
X/*`09`09`09`09`09`09`09`09*/
X/* ************************************************************ */
X
Xint littleEndian;
X
XProcessBuffer(fd, buf, n)
X     FD fd;
X     unsigned char *buf;
X     long    n;
X`7B
X  unsigned char   *BytesToProcess;
X  long    NumberofUsedBytes;
X
X  /* as long as we have enough bytes to do anything -- do it */
X
X  littleEndian = CS`5Bfd`5D.littleEndian;
X  while (CS`5Bfd`5D.NumberofSavedBytes + n >= CS`5Bfd`5D.NumberofBytesNeeded
V)
X    `7B
X      /*
X`09we have enough bytes to do something.  We want the bytes to be
X`09grouped together into one contiguous block of bytes. We have three
X`09cases:
X
X`09(1) NumberofSavedBytes = 0; so all needed bytes are in the
X`09read buffer, buf.
X
X`09(2) NumberofSavedBytes >= NumberofBytesNeeded;`09in this case we
X`09will not need to copy any extra bytes into the save buffer.
X
X`09(3) 0 < NumberofSavedBytes < NumberofBytesNeeded; so
X`09some bytes are in the save buffer and others are in the read
X`09buffer.  In this case we need to copy some of the bytes from the
X`09read buffer to the save buffer to get as many bytes as we need,
X`09then use these bytes.
X      */
X
X      if (CS`5Bfd`5D.NumberofSavedBytes == 0)
X`09`7B
X`09  /* no saved bytes, so just process the first bytes in the
X`09     read buffer */
X`09  BytesToProcess = buf /* address of request bytes */;
X`09`7D
X      else
X`09`7B
X`09  if (CS`5Bfd`5D.NumberofSavedBytes < CS`5Bfd`5D.NumberofBytesNeeded)
X`09    `7B
X`09      /* first determine the number of bytes we need to
X`09`09 transfer; then transfer them and remove them from
X`09`09 the read buffer. (there may be additional requests
X`09`09 in the read buffer) */
X`09      long    m;
X`09      m = CS`5Bfd`5D.NumberofBytesNeeded - CS`5Bfd`5D.NumberofSavedBytes;
X`09      SaveBytes(fd, buf, m);
X`09      buf += m;
X`09      n -= m;
X`09    `7D
X`09  BytesToProcess = CS`5Bfd`5D.SavedBytes /* address of request bytes */;
X`09`7D
X
X      /*
X`09BytesToProcess points to a contiguous block of NumberofBytesNeeded
X`09bytes that we should process.  The type of processing depends upon
X`09the state we are in. The processing routine should return the
X`09number of bytes that it actually used.
X      */
X      NumberofUsedBytes = (*CS`5Bfd`5D.ByteProcessing)
X                             (fd, BytesToProcess, CS`5Bfd`5D.NumberofBytesNe
Veded);
X
X      /* the number of bytes that were actually used is normally (but not
X`09 always) the number of bytes needed.  Discard the bytes that were
X`09 actually used, not the bytes that were needed. The number of used
X`09 bytes must be less than or equal to the number of needed bytes. */
X
X      if (NumberofUsedBytes > 0)
X`09`7B
X`09  if (CS`5Bfd`5D.NumberofSavedBytes > 0)
X`09    RemoveSavedBytes(fd, NumberofUsedBytes);
X`09  else
X`09    `7B
X`09      /* there are no saved bytes, so the bytes that were
X`09`09 used must have been in the read buffer */
X`09      buf += NumberofUsedBytes;
X`09      n -= NumberofUsedBytes;
X`09    `7D
X`09`7D
X    `7D /* end of while (NumberofSavedBytes + n >= NumberofBytesNeeded) */
X
X  /* not enough bytes -- just save the new bytes for more later */
X  if (n > 0)
X    SaveBytes(fd, buf, n);
X  return;
X`7D
X
X
X
X/* ************************************************************ */
X/*`09`09`09`09`09`09`09`09*/
X/*`09`09`09`09`09`09`09`09*/
X/* ************************************************************ */
X/*
X  Byte Processing Routines.  Each routine MUST set NumberofBytesNeeded
X  and ByteProcessing.  It probably needs to do some computation first.
X*/
X
X
XStartClientConnection(fd)
X     FD fd;
X`7B
X  enterprocedure("StartClientConnection");
X  /* when a new connection is started, we have no saved bytes */
X  CS`5Bfd`5D.SavedBytes = NULL;
X  CS`5Bfd`5D.SizeofSavedBytes = 0;
X  CS`5Bfd`5D.NumberofSavedBytes = 0;
X
X  /* when a new connection is started, we have no reply Queue */
X  FlushReplyQ(fd);
X
X  /* each new connection gets a request sequence number */
X  CS`5Bfd`5D.SequenceNumber = 0;
X
X  /* we need 12 bytes to start a SetUp message */
X  CS`5Bfd`5D.ByteProcessing = StartSetUpMessage;
X  CS`5Bfd`5D.NumberofBytesNeeded = 12;
X`7D
X
XStopClientConnection(fd)
X     FD fd;
X`7B
X  enterprocedure("StopClientConnection");
X  /* when a new connection is stopped, discard the old buffer */
X
X  if (CS`5Bfd`5D.SizeofSavedBytes > 0)
X#ifdef vax11c
X    MyFree((char*)CS`5Bfd`5D.SavedBytes);
X#else
X    Free((char*)CS`5Bfd`5D.SavedBytes);
X#endif /* vax11c */
X`7D
X
Xlong    StartSetUpMessage (fd, buf, n)
X     FD fd;
X     unsigned char *buf;
X     long    n;
X`7B
X  short   namelength;
X  short   datalength;
X
X  enterprocedure("StartSetUpMessage");
X  /*
X    we need the first 12 bytes to be able to determine if, and how many,
X    additional bytes we need for name and data authorization.  However, we
X    can't process the first 12 bytes until we get all of them, so
X    return zero bytes used, and increase the number of bytes needed
X  */
X
X  namelength = IShort(&buf`5B6`5D);
X  datalength = IShort(&buf`5B8`5D);
X  CS`5Bfd`5D.ByteProcessing = FinishSetUpMessage;
X  CS`5Bfd`5D.NumberofBytesNeeded = n
X                               + pad((long)namelength) + pad((long)datalengt
Vh);
X  debug(8,(stderr, "need %d bytes to finish startup\n",
X`09   CS`5Bfd`5D.NumberofBytesNeeded - n));
X  return(0);
X`7D
X
Xlong    FinishSetUpMessage (fd, buf, n)
X     FD fd;
X     unsigned char *buf;
X     long    n;
X`7B
X  enterprocedure("FinishSetUpMessage");
X  CS`5Bfd`5D.littleEndian = (buf`5B0`5D == 'l');
X  CS`5BServerHalf(fd)`5D.littleEndian = CS`5Bfd`5D.littleEndian;
X  littleEndian = CS`5Bfd`5D.littleEndian;
X  PrintSetUpMessage(buf);
X
X  /* after a set-up message, we expect a string of requests */
X  CS`5Bfd`5D.ByteProcessing = StartRequest;
X  CS`5Bfd`5D.NumberofBytesNeeded = 4;
X  return(n);
X`7D
X
X
Xlong    StartRequest (fd, buf, n)
X     FD fd;
X     unsigned char *buf;
X     long    n;
X`7B
X  short   requestlength;
X  enterprocedure("StartRequest");
X
X  /* bytes 0,1 are ignored now; bytes 2,3 tell us the request length */
X  requestlength = IShort(&buf`5B2`5D);
X  CS`5Bfd`5D.ByteProcessing = FinishRequest;
X  CS`5Bfd`5D.NumberofBytesNeeded = 4 * requestlength;
X  debug(8,(stderr, "need %d more bytes to finish request\n",
X`09   CS`5Bfd`5D.NumberofBytesNeeded - n));
X  return(0);
X`7D
X
X
Xlong    FinishRequest (fd, buf, n)
X     FD fd;
X     unsigned char *buf;
X     long    n;
X`7B
X  enterprocedure("FinishRequest");
X  DecodeRequest(fd, buf, n);
X  CS`5Bfd`5D.ByteProcessing = StartRequest;
X  CS`5Bfd`5D.NumberofBytesNeeded = 4;
X  return(n);
X`7D
X
X/* ************************************************************ */
X/*`09`09`09`09`09`09`09`09*/
X/*`09`09`09`09`09`09`09`09*/
X/* ************************************************************ */
X
XStartServerConnection(fd)
X     FD fd;
X`7B
X  enterprocedure("StartServerConnection");
X  /* when a new connection is started, we have no saved bytes */
X  CS`5Bfd`5D.SavedBytes = NULL;
X  CS`5Bfd`5D.SizeofSavedBytes = 0;
X  CS`5Bfd`5D.NumberofSavedBytes = 0;
X
X  /* when a new connection is started, we have no reply Queue */
X  FlushReplyQ(fd);
X
X  /* we need 8 bytes to start a SetUp reply */
X  CS`5Bfd`5D.ByteProcessing = StartSetUpReply;
X  CS`5Bfd`5D.NumberofBytesNeeded = 8;
X`7D
X
XStopServerConnection(fd)
X     FD fd;
X`7B
X  enterprocedure("StopServerConnection");
X  /* when a new connection is stopped, discard the old buffer */
X
X  if (CS`5Bfd`5D.SizeofSavedBytes > 0)
X#ifdef vax11c
X    MyFree((char *)CS`5Bfd`5D.SavedBytes);
X#else
X    Free((char *)CS`5Bfd`5D.SavedBytes);
X#endif /* vax11c */
X`7D
X
Xlong    StartSetUpReply (fd, buf, n)
X     FD fd;
X     unsigned char *buf;
X     long    n;
X`7B
X  short   replylength;
X
X  enterprocedure("StartSetUpReply");
X  replylength = IShort(&buf`5B6`5D);
X  CS`5Bfd`5D.ByteProcessing = FinishSetUpReply;
X  CS`5Bfd`5D.NumberofBytesNeeded = n + 4 * replylength;
X  debug(8,(stderr, "need %d bytes to finish startup reply\n",
X`09   CS`5Bfd`5D.NumberofBytesNeeded - n));
X  return(0);
X`7D
X
Xlong    FinishSetUpReply (fd, buf, n)
X     FD fd;
X     unsigned char *buf;
X     long    n;
X`7B
X  enterprocedure("FinishSetUpReply");
X  PrintSetUpReply(buf);
X  CS`5Bfd`5D.ByteProcessing = ServerPacket;
X  CS`5Bfd`5D.NumberofBytesNeeded = 32;
X  return(n);
X`7D
X
X/* ************************************************************ */
X
Xlong    ErrorPacket (fd, buf, n)
X     FD fd;
X     unsigned char *buf;
X     long    n;
X`7B
X  fprintf(stdout, "Error: ");
X  DecodeError(fd, buf, n);
X  CS`5Bfd`5D.ByteProcessing = ServerPacket;
X  CS`5Bfd`5D.NumberofBytesNeeded = 32;
X  return(n);
X`7D
X
X
Xlong    EventPacket (fd, buf, n)
X     FD fd;
X     unsigned char *buf;
X     long    n;
X`7B
X  DecodeEvent(fd, buf, n);
X  CS`5Bfd`5D.ByteProcessing = ServerPacket;
X  CS`5Bfd`5D.NumberofBytesNeeded = 32;
X  return(n);
X`7D
X
X
Xlong    ReplyPacket (fd, buf, n)
X     FD fd;
X     unsigned char *buf;
X     long    n;
X`7B
X  short   replylength;
X
X  replylength = ILong(&buf`5B4`5D);
X
X  /*
X    Replies may need more bytes, so we compute how many more
X    bytes are needed and ask for them, not using any of the bytes
X    we were given (return(0) to say that no bytes were used).
X    If the replylength is zero (we don't need any more bytes), the
X    number of bytes needed will be the same as what we have, and
X    so the top-level loop will call the next routine immediately
X    with the same buffer of bytes that we were given.
X  */
X
X  CS`5Bfd`5D.ByteProcessing = FinishReply;
X  CS`5Bfd`5D.NumberofBytesNeeded = n + 4 * replylength;
X  debug(8,(stderr, "need %d bytes to finish reply\n", (4 * replylength)));
X  return(0);
X`7D
X
Xlong    ServerPacket (fd, buf, n)
X     FD fd;
X     unsigned char *buf;
X     long    n;
X`7B
X  short   PacketType;
X  enterprocedure("ServerPacket");
X
X  PacketType = IByte(&buf`5B0`5D);
X  if (PacketType == 0)
X    return(ErrorPacket(fd, buf, n));
X  if (PacketType == 1)
X    return(ReplyPacket(fd, buf, n));
X  return(EventPacket(fd, buf, n));
X`7D
X
Xlong    FinishReply (fd, buf, n)
X     FD fd;
X     unsigned char *buf;
X     long    n;
X`7B
X  enterprocedure("FinishReply");
X  DecodeReply(fd, buf, n);
X  CS`5Bfd`5D.ByteProcessing = ServerPacket;
X  CS`5Bfd`5D.NumberofBytesNeeded = 32;
X  return(n);
X`7D
$ CALL UNPACK SERVER.C;10 355330808
$ create 'f'
X/* ************************************************** *
X *`09`09`09`09`09`09      *
X *  Table initialization for X11 protocol`09      *
X *`09`09`09`09`09`09      *
X *`09James Peterson, 1988`09`09`09      *
X *`09(c) Copyright MCC, 1988 `09`09      *
X *`09`09`09`09`09`09      *
X * ************************************************** */
X#if defined(vax11c) && !defined(MULTINET)
X#include "emulationlib.h"
X#endif
X
X#include "scope.h"
X#include "x11.h"
X
X/*
X  To initialize for the X11 protocol, we need to create data structures
X  describing the data types used by X11.
X*/
X
X/*
X  There are about 100-128 data types for X11.  This start with the simple
X  INT8, INT16, INT32 (byte, short, long), and the CARD8, CARD16, CARD32
X  (unsigned) and extend to records like RGB (a resource id, 3 color
X  values and a bitmask to select a subset of the 3 color values).  Each
X  data type has an assigned type index.  The type index identifies the
X  type (with a #define in x11.h) and is used to access an entry in an
X  array of type descriptors (TD).  Each type descriptor has the type name,
X  the kind of type, and a procedure to print an object of that type.
X  The print procedure for a type <foo> is named Print<foo>.  The kind of
X  type is
X
X  BUILTIN:      one of the primitive types.
X  ENUMERATED:   value should be one of a small set of values.  This type
X                needs a list of allowed values (and their print names).
X  SET:          value is a bitmask of a small set of values.  Each value
X                is a one-bit mask (and its print name).
X  RECORD:       value is a record of fields of other types.
X
X  The Type Descriptor array allows us to print a value if we know its type
X  (index) and the bytes in memory that are its value.
X*/
X
X
XInitializeX11()
X`7B
X  InitReplyQ();
X
X  InitBuiltInTypes();
X  InitEnumeratedTypes();
X  InitSetTypes();
X  InitValuesTypes();
X  InitRecordTypes();
X`7D
X
X/* ************************************************************ */
X/*`09`09`09`09`09`09`09`09*/
X/*`09`09`09`09`09`09`09`09*/
X/* ************************************************************ */
X
X/* define the various types */
X
XTYPE DefineType(typeid, class, name, printproc)
X     short   typeid;
X     short   class;
X     char   *name;
X     int     (*printproc)();
X`7B
X  TD`5Btypeid`5D.Name = name;
X  TD`5Btypeid`5D.Type = class;
X  TD`5Btypeid`5D.ValueList = NULL;
X  TD`5Btypeid`5D.PrintProc = printproc;
X  return(&TD`5Btypeid`5D);
X`7D
X
X/* ************************************************************ */
X/* define an Enumerated Value (or a Set Value) */
X
XDefineEValue(type, value, name)
X     TYPE type;
X     long    value;
X     char   *name;
X`7B
X  struct ValueListEntry  *p;
X
X  /* define the new value */
X  p = (struct ValueListEntry *)
X#ifdef vax11c
X                          MyMalloc ((long)(sizeof (struct ValueListEntry)));
X#else
X                          Malloc ((long)(sizeof (struct ValueListEntry)));
X#endif /* vax11c */
X  p->Name = name;
X  p->Value = value;
X
X  /* add an new value to the list. */
X  if (type->ValueList == NULL `7C`7C type->ValueList->Value > p->Value)
X    `7B
X      p->Next = type->ValueList;
X      type->ValueList = p;
X    `7D
X  else
X    `7B
X      /* keep the list sorted, smallest to largest */
X      struct ValueListEntry  *q = type->ValueList;
X      while (q->Next != NULL && q->Next->Value < p->Value)
X`09q = q->Next;
X      p->Next = q->Next;
X      q->Next = p;
X    `7D
X`7D
X
X/* ************************************************************ */
X/* a Values list is like an enumerated Value, but has a type and length
X   in addition to a value and name.  It is used to print a Values List */
X
X/* A Values List is a bitmask (like a set), but if the bit is set on, then
X   we have an associated value.  We need to know the length and type of the
X   associated value for each bit */
X
XDefineValues(type, value, length, ctype, name)
X     TYPE type;
X     long    value;
X     char   *name;
X`7B
X  struct ValueListEntry  *p;
X
X  p = (struct ValueListEntry *)
X#ifdef vax11c
X                            MyMalloc ((long)(sizeof (struct ValueListEntry))
V);
X#else
X                            Malloc ((long)(sizeof (struct ValueListEntry)));
X#endif /* vax11c */
X  p->Name = name;
X  p->Type = ctype;
X  p->Length = length;
X  p->Value = value;
X
X  /* add an new value to the list. */
X  if (type->ValueList == NULL `7C`7C type->ValueList->Value > p->Value)
X    `7B
X      p->Next = type->ValueList;
X      type->ValueList = p;
X    `7D
X  else
X    `7B
X      /* keep the list sorted, smallest to largest  */
X      struct ValueListEntry  *q = type->ValueList;
X      while (q->Next != NULL && q->Next->Value < p->Value)
X`09q = q->Next;
X      p->Next = q->Next;
X      q->Next = p;
X    `7D
X`7D
X
X
X
X/* ************************************************************ */
X
XInitBuiltInTypes()
X`7B
X  (void) DefineType(INT8, BUILTIN, "INT8", PrintINT8);
X  (void) DefineType(INT16, BUILTIN, "INT16", PrintINT16);
X  (void) DefineType(INT32, BUILTIN, "INT32", PrintINT32);
X  (void) DefineType(CARD8, BUILTIN, "CARD8", PrintCARD8);
X  (void) DefineType(CARD16, BUILTIN, "CARD16", PrintCARD16);
X  (void) DefineType(CARD32, BUILTIN, "CARD32", PrintCARD32);
X  (void) DefineType(BYTE, BUILTIN, "BYTE", PrintBYTE);
X  (void) DefineType(CHAR8, BUILTIN, "CHAR8", PrintCHAR8);
X  (void) DefineType(STRING16, BUILTIN, "STRING16", PrintSTRING16);
X  (void) DefineType(STR, BUILTIN, "STR", PrintSTR);
X  (void) DefineType(WINDOW, BUILTIN, "WINDOW", PrintWINDOW);
X  (void) DefineType(WINDOWD, BUILTIN, "WINDOWD", PrintWINDOWD);
X  (void) DefineType(WINDOWNR, BUILTIN, "WINDOWNR", PrintWINDOWNR);
X  (void) DefineType(PIXMAP, BUILTIN, "PIXMAP", PrintPIXMAP);
X  (void) DefineType(PIXMAPNPR, BUILTIN, "PIXMAPNPR", PrintPIXMAPNPR);
X  (void) DefineType(PIXMAPC, BUILTIN, "PIXMAPC", PrintPIXMAPC);
X  (void) DefineType(CURSOR, BUILTIN, "CURSOR", PrintCURSOR);
X  (void) DefineType(FONT, BUILTIN, "FONT", PrintFONT);
X  (void) DefineType(GCONTEXT, BUILTIN, "GCONTEXT", PrintGCONTEXT);
X  (void) DefineType(COLORMAP, BUILTIN, "COLORMAP", PrintCOLORMAP);
X  (void) DefineType(COLORMAPC, BUILTIN, "COLORMAPC", PrintCOLORMAPC);
X  (void) DefineType(DRAWABLE, BUILTIN, "DRAWABLE", PrintDRAWABLE);
X  (void) DefineType(FONTABLE, BUILTIN, "FONTABLE", PrintFONTABLE);
X  (void) DefineType(ATOM, BUILTIN, "ATOM", PrintATOM);
X  (void) DefineType(ATOMT, BUILTIN, "ATOMT", PrintATOMT);
X  (void) DefineType(VISUALID, BUILTIN, "VISUALID", PrintVISUALID);
X  (void) DefineType(VISUALIDC, BUILTIN, "VISUALIDC", PrintVISUALIDC);
X  (void) DefineType(TIMESTAMP, BUILTIN, "TIMESTAMP", PrintTIMESTAMP);
X  (void) DefineType(RESOURCEID, BUILTIN, "RESOURCEID", PrintRESOURCEID);
X  (void) DefineType(KEYSYM, BUILTIN, "KEYSYM", PrintKEYSYM);
X  (void) DefineType(KEYCODE, BUILTIN, "KEYCODE", PrintKEYCODE);
X  (void) DefineType(KEYCODEA, BUILTIN, "KEYCODEA", PrintKEYCODEA);
X  (void) DefineType(BUTTON, BUILTIN, "BUTTON", PrintBUTTON);
X  (void) DefineType(BUTTONA, BUILTIN, "BUTTONA", PrintBUTTONA);
X  (void) DefineType(EVENTFORM, BUILTIN, "EVENTFORM", PrintEVENTFORM);
X`7D
X
X/* ************************************************************ */
X/*`09`09`09`09`09`09`09`09*/
X/*`09`09`09`09`09`09`09`09*/
X/* ************************************************************ */
X
XInitEnumeratedTypes()
X`7B
X  TYPE p;
X
X  p = DefineType(REQUEST, ENUMERATED, "REQUEST", PrintENUMERATED);
X  DefineEValue(p, 1L, "CreateWindow");
X  DefineEValue(p, 2L, "ChangeWindowAttributes");
X  DefineEValue(p, 3L, "GetWindowAttributes");
X  DefineEValue(p, 4L, "DestroyWindow");
X  DefineEValue(p, 5L, "DestroySubwindows");
X  DefineEValue(p, 6L, "ChangeSaveSet");
X  DefineEValue(p, 7L, "ReparentWindow");
X  DefineEValue(p, 8L, "MapWindow");
X  DefineEValue(p, 9L, "MapSubwindows");
X  DefineEValue(p, 10L, "UnmapWindow");
X  DefineEValue(p, 11L, "UnmapSubwindows");
X  DefineEValue(p, 12L, "ConfigureWindow");
X  DefineEValue(p, 13L, "CirculateWindow");
X  DefineEValue(p, 14L, "GetGeometry");
X  DefineEValue(p, 15L, "QueryTree");
X  DefineEValue(p, 16L, "InternAtom");
X  DefineEValue(p, 17L, "GetAtomName");
X  DefineEValue(p, 18L, "ChangeProperty");
X  DefineEValue(p, 19L, "DeleteProperty");
X  DefineEValue(p, 20L, "GetProperty");
X  DefineEValue(p, 21L, "ListProperties");
X  DefineEValue(p, 22L, "SetSelectionOwner");
X  DefineEValue(p, 23L, "GetSelectionOwner");
X  DefineEValue(p, 24L, "ConvertSelection");
X  DefineEValue(p, 25L, "SendEvent");
X  DefineEValue(p, 26L, "GrabPointer");
X  DefineEValue(p, 27L, "UngrabPointer");
X  DefineEValue(p, 28L, "GrabButton");
X  DefineEValue(p, 29L, "UngrabButton");
X  DefineEValue(p, 30L, "ChangeActivePointerGrab");
X  DefineEValue(p, 31L, "GrabKeyboard");
X  DefineEValue(p, 32L, "UngrabKeyboard");
X  DefineEValue(p, 33L, "GrabKey");
X  DefineEValue(p, 34L, "UngrabKey");
X  DefineEValue(p, 35L, "AllowEvents");
X  DefineEValue(p, 36L, "GrabServer");
X  DefineEValue(p, 37L, "UngrabServer");
X  DefineEValue(p, 38L, "QueryPointer");
X  DefineEValue(p, 39L, "GetMotionEvents");
X  DefineEValue(p, 40L, "TranslateCoordinates");
X  DefineEValue(p, 41L, "WarpPointer");
X  DefineEValue(p, 42L, "SetInputFocus");
X  DefineEValue(p, 43L, "GetInputFocus");
X  DefineEValue(p, 44L, "QueryKeymap");
X  DefineEValue(p, 45L, "OpenFont");
X  DefineEValue(p, 46L, "CloseFont");
X  DefineEValue(p, 47L, "QueryFont");
X  DefineEValue(p, 48L, "QueryTextExtents");
X  DefineEValue(p, 49L, "ListFonts");
X  DefineEValue(p, 50L, "ListFontsWithInfo");
X  DefineEValue(p, 51L, "SetFontPath");
X  DefineEValue(p, 52L, "GetFontPath");
X  DefineEValue(p, 53L, "CreatePixmap");
X  DefineEValue(p, 54L, "FreePixmap");
X  DefineEValue(p, 55L, "CreateGC");
X  DefineEValue(p, 56L, "ChangeGC");
X  DefineEValue(p, 57L, "CopyGC");
X  DefineEValue(p, 58L, "SetDashes");
X  DefineEValue(p, 59L, "SetClipRectangles");
X  DefineEValue(p, 60L, "FreeGC");
X  DefineEValue(p, 61L, "ClearArea");
X  DefineEValue(p, 62L, "CopyArea");
X  DefineEValue(p, 63L, "CopyPlane");
X  DefineEValue(p, 64L, "PolyPoint");
X  DefineEValue(p, 65L, "PolyLine");
X  DefineEValue(p, 66L, "PolySegment");
X  DefineEValue(p, 67L, "PolyRectangle");
X  DefineEValue(p, 68L, "PolyArc");
X  DefineEValue(p, 69L, "FillPoly");
X  DefineEValue(p, 70L, "PolyFillRectangle");
X  DefineEValue(p, 71L, "PolyFillArc");
X  DefineEValue(p, 72L, "PutImage");
X  DefineEValue(p, 73L, "GetImage");
X  DefineEValue(p, 74L, "PolyText8");
X  DefineEValue(p, 75L, "PolyText16");
X  DefineEValue(p, 76L, "ImageText8");
X  DefineEValue(p, 77L, "ImageText16");
X  DefineEValue(p, 78L, "CreateColormap");
X  DefineEValue(p, 79L, "FreeColormap");
X  DefineEValue(p, 80L, "CopyColormapAndFree");
X  DefineEValue(p, 81L, "InstallColormap");
X  DefineEValue(p, 82L, "UninstallColormap");
X  DefineEValue(p, 83L, "ListInstalledColormaps");
X  DefineEValue(p, 84L, "AllocColor");
X  DefineEValue(p, 85L, "AllocNamedColor");
X  DefineEValue(p, 86L, "AllocColorCells");
X  DefineEValue(p, 87L, "AllocColorPlanes");
X  DefineEValue(p, 88L, "FreeColors");
X  DefineEValue(p, 89L, "StoreColors");
X  DefineEValue(p, 90L, "StoreNamedColor");
X  DefineEValue(p, 91L, "QueryColors");
X  DefineEValue(p, 92L, "LookupColor");
X  DefineEValue(p, 93L, "CreateCursor");
X  DefineEValue(p, 94L, "CreateGlyphCursor");
X  DefineEValue(p, 95L, "FreeCursor");
X  DefineEValue(p, 96L, "RecolorCursor");
X  DefineEValue(p, 97L, "QueryBestSize");
X  DefineEValue(p, 98L, "QueryExtension");
X  DefineEValue(p, 99L, "ListExtensions");
X  DefineEValue(p, 100L, "ChangeKeyboardMapping");
X  DefineEValue(p, 101L, "GetKeyboardMapping");
X  DefineEValue(p, 102L, "ChangeKeyboardControl");
X  DefineEValue(p, 103L, "GetKeyboardControl");
X  DefineEValue(p, 104L, "Bell");
X  DefineEValue(p, 105L, "ChangePointerControl");
X  DefineEValue(p, 106L, "GetPointerControl");
X  DefineEValue(p, 107L, "SetScreenSaver");
X  DefineEValue(p, 108L, "GetScreenSaver");
X  DefineEValue(p, 109L, "ChangeHosts");
X  DefineEValue(p, 110L, "ListHosts");
X  DefineEValue(p, 111L, "SetAccessControl");
X  DefineEValue(p, 112L, "SetCloseDownMode");
X  DefineEValue(p, 113L, "KillClient");
X  DefineEValue(p, 114L, "RotateProperties");
X  DefineEValue(p, 115L, "ForceScreenSaver");
X  DefineEValue(p, 116L, "SetPointerMapping");
X  DefineEValue(p, 117L, "GetPointerMapping");
X  DefineEValue(p, 118L, "SetModifierMapping");
X  DefineEValue(p, 119L, "GetModifierMapping");
X  DefineEValue(p, 127L, "NoOperation");
X
X  p = DefineType(REPLY, ENUMERATED, "REPLY", PrintENUMERATED);
X  DefineEValue(p, 3L, "GetWindowAttributes");
X  DefineEValue(p, 14L, "GetGeometry");
X  DefineEValue(p, 15L, "QueryTree");
X  DefineEValue(p, 16L, "InternAtom");
X  DefineEValue(p, 17L, "GetAtomName");
X  DefineEValue(p, 20L, "GetProperty");
X  DefineEValue(p, 21L, "ListProperties");
X  DefineEValue(p, 23L, "GetSelectionOwner");
X  DefineEValue(p, 26L, "GrabPointer");
X  DefineEValue(p, 31L, "GrabKeyboard");
X  DefineEValue(p, 38L, "QueryPointer");
X  DefineEValue(p, 39L, "GetMotionEvents");
X  DefineEValue(p, 40L, "TranslateCoordinates");
X  DefineEValue(p, 43L, "GetInputFocus");
X  DefineEValue(p, 44L, "QueryKeymap");
X  DefineEValue(p, 47L, "QueryFont");
X  DefineEValue(p, 48L, "QueryTextExtents");
X  DefineEValue(p, 49L, "ListFonts");
X  DefineEValue(p, 50L, "ListFontsWithInfo");
X  DefineEValue(p, 52L, "GetFontPath");
X  DefineEValue(p, 73L, "GetImage");
X  DefineEValue(p, 83L, "ListInstalledColormaps");
X  DefineEValue(p, 84L, "AllocColor");
X  DefineEValue(p, 85L, "AllocNamedColor");
X  DefineEValue(p, 86L, "AllocColorCells");
X  DefineEValue(p, 87L, "AllocColorPlanes");
X  DefineEValue(p, 91L, "QueryColors");
X  DefineEValue(p, 92L, "LookupColor");
X  DefineEValue(p, 97L, "QueryBestSize");
X  DefineEValue(p, 98L, "QueryExtension");
X  DefineEValue(p, 99L, "ListExtensions");
X  DefineEValue(p, 101L, "GetKeyboardMapping");
X  DefineEValue(p, 103L, "GetKeyboardControl");
X  DefineEValue(p, 106L, "GetPointerControl");
X  DefineEValue(p, 108L, "GetScreenSaver");
X  DefineEValue(p, 110L, "ListHosts");
X  DefineEValue(p, 116L, "SetPointerMapping");
X  DefineEValue(p, 117L, "GetPointerMapping");
X  DefineEValue(p, 118L, "SetModifierMapping");
X  DefineEValue(p, 119L, "GetModifierMapping");
X
X  p = DefineType(ERROR, ENUMERATED, "ERROR", PrintENUMERATED);
X  DefineEValue(p, 1L, "Request");
X  DefineEValue(p, 2L, "Value");
X  DefineEValue(p, 3L, "Window");
X  DefineEValue(p, 4L, "Pixmap");
X  DefineEValue(p, 5L, "Atom");
X  DefineEValue(p, 6L, "Cursor");
X  DefineEValue(p, 7L, "Font");
X  DefineEValue(p, 8L, "Match");
X  DefineEValue(p, 9L, "Drawable");
X  DefineEValue(p, 10L, "Access");
X  DefineEValue(p, 11L, "Alloc");
X  DefineEValue(p, 12L, "Colormap");
X  DefineEValue(p, 13L, "GContext");
X  DefineEValue(p, 14L, "IDChoice");
X  DefineEValue(p, 15L, "Name");
X  DefineEValue(p, 16L, "Length");
X  DefineEValue(p, 17L, "Implementation");
X
X  p = DefineType(EVENT, ENUMERATED, "EVENT", PrintENUMERATED);
X  DefineEValue(p, 2L, "KeyPress");
X  DefineEValue(p, 3L, "KeyRelease");
X  DefineEValue(p, 4L, "ButtonPress");
X  DefineEValue(p, 5L, "ButtonRelease");
X  DefineEValue(p, 6L, "MotionNotify");
X  DefineEValue(p, 7L, "EnterNotify");
X  DefineEValue(p, 8L, "LeaveNotify");
X  DefineEValue(p, 9L, "FocusIn");
X  DefineEValue(p, 10L, "FocusOut");
X  DefineEValue(p, 11L, "KeymapNotify");
X  DefineEValue(p, 12L, "Expose");
X  DefineEValue(p, 13L, "GraphicsExposure");
X  DefineEValue(p, 14L, "NoExposure");
X  DefineEValue(p, 15L, "VisibilityNotify");
X  DefineEValue(p, 16L, "CreateNotify");
X  DefineEValue(p, 17L, "DestroyNotify");
X  DefineEValue(p, 18L, "UnmapNotify");
X  DefineEValue(p, 19L, "MapNotify");
X  DefineEValue(p, 20L, "MapRequest");
X  DefineEValue(p, 21L, "ReparentNotify");
X  DefineEValue(p, 22L, "ConfigureNotify");
X  DefineEValue(p, 23L, "ConfigureRequest");
X  DefineEValue(p, 24L, "GravityNotify");
X  DefineEValue(p, 25L, "ResizeRequest");
X  DefineEValue(p, 26L, "CirculateNotify");
X  DefineEValue(p, 27L, "CirculateRequest");
X  DefineEValue(p, 28L, "PropertyNotify");
X  DefineEValue(p, 29L, "SelectionClear");
X  DefineEValue(p, 30L, "SelectionRequest");
X  DefineEValue(p, 31L, "SelectionNotify");
X  DefineEValue(p, 32L, "ColormapNotify");
X  DefineEValue(p, 33L, "ClientMessage");
X  DefineEValue(p, 34L, "MappingNotify");
X
X
X  p = DefineType(BITGRAVITY, ENUMERATED, "BITGRAVITY", PrintENUMERATED);
X  DefineEValue(p, 0L, "Forget");
X  DefineEValue(p, 1L, "NorthWest");
X  DefineEValue(p, 2L, "North");
X  DefineEValue(p, 3L, "NorthEast");
X  DefineEValue(p, 4L, "West");
X  DefineEValue(p, 5L, "Center");
X  DefineEValue(p, 6L, "East");
X  DefineEValue(p, 7L, "SouthWest");
X  DefineEValue(p, 8L, "South");
X  DefineEValue(p, 9L, "SouthEast");
X  DefineEValue(p, 10L, "Static");
X
X  p = DefineType(WINGRAVITY, ENUMERATED, "WINGRAVITY", PrintENUMERATED);
X  DefineEValue(p, 0L, "Unmap");
X  DefineEValue(p, 1L, "NorthWest");
X  DefineEValue(p, 2L, "North");
X  DefineEValue(p, 3L, "NorthEast");
X  DefineEValue(p, 4L, "West");
X  DefineEValue(p, 5L, "Center");
X  DefineEValue(p, 6L, "East");
X  DefineEValue(p, 7L, "SouthWest");
X  DefineEValue(p, 8L, "South");
X  DefineEValue(p, 9L, "SouthEast");
X  DefineEValue(p, 10L, "Static");
X
X  p = DefineType(BOOL, ENUMERATED, "BOOL", PrintENUMERATED);
X  DefineEValue(p, 0L, "False");
X  DefineEValue(p, 1L, "True");
X
X  p = DefineType(HOSTFAMILY, ENUMERATED, "HOSTFAMILY", PrintENUMERATED);
X  DefineEValue(p, 0L, "Internet");
X  DefineEValue(p, 1L, "DECnet");
X  DefineEValue(p, 2L, "Chaos");
X
X  p = DefineType(PK_MODE, ENUMERATED, "PK_MODE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Synchronous");
X  DefineEValue(p, 1L, "Asynchronous");
X
X  p = DefineType(NO_YES, ENUMERATED, "NO_YES", PrintENUMERATED);
X  DefineEValue(p, 0L, "No");
X  DefineEValue(p, 1L, "Yes");
X  DefineEValue(p, 2L, "Default");
X
X  p = DefineType(WINDOWCLASS, ENUMERATED, "WINDOWCLASS", PrintENUMERATED);
X  DefineEValue(p, 0L, "CopyFromParent");
X  DefineEValue(p, 1L, "InputOutput");
X  DefineEValue(p, 2L, "InputOnly");
X
X  p = DefineType(BACKSTORE, ENUMERATED, "BACKSTORE", PrintENUMERATED);
X  DefineEValue(p, 0L, "NotUseful");
X  DefineEValue(p, 1L, "WhenMapped");
X  DefineEValue(p, 2L, "Always");
X
X  p = DefineType(MAPSTATE, ENUMERATED, "MAPSTATE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Unmapped");
X  DefineEValue(p, 1L, "Unviewable");
X  DefineEValue(p, 2L, "Viewable");
X
X  p = DefineType(STACKMODE, ENUMERATED, "STACKMODE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Above");
X  DefineEValue(p, 1L, "Below");
X  DefineEValue(p, 2L, "TopIf");
X  DefineEValue(p, 3L, "BottomIf");
X  DefineEValue(p, 4L, "Opposite");
X
X  p = DefineType(CIRMODE, ENUMERATED, "CIRMODE", PrintENUMERATED);
X  DefineEValue(p, 0L, "RaiseLowest");
X  DefineEValue(p, 1L, "LowerHighest");
X
X  p = DefineType(CHANGEMODE, ENUMERATED, "CHANGEMODE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Replace");
X  DefineEValue(p, 1L, "Prepend");
X  DefineEValue(p, 2L, "Append");
X
X  p = DefineType(GRABSTAT, ENUMERATED, "GRABSTAT", PrintENUMERATED);
X  DefineEValue(p, 0L, "Success");
X  DefineEValue(p, 1L, "AlreadyGrabbed");
X  DefineEValue(p, 2L, "InvalidTime");
X  DefineEValue(p, 3L, "NotViewable");
X  DefineEValue(p, 4L, "Frozen");
X
X  p = DefineType(EVENTMODE, ENUMERATED, "EVENTMODE", PrintENUMERATED);
X  DefineEValue(p, 0L, "AsyncPointer");
X  DefineEValue(p, 1L, "SyncPointer");
X  DefineEValue(p, 2L, "ReplayPointer");
X  DefineEValue(p, 3L, "AsyncKeyboard");
X  DefineEValue(p, 4L, "SyncKeyboard");
X  DefineEValue(p, 5L, "ReplayKeyboard");
X  DefineEValue(p, 6L, "AsyncBoth");
X  DefineEValue(p, 7L, "SyncBoth");
X
X  p = DefineType(FOCUSAGENT, ENUMERATED, "FOCUSAGENT", PrintENUMERATED);
X  DefineEValue(p, 0L, "None");
X  DefineEValue(p, 1L, "PointerRoot");
X  DefineEValue(p, 2L, "Parent");
X
X  p = DefineType(DIRECT, ENUMERATED, "DIRECT", PrintENUMERATED);
X  DefineEValue(p, 0L, "LeftToRight");
X  DefineEValue(p, 1L, "RightToLeft");
X
X  p = DefineType(GCFUNC, ENUMERATED, "GCFUNC", PrintENUMERATED);
X  DefineEValue(p, 0L, "Clear");
X  DefineEValue(p, 1L, "And");
X  DefineEValue(p, 2L, "AndReverse");
X  DefineEValue(p, 3L, "Copy");
X  DefineEValue(p, 4L, "AndInverted");
X  DefineEValue(p, 5L, "Noop");
X  DefineEValue(p, 6L, "Xor");
X  DefineEValue(p, 7L, "Or");
X  DefineEValue(p, 8L, "Nor");
X  DefineEValue(p, 9L, "Equiv");
X  DefineEValue(p, 10L, "Invert");
X  DefineEValue(p, 11L, "OrReverse");
X  DefineEValue(p, 12L, "CopyInverted");
X  DefineEValue(p, 13L, "OrInverted");
X  DefineEValue(p, 14L, "Nand");
X  DefineEValue(p, 15L, "Set");
X
X  p = DefineType(LINESTYLE, ENUMERATED, "LINESTYLE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Solid");
X  DefineEValue(p, 1L, "OnOffDash");
X  DefineEValue(p, 2L, "DoubleDash");
X
X  p = DefineType(CAPSTYLE, ENUMERATED, "CAPSTYLE", PrintENUMERATED);
X  DefineEValue(p, 0L, "NotLast");
X  DefineEValue(p, 1L, "Butt");
X  DefineEValue(p, 2L, "Round");
X  DefineEValue(p, 3L, "Projecting");
X
X  p = DefineType(JOINSTYLE, ENUMERATED, "JOINSTYLE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Miter");
X  DefineEValue(p, 1L, "Round");
X  DefineEValue(p, 2L, "Bevel");
X
X  p = DefineType(FILLSTYLE, ENUMERATED, "FILLSTYLE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Solid");
X  DefineEValue(p, 1L, "Tiled");
X  DefineEValue(p, 2L, "Stippled");
X  DefineEValue(p, 3L, "OpaqueStippled");
X
X  p = DefineType(FILLRULE, ENUMERATED, "FILLRULE", PrintENUMERATED);
X  DefineEValue(p, 0L, "EvenOdd");
X  DefineEValue(p, 1L, "Winding");
X
X  p = DefineType(SUBWINMODE, ENUMERATED, "SUBWINMODE", PrintENUMERATED);
X  DefineEValue(p, 0L, "ClipByChildren");
X  DefineEValue(p, 1L, "IncludeInferiors");
X
X  p = DefineType(ARCMODE, ENUMERATED, "ARCMODE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Chord");
X  DefineEValue(p, 1L, "PieSlice");
X
X  p = DefineType(RECTORDER, ENUMERATED, "RECTORDER", PrintENUMERATED);
X  DefineEValue(p, 0L, "UnSorted");
X  DefineEValue(p, 1L, "YSorted");
X  DefineEValue(p, 2L, "YXSorted");
X  DefineEValue(p, 3L, "YXBanded");
X
X  p = DefineType(COORMODE, ENUMERATED, "COORMODE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Origin");
X  DefineEValue(p, 1L, "Previous");
X
X  p = DefineType(POLYSHAPE, ENUMERATED, "POLYSHAPE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Complex");
X  DefineEValue(p, 1L, "Nonconvex");
X  DefineEValue(p, 2L, "Convex");
X
X  p = DefineType(IMAGEMODE, ENUMERATED, "IMAGEMODE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Bitmap");
X  DefineEValue(p, 1L, "XYPixmap");
X  DefineEValue(p, 2L, "ZPixmap");
X
X  p = DefineType(ALLORNONE, ENUMERATED, "ALLORNONE", PrintENUMERATED);
X  DefineEValue(p, 0L, "None");
X  DefineEValue(p, 1L, "All");
X
X  p = DefineType(OBJECTCLASS, ENUMERATED, "OBJECTCLASS", PrintENUMERATED);
X  DefineEValue(p, 0L, "Cursor");
X  DefineEValue(p, 1L, "Tile");
X  DefineEValue(p, 2L, "Stipple");
X
X  p = DefineType(OFF_ON, ENUMERATED, "OFF_ON", PrintENUMERATED);
X  DefineEValue(p, 0L, "Off");
X  DefineEValue(p, 1L, "On");
X  DefineEValue(p, 2L, "Default");
X
X  p = DefineType(INS_DEL, ENUMERATED, "INS_DEL", PrintENUMERATED);
X  DefineEValue(p, 0L, "Insert");
X  DefineEValue(p, 1L, "Delete");
X
X  p = DefineType(DIS_EN, ENUMERATED, "DIS_EN", PrintENUMERATED);
X  DefineEValue(p, 0L, "Disabled");
X  DefineEValue(p, 1L, "Enabled");
X
X  p = DefineType(CLOSEMODE, ENUMERATED, "CLOSEMODE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Destroy");
X  DefineEValue(p, 1L, "RetainPermanent");
X  DefineEValue(p, 2L, "RetainTemporary");
X
X  p = DefineType(SAVEMODE, ENUMERATED, "SAVEMODE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Reset");
X  DefineEValue(p, 1L, "Activate");
X
X  p = DefineType(RSTATUS, ENUMERATED, "RSTATUS", PrintENUMERATED);
X  DefineEValue(p, 0L, "Success");
X  DefineEValue(p, 1L, "Busy");
X  DefineEValue(p, 2L, "Failed");
X
X  p = DefineType(MOTIONDETAIL, ENUMERATED, "MOTIONDETAIL", PrintENUMERATED);
X  DefineEValue(p, 0L, "Normal");
X  DefineEValue(p, 1L, "Hint");
X
X  p = DefineType(ENTERDETAIL, ENUMERATED, "ENTERDETAIL", PrintENUMERATED);
X  DefineEValue(p, 0L, "Ancestor");
X  DefineEValue(p, 1L, "Virtual");
X  DefineEValue(p, 2L, "Inferior");
X  DefineEValue(p, 3L, "Nonlinear");
X  DefineEValue(p, 4L, "NonlinearVirtual");
X  DefineEValue(p, 5L, "Pointer");
X  DefineEValue(p, 6L, "PointerRoot");
X  DefineEValue(p, 7L, "None");
X
X  p = DefineType(BUTTONMODE, ENUMERATED, "BUTTONMODE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Normal");
X  DefineEValue(p, 1L, "Grab");
X  DefineEValue(p, 2L, "Ungrab");
X  DefineEValue(p, 3L, "WhileGrabbed");
X
X  p = DefineType(VISIBLE, ENUMERATED, "VISIBLE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Unobscured");
X  DefineEValue(p, 1L, "PartiallyObscured");
X  DefineEValue(p, 2L, "FullyObscured");
X
X  p = DefineType(CIRSTAT, ENUMERATED, "CIRSTAT", PrintENUMERATED);
X  DefineEValue(p, 0L, "Top");
X  DefineEValue(p, 1L, "Bottom");
X
X  p = DefineType(PROPCHANGE, ENUMERATED, "PROPCHANGE", PrintENUMERATED);
X  DefineEValue(p, 0L, "NewValue");
X  DefineEValue(p, 1L, "Deleted");
X
X  p = DefineType(CMAPCHANGE, ENUMERATED, "CMAPCHANGE", PrintENUMERATED);
X  DefineEValue(p, 0L, "Uninstalled");
X  DefineEValue(p, 1L, "Installed");
X
X  p = DefineType(MAPOBJECT, ENUMERATED, "MAPOBJECT", PrintENUMERATED);
X  DefineEValue(p, 0L, "Modifier");
X  DefineEValue(p, 1L, "Keyboard");
X  DefineEValue(p, 2L, "Pointer");
X
X  p = DefineType(BYTEMODE, ENUMERATED, "BYTEMODE", PrintENUMERATED);
X  DefineEValue(p, 0x42L, "MSB first");
X  DefineEValue(p, 0x6CL, "LSB first");
X
X  p = DefineType(BYTEORDER, ENUMERATED, "BYTEORDER", PrintENUMERATED);
X  DefineEValue(p, 0L, "LSB first");
X  DefineEValue(p, 1L, "MSB first");
X
X  p = DefineType(COLORCLASS, ENUMERATED, "COLORCLASS", PrintENUMERATED);
X  DefineEValue(p, 0L, "StaticGray");
X  DefineEValue(p, 1L, "GrayScale");
X  DefineEValue(p, 2L, "StaticColor");
X  DefineEValue(p, 3L, "PseudoColor");
X  DefineEValue(p, 4L, "TrueColor");
X  DefineEValue(p, 5L, "DirectColor");
X`7D
X
X/* ************************************************************ */
X/*`09`09`09`09`09`09`09`09*/
X/*`09`09`09`09`09`09`09`09*/
X/* ************************************************************ */
X
XInitSetTypes()
X`7B
X  TYPE p;
X
X  p = DefineType(SETofEVENT, SET, "SETofEVENT", PrintSET);
X  DefineEValue(p, 0x00000001L, "KeyPress");
X  DefineEValue(p, 0x00000002L, "KeyRelease");
X  DefineEValue(p, 0x00000004L, "ButtonPress");
X  DefineEValue(p, 0x00000008L, "ButtonRelease");
X  DefineEValue(p, 0x00000010L, "EnterWindow");
X  DefineEValue(p, 0x00000020L, "LeaveWindow");
X  DefineEValue(p, 0x00000040L, "PointerMotion");
X  DefineEValue(p, 0x00000080L, "PointerMotionHint");
X  DefineEValue(p, 0x00000100L, "Button1Motion");
X  DefineEValue(p, 0x00000200L, "Button2Motion");
X  DefineEValue(p, 0x00000400L, "Button3Motion");
X  DefineEValue(p, 0x00000800L, "Button4Motion");
X  DefineEValue(p, 0x00001000L, "Button5Motion");
X  DefineEValue(p, 0x00002000L, "ButtonMotion");
X  DefineEValue(p, 0x00004000L, "KeymapState");
X  DefineEValue(p, 0x00008000L, "Exposure");
X  DefineEValue(p, 0x00010000L, "VisibilityChange");
X  DefineEValue(p, 0x00020000L, "StructureNotify");
X  DefineEValue(p, 0x00040000L, "ResizeRedirect");
X  DefineEValue(p, 0x00080000L, "SubstructureNotify");
X  DefineEValue(p, 0x00100000L, "SubstructureRedirect");
X  DefineEValue(p, 0x00200000L, "FocusChange");
X  DefineEValue(p, 0x00400000L, "PropertyChange");
X  DefineEValue(p, 0x00800000L, "ColormapChange");
X  DefineEValue(p, 0x01000000L, "OwnerGrabButton");
X
X  p = DefineType(SETofPOINTEREVENT, SET, "SETofPOINTEREVENT", PrintSET);
X  DefineEValue(p, 0x00000004L, "ButtonPress");
X  DefineEValue(p, 0x00000008L, "ButtonRelease");
X  DefineEValue(p, 0x00000010L, "EnterWindow");
X  DefineEValue(p, 0x00000020L, "LeaveWindow");
X  DefineEValue(p, 0x00000040L, "PointerMotion");
X  DefineEValue(p, 0x00000080L, "PointerMotionHint");
X  DefineEValue(p, 0x00000100L, "Button1Motion");
X  DefineEValue(p, 0x00000200L, "Button2Motion");
X  DefineEValue(p, 0x00000400L, "Button3Motion");
X  DefineEValue(p, 0x00000800L, "Button4Motion");
X  DefineEValue(p, 0x00001000L, "Button5Motion");
X  DefineEValue(p, 0x00002000L, "ButtonMotion");
X  DefineEValue(p, 0x00004000L, "KeymapState");
X
X  p = DefineType(SETofDEVICEEVENT, SET, "SETofDEVICEEVENT", PrintSET);
X  DefineEValue(p, 0x00000001L, "KeyPress");
X  DefineEValue(p, 0x00000002L, "KeyRelease");
X  DefineEValue(p, 0x00000004L, "ButtonPress");
X  DefineEValue(p, 0x00000008L, "ButtonRelease");
X  DefineEValue(p, 0x00000040L, "PointerMotion");
X  DefineEValue(p, 0x00000100L, "Button1Motion");
X  DefineEValue(p, 0x00000200L, "Button2Motion");
X  DefineEValue(p, 0x00000400L, "Button3Motion");
X  DefineEValue(p, 0x00000800L, "Button4Motion");
X  DefineEValue(p, 0x00001000L, "Button5Motion");
X  DefineEValue(p, 0x00002000L, "ButtonMotion");
X
X  p = DefineType(SETofKEYBUTMASK, SET, "SETofKEYBUTMASK", PrintSET);
X  DefineEValue(p, 0x0001L, "Shift");
X  DefineEValue(p, 0x0002L, "Lock");
X  DefineEValue(p, 0x0004L, "Control");
X  DefineEValue(p, 0x0008L, "Mod1");
X  DefineEValue(p, 0x0010L, "Mod2");
X  DefineEValue(p, 0x0020L, "Mod3");
X  DefineEValue(p, 0x0040L, "Mod4");
X  DefineEValue(p, 0x0080L, "Mod5");
X  DefineEValue(p, 0x0100L, "Button1");
X  DefineEValue(p, 0x0200L, "Button2");
X  DefineEValue(p, 0x0400L, "Button3");
X  DefineEValue(p, 0x0800L, "Button4");
X  DefineEValue(p, 0x1000L, "Button5");
X
X  p = DefineType(SETofKEYMASK, SET, "SETofKEYMASK", PrintSET);
X  DefineEValue(p, 0x0001L, "Shift");
X  DefineEValue(p, 0x0002L, "Lock");
X  DefineEValue(p, 0x0004L, "Control");
X  DefineEValue(p, 0x0008L, "Mod1");
X  DefineEValue(p, 0x0010L, "Mod2");
X  DefineEValue(p, 0x0020L, "Mod3");
X  DefineEValue(p, 0x0040L, "Mod4");
X  DefineEValue(p, 0x0080L, "Mod5");
X  DefineEValue(p, 0x8000L, "AnyModifier");
X
X  p = DefineType(COLORMASK, SET, "COLORMASK", PrintSET);
X  DefineEValue(p, 0x01L, "do-red");
X  DefineEValue(p, 0x02L, "do-green");
X  DefineEValue(p, 0x04L, "do-blue");
X
X  p = DefineType(SCREENFOCUS, SET, "SCREENFOCUS", PrintSET);
X  DefineEValue(p, 0x01L, "focus");
X  DefineEValue(p, 0x02L, "same-screen");
X`7D
X
X
X/* ************************************************************ */
X/*`09`09`09`09`09`09`09`09*/
X/*`09`09`09`09`09`09`09`09*/
X/* ************************************************************ */
X
X/* Print Routines for builtin record types */
X
XPrintCHAR2B(buf)
X     unsigned char *buf;
X`7B
X  PrintField(buf, 0, 1, CARD8, "byte1");
X  PrintField(buf, 1, 1, CARD8, "byte2");
X`7D
X
XPrintPOINT(buf)
X     unsigned char *buf;
X`7B
X  PrintField(buf, 0, 2, INT16, "x");
X  PrintField(buf, 2, 2, INT16, "y");
X  return(4);
X`7D
X
XPrintRECTANGLE(buf)
X     unsigned char *buf;
X`7B
X  PrintField(buf, 0, 2, INT16, "x");
X  PrintField(buf, 2, 2, INT16, "y");
X  PrintField(buf, 4, 2, CARD16, "width");
X  PrintField(buf, 6, 2, CARD16, "height");
X  return(8);
X`7D
X
XPrintARC(buf)
X     unsigned char *buf;
X`7B
X  PrintField(buf, 0, 2, INT16, "x");
X  PrintField(buf, 2, 2, INT16, "y");
X  PrintField(buf, 4, 2, CARD16, "width");
X  PrintField(buf, 6, 2, CARD16, "height");
X  PrintField(buf, 8, 2, INT16, "angle1");
X  PrintField(buf, 10, 2, INT16, "angle2");
X  return(12);
X`7D
X
XPrintHOST(buf)
X     unsigned char *buf;
X`7B
X  short   n;
X  PrintField(buf, 0, 1, HOSTFAMILY, "family");
X  PrintField(buf, 2, 2, DVALUE2(n), "length of address");
X  n = IShort(&buf`5B2`5D);
X  PrintList(&buf`5B4`5D, (long)n, BYTE, "address");
X  return(pad((long)(4 + n)));
X`7D
X
XPrintTIMECOORD(buf)
X     unsigned char *buf;
X`7B
X  PrintField(buf, 0, 4, TIMESTAMP, "time");
X  PrintField(buf, 4, 2, CARD16, "x");
X  PrintField(buf, 6, 2, CARD16, "y");
X  return(8);
X`7D
X
XPrintFONTPROP(buf)
X     unsigned char *buf;
X`7B
X  PrintField(buf, 0, 4, ATOM, "name");
X  PrintField(buf, 4, 4, INT32, "value");
X  return(8);
X`7D
X
XPrintCHARINFO(buf)
X     unsigned char *buf;
X`7B
X  PrintField(buf, 0, 2, INT16, "left-side-bearing");
X  PrintField(buf, 2, 2, INT16, "right-side-bearing");
X  PrintField(buf, 4, 2, INT16, "character-width");
X  PrintField(buf, 6, 2, INT16, "ascent");
X  PrintField(buf, 8, 2, INT16, "descent");
X  PrintField(buf, 10, 2, CARD16, "attributes");
X  return(12);
X`7D
X
XPrintSEGMENT(buf)
X     unsigned char *buf;
X`7B
X  PrintField(buf, 0, 2, INT16, "x1");
X  PrintField(buf, 2, 2, INT16, "y1");
X  PrintField(buf, 4, 2, INT16, "x2");
X  PrintField(buf, 6, 2, INT16, "y2");
X  return(8);
X`7D
X
XPrintCOLORITEM(buf)
X     unsigned char *buf;
X`7B
X  PrintField(buf, 0, 4, CARD32, "pixel");
X  PrintField(buf, 4, 2, CARD16, "red");
X  PrintField(buf, 6, 2, CARD16, "green");
X  PrintField(buf, 8, 2, CARD16, "blue");
X  PrintField(buf, 10, 1, COLORMASK, "component selector");
X  return(12);
X`7D
X
XPrintRGB(buf)
X     unsigned char *buf;
X`7B
X  PrintField(buf, 0, 2, CARD16, "red");
X  PrintField(buf, 2, 2, CARD16, "green");
X  PrintField(buf, 4, 2, CARD16, "blue");
X  return(8);
X`7D
X
XPrintFORMAT(buf)
X     unsigned char *buf;
X`7B
X  PrintField(buf, 0, 1, CARD8, "depth");
X  PrintField(buf, 1, 1, CARD8, "bits-per-pixel");
X  PrintField(buf, 2, 1, CARD8, "scanline-pad");
X  return(8);
X`7D
X
XPrintSCREEN(buf)
X     unsigned char *buf;
X`7B
X  short   n /* number of elements in List of DEPTH */ ;
X  long    m /* length (in bytes) of List of DEPTH */ ;
X
X  PrintField(buf, 0, 4, WINDOW, "root");
X  PrintField(buf, 4, 4, COLORMAP, "default-colormap");
X  PrintField(buf, 8, 4, CARD32, "white-pixel");
+-+-+-+-+-+-+-+-  END  OF PART 7 +-+-+-+-+-+-+-+-
--
Patrick L. Mahan

--- TGV Window Washer ------------------------------- Mahan@TGV.COM ---------

Waking a person unnecessarily should not be considered  - Lazarus Long
a capital crime.  For a first offense, that is            From the Notebooks of
							  Lazarus Long
Technical Details
Message-ID: <8045410@MVB.SAIC.COM>
Path: arc1-ca.pugleaf.net!sparky!uunet!usc!news.service.uci.edu!unogate!mvb.saic.com!vmsnet-sources

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!sparky!uunet!usc!news.service.uci.edu!unogate!mvb.saic.com!vmsnet-sources
From: mahan@tgv.com (Patrick L. Mahan - TGV Window Washer)
Newsgroups: vmsnet.sources
Subject: XSCOPE/VMS 1.0, part 07/08
Message-ID: <8045410@MVB.SAIC.COM>
Date: Fri, 04 Sep 1992 05:34:37 GMT
Reply-To: mahan@tgv.com
Organization: TGV Incorporated (Tech Support) in Santa Cruz, CA
Lines: 1455
Approved: Mark.Berryman@Mvb.Saic.Com