[comp.sources.x] v09i018: Xmon - X protocol monitor, Part04/05

gregm@otc.otca.oz.au (Greg McFarlane) (09/05/90)

Submitted-by: Greg McFarlane <gregm@otc.otca.oz.au>
Posting-number: Volume 9, Issue 18
Archive-name: xmon/part04

Submitted-by: gregm@otc.otca.oz.au
Archive-name: xmon/part04

---- Cut Here and unpack ----
#!/bin/sh
# This is part 04 of xmon
if touch 2>&1 | fgrep 'amc' > /dev/null
 then TOUCH=touch
 else TOUCH=true
fi
# ============= table11.c ==============
if test X"$1" != X"-c" -a -f 'table11.c'; then
	echo "File already exists: skipping 'table11.c'"
else
echo "x - extracting table11.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > table11.c &&
X/*
X * Project: XMON - An X protocol monitor
X * 
X * File: table11.c
X * 
X * Description: Table initialization for X11 protocol
X * 
X * To initialize for the X11 protocol, we need to create data structures
X * describing the data types used by X11.
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
X * name, the kind of type, and a procedure to print an object of that
X * type.  The print procedure for a type <foo> is named Print<foo>.  The
X * kind of type is
X * 
X * BUILTIN:      one of the primitive types.
X * 
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 * 
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 * 
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
X * type (index) and the bytes in memory that are its value.
X * 
X */
X
X#include "common.h"
X
X#include "xmond.h"
X#include "x11.h"
X
X/* function prototypes: */
X/* table11.c: */
Xstatic TYPE DefineType P((short typeid , short class , char *name ,
IntCallback printproc ));
Xstatic void DefineEValue P((TYPE type , long value , char *name ));
Xstatic void DefineValues P((TYPE type , long value , int length , int
ctype , char *name ));
Xstatic void InitBuiltInTypes P((void ));
Xstatic void InitEnumeratedTypes P((void ));
Xstatic void InitSetTypes P((void ));
Xstatic void PrintCHAR2B P((unsigned char *buf ));
Xstatic int PrintPOINT P((unsigned char *buf ));
Xstatic int PrintRECTANGLE P((unsigned char *buf ));
Xstatic int PrintARC P((unsigned char *buf ));
Xstatic int PrintHOST P((unsigned char *buf ));
Xstatic int PrintTIMECOORD P((unsigned char *buf ));
Xstatic int PrintFONTPROP P((unsigned char *buf ));
Xstatic int PrintCHARINFO P((unsigned char *buf ));
Xstatic int PrintSEGMENT P((unsigned char *buf ));
Xstatic int PrintCOLORITEM P((unsigned char *buf ));
Xstatic int PrintRGB P((unsigned char *buf ));
Xstatic int PrintFORMAT P((unsigned char *buf ));
Xstatic int PrintSCREEN P((unsigned char *buf ));
Xstatic int PrintDEPTH P((unsigned char *buf ));
Xstatic int PrintVISUALTYPE P((unsigned char *buf ));
Xstatic void InitRecordTypes P((void ));
Xstatic void InitValuesTypes P((void ));
X
X/* end function prototypes */
X
XGlobal void
XInitializeX11()
X{
X	InitBuiltInTypes();
X	InitEnumeratedTypes();
X	InitSetTypes();
X	InitValuesTypes();
X	InitRecordTypes();
X}
X
Xstatic TYPE
XDefineType(typeid, class, name, printproc)
X	short					typeid;
X	short					class;
X	char					*name;
X	IntCallback				printproc;
X{
X	TD[typeid].Name = name;
X	TD[typeid].Type = class;
X	TD[typeid].ValueList = NULL;
X	TD[typeid].PrintProc = printproc;
X	return(&TD[typeid]);
X}
X
X/*
X * define an Enumerated Value (or a Set Value)
X */
Xstatic void
XDefineEValue(type, value, name)
X		TYPE type;
X		long    value;
X		char   *name;
X{
X	struct ValueListEntry  *p;
X
X	/* define the new value */
X	p = (struct ValueListEntry *)malloc((long)(sizeof (struct ValueListEntry)));
X	p->Name = name;
X	p->Value = value;
X
X	/* add an new value to the list. */
X	if (type->ValueList == NULL || type->ValueList->Value > p->Value)
X		{
X			p->Next = type->ValueList;
X			type->ValueList = p;
X		}
X	else
X		{
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				q = q->Next;
X			p->Next = q->Next;
X			q->Next = p;
X		}
X}
X
X/*
X * a Values list is like an enumerated Value, but has a type and length in
X * 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
X * the associated value for each bit
X */
Xstatic void
XDefineValues(type, value, length, ctype, name)
X		TYPE type;
X		long    value;
X		char   *name;
X{
X	struct ValueListEntry  *p;
X
X	p = (struct ValueListEntry *)malloc((long)(sizeof (struct ValueListEntry)));
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 || type->ValueList->Value > p->Value)
X		{
X			p->Next = type->ValueList;
X			type->ValueList = p;
X		}
X	else
X		{
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				q = q->Next;
X			p->Next = q->Next;
X			q->Next = p;
X		}
X}
X
Xstatic void
XInitBuiltInTypes()
X{
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}
X
Xstatic void
XInitEnumeratedTypes()
X{
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}
X
Xstatic void
XInitSetTypes()
X{
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}
X
X/*
X * Print Routines for builtin record types
X */
X
Xstatic void
XPrintCHAR2B(buf)
X		unsigned char *buf;
X{
X	PrintField(buf, 0, 1, CARD8, "byte1");
X	PrintField(buf, 1, 1, CARD8, "byte2");
X}
X
Xstatic int
XPrintPOINT(buf)
X		unsigned char *buf;
X{
X	PrintField(buf, 0, 2, INT16, "x");
X	PrintField(buf, 2, 2, INT16, "y");
X	return(4);
X}
X
Xstatic int
XPrintRECTANGLE(buf)
X		unsigned char *buf;
X{
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}
X
Xstatic int
XPrintARC(buf)
X		unsigned char *buf;
X{
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}
X
Xstatic int
XPrintHOST(buf)
X		unsigned char *buf;
X{
X	short   n;
X	PrintField(buf, 0, 1, HOSTFAMILY, "family");
X	PrintField(buf, 2, 2, DVALUE2(n), "length of address");
X	n = IShort(&buf[2]);
X	PrintList(&buf[4], (long)n, BYTE, "address");
X	return(pad((long)(4 + n)));
X}
X
Xstatic int
XPrintTIMECOORD(buf)
X		unsigned char *buf;
X{
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}
X
Xstatic int
XPrintFONTPROP(buf)
X		unsigned char *buf;
X{
X	PrintField(buf, 0, 4, ATOM, "name");
X	PrintField(buf, 4, 4, INT32, "value");
X	return(8);
X}
X
Xstatic int
XPrintCHARINFO(buf)
X		unsigned char *buf;
X{
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}
X
Xstatic int
XPrintSEGMENT(buf)
X		unsigned char *buf;
X{
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}
X
Xstatic int
XPrintCOLORITEM(buf)
X		unsigned char *buf;
X{
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}
X
Xstatic int
XPrintRGB(buf)
X		unsigned char *buf;
X{
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}
X
Xstatic int
XPrintFORMAT(buf)
X		unsigned char *buf;
X{
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}
X
Xstatic int
XPrintSCREEN(buf)
X		unsigned char *buf;
X{
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");
X	PrintField(buf, 12, 4, CARD32, "black-pixel");
X	PrintField(buf, 16, 4, SETofEVENT, "current-input-masks");
X	PrintField(buf, 20, 2, CARD16, "width-in-pixels");
X	PrintField(buf, 22, 2, CARD16, "height-in-pixels");
X	PrintField(buf, 24, 2, CARD16, "width-in-millimeters");
X	PrintField(buf, 26, 2, CARD16, "height-in-millimeters");
X	PrintField(buf, 28, 2, CARD16, "min-installed-maps");
X	PrintField(buf, 30, 2, CARD16, "max-installed-maps");
X	PrintField(buf, 32, 4, VISUALID, "root-visual");
X	PrintField(buf, 36, 1, BACKSTORE, "backing-stores");
X	PrintField(buf, 37, 1, BOOL, "save-unders");
X	PrintField(buf, 38, 1, CARD8, "root-depth");
X	PrintField(buf, 39, 1, CARD8, "number of allowed-depths");
X	n = IByte(&buf[39]);
X	m = PrintList(&buf[40], (long)n, DEPTH, "allowed-depths");
X	return(40 + m);
X}
X
Xstatic int
XPrintDEPTH(buf)
X		unsigned char *buf;
X{
X	short   n /* number of elements in List of VISUALTYPE */ ;
X	short   m /* length (in bytes) of List of VISUALTYPE */ ;
X
X	PrintField(buf, 0, 1, CARD8, "depth");
X	PrintField(buf, 2, 2, DVALUE2(n), "number of visuals");
X	n = IShort(&buf[2]);
X	m = PrintList(&buf[8], (long)n, VISUALTYPE, "visuals");
X	return(8 + m);
X}
X
Xstatic int
XPrintVISUALTYPE(buf)
X		unsigned char *buf;
X{
X	PrintField(buf, 0, 4, VISUALID, "visual-id");
X	PrintField(buf, 4, 1, COLORCLASS, "class");
X	PrintField(buf, 5, 1, CARD8, "bits-per-rgb-value");
X	PrintField(buf, 6, 2, CARD16, "colormap-entries");
X	PrintField(buf, 8, 4, CARD32, "red-mask");
X	PrintField(buf, 12, 4, CARD32, "green-mask");
X	PrintField(buf, 16, 4, CARD32, "blue-mask");
X	return(24);
X}
X
Xstatic void
XInitRecordTypes()
X{
X	(void) DefineType(CHAR2B, RECORD, "CHAR2B", PrintCHAR2B);
X	(void) DefineType(POINT, RECORD, "POINT", PrintPOINT);
X	(void) DefineType(RECTANGLE, RECORD, "RECTANGLE", PrintRECTANGLE);
X	(void) DefineType(ARC, RECORD, "ARC", PrintARC);
X	(void) DefineType(HOST, RECORD, "HOST", PrintHOST);
X	(void) DefineType(TIMECOORD, RECORD, "TIMECOORD", PrintTIMECOORD);
X	(void) DefineType(FONTPROP, RECORD, "FONTPROP", PrintFONTPROP);
X	(void) DefineType(CHARINFO, RECORD, "CHARINFO", PrintCHARINFO);
X	(void) DefineType(SEGMENT, RECORD, "SEGMENT", PrintSEGMENT);
X	(void) DefineType(COLORITEM, RECORD, "COLORITEM", PrintCOLORITEM);
X	(void) DefineType(RGB, RECORD, "RGB", PrintRGB);
X	(void) DefineType(FORMAT, RECORD, "FORMAT", PrintFORMAT);
X	(void) DefineType(SCREEN, RECORD, "SCREEN", PrintSCREEN);
X	(void) DefineType(DEPTH, RECORD, "DEPTH", PrintDEPTH);
X	(void) DefineType(VISUALTYPE, RECORD, "VISUALTYPE", PrintVISUALTYPE);
X}
X
Xstatic void
XInitValuesTypes()
X{
X	TYPE p;
X
X	p = DefineType(WINDOW_BITMASK, SET, "WINDOW_BITMASK", PrintSET);
X
X	DefineValues(p, 0x00000001L, 4, PIXMAPNPR, "background-pixmap");
X	DefineValues(p, 0x00000002L, 4, CARD32, "background-pixel");
X	DefineValues(p, 0x00000004L, 4, PIXMAPC, "border-pixmap");
X	DefineValues(p, 0x00000008L, 4, CARD32, "border-pixel");
X	DefineValues(p, 0x00000010L, 1, BITGRAVITY, "bit-gravity");
X	DefineValues(p, 0x00000020L, 1, WINGRAVITY, "win-gravity");
X	DefineValues(p, 0x00000040L, 1, BACKSTORE, "backing-store");
X	DefineValues(p, 0x00000080L, 4, CARD32, "backing-planes");
X	DefineValues(p, 0x00000100L, 4, CARD32, "backing-pixel");
X	DefineValues(p, 0x00000200L, 1, BOOL, "override-redirect");
X	DefineValues(p, 0x00000400L, 1, BOOL, "save-under");
X	DefineValues(p, 0x00000800L, 4, SETofEVENT, "event-mask");
X	DefineValues(p, 0x00001000L, 4, SETofDEVICEEVENT, "do-not-propagate-mask");
X	DefineValues(p, 0x00002000L, 4, COLORMAPC, "colormap");
X	DefineValues(p, 0x00004000L, 4, CURSOR, "cursor");
X
X	p = DefineType(CONFIGURE_BITMASK, SET, "CONFIGURE_BITMASK", PrintSET);
X	DefineValues(p, 0x0001L, 2, INT16, "x");
X	DefineValues(p, 0x0002L, 2, INT16, "y");
X	DefineValues(p, 0x0004L, 2, CARD16, "width");
X	DefineValues(p, 0x0008L, 2, CARD16, "height");
X	DefineValues(p, 0x0010L, 2, CARD16, "border-width");
X	DefineValues(p, 0x0020L, 4, WINDOW, "sibling");
X	DefineValues(p, 0x0040L, 1, STACKMODE, "stack-mode");
X
X	p = DefineType(GC_BITMASK, SET, "GC_BITMASK", PrintSET);
X	DefineValues(p, 0x00000001L, 1, GCFUNC, "function");
X	DefineValues(p, 0x00000002L, 4, CARD32, "plane-mask");
X	DefineValues(p, 0x00000004L, 4, CARD32, "foreground");
X	DefineValues(p, 0x00000008L, 4, CARD32, "background");
X	DefineValues(p, 0x00000010L, 2, CARD16, "line-width");
X	DefineValues(p, 0x00000020L, 1, LINESTYLE, "line-style");
X	DefineValues(p, 0x00000040L, 1, CAPSTYLE, "cap-style");
X	DefineValues(p, 0x00000080L, 1, JOINSTYLE, "join-style");
X	DefineValues(p, 0x00000100L, 1, FILLSTYLE, "fill-style");
X	DefineValues(p, 0x00000200L, 1, FILLRULE, "fill-rule");
X	DefineValues(p, 0x00000400L, 4, PIXMAP, "tile");
X	DefineValues(p, 0x00000800L, 4, PIXMAP, "stipple");
X	DefineValues(p, 0x00001000L, 2, INT16, "tile-stipple-x-origin");
X	DefineValues(p, 0x00002000L, 2, INT16, "tile-stipple-y-origin");
X	DefineValues(p, 0x00004000L, 4, FONT, "font");
X	DefineValues(p, 0x00008000L, 1, SUBWINMODE, "subwindow-mode");
X	DefineValues(p, 0x00010000L, 1, BOOL, "graphics-exposures");
X	DefineValues(p, 0x00020000L, 2, INT16, "clip-x-origin");
X	DefineValues(p, 0x00040000L, 2, INT16, "clip-y-origin");
X	DefineValues(p, 0x00080000L, 4, PIXMAP, "clip-mask");
X	DefineValues(p, 0x00100000L, 2, CARD16, "dash-offset");
X	DefineValues(p, 0x00200000L, 1, CARD8, "dashes");
X	DefineValues(p, 0x00400000L, 1, ARCMODE, "arc-mode");
X
X	p = DefineType(KEYBOARD_BITMASK, SET, "KEYBOARD_BITMASK", PrintSET);
X	DefineValues(p, 0x0001L, 1, INT8, "key-click-percent");
X	DefineValues(p, 0x0002L, 1, INT8, "bell-percent");
X	DefineValues(p, 0x0004L, 2, INT16, "bell-pitch");
X	DefineValues(p, 0x0008L, 2, INT16, "bell-duration");
X	DefineValues(p, 0x0010L, 1, CARD8, "led");
X	DefineValues(p, 0x0020L, 1, OFF_ON, "led-mode");
X	DefineValues(p, 0x0040L, 1, KEYCODE, "key");
X	DefineValues(p, 0x0080L, 1, OFF_ON, "auto-repeat-mode");
X}
SHAR_EOF
$TOUCH -am 0903162990 table11.c &&
chmod 0664 table11.c ||
echo "restore of table11.c failed"
set `wc -c table11.c`;Wc_c=$1
if test "$Wc_c" != "37451"; then
	echo original size 37451, current size $Wc_c
