aboutsummaryrefslogtreecommitdiff
path: root/libXaw/spec
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2009-11-06 06:59:46 +0000
committermarha <marha@users.sourceforge.net>2009-11-06 06:59:46 +0000
commitace7902333b6f61aab5a6035dbcb222763bff186 (patch)
tree28445e829d5f04c8d79bda2514be37d5fb29738e /libXaw/spec
parentc9179017c7e70703b7cac46c2df8b950506319e0 (diff)
downloadvcxsrv-ace7902333b6f61aab5a6035dbcb222763bff186.tar.gz
vcxsrv-ace7902333b6f61aab5a6035dbcb222763bff186.tar.bz2
vcxsrv-ace7902333b6f61aab5a6035dbcb222763bff186.zip
Added libXaw-1.0.7
Diffstat (limited to 'libXaw/spec')
-rw-r--r--libXaw/spec/AsciiSink77
-rw-r--r--libXaw/spec/AsciiSource208
-rw-r--r--libXaw/spec/AsciiText166
-rw-r--r--libXaw/spec/Box139
-rw-r--r--libXaw/spec/CH1411
-rw-r--r--libXaw/spec/CH21103
-rw-r--r--libXaw/spec/CH3.intro67
-rw-r--r--libXaw/spec/CH4.intro87
-rw-r--r--libXaw/spec/CH5.intro292
-rw-r--r--libXaw/spec/CH6.intro84
-rw-r--r--libXaw/spec/CH7.intro99
-rw-r--r--libXaw/spec/Command205
-rw-r--r--libXaw/spec/Dialog280
-rw-r--r--libXaw/spec/Form200
-rw-r--r--libXaw/spec/Grip157
-rw-r--r--libXaw/spec/Label122
-rw-r--r--libXaw/spec/List341
-rw-r--r--libXaw/spec/Makefile.am96
-rw-r--r--libXaw/spec/Makefile.in513
-rw-r--r--libXaw/spec/MenuButton215
-rw-r--r--libXaw/spec/Paned492
-rw-r--r--libXaw/spec/Panner247
-rw-r--r--libXaw/spec/Porthole125
-rw-r--r--libXaw/spec/Repeater184
-rw-r--r--libXaw/spec/Scrollbar386
-rw-r--r--libXaw/spec/Simple95
-rw-r--r--libXaw/spec/SimpleMenu315
-rw-r--r--libXaw/spec/Sme106
-rw-r--r--libXaw/spec/SmeBSB125
-rw-r--r--libXaw/spec/SmeLine72
-rw-r--r--libXaw/spec/StripChart160
-rw-r--r--libXaw/spec/TPage_Credits156
-rw-r--r--libXaw/spec/Template426
-rw-r--r--libXaw/spec/Text123
-rw-r--r--libXaw/spec/TextActions506
-rw-r--r--libXaw/spec/TextCustom63
-rw-r--r--libXaw/spec/TextFuncs397
-rw-r--r--libXaw/spec/TextSink420
-rw-r--r--libXaw/spec/TextSource331
-rw-r--r--libXaw/spec/Toggle370
-rw-r--r--libXaw/spec/Tree181
-rw-r--r--libXaw/spec/Viewport156
-rw-r--r--libXaw/spec/block.awk22
-rw-r--r--libXaw/spec/fixindex.awk73
-rw-r--r--libXaw/spec/indexmacros.t42
-rw-r--r--libXaw/spec/macros.t226
-rw-r--r--libXaw/spec/strings.mit10
-rw-r--r--libXaw/spec/strings.xaw714
-rw-r--r--libXaw/spec/widg.idxmac.t3
49 files changed, 11388 insertions, 0 deletions
diff --git a/libXaw/spec/AsciiSink b/libXaw/spec/AsciiSink
new file mode 100644
index 000000000..56dc20ea6
--- /dev/null
+++ b/libXaw/spec/AsciiSink
@@ -0,0 +1,77 @@
+.\" $Xorg: AsciiSink,v 1.3 2000/08/17 19:42:25 cpqbld Exp $
+.LP
+.NH 2
+Ascii Sink Object and Multi Sink Object
+.LP
+.XS
+ AsciiSink Object
+.XE
+.IN "AsciiSink object" "" "@DEF@"
+.LP
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+Application Header file <X11/Xaw/AsciiSink.h>
+.IN "AsciiSink.h" ""
+Class Header file <X11/Xaw/AsciiSinkP.h>
+.IN "AsciiSinkP.h" ""
+Class asciiSinkObjectClass
+.IN "asciiSinkObjectClass" ""
+Class Name AsciiSink
+.IN "AsciiSink object" "class name"
+Superclass TextSink
+.De
+.LP
+The AsciiSink or MultiSink object is used by a text widget to render the text.
+Depending on its \fBinternational\fP resource, a
+AsciiText widget will create one or the other of these when the AsciiText
+itself is created. Both types are nearly identical; the following discussion
+applies to both, with MultiSink differences noted only as they occur.
+The AsciiSink
+will display all printing characters in an 8 bit font, along with handling Tab
+and Carriage Return. The name has been left as ``AsciiSink'' for compatibility.
+\fIThe MultiSink will display all printing characters in a font set, along with
+handling Tab and Carriage
+Return.\fP The source object also reports the text window metrics to the
+text widgets.
+.NH 3
+Resources
+.LP
+When creating an AsciiSink object instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "AsciiSink object" "resources"
+.TS H
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+background Background Pixel XtDefaultBackground
+destroyCallback Callback XtCallbackList NULL
+displayNonprinting Output Boolean True
+echo Output Boolean True
+font Font XFontStruct* XtDefaultFont
+fontSet FontSet XFontSet XtDefaultFontSet
+foreground Foreground Pixel XtDefaultForeground
+.sp 3p
+_
+.TE
+.Bg Bold
+This resource is retrieved by the AsciiSink instead of being copied
+from the Text widget.
+.Dc
+.Sd Bold
+.Sh Bold
+.IP \fBfont\fP 1.5i
+The text font to use when displaying the \fBstring\fP.
+(This resource is present in the AsciiSink, but not the MultiSink.)
+.IP \fBfontSet\fP 1.5i
+The text font set to use when displaying the \fBstring\fP.
+(This resource is present in the MultiSink, but not the AsciiSink.)
+
diff --git a/libXaw/spec/AsciiSource b/libXaw/spec/AsciiSource
new file mode 100644
index 000000000..19b976562
--- /dev/null
+++ b/libXaw/spec/AsciiSource
@@ -0,0 +1,208 @@
+.\" $Xorg: AsciiSource,v 1.3 2000/08/17 19:42:26 cpqbld Exp $
+.NH 2
+Ascii Source Object and Multi Source Object
+.LP
+.XS
+ AsciiSrc Object
+.XE
+.IN "AsciiSrc object" "" "@DEF@"
+.LP
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+Application Header file <X11/Xaw/AsciiSrc.h> or <X11/Xaw/MultiSrc.h>
+.IN "AsciiSrc.h" ""
+Class Header file <X11/Xaw/AsciiSrcP.h> or <X11/Xaw/MultiSrcP.h>
+.IN "AsciiSrcP.h" ""
+Class asciiSrcObjectClass or multiSrcObjectClass
+.IN "asciiSrcObjectClass" ""
+Class Name AsciiSrc or MultiSrc
+.IN "AsciiSrc object" "class name"
+Superclass TextSource
+.De
+.LP
+The AsciiSrc or MultiSrc object is used by a text widget to read the text from a
+file or string in memory. Depending on its \fBinternational\fP resource, an
+AsciiText widget will create one or the other of these when the AsciiText
+itself is created. Both types are nearly identical; the following discussion
+applies to both, with MultiSrc differences noted only as they occur.
+.LP
+The AsciiSrc understands all Latin1 characters plus Tab
+and Carriage Return. \fIThe MultiSrc understands any set of character sets that
+the underlying X implementation's internationalization handles.\fP
+.LP
+The AsciiSrc can be either of two types: \fBXawAsciiFile\fP
+or \fBXawAsciiString\fP.
+.LP
+AsciiSrc objects of type \fBXawAsciiFile\fP read the text from a file and
+store it
+into an internal buffer. This buffer may then be modified, provided the
+text widget is in the correct edit mode, just as if it were a source of
+type \fBXawAsciiString\fP. Unlike R3 and earlier versions of the AsciiSrc,
+it is now possible to specify an editable disk source. The file is not
+updated, however, until a call to \fBXawAsciiSave\fP is made. When the
+source is in this mode the \fBuseStringInPlace\fP resource is ignored.
+.LP
+AsciiSrc objects of type \fBXawAsciiString\fP have the text buffer
+implemented as a string.
+\fIMultiSrc objects of type \fBXawAsciiString\fP have the text buffer
+implemented as a wide character string.\fP
+The string owner is responsible for allocating and managing storage for the
+string.
+.LP
+In the default case for AsciiSrc objects of type \fBXawAsciiString\fP,
+the resource \fBuseStringInPlace\fP is false,
+and the widget owns the string. The initial value of the
+string resource, and any update made by the application
+programmer to the string resource with \fBXtSetValues\fP, is copied
+into memory private to the widget, and managed internally by the widget.
+The application writer
+does not need to worry about running out of buffer space
+(subject to the total memory available to the application).
+The performance does not decay linearly as the buffer grows
+large, as is necessarily the case when the text buffer is used
+in place. The application writer must use \fBXtGetValues\fP to
+determine the contents of the text buffer, which will return
+a copy of the widget's text buffer as
+it existed at the time of the \fBXtGetValues\fP call. This copy
+is not affected by subsequent updates to the text buffer, i.e.,
+it is not updated as the user types input into the text buffer.
+This copy is freed upon the next call to XtGetValues to
+retrieve the string resource; however, to conserve memory,
+there is a convenience routine, \fBXawAsciiSourceFreeString\fP, allowing the
+application programmer to direct the widget to free the copy.
+.LP
+When the resource \fBuseStringInPlace\fP is true and the AsciiSrc object
+is of type \fBXawAsciiString\fP, the application
+is the string owner. The widget will take the value
+of the string resource as its own text buffer, and the \fBlength\fP
+resource indicates the buffer size. In this case
+the buffer contents change as the user types at the widget;
+it is not necessary to call \fBXtGetValues\fP on the string
+resource to determine the contents of the buffer\*-it will
+simply return the address of the application's implementation
+of the text buffer.
+.NH 3
+Resources
+.LP
+When creating an AsciiSrc object instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "AsciiSrc object" "resources"
+.TS H
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+callback Callback XtCallbackList NULL
+dataCompression DataCompression Boolean True
+destroyCallback Callback Callback NULL
+editType EditType EditMode XawtextRead
+length Length Int A length of \fBstring\fP
+pieceSize PieceSize Int BUFSIZ
+string String String NULL
+type Type AsciiType XawAsciiString
+useStringInPlace UseStringInPlace Boolean False
+.sp 3p
+_
+.TE
+.Oc Bold
+.Dc
+.Od Bold
+.Oe
+.Ol Bold
+.Op Bold
+.Os Bold
+.Ot Bold
+.Ou Bold
+.NH 3
+Convenience Routines
+.LP
+The AsciiSrc has a few convenience routines that allow the
+application programmer quicker or easier access to some of the
+commonly used functionality of the AsciiSrc.
+.NH 4
+Conserving Memory
+.LP
+When the AsciiSrc widget is not in \fBuseStringInPlace\fP mode
+space must be allocated whenever the file is saved, or the string is
+requested with a call to \fBXtGetValues\fP. This memory is allocated on the
+fly, and remains valid until the next time a string needs to be allocated.
+You may save memory by freeing this string as soon as you are done
+with it by calling \fBXawAsciiSourceFreeString\fP.
+.FD 0
+void XawAsciiSourceFreeString(\fIw\fP)
+.IN "XawAsciiSourceFreeString" "" @DEF@
+.br
+Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the AsciiSrc object.
+.LP
+This function will free the memory that contains the string pointer returned
+by \fBXtGetValues\fP. This will normally happen automatically when
+the next call to \fBXtGetValues\fP occurs, or when the widget is destroyed.
+.NH 4
+Saving Files
+.LP
+To save the changes made in the current text source into a file use
+\fBXawAsciiSave\fP.
+.FD 0
+Boolean XawAsciiSave(\fIw\fP)
+.IN "XawAsciiSave" "" @DEF@
+.br
+Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the AsciiSrc object.
+.LP
+\fBXawAsciiSave\fP returns \fBTrue\fP if the save was successful.
+It will update the file named in the \fBstring\fP resource.
+If the buffer has not been changed, no action will be taken. This function
+only works on an AsciiSrc of type \fBXawAsciiFile\fP.
+.LP
+.sp 1
+To save the contents of the current text buffer into a named file use
+\fBXawAsciiSaveAsFile\fP.
+.FD 0
+Boolean XawAsciiSaveAsFile(\fIw\fP, \fIname\fP)
+.IN "XawAsciiSaveAsFile" "" @DEF@
+.br
+Widget \fIw\fP;
+.br
+String \fIname\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the AsciiSrc object.
+.IP \fIname\fP 1i
+The name of the file to save the current buffer into.
+.LP
+This function returns \fBTrue\fP if the save was successful.
+\fBXawAsciiSaveAsFile\fP will work with a buffer of either type
+\fBXawAsciiString\fP or type \fBXawAsciiFile\fP.
+.NH 4
+Seeing if the Source has Changed
+.LP
+To find out if the text buffer in an AsciiSrc object has changed
+since the last time it was saved with \fBXawAsciiSave\fP or queried
+.IN "XawAsciiSave" ""
+use \fBXawAsciiSourceChanged\fP.
+.FD 0
+Boolean XawAsciiSourceChanged(\fIw\fP)
+.IN "XawAsciiSourceChanged" "" @DEF@
+.br
+Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the AsciiSrc object.
+.LP
+This function will return \fBTrue\fP if the source has changed since
+the last time it was saved or queried. The internal change flag is
+reset whenever the string is queried via \fBXtGetValues\fP or the
+buffer is saved via \fBXawAsciiSave\fP.
diff --git a/libXaw/spec/AsciiText b/libXaw/spec/AsciiText
new file mode 100644
index 000000000..815e0e162
--- /dev/null
+++ b/libXaw/spec/AsciiText
@@ -0,0 +1,166 @@
+.\" $Xorg: AsciiText,v 1.3 2000/08/17 19:42:26 cpqbld Exp $
+.NH 2
+Ascii Text Widget
+.LP
+.XS
+ AsciiText Widget
+.XE
+.IN "AsciiText widget" "" "@DEF@"
+.LP
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+Application Header file <X11/Xaw/AsciiText.h>
+.IN "AsciiText.h" ""
+ClassHeader file <X11/Xaw/AsciiTextP.h>
+.IN "AsciiTextP.h" ""
+Class asciiTextWidgetClass
+.IN "asciiTextWidgetClass" ""
+Class Name Text
+.IN "AsciiText widget" "class name"
+Superclass Text
+Sink Name textSink
+Source Name textSource
+.De
+.sp 1
+.LP
+For the ease of internationalization, the AsciiText widget class name has not
+been changed, although it is actually able to support non-ASCII locales.
+The AsciiText widget is really a collection of smaller parts. It
+includes the Text widget itself, a ``Source'' (which supports memory management),
+and a ``Sink'' (which handles the display). There are currently two supported
+sources, the AsciiSrc and MultiSrc, and two supported sinks, the AsciiSink and
+.IN "AsciiSrc object" ""
+.IN "AsciiSink object" ""
+.IN "MultiSrc object" ""
+.IN "MultiSink object" ""
+MultiSink. Some of
+the resources listed below are not actually resources of the
+AsciiText, but belong to the associated source or sink. This is
+is noted in the explanation of each resource where it applies. When
+specifying these resources in a resource file it is necessary to use
+\fI*AsciiText*resource_name\fP instead of
+\fI*AsciiText.resource_name\fP, since they actually belong to the
+children of the AsciiText widget, and not the AsciiText widget itself.
+However, these resources may be set directly on the AsciiText widget at
+widget creation time, or via \fBXtSetValues\fP.
+.NH 3
+Resources
+.LP
+When creating an AsciiText widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "AsciiText widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1.1i) lw(.5i) lw(1.9i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+autoFill AutoFill Boolean False
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+bottomMargin Margin Position 2
+callback Callback XtCallbackList NULL
+colormap Colormap Colormap Parent's Colormap
+cursor Cursor Cursor XC_xterm
+cursorName Cursor String NULL
+dataCompression DataCompression Boolean True
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+displayCaret Output Boolean True
+displayNonprinting Output Boolean True
+displayPosition TextPosition XawTextPosition 0
+echo Output Boolean True
+editType EditType XawTextEditType XawtextRead
+font Font XFontStruct* XtDefaultFont
+fontSet FontSet XFontSet XtDefaultFontSet
+foreground Foreground Pixel XtDefaultForeground
+height Height Dimension A Font height + margins
+insensitiveBorder Insensitive Pixmap GreyPixmap
+insertPosition TextPosition int 0
+international International Boolean C False
+leftMargin Margin Dimension 2
+length Length int A length of \fBstring\fP
+mappedWhenManaged MappedWhenManaged Boolean True
+pieceSize PieceSize XawTextPosition BUFSIZ
+pointerColor Foreground Pixel XtDefaultForeground
+pointerColorBackground Background Pixel XtDefaultBackground
+resize Resize XawTextResizeMode XawtextResizeNever
+rightMargin Margin Position 2
+screen Screen Screen R Parent's Screen
+scrollHorizontal Scroll XawTextScrollMode XawtextScrollNever
+scrollVertical Scroll XawTextScrollMode XawtextScrollNever
+selectTypes SelectTypes XawTextSelectType* See above
+sensitive Sensitive Boolean True
+string String String NULL
+textSink TextSink Widget An AsciiSink
+textSource TextSource Widget An AsciiSrc
+topMargin Margin Position 2
+translations Translations TranslationTable See above
+type Type XawAsciiType XawAsciiString
+useStringInPlace UseStringInPlace Boolean False
+width Width Dimension 100
+wrap Wrap WrapMode XawtextWrapNever
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Af
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.Tm
+.Oc AsciiText
+.Cm
+.Cu
+.Cn
+.Od AsciiText
+.Dp
+.Dc
+.Tc
+.Sd AsciiText
+.Td
+.Oe AsciiText
+.Sh AsciiText
+.Sf AsciiText
+.Sn AsciiText
+.Sg AsciiText
+.Hw
+.Ib
+.Ti
+.Ol AsciiText
+.Mm
+.Pf
+.Pb
+.Op AsciiText
+.Tz
+.Sc
+.Ts
+.St
+.Se
+.Os AsciiText
+.To
+.Tr
+.Ot AsciiText
+.Ou AsciiText
+.Tw
+.Xy
+
+
diff --git a/libXaw/spec/Box b/libXaw/spec/Box
new file mode 100644
index 000000000..22bfe39b1
--- /dev/null
+++ b/libXaw/spec/Box
@@ -0,0 +1,139 @@
+.\" $Xorg: Box,v 1.3 2000/08/17 19:42:26 cpqbld Exp $
+.NH 2
+Box Widget
+.LP
+.XS
+ Box Widget
+.XE
+.IN "Box widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application Header file <X11/Xaw/Box.h>
+.IN "Box.h" ""
+Class Header file <X11/Xaw/BoxP.h>
+.IN "BoxP.h" ""
+Class boxWidgetClass
+.IN "boxWidgetClass" ""
+Class Name Box
+.IN "Box widget" "class name"
+Superclass Composite
+.sp
+.De
+.LP
+The Box widget provides geometry management of arbitrary widgets in a
+box of a specified dimension. The children are rearranged when
+resizing events occur either on the Box or its children, or when
+children are managed or unmanaged. The Box widget always attempts to
+pack its children as tightly as possible within the geometry allowed by
+its parent.
+.LP
+Box widgets are commonly used to manage a related set of buttons and
+are often called ButtonBox widgets, but the children are not
+limited to buttons. The Box's children are arranged on a background that
+has its own specified dimensions and color.
+.NH 3
+Resources
+.LP
+When creating a Box widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "Box widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+children ReadOnly WidgetList R NULL
+colormap Colormap Colormap Parent's Colormap
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+height Height Dimension A see \fBLayout Semantics\fP
+hSpace HSpace Dimension 4
+mappedWhenManaged MappedWhenManaged Boolean True
+numChildren ReadOnly Cardinal R 0
+orientation Orientation Orientation XtorientVertical
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+vSpace VSpace Dimension 4
+translations Translations TranslationTable NULL
+width Width Dimension A see \fBLayout Semantics\fP
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.Ch
+.Cm
+.Dp
+.Dc
+.Hw
+.IP \fBhSpace\fP 1.5i
+.br
+.ns
+.IP \fBvSpace\fP 1.5i
+The amount of space, in pixels, to leave between the children. This
+resource specifies the amount of space left between the outermost
+children and the edge of the box.
+.Mm
+.Nc
+.IP \fBorientation\fP 1.5i
+Specifies whether the preferred shape of the box (i.e. the result
+returned by the query_geometry class method) is tall and narrow
+\fBXtorientVertical\fP or short and wide \fPXtorientHorizontal\fP.
+.IN "XtorientVertical" ""
+.IN "XtorientHorizontal" ""
+.IN "conversions" "Orientation"
+When the Box is a child of a parent which enforces width constraints, it
+is usually better to specify \fBXtorientVertical\fP (the default).
+When the parent enforces height constraints, it is usually better to
+specify \fBXtorientHorizontal\fP.
+.Rs "horizontal \fPand\fB vertical"
+.Sc
+.Se
+.Tr
+.Xy
+.NH 3
+Layout Semantics
+.IN "Box widget" "layout semantics"
+.LP
+Each time a child is managed or unmanaged, the Box widget will attempt
+to reposition the remaining children to compact the box. Children are
+positioned in order left to right, top to bottom. The packing
+algorithm used depends on the \fBorientation\fP of the Box.
+.IP \fBXtorientVertical\fP 1.5i
+.IN "XtorientVertical" "" @DEF@
+When the next child does not fit on the current row, a new row is
+started. If a child is wider than the width of the box, the box will
+request a larger width from its parent and will begin the layout
+process from the beginning if a new width is granted.
+.IP \fBXtorientHorizontal\fP 1.5i
+.IN "XtorientHorizontal" "" @DEF@
+When the next child does not fit on the current row, the Box widens if
+possible (so as to keep children on a single row); otherwise a new row is
+started.
+.LP
+After positioning all children, the Box widget attempts to shrink its
+own size to the minimum dimensions required for the layout.
diff --git a/libXaw/spec/CH1 b/libXaw/spec/CH1
new file mode 100644
index 000000000..b392a7012
--- /dev/null
+++ b/libXaw/spec/CH1
@@ -0,0 +1,411 @@
+.\" $Xorg: CH1,v 1.3 2000/08/17 19:42:26 cpqbld Exp $
+.ps 11
+.nr PS 11
+.ds LH \fBAthena Widget Set\fP
+.ds CH
+.ds RH \fB\*(xV\fP
+.bp 1
+.af PN 1
+\&
+.sp 1
+.ce 3
+\s+1\fBChapter 1\fP\s-1
+
+\s+1\fBAthena Widgets and The Intrinsics\fP\s-1
+.sp 2
+.nr H1 1
+.if \n(GS .nr nh*hl 1
+.nr H2 0
+.nr H3 0
+.nr H4 0
+.nr H5 0
+.LP
+.XS
+Chapter 1 \- Athena Widgets and The \*(xI
+.XE
+The X Toolkit is made up of two distinct pieces, the Xt \*(xI and a
+widget set. The Athena widget set is a sample implementation of a
+widget set built upon the \*(xI. In the \*(tk, a widget is the
+combination of an X window or subwindow and its associated input and
+output semantics.
+.LP
+Because the \*(xI provide the same basic functionality to all widget
+sets it may be possible to use widgets from the Athena widget set with
+other widget sets based upon the \*(xI. Since widget sets may also
+implement private protocols, all functionality may not be available when
+mixing and matching widget sets. For information about the \*(xI, see
+the \fI\*(xT\fP.
+.LP
+The Athena widget set is a library package layered on top of the \*(xI
+and Xlib that provides a set of user interface tools sufficient to build
+a wide variety of applications. This layer extends the basic
+abstractions provided by X and provides the next layer of functionality
+primarily by supplying a cohesive set of sample widgets. Although the
+\*(xI are a Consortium standard, there is no standard widget set.
+.LP
+To the extent possible, the \*(xI are "policy-free". The application
+environment and widget set, not the \*(xI, define, implement, and
+enforce:
+.IP \(bu 5
+Policy
+.IP \(bu 5
+Consistency
+.IP \(bu 5
+Style
+.LP
+Each individual widget implementation defines its own policy. The \*(tk
+design allows for, but does not necessarily encourage, the free mixing
+of radically differing widget implementations.
+.NH 2
+Introduction to the \*(tk
+.LP
+.XS
+ Introduction to the \*(tk
+.XE
+.IN "introduction" "" "@DEF@"
+The \*(tk provides tools that simplify the design of
+application user interfaces in the X Window System programming environment.
+It assists application programmers by providing a set of common
+underlying user-interface functions. It also lets widget programmers
+modify existing widgets, by subclassing, or add new widgets. By using
+the \*(tk in their applications, programmers can present a similar
+user interface across applications to all workstation users.
+.LP
+The \*(tk consists of:
+.IP \(bu 5
+A set of \*(xI functions for building widgets
+.IP \(bu 5
+An architectural model for constructing widgets
+.IP \(bu 5
+A widget set for application programming
+.LP
+While the majority of the \*(xI functions are intended
+for the widget programmer,
+a subset of the \*(xI functions are to be used by application programmers
+(see \fI\*(xT\fP).
+The architectural model lets the widget programmer design new widgets
+by using the \*(xI and by combining other widgets.
+The application interface layers built on top of the \*(tk include a
+coordinated set of widgets and composition policies.
+Some of these widgets and policies are specific to a single
+application domain, and others are common to a variety of
+applications.
+.LP
+The remainder of this chapter discusses the \*(tk and Athena widget set:
+.IP \(bu 5
+Terminology
+.IP \(bu 5
+Model
+.IP \(bu 5
+Conventions used in this manual
+.IP \(bu 5
+Format of the Widget Reference Chapters
+.NH 2
+Terminology
+.LP
+.XS
+ Terminology
+.XE
+.LP
+In addition to the terms already defined for X programming (see \fI\*(xL\fP),
+the following terms are specific to the \*(xI and Athena widget set
+and used throughout this document.
+.LP
+\fBApplication programmer\fP
+.IN "application programmer" "" "@DEF@"
+.IP
+A programmer who uses the \*(tk to produce an application user interface.
+.LP
+\fBChild\fP
+.IN "child" "" "@DEF"
+.IP
+A widget that is contained within another "parent" widget.
+.LP
+\fBClass\fP
+.IN "class" "" "@DEF@"
+.IP
+The general group to which a specific object belongs.
+.LP
+\fBClient\fP
+.IN "client" "" "@DEF@"
+.IP
+A function that uses a widget in an application or for composing
+other widgets.
+.LP
+\fBFullName\fP
+.IN "FullName" "" "@DEF"
+.IP
+The name of a widget instance appended to the full name of its parent.
+.LP
+\fBInstance\fP
+.IN "instance" "" "@DEF@"
+.IP
+A specific widget object as opposed to a general widget class.
+.LP
+\fBMethod\fP
+.IN "method" "" "@DEF@"
+.IP
+A function or procedure implemented by a widget class.
+.LP
+\fBName\fP
+.IN "name" "widget" "@DEF@"
+.IP
+The name that is specific to an instance of a widget for a given client.
+This name is specified at creation time and cannot be modified.
+.LP
+\fBObject\fP
+.IN "object" "" "@DEF@"
+.IP
+A data abstraction consisting of private data and private and public
+functions that operate on the private data.
+Users of the abstraction can interact with the object only through calls
+to the object's public functions.
+In the \*(tk,
+some of the object's public functions are called directly by the application,
+while others are called indirectly when the application calls the common
+\*(xI functions.
+In general, if a function is common to all widgets,
+an application uses a single \*(xI function to invoke the function for all
+types of widgets.
+If a function is unique to a single widget type,
+the widget exports the function.
+.LP
+\fBParent\fP
+.IN "parent" "" "@DEF@"
+.IP
+A widget that contains at least one other ("child") widget.
+A parent widget is also known as a composite widget.
+.LP
+\fBResource\fP
+.IN "resource" "" "@DEF@"
+.IP
+A named piece of data in a widget that can be set by a client,
+by an application, or by user defaults.
+.LP
+\fBSuperclass\fP
+.IN "superclass" "" "@DEF@"
+.IP
+A larger class of which a specific class is a member.
+All members of a class are also members of the superclass.
+.LP
+\fBUser\fP
+.IN "user" "" "@DEF@"
+.IP
+A person interacting with a workstation.
+.LP
+\fBWidget\fP
+.IN "widget" "" "@DEF@"
+.IP
+An object providing a user-interface abstraction (for example, a Scrollbar
+widget).
+.LP
+\fBWidget class\fP
+.IN "widget class" "" "@DEF@"
+.IP
+The general group to which a specific widget belongs,
+otherwise known as the type of the widget.
+.LP
+\fBWidget programmer\fP
+.IN "widget programmer" "" "@DEF@"
+.IP
+A programmer who adds new widgets to the \*(tk.
+.NH 2
+Underlying Model
+.LP
+.XS
+ Underlying Model
+.XE
+.IN "underlying model" "" "@DEF@"
+The underlying architectural model is based on the following premises:
+.KS
+.IP "Widgets are X windows"
+.IP
+Every user-interface widget is associated with an X window.
+The X window ID for a widget is readily available from the widget.
+Standard Xlib calls can be used by widgets for many of their input and
+output operations.
+.KE
+.KS
+.IP "Information hiding"
+.IP
+The data for every widget is private to the widget and its subclasses.
+That is, the data is neither directly accessible
+nor visible outside of the module implementing the widget.
+All program interaction with the widget is performed by a set of operations
+(methods) that are defined for the widget.
+.KE
+.KS
+.IP "Widget semantics and widget layout geometry"
+.IP
+Widget semantics are clearly separated from widget layout geometry.
+Widgets are concerned with implementing specific user-interface
+semantics. They have little control over issues such as their size or
+placement relative to other widget peers. Mechanisms are provided for
+associating geometric managers with widgets and for widgets to make
+suggestions about their own geometry.
+.KE
+.NH 2
+Conventions Used in this Manual
+.IP \(bu 5
+.IN "conventions" "used in manual" "@DEF@"
+All resources available to the widgets are listed with each widget. Many
+of these are available to more than one widget class due to the object
+oriented nature of the \*(xI. The new resources for each widget are
+listed in bold text, and the inherited resources are listed in plain text.
+.IP \(bu 5
+Global symbols are printed in \fBbold\fP and can be function names,
+symbols defined in include files, or structure names. Arguments are
+printed in \fIitalics\fP.
+.IP \(bu 5
+Each function is introduced by a general discussion that distinguishes
+it from other functions. The function declaration itself follows, and
+each argument is specifically explained. General discussion of the
+function, if any is required, follows the arguments. Where
+applicable, the last paragraph of the explanation lists the return values
+of the function.
+.IP \(bu 5
+To eliminate any ambiguity between those arguments that you pass and
+those that a function returns to you, the explanations for all
+arguments that you pass start with the word \fIspecifies\fP or, in the
+case of multiple arguments, the word \fIspecify\fP. The explanations
+for all arguments that are returned to you start with the word
+\fIreturns\fP or, in the case of multiple arguments, the word
+\fIreturn\fP. The explanations for all arguments that you can pass
+and are returned start with the words \fIspecifies and returns\fP.
+.IP \(bu 5
+Any pointer to a structure that is used to return a value is
+designated as such by the \fI_return\fP suffix as part of its name.
+All other pointers passed to these functions are used for reading
+only. A few arguments use pointers to structures that are used for
+both input and output and are indicated by using the \fI_in_out\fP
+suffix.
+.IN "_return" "" "@DEF@"
+.IN "_in_out" "" "@DEF@"
+.NH 2
+Format of the Widget Reference Chapters
+.LP
+.IN "conventions" "chapter format" "@DEF@"
+.IN "chapter format" "" "@DEF@"
+The majority of this document is a reference guide for the Athena
+widget set. Chapters three through six give the programmer all
+information necessary to use the widgets. The layout of the chapters
+follows a specific pattern to allow the programmer to easily find the
+desired information.
+.LP
+The first few pages of every chapter give an overview of the widgets
+in that section. Widgets are grouped into chapters by functionality.
+.IP "Chapter 3" .75i
+Simple Widgets
+.IP "Chapter 4" .75i
+Menus
+.IP "Chapter 5" .75i
+Text Widgets
+.IP "Chapter 6" .75i
+Composite and Constraint Widget
+.LP
+Following the introduction will be a description of each widget in that
+chapter. When no functional grouping is obvious the widgets are listed
+in alphabetical order, such as in chapters three and six.
+.LP
+The first section of each widget's description is a table that
+contains general information about this widget class. Here is the
+table for the Box widget, and an explanation of all the entries.
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application Header file <X11/Xaw/Box.h>
+Class Header file <X11/Xaw/BoxP.h>
+Class boxWidgetClass
+Class Name Box
+Superclass Composite
+.sp
+.De
+.IP "\fBApplication Header File\fP" 2.0i
+.IN "application header file" "" "@DEF@"
+This file must be included when an application uses this widget.
+It usually contains the class definition, and some resource macros.
+This is often called the ``public'' header file.
+.IN "class header file" "" "@DEF@"
+.IP "\fBClass Header File\fP" 2.0i
+This file will only be used by widget programmers. It will need to be
+included by any widget that subclasses this widget. This is often
+called the ``private'' header file.
+.IN "class" "" "@DEF@"
+.IP \fBClass\fP 2.0i
+This is the widget class of this widget. This global symbol is passed to
+\fBXtCreateWidget\fP so that the \*(xI will know which type of widget
+to create.
+.IN "class name" "" "@DEF@"
+.IP "\fBClass Name\fP" 2.0i
+This is the resource name of this class. This name can be used in
+a resource file to match any widget of this class.
+.IN "superclass" ""
+.IP \fBSuperclass\fP 2.0i
+This is the superclass that this widget class is descended from. If
+you understand how the superclass works it will allow you to more quickly
+understand what this widget does, since much of its functionality may be
+inherited from its superclass.
+.sp
+.LP
+After this table follows a general description of the default behavior of
+this widget, as seen by the user. In many cases this functionality
+may be overridden by the application programmer, or by the user.
+.LP
+The next section is a table showing the
+name, class, type and default value of each resource that is available
+to this widget. There is also a column containing notes describing
+special restrictions placed upon individual resources.
+.IN "notes" "" "@DEF@"
+.IN "A, note" "" "@DEF@"
+.IN "D, note" "" "@DEF@"
+.IN "C, note" "" "@DEF@"
+.IN "R, note" "" "@DEF@"
+.IP A .5i
+This resource may be automatically adjusted when another
+resource is changed.
+.IP C .5i
+This resource is only settable at widget creation time, and may not
+be modified with \fBXtSetValues\fP.
+.IP D .5i
+Do not modify this resource. While setting this resource will
+work, it can cause unexpected behavior. When this symbol appears
+there is another, preferred, interface provided by the \*(tk.
+.IP R .5i
+This resource is READ-ONLY, and may not be modified.
+.LP
+After the resource table is a detailed description of every resource
+available to that widget. Many of these are redundant, but printing
+them with each widget saves page flipping. The names of the resources
+that are inherited are printed in plain text, while the names of the
+resources that are new to this class are printed in \fBbold\fP.
+If you have already read the description of the superclass you need
+only pay attention to the resources printed in bold.
+.LP
+For each composite widget there is a section on layout semantics that
+follows the resource description. This section will describe the
+effect of constraint resources on the layout of the children, as well
+as a general description of where it prefers to place its children.
+.LP
+Descriptions of default translations and action routines come next, for
+widgets to which they apply. The last item in each widget's
+documentation is the description of all convenience routines provided by
+the widget.
+.NH 2
+Input Focus
+.XS
+ Input Focus
+.XE
+.IN "input focus" "" "@DEF@"
+.IN "input" "" "@DEF@"
+.IN "XtNinput" "" "@DEF@"
+.LP
+The \*(xI define a resource on all Shell widgets that interact with
+the window manager called \fBinput\fP. This resource requests the
+assistance of window manager in acquiring the input focus. The
+resource defaults to \fBFalse\fP in the \*(xI, but is redefined to
+default to \fBTrue\fP when an application is using the Athena widget
+set. An application programmer may override this default and set the
+resource back to \fBFalse\fP if the application does not need the window
+manager to give it the input focus. See the \fI\*(xT\fP for details
+on the \fIinput\fP resource.
diff --git a/libXaw/spec/CH2 b/libXaw/spec/CH2
new file mode 100644
index 000000000..9e6c17a8a
--- /dev/null
+++ b/libXaw/spec/CH2
@@ -0,0 +1,1103 @@
+.\" $Xorg: CH2,v 1.3 2000/08/17 19:42:26 cpqbld Exp $
+.bp
+\&
+.sp 1
+.ce 3
+\s+1\fBChapter 2\fP\s-1
+
+\s+1\fBUsing Widgets\fP\s-1
+.sp 2
+.nr H1 2
+.nr H2 0
+.nr H3 0
+.nr H4 0
+.nr H5 0
+.LP
+.XS
+Chapter 2 \- Using Widgets
+.XE
+.IN "using widgets" "" "@DEF@"
+Widgets serve as the primary tools for building a user interface or
+application environment. The Athena widget set consists of primitive
+widgets that contain no children (for example, a command button) and
+composite widgets which may contain one or more widget children (for
+example, a Box widget).
+.LP
+The remaining chapters explain the widgets that are provided
+by the Athena widget set.
+These user-interface components serve as an interface for
+application programmers who do not want to implement their own widgets.
+In addition, they serve as a starting point
+for those widget programmers who, using the \*(xI mechanisms,
+want to implement alternative application programming interfaces.
+.LP
+This chapter is a brief introduction to widget programming. The
+examples provided use the Athena widgets, though most of the concepts
+will apply to all widget sets. Although there are several programming
+interfaces to the \*(tk, only one is described here. A full
+description of the programming interface is provided in the document
+\fI\*(xT\fP.
+.NH 2
+Setting the Locale
+.LP
+.XS
+ Setting the Locale
+.XE
+If it is desirable that the application take advantage of
+internationalization (i18n), you must establish locale with
+.PN XtSetLanguageProc
+before \fBXtDisplayInitialize\fP or \fBXtAppInitialize\fP
+is called. For full details, please refer to the document
+\fI\*(xT\fP, section 2.2. However, the following simplest-case
+call is sufficient in many or most applications.
+.LP
+.IN "internationalization" "" ""
+.IN "XtSetLanguageProc" "" "@DEF@"
+.IN "locale" "" ""
+.Ds
+.TA .5i 2i
+.ta .5i 2i
+ XtSetLanguageProc(NULL, NULL, NULL);
+.De
+.LP
+Most notably, this will affect the Standard C locale, determine which
+resource files will be loaded, and what fonts will be required of FontSet
+specifications. In many cases, the addition of this line is the only source change
+required to internationalize Xaw programs, and will not disturb the function
+of programs in the default "C" locale.
+.NH 2
+Initializing the Toolkit
+.LP
+.XS
+ Initializing the Toolkit
+.XE
+You must call a toolkit initialization function before invoking any
+other toolkit routines (besides locale setting, above).
+.PN XtAppInitialize
+opens the X server connection, parses the command line,
+and creates an initial widget that will serve as the root of
+a tree of widgets created by this application.
+.IN "initialization" "" "@DEF@"
+.IN "toolkit initialization" "" "@DEF@"
+.IN "XtAppInitialize" "" "@DEF@"
+.IN "fallback resources" "" "@DEF@"
+.FD 0
+Widget XtAppInitialize(\fIapp_context_return\fP, \fIapplication_class\fP, \
+\fIoptions\fP, \fInum_options\fP,
+.ta 2i
+ \fIargc_in_out\fP, \fIargv_in_out\fP, \fIfallback_resources\fP, \
+\fIargs\fP, \fInum_args\fP)
+.br
+ XtAppContext *\fIapp_context_return\fP;
+.br
+ String \fIapplication_class\fP;
+.br
+ XrmOptionDescRec \fIoptions\fP[];
+.br
+ Cardinal \fInum_options\fP;
+.br
+ int *\fIargc_in_out\fP;
+.br
+ String *\fIargv_in_out\fP[];
+.br
+ String *\fIfallback_resources\fP;
+.br
+ ArgList \fIargs\fP;
+.br
+ Cardinal \fInum_args\fP;
+.FN
+.IP \fIapp_con_return\fP 1.5i
+Returns the application context of this application, if non-NULL.
+.IP \fIapplication_class\fP 1.5i
+Specifies the class name of this application,
+which is usually the generic name for all instances of this application.
+A useful convention is to form the class name by capitalizing the
+first letter of the application name. For example, the application named
+``xman'' has a class name of ``Xman''.
+.IP \fIoptions\fP 1.5i
+Specifies how to parse the command line for any application-specific
+resources.
+The options argument is passed as a parameter to
+.PN XrmParseCommand .
+For further information,
+see \fI\*(xL\fP.
+.IP \fInum_options\fP 1.5i
+Specifies the number of entries in the options list.
+.IP \fIargc_in_out\fP 1.5i
+Specifies a pointer to the number of command line parameters.
+.IP \fIargv_in_out\fP 1.5i
+Specifies the command line parameters.
+.IP \fIfallback_resources\fP 1.5i
+Specifies resource values to be used if the site-wide application class
+defaults file cannot be opened, or NULL.
+.IP \fIargs\fP 1.5i
+Specifies the argument list to use when creating the Application shell.
+.IP \fInum_args\fP 1.5i
+Specifies the number of arguments in \fIargs\fP.
+.LP
+This function will remove the command line arguments that the toolkit
+reads from \fIargc_in_out\fP, and \fIargv_in_out\fP. It will then
+attempt to open the display. If the display cannot be opened, an error
+message is issued and XtAppInitialize terminates the application. Once
+the display is opened, all resources are read from the locations
+specified by the \*(xI. This function returns an ApplicationShell
+widget to be used as the root of the application's widget tree.
+.NH 2
+Creating a Widget
+.LP
+.XS
+ Creating a Widget
+.XE
+.IN "widget creation" "" "@DEF@"
+.IN "creating widgets" "" "@DEF@"
+.IN "XtRealizeWidget" "" ""
+Creating a widget is a three-step process. First, the widget instance
+is allocated, and various instance-specific attributes are set by
+using \fBXtCreateWidget\fP. Second, the widget's parent is informed
+of the new child by using \fBXtManageChild\fP. Finally, X windows are
+created for the parent and all its children by using \fBXtRealizeWidget\fP
+and specifying the top-most widget. The first two steps can be
+combined by using \fBXtCreateManagedWidget\fP. In addition,
+\fBXtRealizeWidget\fP is automatically called when the child becomes
+managed if the parent is already realized.
+.LP
+To allocate, initialize, and manage a widget, use
+.PN XtCreateManagedWidget .
+.IN "XtCreateManagedWidget" "" "@DEF@"
+.FD 0
+Widget XtCreateManagedWidget(\fIname\fP, \fIwidget_class\fP, \fIparent\fP, \
+\fIargs\fP, \fInum_args\fP)
+.br
+ String \fIname\fP;
+.br
+ WidgetClass \fIwidget_class\fP;
+.br
+ Widget \fIparent\fP;
+.br
+ ArgList \fIargs\fP;
+.br
+ Cardinal \fInum_args\fP;
+.FN
+.IP \fIname\fP 1i
+Specifies the instance name for the created widget that is used for retrieving
+widget resources.
+.IP \fIwidget_class\fP 1i
+Specifies the widget class pointer for the created widget.
+.IP \fIparent\fP 1i
+Specifies the parent widget ID.
+.IP \fIargs\fP 1i
+Specifies the argument list. The argument list is a variable-length
+list composed of name and value pairs that contain information
+pertaining to the specific widget instance being created. For further
+information, see Section 2.7.2.
+.IP \fInum_args\fP 1i
+Specifies the number of arguments in the argument list.
+If the num_args is zero, the argument list is never referenced.
+.LP
+When a widget instance is successfully created, the widget identifier
+is returned to the application. If an error is encountered, the
+.PN XtError
+routine is invoked to inform the user of the error.
+.IN "XtError" "" ""
+.LP
+For further information, see \fI\*(xT\fP.
+.NH 2
+Common Resources
+.XS
+ Common Resources
+.XE
+.IN "resource" ""
+.LP
+Although a widget can have unique arguments that it understands, all
+widgets have common arguments that provide some regularity of operation.
+The common arguments allow arbitrary widgets to be managed by
+higher-level components without regard for the individual widget type.
+Widgets will ignore any argument that they do not understand.
+.LP
+The following resources are retrieved from the argument list
+or from the resource database by all of the Athena widgets:
+.TS H
+lw(1.5i) lw(1i) lw(1i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+colormap Colormap Colormap Parent's Colormap
+depth Depth int Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+height Height Dimension \fIwidget dependent\fP
+mappedWhenManaged MappedWhenManaged Boolean True
+screen Screen Screen Parent's Screen
+sensitive Sensitive Boolean True
+translations Translations TranslationTable \fIwidget dependent\fP
+width Width Dimension \fIwidget dependent\fP
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.IN "XtDefaultForeground" "" ""
+.IN "XtDefaultBackground" "" ""
+.LP
+The following additional resources are retrieved from the argument list
+or from the resource database by many of the Athena widgets:
+.TS H
+lw(1.5i) lw(1i) lw(1i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+callback Callback XtCallbackList NULL
+cursor Cursor Cursor \fIwidget dependent\fP
+foreground Foreground Pixel XtDefaultForeground
+insensitiveBorder Insensitive Pixmap GreyPixmap
+.sp 3p
+_
+.TE
+.IN "XtDefaultForeground" "" ""
+.NH 2
+Resource Conversions
+.XS
+ Resource Conversions
+.XE
+.IN "conversions" "" "@DEF@"
+.IN "string conversions" "" "@DEF@"
+.IN "type conversions" "" "@DEF@"
+.LP
+Most resources in the Athena widget set have a converter registered that
+will translate the string in a resource file to the correct internal
+representation. While some are obvious (string to integer, for example),
+others need specific mention of the allowable values. Three general
+converters are described here:
+.IP \(bu 5
+Cursor
+.IP \(bu 5
+Pixel
+.IP \(bu 5
+Bitmap
+.LP
+Many widgets have defined special converters that apply only to that
+widget. When these occur, the documentation section for that widget
+will describe the converter.
+.NH 3
+Cursor Conversion
+.IN "conversions" "ColorCursor" "@DEF@"
+.IN "conversions" "Cursor" "@DEF@"
+.IN "cursor" "" ""
+.LP
+The value for the \fBcursorName\fP resource is specified in the resource
+database as a string, and is of the following forms:
+.IP \(bu 5
+A standard X cursor name from \fB< X11/cursorfont.h >\fP.
+The names in \fBcursorfont.h\fP each describe a specific cursor. The
+resource names for these cursors are exactly like the names in this file
+except the \fBXC_\fP is not used. The cursor definition \fBXC_gumby\fP
+has a resource name of \fBgumby\fP.
+.IP \(bu 5
+Glyphs, as in \fIFONT font-name glyph-index [[ font-name ] glyph-index ]\fP.
+The first font and glyph specify the cursor source pixmap.
+The second font and glyph specify the cursor mask pixmap.
+The mask font defaults to the source font,
+and the mask glyph index defaults to the source glyph index.
+.IP \(bu 5
+A relative or absolute file name.
+If a relative or absolute file name is specified, that file is used to
+create the source pixmap. Then the string "Mask" is appended to
+locate the cursor mask pixmap. If the "Mask" file does not exist, the
+suffix "msk" is tried. If "msk" fails, no cursor mask will be used.
+If the filename does not start with '/' or './' the the bitmap
+file path is used (see section 2.4.3).
+.NH 3
+Pixel Conversion
+.LP
+.IN "conversions" "Pixel" "@DEF@"
+.IN "pixel" "" ""
+.IN "rgb.txt" "" ""
+.IN "XtDefaultForeground" "" ""
+.IN "XtDefaultBackground" "" ""
+The string-to-pixel converter takes any name that is acceptable to
+XParseColor (see \fI\*(xL\fP). In addition this routine understands
+the special toolkit symbols `XtDefaultForeground' and
+`XtDefaultBackground', described in \fI\*(xT\fP. In short the acceptable
+pixel names are:
+.IP \(bu 5
+Any color name for the rgb.txt file (typically in the directory
+/usr/lib/X11 on POSIX systems).
+.IP \(bu 5
+A numeric specification of the form #<red><green><blue> where these
+numeric values are hexadecimal digits (both upper and lower case).
+.IP \(bu 5
+The special strings `XtDefaultForeground' and `XtDefaultBackground'
+.NH 3
+Bitmap Conversion
+.IN "bitmap conversions" "" "@DEF@"
+.IN "conversions" "Bitmap" "@DEF@"
+.IN "bitmapFilePath" "" "@DEF@"
+.IN "BitmapFilePath" "" "@DEF@"
+.IN "/usr/include/X11/bitmaps" "" ""
+.LP
+The string-to-bitmap converter attempts to locate a file containing
+bitmap data whose name is specified by the input string. If the file
+name is relative (i.e. does not begin with / or ./), the directories to
+be searched are specified in the \fBbitmapFilePath\fP resource--class
+\fBBitmapFilePath\fP. This resource specifies a colon (:) separated
+list of directories that will be searched for the named bitmap or
+cursor glyph (see section 2.4.1). The \fBbitmapFilePath\fP resource is
+global to the application, and may \fBnot\fP be specified differently
+for each widget that wishes to convert a cursor to bitmap. In addition
+to the directories specified in the \fBbitmapFilePath\fP resource a
+default directory is searched. When using POSIX the default
+directory is
+.PN /usr/include/X11/bitmaps .
+.NH 2
+Realizing a Widget
+.LP
+.XS
+ Realizing a Widget
+.XE
+.IN "realizing widgets" "" "@DEF@"
+The
+.PN XtRealizeWidget
+function performs two tasks:
+.IP \(bu 5
+Calculates the geometry constraints of all managed descendants
+of this widget. The actual calculation is put off until realize time
+for performance reasons.
+.IP \(bu 5
+Creates an X window for the widget and, if it is a composite widget,
+realizes each of its managed children.
+.IN "XtRealizeWidget" "" "@DEF@"
+.FD 0
+void XtRealizeWidget(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget.
+.LP
+For further information about this function,
+see the \fI\*(xT\fP.
+.NH 2
+Processing Events
+.LP
+.XS
+ Processing Events
+.XE
+.IN "events" "" ""
+.IN "XtAppInitialize" "" ""
+Now that the application has created, managed and realized its
+widgets, it is ready to process the events that will be delivered by the
+X Server to this client. A function call that will process the
+events is \fBXtAppMainLoop\fP.
+.IN "XtAppMainLoop" "" "@DEF@"
+.FD 0
+void XtAppMainLoop(\fIapp_context\fP)
+.br
+ XtAppContext \fIapp_context\fP;
+.FN
+.IP \fIapp_context\fP 1i
+Specifies the application context of this application. The value is
+normally returned by \fBXtAppInitialize\fP.
+.LP
+This function never returns: it is an infinite loop that processes the
+X events. User input can be handled through callback procedures and
+application defined action routines. More details are provided in
+\fI\*(xT\fP.
+.NH 2
+Standard Widget Manipulation Functions
+.XS
+ Standard Widget Manipulation Functions
+.XE
+.LP
+After a widget has been created, a client can interact with that
+widget by calling one of the standard widget manipulation routines
+provided by the \*(xI, or a widget class-specific manipulation routine.
+.LP
+The \*(xI provide generic routines to give the application programmer
+access to a set of standard widget functions. The common widget
+routines let an application or composite widget perform the following
+operations on widgets without requiring explicit knowledge of the widget
+type.
+.IP \(bu 5
+Control the mapping of widget windows
+.IP \(bu 5
+Destroy a widget instance
+.IP \(bu 5
+Obtain an argument value
+.IP \(bu 5
+Set an argument value
+.NH 3
+Mapping Widgets
+.LP
+By default,
+widget windows are mapped (made viewable) automatically by
+\fBXtRealizeWidget\fP. This behavior can be disabled by using
+\fBXtSetMappedWhenManaged\fP, making the client responsible for calling
+\fBXtMapWidget\fP to make the widget viewable.
+.IN "XtSetMappedWhenManaged" "" "@DEF@"
+.IN "XtMapWidget" "" ""
+.IN "XtRealizeWidget" "" ""
+.FD 0
+void XtSetMappedWhenManaged(\fIw\fP, \fImap_when_managed\fP)
+.br
+ Widget \fIw\fP;
+.br
+ Boolean \fImap_when_managed\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget.
+.IP \fImap_when_managed\fP 1i
+Specifies the new value.
+If map_when_managed is \fBTrue\fP, the widget is mapped automatically
+when it is realized. If map_when_managed is \fBFalse\fP, the client
+must call
+.PN XtMapWidget
+or make a second call to
+.PN XtSetMappedWhenManaged
+to cause the child window to be mapped.
+.LP
+.sp
+The definition for
+.PN XtMapWidget
+is:
+.IN "XtMapWidget" "" "@DEF@"
+.FD 0
+void XtMapWidget(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget.
+.LP
+When you are creating several children in sequence for a previously
+realized common parent it is generally more efficient to construct a
+list of children as they are created (using \fBXtCreateWidget\fP) and
+then use \fBXtManageChildren\fP to request that their parent managed
+them all at once. By managing a list of children at one time, the
+parent can avoid wasteful duplication of geometry processing and the
+associated ``screen flash''.
+.IN "XtManageChildren" "" "@DEF@"
+.IN "XtCreateWidget" "" ""
+.FD 0
+void XtManageChildren(\fIchildren\fP, \fInum_children\fP)
+.br
+ WidgetList \fIchildren\fP;
+.br
+ Cardinal \fInum_children\fP;
+.FN
+.IP \fIchildren\fP 1i
+Specifies a list of children to add.
+.IP \fInum_children\fP 1i
+Specifies the number of children to add.
+.LP
+If the parent is already visible on the screen, it is especially
+important to batch updates so that the minimum amount of visible window
+reconfiguration is performed.
+.LP
+For further information about these functions,
+see the \fI\*(xT\fP.
+.NH 3
+Destroying Widgets
+.LP
+To destroy a widget instance of any type, use
+.PN XtDestroyWidget .
+.IN "XtDestroyWidget" "" "@DEF@"
+.FD 0
+void XtDestroyWidget(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget.
+.LP
+.PN XtDestroyWidget
+destroys the widget and recursively destroys any children that it may have,
+including the windows created by its children.
+After calling
+.PN XtDestroyWidget ,
+no further references should be made to the widget or any children
+that the destroyed widget may have had.
+.NH 3
+Retrieving Widget Resource Values
+.LP
+To retrieve the current value of a resource attribute associated
+with a widget instance, use
+.PN XtGetValues .
+.IN "XtGetValues" "" "@DEF@"
+.FD 0
+void XtGetValues(\fIw\fP, \fIargs\fP, \fInum_args\fP)
+.br
+ Widget \fIw\fP;
+.br
+ ArgList \fIargs\fP;
+.br
+ Cardinal \fInum_args\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget.
+.IP \fIargs\fP 1i
+Specifies a variable-length argument list of name and \fBaddress\fP
+pairs that contain the resource name and the address into which the
+resource value is stored.
+.IP \fInum_args\fP 1i
+Specifies the number of arguments in the argument list.
+.LP
+The arguments and values passed in the argument list are dependent on
+the widget. Note that the caller is responsible for providing space
+into which the returned resource value is copied; the \fBArgList\fP
+contains a pointer to this storage (e.g. x and y must be
+allocated as Position). For further information, see the \fI\*(xT\fP.
+.NH 3
+Modifying Widget Resource Values
+.LP
+To modify the current value of a resource attribute associated with a
+widget instance, use
+.PN XtSetValues .
+.IN "XtSetValues" "" "@DEF@"
+.FD 0
+void XtSetValues(\fIw\fP, \fIargs\fP, \fInum_args\fP)
+.br
+ Widget \fIw\fP;
+.br
+ ArgList \fIargs\fP;
+.br
+ Cardinal \fInum_args\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget.
+.IP \fIargs\fP 1i
+Specifies an array of name and \fBvalue\fP pairs that contain the
+arguments to be modified and their new values.
+.IP \fInum_args\fP 1i
+Specifies the number of arguments in the argument list.
+.LP
+The arguments and values that are passed will depend on the widget
+being modified. Some widgets may not allow certain resources to be
+modified after the widget instance has been created or realized.
+No notification is given if any part of a \fBXtSetValues\fP request is
+ignored.
+.LP
+For further information about these functions, see the \fI\*(xT\fP.
+.IN "XtGetValues" "" ""
+.IN "XtSetValues" "" ""
+.NT
+The argument list entry for
+.PN XtGetValues
+specifies the address to which the caller wants the value copied. The
+argument list entry for
+.PN XtSetValues ,
+however, contains the new value itself, if the size of value is less than
+sizeof(XtArgVal) (architecture dependent, but at least sizeof(long));
+otherwise, it is a pointer to the value. String resources are always
+passed as pointers, regardless of the length of the string.
+.NE
+.NH 2
+Using the Client Callback Interface
+.LP
+.XS
+ Using the Client Callback Interface
+.XE
+.IN "callbacks" "" ""
+Widgets can communicate changes in their state to their clients
+by means of a callback facility.
+The format for a client's callback handler is:
+.IN "CallbackProc" "" "@DEF@"
+.FD 0
+void \fICallbackProc\fP(\fIw\fP, \fIclient_data\fP, \fIcall_data\fP)
+.br
+ Widget \fIw\fP;
+.br
+ XtPointer \fIclient_data\fP;
+.br
+ XtPointer \fIcall_data\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies widget for which the callback is registered.
+.IP \fIclient_data\fP 1i
+Specifies arbitrary client-supplied data that the widget should pass
+back to the client when the widget executes the client's callback
+procedure. This is a way for the client registering the callback to
+also register client-specific data: a pointer to additional information
+about the widget, a reason for invoking the callback, and so on. If no
+additional information is necessary, NULL may be passed as this argument.
+This field is also frequently known as the \fIclosure\fP.
+.IP \fIcall_data\fP 1i
+Specifies any callback-specific data the widget wants to pass to the client.
+For example, when Scrollbar executes its \fBjumpProc\fP callback list,
+it passes the current position of the thumb in \fIcall_data\fP.
+.LP
+Callbacks can be registered either by creating an argument containing
+the callback list described below or by using the special convenience
+routines \fBXtAddCallback\fP and \fBXtAddCallbacks\fP. When the widget
+is created, a pointer to a list of callback procedure and data pairs can
+be passed in the argument list to
+.PN XtCreateWidget .
+The list is of type
+.PN XtCallbackList :
+.IN "XtCallbackProc"
+.IN "XtAddCallbacks"
+.IN "XtAddCallback"
+.IN "XtCallbackList" "" "@DEF@"
+.IN "XtCallbackRec" "" "@DEF@"
+.LP
+.Ds 0
+.TA .5i 3i
+.ta .5i 3i
+typedef struct {
+ XtCallbackProc callback;
+ XtPointer closure;
+} XtCallbackRec, *XtCallbackList;
+.De
+.LP
+The callback list must be allocated and initialized before calling
+.PN XtCreateWidget .
+.IN "XtCreateWidget"
+The end of the list is identified by an entry containing NULL in
+callback and closure. Once the widget is created, the client can change
+or de-allocate this list; the widget itself makes no further reference
+to it. The closure field contains the client_data passed to the
+callback when the callback list is executed.
+.LP
+The second method for registering callbacks is to use
+.PN XtAddCallback
+after the widget has been created.
+.IN "XtAddCallback" "" "@DEF@"
+.FD 0
+void XtAddCallback(\fIw\fP, \fIcallback_name, \fP\fIcallback\fP, \
+\fIclient_data\fP)
+.br
+ Widget \fIw\fP;
+.br
+ String \fIcallback_name\fP;
+.br
+ XtCallbackProc \fIcallback\fP;
+.br
+ XtPointer \fIclient_data\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the widget to add the callback to.
+.IP \fIcallback_name\fP 1i
+Specifies the callback list within the widget to append to.
+.IP \fIcallback\fP 1i
+Specifies the callback procedure to add.
+.IP \fIclient_data\fP 1i
+Specifies the data to be passed to the callback when it is invoked.
+.LP
+.PN XtAddCallback
+adds the specified callback to the list for the named widget.
+.LP
+All widgets provide a callback list named
+.PN destroyCallback
+.IN "destroyCallback" "" "@DEF@"
+where clients can register procedures that are to be executed when the
+widget is destroyed. The destroy callbacks are executed when the widget
+or an ancestor is destroyed. The \fIcall_data\fP argument is unused for
+destroy callbacks.
+.NH 2
+Programming Considerations
+.LP
+.XS
+ Programming Considerations
+.XE
+This section provides some guidelines on how to set up an application
+program that uses the \*(tk.
+.NH 3
+Writing Applications
+.LP
+.IN "writing applications"
+.IN "StringDefs.h"
+.IN "Intrinsic.h"
+When writing an application that uses the X Toolkit,
+you should make sure that your application performs the following:
+.IP 1. 5
+Include
+.Pn < X11/Intrinsic.h >
+in your application programs.
+This header file automatically includes
+.Pn < X11/Xlib.h >,
+so all Xlib functions also are defined.
+It may also be necessary to include \fB< X11/StringDefs.h >\fP when setting
+up argument lists, as many of the XtN\fIsomething\fP definitions are
+only defined in this file.
+.IP 2. 5
+Include the widget-specific header files for each widget type
+that you need to use.
+For example,
+.Pn < X11/Xaw/Label.h >
+and
+.Pn < X11/Xaw/Command.h >.
+.IP 3. 5
+Call the
+.PN XtAppInitialize
+.IN "XtAppInitialize"
+function before invoking any other toolkit or Xlib functions.
+For further information,
+see Section 2.1 and the \fI\*(xT\fP.
+.IP 4. 5
+To pass attributes to the widget creation routines that will override
+any site or user customizations, set up argument lists. In this
+document, a list of valid argument names is provided in the discussion
+of each widget. The names each have a global symbol defined that begins
+with \fBXtN\fP to help catch spelling errors. For example,
+\fBXtNlabel\fP is defined for the \fBlabel\fP resource of many widgets.
+.IN "XtN" "" "@DEF@"
+.IP
+For further information, see Section 2.9.2.2.
+.IP 5. 5
+When the argument list is set up, create the widget with the
+\fBXtCreateManagedWidget\fP function. For further information, see
+Section 2.2 and the \fI\*(xT\fP.
+.IN "XtCreateManagedWidget"
+.IP 6. 5
+If the widget has any callback routines, set by the
+.PN XtNcallback
+argument or the
+.PN XtAddCallback
+function, declare these routines within the application.
+.IN "XtAddCallback"
+.IP 7. 5
+After creating the initial widget hierarchy, windows must be created
+for each widget by calling
+.PN XtRealizeWidget
+on the top level widget.
+.IN "XtRealizeWidget"
+.IP 8. 5
+Most applications now sit in a loop processing events using
+.PN XtAppMainLoop ,
+for example:
+.IN "XtAppMainLoop"
+.IP
+.Ds 0
+XtCreateManagedWidget(\fIname\fP, \fIclass\fP, \fIparent\fP, \fIargs\fP, \fInum_args\fP);
+XtRealizeWidget(\fIshell\fP);
+XtAppMainLoop(\fIapp_context\fP);
+.De
+.IP
+For information about this function, see the \fI\*(xT\fP.
+.IP 9. 5
+Link your application with
+.PN libXaw
+(the Athena widgets),
+.PN libXmu
+(miscellaneous utilities),
+.PN libXt
+(the \*(tk \*(xI),
+.PN libSM
+(Session Management),
+.PN libICE
+(Inter-Client Exchange),
+.PN libXext
+(the extension library needed for the shape extension code which allows
+rounded Command buttons), and
+.PN libX11
+(the core X library).
+The following provides a sample command line:
+.IN "libXaw"
+.IN "libXmu"
+.IN "libXt"
+.IN "libSM"
+.IN "libICE"
+.IN "libXext"
+.IN "libX11"
+.IN "linking applications"
+.IN "compiling applications"
+.IP
+.Ds 0
+cc -o \fIapplication\fP \fIapplication\fP.c \-lXaw \-lXmu \-lXt \
+\-lSM \-lICE \-lXext \-lX11
+.De
+.NH 3
+Changing Resource Values
+.IN "resource" ""
+.LP
+The \*(xI support two methods of changing the default resource
+values; the resource manager, and an argument list passed into
+XtCreateWidget. While resources values will get updated no matter
+which method you use, the two methods provide slightly different
+functionality.
+.IP "Resource Manager" 1.5i
+This method picks up resource definitions described in \fI\*(xL\fP from
+many different locations at run time. The locations most important to
+the application programmer are the \fIfallback resources\fP and the
+\fIapp-defaults\fP file, (see \fI\*(xT\fP for the complete list).
+Since these resource are loaded at run time, they can be overridden by
+the user, allowing an application to be customized to fit the
+particular needs of each individual user. These values can also be
+modified without the need to rebuild the application, allowing rapid
+prototyping of user interfaces. Application programmers should use
+resources in preference to hard-coded values whenever possible.
+.IP "Argument Lists" 1.5i
+The values passed into the widget at creation time via an argument list
+cannot be modified by the user, and allow no opportunity for
+customization. It is used to set resources that cannot be specified as
+strings (e.g. callback lists) or resources that should not be
+overridden (e.g. window depth) by the user.
+.NH 4
+Specifying Resources
+.LP
+It is important for all X Toolkit application programmers to
+understand how to use the X Resource Manager to specify resources for
+widgets in an X application. This section will describe the most common
+methods used to specify these resources, and how to use the X Resource
+manager.
+.IN "xrdb"
+.IP \fBXrdb\fP 1.5i
+The \fBxrdb\fP utility may be used to load a file containing
+resources into the X server. Once the resources are loaded, the
+resources will affect any new applications started on the display that
+they were loaded onto.
+.IN "application defaults"
+.IN "app-defaults"
+.IN "/usr/lib/X11/app-defaults"
+.IP "\fBApplication Defaults\fP" 1.5i
+The application defaults (app-defaults) file (normally in
+/usr/lib/X11/app-defaults/\fIclassname\fP) for an application is loaded
+whenever the application is started.
+.LP
+The resource specification has two colon-separated parts, a name, and
+a value. The \fIvalue\fP is a string whose format is dependent on the
+resource specified by \fIname\fP. \fIName\fP is constructed by
+appending a resource name to a full widget name.
+.LP
+The full widget name is a list of the name of every ancestor of the
+desired widget separated by periods (.). Each widget also has a class
+associated with it. A class is a type of widget (e.g. Label or
+Scrollbar or Box). Notice that class names, by convention, begin with
+capital letters and instance names begin with lower case letters. The
+class of any widget may be used in place of its name in a resource
+specification. Here are a few examples:
+.IP xman.form.button1 1.5i
+This is a fully specified resource name, and will affect only widgets
+called button1 that are children of widgets called form that are
+children of
+applications named xman. (Note that while typically two widgets that
+are siblings will have different names, it is not prohibited.)
+
+.IP Xman.Form.Command 1.5i
+This will match any Command widget that is a child of a Form widget
+that is itself a child of an application of class \fIXman\fP.
+.IP Xman.Form.button1 1.5i
+This is a mixed resource name with both widget names and classes specified.
+.LP
+This syntax allows an application programmer to specify any widget
+in the widget tree. To match more than one widget (for example a user
+may want to make all Command buttons blue), use an asterisk (*)
+instead of a period. When an asterisk is used, any number of widgets
+(including zero) may exist between the two widget names. For example:
+.IP Xman*Command 1.5i
+This matches all Command widgets in the Xman application.
+.IP Foo*button1 1.5i
+This matches any widget in the Foo application that is named \fIbutton1\fP.
+.LP
+The root of all application widget trees is the widget returned by
+\fBXtAppInitialize\fP. Even though this is actually an
+ApplicationShell widget, the toolkit replaces its widget class with the
+class name of the application. The name of this widget is either
+the name used to invoke the application (\fBargv[0]\fP) or the name of
+the application specified using the standard \fI-name\fP command line
+option supported by the \*(xI.
+.LP
+The last step in constructing the resource name is to append the name of
+the resource with either a period or asterisk to the full or partial
+widget name already constructed.
+.IP *foreground:Blue 2.25i
+Specifies that all widgets in all applications will have a foreground
+color of blue.
+.IP Xman*borderWidth:10 2.25i
+Specifies that all widgets in an application whose class is Xman will
+have a border width of 10 (pixels).
+.IP xman.form.button1.label:Testing 2.25i
+Specifies that a particular widget in the xman application will have a
+label named \fITesting\fP.
+.LP
+An exclamation point (!) in the first column of a line indicates
+that the rest of the line should be treated as a comment.
+.LP
+\fBFinal Words\fP
+.LP
+The Resource manager is a powerful tool that can be used very
+effectively to customize \*(tk applications at run time by either the
+application programmer or the user. Some final points to note:
+.IP \(bu 5
+An application programmer may add new resources to their
+application. These resources are associated with the global
+application, and not any particular widget. The \*(tk function used for
+adding the application resources is \fBXtGetApplicationResources\fP.
+.IN "XtGetApplicationResources"
+.IP \(bu 5
+Be careful when creating resource files. Since widgets will
+ignore resources that they do not understand, any spelling
+errors will cause a resource to have no effect.
+.IP \(bu 5
+Only one resource line will match any given resource. There is a set
+of precedence rules, which take the following general stance.
+.ta 10n
+.IP "" 5
+\(bu More specific overrides less specific, thus period always overrides asterisk.
+.IP "" 5
+\(bu Names on the left are more specific and override names on the right.
+.IP "" 5
+\(bu When resource specifications are exactly the same, user defaults
+.br
+ will override program defaults.
+.LP
+For a complete explanation of the rules of precedence, and
+other specific topics see \fI\*(xT\fP and \fI\*(xL\fP.
+.NH 4
+Creating Argument Lists
+.IN "argument lists" "" "@DEF@"
+.LP
+To set up an argument list for the inline specification of widget attributes,
+you may use any of the four approaches discussed in this section.
+Each resource name has a global symbol associated with it. This
+global symbol has the form XtN\fIresource name\fP. For example, the
+symbol for ``foreground'' is \fBXtNforeground\fP. For further information,
+see the \fI\*(xT\fP.
+.LP
+Argument are specified by using the following structure:
+.IN "ArgList" "" "@DEF@"
+.IN "Arg" "" "@DEF@"
+.LP
+.Ds 0
+.TA .5i 1.5i
+.ta .5i 1.5i
+typedef struct {
+ String name;
+ XtArgVal value;
+} Arg, *ArgList;
+.De
+.LP
+The first approach is to statically initialize the argument list.
+For example:
+.LP
+.Ds 0
+.TA .5i
+.ta .5i
+static Arg arglist[] = {
+ {XtNwidth, (XtArgVal) 400},
+ {XtNheight, (XtArgVal) 300},
+};
+.De
+.LP
+This approach is convenient for lists that do not need to be computed
+at runtime and makes adding or deleting new elements easy.
+The
+.IN "XtNumber"
+.PN XtNumber
+macro is used to compute the number of elements in the argument list,
+preventing simple programming errors:
+.LP
+.Ds
+XtCreateWidget(\fIname\fP, \fIclass\fP, \fIparent\fP, \fIarglist\fP, XtNumber(\fIarglist\fP));
+.De
+.IN "XtSetArg" "" "@DEF@"
+.LP
+The second approach is to use the
+.PN XtSetArg
+macro.
+For example:
+.LP
+.Ds 0
+.TA .5i
+.ta .5i
+Arg arglist[10];
+XtSetArg(arglist[1], XtNwidth, 400);
+XtSetArg(arglist[2], XtNheight, 300);
+.De
+.LP
+To make it easier to insert and delete entries,
+you also can use a variable index:
+.LP
+.Ds 0
+.TA .5i
+.ta .5i
+Arg arglist[10];
+Cardinal i=0;
+XtSetArg(arglist[i], XtNwidth, 400); i++;
+XtSetArg(arglist[i], XtNheight, 300); i++;
+.De
+.LP
+The i variable can then be used as the argument list count in the widget
+create function.
+In this example,
+.IN "XtNumber"
+.PN XtNumber
+would return 10, not 2, and therefore is not useful.
+.NT
+You should not use auto-increment or auto-decrement
+within the first argument to
+.PN XtSetArg .
+As it is currently implemented,
+.PN XtSetArg
+is a macro that dereferences the first argument twice.
+.NE
+.LP
+The third approach is to individually set the elements of the
+argument list array:
+.LP
+.Ds 0
+.TA .5i
+.ta .5i
+Arg arglist[10];
+arglist[0].name = XtNwidth;
+arglist[0].value = (XtArgVal) 400;
+arglist[1].name = XtNheight;
+arglist[1].value = (XtArgVal) 300;
+.De
+.LP
+Note that in this example, as in the previous example,
+.IN "XtNumber"
+.PN XtNumber
+would return 10, not 2, and therefore would not be useful.
+.LP
+The fourth approach is to use a mixture of the first and third approaches:
+you can statically define the argument list but modify some entries at runtime.
+For example:
+.LP
+.Ds 0
+.TA .5i
+.ta .5i
+static Arg arglist[] = {
+ {XtNwidth, (XtArgVal) 400},
+ {XtNheight, (XtArgVal) NULL},
+};
+arglist[1].value = (XtArgVal) 300;
+.De
+.LP
+In this example,
+.IN "XtNumber"
+.PN XtNumber
+can be used, as in the first approach, for easier code maintenance.
+.NH 2
+Example Programs
+.XS
+ Example Programs
+.XE
+.IN "examples"
+.LP
+The best way to understand how to use any programming library is by
+trying some simple examples. A collection of example programs that
+introduces each of the widgets in that Athena widget set, as well as many
+important toolkit programming concepts, is available in the X11R6
+release as distributed by the X Consortium. It can be found in the
+distribution directory \fBcontrib/examples/mit/Xaw\fP, but see your
+site administrator for the exact location of these files on your system.
+See the README file from that directory for a guide to the examples.
+
diff --git a/libXaw/spec/CH3.intro b/libXaw/spec/CH3.intro
new file mode 100644
index 000000000..9040e02d5
--- /dev/null
+++ b/libXaw/spec/CH3.intro
@@ -0,0 +1,67 @@
+.bp
+.if e .bp \" make sure we break on an odd page.
+\&
+.sp 1
+.ce 3
+\s+1\fBChapter 3\fP\s-1
+
+\s+1\fBSimple Widgets\fP\s-1
+.IN "simple widgets" ""
+.sp 2
+.nr H1 3
+.nr H2 0
+.nr H3 0
+.nr H4 0
+.nr H5 0
+.na
+.LP
+.XS
+Chapter 3 - Simple Widgets
+.XE
+.LP
+Each of these widgets performs a specific user interface function. They
+are \fIsimple\fP because they cannot have widget children\(emthey may only
+be used as leaves of the widget tree. These widgets display information or
+take user input.
+.sp
+.IP \fBCommand\fP 1i
+.IN "Command widget" ""
+A push button that, when selected, may cause a specific action
+to take place. This widget can display a multi-line string or a bitmap or pixmap image.
+.IP \fBGrip\fP 1i
+.IN "Grip widget" ""
+A rectangle that, when selected, will cause an action to take place.
+.IP \fBLabel\fP 1i
+.IN "Label widget" ""
+A rectangle that can display a multi-line string or a bitmap or pixmap image.
+.IP \fBList\fP 1i
+.IN "List widget" ""
+A list of text strings presented in row column format that may be
+individually selected. When an element is selected an action may take
+place.
+.IP \fBPanner\fP 1i
+.IN "Panner widget" ""
+A rectangular area containing a \fIslider\fP that may be moved in two
+dimensions. Notification of movement may be continuous or discrete.
+.IP \fBRepeater\fP 1i
+.IN "Repeater widget" ""
+A push button that triggers an action at an increasing rate when selected.
+This widget can display a multi-line string or a bitmap or pixmap image.
+.IP \fBScrollbar\fP
+.IN "Scrollbar widget" ""
+A rectangular area containing a \fIthumb\fP that when slid along one
+dimension may cause a specific action to take place. The Scrollbar may
+be oriented horizontally or vertically.
+.IP \fBSimple\fP 1i
+.IN "Simple widget" ""
+The base class for most of the simple widgets. Provides a rectangular
+area with a settable mouse cursor and special border.
+.IP \fBStripChart\fP 1i
+.IN "StripChart widget" ""
+A real time data graph that will automatically update and scroll.
+.IP \fBToggle\fP 1i
+.IN "Toggle widget" ""
+A push button that contains state information. Toggles
+may also be used as ``radio buttons'' to implement a ``one of many'' or
+``zero or one of many'' group
+of buttons. This widget can display a multi-line string or a bitmap or pixmap image.
diff --git a/libXaw/spec/CH4.intro b/libXaw/spec/CH4.intro
new file mode 100644
index 000000000..c11e42547
--- /dev/null
+++ b/libXaw/spec/CH4.intro
@@ -0,0 +1,87 @@
+.bp
+\&
+.sp 1
+.ce 3
+\s+1\fBChapter 4\fP\s-1
+
+\s+1\fBMenus\fP\s-1
+.sp 2
+.nr H1 4
+.nr H2 0
+.nr H3 0
+.nr H4 0
+.nr H5 0
+.na
+.LP
+.XS
+Chapter 4 - Menus
+.XE
+.IN "Menus" ""
+.LP
+The Athena widget set provides support for single paned non-hierarchical
+popup and pulldown menus. Since menus are such a common user interface
+tool, support for them must be provided in even the most basic widget
+sets. In menuing as in other areas, the Athena Widget Set provides only
+basic functionality.
+.LP
+Menus in the Athena widget set are implemented as a menu container (the
+SimpleMenu widget) and a collection of objects that comprise the
+menu entries. The SimpleMenu widget is itself a direct subclass of the
+OverrideShell widget class, so no other shell is necessary when
+creating a menu. The managed children of a SimpleMenu must be
+subclasses of the Sme (Simple Menu Entry) object.
+.LP
+The Athena widget set provides three classes of Sme objects that may be
+used to build menus.
+.sp
+.IP \fBSme\fP 1i
+.IN "Sme object" ""
+The base class of all menu entries. It may be used as a menu entry
+itself to provide blank space in a menu. ``Sme'' means ``Simple Menu
+Entry.''
+.IP \fBSmeBSB\fP 1i
+.IN "SmeBSB object" ""
+This menu entry provides a selectable entry containing a text string.
+A bitmap may also be placed in the left and right margins. ``BSB'' means
+``Bitmap String Bitmap.''
+.IP \fBSmeLine\fP 1i
+.IN "SmeLine object" ""
+This menu entry provides an unselectable entry containing a separator line.
+.sp
+.LP
+The SimpleMenu widget informs the window manager that it should ignore
+its window by setting the \fBOverride Redirect\fP flag. This is the
+correct behavior for the press-drag-release style of menu operation. If
+click-move-click or ``pinable''' menus are desired it is the
+responsibility of the application programmer, using the SimpleMenu
+resources, to inform the window manager of the menu.
+.LP
+To allow easy creation of pulldown menus, a MenuButton widget is
+also provided as part of the Athena widget set.
+.NH 2
+Using the Menus
+.XS
+ Using the Menus
+.XE
+.IN "Menus" "using"
+.LP
+The default configuration for the menus is press-drag-release.
+The menus will typically be
+activated by clicking a pointer button while the pointer is over a
+MenuButton, causing the menu to appear in a fixed location relative to
+that button; this is a \fBpulldown\fP menu. Menus may also be activated
+.IN "Menus" "pulldown"
+when a specific pointer and/or key sequence is used anywhere in the
+application; this is a \fBpopup\fP menu (e.g. clicking Ctrl-<pointer
+.IN "Menus" "popup"
+button 1> in the common application \fBxterm\fP). In this
+case the menu should be positioned under
+the cursor. Typically menus will be placed so the pointer cursor is on
+the first menu entry, or the last entry selected by the user.
+.LP
+The menu remains on the screen as long as the pointer button is held
+down. Moving the pointer will highlight different menu items.
+If the pointer leaves the menu, or moves over an entry that cannot
+be selected then no menu entry will highlighted. When the desired menu
+entry has been highlighted, releasing the pointer button removes the menu,
+and causes any mechanism associated with this entry to be invoked.
diff --git a/libXaw/spec/CH5.intro b/libXaw/spec/CH5.intro
new file mode 100644
index 000000000..69230c0ad
--- /dev/null
+++ b/libXaw/spec/CH5.intro
@@ -0,0 +1,292 @@
+.\" $Xorg: CH5.intro,v 1.3 2000/08/17 19:42:26 cpqbld Exp $
+.LP
+.bp
+\&
+.sp 1
+.ce 3
+\s+1\fBChapter 5\fP\s-1
+
+\s+1\fBText Widgets\fP\s-1
+.sp 2
+.nr H1 5
+.nr H2 0
+.nr H3 0
+.nr H4 0
+.nr H5 0
+.na
+.LP
+.XS
+Chapter 5 - Text Widgets.
+.XE
+.LP
+The Text widget provides a window that will allow an application
+to display and edit one or more lines of text. Options are provided to
+allow the user to add Scrollbars to its window, search for a specific
+string, and modify the text in the buffer.
+.LP
+The Text widget is made up of a number of pieces; it was modularized to
+ease customization. The AsciiText widget class (actually not limited to
+ASCII but so named for compatibility) is be general enough to most
+needs. If more flexibility, special features, or extra functionality is
+needed, they can be added by implementing a new TextSource or TextSink, or
+by subclassing the Text Widget (See Section 5.8 for customization
+details.)
+.LP
+The words \fIinsertion point\fP are used in this chapter to refer to the text
+caret. This is the symbol that is displayed between two characters in
+the file. The insertion point marks the location where any new characters
+will be added to the file. To avoid confusion the pointer cursor will
+always be referred to as the \fIpointer\fP.
+.LP
+The text widget supports three edit modes, controlling the types of
+modifications a user is allowed to make:
+.IN "Text widget" "edit modes"
+.IP \(bu 5
+Append-only
+.IP \(bu 5
+Editable
+.IP \(bu 5
+Read-only
+.LP
+Read-only mode does not allow the user or the programmer to modify the text
+in the widget. While the entire string may be reset in
+read-only mode with \fBXtSetValues\fP, it cannot be modified via
+with \fBXawTextReplace\fP. Append-only and editable modes allow
+.IN "XawTextReplace" ""
+the text at the insertion point to be modified. The only difference is
+that text may only be added to or removed from the end of a buffer in
+append-only mode.
+.LP
+.NH 2
+Text Widget for Users
+.IN "Text widget" "User's Guide to the Text widget"
+.XS
+ Text Widget for Users
+.XE
+.LP
+The Text widget provides many of the common keyboard editing commands.
+These commands allow users to move around and edit the buffer. If an
+illegal operation is attempted, (such as deleting characters in a
+read-only text widget), the X server will beep.
+.NH 3
+Default Key Bindings
+.IN "Text widget" "default key bindings"
+.LP
+The default key bindings are patterned after those in the EMACS text editor:
+.sp
+.Ds 0
+.TA 1.0i 3.0i 4.5i
+.ta 1.0i 3.0i 4.5i
+Ctrl-a Beginning Of Line Meta-b Backward Word
+Ctrl-b Backward Character Meta-f Forward Word
+Ctrl-d Delete Next Character Meta-i Insert File
+Ctrl-e End Of Line Meta-k Kill To End Of Paragraph
+Ctrl-f Forward Character Meta-q Form Paragraph
+Ctrl-g Multiply Reset Meta-v Previous Page
+Ctrl-h Delete Previous Character Meta-y Insert Current Selection
+Ctrl-j Newline And Indent Meta-z Scroll One Line Down
+Ctrl-k Kill To End Of Line Meta-d Delete Next Word
+Ctrl-l Redraw Display Meta-D Kill Word
+Ctrl-m Newline Meta-h Delete Previous Word
+Ctrl-n Next Line Meta-H Backward Kill Word
+Ctrl-o Newline And Backup Meta-< Beginning Of File
+Ctrl-p Previous Line Meta-> End Of File
+Ctrl-r Search/Replace Backward Meta-] Forward Paragraph
+Ctrl-s Search/Replace Forward Meta-[ Backward Paragraph
+Ctrl-t Transpose Characters
+Ctrl-u Multiply by 4 Meta-Delete Delete Previous Word
+Ctrl-v Next Page Meta-Shift Delete Kill Previous Word
+Ctrl-w Kill Selection Meta-Backspace Delete Previous Word
+Ctrl-y Unkill Meta-Shift Backspace Kill Previous Word
+Ctrl-z Scroll One Line Up
+Ctrl-\\ Reconnect to input method
+Kanji Reconnect to input method
+.De
+.sp
+.LP
+In addition, the pointer may be used to cut and paste text:
+.LP
+.Ds
+.TA .5i 2.0i
+.ta .5i 2.0i
+ Button 1 Down Start Selection
+ Button 1 Motion Adjust Selection
+ Button 1 Up End Selection (cut)
+
+ Button 2 Down Insert Current Selection (paste)
+
+ Button 3 Down Extend Current Selection
+ Button 3 Motion Adjust Selection
+ Button 3 Up End Selection (cut)
+
+.De
+.LP
+Since all of these key and pointer bindings are set through the
+translations and resource manager, the user and the application
+programmer can modify them by changing the Text widget's
+\fBtranslations\fP resource.
+.\"
+.NH 3
+Search and Replace
+.IN "Text widget" "search"
+.IN "Text widget" "query replace"
+.LP
+The Text widget provides a search popup that can be used to search for a
+string within the current Text widget. The popup can be activated by
+typing either \fIControl-r\fP or \fIControl-s\fP. If \fIControl-s\fP is
+used the search will be forward in the file from the current location of the
+insertion point; if \fIControl-r\fP is used the search will be backward. The
+activated popup is placed under the pointer. It has a number of buttons
+that allow both text searches and text replacements to be performed.
+.LP
+At the top of the search popup are two toggle buttons labeled
+\fIbackward\fP and \fIforward\fP. One of these buttons will always be
+highlighted; this is the direction in which the search will be
+performed. The user can change the direction at any time by clicking on
+the appropriate button.
+.LP
+Directly under the buttons there are two text areas, one labeled
+\fISearch for:\fP and the other labeled \fIReplace with:\fP. If this is
+a read-only Text widget the \fIReplace with:\fP field will be insensitive
+and no replacements will be allowed. After each of these labels will be
+a text field. This field will allow the user to enter a string to
+search for and the string to replace it with. Only one of these text
+fields will have a window border around it; this is the active text
+field. Any key presses that occur when the focus in in the search popup
+will be directed to the active text field. There are also a few special
+key sequences:
+.DS
+.TA 1.75i
+.ta 1.75i
+\fBCarriage Return\fP: Execute the action, and pop down the search widget.
+\fBTab\fP: Execute the action, then move to the next field.
+\fBShift Carriage Return\fP: Execute the action, then move to the next field.
+\fBControl-q Tab\fP: Enter a Tab into a text field.
+\fBControl-c\fP: Pop down the search popup.
+.DE
+.LP
+Using these special key sequences should allow simple
+searches without ever removing one's hands from the keyboard.
+.LP
+Near the bottom of the search popup is a row of buttons. These buttons
+allow the same actions to to be performed as the key sequences, but the
+buttons will leave the popup active. This can be quite useful if many
+searches are being performed, as the popup will be left on the display.
+Since the search popup is a transient window, it may be picked
+up with the window manager and pulled off to the side for use
+at a later time.
+.IP \fBSearch\fP 15
+Search for the specified string.
+.IP \fBReplace\fP 15
+Replace the currently highlighted string with the string in the
+\fIReplace with\fP text field, and move onto the next occurrence of the
+\fISearch for\fP text field. The functionality is commonly referred to as
+query-replace.
+.IP \fBReplace-All\fP 15
+Replace all occurrences of the search string with the replace string from
+the current insertion point position to the end (or beginning) of the
+file. There is no key sequence to perform this action.
+.IP \fBCancel\fP 15
+Remove the search popup from the screen.
+.LP
+Finally, when \fBinternational\fP resource is \fBtrue\fP, there may be a
+pre-edit buffer below the button row, for composing input. Its presence
+is determined by the X locale in use and the VendorShell's \fBpreeditType\fP
+resource.
+.LP
+The widget hierarchy for the search popup is show below, all widgets
+are listed by class and instance name.
+.sp
+.nf
+.ta .5i 1.0i 1.5i 2.0i 2.5i
+Text <name of Text widget>
+ TransientShell search
+ Form form
+ Label label1
+ Label label2
+ Toggle backwards
+ Toggle forwards
+ Label searchLabel
+ Text searchText
+ Label replaceLabel
+ Text replaceText
+ Command search
+ Command replaceOne
+ Command replaceAll
+ Command cancel
+.fi
+.NH 3
+File Insertion
+.LP
+.IN "Text widget" "file insertion"
+To insert a file into a text widget, type the key sequence \fIMeta-i\fP,
+which will activate the file insert popup. This popup will appear under
+the pointer, and any text typed while the focus is in this popup will be
+redirected to the text field used for the filename. When the desired
+filename has been entered, click on \fIInsert File\fP, or type
+\fICarriage Return\fP. The named file will then be inserted in the text
+widget beginning at the insertion point position. If an error occurs when
+opening the file, an error message will be printed, prompting the user
+to enter the filename again. The file insert may be aborted by clicking
+on \fICancel\fP. If \fIMeta-i\fP is typed at a text widget that is
+read-only, it will beep, as no file insertion is allowed.
+.LP
+The widget hierarchy for the file insert popup is show below; all widgets
+are listed by class and instance name.
+.sp
+.nf
+.ta .5i 1.0i 1.5i 2.0i 2.5i
+Text <name of Text widget>
+ TransientShell insertFile
+ Form form
+ Label label
+ Text text
+ Command insert
+ Command cancel
+.fi
+.NH 3
+Text Selections for Users
+.LP
+.IN "Text widget" "Text Selections for Users"
+The text widgets have a text selection mechanism that allows
+the user to copy pieces of the text into the \fBPRIMARY\fP selection,
+and paste
+into the text widget some text that another application (or text
+widget) has put in the \fBPRIMARY\fP selection.
+.LP
+One method of selecting text is to press pointer button 1
+on the beginning of the text to be selected, drag the pointer until all
+of the desired text is highlighted, and then release the button to
+activate the selection. Another method is to click pointer button 1 at
+one end of the text to be selected, then click pointer button 3 at the
+other end.
+.LP
+To modify a currently active selection, press pointer button 3 near
+either the end of the selection that you want to
+adjust. This end of the selection may be moved while holding down pointer
+button 3. When the proper area has been highlighted release the pointer
+button to activate the selection.
+.LP
+The selected text may now be pasted into another application, and
+will remain active until some other client makes a selection.
+To paste text that some other application has
+put into the \fBPRIMARY\fP selection use pointer button 2.
+First place the insertion point where you would like the text to be inserted,
+then click and release pointer button 2.
+.LP
+Rapidly clicking pointer button 1 the following number of times will adjust
+the selection as described.
+.IP \fBTwo\fP 1.0i
+Select the word under the pointer. A word boundary is defined by the
+Text widget to be a Space, Tab, or Carriage Return.
+.IP \fBThree\fP 1.0i
+Select the line under the pointer.
+.IP \fBFour\fP 1.0i
+Select the paragraph under the pointer. A paragraph boundary is
+defined by the text widget as two Carriage Returns in a row with only
+Spaces or Tabs between them.
+.IP \fBFive\fP 1.0i
+Select the entire text buffer.
+.LP
+To unset the text selection, click pointer button 1
+without moving it.
diff --git a/libXaw/spec/CH6.intro b/libXaw/spec/CH6.intro
new file mode 100644
index 000000000..530f2f7f9
--- /dev/null
+++ b/libXaw/spec/CH6.intro
@@ -0,0 +1,84 @@
+.LP
+.bp
+.if e .bp \" make sure we break on an odd page.
+\&
+.sp 1
+.ce 3
+\s+1\fBChapter 6\fP\s-1
+
+\s+1\fBComposite and Constraint Widgets\fP\s-1
+.sp 2
+.nr H1 6
+.nr H2 0
+.nr H3 0
+.nr H4 0
+.nr H5 0
+.na
+.LP
+.XS
+Chapter 6 - Composite and Constraint Widgets
+.XE
+.LP
+These widgets may contain arbitrary widget children. They implement a
+policy for the size and location of their children.
+.IP \fBBox\fP 1i
+.IN "Box widget" ""
+This widget will pack its children as tightly as possible in
+non-overlapping rows.
+.IP \fBDialog\fP 1i
+.IN "Dialog widget" ""
+An implementation of a commonly used interaction semantic to prompt for
+auxiliary input from the user, such as a filename.
+.IP \fBForm\fP 1i
+.IN "Form widget" ""
+A more sophisticated layout widget that allows the children to specify
+their positions relative to the other children, or to the edges of the Form.
+.IP \fBPaned\fP 1i
+.IN "Paned widget" ""
+Allows children to be tiled vertically or horizontally. Controls are
+also provided to allow the user to dynamically resize the individual panes.
+.IP \fBPorthole\fP 1i
+.IN "Porthole widget" ""
+Allows viewing of a managed child which is as large as, or larger than its
+parent, typically under control of a Panner widget.
+.IP \fBTree\fP 1i
+.IN "Tree widget" ""
+Provides geometry management of widgets arranged in a directed, acyclic graph.
+.IP \fBViewport\fP 1i
+.IN "Viewport widget" ""
+Consists of a frame, one or two scrollbars, and an inner window. The
+inner window can contain all the data that is to be displayed. This inner
+window will be clipped by the frame with the scrollbars controlling
+which section of the inner window is currently visible.
+.LP
+.NH 3
+A Brief Note on Geometry Management
+.IN "geometry management" ""
+.LP
+The geometry management semantics provided by the X Toolkit give full
+control of the size and position of a widget to the parent of that
+widget. While the children are allowed to request a certain size or
+location, it is the parent who makes the final decision. Many of the
+composite widgets here will deny any geometry request from their
+children by default. If a child widget is not getting the expected size
+or location, it is most likely the parent disallowing a request, or
+implementing semantics slightly different than those expected by the
+application programmer.
+.LP
+If the application wishes to change the size or location of
+any widget it should make a call to \fBXtSetValues\fP. This will
+.IN "XtSetValues" ""
+allow the widget to ask its parent for the new size or location.
+As noted above the parent is allowed to refuse this request,
+and the child must live with the result. If the
+application is unable to achieve the desired semantics, then perhaps it
+should use a different composite widget. Under no circumstances
+should an application programmer resort to \fBXtMoveWidget\fP or
+.IN "XtMoveWidget" ""
+\fBXtResizeWidget\fP; these functions are exclusively for the use of
+.IN "XtResizeWidget" ""
+Composite widget implementors.
+.LP
+For more information on geometry management consult the \fI\*(xT\fP.
+
+
diff --git a/libXaw/spec/CH7.intro b/libXaw/spec/CH7.intro
new file mode 100644
index 000000000..7aaa1896b
--- /dev/null
+++ b/libXaw/spec/CH7.intro
@@ -0,0 +1,99 @@
+.LP
+.bp
+.if e .bp \" make sure we break on an odd page.
+\&
+.sp 1
+.ce 5
+\s+1\fBChapter 7\fP\s-1
+
+\s+1\fBCreating New Widgets (Subclassing)\fP\s-1
+
+\s+1Written By: Ralph Swick\s-1
+.sp 2
+.nr H1 7
+.nr H2 0
+.nr H3 0
+.nr H4 0
+.nr H5 0
+.na
+.LP
+.XS
+Chapter 7 - Creating New Widgets (Subclassing)
+.XE
+.IN "subclassing" "" "@DEF@"
+.IN "creating new widgets" "" "@DEF@"
+.LP
+Although the task of creating a new widget may at first appear a little
+daunting, there is a basic simple pattern that all widgets follow. The
+Athena Widget library contains a special widget called the
+\fITemplate\fP widget that is intended to assist the novice widget
+programmer in writing a custom widget.
+.LP
+Reasons for wishing to write a custom widget include:
+.IP \(bu 3
+Providing a graphical interface not currently supported by any existing
+widget set.
+.IP \(bu 3
+Convenient access to resource management procedures to obtain fonts,
+colors, etc., even if user customization is not desired.
+.IP \(bu 3
+Convenient access to user input dispatch and translation management procedures.
+.IP \(bu 3
+Access to callback mechanism for building higher-level application libraries.
+.IP \(bu 3
+Customizing the interface or behavior of an existing widget to suit a
+special application need.
+.IP \(bu 3
+Desire to allow user customization of resources such as fonts, colors,
+etc., or to allow convenient re-binding of keys and buttons to internal
+functions.
+.IP \(bu 3
+Converting a non-Toolkit application to use the Toolkit.
+.LP
+In each of these cases, the operation needed to create a new widget is
+to "subclass" an existing one. If the desired semantics of the new
+widget are similar to an existing one, then the implementation of the
+existing widget should be examined to see how much work would be
+required to create a subclass that will then be
+able to share the existing class methods. Much time will be saved in
+writing the new widget if an existing widget class Expose, Resize and/or
+GeometryManager method can be used by the subclass.
+.LP
+Note that some trivial uses of a ``bare-bones'' widget may be achieved by
+simply creating an instance of the Core
+widget. The class variable to use when creating a Core widget is
+.PN widgetClass .
+The geometry of the Core widget is determined entirely by the parent
+widget.
+.LP
+It is very often the case than an application will have a special need
+for a certain set of functions and that many copies of these functions
+will be needed. For example, when converting an older application to use
+the Toolkit, it may be desirable to have a "Window Widget" class that
+might have the following semantics:
+.IN "Window widget"
+.IN "Core widget"
+.IN "widgetClass"
+.IP \(bu 3
+Allocate 2 drawing colors in addition to a background color.
+.IP \(bu 3
+Allocate a text font.
+.IP \(bu 3
+Execute an application-supplied function to handle exposure events.
+.IP \(bu 3
+Execute an application-supplied function to handle user input events.
+.LP
+It is obvious that a completely general-purpose WindowWidgetClass could
+be constructed that would export all class methods as callbacks lists,
+but such a widget would be very large and would have to choose some
+arbitrary number of resources such as colors to allocate. An application
+that used many instances of the general-purpose widget would therefore
+un-necessarily waste many resources.
+.LP
+.sp
+In this section, an outline will be given of the procedure to follow to
+construct a special-purpose widget to address the items listed above.
+The reader should refer to the appropriate sections of the \fI\*(xT\fP
+for complete details of the material outlined here. Section 1.4 of
+the \fI\*(xI\fP should be read in conjunction with this section.
+.LP
diff --git a/libXaw/spec/Command b/libXaw/spec/Command
new file mode 100644
index 000000000..13dac468b
--- /dev/null
+++ b/libXaw/spec/Command
@@ -0,0 +1,205 @@
+.\" $Xorg: Command,v 1.3 2000/08/17 19:42:26 cpqbld Exp $
+.NH 2
+Command Widget
+.XS
+ Command Widget
+.XE
+.IN "Command widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application header file <X11/Xaw/Command.h>
+.IN "Command.h" ""
+Class header file <X11/Xaw/CommandP.h>
+.IN "CommandP.h" ""
+Class commandWidgetClass
+.IN "commandWidgetClass" ""
+Class Name Command
+.IN "Command widget" "class name"
+Superclass Label
+.sp
+.De
+.LP
+The Command widget is an area, often rectangular, that contains text
+or a graphical image. Command widgets are often referred to as
+``push buttons.'' When the pointer is over a Command widget, the
+widget becomes highlighted by drawing a rectangle around its perimeter.
+This highlighting indicates that the widget is ready for selection.
+When mouse button 1 is pressed, the Command widget indicates that
+it has been selected by reversing its foreground and background colors.
+When the mouse button is released, the Command widget's \fBnotify\fP
+action is invoked, calling all functions on its callback list. If
+the pointer is moved off of the widget before the pointer button is
+released, the widget reverts to its normal foreground and background
+colors, and releasing the pointer button has no effect. This behavior
+allows the user to cancel an action.
+.NH 3
+Resources
+.LP
+When creating a Command widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "Command widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+bitmap Bitmap Pixmap None
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+callback Callback XtCallbackList NULL
+colormap Colormap Colormap Parent's Colormap
+cornerRoundPercent CornerRoundPercent Dimension 25
+cursor Cursor Cursor None
+cursorName Cursor String NULL
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+encoding Encoding UnsignedChar XawTextEncoding8bit
+font Font XFontStruct XtDefaultFont
+foreground Foreground Pixel XtDefaultForeground
+height Height Dimension A graphic height + 2 * \fBinternalHeight\fP
+highlightThickness Thickness Dimension A 2 (0 if Shaped)
+insensitiveBorder Insensitive Pixmap GreyPixmap
+internalHeight Height Dimension 2
+internalWidth Width Dimension 4
+international International Boolean C False
+justify Justify Justify XtJustifyCenter (center)
+label Label String name of widget
+leftBitmap LeftBitmap Bitmap None
+mappedWhenManaged MappedWhenManaged Boolean True
+pointerColor Foreground Pixel XtDefaultForeground
+pointerColorBackground Background Pixel XtDefaultBackground
+resize Resize Boolean True
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+shapeStyle ShapeStyle ShapeStyle Rectangle
+translations Translations TranslationTable See below
+width Width Dimension A graphic width + 2 * \fBinternalWidth\fP
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+\" Resource Descriptions
+.Ac
+.As
+.Bg
+.Gp
+.Bm
+.Bc
+.Bp
+.Bw
+.Cb Bold
+.Cm
+.Cr Bold
+.Cu
+.Cn
+.Dp
+.Dc
+.Le
+.Lf
+.Ls
+.Lg
+.Hw
+.Ht Bold
+.Ib
+.Ih
+.In
+.Ju
+.La
+.Ll
+.Mm
+.Pf
+.Pb
+.Re
+.Sc
+.Se
+.Ss Bold
+.Tr
+.Xy
+.NH 3
+Command Actions
+.IN "Command widget" "actions"
+.LP
+The Command widget supports the following actions:
+.IP \(bu 5
+Switching the button's interior between the foreground and background
+colors with \fBset\fP, \fBunset\fP, and \fBreset\fP.
+.IP \(bu 5
+Processing application callbacks with \fBnotify\fP
+.IP \(bu 5
+Switching the internal border between highlighted
+and unhighlighted states with \fBhighlight\fP and \fBunhighlight\fP
+.LP
+.IN "Command widget" "translation bindings"
+The following are the default translation bindings used by the
+Command widget:
+.LP
+.Ds 0
+.TA .5i 2.25i
+.ta .5i 2.25i
+ <EnterWindow>: highlight(\|)
+ <LeaveWindow>: reset(\|)
+ <Btn1Down>: set(\|)
+ <Btn1Up>: notify(\|) unset(\|)
+.De
+.LP
+The full list of actions supported by Command is:
+.IP \fBhighlight\fP(\fIcondition\fP) 1.5i
+Displays the internal highlight border in the color (\fBforeground\fP
+or \fBbackground\fP ) that contrasts with the interior color of the
+Command widget. The conditions \fBWhenUnset\fP and \fBAlways\fP are
+understood by this action procedure. If no argument is passed,
+\fBWhenUnset\fP is assumed.
+.IP \fBunhighlight\fP(\|) 1.5i
+Displays the internal highlight border in the color (\fBforeground\fP
+or \fBbackground\fP ) that matches the interior color of the
+Command widget.
+.IP \fBset\fP(\|) 1.5i
+Enters the \fIset\fP state, in which \fBnotify\fP is possible. This
+action causes the button to display its interior in the
+\fBforeground\fP color. The label or bitmap is displayed in the
+\fBbackground\fP color.
+.IP \fBunset\fP(\|) 1.5i
+Cancels the \fIset\fP state and displays the interior of the button in the
+\fBbackground\fP color. The label or bitmap is displayed in the
+\fBforeground\fP color.
+.IP \fBreset\fP(\|) 1.5i
+Cancels any \fIset\fP or \fIhighlight\fP and displays the interior of the
+button in the \fBbackground\fP color, with the label or bitmap displayed
+in the \fBforeground\fP color.
+.IP \fBnotify\fP(\|) 1.5i
+When the button is in the \fBset\fP state this action calls all functions in
+the callback list named by the \fBcallback\fP resource. The value of
+the \fIcall_data\fP argument passed to these functions is undefined.
+.LP
+A very common alternative to registering callbacks is to augment a
+Command's translations with an action performing the desired
+function. This often takes the form of:
+.LP
+.Ds 0
+.TA .5i 2.25i
+.ta .5i 2.25i
+*Myapp*save.translations: #augment <Btn1Down>,<Btn1Up>: Save()
+.De
+.LP
+.NT
+When a bitmap of depth greater that one (1) is specified the
+\fIset\fP(), \fIunset\fP(), and \fIreset\fP() actions have no effect,
+since there are no foreground and background colors used in a
+multi-plane pixmap.
+.NE
diff --git a/libXaw/spec/Dialog b/libXaw/spec/Dialog
new file mode 100644
index 000000000..d14bca0b4
--- /dev/null
+++ b/libXaw/spec/Dialog
@@ -0,0 +1,280 @@
+.\" $Xorg: Dialog,v 1.3 2000/08/17 19:42:26 cpqbld Exp $
+.NH 2
+Dialog Widget
+.LP
+.XS
+ Dialog Widget
+.XE
+.IN "Dialog widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application Header file <X11/Xaw/Dialog.h>
+.IN "Dialog.h" ""
+Class Header file <X11/Xaw/DialogP.h>
+.IN "DialogP.h" ""
+Class dialogWidgetClass
+.IN "dialogWidgetClass" ""
+Class Name Dialog
+.IN "Dialog widget" "class name"
+Superclass Form
+.sp
+.De
+.LP
+The Dialog widget implements a commonly used interaction semantic to
+prompt for auxiliary input from a user. For example, you can use a
+Dialog widget when an application requires a small piece of information,
+such as a filename, from the user. A Dialog widget, which is simply a
+special case of the Form widget, provides a convenient way to create a
+preconfigured form.
+.LP
+The typical Dialog widget contains three areas. The first line
+contains a description of the function of the Dialog widget, for
+example, the string \fIFilename:\fP. The second line contains an area
+into which the user types input. The third line can contain buttons
+that let the user confirm or cancel the Dialog input. Any of these
+areas may be omitted by the application.
+.NH 3
+Resources
+.LP
+When creating a Dialog widget instance, the following resources are
+retrieved from the argument list or the resource database:
+.IN "Dialog widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+children ReadOnly WidgetList R NULL
+colormap Colormap Colormap Parent's Colormap
+defaultDistance Thickness int 4
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+height Height Dimension A Enough space to contain all children
+icon Icon Bitmap None
+label Label String "label"
+mappedWhenManaged MappedWhenManaged Boolean True
+numChildren ReadOnly Cardinal R 0
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+translations Translations TranslationTable NULL
+value Value String no value widget
+width Width Dimension A Enough space to contain all children
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.Ch
+.Cm
+.Dd
+.Dp
+.Dc
+.Hw
+.IP \fBicon\fP 1.5i
+A pixmap image to be displayed immediately to the left of the
+Dialog widget's label.
+.IP \fBlabel\fP 1.5i
+A string to be displayed at the top of the Dialog widget.
+.Mm
+.Nc
+.Sc
+.Se
+.Tr
+.IP \fBvalue\fP 1.5i
+An initial value for the string field that the user will enter text
+into. By default, no text entry field is available to the user.
+Specifying an initial value for \fBvalue\fP activates the text entry
+field. If string input is desired, but no initial value is to be
+specified then set this resource to "" (empty string).
+.Xy
+.NH 3
+Constraint Resources
+.LP
+.IN "Dialog widget" "constraint resources"
+Each child of the Dialog widget may request special layout resources
+be applied to it. These \fIconstraint\fP resources allow the Dialog
+widget's children to specify individual layout requirements.
+.LP
+.TS H
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+bottom Edge XawEdgeType XawRubber
+fromHoriz Widget Widget NULL (left edge of Dialog)
+fromVert Widget Widget NULL (top edge of Dialog)
+horizDistance Thickness int \fBdefaultDistance\fP resource
+left Edge XawEdgeType XawRubber
+.IN "XawEdgeType" ""
+resizable Boolean Boolean FALSE
+right Edge XawEdgeType XawRubber
+.IN "XawRubber" ""
+top Edge XawEdgeType XawRubber
+vertDistance Thickness int \fBdefaultDistance\fP resource
+.sp 3p
+_
+.TE
+.Bt
+.Fh
+.Hd
+.Rl
+.NH 3
+Layout Semantics
+.IN "Dialog widget" "layout semantics"
+.LP
+.Lt Dialog
+.LP
+.TS H
+lw(1.5i) lw(1i) lw(3i).
+_
+.sp 3p
+.TB
+Edge Type Resource Name Description
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+XawChainBottom ChainBottom Edge remains a fixed distance from bottom of Dialog
+.IN "XawChainBottom" ""
+XawChainLeft ChainLeft Edge remains a fixed distance from left of Dialog
+.IN "XawChainLeft" ""
+XawChainRight ChainRight Edge remains a fixed distance from right of Dialog
+.IN "XawChainRight" ""
+XawChainTop ChainTop Edge remains a fixed distance from top of Dialog
+.IN "XawChainTop" ""
+XawRubber Rubber Edges will move a proportional distance
+.IN "XawRubber" ""
+.sp 3p
+_
+.TE
+.NH 4
+Example
+.LP
+If you wish to force the Dialog to never resize one or more of its children
+then set \fBleft\fP and \fBright\fP to \fBXawChainLeft\fP and
+\fBtop\fP and \fBbottom\fP to \fBXawChainTop\fP. This will cause
+the child to remain a fixed distance from the top and left
+edges of the Dialog, and to never resize.
+.NH 4
+Special Considerations
+.IN "Dialog widget" "special considerations"
+.LP
+The Dialog widget automatically sets the \fBtop\fP and \fBbottom\fP
+resources for all Children that are subclasses of the Command widget,
+as well as the widget children that are used to contain the \fBlabel\fP,
+\fBvalue\fP, and \fBicon\fP. This policy allows the buttons at the
+bottom of the Dialog to interact correctly with the predefined children,
+and makes it possible for a client to simply create and manage a new
+Command button without having to specify its constraints.
+.LP
+The Dialog will also set \fBfromLeft\fP to the last button in the
+.IN "fromLeft" ""
+Dialog for each new button added to the Dialog widget.
+.LP
+The automatically added constraints cannot be overridden, as they are
+policy decisions of the Dialog widget. If a more flexible Dialog is
+desired, the application is free to use the Form widget to create its
+own Dialog policy.
+.NH 3
+Automatically Created Children.
+.IN "Dialog widget" "automatically created children"
+.LP
+The Dialog uses Label widgets to contain the \fBlabel\fP and \fBicon\fP.
+These widgets are named \fIlabel\fP and \fIicon\fP respectively. The
+Dialog \fBvalue\fP is contained in an AsciiText widget whose name is
+\fIvalue\fP. Using \fBXtNameToWidget\fP the application can change
+.IN "XtNameToWidget" ""
+those resources associated with each of these widgets that are not
+available through the Dialog widget itself.
+.LP
+.NH 3
+Convenience Routines
+.LP
+To return the character string in the text field, use
+.PN XawDialogGetValueString .
+.IN "XawDialogGetValueString" "" "@DEF@"
+.FD 0
+String XawDialogGetValueString(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Dialog widget.
+.LP
+This function returns a copy of the value string of the Dialog
+widget. This string is allocated by the AsciiText widget and will
+remain valid and unchanged until another call to
+\fBXawDialogGetValueString\fP or an \fBXtGetValues\fP call on the
+\fBvalue\fP widget, when the string will be automatically freed, and
+a new string is returned. This string may be freed earlier by calling
+the function \fBXawAsciiSourceFreeString\fP.
+.IN "XawAsciiSourceFreeString" ""
+.LP
+.sp
+To add a new button to the Dialog widget use
+\fBXawDialogAddButton\fP.
+.IN "XawDialogAddButton" "" "@DEF@"
+.FD 0
+void XawDialogAddButton(\fIw\fP, \fIname\fP, \fIfunc\fP, \fIclient_data\fP)
+.br
+ Widget \fIw\fP;
+.br
+ String \fIname\fP;
+.br
+ XtCallbackProc \fIfunc\fP;
+.br
+ XtPointer \fIclient_data\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Dialog widget.
+.IP \fIname\fP 1i
+Specifies the name of the new Command button to be added to the Dialog.
+.IP \fIfunc\fP 1i
+Specifies a callback function to be called when this button is activated. If
+NULL is specified then no callback is added.
+.IP \fIclient_data\fP 1i
+Specifies the client_data to be passed to the \fIfunc\fP.
+.LP
+This function is merely a shorthand for the code sequence:
+.sp
+.Ds 0
+.SM
+.TA 1i 2i
+.ta 1i 2i
+{
+ Widget button = XtCreateManagedWidget(name, commandWidgetClass, w, NULL, ZERO);
+ XtAddCallback(button, XtNcallback, func, client_data);
+}
+.NL
+.De
+.sp
diff --git a/libXaw/spec/Form b/libXaw/spec/Form
new file mode 100644
index 000000000..9ada171dd
--- /dev/null
+++ b/libXaw/spec/Form
@@ -0,0 +1,200 @@
+.\" $Xorg: Form,v 1.3 2000/08/17 19:42:26 cpqbld Exp $
+.NH 2
+Form Widget
+.LP
+.XS
+ Form Widget
+.XE
+.IN "Form widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application Header file <X11/Xaw/Form.h>
+.IN "Form.h" ""
+Class Header file <X11/Xaw/FormP.h>
+.IN "FormP.h" ""
+Class formWidgetClass
+.IN "formWidgetClass" ""
+Class Name Form
+.IN "Form widget" "class name"
+Superclass Constraint
+.sp
+.De
+.LP
+The Form widget can contain an arbitrary number of children or
+subwidgets. The Form provides geometry management for its children,
+which allows individual control of the position of each child. Any
+combination of children can be added to a Form. The initial positions
+of the children may be computed relative to the positions of previously
+created children. When the Form is resized, it computes new positions and
+sizes for its children. This computation is based upon information
+provided when a child is added to the Form.
+.LP
+The default width of the Form is the minimum width needed to
+enclose the children after computing their initial layout, with a
+margin of \fBdefaultDistance\fP
+at the right and bottom edges. If a width and height is assigned
+to the Form that is too small for the layout, the children will
+be clipped by the right and bottom edges of the Form.
+.NH 3
+Resources
+.LP
+When creating a Form widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "Form widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+children ReadOnly WidgetList R NULL
+colormap Colormap Colormap Parent's Colormap
+defaultDistance Thickness int 4
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+height Height Dimension A Enough space to contain all children
+mappedWhenManaged MappedWhenManaged Boolean True
+numChildren ReadOnly Cardinal R 0
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+translations Translations TranslationTable NULL
+width Width Dimension A Enough space to contain all children
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.Ch
+.Cm
+.Dd Bold
+.Dp
+.Dc
+.Hw
+.Mm
+.Nc
+.Sc
+.Se
+.Tr
+.Xy
+.NH 3
+Constraint Resources
+.LP
+.IN "Form widget" "constraint resources"
+Each child of the Form widget may request special layout resources
+be applied to it. These \fIconstraint\fP resources allow the Form
+widget's children to specify individual layout requirements.
+.LP
+.LP
+.TS H
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+bottom Edge XawEdgeType XawRubber
+fromHoriz Widget Widget NULL (left edge of Form)
+fromVert Widget Widget NULL (top edge of Form)
+horizDistance Thickness int \fBdefaultDistance\fP resource
+left Edge XawEdgeType XawRubber
+.IN "XawEdgeType" ""
+resizable Boolean Boolean FALSE
+right Edge XawEdgeType XawRubber
+.IN "XawRubber" ""
+top Edge XawEdgeType XawRubber
+vertDistance Thickness int \fBdefaultDistance\fP resource
+.sp 3p
+_
+.TE
+.Bt Bold
+.Fh Bold
+.Hd Bold
+.Rl Bold
+.NH 3
+Layout Semantics
+.LP
+.Lt Form
+.LP
+.TS H
+lw(1.5i) lw(1i) lw(3i).
+_
+.sp 3p
+.TB
+Edge Type Resource Name Description
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+XawChainBottom ChainBottom Edge remains a fixed distance from bottom of Form
+.IN "XawChainBottom" ""
+XawChainLeft ChainLeft Edge remains a fixed distance from left of Form
+.IN "XawChainLeft" ""
+XawChainRight ChainRight Edge remains a fixed distance from right of Form
+.IN "XawChainRight" ""
+XawChainTop ChainTop Edge remains a fixed distance from top of Form
+.IN "XawChainTop" ""
+XawRubber Rubber Edges will move a proportional distance
+.IN "XawRubber" ""
+.sp 3p
+_
+.TE
+.NH 4
+Example
+.LP
+If you wish to force the Form to never resize one or more of its
+children, then set \fBleft\fP and \fBright\fP to \fBXawChainLeft\fP and
+\fBtop\fP and \fBbottom\fP to \fBXawChainTop\fP. This will cause the
+child to remain a fixed distance from the top and left edges of the
+Form, and never to resize.
+.NH 3
+Convenience Routines
+.LP
+To force or defer a re-layout of the Form, use
+.PN XawFormDoLayout .
+.IN "Form widget" "re-layout"
+.IN "XawFormDoLayout" "" "@DEF@"
+.FD 0
+void XawFormDoLayout(\fIw\fP, \fIdo_layout\fP)
+.br
+ Widget \fIw\fP;
+.br
+ Boolean \fIdo_layout\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Form widget.
+.IP \fIdo_layout\fP 1i
+Specifies whether the layout of the Form widget is enabled (\fBTrue\fP)
+or disabled (\fBFalse\fP).
+.LP
+When making several changes to the children of a Form widget
+after the Form has been realized, it is a good idea to disable
+relayout until after all changes have been made.
+
diff --git a/libXaw/spec/Grip b/libXaw/spec/Grip
new file mode 100644
index 000000000..cdbcb0ee6
--- /dev/null
+++ b/libXaw/spec/Grip
@@ -0,0 +1,157 @@
+.\" $Xorg: Grip,v 1.3 2000/08/17 19:42:26 cpqbld Exp $
+.NH 2
+Grip Widget
+.XS
+ Grip Widget
+.XE
+.IN "Grip widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application header file <X11/Xaw/Grip.h>
+.IN "Grip.h" ""
+Class header file <X11/Xaw/GripP.h>
+.IN "GripP.h" ""
+Class gripWidgetClass
+.IN "gripWidgetClass" ""
+Class Name Grip
+.IN "Grip widget" "class name"
+Superclass Simple
+.sp
+.De
+.LP
+The Grip widget provides a small rectangular region in which user input
+events (such as ButtonPress or ButtonRelease) may be handled. The most
+common use for the Grip widget is as an attachment point for visually
+repositioning an object, such as the pane border in a Paned widget.
+.NH 3
+Resources
+.LP
+When creating a Grip widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "Grip widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 0
+callback Callback Callback NULL
+colormap Colormap Colormap Parent's Colormap
+cursor Cursor Cursor None
+cursorName Cursor String NULL
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+foreground Foreground Pixel XtDefaultForeground
+height Height Dimension 8
+insensitiveBorder Insensitive Pixmap GreyPixmap
+international International Boolean C False
+mappedWhenManaged MappedWhenManaged Boolean True
+pointerColor Foreground Pixel XtDefaultForeground
+pointerColorBackground Background Pixel XtDefaultBackground
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+translations Translations TranslationTable NULL
+width Width Dimension 8
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.IP \fBcallback\fP 1.5i
+All routines on this list are called whenever the \fBGripAction\fP
+action routine is invoked. The \fIcall_data\fP contains all
+information passed to the action routine. A detailed description
+is given below in the \fBGrip Actions\fP section.
+.Cm
+.Cu
+.Cn
+.Dp
+.Dc
+.IP \fBforeground\fP 1.5i
+A pixel value which indexes the widget's colormap to derive the color
+used to flood fill the entire Grip widget.
+.Hw
+.Ib
+.Ix
+.Mm
+.Pf
+.Pb
+.Sc
+.Se
+.Tr
+.Xy
+.NH 3
+Grip Actions
+.IN "Grip widget" "actions"
+.LP
+The Grip widget does not declare any default event translation bindings,
+but it does declare a single action routine named \fBGripAction\fP. The
+.IN "Grip widget" "GripAction routine"
+client specifies an arbitrary event translation table, optionally giving
+parameters to the \fBGripAction\fP routine.
+.LP
+The \fBGripAction\fP routine executes the callbacks on the
+\fBcallback\fP list, passing as \fIcall_data\fP a pointer to a
+\fBXawGripCallData\fP structure, defined in the Grip widget's application
+header file.
+.LP
+.Ds 0
+.TA .5i 2.25i
+.ta .5i 2.25i
+.IN "XawGripCallData" "" "@DEF@"
+.IN "XawGripCallDataRec" "" "@DEF@"
+.sp
+typedef struct _XawGripCallData {
+ XEvent *event;
+ String *params;
+ Cardinal num_params;
+} XawGripCallDataRec, *XawGripCallData,
+ GripCallDataRec, *GripCallData; /* supported for R4 compatibility */
+.IN "XawGripCallDataRec" ""
+.IN "XawGripCallData" ""
+.IN "GripCallData" ""
+.sp
+.De
+.LP
+In this structure, the \fIevent\fP is a pointer to the input event that
+triggered the action. \fIparams\fP and \fInum_params\fP give the string
+parameters specified in the translation table for the particular event
+binding.
+.IN "Grip widget" "GripAction table"
+.LP
+The following is an example of a translation table that uses the GripAction:
+.LP
+.Ds 0
+.TA .5i 2.5i
+.ta .5i 2.5i
+.sp
+ <Btn1Down>: GripAction(press)
+ <Btn1Motion>: GripAction(move)
+ <Btn1Up>: GripAction(release)
+.sp
+.De
+For a complete description of the format of translation tables, see the
+\fI\*(xT\fP.
diff --git a/libXaw/spec/Label b/libXaw/spec/Label
new file mode 100644
index 000000000..bbf4ce44a
--- /dev/null
+++ b/libXaw/spec/Label
@@ -0,0 +1,122 @@
+.\" $Xorg: Label,v 1.3 2000/08/17 19:42:27 cpqbld Exp $
+.NH 2
+Label Widget
+.XS
+ Label Widget
+.XE
+.IN "Label widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application header file <X11/Xaw/Label.h>
+.IN "Label.h" ""
+Class header file <X11/Xaw/LabelP.h>
+.IN "LabelP.h" ""
+Class labelWidgetClass
+.IN "labelWidgetClass" ""
+Class Name Label
+.IN "Label widget" "class name"
+Superclass Simple
+.sp
+.De
+.LP
+A Label widget holds a graphic displayed within a
+rectangular region of the screen. The graphic may be a
+text string containing multiple lines of characters in an
+8 bit or 16 bit character set (to be displayed with a
+\fIfont\fP), or in a multi-byte encoding (for use with a
+\fIfontset\fP). The graphic may also be a bitmap or
+pixmap. The Label widget will allow its graphic to be
+left, right, or center justified. Normally, this widget
+can be neither selected nor directly edited by the user.
+It is intended for use as an output device only.
+.NH 3
+Resources
+.LP
+When creating a Label widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "Label widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+bitmap Bitmap Pixmap None
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+colormap Colormap Colormap Parent's Colormap
+cursor Cursor Cursor None
+cursorName Cursor String NULL
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+encoding Encoding UnsignedChar XawTextEncoding8bit
+font Font XFontStruct XtDefaultFont
+fontSet FontSet XFontSet XtDefaultFontSet
+foreground Foreground Pixel XtDefaultForeground
+height Height Dimension A graphic height + 2 * \fBinternalHeight\fP
+insensitiveBorder Insensitive Pixmap GreyPixmap
+internalHeight Height Dimension 2
+internalWidth Width Dimension 4
+international International Boolean C False
+justify Justify Justify XtJustifyCenter (center)
+label Label String name of widget
+leftBitmap LeftBitmap Bitmap None
+mappedWhenManaged MappedWhenManaged Boolean True
+pointerColor Foreground Pixel XtDefaultForeground
+pointerColorBackground Background Pixel XtDefaultBackground
+resize Resize Boolean True
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+translations Translations TranslationTable See above
+width Width Dimension A graphic width + 2 * \fBinternalWidth\fP
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Bg
+.Gp
+.Bm Bold
+.Bc
+.Bp
+.Bw
+.Cm
+.Cu
+.Cn
+.Dp
+.Dc
+.Le Bold
+.Lf Bold
+.Ls Bold
+.Lg Bold
+.Hw
+.Ib
+.Ih Bold
+.In
+.Ju Bold
+.La Bold
+.Ll Bold
+.Mm
+.Pf
+.Pb
+.Re Bold
+.Sc
+.Se
+.Tr
+.Xy
diff --git a/libXaw/spec/List b/libXaw/spec/List
new file mode 100644
index 000000000..1b64aaaf5
--- /dev/null
+++ b/libXaw/spec/List
@@ -0,0 +1,341 @@
+.\" $Xorg: List,v 1.3 2000/08/17 19:42:27 cpqbld Exp $
+.NH 2
+List Widget
+.LP
+.XS
+ List Widget
+.XE
+.IN "List widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application header file <X11/Xaw/List.h>
+.IN "List.h" ""
+Class header file <X11/Xaw/ListP.h>
+.IN "ListP.h" ""
+Class listWidgetClass
+.IN "listWidgetClass" ""
+Class Name List
+.IN "List widget" "class name"
+Superclass Simple
+.sp
+.De
+.LP
+
+The List widget contains a list of strings formatted into rows and
+columns. When one of the strings is selected, it is highlighted, and the
+List widget's \fBNotify\fP action is invoked, calling all routines on
+its callback list. Only one string may be selected at a time.
+.NH 3
+Resources
+.LP
+When creating a List widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "List widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+callback Callback Callback NULL
+colormap Colormap Colormap Parent's Colormap
+columnSpacing Spacing Dimension 6
+cursor Cursor Cursor XC_left_ptr
+cursorName Cursor String NULL
+defaultColumns Columns int 2
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+font Font FontStruct XtDefaultFont
+fontSet FontSet XFontSet XtDefaultFontSet
+forceColumns Columns Boolean False
+foreground Foreground Pixel XtDefaultForeground
+height Height Dimension A Enough space to contain the list
+insensitiveBorder Insensitive Pixmap GreyPixmap
+internalHeight Height Dimension 2
+internalWidth Width Dimension 4
+international International Boolean C False
+list List Pointer name of widget
+longest Longest int A 0
+mappedWhenManaged MappedWhenManaged Boolean True
+numberStrings NumberStrings int A computed for NULL terminated list
+pasteBuffer Boolean Boolean False
+pointerColor Foreground Pixel XtDefaultForeground
+pointerColorBackground Background Pixel XtDefaultBackground
+rowSpacing Spacing Dimension 2
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+translations Translations TranslationTable See below
+verticalList Boolean Boolean False
+width Width Dimension A Enough space to contain the list
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.IP \fBcallback\fP 1.5i
+All functions on this list are called whenever the \fBnotify\fP action is
+invoked. The \fIcall_data\fP argument contains information about the element
+selected and is described in detail in the \fBList Callbacks\fP section.
+.Cm
+.IP \fBcolumnSpacing\fP 1.5i
+.br
+.ns
+.IP \fBrowSpacing\fP 1.5i
+The amount of space, in pixels, between each of the rows and columns
+in the list.
+.Cu
+.Cn
+.IP \fBdefaultColumns\fP 1.5i
+The default number of columns. This value is used when neither the
+width nor the height of the List widget is specified or when
+\fBforceColumns\fP is \fBTrue\fP.
+.Dp
+.Dc
+.IP \fBfont\fP
+The text font to use when displaying the \fBlist\fP, when the
+\fBinternational\fP resource is \fBfalse\fP.
+.IP \fBfontSet\fP
+The text font set to use when displaying the \fBlist\fP, when the
+\fBinternational\fP resource is \fBtrue\fP.
+.IP \fBforceColumns\fP
+Forces the default number of columns to be used regardless of the
+List widget's current size.
+.IP \fBforeground\fP 1.5i
+A pixel value which indexes the widget's colormap to derive the color
+used to paint the text of the list elements.
+.Hw
+.Ib
+.IP \fPinternalHeight\fP 1.5i
+.br
+.ns
+.IP \fPinternalWidth\fP 1.5i
+The margin, in pixels, between the edges of the list and the
+corresponding edge of the List widget's window.
+.IP \fBlist\fP 1.5i
+An array of text strings displayed in the List widget. If
+\fBnumberStrings\fP is zero (the default) then the \fBlist\fP must be
+NULL terminated. If a value is not specified for the \fBlist\fP, then
+\fBnumberStrings\fP is set to 1, and the name of the widget is used as
+the \fBlist\fP, and \fBlongest\fP is set to the length of the name of the
+widget. The \fBlist\fP is used in place, and must be available
+to the List widget for the lifetime of this widget, or until it is
+changed with \fBXtSetValues\fP or \fBXawListChange\fP.
+.In
+.IP \fBlongest\fP
+Specifies the width, in pixels, of the longest string in the current
+list. The List widget will compute this value if zero (the default)
+is specified. If this resource is set by hand, entries longer than this
+will be clipped to fit.
+.Mm
+.IP \fBnumberStrings\fP 1.5i
+The number of strings in the current list. If a value of zero (the
+default) is specified, the List widget will compute it. When computing
+the number of strings the List widget assumes that the \fBlist\fP is NULL
+terminated.
+.IP \fBpasteBuffer\fP 1.5i
+If this resource is set to \fBTrue\fP then the name of the currently
+selected list element will be put into \fBCUT_BUFFER_0\fP.
+.Pf
+.Pb
+.Sc
+.Se
+.Tr
+.IP \fBverticalList\fP 1.5i
+If this resource is set to \fBTrue\fP then the list elements will be
+presented in column major order.
+.Xy
+.NH 3
+List Actions
+.IN "List widget" "actions"
+.LP
+The List widget supports the following actions:
+.IP \(bu 5
+Highlighting and unhighlighting the list element under the
+pointer with \fBSet\fP and \fBUnset\fP
+.IP \(bu 5
+Processing application callbacks with \fBNotify\fP
+.LP
+The following is the default translation table used by the List Widget:
+.IN "List widget" "default translation table"
+.LP
+.Ds
+.TA .5i 2.25i
+.ta .5i 2.25i
+<Btn1Down>,<Btn1Up>: Set(\|) Notify(\|)
+.sp
+.De
+.LP
+The full list of actions supported by List widget is:
+.IP \fBSet\fP(\|) 1.5i
+\fISets\fP the list element that is currently under the pointer. To
+inform the user that this element is currently set, it is drawn with
+foreground and background colors reversed. If this action is called when
+there is no list element under the cursor, the currently \fIset\fP
+element will be \fIunset\fP.
+.IP \fBUnset\fP(\|) 1.5i
+Cancels the \fIset\fP state of the element under the pointer,
+and redraws it with normal foreground and background colors.
+.IP \fBNotify\fP(\|) 1.5i
+Calls all callbacks on the List widget's callback list. Information
+about the currently selected list element is passed in the
+\fIcall_data\fP argument (see \fBList Callbacks\fP below).
+.NH 3
+List Callbacks
+.IN "List widget" "callbacks"
+.LP
+All procedures on the List widget's callback list will have a
+\fBXawListReturnStruct\fP passed to them as \fIcall_data\fP. The
+structure is defined in the List widget's application header file.
+.LP
+.Ds 0
+.TA .5i 2.25i
+.ta .5i 2.25i
+.IN "XawListReturnStruct" "" "@DEF@"
+typedef struct _XawListReturnStruct {
+ String string; /* string shown in the list. */
+ int list_index; /* index of the item selected. */
+} XawListReturnStruct;
+.IN "XawListReturnStruct" ""
+.NT
+The \fIlist_index\fP item used to be called simply \fIindex\fP.
+Unfortunately, this name collided with a global name defined on some
+operating systems, and had to be changed.
+.NE
+.De
+.NH 3
+Changing the List
+.LP
+To change the list that is displayed, use
+.PN XawListChange .
+.IN "XawListChange" "" "@DEF@"
+.FD 0
+void XawListChange(\fIw\fP, \fIlist\fP, \fInitems\fP, \fIlongest\fP, \fIresize\fP)
+.br
+ Widget \fIw\fP;
+.br
+ String * \fIlist\fP;
+.br
+ int \fInitems\fP, \fIlongest\fP;
+.br
+ Boolean \fIresize\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the List widget.
+.IP \fIlist\fP 1i
+Specifies the new list for the List widget to display.
+.IP \fInitems\fP 1i
+Specifies the number of items in the \fIlist\fP. If a value less than 1
+is specified, \fIlist\fP must be NULL terminated, and the number of
+items will be calculated by the List widget.
+.IP \fIlongest\fP 1i
+Specifies the length of the longest item in the \fIlist\fP in pixels.
+If a value less than 1 is specified, the List widget will calculate the
+value.
+.IP \fIresize\fP 1i
+Specifies a Boolean value that if \fBTrue\fP indicates that the
+List widget should try to resize itself after making the change.
+The constraints of the List widget's parent are always enforced,
+regardless of the value specified here.
+.LP
+.PN XawListChange
+will \fIunset\fP all list elements that are currently \fBset\fP before
+the list is actually changed. The \fIlist\fP is used in place, and must
+remain usable for the lifetime of the List widget, or until \fIlist\fP
+has been changed again with this function or with \fBXtSetValues\fP.
+.NH 3
+Highlighting an Item
+.LP
+To highlight an item in the list, use
+.PN XawListHighlight .
+.IN "XawListHighlight" "" "@DEF@"
+.FD 0
+void XawListHighlight(\fIw\fP, \fIitem\fP)
+.br
+ Widget \fIw\fP;
+.br
+ int \fIitem\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the List widget.
+.IP \fIitem\fP 1i
+Specifies an index into the current list that indicates the item to be
+highlighted.
+.LP
+Only one item can be highlighted at a time.
+If an item is already highlighted when
+.PN XawListHighlight
+is called,
+the highlighted item is unhighlighted before the new item is highlighted.
+.NH 3
+Unhighlighting an Item
+.LP
+To unhighlight the currently highlighted item in the list, use
+.PN XawListUnhighlight .
+.IN "XawListUnhighlight" "" "@DEF@"
+.FD 0
+void XawListUnhighlight(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the List widget.
+.NH 3
+Retrieving the Currently Selected Item
+.LP
+To retrieve the list element that is currently \fIset\fP, use
+.PN XawListShowCurrent .
+.IN "XawListShowCurrent" "" "@DEF@"
+.FD 0
+XawListReturnStruct *XawListShowCurrent(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the List widget.
+.LP
+.PN XawListShowCurrent
+returns a pointer to an
+.PN XawListReturnStruct
+structure,
+containing the currently highlighted item.
+If the value of the index member is XAW_LIST_NONE,
+.IN "XAW_LIST_NONE"
+the string member is undefined, and no item is currently selected.
+.NH 3
+Restrictions
+.LP
+Many programmers create a ``scrolled list'' by putting a List
+widget with many entries as a child of a Viewport widget. The
+List continues to create a window as big as its contents, but
+that big window is only visible where it intersects the parent
+Viewport's window. (I.e., it is ``clipped.'')
+.LP
+While this is a useful technique, there is a serious drawback.
+X does not support windows above 32,767 pixels in width or
+height, but this height limit will be exceeded by a List's
+window when the List has many entries (i.e., with a 12 point
+font, about 3000 entries would be too many.)
+.LP
diff --git a/libXaw/spec/Makefile.am b/libXaw/spec/Makefile.am
new file mode 100644
index 000000000..9e16f9797
--- /dev/null
+++ b/libXaw/spec/Makefile.am
@@ -0,0 +1,96 @@
+#
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation.
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the copyright holders shall
+# not be used in advertising or otherwise to promote the sale, use or
+# other dealings in this Software without prior written authorization
+# from the copyright holders.
+#
+
+# Based on xc/doc/specs/Xaw/Makefile from X11R6.9
+
+XDOCMACROS = macros.t
+XIDXMACROS = indexmacros.t
+EVERYWHERE = $(XDOCMACROS) strings.mit strings.xaw
+CHAPTER1 = CH1
+CHAPTER2 = CH2
+CHAPTER3 = CH3.intro Command Grip Label List Panner Repeater \
+ Scrollbar Simple StripChart Toggle
+CHAPTER4 = CH4.intro SimpleMenu SmeBSB SmeLine Sme MenuButton
+CHAPTER5 = CH5.intro TextActions TextFuncs AsciiText AsciiSource AsciiSink \
+ TextCustom Text TextSource TextSink
+CHAPTER6 = CH6.intro Box Dialog Form Paned Porthole Tree Viewport
+CHAPTER7 = CH7.intro Template
+
+spec_sources = \
+ $(EVERYWHERE) TPage_Credits \
+ $(CHAPTER1) $(CHAPTER2) $(CHAPTER3) $(CHAPTER4) \
+ $(CHAPTER5) $(CHAPTER6) $(CHAPTER7)
+
+spec_input = $(spec_sources:%=$(srcdir)/%)
+
+EXTRA_DIST = $(spec_sources) $(XIDXMACROS) block.awk fixindex.awk widg.idxmac.t
+
+if BUILD_DOCS
+doc_DATA = widgets.ps widgets.index.ps widgets.txt widgets.html
+
+CLEANFILES = $(doc_DATA)
+MOSTLYCLEANFILES = index.*
+
+GROFF_DEFS = -dxV="$(PACKAGE_STRING)"
+GROFF_FLAGS = -t -ms $(GROFF_DEFS)
+
+widgets.ps: $(spec_input)
+ -$(AM_V_GEN) $(GROFF) -Tps $(GROFF_FLAGS) $(spec_input) \
+ 2> index.raw > $@
+ @if grep '^[^1-9.]' index.raw | grep -v warning; then exit 1; \
+ else test $$? -le 1; fi
+
+widgets.txt: $(spec_input)
+ $(AM_V_GEN) $(GROFF) -Tascii $(GROFF_FLAGS) $(spec_input) \
+ 2> index.txt.raw > $@
+
+widgets.html: $(spec_input)
+ $(AM_V_GEN) $(GROFF) -Thtml $(GROFF_FLAGS) $(spec_input) \
+ 2> index.html.raw > $@
+
+index.raw: widgets.ps
+
+index.pageno: index.raw
+ $(AM_V_GEN)$(SED) -n '$$p' index.raw > $@
+
+index.troff: index.raw
+ $(AM_V_GEN)$(GREP) '^[1-9]' index.raw | \
+ (sort -f '-t:' -k2,2 -k1,1n 2>/dev/null || \
+ sort -f '-t:' +1 -3 +0n -1n) | \
+ $(AWK) -f $(srcdir)/fixindex.awk | \
+ $(AWK) -f $(srcdir)/block.awk > $@
+
+widgets.index.ps: widg.idxmac.t index.troff index.pageno
+ $(AM_V_GEN)$(GROFF) -me $(GROFF_DEFS) \
+ $(srcdir)/widg.idxmac.t $(srcdir)/$(XIDXMACROS) index.troff > $@
+
+
+# Useful for running off part of the manual by hand,
+# e.g., make part PART=Label
+part: $(srcdir)/$(PART)
+ $(GROFF) -Tps $(GROFF_FLAGS) $(EVERYWHERE) $(srcdir)/$(PART) > $(PART).ps
+
+endif BUILD_DOCS
diff --git a/libXaw/spec/Makefile.in b/libXaw/spec/Makefile.in
new file mode 100644
index 000000000..a57ed02c2
--- /dev/null
+++ b/libXaw/spec/Makefile.in
@@ -0,0 +1,513 @@
+# Makefile.in generated by automake 1.11 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation.
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the copyright holders shall
+# not be used in advertising or otherwise to promote the sale, use or
+# other dealings in this Software without prior written authorization
+# from the copyright holders.
+#
+
+# Based on xc/doc/specs/Xaw/Makefile from X11R6.9
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = spec
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(docdir)"
+DATA = $(doc_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APP_MAN_DIR = @APP_MAN_DIR@
+APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHANGELOG_CMD = @CHANGELOG_CMD@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CWARNFLAGS = @CWARNFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
+DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+FILE_MAN_DIR = @FILE_MAN_DIR@
+FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+GREP = @GREP@
+GROFF = @GROFF@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBEXT = @LIBEXT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MAN_DIR = @LIB_MAN_DIR@
+LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MISC_MAN_DIR = @MISC_MAN_DIR@
+MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+XAW6_CFLAGS = @XAW6_CFLAGS@
+XAW6_LIBS = @XAW6_LIBS@
+XAW7_CFLAGS = @XAW7_CFLAGS@
+XAW7_LIBS = @XAW7_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+distcleancheck_listfiles = @distcleancheck_listfiles@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+XDOCMACROS = macros.t
+XIDXMACROS = indexmacros.t
+EVERYWHERE = $(XDOCMACROS) strings.mit strings.xaw
+CHAPTER1 = CH1
+CHAPTER2 = CH2
+CHAPTER3 = CH3.intro Command Grip Label List Panner Repeater \
+ Scrollbar Simple StripChart Toggle
+
+CHAPTER4 = CH4.intro SimpleMenu SmeBSB SmeLine Sme MenuButton
+CHAPTER5 = CH5.intro TextActions TextFuncs AsciiText AsciiSource AsciiSink \
+ TextCustom Text TextSource TextSink
+
+CHAPTER6 = CH6.intro Box Dialog Form Paned Porthole Tree Viewport
+CHAPTER7 = CH7.intro Template
+spec_sources = \
+ $(EVERYWHERE) TPage_Credits \
+ $(CHAPTER1) $(CHAPTER2) $(CHAPTER3) $(CHAPTER4) \
+ $(CHAPTER5) $(CHAPTER6) $(CHAPTER7)
+
+spec_input = $(spec_sources:%=$(srcdir)/%)
+EXTRA_DIST = $(spec_sources) $(XIDXMACROS) block.awk fixindex.awk widg.idxmac.t
+@BUILD_DOCS_TRUE@doc_DATA = widgets.ps widgets.index.ps widgets.txt widgets.html
+@BUILD_DOCS_TRUE@CLEANFILES = $(doc_DATA)
+@BUILD_DOCS_TRUE@MOSTLYCLEANFILES = index.*
+@BUILD_DOCS_TRUE@GROFF_DEFS = -dxV="$(PACKAGE_STRING)"
+@BUILD_DOCS_TRUE@GROFF_FLAGS = -t -ms $(GROFF_DEFS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu spec/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu spec/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-docDATA: $(doc_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
+ @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \
+ done
+
+uninstall-docDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(docdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(docdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+ -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-docDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-docDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-docDATA install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-docDATA
+
+
+@BUILD_DOCS_TRUE@widgets.ps: $(spec_input)
+@BUILD_DOCS_TRUE@ -$(AM_V_GEN) $(GROFF) -Tps $(GROFF_FLAGS) $(spec_input) \
+@BUILD_DOCS_TRUE@ 2> index.raw > $@
+@BUILD_DOCS_TRUE@ @if grep '^[^1-9.]' index.raw | grep -v warning; then exit 1; \
+@BUILD_DOCS_TRUE@ else test $$? -le 1; fi
+
+@BUILD_DOCS_TRUE@widgets.txt: $(spec_input)
+@BUILD_DOCS_TRUE@ $(AM_V_GEN) $(GROFF) -Tascii $(GROFF_FLAGS) $(spec_input) \
+@BUILD_DOCS_TRUE@ 2> index.txt.raw > $@
+
+@BUILD_DOCS_TRUE@widgets.html: $(spec_input)
+@BUILD_DOCS_TRUE@ $(AM_V_GEN) $(GROFF) -Thtml $(GROFF_FLAGS) $(spec_input) \
+@BUILD_DOCS_TRUE@ 2> index.html.raw > $@
+
+@BUILD_DOCS_TRUE@index.raw: widgets.ps
+
+@BUILD_DOCS_TRUE@index.pageno: index.raw
+@BUILD_DOCS_TRUE@ $(AM_V_GEN)$(SED) -n '$$p' index.raw > $@
+
+@BUILD_DOCS_TRUE@index.troff: index.raw
+@BUILD_DOCS_TRUE@ $(AM_V_GEN)$(GREP) '^[1-9]' index.raw | \
+@BUILD_DOCS_TRUE@ (sort -f '-t:' -k2,2 -k1,1n 2>/dev/null || \
+@BUILD_DOCS_TRUE@ sort -f '-t:' +1 -3 +0n -1n) | \
+@BUILD_DOCS_TRUE@ $(AWK) -f $(srcdir)/fixindex.awk | \
+@BUILD_DOCS_TRUE@ $(AWK) -f $(srcdir)/block.awk > $@
+
+@BUILD_DOCS_TRUE@widgets.index.ps: widg.idxmac.t index.troff index.pageno
+@BUILD_DOCS_TRUE@ $(AM_V_GEN)$(GROFF) -me $(GROFF_DEFS) \
+@BUILD_DOCS_TRUE@ $(srcdir)/widg.idxmac.t $(srcdir)/$(XIDXMACROS) index.troff > $@
+
+# Useful for running off part of the manual by hand,
+# e.g., make part PART=Label
+@BUILD_DOCS_TRUE@part: $(srcdir)/$(PART)
+@BUILD_DOCS_TRUE@ $(GROFF) -Tps $(GROFF_FLAGS) $(EVERYWHERE) $(srcdir)/$(PART) > $(PART).ps
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libXaw/spec/MenuButton b/libXaw/spec/MenuButton
new file mode 100644
index 000000000..8a4084b1c
--- /dev/null
+++ b/libXaw/spec/MenuButton
@@ -0,0 +1,215 @@
+.\" $Xorg: MenuButton,v 1.3 2000/08/17 19:42:27 cpqbld Exp $
+.NH 2
+MenuButton Widget
+.XS
+ MenuButton Widget
+.XE
+.IN "MenuButton widget" "" "@DEF@"
+.sp
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+Application Header file <X11/Xaw/MenuButton.h>
+.IN "MenuButton.h" ""
+Class Header file <X11/Xaw/MenuButtonP.h>
+.IN "MenuButtonP.h" ""
+Class menuButtonWidgetClass
+.IN "menuButtonWidgetClass" ""
+Class Name MenuButton
+.IN "MenuButton widget" "class name"
+Superclass Command
+.De
+.LP
+.sp
+The MenuButton widget is an area, often rectangular,
+that displays a graphic. The graphic may be a text
+string containing multiple lines of characters in an 8
+bit or 16 bit character set (to be displayed with a
+\fIfont\fP), or in a multi-byte encoding (for use with
+a \fIfontset\fP). The graphic may also be a bitmap or
+pixmap.
+.LP
+When the pointer cursor is on a MenuButton widget, the
+MenuButton becomes highlighted by drawing a rectangle
+around its perimeter. This highlighting indicates
+that the MenuButton is ready for selection. When a
+pointer button is pressed, the MenuButton widget will
+pop up the menu named in the \fBmenuName\fP resource.
+.NH 3
+Resources
+.LP
+When creating a MenuButton widget instance,
+the following resources are retrieved from the argument list
+or from the resource database:
+.LP
+.IN "MenuButton widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+bitmap Bitmap Pixmap None
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+callback Callback XtCallbackList NULL
+colormap Colormap Colormap Parent's Colormap
+cornerRoundPercent CornerRoundPercent Dimension 25
+cursor Cursor Cursor None
+cursorName Cursor String None
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+encoding Encoding UnsignedChar XawTextEncoding8bit
+font Font XFontStruct XtDefaultFont
+fontSet FontSet XFontSet XtDefaultFontSet
+foreground Foreground Pixel XtDefaultForeground
+height Height Dimension A graphic height + 2 * \fBinternalHeight\fP
+highlightThickness Thickness Dimension A 2 (0 if Shaped)
+insensitiveBorder Insensitive Pixmap GreyPixmap
+internalHeight Height Dimension 2
+internalWidth Width Dimension 4
+international International Boolean C False
+justify Justify Justify XtJustifyCenter (center)
+label Label String name of widget
+leftBitmap LeftBitmap Bitmap None
+mappedWhenManaged MappedWhenManaged Boolean True
+menuName MenuName String "menu"
+pointerColor Foreground Pixel XtDefaultForeground
+pointerColorBackground Background Pixel XtDefaultBackground
+resize Resize Boolean True
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+shapeStype ShapeStyle ShapeStyle Rectangle
+translations Translations TranslationTable See below
+width Width Dimension A graphic width + 2 * \fBinternalWidth\fP
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Bg
+.Gp
+.Bm
+.Bc
+.Bp
+.Bw
+.Cb
+.Cm
+.Cr
+.Cu
+.Cn
+.Dp
+.Dc
+.Lf
+.Ls
+.Lg
+.Hw
+.Ht
+.Ib
+.Ih
+.In
+.Ju
+.La
+.Mm
+.IP \fBmenuName\fP 1.5i
+The name of a popup shell to popup as a menu. The MenuButton
+will search for this name using \fBXtNameToWidget\fP starting
+with itself as the reference widget. If the search is
+unsuccessful the widget will continue up the widget tree using
+each of its ancestors as the reference widget passed to
+\fBXtNameToWidget\fP. If no widget of called \fBmenuName\fP is
+found by this algorithm, the widget will print a warning message
+and give up. When the menu is found it will be popped up
+exclusive and spring_loaded. The MenuButton widget does not
+copy the value of this resource into newly allocated memory. The
+application programmer must pass the resource value in
+nonvolatile memory.
+.Pf
+.Pb
+.Re
+.Sc
+.Se
+.Ss
+.Tr
+.Xy
+.NH 3
+MenuButton Actions
+.IN "MenuButton widget" "actions"
+.LP
+The MenuButton widget supports the following actions:
+.IP \(bu 5
+Switching the button between the foreground and background
+colors with \fBset\fP and \fBunset\fP
+.IP \(bu 5
+Processing application callbacks with \fBnotify\fP
+.IP \(bu 5
+Switching the internal border between highlighted
+and unhighlighted states with \fBhighlight\fP and \fBunhighlight\fP
+.IP \(bu 5
+Popping up a menu with \fBPopupMenu\fP
+.LP
+The following are the default translation bindings used by the
+MenuButton widget:
+.LP
+.sp
+.Ds 0
+.TA .5i 2.25i
+.ta .5i 2.25i
+ <EnterWindow>: highlight(\|)
+ <LeaveWindow>: reset(\|)
+ <BtnDown>: reset(\|) PopupMenu(\)
+.De
+.NH 3
+MenuButton Actions
+.LP
+The full list of actions supported by MenuButton is:
+.IP \fBhighlight\fP(\fIcondition\fP) 1.5i
+Displays the internal highlight border in the color (\fBforeground\fP
+or \fBbackground\fP ) that contrasts with the interior color of the
+Command widget. The conditions \fBWhenUnset\fP and \fBAlways\fP are
+understood by this action procedure. If no argument is passed,
+\fBWhenUnset\fP is assumed.
+.IP \fBunhighlight\fP(\|) 1.5i
+Displays the internal highlight border in the color (\fBXtNforeground\fP
+or \fBbackground\fP ) that matches the interior color of the
+MenuButton widget.
+.IP \fBset\fP(\|) 1.5i
+Enters the \fIset\fP state, in which \fBnotify\fP is possible. This
+action causes the button to display its interior in the
+\fBforeground\fP color. The label or bitmap is displayed in the
+\fBbackground\fP color.
+.IP \fBunset\fP(\|) 1.5i
+Cancels the \fIset\fP state and displays the interior of the button in the
+\fBbackground\fP color. The label or bitmap is displayed in the
+\fBforeground\fP color.
+.IP \fBreset\fP(\|) 1.5i
+Cancels any \fBset\fP or \fBhighlight\fP and displays the interior of the
+button in the \fBbackground\fP color, with the label displayed in the
+\fBforeground\fP color.
+.IP \fBnotify\fP(\|) 1.5i
+When the button is in the \fBset\fP state this action calls all functions in
+the callback list named by the \fBcallback\fP resource. The value of
+the call_data argument in these callback functions is undefined.
+.IP \fBPopupMenu\fP(\|) 1.5i
+Pops up the menu specified by the \fBmenuName\fP resource.
+.LP
+The MenuButton widget does not place a server grab on itself.
+Instead, PopupMenu is registered as a grab action.
+As a result, clients which popup menus without using XtMenuPopup
+or MenuPopup or PopupMenu in translations will fail to have a grab active.
+They should make a call to XtRegisterGrabAction on the appropriate action
+in the application initialization routine, or use a different translation.
+.bp
diff --git a/libXaw/spec/Paned b/libXaw/spec/Paned
new file mode 100644
index 000000000..a6b8f0089
--- /dev/null
+++ b/libXaw/spec/Paned
@@ -0,0 +1,492 @@
+.\" $Xorg: Paned,v 1.3 2000/08/17 19:42:27 cpqbld Exp $
+.NH 2
+Paned Widget
+.LP
+.XS
+ Paned Widget
+.XE
+.IN "Paned widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application Header file <X11/Xaw/Paned.h>
+.IN "Paned.h" ""
+Class Header file <X11/Xaw/PanedP.h>
+.IN "PanedP.h" ""
+Class panedWidgetClass
+.IN "panedWidgetClass" ""
+Class Name Paned
+.IN "Paned widget" "class name"
+Superclass Constraint
+.sp
+.De
+.LP
+The Paned widget manages children in a vertically or horizontally
+tiled fashion. The panes may be dynamically resized by the user by
+using the \fIgrips\fP that appear near the right or bottom edge of the
+border between two panes.
+.LP
+The Paned widget may accept any widget class as a pane \fBexcept\fP
+Grip. Grip widgets have a special meaning for the Paned widget, and
+adding a Grip as its own pane will confuse the Paned widget.
+.NH 3
+Using the Paned Widget
+.IN "Paned widget" "using"
+.LP
+The grips allow the panes to be resized by the user. The semantics of
+how these panes resize is somewhat complicated, and warrants further
+explanation here. When the mouse pointer is positioned on a grip and
+pressed, an arrow is displayed that indicates the pane that is to be to
+be resized. While keeping the mouse button down, the user can move the
+grip up and down (or left and right). This, in turn, changes the size
+of the pane. The size of the Paned widget will not change. Instead,
+it chooses another pane (or panes) to resize. For more details on which
+pane it chooses to resize, see \fBLayout Semantics\fP.
+.LP
+One pointer binding allows the border between two panes to be moved,
+without affecting any of the other panes. When this occurs the pointer
+will change to an arrow that points along the pane border.
+.LP
+The default bindings for the Paned widget's grips are:
+.TS H
+lw(1i) lw(2i) lw(2i).
+_
+.sp 3p
+.TB
+Mouse button Pane to Resize - Vertical Pane to Resize - Horizontal
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+1 (left) above the grip left of the grip
+2 (middle) adjust border adjust border
+3 (right) below the grip right of the grip
+.sp 3p
+_
+.TE
+.NH 3
+Resources
+.LP
+When creating a Paned widget instance, the following resources are
+retrieved from the argument list or the resource database:
+.LP
+.IN "Paned widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.4i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+betweenCursor Cursor Cursor A Depends on orientation
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+children ReadOnly WidgetList R NULL
+colormap Colormap Colormap Parent's Colormap
+cursor Cursor Cursor None
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+gripCursor Cursor Cursor A Depends on orientation
+gripIndent GripIndent Position 10
+gripTranslations Translations TranslationTable see below
+height Height Dimension A Depends on orientation
+horizontalBetweenCursor Cursor Cursor sb_up_arrow
+horizontalGripCursor Cursor Cursor sb_h_double_arrow
+internalBorderColor BorderColor Pixel XtDefaultForeground
+internalBorderWidth BorderWidth Dimension 1
+leftCursor Cursor Cursor sb_left_arrow
+lowerCursor Cursor Cursor sb_down_arrow
+mappedWhenManaged MappedWhenManaged Boolean True
+numChildren ReadOnly Cardinal R 0
+orientation Orientation Orientation XtorientVertical
+refigureMode Boolean Boolean True
+rightCursor Cursor Cursor sb_right_arrow
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+translations Translations TranslationTable NULL
+upperCursor Cursor Cursor sb_up_arrow
+verticalBetweenCursor Cursor Cursor sb_left_arrow
+verticalGripCursor Cursor Cursor sb_v_double_arrow
+width Width Dimension A Depends on orientation
+x Paned Position 0
+y Paned Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.Ch
+.Cm
+.IP \fBcursor\fP 1.5i
+The cursor to use when the mouse pointer is over the Paned widget, but
+not in any of its children (children may also inherit this cursor). It
+should be noted that the internal borders are actually part of the Paned
+widget, not the children.
+.Dp
+.Dc
+.IP \fBgripCursor\fP 1.5i
+The cursor to use when the grips are not active. The default value is
+\fBverticalGripCursor\fP or \fBhorizontalGripCursor\fP depending on
+the orientation of the Paned widget.
+.IP \fBgripIndent\fP 1.5i
+The amount of space left between the right (or bottom) edge of the
+Paned widget and all the grips.
+.IP \fBgripTranslation\fP 1.5i
+Translation table that will be applied to all grips.
+.Hw
+.IP \fBhorizontalBetweenCursor\fP 1.5i
+.br
+.ns
+.IP \fBverticalBetweenCursor\fP 1.5i
+The cursor to be used for the grip when changing the boundary between
+two panes. These resources allow the cursors to be different
+depending on the orientation of the Paned widget.
+.IP \fBhorizontalGripCursor\fP 1.5i
+.br
+.ns
+.IP \fBverticalGripCursor\fP 1.5i
+The cursor to be used for the grips when they are not active. These
+resources allow the cursors to be different depending on the
+orientation of the Paned widget.
+.IP \fBinternalBorderColor\fP 1.5i
+A pixel value which indexes the widget's colormap to derive the internal
+border color of the widget's window. The class name of this resource
+allows \fIPaned*BorderColor: blue\fP to set the internal border color
+for the Paned widget. An optimization is invoked if
+\fBinternalBorderColor\fP and \fBbackground\fP are the same, and the
+internal borders are not drawn. \fBinternalBorderWidth\fP is still left
+between the panes, however.
+.IP \fBinternalBorderWidth\fP 1.5i
+The width of the internal borders. This is the amount of space left
+between the panes. The class name of this resource allows
+\fIPaned*BorderWidth: 3\fP to set the internal border width for the
+Paned widget.
+.IP \fBleftCursor\fP 1.5i
+.br
+.ns
+.IP \fBrightCursor\fP 1.5i
+The cursor used to indicate which is the \fIimportant\fP pane to resize
+when the Paned widget is oriented horizontally.
+.IP \fBlowerCursor\fP 1.5i
+.br
+.ns
+.IP \fBupperCursor\fP 1.5i
+The cursor used to indicate which is the \fIimportant\fP pane to resize
+when the Paned widget is oriented vertically.
+.Mm
+.Nc
+This is not the same as the number of panes, since this also contains a
+grip for some of the panes, use \fBXawPanedGetNumSub\fP to retrieve the
+number of panes.
+.IP \fBorientation\fP 1.5i
+The orientation to stack the panes. This value can be either
+\fBXtorientVertical\fP or \fBXtorientHorizontal\fP.
+.IN "XtorientVertical" ""
+.IN "XtorientHorizontal" ""
+.IN "conversions" "Orientation"
+.Rs "vertical \fPand\fB horizontal"
+.IP \fBrefigureMode\fP 1.5i
+This resource allows pane layout to be suspended. If this value is
+\fBFalse\fP, then no layout actions will be taken. This may improve
+efficiency when adding or removing more than one pane from the Paned
+widget.
+.Sc
+.Se
+.Tr
+.Xy
+.NH 3
+Constraint Resources
+.LP
+.IN "Paned widget" "constraint resources"
+Each child of the Paned widget may request special layout resources
+be applied to it. These \fIconstraint\fP resources allow the Paned
+widget's children to specify individual layout requirements.
+.LP
+.TS H
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+allowResize Boolean Boolean False
+max Max Dimension Infinity
+min Min Dimension Height of Grips
+preferredPaneSize PreferredPaneSize Dimension ask child
+resizeToPreferred Boolean Boolean False
+showGrip ShowGrip Boolean True
+skipAdjust Boolean Boolean False
+.sp 3p
+_
+.TE
+.IP \fBallowResize\fP 1.5i
+If this value is \fBFalse\fP the the Paned widget will disallow all
+geometry requests from this child.
+.IP \fBmax\fP 1.5i
+.br
+.ns
+.IP \fBmin\fP 1.5i
+The absolute maximum or minimum size for this pane. These values will
+never be overridden by the Paned widget. This may cause some panes to be
+pushed off the bottom (or right) edge of the paned widget.
+.IP \fBpreferredPaneSize\fP 1.5i
+Normally the paned widget makes a QueryGeometry call on a child to
+determine the preferred size of the child's pane. There are times
+when the application programmer or the user has a better idea of the
+preferred size of a pane. Setting this resource causes the value
+passed to be interpreted as the preferred size, in pixels, of this pane.
+.IP \fBresizeToPreferred\fP 1.5i
+Determines whether or not to resize each pane to its preferred size
+when the Paned widget is resized. See \fBLayout Semantics\fP for details.
+.IP \fBshowGrip\fP 1.5i
+If \fBTrue\fP then a grip will be shown for this pane. The grip
+associated with a pane is either below or to the right of the pane. No
+grip is ever shown for the last pane.
+.IP \fBskipAdjust\fP 1.5i
+This resource is used to determine which pane is forced to be resized.
+Setting this value to \fBTrue\fP makes this pane less likely to be
+forced to be resized. See \fBLayout Semantics\fP for details.
+.NH 3
+Layout Semantics
+.LP
+.IN "Paned widget" "layout semantics"
+In order to make effective use of the Paned widget it is helpful to know
+the rules it uses to determine which child will be resized in any given
+situation. There are three rules used to determine which child is
+resized. While these rules are always the same, the panes that are
+searched can change depending upon what caused the relayout.
+.LP
+.sp
+\fBLayout Rules\fP
+.IP \fB1\fP .5i
+Do not let a pane grow larger than its \fBmax\fP or smaller than its
+\fBmin\fP.
+.IP \fB2\fP .5i
+Do not adjust panes with \fBskipAdjust\fP set.
+.IP \fB3\fP .5i
+Do not adjust panes away from their preferred size, although moving one
+closer to its preferred size is fine.
+.LP
+When searching the children the Paned widget looks for panes that
+satisfy all the rules, and if unsuccessful then it eliminates rule 3
+and then 2. Rule 1 is always enforced.
+.LP
+If the relayout is due to a resize or change in management then the
+panes are searched from bottom to top. If the relayout is due to grip
+movement then they are searched from the grip selected in the direction
+opposite the pane selected.
+.NH 4
+Resizing Panes from a Grip Action
+.LP
+The pane above the grip is resized by invoking the GripAction with
+\fBUpLeftPane\fP specified. The panes below the grip are each checked
+against all rules, then rules 2 and 1 and finally against rule 1 only.
+No pane above the chosen pane will ever be resized.
+.LP
+The pane below the grip is resized by invoking the GripAction with
+\fBLowRightPane\fP specified. The panes above the grip are each
+checked in this case. No pane below the chosen pane will ever be resized.
+.LP
+Invoking GripAction with \fBThisBorderOnly\fP specified just moves the
+border between the panes. No other panes are ever resized.
+.NH 4
+Resizing Panes after the Paned widget is resized.
+.LP
+When the Pane widget is resized it must determine a new size for each
+pane. There are two methods of doing this. The Paned widget can either
+give each pane its preferred size and then resize the panes to fit, or
+it can use the current sizes and then resize the panes to fit. The
+\fBresizeToPreferred\fP resource allows the application to tell the
+Paned widget whether to query the child about its preferred size
+(subject to the the \fBpreferredPaneSize\fP) or to use the current size
+when refiguring the pane locations after the pane has been resized.
+.LP
+There is one special case. All panes assume they should resize to
+their preferred size until the Paned widget becomes visible to the user.
+.NH 4
+Managing Children and Geometry Management
+.LP
+The Paned widget always resizes its children to their preferred sizes when
+a new child is managed, or a geometry management request is honored.
+The Paned widget will first attempt to resize itself to contain its
+panes exactly. If this is not possible then it will hunt through the
+children, from bottom to top (right to left), for a pane to resize.
+.NH 4
+Special Considerations
+.LP
+When a user resizes a pane with the grips, the Paned widget assumes that
+this new size is the preferred size of the pane.
+.NH 3
+Grip Translations
+.LP
+The Paned widget has no action routines of its own, as all actions are
+handled through the grips. The grips are each assigned a default
+Translation table.
+.LP
+.sp
+.Ds 0
+.TA .5i 2.25i
+.ta .5i 2.25i
+ <Btn1Down>: GripAction(Start, UpLeftPane)
+.IN "GripAction" ""
+ <Btn2Down>: GripAction(Start, ThisBorderOnly)
+ <Btn3Down>: GripAction(Start, LowRightPane)
+ <Btn1Motion>: GripAction(Move, UpLeftPane)
+ <Btn2Motion>: GripAction(Move, ThisBorderOnly)
+ <Btn3Motion>: GripAction(Move, LowRightPane)
+ Any<BtnUp>: GripAction(Commit)
+.De
+.sp
+.LP
+The Paned widget interprets the \fBGripAction\fP as taking two arguments.
+.IN "GripAction" ""
+The first argument may be any of the following:
+.IP \fBStart\fP 1i
+Sets up the Paned widget for resizing and changes the cursor of the
+grip. The second argument determines which pane will be resized, and
+can take on any of the three values shown above.
+.IP \fBMove\fP 1i
+The internal borders are drawn over the current pane locations to
+animate where the borders would actually be placed if you were to move
+this border as shown. The second argument must match the second argument
+that was passed to the \fBStart\fP action, that began this process. If
+these arguments are not passed, the behavior is undefined.
+.IP \fBCommit\fP 1i
+This argument causes the Paned widget to commit the changes selected
+by the previously started action. The cursor is changed back to the
+grip's inactive cursor. No second argument is needed in this case.
+.NH 3
+Convenience Routines
+.LP
+.IN "Paned widget" "enable pane resizing"
+.IN "Paned widget" "disable pane resizing"
+To enable or disable a child's request for pane resizing,
+use
+.PN XawPanedAllowResize :
+.IN "XawPanedAllowResize" "" "@DEF@"
+.FD 0
+void XawPanedAllowResize(\fIw\fP, \fIallow_resize\fP)
+.br
+ Widget \fIw\fP;
+.br
+ Boolean \fIallow_resize\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the child pane.
+.IP \fIallow_resize\fP
+Specifies whether or not resizing requests for this child will be
+granted by the Paned widget.
+.LP
+If allow_resize is \fBTrue\fP, the Paned widget allows geometry
+requests from the child to change the pane's height. If allow_resize
+is \fBFalse\fP, the Paned widget ignores geometry requests from the
+child to change the pane's height. The default state is \fBTrue\fP
+before the Pane is realized and \fBFalse\fP after it is realized.
+This procedure is equivalent to changing the \fBallowResize\fP
+constraint resource for the child.
+.LP
+.sp
+.IN "Paned widget" "change height settings"
+To change the minimum and maximum height settings for a pane, use
+.PN XawPanedSetMinMax :
+.IN "XawPanedSetMinMax" "" "@DEF@"
+.FD 0
+void XawPanedSetMinMax(\fIw\fP, \fImin\fP, \fImax\fP)
+.br
+ Widget \fIw\fP;
+.br
+ int \fImin\fP, \fImax\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the child pane.
+.IP \fImin\fP 1i
+Specifies the new minimum height of the child, expressed in pixels.
+.IP \fImax\fP 1i
+Specifies new maximum height of the child, expressed in pixels.
+.LP
+This procedure is equivalent to setting the \fBmin\fP and \fBmax\fP
+constraint resources for the child.
+.LP
+.sp
+.IN "Paned widget" "get height settings"
+To retrieve the minimum and maximum height settings for a pane, use
+.PN XawPanedGetMinMax :
+.IN "XawPanedGetMinMax" "" "@DEF@"
+.FD 0
+void XawPanedGetMinMax(\fIw\fP, \fImin_return\fP, \fImax_return\fP)
+.br
+ Widget \fIw\fP;
+.br
+ int \fI*min_return\fP, \fI*max_return\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the child pane.
+.IP \fImin_return\fP 1i
+Returns the minimum height of the child, expressed in pixels.
+.IP \fImax_return\fP 1i
+Returns the maximum height of the child, expressed in pixels.
+.LP
+This procedure is equivalent to getting the \fBmin\fP and \fBmax\fP
+resources for this child child.
+.LP
+.sp
+.IN "Paned widget" "enable auto-reconfiguring"
+.IN "Paned widget" "disable auto-reconfiguring"
+To enable or disable automatic recalculation of pane sizes and positions,
+use
+.PN XawPanedSetRefigureMode :
+.IN "XawPanedSetRefigureMode" "" "@DEF@"
+.FD 0
+void XawPanedSetRefigureMode(\fIw\fP, \fImode\fP)
+.br
+ Widget \fIw\fP;
+.br
+ Boolean \fImode\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Paned widget.
+.IP \fImode\fP 1i
+Specifies whether the layout of the Paned widget is enabled (\fBTrue\fP)
+or disabled (\fBFalse\fP).
+.LP
+When making several changes to the children of a Paned widget
+after the Paned has been realized, it is a good idea to disable
+relayout until after all changes have been made.
+.LP
+.sp
+.IN "Paned widget" "getting the number of children"
+To retrieve the number of panes in a paned widget use
+\fBXawPanedGetNumSub\fP:
+.IN "XawPanedGetNumSub" "" "@DEF@"
+.FD 0
+int XawPanedGetNumSub(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Paned widget.
+.LP
+This function returns the number of panes in the Paned widget. This is
+\fBnot\fP the same as the number of children, since the grips are also
+children of the Paned widget.
diff --git a/libXaw/spec/Panner b/libXaw/spec/Panner
new file mode 100644
index 000000000..1bb11b5fd
--- /dev/null
+++ b/libXaw/spec/Panner
@@ -0,0 +1,247 @@
+.\" $Xorg: Panner,v 1.3 2000/08/17 19:42:27 cpqbld Exp $
+.NH 2
+Panner Widget
+.LP
+.XS
+ Panner Widget
+.XE
+.IN "Panner widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application header file <X11/Xaw/Panner.h>
+.IN "Panner.h" ""
+Class header file <X11/Xaw/PannerP.h>
+.IN "PannerP.h" ""
+Class pannerWidgetClass
+.IN "pannerWidgetClass" ""
+Class Name Panner
+.IN "Panner widget" "class name"
+Superclass Simple
+.sp
+.De
+.LP
+A Panner widget is a rectangle, called the
+``canvas,'' on which another rectangle, the ``slider,'' moves in two
+dimensions. It is often used with a Porthole widget to move, or
+``scroll,'' a third widget in two dimensions, in which case the
+slider's size and position gives feedback as to what portion of
+the third widget is visible.
+.LP
+The slider may be scrolled around the canvas by pressing,
+dragging, and releasing Button1; the default translation also
+enables scrolling via arrow keys and some other keys. While
+scrolling is in progress, the application receives notification
+through callback procedures. Notification may be done either
+continuously whenever the slider moves or discretely whenever the
+slider has been given a new location.
+.NH 3
+Resources
+.LP
+When creating a Panner widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "Panner widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+allowOff AllowOff Boolean False
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+backgroundStipple BackgroundStipple String NULL
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+canvasHeight CanvasHeight Dimension 0
+canvasWidth CanvasWidth Dimension 0
+colormap Colormap Colormap Parent's Colormap
+cursor Cursor Cursor None
+cursorName Cursor String NULL
+defaultScale DefaultScale Dimension 8
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+foreground Foreground Pixel XtDefaultForeground
+height Height Dimension A depends on orientation
+internalSpace InternalSpace Dimension 4
+international International Boolean C False
+lineWidth LineWidth Dimension 0
+mappedWhenManaged MappedWhenManaged Boolean True
+pointerColor Foreground Pixel XtDefaultForeground
+pointerColorBackground Background Pixel XtDefaultBackground
+reportCallback ReportCallback Callback NULL
+resize Resize Boolean True
+rubberBand RubberBand Boolean False
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+shadowColor ShadowColor Pixel XtDefaultForeground
+shadowThickness ShadowThickness Dimension 2
+sliderX SliderX Position 0
+sliderY SliderY Position 0
+sliderHeight SliderHeight Dimension 0
+sliderWidth SliderWidth Dimension 0
+translations Translations TranslationTable See below
+width Width Dimension A depends on orientation
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.IP \fBallowOff\fP 1.5i
+Whether to allow the edges of the slider to go off the edges of the canvas.
+.As
+.Bg
+.Gp
+.IP \fBbackgroundStipple\fP 1.5i
+The name of a bitmap pattern to be used as the background for
+the area representing the canvas.
+.Bc
+.Bp
+.Bw
+.IP \fBcanvasHeight\fP 1.5i
+.br
+.ns
+.IP \fBcanvasWidth\fP 1.5i
+The size of the canvas.
+.Cm
+.Cu
+.Cn
+.IP \fBdefaultScale\fP 1.5i
+The percentage size that the Panner widget should have relative
+to the size of the canvas.
+.Dp
+.Dc
+.IP \fBforeground\fP 1.5i
+A pixel value which indexes the widget's colormap to derive the color
+used to draw the slider.
+.Hw
+.IP \fBinternalSpace\fP 1.5i
+The width of internal border in pixels between a slider representing the
+full size of the canvas
+and the edge of the Panner widget.
+.Ix
+.IP \fBlineWidth\fP 1.5i
+The width of the lines in the rubberbanding rectangle when rubberbanding
+is in effect instead of continuous scrolling. The default is 0.
+.Mm
+.Pf
+.Pb
+.IP \fBreportCallback\fP 1.5i
+All functions on this callback list are called when the
+\fBnotify\fP action is invoked. See the \fBPanner Actions\fP section
+for details.
+.IP \fBresize\fP 1.5i
+Whether or not to resize the panner whenever the canvas size is changed so
+that the \fBdefaultScale\fP is maintained.
+.IP \fBrubberBand\fP 1.5i
+Whether or not scrolling should be discrete (only moving a rubberbanded
+rectangle until the scrolling is done) or continuous (moving the slider
+itself). This controls whether or not the \fBmove\fP action procedure also
+invokes the \fBnotify\fP action procedure.
+.Sc
+.Se
+.IP \fBshadowColor\fP 1.5i
+The color of the shadow underneath the slider.
+.IP \fBshadowThickness\fP 1.5i
+The width of the shadow underneath the slider.
+.IP \fBsliderX\fP 1.5i
+.br
+.ns
+.IP \fBsliderY\fP 1.5i
+The location of the slider in the coordinates of the canvas.
+.IP \fBsliderHeight\fP 1.5i
+.br
+.ns
+.IP \fBsliderWidth\fP 1.5i
+The size of the slider.
+.Tr
+.Xy
+.NH 3
+Panner Actions
+.IN "Panner widget" "actions"
+.LP
+The actions supported by the Panner widget are:
+.IP \fBstart\fP() 1.5i
+This action begins movement of the slider.
+.IP \fBstop\fP() 1.5i
+This action ends movement of the slider.
+.IP \fBabort\fP() 1.5i
+This action ends movement of the slider and restores it to the position it
+held when the \fBstart\fP action was invoked.
+.IP \fBmove\fP() 1.5i
+This action moves the outline of the slider (if the \fBrubberBand\fP resource
+is True) or the slider itself (by invoking the \fBnotify\fP
+action procedure).
+.IP \fBpage\fP(\fIxamount\fP,\fIyamount\fP) 1.5i
+This action moves the slider by the specified amounts. The format
+for the amounts is a signed or unsigned floating-point number (e.g., +1.0
+or \-.5) followed
+by either \fBp\fP indicating pages (slider sizes), or \fBc\fP indicating
+canvas sizes. Thus, \fIpage(+0,+.5p)\fP represents vertical movement down
+one-half the height of the slider and \fIpage(0,0)\fP represents moving to
+the upper left corner of the canvas.
+.IP \fBnotify\fP() 1.5i
+This action informs the application of the slider's current position by
+invoking the \fBreportCallback\fP functions registered by the application.
+.IP \fBset\fP(\fIwhat\fP,\fIvalue\fP) 1.5i
+This action changes the behavior of the Panner. The \fIwhat\fP argument
+must currently be the string \fBrubberband\fP and controls the value of
+the \fBrubberBand\fP resource. The \fIvalue\fP argument
+may have one of the values \fBon\fP, \fBoff\fP, or \fBtoggle\fP.
+.LP
+.sp
+The default bindings for Panner are:
+.IN "Panner widget" "default translation table"
+.LP
+.Ds 0
+.TA .5i 1.75i
+.ta .5i 1.75i
+ <Btn1Down>: start(\|)
+ <Btn1Motion>: move(\|)
+ <Btn1Up>: notify(\|) stop(\|)
+ <Btn2Down>: abort(\|)
+ <Key>KP_Enter: set(rubberband,toggle)
+ <Key>space: page(+1p,+1p)
+ <Key>Delete: page(\-1p,\-1p)
+ <Key>BackSpace: page(\-1p,\-1p)
+ <Key>Left: page(\-.5p,+0)
+ <Key>Right: page(+.5p,+0)
+ <Key>Up: page(+0,\-.5p)
+ <Key>Down: page(+0,+.5p)
+ <Key>Home: page(0,0)
+.De
+.NH 3
+Panner Callbacks
+.IN "Panner widget" "callbacks"
+.LP
+The functions registered on the \fBreportCallback\fP list are invoked by
+the \fBnotify\fP action as follows:
+.IN "ReportProc" "" "@DEF@"
+.FD 0
+void ReportProc(\fIpanner\fP, \fIclient_data\fP, \fIreport\fP)
+.br
+ Widget \fIpanner\fP;
+.br
+ XtPointer \fIclient_data\fP;
+.br
+ XtPointer \fIreport\fP; /* (XawPannerReport *) */
+.FN
+.IP \fIpanner\fP 1i
+Specifies the Panner widget.
+.IP \fIclient_data\fP 1i
+Specifies the client data.
+.IP \fIreport\fP 1i
+Specifies a pointer to an \fBXawPannerReport\fP structure containing
+the location and size of the slider and the size of the canvas.
diff --git a/libXaw/spec/Porthole b/libXaw/spec/Porthole
new file mode 100644
index 000000000..4d4104aa0
--- /dev/null
+++ b/libXaw/spec/Porthole
@@ -0,0 +1,125 @@
+.\" $Xorg: Porthole,v 1.3 2000/08/17 19:42:27 cpqbld Exp $
+.NH 2
+Porthole Widget
+.LP
+.XS
+ Porthole Widget
+.XE
+.IN "Porthole widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application Header file <X11/Xaw/Porthole.h>
+.IN "Porthole.h" ""
+Class Header file <X11/Xaw/PortholeP.h>
+.IN "PortholeP.h" ""
+Class portholeWidgetClass
+.IN "portholeWidgetClass" ""
+Class Name Porthole
+.IN "Porthole widget" "class name"
+Superclass Composite
+.sp
+.De
+.LP
+The Porthole widget provides geometry management of a list of arbitrary
+widgets, only one of which may be managed at any particular time.
+The managed child widget is reparented within the porthole and is moved around
+by the application (typically under the control of a Panner widget).
+.NH 3
+Resources
+.LP
+When creating a Porthole widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "Porthole widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+children ReadOnly WidgetList R NULL
+colormap Colormap Colormap Parent's Colormap
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+height Height Dimension A see \fBLayout Semantics\fP
+mappedWhenManaged MappedWhenManaged Boolean True
+numChildren ReadOnly Cardinal R 0
+reportCallback ReportCallback Callback NULL
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+translations Translations TranslationTable NULL
+width Width Dimension A see \fBLayout Semantics\fP
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.Ch
+.Cm
+.Dp
+.Dc
+.Hw
+.Mm
+.Nc
+.IP \fBreportCallback\fP 1.5i
+A list of functions to invoke whenever the managed child widget changes
+size or position.
+.Sc
+.Se
+.Tr
+.Xy
+.NH 3
+Layout Semantics
+.IN "Porthole widget" "layout semantics"
+.LP
+The Porthole widget allows its managed child to request any size
+that is as large
+or larger than the Porthole itself and any location so long as the child
+still obscures all of the Porthole. This widget typically is used with a
+Panner widget.
+.NH 3
+Porthole Callbacks
+.IN "Porthole widget" "callbacks"
+.LP
+The functions registered on the \fBreportCallback\fP list are invoked whenever
+the managed child changes size or position:
+.IN "ReportProc" "" "@DEF@"
+.FD 0
+void ReportProc(\fIporthole\fP, \fIclient_data\fP, \fIreport\fP)
+.br
+ Widget \fIporthole\fP;
+.br
+ XtPointer \fIclient_data\fP;
+.br
+ XtPointer \fIreport\fP; /* (XawPannerReport *) */
+.FN
+.IP \fIporthole\fP 1i
+Specifies the Porthole widget.
+.IP \fIclient_data\fP 1i
+Specifies the client data.
+.IP \fIreport\fP 1i
+Specifies a pointer to an \fBXawPannerReport\fP structure containing
+the location and size of the slider and the size of the canvas.
+
diff --git a/libXaw/spec/Repeater b/libXaw/spec/Repeater
new file mode 100644
index 000000000..93872939c
--- /dev/null
+++ b/libXaw/spec/Repeater
@@ -0,0 +1,184 @@
+.\" $Xorg: Repeater,v 1.3 2000/08/17 19:42:27 cpqbld Exp $
+.NH 2
+Repeater Widget
+.XS
+ Repeater Widget
+.XE
+.IN "Repeater widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application header file <X11/Xaw/Repeater.h>
+.IN "Repeater.h" ""
+Class header file <X11/Xaw/RepeaterP.h>
+.IN "RepeaterP.h" ""
+Class repeaterWidgetClass
+.IN "repeaterWidgetClass" ""
+Class Name Repeater
+.IN "Repeater widget" "class name"
+Superclass Command
+.sp
+.De
+.LP
+The Repeater widget is a subclass of the Command widget; see the
+Command documentation for details. The difference is that the Repeater can call its
+registered callbacks repeatedly, at an increasing rate. The default translation
+does so for the duration the user holds down pointer button 1 while the pointer
+is on the Repeater.
+.NH 3
+Resources
+.LP
+When creating a Repeater widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "Repeater widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+bitmap Bitmap Pixmap None
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+callback Callback XtCallbackList NULL
+colormap Colormap Colormap Parent's Colormap
+cornerRoundPercent CornerRoundPercent Dimension 25
+cursor Cursor Cursor None
+cursorName Cursor String NULL
+decay Decay Int 5
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+encoding Encoding UnsignedChar XawTextEncoding8bit
+flash Boolean Boolean False
+font Font XFontStruct XtDefaultFont
+fontSet FontSet XFontSet XtDefaultFontSet
+foreground Foreground Pixel XtDefaultForeground
+height Height Dimension A graphic height + 2 * \fBinternalHeight\fP
+highlightThickness Thickness Dimension A 2 (0 if Shaped)
+initialDelay Delay Int 200
+insensitiveBorder Insensitive Pixmap GreyPixmap
+internalHeight Height Dimension 2
+internalWidth Width Dimension 4
+international International Boolean C False
+justify Justify Justify XtJustifyCenter (center)
+label Label String name of widget
+leftBitmap LeftBitmap Bitmap None
+mappedWhenManaged MappedWhenManaged Boolean True
+minimumDelay MinimumDelay Int 10
+pointerColor Foreground Pixel XtDefaultForeground
+pointerColorBackground Background Pixel XtDefaultBackground
+repeatDelay Delay Int 50
+resize Resize Boolean True
+screen Screen Pointer R Parent's Screen
+sensitive Sensitive Boolean True
+shapeStyle ShapeStyle ShapeStyle Rectangle
+startCallback StartCallback Callback NULL
+stopCallback StopCallback Callback NULL
+translations Translations TranslationTable See below
+width Width Dimension A graphic width + 2 * \fBinternalWidth\fP
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+\" Resource Descriptions
+.Ac
+.As
+.Bg
+.Gp
+.Bm
+.Bc
+.Bp
+.Bw
+.Cb
+.Cm
+.Cr
+.Cu
+.Cn
+.IP \fBdecay\fP 1.5i
+The number of milliseconds that should be subtracted from each succeeding
+interval while the Repeater button is being held down until the interval
+has reached \fBminimumDelay\fP milliseconds.
+.Dp
+.Dc
+.Le
+.IP \fBflash\fP 1.5i
+Whether or not to flash the Repeater button whenever the timer goes off.
+.Lf
+.Ls
+.Lg
+.Hw
+.Ht
+.IP \fBinitialDelay\fP 1.5i
+The number of milliseconds between the beginning of the Repeater button
+being held down and the first invocation of the \fBcallback\fP function.
+.Ib
+.Ih
+.In
+.Ju
+.La
+.Ll
+.Mm
+.IP \fBminimumDelay\fP 1.5i
+The minimum time between callbacks in milliseconds.
+.Pf
+.Pb
+.IP \fBrepeatDelay\fP 1.5i
+The number of milliseconds between each callback after the first (minus an
+increasing number of \fBdecay\fPs).
+.Re
+.Sc
+.Se
+.Ss
+.IP \fBstartCallback\fP 1.5i
+The list of functions to invoke by the \fBstart\fP action (typically
+when the Repeater button is first pressed). The callback data parameter
+is set to NULL.
+.IP \fBstopCallback\fP 1.5i
+The list of functions to invoke by the \fBstop\fP action (typically
+when the Repeater button is released). The callback data parameter
+is set to NULL.
+.Tr
+.Xy
+.NH 3
+Repeater Actions
+.IN "Repeater widget" "actions"
+.LP
+The Repeater widget supports the following actions beyond those of the Command
+button:
+.IP \fBstart\fP() 1.5i
+This invokes the functions on the \fBstartCallback\fP and \fBcallback\fP lists
+and sets a timer to go off in \fBinitialDelay\fP milliseconds. The timer
+will cause the \fBcallback\fP functions to be invoked with increasing
+frequency until the \fBstop\fP action occurs.
+.IP \fBstop\fP() 1.5i
+This invokes the functions on the \fBstopCallback\fP list and prevents any
+further timers from occuring until the next \fBstart\fP action.
+.LP
+.sp
+.IN "Repeater widget" "translation bindings"
+The following are the default translation bindings used by the
+Repeater widget:
+.LP
+.Ds 0
+.TA .5i 2.25i
+.ta .5i 2.25i
+ <EnterWindow>: highlight(\|)
+ <LeaveWindow>: unhighlight(\|)
+ <Btn1Down>: set(\|) start(\|)
+ <Btn1Up>: stop(\|) unset(\|)
+.De
+.LP
diff --git a/libXaw/spec/Scrollbar b/libXaw/spec/Scrollbar
new file mode 100644
index 000000000..faf693a3b
--- /dev/null
+++ b/libXaw/spec/Scrollbar
@@ -0,0 +1,386 @@
+.\" $Xorg: Scrollbar,v 1.3 2000/08/17 19:42:27 cpqbld Exp $
+.NH 2
+Scrollbar Widget
+.LP
+.XS
+ Scrollbar Widget
+.XE
+.IN "Scrollbar widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application header file <X11/Xaw/Scrollbar.h>
+.IN "Scrollbar.h" ""
+Class header file <X11/Xaw/ScrollbarP.h>
+.IN "ScrollbarP.h" ""
+Class scrollbarWidgetClass
+.IN "scrollbarWidgetClass" ""
+Class Name Scrollbar
+.IN "Scrollbar widget" "class name"
+Superclass Simple
+.sp
+.De
+.LP
+A Scrollbar widget is a rectangle, called the ``canvas,'' on
+which another rectangle, the ``thumb,'' moves in one
+dimension, either vertically or horizontally. A Scrollbar
+can be used alone, as a value generator, or it can be used
+within a composite widget (for example, a Viewport). When a
+Scrollbar is used to move, or ``scroll,'' the contents of
+another widget, the size and the position of the thumb usually give
+feedback as to what portion of the other widget's contents
+are visible.
+.LP
+Each pointer button invokes a specific action. Pointer
+buttons 1 and 3 do not move the thumb automatically.
+Instead, they return the pixel position of the cursor on the
+scroll region. When pointer button 2 is clicked, the thumb
+moves to the current pointer position. When pointer button
+2 is held down and the pointer is moved, the thumb follows
+the pointer.
+.LP
+The pointer cursor in the scroll region changes depending on the current
+action. When no pointer button is pressed, the cursor appears as a
+double-headed arrow that points in the direction that scrolling can
+occur. When pointer button 1 or 3 is pressed, the cursor appears as a
+single-headed arrow that points in the logical direction that the thumb
+will move. When pointer button 2 is pressed, the cursor
+appears as an arrow that points to the top or the left of the thumb.
+.LP
+When the user scrolls, the application receives notification
+through callback procedures. For both discrete scrolling actions, the
+callback returns the Scrollbar widget, the client_data, and the pixel
+position of the pointer when the button was released. For continuous
+scrolling, the callback routine returns the scroll bar widget, the
+client data, and the current relative position of the thumb. When the
+thumb is moved using pointer button 2, the callback procedure is invoked
+continuously. When either button 1 or 3 is pressed, the callback
+procedure is invoked only when the button is released and the client
+callback procedure is responsible for moving the thumb.
+.NH 3
+Resources
+.LP
+When creating a Scrollbar widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "Scrollbar widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+colormap Colormap Colormap parent's Colormap
+cursor Cursor Cursor None
+cursorName Cursor String NULL
+depth Depth int C parent's Depth
+destroyCallback Callback XtCallbackList NULL
+foreground Foreground Pixel XtDefaultForeground
+height Height Dimension A depends on orientation
+insensitiveBorder Insensitive Pixmap GreyPixmap
+international International Boolean C False
+jumpProc Callback XtCallbackList NULL
+length Length Dimension 1
+mappedWhenManaged MappedWhenManaged Boolean True
+minimumThumb MinimumThumb Dimension 7
+orientation Orientation Orientation XtorientVertical (vertical)
+pointerColor Foreground Pixel XtDefaultForeground
+pointerColorBackground Background Pixel XtDefaultBackground
+screen Screen Screen R parent's Screen
+scrollDCursor Cursor Cursor XC_sb_down_arrow
+scrollHCursor Cursor Cursor XC_sb_h_double_arrow
+scrollLCursor Cursor Cursor XC_sb_left_arrow
+scrollProc Callback XtCallbackList NULL
+scrollRCursor Cursor Cursor XC_sb_right_arrow
+scrollUCursor Cursor Cursor XC_sb_up_arrow
+scrollVCursor Cursor Cursor XC_sb_v_arrow
+sensitive Sensitive Boolean True
+shown Shown Float 0.0
+thickness Thickness Dimension 14
+thumb Thumb Bitmap GreyPixmap
+thumbProc Callback XtCallbackList NULL
+topOfThumb TopOfThumb Float 0.0
+translations Translations TranslationTable See below
+width Width Dimension A depends on orientation
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.Cm
+.Cu
+.Cn
+.Dp
+.Dc
+.IP \fBforeground\fP 1.5i
+A pixel value which indexes the widget's colormap to derive the color
+used to draw the thumb.
+.Hw
+.Ib
+.Ix
+.IP \fBjumpProc\fP 1.5i
+All functions on this callback list are called when the
+\fBNotifyThumb\fP action is invoked. See the \fBScrollbar
+Actions\fP section for details.
+.IP \fBlength\fP 1.5i
+The height of a vertical scrollbar or the width of a horizontal scrollbar.
+.Mm
+.IP \fBminimumThumb\fP 1.5i
+The smallest size, in pixels, to which the thumb can shrink.
+.IP \fBorientation\fP 1.5i
+The orientation is the direction that the thumb will be allowed to move.
+This value can be either \fBXtorientVertical\fP or
+\fBXtorientHorizontal\fP.
+.IN "XtorientVertical" ""
+.IN "XtorientHorizontal" ""
+.IN "conversions" "Orientation"
+.Rs "vertical \fPand\fB horizontal"
+.Pf
+.Pb
+.Sc
+.IP \fBscrollDCursor\fP 1.5i
+This cursor is used when scrolling backward in a vertical scrollbar.
+.IP \fBscrollHCursor\fP 1.5i
+This cursor is used when a horizontal scrollbar is inactive.
+.IP \fBscrollLCursor\fP 1.5i
+This cursor is used when scrolling forward in a horizontal scrollbar.
+.IP \fBscrollProc\fP 1.5i
+All functions on this callback list may be called when the
+\fBNotifyScroll\fP action is invoked. See the \fBScrollbar
+Actions\fP section for details.
+.IP \fBscrollRCursor\fP 1.5i
+This cursor is used when scrolling backward in a horizontal scrollbar,
+or when thumbing a vertical scrollbar.
+.IP \fBscrollUCursor\fP 1.5i
+This cursor is used when scrolling forward in a vertical scrollbar, or when
+thumbing a horizontal scrollbar.
+.IP \fBscrollVCursor\fP 1.5i
+This cursor is used when a vertical scrollbar is inactive.
+.Se
+.IP \fBshown\fP 1.5i
+This is the size of the thumb, expressed as a percentage (0.0 - 1.0)
+of the length of the scrollbar.
+.IP \fBthickness\fP 1.5i
+The width of a vertical scrollbar or the height of a horizontal scrollbar.
+.IP \fBthumb\fP 1.5i
+This pixmap is used to tile (or stipple) the thumb of the scrollbar. If
+no tiling is desired, then set this resource to \fBNone\fP. This
+resource will accept either a bitmap or a pixmap that is the same depth
+as the window. The resource converter for this resource constructs
+bitmaps from the contents of files. (See \fBConverting Bitmaps\fP for
+details.)
+.IP \fBtopOfThumb\fP 1.5i
+The location of the top of the thumb, as a percentage (0.0 - 1.0)
+of the length of the scrollbar. This resource was called \fBtop\fP in
+previous versions of the Athena widget set. The name collided with the
+a Form widget constraint resource, and had to be changed.
+.Tr
+.Xy
+.NH 3
+Scrollbar Actions
+.IN "Scrollbar widget" "actions"
+.LP
+The actions supported by the Scrollbar widget are:
+.IP \fBStartScroll\fP(\fIvalue\fP) 1.5i
+The possible \fIvalues\fP are Forward, Backward, or Continuous.
+This must be the first action to begin a new movement.
+.IP \fBNotifyScroll\fP(\fIvalue\fP) 1.5i
+The possible \fIvalues\fP are Proportional or FullLength. If the
+argument to StartScroll was Forward or Backward, NotifyScroll executes
+the \fBscrollProc\fP callbacks and passes either; the position of the
+pointer, if \fIvalue\fP is Proportional, or the full length of the
+scroll bar, if \fIvalue\fP is FullLength. If the argument to
+StartScroll was Continuous, NotifyScroll returns without executing any
+callbacks.
+.IP \fBEndScroll\fP(\^) 1.5i
+This must be the last action after a movement is complete.
+.IP \fBMoveThumb\fP(\^) 1.5i
+Repositions the Scrollbar's thumb to the current pointer location.
+.IP \fBNotifyThumb\fP(\^)\ \ \ 1.5i
+Calls the
+.PN jumpProc
+callbacks and passes the relative position of the
+pointer as a percentage of the scroll bar length.
+.LP
+.sp
+The default bindings for Scrollbar are:
+.IN "Scrollbar widget" "default translation table"
+.LP
+.Ds 0
+.TA .5i 1.75i
+.ta .5i 1.75i
+ <Btn1Down>: StartScroll(Forward)
+ <Btn2Down>: StartScroll(Continuous) MoveThumb(\|) NotifyThumb(\|)
+ <Btn3Down>: StartScroll(Backward)
+ <Btn2Motion>: MoveThumb(\|) NotifyThumb(\|)
+ <BtnUp>: NotifyScroll(Proportional) EndScroll(\|)
+.De
+.LP
+.sp
+Examples of additional bindings a user might wish to specify in a
+resource file are:
+.LP
+.Ds 0
+.TA .5i 2.25i
+.ta .5i 2.25i
+*Scrollbar.Translations: \\
+ ~Meta<Key>space: StartScroll(Forward) NotifyScroll(FullLength) \\n\\
+ Meta<Key>space: StartScroll(Backward) NotifyScroll(FullLength) \\n\\
+ EndScroll(\|)
+.De
+.NH 3
+Scrollbar Callbacks
+.IN "Scrollbar widget" "callbacks"
+.LP
+There are two callback lists provided by the Scrollbar widget.
+The procedural interface for these functions is described here.
+.LP
+The calling interface to the \fBscrollProc\fP callback procedure is:
+.IN "ScrollProc" "" "@DEF@"
+.FD 0
+void ScrollProc(\fIscrollbar\fP, \fIclient_data\fP, \fIposition\fP)
+.br
+ Widget \fIscrollbar\fP;
+.br
+ XtPointer \fIclient_data\fP;
+.br
+ XtPointer \fIposition\fP; /* int */
+.FN
+.IP \fIscrollbar\fP 1i
+Specifies the Scrollbar widget.
+.IP \fIclient_data\fP 1i
+Specifies the client data.
+.IP \fIposition\fP 1i
+Specifies a pixel position in integer form.
+.LP
+The \fBscrollProc\fP callback is used for incremental scrolling
+and is called by the \fBNotifyScroll\fP action.
+The position argument is a signed quantity and should be cast to an int
+when used. Using the default button bindings, button 1 returns a
+positive value, and button 3 returns a negative value. In both cases,
+the magnitude of the value is the distance of the pointer in
+pixels from the top (or left) of the Scrollbar. The value will never
+be greater than the length of the Scrollbar.
+.LP
+.sp
+The calling interface to the \fBjumpProc\fP callback procedure is:
+.IN "jumpProc" "" "@DEF@"
+.FD 0
+void JumpProc(\fIscrollbar\fP, \fIclient_data\fP, \fIpercent\fP)
+.br
+ Widget \fIscrollbar\fP;
+.br
+ XtPointer \fIclient_data\fP;
+.br
+ XtPointer \fIpercent_ptr\fP; /* float* */
+.FN
+.IP \fIscrollbar\fP 1i
+Specifies the ID of the scroll bar widget.
+.IP \fIclient_data\fP 1i
+Specifies the client data.
+.IP \fIpercent_ptr\fP 1i
+Specifies the floating point position of the thumb (0.0 \- 1.0).
+.LP
+The \fBjumpProc\fP callback is used to implement smooth scrolling and
+is called by the \fBNotifyThumb\fP action. Percent_ptr must be cast
+to a pointer to float before use; i.e.
+.LP
+.Ds 0
+.TA .5i
+.ta .5i
+ float percent = *(float*)percent_ptr;
+.De
+.LP
+With the default button bindings, button 2 moves the thumb interactively,
+and the \fBjumpProc\fP is called on each new position of the pointer,
+while the pointer button remains down. The value specified by
+\fIpercent_ptr\fP is the current location of the thumb (from the top or
+left of the Scrollbar) expressed as a percentage of the length of the
+Scrollbar.
+.NH 3
+Convenience Routines
+.LP
+.IN "Scrollbar widget" "setting thumb values"
+To set the position and length of a Scrollbar thumb, use
+.PN XawScrollbarSetThumb .
+.IN "XawScrollbarSetThumb" "" "@DEF@"
+.FD 0
+void XawScrollbarSetThumb(\fIw\fP, \fItop\fP, \fIshown\fP)
+.br
+ Widget \fIw\fP;
+.br
+ float \fItop\fP;
+.br
+ float \fIshown\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Scrollbar widget.
+.IP \fItop\fP 1i
+Specifies the position of the top of the thumb as a fraction of the
+length of the Scrollbar.
+.IP \fIshown\fP 1i
+Specifies the length of the thumb as a fraction of the total length
+of the Scrollbar.
+.LP
+.PN XawScrollbarThumb
+moves the visible thumb to a new position (0.0 \- 1.0) and length (0.0 \- 1.0).
+Either the top or shown arguments can be specified as \-1.0,
+in which case the current value is left unchanged.
+Values greater than 1.0 are truncated to 1.0.
+.LP
+If called from \fBjumpProc\fP, \fBXawScrollbarSetThumb\fP has no effect.
+.NH 3
+Setting Float Resources
+.IN "float resources" "setting"
+.LP
+The \fBshown\fP and \fBtopOfThumb\fP resources are of type
+\fIfloat\fP. These resources can be difficult to get into an
+argument list. The reason is that C performs an automatic cast of
+the float value to an integer value, usually truncating the important
+information. The following code fragment is one portable method of
+getting a float into an argument list.
+.sp
+.Ds 0
+.SM
+.TA 1i 2i
+.ta 1i 2i
+ top = 0.5;
+ if (sizeof(float) > sizeof(XtArgVal)) {
+ /*
+ \ * If a float is larger than an XtArgVal then pass this
+ \ * resource value by reference.
+ \ */
+ XtSetArg(args[0], XtNshown, &top);
+ }
+ else {
+ /*
+ \ * Convince C not to perform an automatic conversion, which
+ \ * would truncate 0.5 to 0.
+ \ */
+ XtArgVal * l_top = (XtArgVal *) &top;
+ XtSetArg(args[0], XtNshown, *l_top);
+ }
+.NL
+.De
+.sp
diff --git a/libXaw/spec/Simple b/libXaw/spec/Simple
new file mode 100644
index 000000000..a030d4012
--- /dev/null
+++ b/libXaw/spec/Simple
@@ -0,0 +1,95 @@
+.\" $Xorg: Simple,v 1.3 2000/08/17 19:42:27 cpqbld Exp $
+.NH 2
+Simple Widget
+.XS
+ Simple Widget
+.XE
+.IN "Simple widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application Header file <Xaw/Simple.h>
+.IN "Simple.h" ""
+Class Header file <Xaw/SimpleP.h>
+.IN "SimpleP.h" ""
+Class simpleWidgetClass
+.IN "simpleWidgetClass"
+Class Name Simple
+.IN "Simple widget" "class name"
+Superclass Core
+.sp
+.De
+.LP
+The Simple widget is not very useful by itself, as it has no semantics
+of its own. It main purpose is to be used as a common superclass for
+the other \fIsimple\fP Athena widgets. This widget adds six resources
+to the resource list provided by the Core widget and its superclasses.
+.NH 3
+Resources
+.LP
+When creating a Simple widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "Simple widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+colormap Colormap Colormap Parent's Colormap
+cursor Cursor Cursor None
+cursorName Cursor String NULL
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+height Height Dimension 0
+insensitiveBorder Insensitive Pixmap GreyPixmap
+international International Boolean C False
+mappedWhenManaged MappedWhenManaged Boolean True
+pointerColor Foreground Pixel XtDefaultForeground
+pointerColorBackground Background Pixel XtDefaultBackground
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+translations Translations TranslationTable NULL
+width Width Dimension 0
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.Cm
+.Cu Bold
+.Cn Bold
+.Dp
+.Dc
+.Hw
+.Ib Bold
+.Ix Bold
+.Mm
+.Pf Bold
+.Pb Bold
+.Sc
+.Se
+.Tr
+.Xy
diff --git a/libXaw/spec/SimpleMenu b/libXaw/spec/SimpleMenu
new file mode 100644
index 000000000..b59e511c8
--- /dev/null
+++ b/libXaw/spec/SimpleMenu
@@ -0,0 +1,315 @@
+.\" $Xorg: SimpleMenu,v 1.3 2000/08/17 19:42:27 cpqbld Exp $
+.NH 2
+SimpleMenu Widget
+.XS
+ SimpleMenu Widget
+.XE
+.IN "SimpleMenu widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application Header file <X11/Xaw/SimpleMenu.h>
+.IN "SimpleMenu.h" ""
+Class Header file <X11/Xaw/SimpleMenP.h>
+.IN "SimpleMenP.h" ""
+Class simpleMenuWidgetClass
+.IN "simpleMenuWidgetClass" ""
+Class Name SimpleMenu
+.IN "SimpleMenu widget" "class name"
+Superclass OverrideShell
+.sp
+.De
+.LP
+The SimpleMenu widget is a container for the menu entries. It is a
+direct subclass of shell, and is should be created with
+\fBXtCreatePopupShell\fP, not \fBXtCreateManagedWidget\fP. This is the
+only part of the menu that
+actually is associated with a window. The SimpleMenu serves as the glue to bind
+the individual menu entries together into a menu.
+.NH 3
+Resources
+.LP
+.IN "SimpleMenu widget" "resources"
+.LP
+The resources associated with the SimpleMenu widget control aspects
+that will affect the entire menu.
+.TS H
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+allowShellResize AllowShellResize Boolean True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+backingStore BackingStore BackingStore see below
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+bottomMargin VerticalMargins Dimension 0
+children ReadOnly WidgetList R NULL
+createPopupChildProc CreatePopupChildProc Function NULL
+colormap Colormap Colormap Parent's Colormap
+cursor Cursor Cursor None
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+geometry Geometry String NULL
+height Height Dimension Enough space to contain all entries
+label Label String NULL
+labelClass LabelClass Pointer SmeBSBObjectClass
+mappedWhenManaged MappedWhenManaged Boolean True
+menuOnScreen MenuOnScreen Boolean True
+numChildren ReadOnly Cardinal R 0
+overrideRedirect OverrideRedirect Boolean True
+popdownCallback Callback XtCallbackList NULL
+popupCallback Callback XtCallbackList NULL
+popupOnEntry PopupOnEntry Widget A Label or first entry
+rowHeight RowHeight Dimension 0
+saveUnder SaveUnder Boolean False
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+topMargin VerticalMargins Dimension 0
+translations Translations TranslationTable See below
+visual Visual Visual CopyFromParent
+width Width Dimension Width of widest entry
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.IP \fBbackingStore\fP 1.5i
+.IN "conversions" "BackingStore"
+Determines what type of backing store will be used for the menu. Legal
+values for this resource are \fBNotUseful\fP, \fBWhenMapped\fP, and
+\fBAlways\fP. These values are the backing-store integers defined in
+<X11/X.h>.
+.Rs "notUseful, whenMapped, always, \fPand\fP default"
+If \fBdefault\fP is specified (the default behavior) the server will use
+whatever it thinks is appropriate.
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.IP \fBbottomMargin\fP 1.5i
+.br
+.ns
+.IP \fBtopMargin\fP 1.5i
+The amount of space between the top or bottom of the menu and the menu entry
+closest to that edge.
+.Ch
+.Cm
+.IP \fBcursor\fP 1.5i
+The shape of the mouse pointer whenever it is in this widget.
+.Dp
+.Dc
+.IP geometry 1.5i
+If this resource is specified it will override the x, y, width and
+height of this widget. The format of this string is
+[<\fIwidth\fP>x<\fIheight\fP>][{+ -} <\fIxoffset\fP> {+ -}<\fIyoffset\fP>].
+.Hw
+.IP \fBlabel\fP 1.5i
+This label will be placed at the top of the SimpleMenu, and may not be
+highlighted. The name of the
+label object is \fBmenuLabel\fP. Using this name it is possible to
+modify the label's attributes through the resource database. When the label
+is created, the \fBlabel\fP is hard coded to the value of \fBlabel\fP, and
+\fBjustify\fP is hard coded as \fBXtJustifyCenter\fP.
+.IP \fBlabelClass\fP 1.5i
+Specifies the type of Sme object created as the menu label.
+.Mm
+.IP \fBmenuOnScreen\fP 1.5i
+If the menu is automatically positioned under the cursor with the
+\fBXawPositionSimpleMenu\fP action, and this resource is \fBTrue\fP,
+then the menu will always be fully visible on the screen.
+.Nc
+.IP overrideRedirect 1.5i
+Determines the value of the override_redirect attribute of the
+SimpleMenu's window. The override_redirect attribute of a window
+determines whether or not a window manager may interpose itself between
+this window and the root window of the display. For more information
+see the \fIInterclient Communications Conventions Manual\fP.
+.IP popdownCallback 1.5i
+.br
+.ns
+.IP popupCallback 1.5i
+These callback functions are called by the Xt Intrinsics whenever the
+shell is popped up or down (See \fI\*(xT\fP for details).
+.IP \fBpopupOnEntry\fP 1.5i
+The \fBXawPositionSimpleMenu\fP action will, by default, popup the
+SimpleMenu with its label (or first entry) directly under the
+pointer. To popup the menu under
+another entry, set this resource to the menu entry that should be
+under the pointer, when the menu is popped up. This allows the
+application to offer the user a default menu entry that can be selected
+with out moving the pointer.
+.IP \fBrowHeight\fP 1.5i
+If this resources is zero (the default) then each menu entry will be
+given its desired height. If this resource has any other value then
+all menu entries will be forced to be \fBrowHeight\fP pixels high.
+.IP saveUnder 1.5i
+If this is \fBTrue\fP then save unders will be active on the menu's window.
+.Sc
+.Se
+.Tr
+.Xy
+.NH 3
+SimpleMenu Actions
+.IN "SimpleMenu widget" "actions"
+.LP
+The SimpleMenu widget supports the following actions:
+.IP \(bu 5
+Switching the entry under the mouse pointer between
+the foreground and background colors with \fBhighlight\fP
+and \fBunhighlight\fP
+.IP \(bu 5
+Processing menu entry callbacks with \fBnotify\fP
+.sp
+.LP
+.IN "SimpleMenu widget" "default translations"
+The following are the default translation bindings used
+by the SimpleMenu widget:
+.LP
+.sp
+.Ds 0
+.TA .5i 2.25i
+.ta .5i 2.25i
+ <EnterWindow>: highlight(\|)
+ <LeaveWindow>: unhighlight(\|)
+ <BtnMotion>: highlight(\|)
+ <BtnUp>: MenuPopdown(\|) notify(\|) unhighlight(\|)
+.De
+.sp
+.LP
+.IN "SimpleMenu widget" "MenuPopdown routine"
+The user can pop down the menu without activating any of the callback
+functions by releasing the pointer button when no menu item is
+highlighted.
+.sp
+.LP
+The full list of actions supported by SimpleMenu is:
+.IP \fBhighlight\fP() 1.5i
+Highlight the menu entry that is currently under the pointer.
+Only a item that is highlighted will be notified when the \fBnotify\fP
+action is invoked. The look of a highlighted entry is determined by
+the menu entry.
+.IP \fBunhighlight\fP(\|) 1.5i
+Unhighlights the currently highlighted menu item, and returns it to
+its normal look.
+.IP \fBnotify\fP(\|) 1.5i
+Notifies the menu entry that is currently highlighted that is has been
+selected. It is the responsibility of the menu entry to take the
+appropriate action.
+.IP \fBMenuPopdown\fP(\fImenu\fP)
+This action is defined in \fI\*(xT\fP.
+.IN "SimpleMenu widget" "MenuPopdown routine"
+.NH 3
+Positioning the SimpleMenu
+.IN "XawPositionSimpleMenu" "" "@DEF@"
+.IN "SimpleMenu widget" "positioning" "@DEF@"
+.LP
+If the SimpleMenu widget is to be used as a pulldown menu then the
+MenuButton widget, or some other outside means should be used to place
+the menu when it is popped up.
+.LP
+If popup menus are desired it will be necessary to add the
+\fBXawPositionSimpleMenu\fP and \fBMenuPopup\fP actions to the
+translation table of the widget that will be popping up the menu. The
+\fBMenuPopup\fP action is described in \fI\*(xT\fP.
+\fBXawPositionSimpleMenu\fP is a global action procedure registered by
+the SimpleMenu widget when the first one is created or the convenience
+routine \fBXawSimpleMenuAddGlobalActions\fP is called.
+.LP
+Translation writers should be aware that Xt does not register grabs on
+``don't care'' modifiers, and therefore the left hand side of the
+production should be written to exclude unspecified modifiers.
+For example these are the translations needed to popup some of
+\fBxterm's\fP menus:
+.sp
+.LP
+.Ds 0
+.TA .5i 2.25i
+.ta .5i 2.25i
+ !Ctrl<Btn1Down>: XawPositionSimpleMenu(xterm) MenuPopup(xterm)
+ !Ctrl<Btn2Down>: XawPositionSimpleMenu(modes) MenuPopup(modes)
+.De
+.sp 1
+.LP
+.IP \fBXawPositionSimpleMenu\fP(\fImenu\fP) 2.25i
+The \fBXawPositionSimpleMenu\fP routine will search for the menu name
+passed to it using \fBXtNameToWidget\fP starting with the widget
+invoking the action as the reference widget. If it is unsuccessful it
+will continue up the widget tree using each of the invoking widget's
+ancestors as the reference widget. If it is still unsuccessful it will
+print a warning message and give up. \fBXawPositionSimpleMenu\fP will
+position the menu directly under the pointer cursor. The menu will be
+placed so that the pointer cursor is centered on the entry named by the
+\fBpopupOnEntry\fP resource. If the \fBmenuOnScreen\fP resource is
+\fBTrue\fP then the menu will always be fully visible on the screen.
+.NH 3
+Convenience Routines
+.NH 4
+Registering the Global Action Routines
+.LP
+.IN "XawPositionSimpleMenu" ""
+The \fBXawPositionSimpleMenu\fP action routine may often be invoked
+before any menus have been created. This can occur when an
+application uses dynamic menu creation. In these cases an application will
+need to register this global action routine by calling
+\fBXawSimpleMenuAddGlobalActions\fP:
+.IN "XawSimpleMenuAddGlobalActions" "" "@DEF@"
+.FD 0
+void XawSimpleMenuAddGlobalActions(\fIapp_con\fP)
+.br
+ XtAppContext \fIapp_con\fP;
+.FN
+.IP \fIapp_con\fP 1i
+Specifies the application context in which this action should be registered.
+.LP
+This function need only be called once per application and must be
+called before any widget that uses \fBXawPositionSimpleMenu\fP action
+is realized.
+.NH 4
+Getting and Clearing the Current Menu Entry
+.LP
+To get the currently highlighted menu entry use
+\fBXawSimpleMenuGetActiveEntry\fP:
+.IN "XawSimpleMenuGetActiveEntry" "" "@DEF@"
+.FD 0
+Widget XawSimpleMenuGetActiveEntry(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the SimpleMenu widget.
+.LP
+This function returns the menu entry that is
+currently highlighted, or NULL if no entry is highlighted.
+.LP
+.sp
+To clear the SimpleMenu widget's internal information about the
+currently highlighted menu entry use
+\fBXawSimpleMenuClearActiveEntry\fP:
+.IN "XawSimpleMenuClearActiveEntry" "" "@DEF@"
+.FD 0
+Widget XawSimpleMenuClearActiveEntry(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the SimpleMenu widget.
+.LP
+This function unsets all internal references to the currently
+highlighted menu entry. It does not \fIunhighlight\fP or otherwise
+alter the appearance of the active entry. This function is primarily
+for use by implementors of menu entries.
diff --git a/libXaw/spec/Sme b/libXaw/spec/Sme
new file mode 100644
index 000000000..48eaa1510
--- /dev/null
+++ b/libXaw/spec/Sme
@@ -0,0 +1,106 @@
+.\" $Xorg: Sme,v 1.3 2000/08/17 19:42:28 cpqbld Exp $
+.NH 2
+Sme Object
+.LP
+.XS
+ Sme Object
+.XE
+.IN "Sme object" "" "@DEF@"
+.sp
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+Application Header file <X11/Xaw/Sme.h>
+.IN "Sme.h" ""
+Class Header file <X11/Xaw/SmeP.h>
+.IN "SmeP.h" ""
+Class smeObjectClass
+.IN "smeObjectClass" ""
+Class Name Sme
+.IN "Sme object" "class name"
+Superclass RectObj
+.De
+.sp
+.LP
+The Sme object is the base class for all menu entries. While this
+object is mainly intended to be subclassed, it may be used in a menu to
+add blank space between menu entries.
+.NH 3
+Resources
+.IN "SmeLine object" "resources"
+.LP
+The resources associated with the SmeLine object are defined in this
+section, and affect only the single menu entry specified by this object.
+There are no new resources added for this class, as it picks up all its
+resources from the RectObj class.
+.TS H
+lw(1.5i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+ancestorSensitive AncestorSensitive Boolean True
+callback Callback XtCallbackList NULL
+destroyCallback Callback XtCallbackList NULL
+height Height Dimension 0
+international International Boolean C False
+sensitive Sensitive Boolean True
+width Width Dimension 1
+.sp 3p
+_
+.TE
+.As
+.Dc
+.Hw
+Keep in mind that the SimpleMenu widget will force all menu items to
+be the width of the widest entry.
+.Ix Bold
+.Se
+.NH 3
+Subclassing the Sme Object
+.IN "Sme object" "subclassing" "@DEF"
+.LP
+.sp
+To Create a new Sme object \fIclass\fP you will need to define three class methods.
+These methods allow the SimpleMenu to highlight and unhighlight the
+menu entry as the pointer cursor moves over it, as well as notify the
+entry when the user has selected it. All of
+these methods may be inherited from the Sme object, although the default
+semantics are not very interesting.
+.IP \fBHighlight\fP(\|) 1i
+.IN "Sme object" "Highlight method"
+Called to put the menu entry into the highlighted state.
+.IP \fBUnhighlight\fP(\|) 1i
+.IN "Sme object" "Unhighlight method"
+Called to return the widget to its normal (unhighlighted) state.
+.IP \fBNotify\fP(\|)
+.IN "Sme object" "Notify method"
+Called when the user selects this menu entry.
+.LP
+.sp
+Other then these methods, creating a new object
+is straight forward. Here is some information that may help you
+avoid some common mistakes.
+.IP 1) 3n
+Objects can be zero pixels high.
+.IP 2) 3n
+Objects draw on their parent's window, therefore the Drawing dimensions
+are different from those of widgets. For instance, y locations vary
+from \fBy\fP to \fBy + height\fP, not \fB0\fP to \fBheight\fP.
+.IP 3) 3n
+XtSetValues calls may come from the application while the Sme is highlighted,
+and if the SetValues method returns True, will result in an expose event.
+The SimpleMenu may later call the menu entry's \fBunhighlight\fP
+procedure. However, due to the asynchronous nature of
+X, the expose event generated by \fBXtSetValues\fP will come \fIafter\fP
+this unhighlight.
+.IP 4) 3n
+Remember that your subclass of the Sme does not own the
+window. Share the space with other menu entries, and refrain
+from drawing outside the subclass's own section of the menu.
+
diff --git a/libXaw/spec/SmeBSB b/libXaw/spec/SmeBSB
new file mode 100644
index 000000000..2cfae9d8f
--- /dev/null
+++ b/libXaw/spec/SmeBSB
@@ -0,0 +1,125 @@
+.\" $Xorg: SmeBSB,v 1.3 2000/08/17 19:42:28 cpqbld Exp $
+.NH 2
+SmeBSB Object
+.LP
+.XS
+ SmeBSB Object
+.XE
+.IN "SmeBSB object" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application Header file <X11/Xaw/SmeBSB.h>
+.IN "SmeBSB.h" ""
+Class Header file <X11/Xaw/SmeBSBP.h>
+.IN "SmeBSBP.h" ""
+Class smeBSBObjectClass
+.IN "smeBSBObjectClass" ""
+Class Name SmeBSB
+.IN "SmeBSB object" "class name"
+Superclass Sme
+.sp
+.De
+.LP
+The SmeBSB object is used to create a menu entry that contains a string,
+and optional bitmaps in its left and right margins. Since each menu
+entry is an independent object, the application is able to change the
+font, color, height, and other attributes of the menu entries, on an
+entry by entry basis. The format of the string may either be the encoding
+of the 8 bit \fBfont\fP utilized, or in a multi-byte encoding for use with a
+\fBfontSet\fP.
+.NH 3
+Resources
+.IN "SmeBSB object" "resources"
+.LP
+The resources associated with the SmeBSB object are defined in this section,
+and affect only the single menu entry specified by this object.
+.TS H
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+ancestorSensitive AncestorSensitive Boolean D True
+callback Callback Callback NULL
+destroyCallback Callback XtCallbackList NULL
+font Font FontStruct XtDefaultFont
+fontSet FontSet XFontSet XtDefaultFontSet
+foreground Foreground Pixel XtDefaultForeground
+height Height Dimension A Font height + \fBvertSpace\fP
+international International Boolean C False
+justify Justify Justify XtjustifyLeft
+label Label String NULL
+leftBitmap LeftBitmap Pixmap XtUnspecifiedPixmap
+leftMargin leftMargin Dimension 4
+rightBitmap RightBitmap Pixmap XtUnspecifiedPixmap
+rightMargin rightMargin Dimension 4
+sensitive Sensitive Boolean True
+vertSpace VertSpace int 25
+width Width Dimension A TextWidth + margins
+.sp 3p
+_
+.TE
+.As
+.IP \fBcallback\fP 1.5i
+All callback functions on this list are called when the SimpleMenu
+\fInotifies\fP this entry that the user has selected it.
+.Dc
+.IP \fBfont\fP 1.5i
+The text font to use when displaying the \fBlabel\fP, when the
+\fBinternational\fP resource is \fBfalse\fP.
+.IP \fBfontSet\fP 1.5i
+The text font set to use when displaying the \fBlabel\fP, when the
+\fBinternational\fP resource is \fBtrue\fP.
+.IP \fBforeground\fP 1.5i
+A pixel value which indexes the SimpleMenu's colormap to derive the
+foreground color of the menu entry's window. This color is also
+used to render all 1's in the left and right \fBbitmaps\fP.
+.Hw
+Keep in mind that the SimpleMenu widget will force the width of all
+menu entries to be the width of the longest entry.
+.In
+.IP \fBjustify\fP 1.5i
+How the label is to be rendered between the left and right margins when
+the space is wider than the actual text. This resource may be
+specified with the values \fBXtJustifyLeft\fP, \fBXtJustifyCenter\fP,
+or \fBXtJustifyRight\fP. When specifying the justification from a
+resource file the values \fBleft\fP, \fBcenter\fP, or \fBright\fP may be
+used.
+.IP \fBlabel\fP 1.5i
+This is a the string that will be displayed in the menu entry. The
+exact location of this string within the bounds of the menu entry is
+controlled by the \fBleftMargin\fP, \fBrightMargin\fP, \fBvertSpace\fP,
+and \fBjustify\fP resources.
+.IP \fBleftBitmap\fP 1.5i
+.br
+.ns
+.IP \fBrightBitmap\fP 1.5i
+This is a name of a bitmap to display in the left or right margin of the
+menu entry. All 1's in the bitmap will be rendered in the foreground
+color, and all 0's will be drawn in the background color of the
+SimpleMenu widget. It is the
+programmers' responsibility to make sure that the menu entry is tall
+enough, and the appropriate margin wide enough to accept the bitmap.
+If care is not taken the bitmap may extend into another menu entry, or
+into this entry's label.
+.IP \fBleftMargin\fP 1.5i
+.br
+.ns
+.IP \fBrightMargin\fP 1.5i
+This is the amount of space (in pixels) that will be left between the
+edge of the menu entry and the label string.
+.Se
+.IP \fBvertSpace\fP 1.5i
+This is the amount of vertical padding, expressed as a percentage of
+the height of the font, that is to be placed around the label of a
+menu entry.. The label and bitmaps are always centered vertically
+within the menu. The default value for this
+resource (25) causes the default height to be 125% of the height of the
+font.
diff --git a/libXaw/spec/SmeLine b/libXaw/spec/SmeLine
new file mode 100644
index 000000000..5b87cd9a5
--- /dev/null
+++ b/libXaw/spec/SmeLine
@@ -0,0 +1,72 @@
+.\" $Xorg: SmeLine,v 1.3 2000/08/17 19:42:28 cpqbld Exp $
+.NH 2
+SmeLine Object
+.LP
+.XS
+ SmeLine Object
+.XE
+.IN "SmeLine object" "" "@DEF@"
+.sp
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+Application Header file <X11/Xaw/SmeLine.h>
+.IN "SmeLine.h" ""
+Class Header file <X11/Xaw/SmeLineP.h>
+.IN "SmeLineP.h" ""
+Class smeLineObjectClass
+.IN "smeLineObjectClass" ""
+Class Name SmeLine
+.IN "SmeLine object" "class name"
+Superclass Sme
+.De
+.sp
+.LP
+The SmeLine object is used to add a horizontal line or menu separator to
+a menu. Since each SmeLine is an independent object, the application
+is able to change the color, height, and other attributes of the SmeLine
+objects on an entry by entry basis. This object is not selectable, and
+will not highlight when the pointer cursor is over it.
+.NH 3
+Resources
+.IN "SmeLine object" "resources"
+.LP
+The resources associated with the SmeLine object are defined in this section,
+and affect only the single menu entry specified by this object.
+.TS H
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+destroyCallback Callback XtCallbackList NULL
+foreground Foreground Pixel XtDefaultForeground
+height Height Dimension \fBlineWidth\fP
+international International Boolean C False
+lineWidth LineWidth Dimension 1
+stipple Stipple Pixmap XtUnspecifiedPixmap
+width Width Dimension 1
+.sp 3p
+_
+.TE
+.Dc
+.IP \fBforeground\fP 1.5i
+A pixel value which indexes the SimpleMenu's colormap to derive the
+foreground color used to draw the separator line.
+.Hw
+Keep in mind that the SimpleMenu widget will force all menu items to
+be the width of the widest entry. Thus, setting the width is generally not
+very important.
+.Ix
+.IP \fBlineWidth\fP 1.5i
+The width of the horizontal line that is to be displayed.
+.IP \fBstipple\fP 1.5i
+If a bitmap is specified for this resource, the line will be stippled
+through it. This allows the menu separator to be rendered as something
+more exciting than just a line. For instance, if you define a stipple
+that is a chain link, then your menu separators will look like chains.
diff --git a/libXaw/spec/StripChart b/libXaw/spec/StripChart
new file mode 100644
index 000000000..3a4e68338
--- /dev/null
+++ b/libXaw/spec/StripChart
@@ -0,0 +1,160 @@
+.\" $Xorg: StripChart,v 1.3 2000/08/17 19:42:28 cpqbld Exp $
+.NH 2
+StripChart Widget
+.XS
+ StripChart Widget
+.XE
+.IN "StripChart widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application Header file <Xaw/StripChart.h>
+.IN "StripChart.h" ""
+Class Header file <Xaw/StripCharP.h>
+.IN "StripCharP.h" ""
+Class stripChartWidgetClass
+.IN "stripChartWidgetClass" ""
+Class Name StripChart
+.IN "StripChart widget" "class name"
+Superclass Simple
+.sp
+.De
+.LP
+The StripChart widget is used to provide a roughly real
+time graphical chart of a single value. For example,
+it is used by the common client program \fBxload\fP
+to provide a graph of processor load. The StripChart
+reads data from an application, and updates the chart
+at the \fBupdate\fP interval specified.
+.NH 3
+Resources
+.LP
+When creating a StripChart widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "StripChart widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+colormap Colormap Colormap Parent's Colormap
+cursor Cursor Cursor None
+cursorName Cursor String NULL
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+foreground Foreground Pixel XtDefaultForeground
+getValue Callback XtCallbackList NULL
+height Height Dimension 120
+highlight Foreground Pixel XtDefaultForeground
+insensitiveBorder Insensitive Pixmap GreyPixmap
+international International Boolean C False
+jumpScroll JumpScroll int A half the width of the widget
+mappedWhenManaged MappedWhenManaged Boolean True
+minScale Scale int 1
+pointerColor Foreground Pixel XtDefaultForeground
+pointerColorBackground Background Pixel XtDefaultBackground
+screen Screen Pointer R Parent's Screen
+sensitive Sensitive Boolean True
+translations Translations TranslationTable NULL
+update Interval int 10
+width Width Dimension 120
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.Cm
+.Cu
+.Cn
+.Dp
+.Dc
+.IP \fBforeground\fP 1.5i
+A pixel value which indexes the widget's colormap to derive the color
+that will be used to draw the graph.
+.IP \fBgetValue\fP 1.5i
+A list of callback functions to call every \fBupdate\fP seconds.
+This list should contain one function, which returns the
+value to be graphed by the StripChart widget. The following
+section describes the procedural interface. Behavior when this list has
+more than one function is undefined.
+.Hw
+.IP \fBhighlight\fP 1.5i
+A pixel value which indexes the widget's colormap to derive the color
+that will be used to draw the scale lines on the graph.
+.Ib
+.Ix
+.IP \fBjumpScroll\fP 1.5i
+When the graph reaches the right edge of the window it must be
+scrolled to the left. This resource specifies the number of pixels
+it will jump. Smooth scrolling can be achieved by setting this resource
+to 1.
+.Mm
+.IP \fBminScale\fP 1.5i
+The minimum scale for the graph. The number of divisions on the graph
+will always be greater than or equal to this value.
+.Pf
+.Pb
+.Sc
+.Se
+.Tr
+.IP \fBupdate\fP
+The number of seconds between graph updates. Each update is
+represented on the graph as a 1 pixel wide line. Every \fBupdate\fP seconds
+the \fBgetValue\fP procedure will be used to get a new graph point,
+and this point will be added to the right end of the StripChart.
+.Xy
+.NH 3
+Getting the StripChart Value
+.IN "StripChart widget" "getting the value"
+.LP
+The StripChart widget will call the application routine passed to it
+as the \fBgetValue\fP callback function every \fBupdate\fP seconds to
+obtain another point for the StripChart graph.
+.LP
+The calling interface for the \fBgetValue\fP callback is:
+.IN "StripChart widget" "getValue callback" "@DEF@"
+.FD 0
+void (*\fIgetValueProc\fP)(\fIw\fP, \fIclient_data\fP, \fIvalue\fP)
+.br
+ Widget \fIw\fP;
+.br
+ XtPointer \fIclient_data\fP;
+.br
+ XtPointer \fIvalue\fP; /* double * */
+.FN
+.IP \fIw\fP 1i
+Specifies the StripChart widget.
+.IP \fIclient_data\fP 1i
+Specifies the client data.
+.IP \fIvalue\fP 1i
+Returns a pointer to a double. The application should set the address
+pointed to by this argument to a double containing the value to be
+graphed on the StripChart.
+.LP
+This function is used by the StripChart to call an application routine.
+The routine will pass the value to be graphed back to the the StripChart
+in the \fBvalue\fP field of this routine.
+
diff --git a/libXaw/spec/TPage_Credits b/libXaw/spec/TPage_Credits
new file mode 100644
index 000000000..7301ddf63
--- /dev/null
+++ b/libXaw/spec/TPage_Credits
@@ -0,0 +1,156 @@
+.\" $Xorg: TPage_Credits,v 1.3 2000/08/17 19:42:28 cpqbld Exp $
+.\" $XdotOrg: xc/doc/specs/Xaw/TPage_Credits,v 1.2 2004/04/23 18:42:18 eich Exp $
+.ds CH
+.ds CF
+.ps 11
+.nr PS 11
+\&
+.sp 8
+.ce 5
+\s+2\fB\*(xW\fP\s-2
+
+\s+1\fBX Window System\fP\s-1
+
+\s+1\fBX Version 11, Release 7\fP\s-1
+
+\s+1\fB\*(xV\fP\s-1
+
+.sp 6
+.ce 4
+Chris D. Peterson
+.sp 6p
+formerly MIT X Consortium
+.bp
+\&
+.ps 9
+.nr PS 9
+.sp 8
+.LP
+X Window System is a trademark of The Open Group.
+.LP
+Copyright \(co 1985, 1986, 1987, 1988, 1989, 1991, 1994 X Consortium
+.LP
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the ``Software''), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+.LP
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+.LP
+THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+.LP
+Except as contained in this notice, the name of the X Consortium shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the X Consortium.
+.LP
+Copyright \(co 1985, 1986, 1987, 1988, 1989, 1991
+Digital Equipment Corporation, Maynard, Massachusetts.
+.LP
+Permission to use, copy, modify and distribute this documentation for any
+purpose and without fee is hereby granted, provided that the above copyright
+notice appears in all copies and that both that copyright notice and this
+permission notice appear in supporting documentation, and that the name of
+Digital not be used in in advertising or publicity pertaining
+to distribution of the software without specific, written prior permission.
+Digital makes no representations about the suitability of the
+software described herein for any purpose.
+It is provided ``as is'' without express or implied warranty.
+.ps 11
+.nr PS 11
+.bp 5
+.af PN i
+.ds CF \fB\\n(PN\fP
+.XS v
+Acknowledgments
+.XE
+\&
+.ce 3
+\s+1\fBAcknowledgments\fP\s-1
+.sp 2
+.na
+.LP
+Many thanks go to Ralph Swick (Project Athena / Digital) who has
+contributed much time and effort to this widget set. Previous
+versions of the widget set are largely due to his time and effort.
+Many of the improvements that I have been able to make are because he
+provided a solid foundation to build upon. While much of the effort
+has been Ralph's, many other people have contributed to the code.
+.LP
+.Ds
+Mark Ackerman (formerly Project Athena)
+Donna Converse (MIT X Consortium)
+Jim Fulton (formerly MIT X Consortium)
+Loretta Guarino-Reid (Digital WSL)
+Charles Haynes (Digital WSL)
+Rich Hyde (Digital WSL)
+Mary Larson (Digital UEG)
+Joel McCormack (Digital WSL)
+Ron Newman (formerly Project Athena)
+Jeanne Rich (Digital WSL)
+Terry Weissman (formerly Digital WSL)
+.De
+.LP
+While not much remains of the X10 toolkit, many of the ideas for this
+widget set come from that original version. The design and
+implementation of the X10 toolkit were done by:
+.LP
+.Ds
+Mike Gancarz (formerly Digital UEG)
+Charles Haynes (Digital WSL)
+Phil Karlton (formerly Digital WSL)
+Kathleen Langone (Digital UEG)
+Mary Larson (Digital UEG)
+Ram Rao (Digital UEG)
+Smokey Wallace (formerly Digital WSL)
+Terry Weissman (formerly Digital WSL)
+.De
+.LP
+I have used the formatting ideas, and some of the words from previous
+versions of this document. The X11R3 Athena widget document was
+written by:
+.LP
+.Ds
+Ralph R. Swick (Project Athena/ Digital)
+Terry Weissman (formerly Digital WSL)
+Al Mento (Digital UEG)
+.De
+.LP
+Putting this manual together was a major task in and of itself. I
+would like to thank Ralph Swick, Donna Converse, and Jim Fulton for
+taking the time to help convert my technical knowledge into legible
+text. A special thanks to Jean Diaz (O'Reilly and Associates) for
+spending nearly a month with me working out all the annoying little
+details.
+.sp
+.Ds 0
+Chris D. Peterson
+MIT X Consortium 1989
+.De
+.LP
+.sp
+The R5 edition of this document has been edited by the research staff of
+the MIT X Consortium, with significant contributions by Jim Fulton (NCD).
+.sp
+.Ds 0
+Donna Converse
+MIT X Consortium 1991
+.De
+.LP
+.sp
+The R6 edition of this document has been edited to reflect changes
+brought about by research staff of the Omron Corporation, with special
+recognition to Li Yuhong, Seiji Kuwari, and Hiroshi Kuribayashi for
+the X11R5/contrib/lib/Xaw internationalization that inspired this version.
+.sp
+.Ds 0
+Frank Sheeran
+Omron Corporation 1994
+.De
diff --git a/libXaw/spec/Template b/libXaw/spec/Template
new file mode 100644
index 000000000..b5dc050b2
--- /dev/null
+++ b/libXaw/spec/Template
@@ -0,0 +1,426 @@
+.\" $Xorg: Template,v 1.3 2000/08/17 19:42:28 cpqbld Exp $
+All Athena widgets have three separate files associated with them:
+.LP
+.IP \(bu 3
+A \*Qpublic\*U header file containing declarations needed by
+applications programmers
+.IP \(bu 3
+A \*Qprivate\*U header file containing additional declarations needed by the
+widget and any subclasses
+.IP \(bu 3
+A source code file containing the implementation of the widget
+.LP
+This separation of functions into three files is suggested for all
+widgets, but nothing in the Toolkit actually requires this format. In
+particular, a private widget created for a single application may easily
+combine the \*Qpublic\*U and \*Qprivate\*U header files into a single file, or
+merge the contents into another application header file. Similarly, the
+widget implementation can be merged into other application code.
+.LP
+.sp
+In the following example, the public header file
+.Pn < X11/Xaw/Template.h >,
+the private header file
+.Pn < X11/Xaw/TemplateP.h >
+and the source code file
+.Pn < X11/Xaw/Template.c >
+will be modified to produce the \*QWindowWidget\*U described above.
+In each case, the files have been designed so that a global string
+replacement of ``Template'' and ``template''
+with the name of your new widget, using
+the appropriate case, can be done.
+.NH 2
+Public Header File
+.LP
+The public header file contains declarations that will be required by any
+application module that needs to refer to the widget; whether to create
+an instance of the class, to perform an
+.PN XtSetValues
+operation, or to call a public routine implemented by the widget class.
+.LP
+The contents of the Template public header file,
+.Pn < X11/Xaw/Template.h >,
+are:
+.de CB
+.sp
+.Ds 0
+.SM
+.vs 10
+.in +.25i
+.TA .25i 1.4i 2.4i 2.75i 3.5i
+.ta .25i 1.4i 2.4i 2.75i 3.5i
+..
+.de CE
+.NL
+.vs 13
+.De
+.\".in -.25i
+..
+.CB
+.\".so ../../lib/Xaw/Template.h
+/* XConsortium: Template.h,v 1.2 88/10/25 17:22:09 swick Exp $ */
+/* Copyright (c) X Consortium 1987, 1988 */
+
+#ifndef _Template_h
+#define _Template_h
+
+/****************************************************************
+ *
+ * Template widget
+ *
+ ****************************************************************/
+
+/* Resources:
+
+ Name Class RepType Default Value
+ ---- ----- ------- -------------
+ background Background Pixel XtDefaultBackground
+ border BorderColor Pixel XtDefaultForeground
+ borderWidth BorderWidth Dimension 1
+ destroyCallback Callback Pointer NULL
+ height Height Dimension 0
+ mappedWhenManaged MappedWhenManaged Boolean True
+ sensitive Sensitive Boolean True
+ width Width Dimension 0
+ x Position Position 0
+ y Position Position 0
+
+*/
+
+/* define any special resource names here that are not in <X11/StringDefs.h> */
+
+#define XtNtemplateResource "templateResource"
+
+#define XtCTemplateResource "TemplateResource"
+
+/* declare specific TemplateWidget class and instance datatypes */
+
+typedef struct _TemplateClassRec* TemplateWidgetClass;
+typedef struct _TemplateRec* TemplateWidget;
+
+/* declare the class constant */
+
+extern WidgetClass templateWidgetClass;
+
+#endif /* _Template_h */
+.CE
+.LP
+.sp
+You will notice that most of this file is documentation. The crucial
+parts are the last 8 lines where macros for any private resource names
+and classes are defined and where the widget class datatypes and class
+record pointer are declared.
+.LP
+For the \*QWindowWidget\*U, we want 2 drawing colors, a callback list for
+user input and an
+\fBexposeCallback\fP callback list, and we will declare three
+convenience procedures, so we need to add
+.LP
+.sp
+.CB
+/* Resources:
+ ...
+ callback Callback Callback NULL
+ drawingColor1 Color Pixel XtDefaultForeground
+ drawingColor2 Color Pixel XtDefaultForeground
+ exposeCallback Callback Callback NULL
+ font Font XFontStruct* XtDefaultFont
+ ...
+ */
+
+#define XtNdrawingColor1 "drawingColor1"
+#define XtNdrawingColor2 "drawingColor2"
+#define XtNexposeCallback "exposeCallback"
+
+extern Pixel WindowColor1(\|/* Widget */\|);
+extern Pixel WindowColor2(\|/* Widget */\|);
+extern Font\ \ WindowFont(\|/* Widget */\|);
+.CE
+.LP
+Note that we have chosen to call the input callback list by the generic
+name, \fBcallback\fP, rather than a specific name. If widgets that define
+a single user-input action all choose the same resource name then there
+is greater possibility for an application to switch between widgets of
+different types.
+.NH 2
+Private Header File
+.LP
+The private header file contains the complete declaration of the class
+and instance structures for the widget and any additional private data
+that will be required by anticipated subclasses of the widget.
+Information in the private header file is normally hidden from the
+application and is designed to be accessed only through other public
+procedures; e.g.
+.PN XtSetValues .
+.LP
+The contents of the Template private header file,
+.Pn < X11/Xaw/TemplateP.h >,
+are:
+.CB
+.\".so ../../lib/Xaw/TemplateP.h
+/* XConsortium: TemplateP.h,v 1.2 88/10/25 17:31:47 swick Exp $ */
+
+/* Copyright (c) X Consortium 1987, 1988
+ */
+
+#ifndef _TemplateP_h
+#define _TemplateP_h
+
+#include <X11/Xaw/Template.h>
+/* include superclass private header file */
+#include <X11/CoreP.h>
+
+/* define unique representation types not found in <X11/StringDefs.h> */
+
+#define XtRTemplateResource "TemplateResource"
+
+typedef struct {
+ int empty;
+} TemplateClassPart;
+
+typedef struct _TemplateClassRec {
+ CoreClassPart core_class;
+ TemplateClassPart template_class;
+} TemplateClassRec;
+
+extern TemplateClassRec templateClassRec;
+
+typedef struct {
+ /* resources */
+ char* resource;
+ /* private state */
+} TemplatePart;
+
+typedef struct _TemplateRec {
+ CorePart core;
+ TemplatePart template;
+} TemplateRec;
+
+#endif /* _TemplateP_h */
+.CE
+.LP
+.sp
+The private header file includes the private header file of its
+superclass, thereby exposing the entire internal structure of the widget.
+It may not always be advantageous to do this; your own project
+development style will dictate the appropriate level of detail to expose
+in each module.
+.LP
+The \*QWindowWidget\*U needs to declare two fields in its instance structure to
+hold the drawing colors, a resource field for the font and a field for the
+expose and user input callback lists:
+.CB
+typedef struct {
+ /* resources */
+ Pixel color_1;
+ Pixel color_2;
+ XFontStruct* font;
+ XtCallbackList expose_callback;
+ XtCallbackList input_callback;
+ /* private state */
+ /* (none) */
+} WindowPart;
+.CE
+.NH 2
+Widget Source File
+.LP
+The source code file implements the widget class itself. The unique
+part of this file is the declaration and initialization of the
+widget class record structure and the declaration of all resources and
+action routines added by the widget class.
+.LP
+The contents of the Template implementation file,
+.Pn < X11/Xaw/Template.c >,
+are:
+.CB
+.\".so ../../lib/Xaw/Template.c
+/* XConsortium: Template.c,v 1.2 88/10/25 17:40:25 swick Exp $ */
+
+/* Copyright (c) X Consortium 1987, 1988
+ */
+
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include "TemplateP.h"
+
+static XtResource resources[] = {
+#define offset(field) XtOffsetOf(TemplateRec, template.field)
+ /* {name, class, type, size, offset, default_type, default_addr}, */
+ { XtNtemplateResource, XtCTemplateResource, XtRTemplateResource,
+ sizeof(char*), offset(resource), XtRString, (XtPointer) "default" },
+#undef offset
+};
+
+static void TemplateAction(/* Widget, XEvent*, String*, Cardinal* */);
+
+static XtActionsRec actions[] =
+{
+ /* {name, procedure}, */
+ {"template", TemplateAction},
+};
+
+static char translations[] =
+" <Key>: template(\|) \\n\\
+";
+
+TemplateClassRec templateClassRec = {
+ { /* core fields */
+ /* superclass */ (WidgetClass) &widgetClassRec,
+ /* class_name */ "Template",
+ /* widget_size */ sizeof(TemplateRec),
+ /* class_initialize */ NULL,
+ /* class_part_initialize */ NULL,
+ /* class_inited */ FALSE,
+ /* initialize */ NULL,
+ /* initialize_hook */ NULL,
+ /* realize */ XtInheritRealize,
+ /* actions */ actions,
+ /* num_actions */ XtNumber(actions),
+ /* resources */ resources,
+ /* num_resources */ XtNumber(resources),
+ /* xrm_class */ NULLQUARK,
+ /* compress_motion */ TRUE,
+ /* compress_exposure */ TRUE,
+ /* compress_enterleave */ TRUE,
+ /* visible_interest */ FALSE,
+ /* destroy */ NULL,
+ /* resize */ NULL,
+ /* expose */ NULL,
+ /* set_values */ NULL,
+ /* set_values_hook */ NULL,
+ /* set_values_almost */ XtInheritSetValuesAlmost,
+ /* get_values_hook */ NULL,
+ /* accept_focus */ NULL,
+ /* version */ XtVersion,
+ /* callback_private */ NULL,
+ /* tm_table */ translations,
+ /* query_geometry */ XtInheritQueryGeometry,
+ /* display_accelerator */ XtInheritDisplayAccelerator,
+ /* extension */ NULL
+ },
+ { /* template fields */
+ /* empty */ 0
+ }
+};
+
+WidgetClass templateWidgetClass = (WidgetClass)&templateClassRec;
+
+.CE
+The resource list for the \*QWindowWidget\*U might look like the following:
+.CB
+static XtResource resources[] = {
+#define offset(field) XtOffsetOf(WindowWidgetRec, window.field)
+ /* {name, class, type, size, offset, default_type, default_addr}, */
+ { XtNdrawingColor1, XtCColor, XtRPixel, sizeof(Pixel),
+ offset(color_1), XtRString, XtDefaultForeground },
+ { XtNdrawingColor2, XtCColor, XtRPixel, sizeof(Pixel),
+ offset(color_2), XtRString, XtDefaultForeground },
+ { XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct*),
+ offset(font), XtRString, XtDefaultFont },
+ { XtNexposeCallback, XtCCallback, XtRCallback, sizeof(XtCallbackList),
+ offset(expose_callback), XtRCallback, NULL },
+ { XtNcallback, XtCCallback, XtRCallback, sizeof(XtCallbackList),
+ offset(input_callback), XtRCallback, NULL },
+#undef offset
+};
+.CE
+.LP
+The user input callback will be implemented by an action procedure which
+passes the event pointer as call_data. The action procedure
+is declared as:
+.CB
+/* ARGSUSED */
+static void InputAction(w, event, params, num_params)
+ Widget w;
+ XEvent *event;
+ String *params; /* unused */
+ Cardinal *num_params; /* unused */
+{
+ XtCallCallbacks(w, XtNcallback, (XtPointer)event);
+}
+
+static XtActionsRec actions[] =
+{
+ /* {name, procedure}, */
+ {"input", InputAction},
+};
+.CE
+.LP
+and the default input binding will be to execute the input callbacks on
+.PN KeyPress
+and
+.PN ButtonPress :
+.LP
+.CB
+static char translations[] =
+" <Key>: input(\|) \\n\\
+ <BtnDown>: input(\|) \\
+";
+.CE
+.LP
+In the class record declaration and initialization, the only field that
+is different from the Template is the expose procedure:
+.CB
+/* ARGSUSED */
+static void Redisplay(w, event, region)
+ Widget w;
+ XEvent *event; /* unused */
+ Region region;
+{
+ XtCallCallbacks(w, XtNexposeCallback, (XtPointer)region);
+}
+
+WindowClassRec windowClassRec = {
+
+ ...
+
+ /* expose */ Redisplay,
+.CE
+.LP
+.sp
+The \*QWindowWidget\*U will also declare three public procedures to return the
+drawing colors and the font id, saving the application the effort of
+constructing an argument list for a call to
+.PN XtGetValues :
+.LP
+.CB
+Pixel WindowColor1(w)
+ Widget w;
+{
+ return ((WindowWidget)w)->window.color_1;
+}
+
+Pixel WindowColor2(w)
+ Widget w;
+{
+ return ((WindowWidget)w)->window.color_2;
+}
+
+Font WindowFont(w)
+ Widget w;
+{
+ return ((WindowWidget)w)->window.font->fid;
+}
+.CE
+.LP
+The \*QWindowWidget\*U is now complete. The application can retrieve the two
+drawing colors from the widget instance by calling either
+.PN XtGetValues ,
+or the \fBWindowColor\fP functions. The actual window created for the
+\*QWindowWidget\*U is available by calling the
+.PN XtWindow
+function.
+.ds LH
+.ds CH
+.ds RH
+.nr PN +1
+.XS
+Index
+.XE
+.tm .pn \n(PN
+.nr PN -1
+.\" print Table of Contents
+.if o .bp \" blank page to make count even
+.bp 3
+.af PN i
+.PX
diff --git a/libXaw/spec/Text b/libXaw/spec/Text
new file mode 100644
index 000000000..7fea09a19
--- /dev/null
+++ b/libXaw/spec/Text
@@ -0,0 +1,123 @@
+.\" $Xorg: Text,v 1.3 2000/08/17 19:42:28 cpqbld Exp $
+.NH 2
+Text Widget
+.LP
+.XS
+ Text Widget
+.XE
+.IN "Text widget" "" "@DEF@"
+.LP
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+Application Header file <X11/Xaw/Text.h>
+.IN "Text.h" ""
+Class Header file <X11/Xaw/TextP.h>
+.IN "TextP.h" ""
+Class textWidgetClass
+.IN "textWidgetClass" ""
+Class Name Text
+.IN "Text widget" "class name"
+Superclass Simple
+.De
+.sp 1
+.LP
+The Text widget is the glue that binds all the other pieces together, it
+maintains the internal state of the displayed text, and acts as a
+mediator between the source and sink.
+.LP
+This section lists the resources that are actually part of the
+Text widget, and explains the functionality provided by each.
+.NH 3
+Resources
+.LP
+When creating a Text widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "Text widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1.1i) lw(.5i) lw(1.9i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+autoFill AutoFill Boolean False
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+bottomMargin Margin Position 2
+colormap Colormap Colormap Parent's Colormap
+cursor Cursor Cursor XC_xterm
+cursorName Cursor String NULL
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+displayCaret Output Boolean True
+displayPosition TextPosition XawTextPosition 0
+height Height Dimension A Font height + margins
+insensitiveBorder Insensitive Pixmap GreyPixmap
+insertPosition TextPosition int 0
+leftMargin Margin Position 2
+mappedWhenManaged MappedWhenManaged Boolean True
+pointerColor Foreground Pixel XtDefaultForeground
+pointerColorBackground Background Pixel XtDefaultBackground
+resize Resize XawTextResizeMode XawtextResizeNever
+rightMargin Margin Position 4
+screen Screen Pointer R Parent's Screen
+scrollHorizontal Scroll ScrollMode XawtextScrollNever
+scrollVertical Scroll XawTextScrollMode XawtextScrollNever
+selectTypes SelectTypes XawTextSelectType* See above
+sensitive Sensitive Boolean True
+textSink TextSink Widget NULL
+textSource TextSource Widget NULL
+topMargin Margin Position 2
+translations Translations TranslationTable See above
+unrealizeCallback Callback XtCallbackList NULL
+width Width Dimension 100
+wrap Wrap WrapMode XawtextWrapNever
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Af Bold
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.Tm Bold
+.Cm
+.Cu
+.Cn
+.Dp
+.Dc
+.Tc Bold
+.Td Bold
+.Hw
+.Ib
+.Ti Bold
+.Mm
+.Pf
+.Pb
+.Tz Bold
+.Sc
+.Ts Bold
+.St Bold
+.Se
+.To Bold
+.Tr
+.Tw Bold
+.Tu Bold
+.Xy
diff --git a/libXaw/spec/TextActions b/libXaw/spec/TextActions
new file mode 100644
index 000000000..69c89c9ac
--- /dev/null
+++ b/libXaw/spec/TextActions
@@ -0,0 +1,506 @@
+.\" $Xorg: TextActions,v 1.3 2000/08/17 19:42:28 cpqbld Exp $
+.NH 2
+Text Widget Actions
+.LP
+.IN "Text widget" "actions"
+.XS
+ Actions Supported by all Text Widgets
+.XE
+.IN "Text widget" "actions" "@DEF@"
+
+All editing functions are performed by translation manager actions that may
+be specified through the \fBtranslations\fP resource in the Text widget.
+.LP
+.sp
+.Ds 0
+.TA .5i 2.5i 3i
+.ta .5i 2.5i 3i
+Insert Point Movement Delete
+ forward-character delete-next-character
+ backward-character delete-previous-character
+ forward-word delete-next-word
+ backward-word delete-previous-word
+ forward-paragraph delete-selection
+ backward-paragraph
+ beginning-of-line
+ end-of-line Selection
+ next-line select-word
+ previous-line select-all
+ next-page select-start
+ previous-page select-adjust
+ beginning-of-file select-end
+ end-of-file extend-start
+ scroll-one-line-up extend-adjust
+ scroll-one-line-down extend-end
+ insert-selection
+
+
+Miscellaneous New Line
+ redraw-display newline-and-indent
+ insert-file newline-and-backup
+ insert-char newline
+ insert-string
+ display-caret
+ focus-in Kill
+ focus-in kill-word
+ search backward-kill-word
+ multiply kill-selection
+ form-paragraph kill-to-end-of-line
+ transpose-characters kill-paragraph
+ no-op kill-to-end-of-paragraph
+ XawWMProtocols
+ reconnect-im
+.De
+.sp
+.LP
+Most of the actions take no arguments, and unless otherwise noted you
+may assume this to be the case.
+.LP
+.NH 3
+Cursor Movement Actions\fP
+.LP
+.sp
+.IP forward-character(\|) 2.0i
+.br
+.ns
+.IP backward-character(\|) 2.0i
+These actions move the insert point forward or backward one character in
+the buffer. If the insert point is at the end or beginning of a line
+this action will move the insert point to the next (or previous) line.
+.IP forward-word(\|) 2.0i
+.br
+.ns
+.IP backward-word(\|) 2.0i
+These actions move the insert point to the next or previous word boundary.
+A word boundary is defined as a Space, Tab or Carriage Return.
+.IP forward-paragraph(\|) 2.0i
+.br
+.ns
+.IP backward-paragraph(\|) 2.0i
+These actions move the insert point to the next or previous paragraph boundary.
+A paragraph boundary is defined as two Carriage Returns in a row with only
+Spaces or Tabs between them.
+.IP beginning-of-line(\|) 2.0i
+.br
+.ns
+.IP end-of-line(\|) 2.0i
+These actions move to the beginning or end of the current line. If the
+insert point is already at the end or beginning of the line then no action is taken.
+.IP next-line(\|) 2.0i
+.br
+.ns
+.IP previous-line(\|) 2.0i
+These actions move the insert point up or down one line. If the insert
+point is currently N characters from the beginning of the line then it
+will be N characters from the beginning of the next or previous line.
+If N is past the end of the line, the insert point is placed at the end
+of the line.
+.IP next-page(\|) 2.0i
+.br
+.ns
+.IP previous-page(\|) 2.0i
+These actions move the insert point up or down one page in the file.
+One page is defined as the current height of the text widget. The
+insert point is always placed at the first character of the top line by
+this action.
+.IP beginning-of-file(\|) 2.0i
+.br
+.ns
+.IP end-of-file(\|) 2.0i
+These actions place the insert point at the beginning or end of the
+current text buffer. The text widget is then scrolled the minimum
+amount necessary to make the new insert point location visible.
+.IP scroll-one-line-up(\|) 2.0i
+.br
+.ns
+.IP scroll-one-line-down(\|) 2.0i
+These actions scroll the current text field up or down by one line.
+They do not move the insert point. Other than the scrollbars this is
+the only way that the insert point may be moved off of the visible text
+area. The widget will be scrolled so that the insert point is back on
+the screen as soon as some other action is executed.
+.NH 3
+Delete Actions
+.LP
+.sp
+.IP delete-next-character(\|) 2.0i
+.br
+.ns
+.IP delete-previous-character(\|) 2.0i
+These actions remove the character immediately before or after the
+insert point. If a Carriage Return is removed then the next line is
+appended to the end of the current line.
+.IP delete-next-word(\|) 2.0i
+.br
+.ns
+.IP delete-previous-word(\|) 2.0i
+These actions remove all characters between the insert point location and
+the next word boundary. A word boundary is defined as a Space, Tab or
+Carriage Return.
+.IP delete-selection(\|) 2.0i
+This action removes all characters in the current selection.
+The selection can be set with the selection actions.
+.NH 3
+Selection Actions
+.LP
+.sp
+.IP select-word(\|) 2.0i
+This action selects the word in which the insert point is currently located.
+If the insert point is between words then it will select the previous word.
+.IP select-all(\|) 2.0i
+This action selects the entire text buffer.
+.IP select-start(\|) 2.0i
+This action sets the insert point to the current pointer location (if
+triggered by a button event) or text cursor location (if triggered by
+a key event). It
+will then begin a selection at this location. If many of these
+selection actions occur quickly in succession then the selection count
+mechanism will be invoked (see the section titled \fBText Selections for
+Application Programmers\fP for details).
+.IP select-adjust(\|) 2.0i
+This action allows a selection started with the \fIselect-start\fP
+action to be modified, as described above.
+.IP select-end(\fIname\fP[,\fIname\fP,...]) 2.0i
+This action ends a text selection that began with the \fIselect-start\fP
+action, and asserts ownership of the selection or selections specified.
+A \fIname\fP can be a selection (e.g., \fBPRIMARY\fP) or a cut buffer
+(e.g., \fBCUT_BUFFER0\fP). Note that case is important. If no
+\fInames\fP are specified, \fBPRIMARY\fP is asserted.
+.IP extend-start(\|) 2.0i
+This action finds the nearest end of the current selection, and moves it
+to the current pointer location (if triggered by a button event) or text
+cursor location (if triggered by a key event).
+.IP extend-adjust(\|) 2.0i
+This action allows a selection started with an \fIextend-start\fP action
+to be modified.
+.IP extend-end(\fIname\fP[,\fIname\fP,...]) 2.0i
+This action ends a text selection that began with the \fIextend-start\fP
+action, and asserts ownership of the selection or selections specified.
+A \fIname\fP can be a selection (e.g. \fBPRIMARY\fP) or a cut buffer
+(e.g \fBCUT_BUFFER0\fP). Note that case is important. If no names are
+given, \fBPRIMARY\fP is asserted.
+.IP insert-selection(\fIname\fP[,\fIname\fP,...]) 2.0i
+This action retrieves the value of the first (left-most) named selection
+that exists or the cut buffer that is not empty and inserts it into the
+Text widget at the current insert point location. A \fIname\fP can be a
+selection (e.g. \fBPRIMARY\fP) or a cut buffer (e.g \fBCUT_BUFFER0\fP).
+Note that case is important.
+.NH 3
+The New Line Actions
+.LP
+.sp
+.IP newline-and-indent(\|) 2.0i
+This action inserts a newline into the text and adds spaces to
+that line to indent it to match the previous line.
+.IP newline-and-backup(\|) 2.0i
+This action inserts a newline into the text \fIafter\fP the insert point.
+.IP newline(\|) 2.0i
+This action inserts a newline into the text \fIbefore\fP the insert point.
+.NH 3
+Kill and Actions
+.LP
+.sp
+.IP kill-word(\|) 2.0i
+.br
+.ns
+.IP backward-kill-word(\|) 2.0i
+These actions act exactly like the \fIdelete-next-word\fP and
+\fIdelete-previous-word\fP actions, but they stuff the word that was
+killed into the kill buffer (\fBCUT_BUFFER_1\fP).
+.IP kill-selection(\|) 2.0i
+This action deletes the current selection and stuffs the deleted text into
+the kill buffer (\fBCUT_BUFFER_1\fP).
+.IP kill-to-end-of-line(\|) 2.0i
+This action deletes the entire line to the right of the insert point position,
+and stuffs the deleted text into the kill buffer (\fBCUT_BUFFER_1\fP).
+.IP kill-paragraph(\|) 2.0i
+This action deletes the current paragraph, if between paragraphs it deletes
+the paragraph above the insert point, and stuffs the deleted text into
+the kill buffer (\fBCUT_BUFFER_1\fP).
+.IP kill-to-end-of-paragraph(\|) 2.0i
+This action deletes everything between the current insert point location and
+the next paragraph boundary, and stuffs the deleted text into the kill
+buffer (\fBCUT_BUFFER_1\fP).
+.NH 3
+Miscellaneous Actions
+.LP
+.sp 1
+.IP redraw-display(\|) 2.0i
+This action recomputes the location of all the text lines on the
+display, scrolls the text to vertically center the line containing the insert point
+on the screen, clears the entire screen, and redisplays it.
+.IP insert-file([\fIfilename\fP]) 2.0i
+This action activates the insert file popup. The \fIfilename\fP
+option specifies the default filename to put in the filename buffer of
+the popup. If no \fIfilename\fP is specified the buffer is empty
+at startup.
+.IP insert-char(\|) 2.0i
+This action may only be attached to a key event. When the
+\fBinternational\fP resource is \fBfalse\fP, this action
+calls XLookupString to translate the event into a (rebindable) Latin-1
+character (sequence) and inserts it into the text at the
+insert point. When the \fBinternational\fP resource is \fBtrue\fP,
+characters are passed to the input method via XwcLookupString, and any
+committed string returned is inserted into the text at the insert point.
+.IP insert-string(\fIstring\fP[,\fIstring\fP,...]) 2.0i
+This action inserts each \fIstring\fP into the text
+at the insert point location. Any \fIstring\fP
+beginning with the characters "0x" followed by an even
+number of hexadecimal digits is
+interpreted as a hexadecimal constant and the
+corresponding string is inserted instead. This
+hexadecimal string may represent up to 50 8-bit characters.
+ When the\fBinternational\fP resource is
+\fBtrue\fP, a hexadecimal string is intrepeted as
+being in a multi-byte encoding, and a hexadecimal
+or regular string will result in an error message
+if it is not legal in the current locale.
+.IP display-caret(\fIstate\fP,\fIwhen\fP) 2.0i
+This action allows the insert point to be turned on and off.
+The \fIstate\fP argument specifies the desired state of the insert point.
+This value may be any of the string
+values accepted for Boolean resources (e.g. \fBon\fP, \fBTrue\fP,
+\fBoff\fP, \fBFalse\fP, etc.). If no arguments are specified, the
+default value is \fBTrue\fP.
+The \fIwhen\fP argument specifies, for \fBEnterNotify\fP or \fBLeaveNotify\fP
+events whether or not the focus field in the event is to be examined.
+If the second argument is not specified, or specified as something other
+than \fBalways\fP then if the action is bound to an \fBEnterNotify\fP
+or \fBLeaveNotify\fP event, the action will be taken only if the focus
+field is \fBTrue\fP. An augmented binding that might be useful is:
+.LP
+.Ds 0
+.TA 2.0i 2.5i 4.0i
+.ta 2.0i 2.5i 4.0i
+ *Text.Translations: #override \\
+ <FocusIn>: display-caret(on) \\n\\
+ <FocusOut>: display-caret(off)
+.De
+.IP focus-in(\|) 2.0i
+.br
+.ns
+.IP focus-out(\|) 2.0i
+These actions do not currently do anything.
+.IP search(\fIdirection\fP,[\fIstring\fP]) 2.0i
+This action activates the search popup. The \fIdirection\fP must be
+specified as either \fBforward\fP or \fBbackward\fP. The string is
+optional and is used as an initial value for the \fISearch for\fP: string.
+For further explanation of the search widget see the section on
+\fBText Searches\fP.
+.IP multiply(\fIvalue\fP) 2.0i
+The multiply action allows the user to multiply the effects of many of
+the text actions. Thus the following action sequence
+\fImultiply(10) delete-next-word()\fP will delete 10 words. It does not
+matter whether these actions take place in one event or many events.
+Using the default translations the key sequence \fIControl-u,
+Control-d\fP will delete 4 characters.
+Multiply actions can be chained, thus \fImultiply(5)
+multiply(5)\fP is the same as \fImultiply(25)\fP. If the string
+\fBreset\fP is passed to the multiply action the effects of all previous
+multiplies are removed and a beep is sent to the display.
+.IP form-paragraph(\|) 2.0i
+This action removes all the Carriage Returns from the current
+paragraph and reinserts them so that each line is as long as possible, while
+still fitting on the current screen. Lines are broken at word boundaries if
+at all possible. This action currently works only on Text widgets
+that use ASCII text.
+.IP transpose-characters(\|) 2.0i
+This action will swap the position of the character to the left of the
+insert point with the character to the right of the insert point. The insert point will then
+be advanced one character.
+.IP no-op([\fIaction\fP]) 2.0i
+The no-op action makes no change to the text widget, and is mainly used
+to override translations. This action takes one optional argument. If
+this argument is \fIRingBell\fP then a beep is sent to the display.
+.IP XawWMProtocols([\fIwm_protocol_name\fP]) 2.0i
+.IN "XawWMProtocols"
+.sp
+This action is written specifically for the file insertion and the search
+and replace
+dialog boxes. This action is attached to those shells by the Text widget,
+in order to handle ClientMessage events with the WM_PROTOCOLS atom in the
+detail field. This action supports WM_DELETE_WINDOW on the Text widget
+popups, and may support other window manager protocols if necessary in
+the future. The popup will be dismissed if the window manager sends
+a WM_DELETE_WINDOW request and there are no parameters in the action
+call, which is the default. The popup will also be dismissed if the
+parameters include the string ``wm_delete_window,'' and the event is a
+ClientMessage event requesting dismissal or is not a ClientMessage event.
+This action is not sensitive to the case of the strings passed as parameters.
+.IP reconnect-im() 2.0i
+.IN "Input Method"
+When the \fBinternational\fP resource is \fBtrue\fP,
+input is usually passed to an input method, a separate
+process, for composing. Sometimes the connection to
+this process gets severed; this action will attempt to
+reconnect it. Causes for severage include network
+trouble, and the user explicitly killing one input
+method and starting a new one. This action may also
+establish first connection when the application is
+started before the input method.
+.NH 3
+Text Selections for Application Programmers
+.IN "Text widget" "Text Selections for Application Programmers"
+.LP
+The default behavior of the text selection array is described in the
+section called \fBText Selections for Users\fP. To modify the selections
+a programmer must construct a \fBXawTextSelectType\fP array (called the
+selection array), containing the selections desired, and pass this as
+the new value for the \fBselectionTypes\fP resource. The selection
+array may also be modified using the \fBXawTextSetSelectionArray\fP
+.IN "XawTextSetSelectionArray" ""
+function. All selection arrays must end with the value
+\fBXawselectNull\fP. The \fBselectionTypes\fP resource has no converter
+registered and cannot be modified through the resource manager.
+.LP
+The array contains a list of entries that will be called when the user
+attempts to select text in rapid succession with the \fIselect-start\fP
+action (usually by clicking a pointer button). The first entry in the
+selection array will be used when the \fIselect-start\fP action is
+initially called. The next entry will be used when \fIselect-start\fP
+is called again, and so on. If a timeout value (1/10 of a second) is
+exceeded, the the next \fIselect-start\fP action will begin at the top
+of the selection array. When \fBXawselectNull\fP is reached the array
+is recycled beginning with the first element.
+.TS
+lw(1.25i) lw(4.25i).
+T{
+\fBXawselectAll\fP
+.IN "XawselectAll" ""
+T} T{
+Selects the contents of the entire buffer.
+T}
+.sp 6p
+T{
+\fBXawselectChar\fP
+.IN "XawselectChar" ""
+T} T{
+Selects text characters as the pointer moves over them.
+T}
+.sp 6p
+T{
+\fBXawselectLine\fP
+.IN "XawselectLine" ""
+T} T{
+Selects the entire line.
+T}
+.sp 6p
+T{
+\fBXawselectNull\fP
+.IN "XawselectNull" ""
+T} T{
+Indicates the end of the selection array.
+T}
+.sp 6p
+T{
+\fBXawselectParagraph\fP
+.IN "XawselectParagraph" ""
+T} T{
+Selects the entire paragraph.
+T}
+.sp 6p
+T{
+\fBXawselectPosition\fP
+.IN "XawselectPosition" ""
+T} T{
+Selects the current pointer position.
+T}
+.sp 6p
+T{
+\fBXawselectWord\fP
+.IN "XawselectWord" ""
+T} T{
+Selects whole words as the pointer moves onto them.
+T}
+.TE
+.LP
+The default selectType array is:
+.LP
+.sp
+.Ds 0
+{XawselectPosition, XawselectWord, XawselectLine, XawselectParagraph, XawselectAll, XawselectNull}
+.De
+.sp
+.LP
+The selection array is not copied by the text widgets. The
+application must allocate space for the array and cannot deallocate or
+change it until the text widget is destroyed or until a new selection
+array is set.
+.NH 2
+Default Translation Bindings
+.LP
+.XS
+ Default Translation Bindings
+.XE
+.IN "Text widget" "default translations"
+The following translations are defaults built into every Text widget.
+They can be overridden, or replaced by specifying a new value for the
+Text widget's \fBtranslations\fP resource.
+.LP
+.sp
+.Ds 0
+.TA .5i 2.5i
+.ta .5i 2.5i
+ Ctrl<Key>A: beginning-of-line(\|) \\n\\
+ Ctrl<Key>B: backward-character(\|) \\n\\
+ Ctrl<Key>D: delete-next-character(\|) \\n\\
+ Ctrl<Key>E: end-of-line(\|) \\n\\
+ Ctrl<Key>F: forward-character(\|) \\n\\
+ Ctrl<Key>G: multiply(Reset) \\n\\
+ Ctrl<Key>H: delete-previous-character(\|) \\n\\
+ Ctrl<Key>J: newline-and-indent(\|) \\n\\
+ Ctrl<Key>K: kill-to-end-of-line(\|) \\n\\
+ Ctrl<Key>L: redraw-display(\|) \\n\\
+ Ctrl<Key>M: newline(\|) \\n\\
+ Ctrl<Key>N: next-line(\|) \\n\\
+ Ctrl<Key>O: newline-and-backup(\|) \\n\\
+ Ctrl<Key>P: previous-line(\|) \\n\\
+ Ctrl<Key>R: search(backward) \\n\\
+ Ctrl<Key>S: search(forward) \\n\\
+ Ctrl<Key>T: transpose-characters(\|) \\n\\
+ Ctrl<Key>U: multiply(4) \\n\\
+ Ctrl<Key>V: next-page(\|) \\n\\
+ Ctrl<Key>W: kill-selection(\|) \\n\\
+ Ctrl<Key>Y: insert-selection(CUT_BUFFER1) \\n\\
+ Ctrl<Key>Z: scroll-one-line-up(\|) \\n\\
+ Ctrl<Key>\\: reconnect-im(\|) \\n\\
+ Meta<Key>B: backward-word(\|) \\n\\
+ Meta<Key>F: forward-word(\|) \\n\\
+ Meta<Key>I: insert-file(\|) \\n\\
+ Meta<Key>K: kill-to-end-of-paragraph(\|) \\n\\
+ Meta<Key>Q: form-paragraph(\|) \\n\\
+ Meta<Key>V: previous-page(\|) \\n\\
+ Meta<Key>Y: insert-selection(PRIMARY, CUT_BUFFER0) \\n\\
+ Meta<Key>Z: scroll-one-line-down(\|) \\n\\
+ :Meta<Key>d: delete-next-word(\|) \\n\\
+ :Meta<Key>D: kill-word(\|) \\n\\
+ :Meta<Key>h: delete-previous-word(\|) \\n\\
+ :Meta<Key>H: backward-kill-word(\|) \\n\\
+ :Meta<Key>\\<: beginning-of-file(\|) \\n\\
+ :Meta<Key>\\>: end-of-file(\|) \\n\\
+ :Meta<Key>]: forward-paragraph(\|) \\n\\
+ :Meta<Key>[: backward-paragraph(\|) \\n\\
+ ~Shift Meta<Key>Delete: delete-previous-word(\|) \\n\\
+ \ Shift Meta<Key>Delete: backward-kill-word(\|) \\n\\
+ ~Shift Meta<Key>Backspace: delete-previous-word(\|) \\n\\
+ \ Shift Meta<Key>Backspace: backward-kill-word(\|) \\n\\
+ <Key>Right: forward-character(\|) \\n\\
+ <Key>Left: backward-character(\|) \\n\\
+ <Key>Down: next-line(\|) \\n\\
+ <Key>Up: previous-line(\|) \\n\\
+ <Key>Delete: delete-previous-character(\|) \\n\\
+ <Key>BackSpace: delete-previous-character(\|) \\n\\
+ <Key>Linefeed: newline-and-indent(\|) \\n\\
+ <Key>Return: newline(\|) \\n\\
+ <Key>: insert-char(\|) \\n\\
+ <Key>Kanji: reconnect-im(\|) \\n\\
+ <FocusIn>: focus-in(\|) \\n\\
+ <FocusOut>: focus-out(\|) \\n\\
+ <Btn1Down>: select-start(\|) \\n\\
+ <Btn1Motion>: extend-adjust(\|) \\n\\
+ <Btn1Up>: extend-end(PRIMARY, CUT_BUFFER0) \\n\\
+ <Btn2Down>: insert-selection(PRIMARY, CUT_BUFFER0) \\n\\
+ <Btn3Down>: extend-start(\|) \\n\\
+ <Btn3Motion>: extend-adjust(\|) \\n\\
+ <Btn3Up>: extend-end(PRIMARY, CUT_BUFFER0) \\n
+.De
diff --git a/libXaw/spec/TextCustom b/libXaw/spec/TextCustom
new file mode 100644
index 000000000..fbb656970
--- /dev/null
+++ b/libXaw/spec/TextCustom
@@ -0,0 +1,63 @@
+.NH 2
+Customizing the Text Widget
+.LP
+.XS
+ Customizing the Text Widget
+.XE
+.IN "Text widget" "customizing" "@DEF@"
+.LP
+The remainder of this chapter will describe customizing the Text
+widget. The Text widget may be customized by subclassing, or by
+creating new sources and sinks. Subclassing is described in
+detail in Chapter 7; this section will describe only those things that
+are specific to the Text widget. Attributes of the Text widget base
+class and creating new sources and sinks will be discussed.
+.LP
+The Text widget is made up of a number of different pieces, with the
+Text widget as the base widget class. It and the AsciiText widget are
+the only true "widgets" in the Text widget family. The other pieces
+(sources and sinks) are X Toolkit objects and have no window
+associated with them. No source or sink is useful unless assigned to
+a Text widget.
+.LP
+Each of the following pieces of the Text widget has a specific purpose,
+and will be, or has been, discussed in detail in this chapter:
+.IN "Text widget" ""
+.IP \fBText\fP 15
+This is the glue that binds everything else together. This widget reads
+the text data from the source, and displays the information in the sink.
+All translations and actions are handled in the Text widget itself.
+.IN "TextSink object" ""
+.IP \fBTextSink\fP 15
+This object is responsible for displaying and clearing the drawing area.
+It also reports the configuration of the window that contains the
+drawing area. The TextSink does not have its own window; instead it does
+its drawing on the Text widget's window.
+.IN "TextSrc object" ""
+.IP \fBTextSrc\fP 15
+This object is responsible for reading, editing and searching through the
+text buffer.
+.IN "AsciiSink object" ""
+.IP \fBAsciiSink\fP 15
+This object is a subclass of the TextSink and knows how to display
+ASCII text. Support has been added to display any 8-bit character set, given
+the font.
+.IN "MultiSink object" ""
+.IP \fBMultiSink\fP 15
+This object is a subclass of the TextSink and knows how to display
+font sets.
+.IN "AsciiSrc object" ""
+.IP \fBAsciiSrc\fP 15
+This object is a subclass of the TextSrc and knows how to read strings
+and files.
+.IN "MultiSrc object" ""
+.IP \fBMultiSrc\fP 15
+This object is a subclass of the TextSrc and knows how to read strings
+and multibyte files, converting them to wide characters based on locale.
+.IN "AsciiText widget" ""
+.IP \fBAsciiText\fP 15
+This widget is a subclass of the Text widget. When created, the AsciiText
+automatically creates and attaches either an AsciiSrc and AsciiSink, or a
+MultiSrc and MultiSink, to itself. The AsciiText provides the simplest
+interface to the Athena Text widgets.
+
diff --git a/libXaw/spec/TextFuncs b/libXaw/spec/TextFuncs
new file mode 100644
index 000000000..ea26068a5
--- /dev/null
+++ b/libXaw/spec/TextFuncs
@@ -0,0 +1,397 @@
+.\" $Xorg: TextFuncs,v 1.3 2000/08/17 19:42:28 cpqbld Exp $
+.NH 2
+Text Functions
+.XS
+ Text Functions
+.XE
+.LP
+The following functions are provided as convenience routines for use with
+the Text widget. Although many of these actions can be performed by
+modifying resources, these interfaces are frequently more efficient.
+.LP
+These data structures are defined in the Text widget's public header file,
+<X11/Xaw/Text.h>.
+.LP
+.IN "XawTextPosition" "" "@DEF@"
+typedef long XawTextPosition;
+.sp
+.LP
+Character positions in the Text widget begin at 0 and end at n, where
+n is the number of characters in the Text source widget.
+.LP
+.IN "XawTextBlock" "" "@DEF@"
+.Ds 0
+.TA .5i 1.5i 2.25i
+.ta .5i 1.5i 2.25i
+typedef struct {
+ int \fIfirstPos\fP;
+ int \fIlength\fP;
+ char *\fIptr\fP;
+ unsigned long \fIformat\fP;
+} XawTextBlock, *XawTextBlockPtr;
+.De
+.LP
+.IN "XawTextBlockPtr" ""
+.IP \fIfirstPos\fP 1.0i
+The first position, or index, to use within the \fIptr\fP field.
+The value is commonly zero.
+.IP \fIlength\fP 1.0i
+The number of characters to be used from the \fIptr\fP field.
+The number of characters used is commonly the number of characters
+in \fIptr\fP, and must not be greater than the length of the string
+in \fIptr\fP.
+.IP \fIptr\fP 1.0i
+Contains the string to be referenced by the Text widget.
+.IP \fIformat\fP 1.0i
+This flag indicates whether the data pointed to by \fBptr\fP is char
+or wchar_t. When the associated widget has \fBinternational\fP set
+to \fBfalse\fP this field must be XawFmt8Bit. When the associated
+widget has \fBinternational\fP set to \fBtrue\fP this field must be
+either XawFmt8Bit or XawFmtWide.
+.LP
+Note: Previous versions of Xaw used
+.PN FMT8BIT ,
+which has been retained for backwards compatibility. \fBFMT8BIT\fP is
+deprecated and will eventually be removed from the implementation.
+.NH 3
+Selecting Text
+.LP
+To select a piece of text, use
+.PN XawTextSetSelection :
+.IN "XawTextSetSelection" "" "@DEF@"
+.FD 0
+void XawTextSetSelection(\fIw\fP, \fIleft\fP, \fIright\fP)
+.br
+ Widget \fIw\fP;
+.br
+ XawTextPosition \fIleft\fP, \fIright\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.IP \fIleft\fP 1i
+Specifies the character position at which the selection begins.
+.IP \fIright\fP 1i
+Specifies the character position at which the selection ends.
+.LP
+See section 5.4 for a description of \fBXawTextPosition\fP.
+If redisplay is enabled, this function highlights the text and
+makes it the \fBPRIMARY\fP selection. This function does not have any
+effect on \fBCUT_BUFFER0\fP.
+.LP
+.NH 3
+Unhighlighting Text
+.LP
+To unhighlight previously highlighted text in a widget, use
+\fBXawTextUnsetSelection\fP:
+.IN "XawTextUnsetSelection" "" "@DEF@"
+.FD 0
+void XawTextUnsetSelection(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.NH 3
+Getting Current Text Selection
+.LP
+To retrieve the text that has been selected by this
+text widget use \fBXawTextGetSelectionPos\fP:
+.IN "XawTextGetSelectionPos" "" "@DEF@"
+.FD 0
+void XawTextGetSelectionPos(\fIw\fP, \fIbegin_return\fP, \fIend_return\fP)
+.br
+ Widget \fIw\fP;
+.br
+ XawTextPosition *\fIbegin_return\fP, *\fIend_return\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.IP \fIbegin_return\fP 1i
+Returns the beginning of the text selection.
+.IP \fIend_return\fP 1i
+Returns the end of the text selection.
+.LP
+See section 5.4 for a description of \fBXawTextPosition\fP.
+If the returned values are equal, no text is currently selected.
+.NH 3
+Replacing Text
+.LP
+To modify the text in an editable Text widget use \fBXawTextReplace\fP:
+.IN "XawTextReplace" "" "@DEF@"
+.FD 0
+int XawTextReplace(\fIw\fP, \fIstart\fP, \fIend\fP, \fItext\fP)
+.br
+ Widget \fIw\fP;
+.br
+ XawTextPosition \fIstart\fP, \fIend\fP;
+.br
+ XawTextBlock *\fItext\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.IP \fIstart\fP 1i
+Specifies the starting character position of the text replacement.
+.IP \fIend\fP 1i
+Specifies the ending character position of the text replacement.
+.IP \fItext\fP 1i
+Specifies the text to be inserted into the file.
+.LP
+This function will not
+be able to replace text in read-only text widgets. It will also only
+be able to append text to an append-only text widget.
+.LP
+See section 5.4 for a description of \fBXawTextPosition\fP and
+\fBXawTextBlock\fP.
+.LP
+This function may return the following values:
+.IP \fBXawEditDone\fP 1.25i
+.IN "XawEditDone" ""
+The text replacement was successful.
+.IP \fBXawPositionError\fP 1.25i
+.IN "XawPositionError" ""
+The edit mode is \fBXawtextAppend\fP and \fIstart\fP is not the position of
+the last character of the source.
+.IP \fBXawEditError\fP 1.25i
+.IN "XawEditError" ""
+Either the Source was read-only or the range to be deleted is larger
+than the length of the Source.
+
+.LP
+The \fBXawTextReplace\fP arguments \fIstart\fP and
+\fIend\fP represent the text source character positions for the
+existing text that is to be replaced by the text in the text block.
+The characters from \fIstart\fP up to
+but not including \fIend\fP are deleted, and the characters
+specified on the text block are inserted in their place. If
+\fIstart\fP and \fIend\fP are equal, no text is deleted and the new
+text is inserted after \fIstart\fP.
+.NH 3
+Searching for Text
+.LP
+To search for a string in the Text widget, use
+\fBXawTextSearch\fP:
+.IN "XawTextSearch" "" "@DEF@"
+.FD 0
+XawTextPosition XawTextSearch(\fIw\fP, \fIdir\fP, \fItext\fP)
+.br
+ Widget \fIw\fP;
+.br
+ XawTextScanDirection \fIdir\fP;
+.br
+ XawTextBlock * \fItext\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.IP \fIdir\fP 1i
+Specifies the direction to search in. Legal values are
+\fBXawsdLeft\fP and \fBXawsdRight\fP.
+.IP \fItext\fP 1i
+Specifies a text block structure that contains the text to search for.
+.LP
+See section 5.4 for a description of \fBXawTextPosition\fP and \fBXawTextBlock\fP.
+The \fBXawTextSearch\fP function will begin at the insertion point
+and search in the
+direction specified for a string that matches the one passed in
+\fItext\fP. If the string is found the location of the first
+character in the string is returned. If the string could not be
+found then the value \fBXawTextSearchError\fP is returned.
+.NH 3
+Redisplaying Text
+.LP
+To redisplay a range of characters, use \fBXawTextInvalidate\fP:
+.IN "XawTextInvalidate" "" "@DEF@"
+.FD 0
+void XawTextInvalidate(\fIw\fP, \fIfrom\fP, \fIto\fP)
+.br
+ Widget \fIw\fP;
+.br
+ XawTextPosition \fIfrom\fP, \fIto\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.IP \fIfrom\fP 1i
+Specifies the start of the text to redisplay.
+.IP \fIto\fP 1i
+Specifies the end of the text to redisplay.
+.LP
+See section 5.4 for a description of \fBXawTextPosition\fP.
+The \fBXawTextInvalidate\fP
+function causes the specified range of characters to be redisplayed
+immediately if redisplay is enabled or the next time that redisplay is
+enabled.
+.LP
+.sp 1
+To enable redisplay, use \fBXawTextEnableRedisplay\fP:
+.IN "XawTextEnableRedisplay" "" "@DEF@"
+.FD 0
+void XawTextEnableRedisplay(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.LP
+The \fBXawTextEnableRedisplay\fP function flushes any changes due to
+batched updates when \fBXawTextDisableRedisplay\fP
+was called and allows future changes to be reflected immediately.
+.LP
+.sp 1
+To disable redisplay while making several changes, use
+\fBXawTextDisableRedisplay\fP.
+.IN "XawTextDisableRedisplay" "" "@DEF@"
+.FD 0
+void XawTextDisableRedisplay(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.LP
+The \fBXawTextDisableRedisplay\fP function causes all changes to be
+batched until either \fBXawTextDisplay\fP or \fBXawTextEnableRedisplay\fP
+is called.
+.LP
+.sp 1
+To display batched updates, use \fBXawTextDisplay\fP:
+.IN "XawTextDisplay" "" "@DEF@"
+.FD 0
+void XawTextDisplay(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.LP
+The \fBXawTextDisplay\fP function forces any accumulated updates to be
+displayed.
+.NH 3
+Resources Convenience Routines
+.LP
+To obtain the character position of the left-most character on the
+first line displayed in the widget (the value of the
+\fBdisplayPosition\fP resource), use \fBXawTextTopPosition\fP.
+.IN "XawTextTopPosition" "" @DEF@"
+.FD 0
+XawTextPosition XawTextTopPosition(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.LP
+.sp 1
+To assign a new selection array to a text widget use
+\fBXawTextSetSelectionArray\fP:
+.IN "XawTextSetSelectionArray" "" "@DEF@"
+.FD 0
+void XawTextSetSelectionArray(\fIw\fP, \fIsarray\fP)
+.br
+ Widget \fIw\fP;
+.br
+ XawTextSelectType * \fIsarray\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.IP \fIsarray\fP 1i
+Specifies a selection array as defined in the section called \fBText
+Selections for Application Programmers\fP.
+.LP
+Calling this function is equivalent to setting the value of the
+\fBselectionTypes\fP resource.
+.LP
+.sp 1
+To move the insertion point to the specified source position, use
+\fBXawTextSetInsertionPoint\fP:
+.IN "XawTextSetInsertionPoint" "" "@DEF@"
+.FD 0
+void XawTextSetInsertionPoint(\fIw\fP, \fIposition\fP)
+.br
+ Widget \fIw\fP;
+.br
+ XawTextPosition \fIposition\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.IP \fIposition\fP 1i
+Specifies the new position for the insertion point.
+.LP
+See section 5.4 for a description of \fBXawTextPosition\fP.
+The text will be scrolled vertically if necessary to make the line
+containing the insertion point visible. Calling this function is
+equivalent to setting the \fBinsertPosition\fP resource.
+.LP
+.sp 1
+To obtain the current position of the insertion point, use
+\fBXawTextGetInsertionPoint\fP:
+.IN "XawTextGetInsertionPoint" "" "@DEF@"
+.FD 0
+XawTextPosition XawTextGetInsertionPoint(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.LP
+See section 5.4 for a description of \fBXawTextPosition\fP.
+The result is equivalent to retrieving the value of the
+\fBinsertPosition\fP resource.
+.LP
+.sp 1
+To replace the text source in the specified widget, use
+\fBXawTextSetSource\fP:
+.IN "XawTextSetSource" "" "@DEF@"
+.FD 0
+void XawTextSetSource(\fIw\fP, \fIsource\fP, \fIposition\fP)
+.br
+ Widget \fIw\fP;
+.br
+ Widget \fIsource\fP;
+.br
+ XawTextPosition \fIposition\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.IP \fIsource\fP 1i
+Specifies the text source object.
+.IP \fIposition\fP 1i
+Specifies character position that will become the upper left hand corner
+of the displayed text. This is usually set to zero.
+.LP
+See section 5.4 for a description of \fBXawTextPosition\fP.
+A display update will be performed if redisplay is enabled.
+.LP
+.sp 1
+To obtain the current text source for the specified widget, use
+\fBXawTextGetSource\fP:
+.IN "XawTextGetSource" "" "@DEF@"
+.FD 0
+Widget XawTextGetSource(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.LP
+This function returns the text source that this Text widget is currently
+using.
+.LP
+.sp
+To enable and disable the insertion point, use
+\fBXawTextDisplayCaret\fP:
+.IN "XawTextDisplayCaret" "" "@DEF@"
+.FD 0
+void XawTextDisplayCaret(\fIw\fP, \fIvisible\fP)
+.br
+ Widget \fIw\fP;
+.br
+ Boolean \fIvisible\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Text widget.
+.IP \fIvisible\fP 1i
+Specifies whether or not the caret should be displayed.
+.LP
+If \fIvisible\fP is \fBFalse\fP the insertion point will be disabled.
+The marker is re-enabled either by setting \fIvisible\fP to \fBTrue\fP, by
+calling \fBXtSetValues\fP, or by executing the \fIdisplay-caret\fP
+action routine.
diff --git a/libXaw/spec/TextSink b/libXaw/spec/TextSink
new file mode 100644
index 000000000..72ae3cf99
--- /dev/null
+++ b/libXaw/spec/TextSink
@@ -0,0 +1,420 @@
+.\" $Xorg: TextSink,v 1.3 2000/08/17 19:42:28 cpqbld Exp $
+.NH 2
+TextSink Object
+.LP
+.XS
+ TextSink Object
+.XE
+.IN "TextSink object" "" "@DEF@"
+.LP
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+Application Header file <X11/Xaw/TextSink.h>
+.IN "TextSink.h" ""
+Class Header file <X11/Xaw/TextSinkP.h>
+.IN "TextSinkP.h" ""
+Class textSinkObjectClass
+.IN "textSinkObjectClass" ""
+Class Name TextSink
+.IN "TextSink object" "class name"
+Superclass Object
+.De
+.LP
+The TextSink object is the root object for all text sinks. Any new text
+sink objects should be subclasses of the TextSink Object. The TextSink
+Class contains all methods that the Text widget expects a text sink to
+export.
+.LP
+Since all text sinks will have some resources in common, the TextSink
+defines a few new resources.
+.NH 3
+Resources
+.LP
+When creating an TextSink object instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "AsciiSink object" "resources"
+.TS H
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+background Background Pixel XtDefaultBackground
+destroyCallback Callback XtCallbackList NULL
+foreground Foreground Pixel XtDefaultForeground
+.sp 3p
+_
+.TE
+.Bg Bold
+.Dc
+.Sg Bold
+.NH 3
+Subclassing the TextSink
+.IN "TextSink object" "subclassing" "@DEF@"
+.LP
+The only purpose of the TextSink Object is to be subclassed. It
+contains the minimum set of class methods that all text sinks must have.
+While all may be inherited, the direct descendant of TextSink \fBmust
+specify\fP some of them as TextSink does contain enough information to
+be a valid text sink by itself. Do not try to use
+the TextSink as a valid sink for the Text widget; it is not intended
+to be used as a sink by itself.
+.TS H
+lw(1i) lw(1.5i) lw(2i) lw(1i).
+_
+.sp 3p
+.TB
+Function Inherit with Public Interface must specify
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+DisplayText XtInheritDisplayText XawTextSinkDisplayText yes
+.IN "XtInheritDisplayText" ""
+.IN "XawTextSinkDisplayText" ""
+InsertCursor XtInheritInsertCursor XawTextSinkInsertCursor yes
+.IN "XtInheritInsertCursor" ""
+.IN "XawTextSinkInsertCursor" ""
+ClearToBackground XtInheritClearToBackground XawTextSinkClearToBackground no
+.IN "XtInheritClearToBackground" ""
+.IN "XawTextSinkClearToBackground" ""
+FindPosition XtInheritFindPosition XawTextSinkFindPosition yes
+.IN "XtInheritFindPosition" ""
+.IN "XawTextSinkFindPosition" ""
+FindDistance XtInheritFindDistance XawTextSinkFindDistance yes
+.IN "XtInheritFindDistance" ""
+.IN "XawTextSinkFindDistance" ""
+Resolve XtInheritResolve XawTextSinkResolve yes
+.IN "XtInheritResolve" ""
+.IN "XawTextSinkResolve" ""
+MaxLines XtInheritMaxLines XawTextSinkMaxLines no
+.IN "XtInheritMaxLines" ""
+.IN "XawTextSinkMaxLines" ""
+MaxHeight XtInheritMaxHeight XawTextSinkMaxHeight no
+.IN "XtInheritMaxHeight" ""
+.IN "XawTextSinkMaxHeight" ""
+SetTabs XtInheritSetTabs XawTextSinkSetTabs no
+.IN "XtInheritSetTabs" ""
+.IN "XawTextSinkSetTabs" ""
+GetCursorBounds XtInheritGetCursorBounds XawTextSinkGetCursorBounds yes
+.IN "XtInheritGetCursorBounds" ""
+.IN "XawTextSinkGetCursorBounds" ""
+_
+.TE
+.NH 4
+Displaying Text
+.LP
+To display a section of the text buffer contained in the text source
+use the function \fBDisplayText\fP:
+.IN "TextSink object" "DisplayText" "@DEF@"
+.FD 0
+void DisplayText(\fIw\fP, \fIx\fP, \fIy\fP, \fIpos1\fP, \fIpos2\fP, \fIhighlight\fP)
+.br
+ Widget \fIw\fP;
+.br
+ Position \fIx\fP, \fIy\fP;
+.br
+ XawTextPosition \fIpos1\fP, \fIpos2\fP;
+.br
+ Boolean \fIhighlight\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSink object.
+.IP \fIx\fP 1i
+Specifies the x location to start drawing the text.
+.IP \fIy\fP 1i
+Specifies the y location to start drawing text.
+.IP \fIpos1\fP 1i
+Specifies the location within the text source of the first character
+to be printed.
+.IP \fIpos2\fP 1i
+Specifies the location within the text source of the last character
+to be printed.
+.IP \fIhighlight\fP 1i
+Specifies whether or not to paint the text region highlighted.
+.LP
+The Text widget will only pass one line at a time to the text sink, so
+this function does not need to know how to line feed the text. It is
+acceptable for this function to just ignore Carriage Returns. \fIx\fP
+and \fIy\fP denote the upper left hand corner of the first character to
+be displayed.
+.NH 4
+Displaying the Insert Point
+.LP
+The function that controls the display of the text cursor is
+\fBInsertCursor\fP. This function will be called whenever the text
+widget desires to change the state of, or move the insert point.
+.FD 0
+void InsertCursor(\fIw\fP, \fIx\fP, \fIy\fP, \fIstate\fP)
+.IN "TextSink object" "InsertCursor" "@DEF@"
+.br
+ Widget \fIw\fP;
+.br
+ Position \fIx\fP, \fIy\fP;
+.br
+ XawTextInsertState \fIstate\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSink object.
+.IP \fIx\fP 1i
+Specifies the x location of the cursor in Pixels.
+.IP \fIy\fP 1i
+Specifies the y location of the cursor in Pixels.
+.IP \fIstate\fP 1i
+Specifies the state of the cursor, may be one of \fBXawisOn\fP or
+\fBXawisOff\fP.
+.LP
+\fIX\fP and \fIy\fP denote the upper left hand corner of the insert point.
+.NH 4
+Clearing Portions of the Text window
+.LP
+To clear a portion of the Text window to its background color, the Text
+widget will call \fBClearToBackground\fP. The TextSink object already
+defines this function as calling \fBXClearArea\fP on the region passed.
+This behavior will be used if you specify
+\fBXtInheritClearToBackground\fP for this method.
+.IN "XtInheritClearToBackground" ""
+.IN "TextSink object" "ClearToBackground" "@DEF@"
+.FD 0
+void ClearToBackground(\fIw\fP, \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP)
+.br
+ Widget \fIw\fP;
+.br
+ Position \fIx\fP, \fIy\fP;
+.br
+ Dimension \fIwidth\fP, \fIheight\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSink object.
+.IP \fIx\fP 1i
+Specifies the x location, in pixels, of the Region to clear.
+.IP \fIy\fP 1i
+Specifies the y location, in pixels, of the Region to clear.
+.IP \fIwidth\fP 1i
+Specifies the width, in pixels, of the Region to clear.
+.IP \fIheight\fP 1i
+Specifies the height, in pixels, of the Region to clear.
+.LP
+\fIX\fP and \fIy\fP denote the upper left hand corner of region to clear.
+.NH 4
+Finding a Text Position Given Pixel Values
+.LP
+To find the text character position that will be rendered at a given x
+location the Text widget uses the function \fBFindPosition\fP:
+.IN "TextSink object" "FindPosition" "@DEF@"
+.FD 0
+void FindPosition(\fIw\fP, \fIfromPos\fP, \fIfromX\fP, \fIwidth\fP, \fIstopAtWordBreak\fP, \fIpos_return\fP, \fIwidth_return\fP, \fIheight_return\fP)
+.br
+ Widget \fIw\fP;
+.br
+ XawTextPosition \fIfromPos\fP;
+.br
+ int \fIfromX\fP, \fIwidth\fP;
+.br
+ Boolean \fIstopAtWordBreak\fP;
+.br
+ XawTextPosition \fI*pos_return\fP;
+.br
+ int \fI*width_return\fP, \fI*height_return\fP;
+.FN
+.IP \fIw\fP 1.25i
+Specifies the TextSink object.
+.IP \fIfromPos\fP 1.25i
+Specifies a reference position, usually the first character in this line.
+This character is always to the left of the desired character location.
+.IP \fIfromX\fP 1.25i
+Specifies the distance that the left edge of \fIfromPos\fP is from the
+left edge of the window. This is the reference x location for the
+reference position.
+.IP \fIwidth\fP 1.25i
+Specifies the distance, in pixels, from the reference position to the
+desired character position.
+.IP \fIstopAtWordBreak\fP 1.25i
+Specifies whether or not the position that is returned should be forced
+to be on a word boundary.
+.IP \fIpos_return\fP 1.25i
+Returns the character position that corresponds to the location that has
+been specified, or the work break immediately to the left of the
+position if \fIstopAtWordBreak\fP is \fBTrue\fP.
+.IP \fIwidth_return\fP 1.25i
+Returns the actual distance between \fIfromPos\fP and \fIpos_return\fI.
+.IP \fIheight_return\fP 1.25i
+Returns the maximum height of the text between \fIfromPos\fP and
+\fIpos_return\fI.
+.LP
+This function need make no attempt to deal with line feeds. The text
+widget will only call it one line at a time.
+.LP
+.sp
+Another means of finding a text position is provided by the \fBResolve\fP
+function:
+.IN "TextSink object" "Resolve" "@DEF@"
+.FD 0
+void Resolve(\fIw\fP, \fIfromPos\fP, \fIfromX\fP, \fIwidth\fP, \fIpos_return\fP)
+.br
+ Widget \fIw\fP;
+.br
+ XawTextPosition \fIfromPos\fP;
+.br
+ int \fIfromX\fP, \fIwidth\fP;
+.br
+ XawTextPosition \fI*pos_return\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSink object.
+.IP \fIfromPos\fP 1i
+Specifies a reference position, usually the first character in this line.
+This character is always to the left of the desired character location.
+.IP \fIfromX\fP 1i
+Specifies the distance that the left edge of \fIfromPos\fP is from the
+left edge of the window. This is the reference x location for the
+reference position.
+.IP \fIwidth\fP 1i
+Specifies the distance, in pixels, from the reference position to the
+desired character position.
+.IP \fIpos_return\fP 1i
+Returns the character position that corresponds to the
+location that has been specified, or the word break immediately to the left
+if \fIstopAtWordBreak\fP is \fBTrue\fP.
+.LP
+This function need make no attempt to deal with line feeds. The text
+widget will only call it one line at a time. This is a more convenient
+interface to the \fBFindPosition\fP function, and provides a subset of its
+functionality.
+.IN "FindPosition" ""
+.NH 4
+Finding the Distance Between two Text Positions
+.LP
+To find the distance in pixels between two text positions on the same
+line use the function \fBFindDistance\fP.
+.IN "TextSink object" "FindDistance" "@DEF@"
+.FD 0
+void FindDistance(\fIw\fP, \fIfromPos\fP, \fIfromX\fP, \fItoPos\fP, \fIwidth_return\fP, \fIpos_return\fP, \fIheight_return\fP)
+.br
+ Widget \fIw\fP;
+.br
+ XawTextPosition \fIfromPos\fP, \fItoPos\fP;
+.br
+ int \fIfromX\fP;
+.br
+ XawTextPosition \fI*pos_return\fP;
+.br
+ int \fI*width_return\fP, \fI*height_return\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSink object.
+.IP \fIfromPos\fP 1i
+Specifies the text buffer position, in characters, of the first position.
+.IP \fIfromX\fP 1i
+Specifies the distance that the left edge of \fIfromPos\fP is from the
+left edge of the window. This is the reference x location for the
+reference position.
+.IP \fItoPos\fP 1i
+Specifies the text buffer position, in characters, of the second position.
+.IP \fIresWidth\fP 1i
+Return the actual distance between \fIfromPos\fP
+and \fIpos_return\fI.
+.IP \fIresPos\fP 1i
+Returns the character position that corresponds to the actual character
+position used for \fItoPos\fP in the calculations. This may be
+different than \fItoPos\fP, for example if \fIfromPos\fP and \fItoPos\fP
+are on different lines in the file.
+.IP \fIheight_return\fP 1i
+Returns the maximum height of the text between \fIfromPos\fP and
+\fIpos_return\fP.
+.LP
+This function need make no attempt to deal with line feeds. The Text
+widget will only call it one line at a time.
+.NH 4
+Finding the Size of the Drawing area
+.LP
+To find the maximum number of lines that will fit into the current Text
+widget, use the function \fBMaxLines\fP. The TextSink already defines
+this function to compute the maximum number of lines by using the height
+of \fBfont\fP.
+.IN "TextSink object" "MaxLines" "@DEF@"
+.FD 0
+int MaxLines(\fIw\fP, \fIheight\fP)
+.br
+ Widget \fIw\fP;
+.br
+ Dimension \fIheight\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSink object.
+.IP \fIheight\fP 1i
+Specifies the height of the current drawing area.
+.LP
+Returns the maximum number of lines that will fit in \fIheight\fP.
+.LP
+.sp
+To find the height required for a given number of text lines, use
+the function \fBMaxHeight\fP. The TextSink already defines this
+function to compute the maximum height of the window by using the
+height of \fBfont\fP.
+.IN "TextSink object" "MaxHeight" "@DEF@"
+.FD 0
+int MaxHeight(\fIw\fP, \fIlines\fP)
+.br
+ Widget \fIw\fP;
+.br
+ int \fIlines\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSink object.
+.IP \fIheight\fP 1i
+Specifies the height of the current drawing area.
+.LP
+Returns the height that will be taken up by the number of lines passed.
+.NH 4
+Setting the Tab Stops
+.LP
+To set the tab stops for a text sink use the \fBSetTabs\fP function.
+The TextSink already defines this function to set the tab x location in
+pixels to be the number of characters times the figure width of
+\fBfont\fP.
+.IN "TextSink object" "SetTabs" "@DEF@"
+.FD 0
+void SetTabs(\fIw\fP, \fItab_count\fP, \fItabs\fP)
+.br
+ Widget \fIw\fP;
+.br
+ int \fItab_count\fP, \fI*tabs\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSink object.
+.IP \fItab_count\fP 1i
+Specifies the number of tabs passed in \fItabs\fP.
+.IP \fItabs\fP 1i
+Specifies the position, in characters, of the tab stops.
+.LP
+This function is responsible for the converting character positions passed
+to it into whatever internal positions the TextSink uses for tab placement.
+.NH 4
+Getting the Insert Point's Size and Location
+.LP
+To get the size and location of the insert point use the
+\fBGetCursorBounds\fP function.
+.IN "TextSink object" "GetCursorBounds" "@DEF@"
+.FD 0
+void GetCursorBounds(\fIw\fP, \fIrect_return\fP)
+.br
+Widget \fIw\fP;
+.br
+XRectangle \fI*rect_return\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSinkObject.
+.IP \fIrect_return\fP 1i
+Returns the location and size of the insert point.
+.LP
+\fIRect\fP will be filled with the current size and location of the
+insert point.
diff --git a/libXaw/spec/TextSource b/libXaw/spec/TextSource
new file mode 100644
index 000000000..852db2dd3
--- /dev/null
+++ b/libXaw/spec/TextSource
@@ -0,0 +1,331 @@
+.\" $Xorg: TextSource,v 1.3 2000/08/17 19:42:28 cpqbld Exp $
+.NH 2
+TextSrc Object
+.LP
+.XS
+ TextSrc Object
+.XE
+.IN "TextSrc object" "" "@DEF@"
+.LP
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+Application Header file <X11/Xaw/TextSrc.h>
+.IN "TextSrc.h" ""
+Class Header file <X11/Xaw/TextSrcP.h>
+.IN "TextSrcP.h" ""
+Class textSrcObjectClass
+.IN "textSrcObjectClass" ""
+Class Name TextSrc
+.IN "TextSrc object" "class name"
+Superclass Object
+.De
+.LP
+The TextSrc object is the root object for all text sources. Any new text
+source objects should be subclasses of the TextSrc Object. The
+TextSrc Class contains all methods the Text widget expects a text
+source to export.
+.LP
+Since all text sources will have some resources in common the
+TextSrc defines a few new resources.
+.NH 3
+Resources
+.LP
+When creating an TextSrc object instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "TextSrc object" "resources"
+.TS H
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+destroyCallback Callback XtCallbackList NULL
+editType EditType EditMode NULL
+.sp 3p
+_
+.TE
+.Dc
+.Oe Bold
+.NH 3
+Subclassing the TextSrc
+.IN "TextSrc object" "subclassing" "@DEF@"
+.LP
+The only purpose of the TextSrc Object is to be subclassed. It contains
+the minimum set of class methods that all text sources must have. All
+class methods of the TextSrc must be defined, as the Text widget uses
+them all. While all may be inherited, the direct descendant of TextSrc
+\fBmust\fP specify some of them as TextSrc does not contain enough
+information to be a valid text source by itself. Do not try to use the
+TextSrc as a valid source for the Text widget; it is not intended to be
+used as a source by itself and bad things will probably happen.
+.TS H
+lw(1i) lw(1.5i) lw(2i) lw(1i).
+_
+.sp 3p
+.TB
+Function Inherit with Public Interface must specify
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+Read XtInheritRead XawTextSourceRead yes
+.IN "XtInheritRead" ""
+.IN "XawTextSourceRead" ""
+Replace XtInheritReplace XawTextSourceReplace no
+.IN "XtInheritReplace" ""
+.IN "XawTextSourceReplace" ""
+Scan XtInheritScan XawTextSourceScan yes
+.IN "XtInheritScan" ""
+.IN "XawTextSourceScan" ""
+Search XtInheritSearch XawTextSourceSearch no
+.IN "XtInheritSearch" ""
+.IN "XawTextSourceSearch" ""
+SetSelection XtInheritSetSelection XawTextSourceSetSelection no
+.IN "XtInheritSetSelection" ""
+.IN "XawTextSourceSetSelection" ""
+ConvertSelection XtInheritConvertSelection XawTextSourceConvertSelection no
+.IN "XtInheritConvertSelection" ""
+.IN "XawTextSourceConvertSelection" ""
+_
+.TE
+.NH 4
+Reading Text.
+.LP
+To read the text in a text source use the \fBRead\fP function:
+.IN "TextSrc object" "Read" "@DEF@"
+.FD 0
+XawTextPosition Read(\fIw\fP, \fIpos\fP, \fItext_return\fP, \fIlength\fP)
+.br
+Widget \fIw\fP;
+.br
+XawTextPosition \fIpos\fP;
+.br
+XawTextBlock \fI*text_return\fP;
+.br
+int \fIlength\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSrc object.
+.IP \fIpos\fP 1i
+Specifies the position of the first character to be read from the text buffer.
+.IP \fItext\fP 1i
+Returns the text read from the source.
+.IP \fIlength\fP 1i
+Specifies the maximum number of characters the TextSrc should
+return to the application in \fItext_return\fP.
+.LP
+This function returns the text position immediately after the
+characters read from the
+text buffer. The function is not required to read \fIlength\fP
+characters if that many characters are in the file, it may break at
+any point that is convenient to the internal structure of the
+source. It may take several calls to \fBRead\fP before the desired
+portion of the text buffer is fully retrieved.
+.NH 4
+Replacing Text.
+.LP
+To replace or edit the text in a text buffer use the \fBReplace\fP function:
+.FD 0
+XawTextPosition Replace(\fIw\fP, \fIstart\fP, \fIend\fP, \fItext\fP)
+.IN "TextSrc object" "Replace" @DEF@
+.br
+Widget \fIw\fP;
+.br
+XawTextPosition \fIstart\fP, \fIend\fP;
+.br
+XawTextBlock \fI*text\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSrc object.
+.IP \fIstart\fP 1i
+Specifies the position of the first character to be removed from the text
+buffer. This is also the location to begin inserting the new text.
+.IP \fIend\fP 1i
+Specifies the position immediately after the last character to be
+removed from the text buffer.
+.IP \fItext\fP 1i
+Specifies the text to be added to the text source.
+.LP
+This function can return any of the following values:
+.IP \fBXawEditDone\fP 1.25i
+.IN "XawEditDone" ""
+The text replacement was successful.
+.IP \fBXawPositionError\fP 1.25i
+.IN "XawPositionError" ""
+The edit mode is \fBXawtextAppend\fP and \fIstart\fP is not the last
+character of the source.
+.IP \fBXawEditError\fP 1.25i
+.IN "XawEditError" ""
+Either the Source was read-only or the range to be deleted is larger
+than the length of the Source.
+.LP
+The \fBReplace\fP arguments \fIstart\fP and \fIend\fP represent the
+text source character positions for the existing text that is to be
+replaced by the text in the text block. The characters from
+\fIstart\fP up to but not including \fIend\fP are deleted, and the
+buffer specified by the text block is inserted in their
+place. If \fIstart\fP and \fIend\fP are equal, no text is deleted and
+the new text is inserted after \fIstart\fP.
+.NH 4
+Scanning the TextSrc
+.LP
+To search the text source for one of the predefined boundary types use
+the \fBScan\fP function:
+.FD 0
+XawTextPosition Scan(\fIw\fP, \fIposition\fP, \fItype\fP, \fIdir\fP, \fIcount\fP, \fIinclude\fP)
+.IN "TextSrc object" "Scan" @DEF@
+.br
+Widget \fIw\fP;
+.br
+XawTextPosition \fIposition\fP;
+.br
+XawTextScanType \fItype\fP;
+.br
+XawTextScanDirection \fIdir\fP;
+.br
+int \fIcount\fP;
+.br
+Boolean \fIinclude\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSrc object.
+.IP \fIposition\fP 1i
+Specifies the position to begin scanning the source.
+.IP \fItype\fP 1i
+Specifies the type of boundary to scan for, may be one of:
+\fBXawstPosition\fP, \fBXawstWhiteSpace\fP, \fBXawstEOL\fP,
+.IN "XawstPositions" ""
+.IN "XawstWhiteSpace" ""
+.IN "XawstEOL" ""
+\fBXawstParagraph\fP, \fBXawstAll\fP. The exact meaning of these
+.IN "XawstParagraph" ""
+.IN "XawstAll" ""
+boundaries is left up to the individual text source.
+.IP \fIdir\fP 1i
+Specifies the direction to scan, may be either \fBXawsdLeft\fP to search
+.IN "XawsdLeft" ""
+backward, or \fBXawsdRight\fP to search forward.
+.IN "XawsdRight" ""
+.IP \fIcount\fP 1i
+Specifies the number of boundaries to scan for.
+.IP \fIinclude\fP 1i
+Specifies whether the boundary itself should be included in the scan.
+.LP
+The \fBScan\fP function returns the position in the text source of the desired
+boundary. It is expected to return a valid address for
+all calls made to it, thus if a particular request is made that would take
+the text widget beyond the end of the source it must return the
+position of that end.
+.NH 4
+Searching through a TextSrc
+.LP
+To search for a particular string use the \fBSearch\fP function.
+.FD 0
+XawTextPosition Search(\fIw\fP, \fIposition\fP, \fIdir\fP, \fItext\fP)
+.IN "TextSrc object" "Search" @DEF@
+.br
+Widget \fIw\fP;
+.br
+XawTextPosition \fIposition\fP;
+.br
+XawTextScanDirection \fIdir\fP;
+.br
+XawTextBlock \fI*text\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSrc object.
+.IP \fIposition\fP 1i
+Specifies the position to begin the search.
+.IP \fIdir\fP 1i
+Specifies the direction to search, may be either \fBXawsdLeft\fP to search
+.IN "XawsdLeft" ""
+backward, or \fBXawsdRight\fP to search forward.
+.IN "XawsdRight" ""
+.IP \fItext\fP 1i
+Specifies a text block containing the text to search for.
+.LP
+This function will search through the text buffer attempting to find a
+match for the string in the text block. If a match is found in the
+direction specified, then the character location of the first character
+in the string is returned. If no text was found then
+\fBXawTextSearchError\fP is returned.
+.IN "XawTextSearchError" ""
+.NH 4
+Text Selections
+.LP
+While many selection types are handled by the Text widget, text sources
+may have selection types unknown to the Text widget. When a selection
+conversion is requested by the X server the Text widget will first call
+the \fBConvertSelection\fP function, to attempt the selection
+conversion.
+.FD 0
+Boolean ConvertSelections(\fIw\fP, \fIselection\fP, \fItarget\fP, \fItype\fP, \fIvalue_return\fP, \fIlength_return\fP, \fIformat_return\fP)
+.IN "Text widget" "ConvertSelection" @DEF@
+.br
+Widget \fIw\fP;
+.br
+Atom \fI*selection\fP, \fI*target\fP, \fI*type\fP;
+.br
+caddr_t \fI*value_return\fP;
+.br
+unsigned long \fI*length_return\fP;
+.br
+int \fI*format_return\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSrc object.
+.IP \fIselection\fP 1i
+Specifies the type of selection that was requested (e.g. \fBPRIMARY\fP).
+.IP \fItarget\fP 1i
+Specifies the type of the selection that has been requested, which
+indicates the desired information about the selection (e.g. Filename,
+Text, Window).
+.IP \fItype\fP 1i
+Specifies a pointer to the atom into which the property type of the converted
+value of the selection is to be stored. For instance, either file
+name or text might have property type \fBXA_STRING\fP.
+.IP \fIvalue_return\fP 1i
+Returns a pointer into which a pointer to the converted value of the
+selection
+is to be stored. The selection owner is responsible for allocating
+this storage. The memory is considered owned by the toolkit, and is
+freed by XtFree when the Intrinsics selection mechanism is done with it.
+.IP \fIlength_return\fP 1i
+Returns a pointer into which the number of elements in value is to be stored.
+The size of each element is determined by \fIformat\fP.
+.IP \fIformat_return\fP 1i
+Returns a pointer into which the size in bits of the data elements of the
+selection value is to be stored.
+.LP
+If this function returns \fBTrue\fP then the Text widget will assume
+that the source has taken care of converting the selection, Otherwise the
+Text widget will attempt to convert the selection itself.
+.LP
+.sp
+If the source needs to know when the text selection is modified it
+should define a \fBSetSelection\fP procedure:
+.FD 0
+void SetSelection(\fIw\fP, \fIstart\fP, \fIend\fP, \fIselection\fP)
+Widget \fIw\fP;
+.IN "SetSelection" "" @DEF@
+.br
+XawTextPosition \fIstart\fP, \fIend\fP;
+.br
+Atom \fIselection\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the TextSrc object.
+.IP \fIstart\fP 1i
+Specifies the character position of the beginning of the new text selection.
+.IP \fIend\fP
+Specifies the character position of the end of the new text selection.
+.IP \fIselection\fP 1i
+Specifies the type of selection that was requested (e.g. \fBPRIMARY\fP).
diff --git a/libXaw/spec/Toggle b/libXaw/spec/Toggle
new file mode 100644
index 000000000..12a605bd2
--- /dev/null
+++ b/libXaw/spec/Toggle
@@ -0,0 +1,370 @@
+.\" $Xorg: Toggle,v 1.3 2000/08/17 19:42:29 cpqbld Exp $
+.NH 2
+Toggle Widget
+.XS
+ Toggle Widget
+.XE
+.IN "Toggle widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application Header file <Xaw/Toggle.h>
+.IN "Toggle.h" ""
+Class Header file <Xaw/ToggleP.h>
+.IN "ToggleP.h" ""
+Class toggleWidgetClass
+.IN "toggleWidgetClass" ""
+Class Name Toggle
+.IN "Toggle widget" "class name"
+Superclass Command
+.sp
+.De
+.LP
+The Toggle widget is an area, often rectangular,
+that displays a graphic. The graphic may be a text
+string containing multiple lines of characters in an 8
+bit or 16 bit character set (to be displayed with a
+\fIfont\fP), or in a multi-byte encoding (for use with
+a \fIfontset\fP). The graphic may also be a bitmap or
+pixmap.
+.LP
+This widget maintains a Boolean state (e.g.
+True/False or On/Off) and changes state whenever it is selected. When
+the pointer is on the Toggle widget, the Toggle widget may become highlighted by
+drawing a rectangle around its perimeter. This highlighting indicates
+that the Toggle widget is ready for selection. When pointer button 1 is
+pressed and released, the Toggle widget indicates that it has changed
+state by reversing its foreground and background colors, and its
+\fBnotify\fP action is invoked, calling all functions on its callback
+list. If the pointer is moved off of the widget before the pointer button is
+released, the Toggle widget reverts to its previous foreground and background
+colors, and releasing the pointer button has no effect. This behavior allows
+the user to cancel the operation.
+.LP
+Toggle widgets may also be part of a ``radio group.'' A radio group is a
+.IN "Radio groups" ""
+.IN "Radio button" ""
+.IN "Toggle widget" "used in radio groups"
+list of at least two Toggle widgets in which no more than one Toggle may
+be set at
+any time. A radio group is identified by the widget ID of any one of
+its members. The convenience routine \fBXawToggleGetCurrent\fP will
+return information about the Toggle widget in the radio group.
+.LP
+Toggle widget state is preserved across changes in sensitivity.
+.NH 3
+Resources
+.LP
+When creating a Toggle widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "Toggle widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+bitmap Bitmap Pixmap None
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+callback Callback XtCallbackList NULL
+colormap Colormap Colormap Parent's Colormap
+cornerRoundPercent CornerRoundPercent Dimension 25
+cursor Cursor Cursor None
+cursorName Cursor String NULL
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+encoding Encoding UnsignedChar XawTextEncoding8bit
+font Font XFontStruct XtDefaultFont
+fontSet FontSet XFontSet XtDefaultFontSet
+foreground Foreground Pixel XtDefaultForeground
+height Height Dimension A graphic height + 2 * \fBinternalHeight\fP
+highlightThickness Thickness Dimension A 2 (0 if Shaped)
+insensitiveBorder Insensitive Pixmap GreyPixmap
+internalHeight Height Dimension 2
+internalWidth Width Dimension 4
+international International Boolean C False
+justify Justify Justify XtJustifyCenter (center)
+label Label String name of widget
+leftBitmap LeftBitmap Bitmap None
+mappedWhenManaged MappedWhenManaged Boolean True
+pointerColor Foreground Pixel XtDefaultForeground
+pointerColorBackground Background Pixel XtDefaultBackground
+radioData RadioData Pointer Name of widget
+radioGroup Widget Widget No radio group
+resize Resize Boolean True
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+shapeStype ShapeStyle ShapeStyle Rectangle
+state State Boolean Off
+translations Translations TranslationTable See below
+width Width Dimension A graphic width + 2 * \fBinternalWidth\fP
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.As
+.Bg
+.Gp
+.Bm
+.Bc
+.Bp
+.Bw
+.Cb
+.Cm
+.Cr
+.Cu
+.Cn
+.Dp
+.Dc
+.Le
+.Lf
+.Ls
+.Lg
+.Hw
+.Ht
+.Ib
+.Ih
+.In
+.Ju
+.La
+.Ll
+.Mm
+.Pf
+.Pb
+.IP \fBradioData\fP 1.5i
+Specifies the data that will be returned by \fBXawToggleGetCurrent\fP
+when this is the currently \fIset\fP widget in the radio group. This
+value is also used to identify the Toggle that will be set by a call to
+\fBXawToggleSetCurrent\fP. The value NULL will be returned by
+\fBXawToggleGetCurrent\fP if no widget in a radio group is currently
+set. Programmers must not specify NULL (or Zero) as \fBradioData\fP.
+.IP \fBradioGroup\fP 1.5i
+Specifies another Toggle widget that is in the radio group to which this
+Toggle widget should be added. A radio group is a group of at least two Toggle
+widgets, only one of which may be \fIset\fP at a time. If this value is
+NULL (the default) then the Toggle will not be part of any radio group
+and can change state without affecting any other Toggle widgets. If the
+widget specified in this resource is not already in a radio group then a
+new radio group will be created containing these two Toggle widgets. No
+Toggle widget can be in multiple radio groups. The behavior of a radio
+group of one toggle is undefined. A converter is registered which will
+convert widget names to widgets without caching.
+.Re
+.Sc
+.Se
+.Ss
+.IP \fBstate\fP
+Specifies whether the Toggle widget is set (\fBTrue\fP) or unset
+(\fBFalse\fP).
+.Tr
+.Xy
+.NH 3
+Toggle Actions
+.IN "Toggle widget" "actions"
+.LP
+The Toggle widget supports the following actions:
+.IP \(bu 5
+Switching the Toggle widget between the foreground and background
+colors with \fBset\fP and \fBunset\fP and \fBtoggle\fP
+.IP \(bu 5
+Processing application callbacks with \fBnotify\fP
+.IP \(bu 5
+Switching the internal border between highlighted
+and unhighlighted states with \fBhighlight\fP and \fBunhighlight\fP
+.LP
+The following are the default translation bindings used by the
+Toggle widget:
+.IN "Toggle widget" "default translation table"
+.LP
+.sp
+.Ds 0
+.TA .5i 2.25i
+.ta .5i 2.25i
+ <EnterWindow>: highlight(Always)
+ <LeaveWindow>: unhighlight(\|)
+ <Btn1Down>,<Btn1Up>: toggle(\|) notify(\|)
+.De
+.NH 3
+Toggle Actions
+.LP
+The full list of actions supported by Toggle is:
+.IP \fBhighlight\fP(\fIcondition\fP) 1.5i
+Displays the internal highlight border in the color (\fBforeground\fP
+or \fBbackground\fP ) that contrasts with the interior color of the
+Toggle widget. The conditions \fBWhenUnset\fP and \fBAlways\fP are
+understood by this action procedure. If no argument is passed then
+\fBWhenUnset\fP is assumed.
+.IP \fBunhighlight\fP(\|) 1.5i
+Displays the internal highlight border in the color (\fBforeground\fP
+or \fBbackground\fP ) that matches the interior color of the
+Toggle widget.
+.IP \fBset\fP(\|) 1.5i
+Enters the \fIset\fP state, in which \fBnotify\fP is possible. This
+action causes the Toggle widget to display its interior in the
+\fBforeground\fP color. The label or bitmap is displayed in the
+\fBbackground\fP color.
+.IP \fBunset\fP(\|) 1.5i
+Cancels the \fIset\fP state and displays the interior of the Toggle widget in the
+\fBbackground\fP color. The label or bitmap is displayed in the
+\fBforeground\fP color.
+.IP \fBtoggle\fP(\|) 1.5i
+Changes the current state of the Toggle widget, causing to be set
+if it was previously unset, and unset if it was previously set.
+If the widget is to be set, and is in a radio group then this procedure may
+unset another Toggle widget causing all routines on its callback list
+to be invoked. The callback routines for the Toggle that
+is to be unset will be called before the one that is to be set.
+.IP \fBreset\fP(\|) 1.5i
+Cancels any \fBset\fP or \fBhighlight\fP and displays the interior of the
+Toggle widget in the \fBbackground\fP color, with the label displayed in the
+\fBforeground\fP color.
+.IP \fBnotify\fP(\|) 1.5i
+When the Toggle widget is in the \fBset\fP state this action calls all functions in
+the callback list named by the \fBcallback\fP resource. The value of
+the call_data argument in these callback functions is undefined.
+.LP
+.NT
+When a bitmap of depth greater that one (1) is specified the
+\fIset\fP(), \fIunset\fP(), and \fIreset\fP() actions have no effect,
+since there are no foreground and background colors used in a
+multi-plane pixmap.
+.NE
+.NH 3
+Radio Groups
+.IN "Radio groups"
+.LP
+There are typically two types of radio groups desired by applications.
+The default translations for the Toggle widget implement a "zero or one
+.IN "Radio groups" "zero or one of many"
+of many" radio group. This means that there may be no more than one
+Toggle widget active, but there need not be any Toggle widgets active.
+.LP
+The other type of radio group is "one of many" and has the more strict
+.IN "Radio groups" "one of many"
+policy that there will always be exactly one radio button active.
+Toggle widgets can be used to provide this interface with a slight
+modification to the translation table of each Toggle in the group.
+.Ds 0
+.TA .5i 2.25i
+.ta .5i 2.25i
+.sp
+ <EnterWindow>: highlight(Always)
+ <LeaveWindow>: unhighlight(\|)
+ <Btn1Down>,<Btn1Up>: set(\|) notify(\|)
+.sp
+.De
+This translation table will not allow any Toggle to be \fIunset\fP
+except as a result of another Toggle becoming \fIset\fP. It is
+the application programmer's responsibility to choose an initial
+state for the radio group by setting the \fBstate\fP resource of one of
+its member widgets to \fBTrue\fP.
+.NH 3
+Convenience Routines
+.LP
+The following functions allow easy access to the Toggle widget's radio
+group functionality.
+.NH 4
+Changing the Toggle's Radio Group.
+.LP
+To enable an application to change the Toggle's radio group, add
+the Toggle to a radio group, or remove the Toggle from a radio group, use
+\fBXawToggleChangeRadioGroup\fP.
+.IN "XawToggleChangeRadioGroup" "" "@DEF@"
+.FD
+void XawToggleChangeRadioGroup(\fIw\fP, \fIradio_group\fP)
+.br
+ Widget \fIw\fP, \fIradio_group\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Toggle widget.
+.IP \fIradio_group\fP 1i
+Specifies any Toggle in the new radio group. If NULL then the Toggle
+will be removed from any radio group of which it is a member.
+.LP
+If a Toggle is already \fIset\fP in the new radio group,
+and the Toggle to be added is also \fIset\fP then the previously
+\fIset\fP Toggle in the radio group is \fIunset\fP and its callback
+procedures are invoked.
+.SH
+Finding the Currently selected Toggle in a radio group of Toggles
+.LP
+To find the currently selected Toggle in a radio group of Toggle widgets
+use
+\fBXawToggleGetCurrent\fP.
+.IN "XawToggleGetCurrent" "" "@DEF@"
+.FD
+XtPointer XawToggleGetCurrent(\fIradio_group\fP);
+.br
+ Widget \fIradio_group\fP;
+.FN
+.IP \fIradio_group\fP 1i
+Specifies any Toggle widget in the radio group.
+.LP
+The value returned by this function is the
+.PN radioData
+of the Toggle in this radio group that is currently set. The default
+value for
+.PN radioData
+is the name of that Toggle widget. If no Toggle is set in the radio
+group specified then NULL is returned.
+.SH
+Changing the Toggle that is set in a radio group.
+.LP
+To change the Toggle that is currently set in a radio group use
+\fBXawToggleSetCurrent\fP.
+.IN "XawToggleSetCurrent" "" "@DEF@"
+.FD
+void XawToggleSetCurrent(\fIradio_group\fP, \fIradio_data\fP);
+.br
+ Widget \fIradio_group\fP;
+ XtPointer \fIradio_data\fP;
+.FN
+.IP \fIradio_group\fP 1i
+Specifies any Toggle widget in the radio group.
+.IP \fIradio_data\fP 1i
+Specifies the
+.PN radioData
+identifying the Toggle that should be set in the radio group specified
+by the \fIradio_group\fP argument.
+.LP
+\fBXawToggleSetCurrent\fP locates the Toggle widget to be set by
+matching \fIradio_data\fP against the \fBradioData\fP for each Toggle in
+the radio group. If none match, \fBXawToggleSetCurrent\fP returns
+without making any changes. If more than one Toggle matches,
+\fBXawToggleSetCurrent\fP will choose a Toggle to set arbitrarily. If
+this causes any Toggle widgets to change state, all routines in their
+callback lists will be invoked. The callback routines for a Toggle that
+is to be unset will be called before the one that is to be set.
+.SH
+Unsetting all Toggles in a radio group.
+.LP
+To unset all Toggle widgets in a radio group use
+\fBXawToggleUnsetCurrent\fP.
+.IN "XawToggleUnsetCurrent" "" "@DEF@"
+.FD
+void XawToggleUnsetCurrent(\fIradio_group\fP);
+.br
+ Widget \fIradio_group\fP;
+.FN
+.IP \fIradio_group\fP 1i
+Specifies any Toggle widget in the radio group.
+.LP
+If this causes a Toggle widget to change state, all routines on its
+callback list will be invoked.
+
diff --git a/libXaw/spec/Tree b/libXaw/spec/Tree
new file mode 100644
index 000000000..5575228fb
--- /dev/null
+++ b/libXaw/spec/Tree
@@ -0,0 +1,181 @@
+.\" $Xorg: Tree,v 1.3 2000/08/17 19:42:29 cpqbld Exp $
+.NH 2
+Tree Widget
+.LP
+.XS
+ Tree Widget
+.XE
+.IN "Tree widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application Header file <X11/Xaw/Tree.h>
+.IN "Box.h" ""
+Class Header file <X11/Xaw/TreeP.h>
+.IN "TreeP.h" ""
+Class treeWidgetClass
+.IN "treeWidgetClass" ""
+Class Name Tree
+.IN "Tree widget" "class name"
+Superclass Constraint
+.sp
+.De
+.LP
+The Tree widget provides geometry management of arbitrary widgets arranged
+in a directed, acyclic graph (i.e., a tree). The hierarchy is constructed
+by attaching a constraint resource called \fBtreeParent\fP to each widget
+indicating which other node in the tree should be treated as the widget's
+superior. The structure of the tree is shown by laying out the nodes
+in the standard format for tree diagrams with lines drawn connecting each
+node with its children.
+.LP
+The Tree sizes itself according to the needs of its children and is not
+intended to be resized by its parent. Instead, it should be placed inside
+another composite widget (such as the \fBPorthole\fP or \fBViewport\fP)
+that can be used to scroll around in the tree.
+.NH 3
+Resources
+.LP
+When creating a Tree widget instance, the following resources are
+retrieved from the argument list or from the resource database:
+.LP
+.IN "Box widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+ancestorSensitive AncestorSensitive Boolean D True
+autoReconfigure AutoReconfigure Boolean False
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+children ReadOnly WidgetList R NULL
+colormap Colormap Colormap Parent's Colormap
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+foreground Foreground Pixel XtDefaultForeground
+gravity Gravity XtGravity WestGravity
+height Height Dimension A see \fBLayout Semantics\fP
+hSpace HSpace Dimension 4
+lineWidth LineWidth Dimension 0
+mappedWhenManaged MappedWhenManaged Boolean True
+numChildren ReadOnly Cardinal R 0
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+vSpace VSpace Dimension 4
+translations Translations TranslationTable NULL
+width Width Dimension A see \fBLayout Semantics\fP
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.IP \fBautoReconfigure\fP 1.5i
+Whether or not to layout the tree every time a node is added or removed.
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.Ch
+.Cm
+.Dp
+.Dc
+.Lg
+.IP \fBgravity\fP 1.5i
+.IN "conversions" "Gravity"
+Specifies the side of the widget from which the tree should grow. Valid
+values include \fBWestGravity\fP, \fBNorthGravity\fP, \fBEastGravity\fP, and
+\fBSouthGravity\fP.
+.Rs "\fP the legal values\fB"
+.Hw
+.IP \fBhSpace\fP 1.5i
+.br
+.ns
+.IP \fBvSpace\fP 1.5i
+The amount of space, in pixels, to leave between the children. This
+resource specifies the amount of space left between the outermost
+children and the edge of the box.
+.IP \fBlineWidth\fP 1.5i
+The width of the lines from nodes that do not have a \fBtreeGC\fP
+constraint resource to their children.
+.Mm
+.Nc
+.Sc
+.Se
+.Tr
+.Xy
+.NH 3
+Constraint Resources
+.LP
+.IN "Tree widget" "constraint resources"
+Each child of the Tree widget must specify its superior node in the tree. In
+addition, it may specify a GC to use when drawing a line between it and its
+inferior nodes.
+.TS H
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+treeGC TreeGC GC NULL
+treeParent TreeParent Widget NULL
+.sp 3p
+_
+.TE
+.IP \fBtreeGC\fP 1.5i
+This specifies the GC to use when drawing lines between this widget and its
+inferiors in the tree. If this resource is not specified, the Tree's
+\fBforeground\fP and \fBlineWidth\fP will be used.
+.IP \fBtreeParent\fP 1.5i
+This specifies the superior node in the tree for this widget. The default is
+for the node to have no superior (and to therefore be at the top of the tree).
+.NH 3
+Layout Semantics
+.IN "Tree widget" "layout semantics"
+.LP
+Each time a child is managed or unmanaged, the Tree widget will attempt
+to reposition the remaining children to fix the shape of the tree if the
+.B autoReconfigure
+resource is set. Children at the top (most superior) of the tree are
+drawn at
+the side specified by the
+.B gravity
+resource.
+.LP
+After positioning all children, the Tree widget attempts to shrink its
+own size to the minimum dimensions required for the layout.
+.NH 3
+Convenience Routines
+.LP
+.IN "Tree widget" "convenience routines"
+The most efficient way to layout a tree is to set
+.B autoReconfigure
+to False and then use the
+.B XawTreeForceLayout
+routine to arrange the children.
+.IN "XawTreeForceLayout" "" "@DEF@"
+.FD 0
+void XawTreeForceLayout(\fIw\fP)
+.br
+ Widget \fIw\fP;
+.FN
+.IP \fIw\fP 1i
+Specifies the Tree widget.
diff --git a/libXaw/spec/Viewport b/libXaw/spec/Viewport
new file mode 100644
index 000000000..0b599472a
--- /dev/null
+++ b/libXaw/spec/Viewport
@@ -0,0 +1,156 @@
+.\" $Xorg: Viewport,v 1.3 2000/08/17 19:42:29 cpqbld Exp $
+.NH 2
+Viewport Widget
+.LP
+.XS
+ Viewport Widget
+.XE
+.IN "Viewport widget" "" "@DEF@"
+.Ds 0
+.TA 2.0i
+.ta 2.0i
+.sp
+Application Header file <X11/Xaw/Viewport.h>
+.IN "Viewport.h" ""
+Class Header file <X11/Xaw/ViewportP.h>
+.IN "ViewportP.h" ""
+Class viewportWidgetClass
+.IN "viewportWidgetClass" ""
+Class Name Viewport
+.IN "Viewport widget" "class name"
+Superclass Form
+.sp
+.De
+.LP
+The Viewport widget consists of a frame window, one or two Scrollbars,
+and an inner window. The size of the frame window is determined by the
+viewing size of the data that is to be displayed and the dimensions to
+which the Viewport is created. The inner window is the full size of the
+data that is to be displayed and is clipped by the frame window. The
+Viewport widget controls the scrolling of the data directly. No
+application callbacks are required for scrolling.
+.LP
+When the geometry of the frame window is equal in size to the inner
+window, or when the data does not require scrolling, the Viewport widget
+automatically removes any scrollbars. The \fBforceBars\fP option causes
+the Viewport widget to display all scrollbars permanently.
+.NH 3
+Resources
+.LP
+When creating a Viewport widget instance, the following resources are
+retrieved from the argument list or the resource database:
+.LP
+.IN "Viewport widget" "resources"
+.TS H
+expand;
+lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
+_
+.sp 3p
+.TB
+Name Class Type Notes Default Value
+.sp 3p
+_
+.TH
+.R
+.sp 3p
+accelerators Accelerators AcceleratorTable NULL
+allowHoriz Boolean Boolean False
+allowVert Boolean Boolean False
+ancestorSensitive AncestorSensitive Boolean D True
+background Background Pixel XtDefaultBackground
+backgroundPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderColor BorderColor Pixel XtDefaultForeground
+borderPixmap Pixmap Pixmap XtUnspecifiedPixmap
+borderWidth BorderWidth Dimension 1
+children ReadOnly WidgetList R NULL
+colormap Colormap Colormap Parent's Colormap
+depth Depth int C Parent's Depth
+destroyCallback Callback XtCallbackList NULL
+forceBars Boolean Boolean False
+height Height Dimension height of the child
+mappedWhenManaged MappedWhenManaged Boolean True
+numChildren ReadOnly Cardinal R 0
+reportCallback ReportCallback XtCallbackList NULL
+screen Screen Screen R Parent's Screen
+sensitive Sensitive Boolean True
+translations Translations TranslationTable NULL
+useBottom Boolean Boolean False
+useRight Boolean Boolean False
+width Width Dimension width of the child
+x Position Position 0
+y Position Position 0
+.sp 3p
+_
+.TE
+.Ac
+.IP \fBallowHoriz\fP 1.5i
+.br
+.ns
+.IP \fBallowVert\fP 1.5i
+If these resources are \fBFalse\fP then the Viewport will never create
+a scrollbar in this direction. If it is \fBTrue\fP then the scrollbar will
+only appear when it is needed, unless \fBforceBars\fP is \fBTrue\fP.
+.As
+.Bg
+.Gp
+.Bc
+.Bp
+.Bw
+.Ch
+.Cm
+.Dp
+.Dc
+.IP \fBforceBars\fP 1.5i
+When \fBTrue\fP the scrollbars that have been \fIallowed\fP will always be
+visible on the screen. If \fBFalse\fP the scrollbars will be visible only
+when the inner window is larger than the frame.
+.Hw
+.Mm
+.Nc
+.IP \fBreportCallback\fP 1.5i
+These callbacks will be executed whenever the Viewport adjusts the viewed
+area of the child. The call_data parameter is a pointer to an XawPannerReport
+structure.
+.Sc
+.Se
+.Tr
+.IP \fBuseBottom\fP 1.5i
+.br
+.ns
+.IP \fBuseRight\fP 1.5i
+By default the scrollbars appear on the left and top of the screen.
+These resources allow the vertical scrollbar to be placed on the right
+edge of the Viewport, and the horizontal scrollbar on the bottom edge of
+the Viewport.
+.Xy
+.NH 3
+Layout Semantics
+.LP
+.IN "Viewport widget" "layout semantics"
+The Viewport widget manages a single child widget. When the size of the
+child is larger than the size of the Viewport, the user can interactively
+move the child within the Viewport by repositioning the scrollbars.
+.LP
+The default size of the Viewport before it is realized is the width and/or
+height of the child. After it is realized, the Viewport will allow its
+child to grow vertically or horizontally if \fBallowVert\fP or
+\fBallowHoriz\fP are set, respectively. If the corresponding vertical
+or horizontal scrollbar is not enabled, the Viewport will propagate the
+geometry request to its own parent and the child will be allowed to change
+size only if the Viewport's parent allows it. Regardless of whether or not
+scrollbars are enabled in the corresponding direction, if the child requests
+a new size smaller than the Viewport size, the change will be allowed only
+if the parent of the Viewport allows the Viewport to shrink to the
+appropriate dimension.
+.LP
+The scrollbar children of the Viewport are named \fBhorizontal\fP and
+\fBvertical\fP. By using these names the programmer can specify resources
+for the individual scrollbars. \fBXtSetValues\fP can be used to modify
+the resources dynamically once the widget ID has been obtained with
+\fBXtNameToWidget\fP.
+.IN "XtNameToWidget" ""
+.NT
+Although the Viewport is a Subclass of the Form, no resources for the Form
+may be supplied for any of the children of the Viewport. These constraints
+are managed internally and are not meant for public consumption.
+.NE
diff --git a/libXaw/spec/block.awk b/libXaw/spec/block.awk
new file mode 100644
index 000000000..0dd75f3f7
--- /dev/null
+++ b/libXaw/spec/block.awk
@@ -0,0 +1,22 @@
+BEGIN {
+ firstchar = "@";
+ a["a"] = "A"; a["b"] = "B"; a["c"] = "C";
+ a["d"] = "D"; a["e"] = "E"; a["f"] = "F";
+ a["g"] = "G"; a["h"] = "H"; a["i"] = "I";
+ a["j"] = "J"; a["k"] = "K"; a["l"] = "L";
+ a["m"] = "M"; a["n"] = "N"; a["o"] = "O";
+ a["p"] = "P"; a["q"] = "Q"; a["r"] = "R";
+ a["s"] = "S"; a["t"] = "T"; a["u"] = "U";
+ a["v"] = "V"; a["w"] = "W"; a["x"] = "X";
+ a["y"] = "Y"; a["z"] = "Z";
+}
+
+{
+ c = substr($2,2,1);
+ if (c >= "a" && c <= "z")
+ c = a[c];
+ if (c != firstchar)
+ printf(".LB %s\n", c);
+ firstchar = c;
+ print;
+}
diff --git a/libXaw/spec/fixindex.awk b/libXaw/spec/fixindex.awk
new file mode 100644
index 000000000..e8849f3bd
--- /dev/null
+++ b/libXaw/spec/fixindex.awk
@@ -0,0 +1,73 @@
+BEGIN {
+ FS = ":";
+ BD = "\\s+1\\fB";
+ ED = "\\fP\\s-1";
+}
+
+NR == 1 {
+ if ($3 != "")
+ printf(".Ib \"%s\"\n", $2);
+ major = $2;
+ minor = $3;
+ if ($4 == "@DEF@") {
+ pagelist = BD $1 ED;
+ }
+ else {
+ pagelist = $1;
+ }
+ pageno = $1;
+ oldpageno = $1;
+ oldpagelist = "";
+}
+
+NR != 1 {
+ if ($2 == major && $3 == minor) # neither has changed
+ {
+ if ($1 != pageno) { # new page number, append
+ oldpageno = $1;
+ oldpagelist = pagelist;
+ if ($4 == "@DEF@") {
+ pagelist = pagelist ", " BD $1 ED;
+ }
+ else {
+ pagelist = pagelist ", " $1;
+ }
+ }
+ else { # old page, but check for def
+ if ($4 == "@DEF@") {
+ if (pageno == oldpageno) {
+ if (oldpagelist != "")
+ oldpagelist = oldpagelist ", "
+ }
+ pagelist = oldpagelist BD $1 ED;
+ }
+ }
+ }
+ else # one has changed
+ {
+ if (minor != "") # dump full record
+ printf(".I< \"%s\" \"%s\" \"%s\"\n", major, minor, pagelist);
+ else
+ printf(".I> \"%s\" \"%s\"\n", major, pagelist);
+ if ($4 == "@DEF@") { # restart pagelist
+ pagelist = BD $1 ED;
+ }
+ else {
+ pagelist = $1;
+ }
+ oldpagelist = "";
+ oldpageno = $1;
+ if ($2 != major && $3 != "") # major has changed, minor not null
+ printf(".Ib \"%s\"\n", $2);
+ }
+ major = $2;
+ minor = $3;
+ pageno = $1;
+}
+
+END {
+ if (minor != "") # dump full record
+ printf(".I< \"%s\" \"%s\" \"%s\"\n", major, minor, pagelist);
+ else
+ printf(".I> \"%s\" \"%s\"\n", major, pagelist);
+}
diff --git a/libXaw/spec/indexmacros.t b/libXaw/spec/indexmacros.t
new file mode 100644
index 000000000..4660f18ed
--- /dev/null
+++ b/libXaw/spec/indexmacros.t
@@ -0,0 +1,42 @@
+. \" Macros for the index
+.de Ib \" blank major entry
+.br
+.ne 2v
+\\$1:
+..
+.de I> \" major entry
+.br
+\\$1, \\$2
+..
+.de I< \" minor entry
+.br
+ \\$2, \\$3
+..
+.de LB \" new letter starts here
+.di DT \" start diverted text
+.sp
+.sz +2
+.b
+\\$1
+.r
+.sz -2
+.sp
+.di \" end diverted text
+.ne \\n(dnu+1v \" get enough space for it
+.DT \" output it
+..
+.\" set up various parameters for the right evironment.
+.\" Your taste may be different.
+.ef ''\fB % \fP''
+.of ''\fB % \fP''
+.++ A
+.po 1.0i \" physical offset
+.ta 5iR \" right alignment tab
+.lp \" initialize -me
+.ce
+.sz 18
+Index
+.sp 1
+.sz 10
+.2c \" 2 column mode
+.sp 3
diff --git a/libXaw/spec/macros.t b/libXaw/spec/macros.t
new file mode 100644
index 000000000..cbc599b3f
--- /dev/null
+++ b/libXaw/spec/macros.t
@@ -0,0 +1,226 @@
+.\" $Xorg: macros.t,v 1.3 2000/08/17 19:42:51 cpqbld Exp $
+.\" macros.t -- macros for X Consortium documents
+.\" Revised and commented by smarks 93.12.20.
+.\"
+.\" global setup: set ragged right, assign string variables
+.\"
+.na
+.ie n \{\
+.ds Q \&"
+.ds U \&"
+.ds - \%--
+.\}
+.el \{\
+.ds Q `\h'-\w'\^'u'`
+.ds U '\h'-\w'\^'u''
+.ds - \(em
+.\}
+.\"
+.\" --- Ds --- displayed text (like .DS) with no keep
+.\" .Ds is obsolete. Change to something from this table:
+.\" for this use instead
+.\" .Ds .ID
+.\" .Ds n .LD (where "n" is a number)
+.\" (Numbers don't work in these macros, so ".Ds 5"
+.\" comes out the same as ".Ds 0".)
+.\"
+.de Ds
+.nf
+.\\$1D \\$2 \\$1
+.ft 1
+.ps \\n(PS
+.if \\n(VS>=40 .vs \\n(VSu
+.if \\n(VS<=39 .vs \\n(VSp
+..
+.de D
+.ID \\$1
+..
+.de 0D
+.LD
+..
+.\" backward compatibility for the Xt spec
+.de 5D
+.LD
+..
+.\"
+.\" --- De --- obsolete: use .DE instead
+.\"
+.de De
+.DE
+..
+.\"
+.\" --- FD ---
+.\"
+.de FD
+.LP
+.KS
+.TA .5i 3i
+.ta .5i 3i
+.nf
+..
+.\"
+.\" --- FN ---
+.\"
+.de FN
+.fi
+.KE
+.LP
+..
+.\"
+.\" --- IN --- send an index entry to the stderr
+.\"
+.de IN
+.tm \\n%:\\$1:\\$2:\\$3
+..
+.\"
+.\" --- C{ ---
+.\"
+.de C{
+.KS
+.nf
+.D
+.\"
+.\" choose appropriate monospace font
+.\" the imagen conditional, 480,
+.\" may be changed to L if LB is too
+.\" heavy for your eyes...
+.\"
+.ie "\\*(.T"480" .ft L
+.el .ie "\\*(.T"300" .ft L
+.el .ie "\\*(.T"202" .ft PO
+.el .ie "\\*(.T"aps" .ft CW
+.el .ft R
+.ps \\n(PS
+.ie \\n(VS>40 .vs \\n(VSu
+.el .vs \\n(VSp
+..
+.\"
+.\" --- C} ---
+.\"
+.de C}
+.DE
+.R
+..
+.\"
+.\" --- Pn --- like PN, but use $2; $1 and $3 abut
+.\"
+.de Pn
+.IN \\$2
+.ie t \\$1\fB\^\\$2\^\fR\\$3
+.el \\$1\fI\^\\$2\^\fP\\$3
+..
+.\"
+.\" --- PN --- put $1 in boldface and add index entry; $2 abuts
+.\"
+.de PN
+.IN \\$1
+.ie t \fB\^\\$1\^\fR\\$2
+.el \fI\^\\$1\^\fP\\$2
+..
+.\"
+.\" --- hI --- add index entry for $1 as header file
+.\"
+.de hI
+.IN <\\$1>
+.IN Files <\\$1>
+.IN Headers <\\$1>
+..
+.\"
+.\" --- hN --- put $1 in boldface as header and add index entry; $2 abuts
+.\"
+.de hN
+.hI \\$1
+.ie t <\fB\\$1\fR>\\$2
+.el <\fI\\$1\fP>\\$2
+..
+.\"
+.\" --- NT ---
+.\"
+.de NT
+.br
+.ne 7
+.ds NO Note
+.if \\n(.$ .ds NO \\$1
+.ie n .sp
+.el .sp 10p
+.ce
+\\*(NO
+.ie n .sp
+.el .sp 5p
+.if '\\$1'C' .ce 99
+.if '\\$2'C' .ce 99
+.\" .QS/.QE macros don't exist in older versions of -ms
+.ie \\n(GS .QS
+.el \{\
+. in +5n
+. ll -5n
+.\}
+.R
+..
+.\"
+.\" --- NE --- Note End (doug kraft 3/85)
+.\"
+.de NE
+.ce 0
+.ie \\n(GS .QE
+.el \{\
+. in -5n
+. ll +5n
+.\}
+.ie n .sp
+.el .sp 10p
+..
+.\"
+.\" --- nH --- numbered header (like NH) but with automatic TOC entry
+.\" usage: .nH level "section title, preferable in quotes"
+.\"
+.de nH
+.NH \\$1
+\\$2
+.XS
+\\*(SN \\$2
+.XE
+..
+.\"
+.\" --- sM --- put start-marker in margin
+.\"
+.de sM
+.KS
+.sp 1
+\\h'-0.5i'\\L'-1v'\\v'1p'\\l'1v'\\v'1v-1p'
+.sp -1
+..
+.\"
+.\" --- eM --- put end-marker in margin
+.\"
+.de eM
+.sp -1
+\\h'-0.5i'\\L'-1v'\\v'1v+1p'\\l'1v'\\v'-1p'
+.sp 1
+.KE
+..
+.\"
+.\" --- YZ --- finish up; $1 is the starting page number of the TOC
+.\"
+.de YZ
+. \" Force there to be an even number of pages, so the table of
+. \" contents doesn't end up on the back of the last page in
+. \" the case of duplex printing.
+.if o .bp
+. \" Emit a .pn directive with one plus the last page number.
+ \" This will be the number of the first page of the index.
+.nr YZ \\n%+1
+.tm .pn \\n(YZ
+. \" Issue the table of contents, setting roman numerals,
+. \" and redefining the footer to use them.
+.bp \\$1
+.af PN i
+.EF ''\\\\\\\\n(PN''
+.OF ''\\\\\\\\n(PN''
+. \" Why all the backslashes? This string is evaluated
+. \" three times: 1) during the definition of this macro,
+. \" 2) when the .EF and .OF macros are expanded, and 3)
+. \" when the bottom-of-page trap is invoked. Thus,
+. \" eight backslashes are reduced to one in the final output.
+.PX
+..
diff --git a/libXaw/spec/strings.mit b/libXaw/spec/strings.mit
new file mode 100644
index 000000000..e8a339bf2
--- /dev/null
+++ b/libXaw/spec/strings.mit
@@ -0,0 +1,10 @@
+.\" $Xorg: strings.mit,v 1.3 2000/08/17 19:42:29 cpqbld Exp $
+.ds tk X Toolkit
+.ds xT X Toolkit Intrinsics \(em C Language Interface
+.ds xI Intrinsics
+.ds xW Athena Widget Set \(em C Language Interface
+.ds xL Xlib \(em C Language X Interface
+.ds xC Inter-Client Communication Conventions Manual
+.ds Rn 4
+.ds Vn 2.2
+.hw XtMake-Geometry-Request XtQuery-Geometry wid-get sub-class sub-classes
diff --git a/libXaw/spec/strings.xaw b/libXaw/spec/strings.xaw
new file mode 100644
index 000000000..7ef362ef8
--- /dev/null
+++ b/libXaw/spec/strings.xaw
@@ -0,0 +1,714 @@
+.\" $Xorg: strings.xaw,v 1.3 2000/08/17 19:42:29 cpqbld Exp $
+\" These macros are not associated with any widget.
+
+.de Rs \" Resource Conversion message
+A converter is registered for this resource that will convert
+the following strings: \fB\\$1\fP.
+..
+.de Sk \" This is a resource of the associated sink.
+.if 'AsciiText'\\$1' This is a resource of the associated sink.
+..
+.de So \" This is a resource of the associated source.
+.if 'AsciiText'\\$1' This is a resource of the associated source.
+..
+
+\" Object Resources
+.de Dc \" Object destroyCallback
+.IP destroyCallback 1.5i
+All functions on this list are called when this widget is destroyed.
+..
+
+\" RectObj Resources
+.de As \" RectObj ancestorSensitive
+.IP ancestorSensitive 1.5i
+The sensitivity state of the ancestors of this widget. A widget is
+insensitive if either it or any of its ancestors is insensitive.
+This resource should not be changed with \fBXtSetValues\fP, although it
+may be queried.
+..
+.de Bw \" RectObj borderWidth
+.IP borderWidth 1.5i
+The width of this widget's window border.
+..
+.de Hw \" RectObj height and width
+.IP height 1.5i
+.br
+.ns
+.IP width 1.5i
+The height and width of this widget in pixels.
+..
+.de Se \" RectObj sensitive
+.IP sensitive 1.5i
+Whether or not the toolkit should pass user events to this widget. The
+widget will not get input events if either \fBancestorSensitive\fP or
+\fBsensitive\fP is \fBFalse\fP.
+..
+.de Xy \" RectObj x and y
+.IP x 1.5i
+.br
+.ns
+.IP y 1.5i
+The location of the upper left outside corner of this widget in its parent.
+..
+
+\" Core Resources
+
+.de Ac \" Core accelerators
+.IP accelerators 1.5i
+A list of event to action bindings to be executed by this widget, even
+though the event occurred in another widget. (See the \fI\*(xT\fP for
+details).
+..
+.de Bg \" Core background
+.ie 'Bold'\\$1' .IP \fBbackground\fP 1.5i
+.el .IP background 1.5i
+A pixel value which indexes the widget's colormap to derive the
+background color of the widget's window.
+..
+.de Gp \" Core backgroundPixmap
+.IP backgroundPixmap 1.5i
+The background pixmap of this widget's window. If this resource is set to
+anything other than \fBXtUnspecifiedPixmap\fP, the pixmap specified will be
+used instead of the background color.
+..
+.de Bc \" Core borderColor
+.IP borderColor 1.5i
+A pixel value which indexes the widget's colormap to derive the border
+color of the widget's window.
+..
+.de Bp \" Core borderPixmap
+.IP borderPixmap 1.5i
+The border pixmap of this widget's window. If this resource is set to
+anything other than \fBXtUnspecifiedPixmap\fP, the pixmap specified will be
+used instead of the border color.
+..
+.de Cm \" Core colormap
+.IP colormap 1.5i
+The colormap that this widget will use.
+..
+.de Dp \" Core depth
+.IP depth 1.5i
+The depth of this widget's window.
+..
+.de Mm \" Core mappedWhenManaged
+.IP mappedWhenManaged 1.5i
+If this resource is \fBTrue\fP, then the widget's window will
+automatically be mapped by the Toolkit when it is realized and managed.
+..
+.de Sc \" Core screen
+.IP screen 1.5i
+The screen on which this widget is displayed. This is not a settable
+resource.
+..
+.de Tr \" Core translations
+.IP translations 1.5i
+The event bindings associated with this widget.
+..
+
+\" Simple Widget Resource Definitions
+
+.de Cu \" Simple cursor
+.ie 'Bold'\\$1' .IP \fBcursor\fP 1.5i
+.el .IP cursor 1.5i
+The image that will be displayed as the pointer cursor whenever it is in
+this widget. The use of this resource is deprecated in favor
+of \fBcursorName\fP.
+..
+.de Cn \" Simple cursorName
+.ie 'Bold'\\$1' .IP \fBcursorName\fP 1.5i
+.el .IP cursorName 1.5i
+The name of the symbol to use to represent the pointer cursor. This resource
+will override the \fBcursor\fP resource if both are specified. (See 2.4.1)
+..
+.de Ib \" Simple insensitiveBorder
+.ie 'Bold'\\$1' .IP \fBinsensitiveBorder\fP 1.5i
+.el .IP insensitiveBorder 1.5i
+This pixmap will be tiled into the widget's border if the widget becomes
+insensitive.
+..
+.de In \" Simple international
+.ie 'Bold'\\$1' .IP \fBinternational\fP 1.5i
+.el .IP international 1.5i
+This is a boolean flag, only settable at widget creation
+time. A value of \fBfalse\fP signals the widget to use
+pre-R6 internationalization (specifically, the lack thereof),
+such as using fonts for displaying text, etc. A value of
+\fBtrue\fP directs the widget to act in an internationalized
+manner, such as utilizing font sets for displaying text, etc.
+..
+.de Ix \" Simple international
+.ie 'Bold'\\$1' .IP \fBinternational\fP 1.5i
+.el .IP international 1.5i
+This is a boolean flag, only settable at widget creation
+time. While not utilized in this widget, it can and should
+be checked by any subclasses that have behavior that
+should vary with locale.
+..
+.de Pf \" Simple pointerColor
+.ie 'Bold'\\$1' .IP \fBpointerColor\fP 1.5i
+.el .IP pointerColor 1.5i
+A pixel value which indexes the widget's colormap to derive the foreground
+color of the pointer symbol specified by the \fBcursorName\fP resource.
+..
+.de Pb \" Simple pointerColorBackground
+.ie 'Bold'\\$1' .IP \fBpointerColorBackground\fP 1.75i
+.el .IP pointerColorBackground 1.75i
+A pixel value which indexes the widget's colormap to derive the background
+color of the pointer symbol specified by the \fBcursorName\fP resource.
+..
+
+\" Label Widget Resource Definitions
+
+.de Bm \" Label bitmap
+.ie 'Bold'\\$1' .IP \fBbitmap\fP 1.5i
+.el .IP bitmap 1.5i
+A bitmap to display instead of the \fBlabel\fP. The default size of the
+widget will be just large enough to contain the bitmap and the widget's
+internal width and height. The resource converter for this resource
+constructs bitmaps from the contents of files. (See \fBConverting
+Bitmaps\fP for details.) If this bitmap is one bit deep then the 1's
+will be rendered in the foreground color, and the 0's in the background
+color. If \fBbitmap\fP has a depth greater than one, it is copied
+directly into the window.
+..
+.de Le \" Label encoding
+.ie 'Bold'\\$1' .IP \fBencoding\fP 1.5i
+.el .IP encoding 1.5i
+The encoding method used by the value of the \fBlabel\fP resource.
+The value may be \fBXawTextEncoding8bit\fP or \fBXawTextEncodingChar2b\fP.
+When \fBinternational\fP is set to \fBtrue\fP this resource is not used.
+..
+.de Lf \" Label font
+.ie 'Bold'\\$1' .IP \fBfont\fP 1.5i
+.el .IP font 1.5i
+The text font to use when displaying the \fBlabel\fP, when the
+\fBinternational\fP resource is \fBfalse\fP.
+..
+.de Ls \" Label fontSet
+.ie 'Bold'\\$1' .IP \fBfontSet\fP 1.5i
+.el .IP fontSet 1.5i
+The text font set to use when displaying the \fBlabel\fP, when the
+\fBinternational\fP resource is \fBtrue\fP.
+..
+.de Lg \" Label foreground
+.ie 'Bold'\\$1' .IP \fBforeground\fP 1.5i
+.el .IP foreground 1.5i
+A pixel value which indexes the widget's colormap to derive the
+foreground color of the widget's window. This color is also
+used to render all 1's in a \fBbitmap\fP one plane deep.
+..
+.de Ih \" Label internalHeight
+.ie 'Bold'\\$1' .IP \fBinternalHeight\fP 1.5i
+.el .IP internalHeight 1.5i
+.br
+.ns
+.ie 'Bold'\\$1' .IP \fBinternalWidth\fP 1.5i
+.el .IP internalWidth 1.5i
+The minimum amount of space to leave between the graphic
+and the vertical and horizontal edges of the window.
+..
+.de Ju \" Label justify
+.ie 'Bold'\\$1' .IP \fBjustify\fP 1.5i
+.el .IP justify 1.5i
+.IN "conversions" "Justify"
+Specifies left, center, or right alignment of graphic within the
+widget. This resource may be specified with the values
+\fBXtJustifyLeft\fP, \fBXtJustifyCenter\fP, or \fBXtJustifyRight\fP.
+.Rs "left, right, \fPand\fB center".
+This resource only has noticeable effect when the width of the widget
+is larger than necessary to display the graphic. Note that when the
+graphic is a multi-line \fBlabel\fP, the longest line will obey this
+justification while shorter lines will be left-justified with the longest
+one.
+
+..
+.de La \" Label label
+.ie 'Bold'\\$1' .IP \fBlabel\fP 1.5i
+.el .IP label 1.5i
+Specifies the text string to be displayed in the widget's window
+if no bitmap is specified. The default is the name of this widget.
+Regardless of the value of \fBencoding\fP or \fBinternational\fP,
+a single newline character (1 byte) will cause a line break.
+..
+.de Ll \" Label leftBitmap
+.ie 'Bold'\\$1' .IP \fBleftBitmap\fP 1.5i
+.el .IP leftBitmap 1.5i
+Specifies a bitmap to display to the left of the graphic in the widget's
+window.
+..
+.de Re \" Label resize
+.ie 'Bold'\\$1' .IP \fBresize\fP 1.5i
+.el .IP resize 1.5i
+Specifies whether the widget should attempt to resize to its
+preferred dimensions whenever its resources are modified with
+\fBXtSetValues\fP. This attempt to resize may be denied by the parent
+of this widget. The parent is always free to resize the widget
+regardless of the state of this resource.
+..
+
+\" Command Widget Resource Definitions
+
+.de Cb \" Command callback
+.ie 'Bold'\\$1' .IP \fBcallback\fP 1.5i
+.el .IP callback 1.5i
+A list of routines to be called when the \fBnotify\fP action is invoked.
+..
+.de Cr \" Command cornerRoundPercent
+.ie 'Bold'\\$1' .IP \fBcornerRoundPercent\fP 1.5i
+.el .IP cornerRoundPercent 1.5i
+When a \fBShapeStyle\fP of \fBroundedRectangle\fP is used, this
+resource controls the radius of the rounded corner. The radius of the
+rounded corners is specified as a percentage of the length of the
+shortest side of the widget.
+..
+.de Ht \" Command highlightThickness
+.ie 'Bold'\\$1' .IP \fBhighlightThickness\fP 1.5i
+.el .IP highlightThickness 1.5i
+The thickness of the rectangle that is used to highlight the internal
+border of this widget, alerting the user that it is ready to be
+selected. The default value is 2 pixels if the \fBshapeStyle\fP is
+\fBrectangle\fP, and 0 Pixels (no highlighting) otherwise.
+..
+.de Ss \" Command shapeStyle
+.ie 'Bold'\\$1' .IP \fBshapeStyle\fP 1.5i
+.el .IP shapeStyle 1.5i
+.IN "conversions" "ShapeStyle"
+Nonrectangular widgets may be created using this resource.
+Nonrectangular widgets are supported only on a server that supports the
+\fBShape Extension\fP. If nonrectangular widgets are specified
+for a server lacking this extension, the shape is ignored and the
+widgets will be rectangular. The following shapes are currently
+supported: \fBXmuShapeRectangle\fP, \fBXmuShapeOval\fP,
+\fBXmuShapeEllipse\fP, and \fBXmuShapeRoundedRectangle\fP.
+.Rs "rectangle, oval, ellipse, \fPand\fP roundedRectangle"
+..
+
+\" Composite Resources
+
+.de Ch \" Composite children
+.IP children 1.5i
+A list of all this composite widget's current children.
+..
+.de Ip \" Composite insertPosition
+.IP insertPosition 1.5i
+A function which allows the application programmer to specify the position
+of a new child.
+..
+.de Nc \" Composite numChildren
+.IP numChildren 1.5i
+The number of children in this composite widget.
+..
+
+\" Form Resources
+
+.de Dd \" Form defaultDistance
+.ie 'Bold'\\$1' .IP \fBdefaultDistance\fP 1.5i
+.el .IP defaultDistance 1.5i
+The default internal spacing for the children. This is
+the default value for the constraint resources \fBhorizDistance\fP and
+\fBvertDistance\fP.
+..
+
+\" Form Constraints
+
+.de Bt \" Form bottom, left, right, and top
+.ie 'Bold'\\$1' .IP \fBbottom\fP 1.5i
+.el .IP bottom 1.5i
+.br
+.ns
+.ie 'Bold'\\$1' .IP \fBleft\fP 1.5i
+.el .IP left 1.5i
+.br
+.ns
+.ie 'Bold'\\$1' .IP \fBright\fP 1.5i
+.el .IP right 1.5i
+.br
+.ns
+.ie 'Bold'\\$1' .IP \fBtop\fP 1.5i
+.el .IP top 1.5i
+What to do with this edge of the child when the parent is resized. This
+resource may be any \fBedgeType\fP. See \fBLayout Semantics\fP for
+details.
+..
+.de Fh \" Form fromHoriz and fromVert
+.ie 'Bold'\\$1' .IP \fBfromHoriz\fP 1.5i
+.el .IP fromHoriz 1.5i
+.br
+.ns
+.ie 'Bold'\\$1' .IP \fBfromVert\fP 1.5i
+.el .IP fromVert 1.5i
+Which widget this child should be placed underneath (or to the right
+of). If a value of NULL is specified then this widget will be positioned
+relative to the edge of the parent.
+..
+.de Hd \" Form horizDistance and vertDistance
+.ie 'Bold'\\$1' .IP \fBhorizDistance\fP 1.5i
+.el .IP horizDistance 1.5i
+.br
+.ns
+.ie 'Bold'\\$1' .IP \fBvertDistance\fP 1.5i
+.el .IP vertDistance 1.5i
+The amount of space, in pixels, between this child and its left or
+upper neighbor.
+..
+.de Rl \" Form resizable
+.ie 'Bold'\\$1' .IP \fBresizable\fP 1.5i
+.el .IP resizable 1.5i
+If this resource is \fBFalse\fP then the parent widget will ignore all
+geometry request made by this child. The parent may still resize this
+child itself, however.
+..
+
+.de Lt \" Form Section on Layout semantics
+The \\$1 widget uses two different sets of layout semantics. One is
+used when initially laying out the children. The other is used when
+the \\$1 is resized.
+.LP
+The first layout method uses the \fBfromVert\fP and \fPfromHoriz\fP
+.IN "fromVert" "
+.IN "fromHoriz" ""
+resources to place the children of the \\$1. A single pass is made
+through the \\$1 widget's children in the order that they were created.
+Each child is then placed in the \\$1 widget below or to the right of
+the widget specified by the \fBfromVert\fP and \fBfromHoriz\fP resources.
+The distance the new child is placed from its left or upper neighbor is
+determined by the \fBhorizDistance\fP and \fBvertDistance\fP resources.
+.IN "horizDistance" ""
+.IN "vertDistance" ""
+.IN "conversions" "Widget"
+This implies some things about how the order of creation affects the
+possible placement of the children. The Form widget registers a
+string to widget converter which does not postpone conversion and
+does not cache conversion results.
+.LP
+The second layout method is used when the \\$1 is resized. It does not
+matter what causes this resize, and it is possible for a resize to
+happen before the widget becomes visible (due to constraints imposed by
+the parent of the \\$1). This layout method uses the \fBbottom\fP,
+\fBtop\fP, \fBleft\fP, and \fBright\fP resources. These resources are
+used to determine what will happen to each edge of the child when the
+\\$1 is resized. If a value of \fBXawChain\fP\fI<something>\fP is
+.IN "XawChain" ""
+specified, the the edge of the child will remain a fixed distance from
+the \fIchain\fP edge of the \\$1. For example if \fBXawChainLeft\fP is
+specified for the \fBright\fP resource of a child then the right edge of
+that child will remain a fixed distance from the left edge of the \\$1
+widget. If a value of \fBXawRubber\fP is specified, that edge will grow
+.IN "XawRubber" ""
+by the same percentage that the \\$1 grew. For instance if the \\$1
+grows by 50% the left edge of the child (if specified as \fBXawRubber\fP
+will be 50% farther from the left edge of the \\$1). One must be very
+careful when specifying these resources, for when they are specified
+incorrectly children may overlap or completely occlude other children
+when the \\$1 widget is resized.
+..
+
+\" Text Resources
+
+.de Af \" Text autoFill
+.ie 'Bold'\\$1' .IP \fBautoFill\fP 1.5i
+.el .IP autoFill 1.5i
+If this resource is \fBTrue\fP the text widget will automatically break a line
+when the user attempts to type into the right margin. The attribute has
+no effect on files or text inserted into the text widget. It only
+checks to see if the action should be taken when a user enters a new
+character via the \fIinsert-character\fP action.
+..
+.de Tm \" Text margin resources
+.ie 'Bold'\\$1' .IP \fBbottomMargin\fP 1.5i
+.el .IP bottomMargin 1.5i
+.br
+.ns
+.ie 'Bold'\\$1' .IP \fBleftMargin\fP 1.5i
+.el .IP leftMargin 1.5i
+.br
+.ns
+.ie 'Bold'\\$1' .IP \fBrightMargin\fP 1.5i
+.el .IP rightMargin 1.5i
+.br
+.ns
+.ie 'Bold'\\$1' .IP \fBtopMargin\fP 1.5i
+.el .IP topMargin 1.5i
+The amount of space, in pixels, between the edge of the window
+and the corresponding edge of the text within the window. If there is
+a scrollbar active on this edge, then this is the space between the text and
+the scrollbar.
+..
+.de Tc \" Text displayCaret
+.ie 'Bold'\\$1' .IP \fBdisplayCaret\fP 1.5i
+.el .IP displayCaret 1.5i
+Whether or not to display the text insert point.
+..
+.de Td \" Text displayPosition
+.ie 'Bold'\\$1' .IP \fBdisplayPosition\fP 1.5i
+.el .IP displayPosition 1.5i
+The position in the text buffer of the character that is currently
+displayed in the upper left hand corner of the text display.
+..
+.de Ti \" Text insertPosition
+.ie 'Bold'\\$1' .IP \fBinsertPosition\fP 1.5i
+.el .IP insertPosition 1.5i
+This is the location of the insert point. It is expressed in
+characters from the beginning of the file. The cursor will always be
+forced to be on the screen. This resource may therefore be used to
+scroll the text display to a certain character position.
+..
+.de Tz \" Text resize
+.ie 'Bold'\\$1' .IP \fBresize\fP 1.5i
+.el .IP resize 1.5i
+.IN "conversions" "XawTextResizeMode"
+Controls whether or not the Text widget attempts to resize itself when
+it is no longer able to display the full text buffer in the associated
+window. Any attempt by the Text widget to resize itself is always
+subject to the constraints imposed by its parent. The values
+\fBXawtextResizeNever\fP, \fBXawtextResizeWidth\fP,
+.IN "XawtextResizeNever" ""
+.IN "XawtextResizeWidth" ""
+\fBXawtextResizeHeight\fP, and \fBXawtextResizeBoth\fP are all
+.IN "XawtextResizeHeight" ""
+.IN "XawtextResizeBoth" ""
+acceptable for this resource.
+.Rs "never, height, width, \fPand\fB both"
+..
+.de Ts \" Text scrollHorizontal and scrollVertical
+.ie 'Bold'\\$1' .IP \fBscrollHorizontal\fP 1.5i
+.el .IP scrollHorizontal 1.5i
+.br
+.ns
+.ie 'Bold'\\$1' .IP \fBscrollVertical\fP 1.5i
+.el .IP scrollVertical 1.5i
+.IN "conversions" "XawTextScrollMode"
+These resources control the placement of scrollbars on the left and
+bottom edge of the text widget. These resources accept the
+values \fBXawtextScrollAlways\fP, \fBXawtextScrollWhenNeeded\fP, and
+.IN "XawtextScrollAlways" ""
+.IN "XawtextScrollWhenNeeded" ""
+\fBXawtextScrollNever\fP.
+.IN "XawtextScrollNever" ""
+.Rs "always, never, \fPand\fB whenNeeded"
+If \fBXawtextScrollWhenNeeded\fP is specified, the appropriate scrollbar
+will only appear when there is text in the buffer that is not able to
+fit within the bounds of the current window. The scrollbar will
+disappear when the text once again fits within the window.
+..
+.de St \" Text selectTypes
+.ie 'Bold'\\$1' .IP \fBselectTypes\fP 1.5i
+.el .IP selectTypes 1.5i
+Specifies the selection type array that is used when
+multi-click is activated (see \fBText Selections for Application
+Programmers\fP for details). This resource is used in place, and must
+not be freed until the widget is destroyed. There is no
+type converter registered for this resource, so it may not be set from
+the resource manager.
+..
+.de To \" Text Source and Sink Objects
+.ie 'Bold'\\$1' .IP \fBtextSink\fP 1.5i
+.el .IP textSink 1.5i
+.br
+.ns
+.ie 'Bold'\\$1' .IP \fBtextSource\fP 1.5i
+.el .IP textSource 1.5i
+These are the TextSink or TextSource objects used by this widget.
+.ie 'Bold'\\$1' When using the Text widget these MUST be set by the \
+application programmer.
+.el \{\
+When \fBinternational\fP is set to \fBtrue\fP
+the AsciiText widget initializes these resources to point
+to an MultiSink and MultiSrc respectively.
+When \fBinternational\fP is set to \fBfalse\fP
+the AsciiText widget initializes these resources to point
+to an AsciiSink and AsciiSrc respectively.
+.\}
+..
+.de Tw \" Text wrap
+.ie 'Bold'\\$1' .IP \fBwrap\fP 1.5i
+.el .IP wrap 1.5i
+When the text in any one line is wider than the window there are several
+possible actions. This resource allows the user to decide what will
+happen. The accepted values for this resource are
+\fBXawtextWrapNever\fP, \fBXawtextWrapLine\fP, and
+.IN "XawtextWrapNever" ""
+.IN "XawtextWrapLine" ""
+\fBXawtextWrapWord\fP. With \fBXawtextWrapLine\fP all text
+.IN "XawtextWrapWord" ""
+.IN "WrapMode"
+that is beyond the right edge of the window will be displayed on the
+next line. With \fBXawtextWrapWord\fP the
+same action occurs but the text is broken at a word boundary if
+possible. If no wrapping is enabled then the text will extend off
+the edge of the window, and a small rectangle will be painted in the
+right margin to alert the user that this line is too long.
+.Rs "never, word, \fPand\fB line"
+..
+.de Tu \" Text unrealizeCallback
+.ie 'Bold'\\$1' .IP \fBunrealizeCallback\fP 1.5i
+.el .IP unrealizeCallback 1.5i
+A list of callback functions which will be executed when the Text widget
+is unrealized.
+..
+
+\" Text Sink Resources
+
+.de Sb \" TextSink background
+.ie 'Bold'\\$1 .IP \fBbackground\fP 1.5i
+.el .IP background 1.5i
+A pixel value which indexes the Text widget's colormap to derive the
+background color used by the text sink.
+..
+.de Sg \" TextSink foreground
+.ie 'Bold'\\$1' .IP \fBforeground\fP 1.5i
+.el .IP foreground 1.5i
+A pixel value which indexes the Text widget's colormap to derive the
+foreground color used by the text sink.
+.Sk \\$1
+..
+
+\" Ascii Sink Resources
+
+.de Sd \" AsciiSink displayNonprinting
+.ie 'Bold'\\$1' .IP \fBdisplayNonprinting\fP 1.5i
+.el .IP displayNonprinting 1.5i
+If this resource is \fBTrue\fP, the Text widget will display all
+non-printable characters as the string \fI^@\fP. If \fBFalse\fP, the
+Text widget
+will just leave a blank space where a non-printable character exists
+in the text buffer.
+.Sk \\$1
+..
+.de Sh \" AsciiSink echo
+.ie 'Bold'\\$1' .IP \fBecho\fP 1.5i
+.el .IP echo 1.5i
+Whether or not to echo characters to the screen. The buffer can still
+be edited, but nothing is displayed. This mode can be useful for
+entering passwords and other sensitive information.
+.Sk \\$1
+..
+.de Sf \" AsciiSink font
+.ie 'Bold'\\$1' .IP \fBfont\fP 1.5i
+.el .IP font 1.5i
+The text font to use when displaying the \fBstring\fP, when the
+\fBinternational\fP resource is \fBfalse\fP.
+.Sk \\$1
+..
+.de Sn \" MultiSink fontSet
+.ie 'Bold'\\$1' .IP \fBfont\fP 1.5i
+.el .IP font 1.5i
+The text font set to use when displaying the \fBstring\fP, when the
+\fBinternational\fP resource is \fBtrue\fP.
+.Sk \\$1
+..
+
+\" TextSrc Resources
+
+.de Oe \" TextSrc editType
+.ie 'Bold'\\$1' .IP \fBeditType\fP 1.5i
+.el .IP editType 1.5i
+This is the type of editing that will be allowed in this text widget.
+Legal values are \fBXawtextRead\fP, \fBXawtextEdit\fP, and
+.IN "XawtextRead" ""
+.IN "XawtextEdit" ""
+\fBXawtextAppend\fP.
+.IN "XawtextAppend" ""
+.IN "conversions" "XawTextEditType"
+.Rs "read, edit, \fPand\fB append"
+.So \\$1
+..
+
+\" AsciiSrc Resources
+
+
+.de Oc \" AsciiSrc callback
+.ie 'Bold'\\$1' .IP \fBcallback\fP 1.5i
+.el .IP callback 1.5i
+The callbacks registered on this resource will be called every time the
+text buffer changes, after the text has been updated.
+.So \\$1
+..
+.de Od \" AsciiSrc dataCompression
+.ie 'Bold'\\$1' .IP \fBdataCompression\fP 1.5i
+.el .IP dataCompression 1.5i
+The AsciiSrc uses an algorithm that may cause the text buffer to grow
+to about twice the size of the actual text over time, as the text is
+edited. On systems where CPU cycles are cheaper than memory, it is helpful to
+spend some extra time to compress this buffer back to its minimum size.
+If this resource is \fBTrue\fP, the AsciiSrc will compress its data
+to the minimum size required every time the text string is saved, or the
+value of the string is queried.
+.So \\$1
+..
+.de Ol \" AsciiSrc length
+.ie 'Bold'\\$1' .IP \fBlength\fP 1.5i
+.el .IP length 1.5i
+If the \fBuseStringInPlace\fP resource is \fBFalse\fP this attribute has no
+effect. If that resource is \fBTrue\fP, however, then the \fBlength\fP
+resource specifies the length of the buffer passed to the text widget
+in the \fBstring\fP resource.
+.So \\$1
+..
+.de Op \" AsciiSrc pieceSize
+.ie 'Bold'\\$1' .IP \fBpieceSize\fP 1.5i
+.el .IP pieceSize 1.5i
+This is the size of the internal chunks into which the text buffer is
+broken down for memory management. The larger this value the less segmented
+your memory will be, but the slower your editing will be. The text
+widgets will always allocate a chunk of memory this size to stuff the
+\fBstring\fP into, so when using small strings, having this buffer
+large can waste memory. This resource has no effect if
+\fBuseStringInPlace\fP is \fBTrue\fP.
+.So \\$1
+..
+.de Os \" AsciiSrc string
+.ie 'Bold'\\$1' .IP \fBstring\fP 1.5i
+.el .IP string 1.5i
+If \fBtype\fP is \fBXawAsciiString\fP then this string contains the
+buffer to be displayed in the widget. If \fBtype\fP is
+\fBXawAsciiFile\fP then the string contains the name of the file to be
+displayed. This string is normally copied by the text widget into
+internal memory, but may be used in place by setting the
+\fBuseStringInPlace\fP resource. As of X11R4 this is a settable resource.
+.So \\$1
+When the \fBstring\fP resource is queried, using \fBXtGetValues\fP, and
+\fBuseStringInPlace\fP is false, the value returned is valid until
+the next time the \fBstring\fP resource is queried, or until the application
+writer calls \fBXawAsciiSourceFreeString\fP. If \fBuseStringInPlace\fP is
+true, a pointer to the actual string is returned. See also section 5.6.
+..
+.de Ot \" AsciiSrc type
+.ie 'Bold'\\$1' .IP \fBtype\fP 1.5i
+.el .IP type 1.5i
+This resource may be either \fBXawAsciiString\fP or
+\fBXawAsciiFile\fP. The value of this resource determines whether the
+\fBstring\fP resource contains the name of a file to be opened or a buffer to
+be displayed by the text widget. A converter has been registered for
+this resource and accepts the values \fBstring\fP and \fBfile\fP.
+.IN "conversions" "AsciiType"
+.So \\$1
+..
+.de Ou \" AsciiSrc useStringInPlace
+.ie 'Bold'\\$1' .IP \fBuseStringInPlace\fP 1.5i
+.el .IP useStringInPlace 1.5i
+Setting this resource to \fBTrue\fP will disable the memory management
+provided by the Text widget, updating the \fBstring\fP resource in
+place. Using the string in place can
+be much more efficient for text widgets that display static data, or
+where the programmer wishes to impose strict constraints on the
+contents of the \fBstring\fP. When using the string in place be sure that:
+the length of the string is specified by setting the \fBlength\fP resource,
+the \fBtype\fP of the Text widget is \fBXawAsciiString\fP, and that
+the \fBstring\fP exists for the lifetime of the text widget, or until it has
+been reset. \fINote: Since the MultiSrc and AsciiSrc have different data
+formats, use of this resource forces application code to be cognisant as to
+which of the two is being used. Application programming is simplified when
+use of this resource is avoided.\fP
+.So \\$1
+..
+.\" .TB is used throughout this manual. Don't know what it is,
+.\" but I'll guess "table bold".
+.\" Note that I've also used it to set the size, rather than
+.\" have (incorrect) commands sprinkled throughout the document.
+.\" -gildea April 1994
+.de TB
+.B
+.ps 9
+.vs 11
+..
diff --git a/libXaw/spec/widg.idxmac.t b/libXaw/spec/widg.idxmac.t
new file mode 100644
index 000000000..b464a1a7d
--- /dev/null
+++ b/libXaw/spec/widg.idxmac.t
@@ -0,0 +1,3 @@
+.eh '\fBAthena Widget Set\fP''\fB\*(xV\fP'
+.oh '\fBAthena Widget Set\fP''\fB\*(xV\fP'
+.so index.pageno