fi
fi
# ============= widgeti.c ==============
if test X"$1" != X"-c" -a -f 'widgeti.c'; then
	echo "File already exists: skipping 'widgeti.c'"
else
echo "x - extracting widgeti.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > widgeti.c &&
X/*
X *  File: widgeti.c
X *
X *  Description: Routines to build various widget combinations
X */
X#include    <stdio.h>
X#include    <strings.h>
X#include	<X11/cursorfont.h>
X#include	<X11/Intrinsic.h>
X#include	<X11/StringDefs.h>
X#include	<X11/Shell.h>
X#include	<X11/Xaw/Form.h>
X#include	<X11/Xaw/Command.h>
X#include	<X11/Xaw/Label.h>
X#include	<X11/Xaw/Box.h>
X#include	<X11/Xaw/List.h>
X#include	<X11/Xaw/Toggle.h>
X#include	<X11/Xaw/Viewport.h>
X
X#include	"common.h"
X#include    "widgeti.h"
X
X/* function prototypes: */
X/* widgeti.c: */
X
X/* end function prototypes */
X
XDeclareArgs
X
Xstatic	char				toggle_translation_table[] =
X	"<EnterWindow>:				highlight(Always)		\n\
X	 <LeaveWindow>:				unhighlight()			\n\
X	 <Btn1Down>,<Btn1Up>:		set() notify()";
X
Xstatic XtTranslations		toggle_trans;
X
XGlobal Widget
Xinit_widgeti(name, app_class, argcp, argv)
X	char        *name;
X	char        *app_class;
X	int		    *argcp;
X	char        **argv;
X{
X	return XtInitialize(NULL, app_class, NULL, 0, argcp, argv);
X}
X
XGlobal Widget
Xcreate_form(parent, fromH, fromV, borderWidth)
XWidget  					parent;
XWidget  					fromH;
XWidget  					fromV;
Xint							borderWidth;
X{
X	Widget					widget;
X
X	numargs = 0;
X	AddArg(XtNfromHoriz, fromH);
X	AddArg(XtNfromVert,	fromV);
X	AddArg(XtNborderWidth, borderWidth);
X	AddArg(XtNdefaultDistance, 2);
X	widget = XtCreateManagedWidget
X	(
X		"form", formWidgetClass, parent, arglist, numargs
X	);
X	return widget;
X}
X
XGlobal Widget
Xcreate_label(parent, fromH, fromV, width, borderWidth, string)
XWidget  					parent;
XWidget  					fromH;
XWidget  					fromV;
Xint							width;
Xint							borderWidth;
Xchar						*string;
X{
X	Widget					widget;
X
X	numargs = 0;
X	AddArg(XtNfromHoriz, fromH);
X	AddArg(XtNfromVert,	fromV);
X	AddArg(XtNlabel, string);
X	AddArg(XtNborderWidth, borderWidth);
X	if (width != 0)
X	{
X		AddArg(XtNwidth, width);
X	}
X	widget = XtCreateManagedWidget
X	(
X		"label", labelWidgetClass, parent, arglist, numargs
X	);
X	return widget;
X}
X
XGlobal Widget
Xcreate_command_button(parent, fromH, fromV, string, callback, data)
XWidget  					parent;
XWidget  					fromH;
XWidget  					fromV;
Xchar						*string;
XVoidCallback				callback;
XPointer						data;
X{
X	Widget					widget;
X
X	numargs = 0;
X	AddArg(XtNfromHoriz, fromH);
X	AddArg(XtNfromVert,	fromV);
X	AddArg(XtNlabel, string);
X	widget = XtCreateManagedWidget
X	(
X		"command", commandWidgetClass, parent, arglist, numargs
X	);
X	XtAddCallback(widget, XtNcallback, callback, data);
X	return widget;
X}
X
XGlobal Widget
Xcreate_one_of_many_toggle(label, parent, fromH, fromV, strings, callback)
Xchar						*label;
XWidget  					parent;
XWidget  					fromH;
XWidget  					fromV;
Xchar						*strings;
XVoidCallback				callback;
X{
X	Widget					form;
X	Widget					widget;
X	Widget					radio = NULL;
X	char					*ptr;
X
X	numargs = 0;
X	AddArg(XtNborderWidth, 0);
X	AddArg(XtNfromHoriz, fromH);
X	AddArg(XtNfromVert, fromV);
X	AddArg(XtNdefaultDistance, 0);
X	form = XtCreateManagedWidget
X	(
X		"toggle_form", formWidgetClass, parent, arglist, numargs
X	);
X
X	numargs = 0;
X	AddArg(XtNborderWidth, 0);
X	AddArg(XtNlabel, label);
X	widget = XtCreateManagedWidget
X	(
X		"label", labelWidgetClass, form, arglist, numargs
X	);
X
X	toggle_trans = XtParseTranslationTable(toggle_translation_table);
X
X	do
X	{
X		ptr = index(strings, '\n');
X		if (ptr != NULL)
X			*ptr = '\0';
X		if (strlen(strings) > 0)
X		{
X			numargs = 0;
X			AddArg(XtNfromHoriz, widget);
X			AddArg(XtNtranslations, toggle_trans);
X			AddArg(XtNlabel, strings);
X			AddArg(XtNradioData, strings);
X			if (radio != NULL)
X				AddArg(XtNradioGroup, radio);
X			widget = XtCreateManagedWidget
X			(
X				(radio == NULL) ? "radio" : "",
X				toggleWidgetClass, form, arglist, numargs
X			);
X			XtAddCallback(widget, XtNcallback, callback, strings);
X			if (radio == NULL)
X				radio = widget;
X		}
X		if (ptr != NULL)
X			strings = ptr + 1;
X	}
X		while (ptr != NULL);
X	return form;
X}
X
XGlobal void
Xset_toggle_state(widget, data)
XWidget						widget;
Xchar						*data;
X{
X	Widget		child;
X	WidgetList	list;
X	Cardinal	num;
X	int			i;
X	char		*radio_data;
X	
X	child = XtNameToWidget(widget, "radio");
X	if (child == (Widget)NULL)
X		return;
X	XawToggleUnsetCurrent(child);
X
X	numargs = 0;
X	AddArg(XtNchildren, &list);
X	AddArg(XtNnumChildren, &num);
X	XtGetValues(widget, arglist, numargs);
X	
X	for (i = 0; i < num; i++)
X	{	
X		if (XtIsSubclass(child = list[i], toggleWidgetClass))
X		{
X			numargs = 0;
X			AddArg(XtNradioData, &radio_data);
X			XtGetValues(child, arglist, numargs);
X			if (!strcmp(data, radio_data))
X			{
X				numargs = 0;
X				AddArg(XtNstate, True);
X				XtSetValues(child, arglist, numargs);
X				break;
X			}
X		}
X	}
X}
X
XGlobal char *
Xget_toggle_state(widget)
XWidget						widget;
X{
X	Widget					child;
X	char					*rtn;
X
X	child = XtNameToWidget(widget, "radio");
X	if (child != (Widget)NULL)
X		rtn = (char *)XawToggleGetCurrent(child);
X	else
X		rtn = (char *)NULL;
X	return rtn;
X}
X
XGlobal Widget
Xcreate_viewlist
X(
X	parent, fromH, fromV, list, width, height, borderWidth, callback, data
X)
XWidget  					parent;
XWidget  					fromH;
XWidget  					fromV;
Xchar						**list;
Xint							width;
Xint							height;
Xint							borderWidth;
XVoidCallback				callback;
XPointer						data;
X{
X	Widget					view_list;
X	Widget					list_area;
X
X	numargs = 0;
X	AddArg(XtNfromHoriz, fromH);
X	AddArg(XtNfromVert,	fromV);
X	AddArg(XtNborderWidth, borderWidth);
X	AddArg(XtNwidth, width);
X	AddArg(XtNheight, height);
X	AddArg(XtNallowVert, True);
X	AddArg(XtNforceBars, True);
X	view_list = XtCreateManagedWidget
X	(
X		"view_list", viewportWidgetClass, parent, arglist, numargs
X	);
X
X	numargs = 0;
X	AddArg(XtNlist, list);
X	AddArg(XtNdefaultColumns, 1);
X	AddArg(XtNforceColumns, True);
X	AddArg(XtNverticalList, True);
X	list_area = XtCreateManagedWidget
X	(
X		"list_area", listWidgetClass, view_list, arglist, numargs
X	);
X	XtAddCallback(list_area, XtNcallback, callback, data);
X
X	return view_list;
X}
X
XGlobal void
Xset_viewlist(widget, list, nitems, longest)
X	Widget					widget;
X	char					**list;
X	int						nitems;
X	int						longest;
X{
X	Widget		child;
X	WidgetList	wlist;
X	Cardinal	num;
X	int			i;
X	
X	numargs = 0;
X	AddArg(XtNchildren, &wlist);
X	AddArg(XtNnumChildren, &num);
X	XtGetValues(widget, arglist, numargs);
X	for (i = 0; i < num; i++)
X		if (XtIsSubclass(child = wlist[i], listWidgetClass))
X			XawListChange(child, list, nitems, longest, False);
X}
SHAR_EOF
$TOUCH -am 0903162990 widgeti.c &&
chmod 0775 widgeti.c ||
echo "restore of widgeti.c failed"
set `wc -c widgeti.c`;Wc_c=$1
if test "$Wc_c" != "6219"; then
	echo original size 6219, current size $Wc_c
fi
fi
# ============= xmonui.c ==============
if test X"$1" != X"-c" -a -f 'xmonui.c'; then
	echo "File already exists: skipping 'xmonui.c'"
else
echo "x - extracting xmonui.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > xmonui.c &&
X/*
X * Project: XMON - An X protocol monitor
X *
X * File: xmonui.c
X *
X * Description: Contains main() for xmondui
X *
X */
X
X#include <X11/Xatom.h>
X#include <X11/Intrinsic.h>
X#include <X11/StringDefs.h>
X#include <X11/Xaw/Form.h>
X
X#include "common.h"
X#include "widgeti.h"
X
X/* function prototypes: */
X/* xmonui.c: */
Xstatic void quit_cb P((Widget w , caddr_t client_data , caddr_t call_data ));
Xstatic void toggle_cb P((Widget widget , caddr_t client_data , caddr_t
call_data ));
Xstatic void list_cb P((Widget widget , caddr_t client_data , caddr_t
call_data ));
Xstatic void count_cb P((Widget widget , caddr_t client_data , caddr_t
call_data ));
Xstatic Widget build_toggle P((Widget parent , int toggle_index , Widget
vert ));
Xstatic Widget build_list P((Widget parent , int list_index , Widget horiz ));
Xstatic Widget build_counting_buttons P((Widget parent , Widget vert ,
char *label , char **output_strings ));
X
X/* end function prototypes */
X
X#define NUM_REQUESTS	120
X
Xchar					*request_monitor_list[NUM_REQUESTS + 1] =
X{
X#include "requests.h"
X};
X
Xchar					*request_block_list[NUM_REQUESTS + 1] =
X{
X#include "requests.h"
X};
X
X#define NUM_EVENTS	33
X
Xchar					*event_monitor_list[NUM_EVENTS + 1] =
X{
X#include "events.h"
X};
X
Xchar					*event_block_list[NUM_EVENTS + 1] =
X{
X#include "events.h"
X};
X
X#define NUM_COUNT_BUTTONS		5
X
Xchar					*count_names[NUM_COUNT_BUTTONS] =
X{
X	"start", "stop", "clear", "print", "print zero",
X};
X
Xchar					*request_output_strings[NUM_COUNT_BUTTONS] =
X{
X	"startrequestcount",
X	"stoprequestcount",
X	"clearrequestcount",
X	"printrequestcount",
X	"printzerorequestcount",
X};
X
Xchar					*event_output_strings[NUM_COUNT_BUTTONS] =
X{
X	"starteventcount",
X	"stopeventcount",
X	"cleareventcount",
X	"printeventcount",
X	"printzeroeventcount",
X};
X
Xchar					*error_output_strings[NUM_COUNT_BUTTONS] =
X{
X	"starterrorcount",
X	"stoperrorcount",
X	"clearerrorcount",
X	"printerrorcount",
X	"printzeroerrorcount",
X};
X
Xtypedef struct
X{
X	char				*label;
X	char				*toggle_strings;
X	char				*output_string;
X	char				*default_string;
X	Widget				widget;
X}
X	ToggleData;
X
X#define DETAIL_STR		"off\nnames\nmain\nfull\nhex"
X
Xstatic ToggleData toggledata[] =
X{
X	{
X		"output detail: request ",
X		DETAIL_STR, "request_verbose", "off"
X		/*"0\n1\n2\n3\n4", "request_verbose %s\n", "0"*/
X	},
X	{
X		"               event   ",
X		DETAIL_STR, "event_verbose", "off"
X		/*"0\n1\n2\n3\n4", "event_verbose %s\n", "0"*/
X	},
X	{
X		"               error   ",
X		DETAIL_STR, "error_verbose", "names"
X		/*"0\n1\n2\n3\n4", "error_verbose %s\n", "1"*/
X	},
X	{
X		"               reply   ",
X		DETAIL_STR, "reply_verbose", "off"
X		/*"0\n1\n2\n3\n4", "reply_verbose %s\n", "0"*/
X	},
X	{
X		"detail ",
X		DETAIL_STR, "selected_request_verbose", "full"
X		/*"0\n1\n2\n3\n4", "selected_request_verbose %s\n", "3"*/
X	},
X	{
X		"detail ",
X		DETAIL_STR, "selected_event_verbose", "full"
X		/*"0\n1\n2\n3\n4", "selected_event_verbose %s\n", "3"*/
X	},
X	{
X		" blocking ",
X		"on\noff", "request_blocking_%s\n", "on"
X	},
X	{
X		" blocking ",
X		"on\noff", "event_blocking_%s\n", "on"
X	},
X};
X#define REQUEST_VERBOSE			4
X#define EVENT_VERBOSE			5
X#define REQUEST_BLOCKING		6
X#define EVENT_BLOCKING			7
X
X#define NUM_TOGGLES (sizeof(toggledata) / sizeof(ToggleData))
X
Xtypedef struct
X{
X	char				**list;
X	int					toggle_index;
X	int					width;
X	int					height;
X	int					num_items;
X	char				*list_output_string;
X	Widget				widget;
X}
X	ListData;
X
Xstatic ListData listdata[] =
X{
X	{
X		request_monitor_list, REQUEST_VERBOSE, 240, 197, NUM_REQUESTS,
X		"monitor_request_%s %s\n",
X	},
X	{
X		request_block_list, REQUEST_BLOCKING, 240, 197, NUM_REQUESTS,
X		"block_request_%s %s\n",
X	},
X	{
X		event_monitor_list, EVENT_VERBOSE, 240, 92, NUM_EVENTS,
X		"monitor_event_%s %s\n",
X	},
X	{
X		event_block_list, EVENT_BLOCKING, 240, 92, NUM_EVENTS,
X		"block_event_%s %s\n",
X	},
X};
X#define REQUEST_MONITOR_LIST	0
X#define REQUEST_BLOCK_LIST		1
X#define EVENT_MONITOR_LIST		2
X#define EVENT_BLOCK_LIST		3
X
X#define NUM_LISTS (sizeof(listdata) / sizeof(ListData))
X
Xstatic void
Xquit_cb(w, client_data, call_data)
X	Widget				w;
X	caddr_t				client_data;
X	caddr_t				call_data;
X{
X	printf("quit\n");
X	fflush(stdout);
X	exit(1);
X}
X
Xstatic void
Xtoggle_cb(widget, client_data, call_data)
X	Widget				widget;
X	caddr_t				client_data;
X	caddr_t				call_data;
X{
X	int					toggle_count;
X
X	if (!(Bool)call_data)
X		return;
X
X	for (toggle_count = 0; toggle_count < NUM_TOGGLES; toggle_count++)
X		if (toggledata[toggle_count].widget == XtParent(widget))
X		{
X			if (toggle_count < 6)
X			{
X				printf(toggledata[toggle_count].output_string);
X				if (Streq((char*) client_data, "off"))
X					printf(" 0\n");
X				else if (Streq((char*) client_data, "names"))
X					printf(" 1\n");
X				else if (Streq((char*) client_data, "main"))
X					printf(" 2\n");
X				else if (Streq((char*) client_data, "full"))
X					printf(" 3\n");
X				else if (Streq((char*) client_data, "hex"))
X					printf(" 4\n");
X			}
X			else
X				printf
X				(
X					toggledata[toggle_count].output_string, (char *)client_data
X				);
X			fflush(stdout);
X			return;
X		}
X	printf("error in toggle_cb\n");
X	fflush(stdout);
X}
X
Xstatic void
Xlist_cb(widget, client_data, call_data)
X	Widget				widget;
X	caddr_t				client_data;
X	caddr_t				call_data;
X{
X	XawListReturnStruct	*return_struct;
X	Widget				list_widget;
X	char				*selected_string;
X	int					list_count;
X	Bool				on;
X
X	list_widget = XtParent(widget);
X	return_struct = (XawListReturnStruct*) call_data;
X	for (list_count = 0; list_count < NUM_LISTS; list_count++)
X		if (listdata[list_count].widget == list_widget)
X		{
X			selected_string =
X				listdata[list_count].list[return_struct->list_index];
X			on = (selected_string[4] == ' ');
X			selected_string[4] = '\0';
X			printf
X			(
X				listdata[list_count].list_output_string,
X				(on) ? "on" : "off", selected_string
X			);
X			fflush(stdout);
X			selected_string[4] = (on) ? '*' : ' ';
X			set_viewlist
X			(
X				list_widget, listdata[list_count].list,
X				listdata[list_count].num_items, listdata[list_count].width
X			);
X			return;
X		}
X	printf("error in list_cb\n");
X	fflush(stdout);
X}
X
Xstatic void
Xcount_cb(widget, client_data, call_data)
X	Widget				widget;
X	caddr_t				client_data;
X	caddr_t				call_data;
X{
X	printf("%s\n", (char *)client_data);
X	fflush(stdout);
X}
X
Xstatic Widget
Xbuild_toggle(parent, toggle_index, vert)
XWidget					parent;
Xint						toggle_index;
XWidget					vert;
X{
X	Widget				widget;
X
X	widget = create_one_of_many_toggle
X	(
X		toggledata[toggle_index].label, parent, NULL, vert,
X		toggledata[toggle_index].toggle_strings, toggle_cb
X	);
X	toggledata[toggle_index].widget = widget;
X	set_toggle_state
X	(
X		widget, toggledata[toggle_index].default_string
X	);
X	return widget;
X}
X
Xstatic Widget
Xbuild_list(parent, list_index, horiz)
XWidget					parent;
Xint						list_index;
XWidget					horiz;
X{
X	Widget				widget;
X	Widget				form;
X
X
X	form = create_form(parent, horiz, NULL, 0);
X	widget = build_toggle(form, listdata[list_index].toggle_index, NULL);
X	widget = create_viewlist
X	(
X		form, NULL, widget, listdata[list_index].list,
X		listdata[list_index].width, listdata[list_index].height,
X		1, list_cb, (Pointer) 0
X	);
X	listdata[list_index].widget = widget;
X	set_viewlist
X	(
X		widget, listdata[list_index].list,
X		listdata[list_index].num_items, listdata[list_index].width
X	);
X	return form;
X}
X
X/*
Xstatic void
Xsel_cb(w, client_data, call_data)
X	Widget				w;
X	caddr_t				client_data;
X	caddr_t				call_data;
X{
X	Widget				list_widget = (Widget)client_data;
X	XawScrollListReturnStruct	*return_struct;
X
X	return_struct = XawScrollListShowCurrent(list_widget);
X	if (return_struct->list_index == XAW_SCROLL_LIST_NONE)
X		printf("none selected\n");
X	else
X		printf("item %d selected\n", return_struct->list_index);
X	fflush(stdout);
X	XawScrollListUnhighlight(list_widget);
X}
X
X	widget = create_command_button
X	(
X		widget, NULL, list, "change", change_cb, list_widget
X	);
X	widget = create_command_button
X	(
X		widget, NULL, widget, "print selected", sel_cb, list_widget
X	);
X*/
X
Xstatic Widget
Xbuild_counting_buttons(parent, vert, label, output_strings)
XWidget					parent;
XWidget					vert;
Xchar					*label;
Xchar					**output_strings;
X{
X	Widget				widget;
X	Widget				form;
X	char				string[100];
X	int					button;
X
X	form = create_form(parent, NULL, vert, 0);
X	widget = create_label(form, NULL, NULL, 0, 0, label);
X	for (button = 0; button < NUM_COUNT_BUTTONS; button++)
X		widget = create_command_button
X		(
X			form, widget, NULL, count_names[button], count_cb,
X			output_strings[button]
X		);
X	return form;
X}
X
XGlobal int
Xmain(argc, argv)
Xint argc;
Xchar **argv;
X{
X	Widget				toplevel;
X	Widget				form;
X	Widget				inner_form;
X	Widget				lists_form;
X	Widget				widget;
X	Widget				list_widget;
X	int					toggle_count;
X
X	toplevel = init_widgeti("XmonUI", "XmonUI", &argc, argv);
X	form = create_form(toplevel, NULL, NULL, 0);
X
X/* quit button */
X	widget = create_command_button(form, NULL, NULL, "quit", quit_cb,NULL);
X
X/* header */
X	widget = create_label
X	(
X		form, widget, NULL, 0,0,"               Xmon - X protocol monitor"
X	);
X
X
X/* verbose level toggles */
X	for (toggle_count = 0; toggle_count < 4; toggle_count++)
X		widget = build_toggle(form, toggle_count, widget);
X
X/* counting buttons */
X	widget = build_counting_buttons
X	(
X		form, widget,   "counting:    requests", request_output_strings
X	);
X	widget = build_counting_buttons
X	(
X		form, widget, "             events  ", event_output_strings
X	);
X	widget = build_counting_buttons
X	(
X		form, widget, "             errors  ", error_output_strings
X	);
X
X
X/* selected requests section */
X	inner_form = create_form(form, NULL, widget, 1);
X	widget = create_label(inner_form, NULL, NULL, 0, 0,"selected requests:");
X	lists_form = create_form(inner_form, NULL, widget, 0);
X	widget = build_list(lists_form, REQUEST_MONITOR_LIST, NULL);
X	widget = build_list(lists_form, REQUEST_BLOCK_LIST, widget);
X
X/* selected events section */
X	inner_form = create_form(form, NULL, inner_form, 1);
X	widget = create_label(inner_form, NULL, NULL, 0, 0, "selected events:");
X	lists_form = create_form(inner_form, NULL, widget, 0);
X	widget = build_list(lists_form, EVENT_MONITOR_LIST, NULL);
X	widget = build_list(lists_form, EVENT_BLOCK_LIST, widget);
X
X	XtRealizeWidget(toplevel);
X	XtMainLoop();
X}
SHAR_EOF
$TOUCH -am 0903162990 xmonui.c &&
chmod 0664 xmonui.c ||
echo "restore of xmonui.c failed"
set `wc -c xmonui.c`;Wc_c=$1
if test "$Wc_c" != "10121"; then
	echo original size 10121, current size $Wc_c
fi
fi
# ============= common.h ==============
if test X"$1" != X"-c" -a -f 'common.h'; then
	echo "File already exists: skipping 'common.h'"
else
echo "x - extracting common.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > common.h &&
X/*
X * File: common.c
X *
X * Description: Standard header file
X *
X */
X
X#ifndef COMMON_H
X#define COMMON_H
X
X#include    <ctype.h>
X#include    <sys/types.h>
X#include    <string.h>
X#include    <stdio.h>
X
Xtypedef		short				Bool;
Xtypedef		caddr_t				Pointer;
Xtypedef		void				(*VoidCallback)();	/* ptr to void function */
Xtypedef		int					(*IntCallback)();	/* ptr to int function */
X
X#define		Global				/* Global */
X#ifndef True
X#define		True				(1)
X#define		False				(0)
X#endif
X#define		Streq(a,b) 			(strcmp(a,b) == 0)
X#define		Strneq(a,b,n)		(strncmp(a,b,n) == 0)
X#define		abs(x)				(((x) < 0) ? (-(x)) : (x))
X#define		max(n1, n2)			(((n1) < (n2)) ? (n2) :	 (n1))
X#define		min(n1, n2)			(((n1) > (n2)) ? (n2) :	 (n1))
X#define		Tmalloc(type)		(type *)malloc(sizeof(type))
X#define		Tcalloc(n, type)	(type *)calloc(n, sizeof(type))
X#define		Tfree(ptr)			free((char *)(ptr))
X
X#ifdef	__STDC__
X#define		P(args)				args
X#else
X#define		P(args)				()
X#endif
X
Xvoid *malloc P((int size));
Xvoid *realloc P((char *ptr, int size));
Xvoid *calloc P((int nelem, int elsize));
Xvoid free P((char *ptr));
X
X#endif  /* COMMON_H */
SHAR_EOF
$TOUCH -am 0903163790 common.h &&
chmod 0754 common.h ||
echo "restore of common.h failed"
set `wc -c common.h`;Wc_c=$1
if test "$Wc_c" != "1104"; then
	echo original size 1104, current size $Wc_c
fi
fi
# ============= events.h ==============
if test X"$1" != X"-c" -a -f 'events.h'; then
	echo "File already exists: skipping 'events.h'"
else
echo "x - extracting events.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > events.h &&
X	"  4   ButtonPress",
X	"  5   ButtonRelease",
X	" 26   CirculateNotify",
X	" 27   CirculateRequest",
X	" 33   ClientMessage",
X	" 32   ColormapNotify",
X	" 22   ConfigureNotify",
X	" 23   ConfigureRequest",
X	" 16   CreateNotify",
X	" 17   DestroyNotify",
X	"  7   EnterNotify",
X	" 12   Expose",
X	"  9   FocusIn",
X	" 10   FocusOut",
X	" 13   GraphicsExpose",
X	" 24   GravityNotify",
X	"  2   KeyPress",
X	"  3   KeyRelease",
X	" 11   KeymapNotify",
X	"  8   LeaveNotify",
X	" 19   MapNotify",
X	" 20   MapRequest",
X	" 34   MappingNotify",
X	"  6   MotionNotify",
X	" 14   NoExpose",
X	" 28   PropertyNotify",
X	" 21   ReparentNotify",
X	" 25   ResizeRequest",
X	" 29   SelectionClear",
X	" 31   SelectionNotify",
X	" 30   SelectionRequest",
X	" 18   UnmapNotify",
X	" 15   VisibilityNotify",
X	NULL,
SHAR_EOF
$TOUCH -am 0903162990 events.h &&
chmod 0664 events.h ||
echo "restore of events.h failed"
set `wc -c events.h`;Wc_c=$1
if test "$Wc_c" != "773"; then
	echo original size 773, current size $Wc_c
fi
fi
# ============= linkl.h ==============
if test X"$1" != X"-c" -a -f 'linkl.h'; then
	echo "File already exists: skipping 'linkl.h'"
else
echo "x - extracting linkl.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > linkl.h &&
X/*
X * File: linkl.h
X *
X */
X
X#ifndef LINKL_H
X#define LINKL_H
X
X#include	"common.h"
X
Xtypedef	struct _LinkLeaf
X{
X    struct	_LinkLeaf*	next;
X    struct	_LinkLeaf*	prev;
X    Pointer					contents;
X}
X	LinkLeaf;
X
Xtypedef	struct
X{
X    LinkLeaf				*top;
X    LinkLeaf				*bottom;
X    LinkLeaf				*current;
X}
X	LinkList;
X
X#define	ListIsEmpty(list)					((list)->top == (LinkLeaf *)(list))
X#define	TopOfList(list)						(list)->top->contents
X#define	CurrentContentsOfList(list)			(list)->current->contents
X
X#define	ForAllInList(list)	for												\
X							(												\
X								((list)->current) = ((list)->top);			\
X								((list)->current) != (LinkLeaf *)(list);	\
X								((list)->current) = ((list)->current)->next	\
X							)
X
X
X/* function prototypes: */
X/* linkl.c: */
XGlobal void initList P((LinkList *list ));
XGlobal void prependToList P((LinkList *list , Pointer contents ));
XGlobal void appendToList P((LinkList *list , Pointer contents ));
XGlobal Pointer deleteFirst P((LinkList *list ));
XGlobal Pointer deleteLast P((LinkList *list ));
XGlobal Pointer deleteCurrent P((LinkList *list ));
XGlobal void AppendToCurrent P((LinkList *list , Pointer contents ));
XGlobal void PrependToCurrent P((LinkList *list , Pointer contents ));
XGlobal void freeList P((LinkList *list ));
XGlobal void freeCurrent P((LinkList *list ));
X
X/* end function prototypes */
X
X#endif  /* LINKL_H */
SHAR_EOF
$TOUCH -am 0903162990 linkl.h &&
chmod 0754 linkl.h ||
echo "restore of linkl.h failed"
set `wc -c linkl.h`;Wc_c=$1
if test "$Wc_c" != "1368"; then
	echo original size 1368, current size $Wc_c
fi
fi
# ============= requests.h ==============
if test X"$1" != X"-c" -a -f 'requests.h'; then
	echo "File already exists: skipping 'requests.h'"
else
echo "x - extracting requests.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > requests.h &&
X	" 84   AllocColor",
X	" 86   AllocColorCells",
X	" 87   AllocColorPlanes",
X	" 85   AllocNamedColor",
X	" 35   AllowEvents",
X	"104   Bell",
X	" 30   ChangeActivePointerGrab",
X	" 56   ChangeGC",
X	"109   ChangeHosts",
X	"102   ChangeKeyboardControl",
X	"100   ChangeKeyboardMapping",
X	"105   ChangePointerControl",
X	" 18   ChangeProperty",
X	"  6   ChangeSaveSet",
X	"  2   ChangeWindowAttributes",
X	" 13   CirculateWindow",
X	" 61   ClearArea",
X	" 46   CloseFont",
X	" 12   ConfigureWindow",
X	" 24   ConvertSelection",
X	" 62   CopyArea",
X	" 80   CopyColormapAndFree",
X	" 57   CopyGC",
X	" 63   CopyPlane",
X	" 78   CreateColormap",
X	" 93   CreateCursor",
X	" 55   CreateGC",
X	" 94   CreateGlyphCursor",
X	" 53   CreatePixmap",
X	"  1   CreateWindow",
X	" 19   DeleteProperty",
X	"  5   DestroySubwindows",
X	"  4   DestroyWindow",
X	" 69   FillPoly",
X	"115   ForceScreenSaver",
X	" 79   FreeColormap",
X	" 88   FreeColors",
X	" 95   FreeCursor",
X	" 60   FreeGC",
X	" 54   FreePixmap",
X	" 17   GetAtomName",
X	" 52   GetFontPath",
X	" 14   GetGeometry",
X	" 73   GetImage",
X	" 43   GetInputFocus",
X	"103   GetKeyboardControl",
X	"101   GetKeyboardMapping",
X	"119   GetModifierMapping",
X	" 39   GetMotionEvents",
X	"106   GetPointerControl",
X	"117   GetPointerMapping",
X	" 20   GetProperty",
X	"108   GetScreenSaver",
X	" 23   GetSelectionOwner",
X	"  3   GetWindowAttributes",
X	" 28   GrabButton",
X	" 33   GrabKey",
X	" 31   GrabKeyboard",
X	" 26   GrabPointer",
X	" 36   GrabServer",
X	" 77   ImageText16",
X	" 76   ImageText8",
X	" 81   InstallColormap",
X	" 16   InternAtom",
X	"113   KillClient",
X	" 99   ListExtensions",
X	" 49   ListFonts",
X	" 50   ListFontsWithInfo",
X	"110   ListHosts",
X	" 83   ListInstalledColormaps",
X	" 21   ListProperties",
X	" 92   LookupColor",
X	"  9   MapSubwindows",
X	"  8   MapWindow",
X	"127   NoOperation",
X	" 45   OpenFont",
X	" 68   PolyArc",
X	" 71   PolyFillArc",
X	" 70   PolyFillRectangle",
X	" 65   PolyLine",
X	" 64   PolyPoint",
X	" 67   PolyRectangle",
X	" 66   PolySegment",
X	" 75   PolyText16",
X	" 74   PolyText8",
X	" 72   PutImage",
X	" 97   QueryBestSize",
X	" 91   QueryColors",
X	" 98   QueryExtension",
X	" 47   QueryFont",
X	" 44   QueryKeymap",
X	" 38   QueryPointer",
X	" 48   QueryTextExtents",
X	" 15   QueryTree",
X	" 96   RecolorCursor",
X	"  7   ReparentWindow",
X	"114   RotateProperties",
X	" 25   SendEvent",
X	"111   SetAccessControl",
X	" 59   SetClipRectangles",
X	"112   SetCloseDownMode",
X	" 58   SetDashes",
X	" 51   SetFontPath",
X	" 42   SetInputFocus",
X	"118   SetModifierMapping",
X	"116   SetPointerMapping",
X	"107   SetScreenSaver",
X	" 22   SetSelectionOwner",
X	" 89   StoreColors",
X	" 90   StoreNamedColor",
X	" 40   TranslateCoords",
X	" 29   UngrabButton",
X	" 34   UngrabKey",
X	" 32   UngrabKeyboard",
X	" 27   UngrabPointer",
X	" 37   UngrabServer",
X	" 82   UninstallColormap",
X	" 11   UnmapSubwindows",
X	" 10   UnmapWindow",
X	" 41   WarpPointer",
X	NULL
SHAR_EOF
$TOUCH -am 0903162990 requests.h &&
chmod 0664 requests.h ||
echo "restore of requests.h failed"
set `wc -c requests.h`;Wc_c=$1
if test "$Wc_c" != "2861"; then
	echo original size 2861, current size $Wc_c
fi
fi
# ============= select_args.h ==============
if test X"$1" != X"-c" -a -f 'select_args.h'; then
	echo "File already exists: skipping 'select_args.h'"
else
echo "x - extracting select_args.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > select_args.h &&
X/*
X * Project: XMON - An X protocol monitor
X * 
X * File: select_args.h
X * 
X * Description: macros to handle the arguments to select().
X */
X
X#ifndef SELECT_H
X#define SELECT_H
X
X#include <sys/param.h>
X
X#define MAXSOCKS (NOFILE - 1)
X#define mskcnt ((MAXSOCKS + 31) / 32)	/* size of bit array */
X
X#if (mskcnt==1)
X#define BITMASK(i) (1 << (i))
X#define MASKIDX(i) 0
X#endif
X#if (mskcnt>1)
X#define BITMASK(i) (1 << ((i) & 31))
X#define MASKIDX(i) ((i) >> 5)
X#endif
X
X#define MASKWORD(buf, i) buf[MASKIDX(i)]
X#define BITSET(buf, i) MASKWORD(buf, i) |= BITMASK(i)
X#define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i)
X#define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i))
X
X#if (mskcnt==1)
X#define COPYBITS(src, dst) dst[0] = src[0]
X#define CLEARBITS(buf) buf[0] = 0
X#define MASKANDSETBITS(dst, b1, b2) dst[0] = (b1[0] & b2[0])
X#define ORBITS(dst, b1, b2) dst[0] = (b1[0] | b2[0])
X#define UNSETBITS(dst, b1) (dst[0] &= ~b1[0])
X#define ANYSET(src) (src[0])
X#endif
X#if (mskcnt==2)
X#define COPYBITS(src, dst) dst[0] = src[0]; dst[1] = src[1]
X#define CLEARBITS(buf) buf[0] = 0; buf[1] = 0
X#define MASKANDSETBITS(dst, b1, b2)  \
X		      dst[0] = (b1[0] & b2[0]);\
X		      dst[1] = (b1[1] & b2[1])
X#define ORBITS(dst, b1, b2)  \
X		      dst[0] = (b1[0] | b2[0]);\
X		      dst[1] = (b1[1] | b2[1])
X#define UNSETBITS(dst, b1) \
X                      dst[0] &= ~b1[0]; \
X                      dst[1] &= ~b1[1]
X#define ANYSET(src) (src[0] || src[1])
X#endif
X#if (mskcnt==3)
X#define COPYBITS(src, dst) dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2];
X#define CLEARBITS(buf) buf[0] = 0; buf[1] = 0; buf[2] = 0
X#define MASKANDSETBITS(dst, b1, b2)  \
X		      dst[0] = (b1[0] & b2[0]);\
X		      dst[1] = (b1[1] & b2[1]);\
X		      dst[2] = (b1[2] & b2[2])
X#define ORBITS(dst, b1, b2)  \
X		      dst[0] = (b1[0] | b2[0]);\
X		      dst[1] = (b1[1] | b2[1]);\
X		      dst[2] = (b1[2] | b2[2])
X#define UNSETBITS(dst, b1) \
X                      dst[0] &= ~b1[0]; \
X                      dst[1] &= ~b1[1]; \
X                      dst[2] &= ~b1[2]
X#define ANYSET(src) (src[0] || src[1] || src[2])
X#endif
X#if (mskcnt==4)
X#define COPYBITS(src, dst) dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2];\
X		      dst[3] = src[3]
X#define CLEARBITS(buf) buf[0] = 0; buf[1] = 0; buf[2] = 0; buf[3] = 0
X#define MASKANDSETBITS(dst, b1, b2)  \
X                      dst[0] = (b1[0] & b2[0]);\
X                      dst[1] = (b1[1] & b2[1]);\
X                      dst[2] = (b1[2] & b2[2]);\
X                      dst[3] = (b1[3] & b2[3])
X#define ORBITS(dst, b1, b2)  \
X                      dst[0] = (b1[0] | b2[0]);\
X                      dst[1] = (b1[1] | b2[1]);\
X                      dst[2] = (b1[2] | b2[2]);\
X                      dst[3] = (b1[3] | b2[3])
X#define UNSETBITS(dst, b1) \
X                      dst[0] &= ~b1[0]; \
X                      dst[1] &= ~b1[1]; \
X                      dst[2] &= ~b1[2]; \
X                      dst[3] &= ~b1[3]
X#define ANYSET(src) (src[0] || src[1] || src[2] || src[3])
X#endif
X
X#if (mskcnt>4)
X#define COPYBITS(src, dst) bcopy((caddr_t) src, (caddr_t) dst,\
X				 mskcnt*sizeof(long))
X#define CLEARBITS(buf) bzero((caddr_t) buf, mskcnt*sizeof(long))
X#define MASKANDSETBITS(dst, b1, b2)  \
X		      { int cri;			\
X			for (cri=0; cri<mskcnt; cri++)	\
X		          dst[cri] = (b1[cri] & b2[cri]) }
X#define ORBITS(dst, b1, b2)  \
X		      { int cri;			\
X		      for (cri=0; cri<mskcnt; cri++)	\
X		          dst[cri] = (b1[cri] | b2[cri]) }
X#define UNSETBITS(dst, b1) \
X		      { int cri;			\
X		      for (cri=0; cri<mskcnt; cri++)	\
X		          dst[cri] &= ~b1[cri];  }
X#define ANYSET(src) panic("ANYSET not implemented")
X#endif
X
X#endif /* SELECT_H */
SHAR_EOF
$TOUCH -am 0903162990 select_args.h &&
chmod 0664 select_args.h ||
echo "restore of select_args.h failed"
set `wc -c select_args.h`;Wc_c=$1
if test "$Wc_c" != "3646"; then
	echo original size 3646, current size $Wc_c
fi
fi
# ============= widgeti.h ==============
if test X"$1" != X"-c" -a -f 'widgeti.h'; then
	echo "File already exists: skipping 'widgeti.h'"
else
echo "x - extracting widgeti.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > widgeti.h &&
X/*
X *  File: widgeti.h
X *
X *  Description: Prototypes and defines for widgeti
X */
X
X#ifndef WIDGET_H
X#define WIDGET_H
X
X#include <X11/Xlib.h>
X#include <X11/Intrinsic.h>
X#include <X11/StringDefs.h>
X#include <X11/Xaw/List.h>
X
X#include	"common.h"
X
X#define	MaxNumXArgs	20
X
X#define	AddArg(arg, val)													\
X		XtSetArg(arglist[numargs], arg, (XtArgVal)val), numargs ++
X
X#define DeclareArgs															\
Xstatic Arg						arglist[MaxNumXArgs];						\
Xstatic Cardinal					numargs;
X
X/* function prototypes: */
X/* widgeti.c: */
XGlobal Widget init_widgeti P((char *name , char *app_class , int *argcp
, char **argv ));
XGlobal Widget create_form P((Widget parent , Widget fromH , Widget
fromV , int borderWidth ));
XGlobal Widget create_label P((Widget parent , Widget fromH , Widget
fromV , int width , int borderWidth , char *string ));
XGlobal Widget create_command_button P((Widget parent , Widget fromH ,
Widget fromV , char *string , VoidCallback callback , Pointer data ));
XGlobal Widget create_one_of_many_toggle P((char *label , Widget parent
, Widget fromH , Widget fromV , char *strings , VoidCallback callback ));
XGlobal void set_toggle_state P((Widget widget , char *data ));
XGlobal char *get_toggle_state P((Widget widget ));
XGlobal Widget create_viewlist P((Widget parent , Widget fromH , Widget
fromV , char **list , int width , int height , int borderWidth ,
VoidCallback callback , Pointer data ));
XGlobal void set_viewlist P((Widget widget , char **list , int nitems ,
int longest ));
X
X/* end function prototypes */
X
X#endif  /* WIDGET_H */
X
SHAR_EOF
$TOUCH -am 0903162990 widgeti.h &&
chmod 0775 widgeti.h ||
echo "restore of widgeti.h failed"
set `wc -c widgeti.h`;Wc_c=$1
if test "$Wc_c" != "1551"; then
	echo original size 1551, current size $Wc_c
fi
fi
echo "End of part 4, continue with part 5"
exit 0

dan
----------------------------------------------------
O'Reilly && Associates   argv@sun.com / argv@ora.com
Opinions expressed reflect those of the author only.