The Commands menu should contain the following items:

    Run                                                [the selected benchmark]
    Benchmark Options.../Hide Benchmark Options                        [toggle]
    Graphics Options.../Hide Graphics Options                          [toggle]
    Describe Test.../Hide Test Description                             [toggle]
    Start Recording/Stop Recording                                     [toggle]
    Playback                        [pop up a dialogue box asking for filename]
    --------
    Quit                   [pop up a dialogue box asking if we are really done]


The Benchmark Options sheet should contain the information shown below.  The
list of graphics primitives was derived from the "Definition of the Porting
Layer for the X v11 Sample Server" by Angebranndt et al. and from the Protocol
document.


			       Benchmark Options


            +-----------------------+-----------------------+
 Test       |      Copy Area        |      Copy Plane       |
            +-----------------------+-----------------------+
            |        Points         |        Lines          |
            +-----------------------+-----------------------+
            |       Segments        |      Rectangles       |
            +-----------------------+-----------------------+
            |         Arcs          |    Filled Polygons    |
            +-----------------------+-----------------------+
            |   Filled Rectangles   |      Filled Arcs      |
            +-----------------------+-----------------------+
            |       Put Image       |       Get Image       |
            +-----------------------+-----------------------+
            |        Text 8         |      Image Text 8     |
            +-----------------------+-----------------------+
            |        Text 16        |      Image Text 16    |
            +-----------------------+-----------------------+

            +---------+
 Iterations |   10000 |
            +---------+

            +----+-----+                         +----+-----+
 Record     | on | off |          Describe Test  | on | off |
            +----+-----+                         +----+-----+

            +-----------------------------------------------+
 Filename   |                                  ./xbench.log |
            +-----------------------------------------------+


*******************************************************************************


The Graphics Options area would contain the following entries:

    Function - one-of { clear, and, andReverse, copy, andInverted, noop, xor, 
		        or, nor, equiv, invert, orReverse, copyInverted, 
		        orInverted, nand, set }
    PlaneMask - unsigned value or many-of-n representing bits
    Foreground - unsigned value in range 0..2^nplanes
    Background - unsigned value in range 0..2^nplanes
    ForegroundColor - set rgb value of Foreground
    BackgroundColor - set rgb value of background
    LineWidth - unsigned number in range 0..65535
    LineStyle - oneof { Solid, OnOffDash, DoubleDash }
    CapStyle - one-of { NotLast, Butt, Round, Projecting }
    JoinStyle - one-of { Miter, Round, Bevel }
    FillStyle - one-of { Solid, Tiled, OpaqueStippled, Stippled }
    FillRule - one-of { EvenOdd, Winding }
    ArcMode - one-of { Chord, PieSlice }
    # Tile - pixmap [probably not edittable in first version]
    # Stipple - pixmap [probably not edittable in first version]
    TileStipXOrigin - signed number in range -32768..32767
    TileStipYOrigin - signed number in range -32768..32767
    Font - name of font
    ClipXOrigin - signed number in range -32768..32767
    ClipYOrigin - signed number in range -32768..32767
    ClipMask - one-of { None, select } [user selects by clicking in work area]
    DashOffset - unsigned number in range -32768..32767
    DashList - many-of-n of 8 boxes for defining dashes




			       Graphics Options


             +--------------+--------------+--------------+--------------+
 Function    |     clear    |      and     |  andReverse  |     copy     |
             +--------------+--------------+--------------+--------------+
             | andInverted  |     noop     |      xor     |      or      |
             +--------------+--------------+--------------+--------------+
             |      nor     |     equiv    |    invert    |   orReverse  |
             +--------------+--------------+--------------+--------------+
             | copyInverted |  orInverted  |     nand     |      set     |
             +--------------+--------------+--------------+--------------+

             +-----+---------+
 Colormap    | new | default |
             +-----+---------+

             +----------+                     +--------+--------+--------+
 Foreground  |        1 |    ForegroundColor  |  ffff  |  ffff  |  ffff  |
             +----------+                     +--------+--------+--------+

             +----------+                     +--------+--------+--------+
 Background  |        0 |    BackgroundColor  |  0000  |  0000  |  0000  |
             +----------+                     +--------+--------+--------+

             +------+                   +-------+-----------+------------+
 LineWidth   |    3 |        LineStyle  | Solid | OnOffDash | DoubleDash |
             +------+                   +-------+-----------+------------+

             +---------+------+-------+------------+
 CapStyle    | NotLast | Butt | Round | Projecting |
             +---------+------+-------+------------+

             +-------+-------+-------+
 JoinStyle   | Miter | Round | Bevel |
             +-------+-------+-------+

             +-------+-------+----------+----------------+
 FillStyle   | Solid | Tiled | Stippled | OpaqueStippled |
             +-------+-------+----------+----------------+

             +---------+---------+
 FillRule    | EvenOdd | Winding |
             +---------+---------+

             +-------+----------+
 ArcMode     | Chord | PieSlice |
             +-------+----------+

             +--------------+
 TStipOrigin | +####, +#### |
             +--------------+

             +-+-+-+-+-+-+-+-+                                   +-------+
 DashList    | | |X|X| | |X|X|                       DashOffset  | +#### |
             +-+-+-+-+-+-+-+-+                                   +-------+

             +----+-----+-----+-------+                         +--------+
 ClipMask    | on | off | set | clear |             PlaneMask   |  ffff  |
             +----+-----+-----+-------+                         +--------+


*******************************************************************************

				    Grammar


Both to support Record/Playback (used for debugging, demonstrations, and for
creating benchmark scripts), there needs to be a command line language that
can be used to set all options.  Although we won't be doing anything as
sophisticated as what is provided in many UIMS's, it would be nice to keep
the application section of the benchmark as separate as possible from the
user interface.

    test  { CopyArea, CopyPlane, PolyPoint, PolyLine, PolySegment, 
	    PolyRectangle, PolyArc, FillPolygon, PolyFillRect, PolyFillArc,
	    PutImage, GetImage, ImageText8, PolyText8, ImageText16,
	    PolyText16 }
	-  selects the test to be performed.

    colormap  { new, default }
	-  selects which colormap should be used for test

    iterations UNSIGNEDNUMBER
	-  specifies the number of times that the test should be run.

    record BOOLEAN
	-  indicates whether or not to record commands into the record-file.

    record-file  FILENAME
	-  specifies the name of the file into which commands are recorded.

    describe  BOOLEAN
	-  indicates whether or not a description of the test should be 
	   displayed whenever a test is selected (or when this option is
	   specified).

    function  { clear, and, andReverse, copy, andInverted, noop, xor, or, nor,
		equiv, invert, orReverse, copyInverted, orInverted, nand, set }
	-  selects the alu function to use in the GC.

    foreground UNSIGNEDNUMBER
	-  selects the foreground pixel value to use in the GC; if a new
	   colormap is being used, the RGB value for this slot may be changed.

    background UNSIGNEDNUMBER
	-  selects the background pixel value to use in the GC; if a new
	   colormap is being used, the RGB value for this slot may be changed.

    forecolor COLORNAME
	-  specifies the RGB value or name of the color to be used for the 
	   foreground pixel, if settable.

    backcolor COLORNAME
	-  specifies the RGB value or name of the color to be used for the 
	   background pixel, if settable.

    linewidth NUMBER
	-  specifies width of lines to use in the GC.

    linestyle  { Solid, OnOffDash, DoubleDash }
	-  selects the type of lines to use in the GC.

    capstyle  { NotLast, Butt, Round, Projecting }
	-  selects the type of caps to use in the GC.

    joinstyle  { Miter, Round, Bevel }
	-  selects the type of joins to use in the GC.

    fillstyle  { Solid, Tiled, Stippled, OpaqueStippled }
	-  selects the type of fills to use in the GC.

    fillrule  { EvenOdd, Winding }
	-  selects the fill rule to be used in the GC.

    arcmode  { Chord, PieSlice }
	-  selects the type of arcs to be drawn in the GC.

    tsorigin  NUMBER  NUMBER
	-  specifies the X and Y values of the TileStippleOrigin in the GC.

    dashlist  DASHPATTERN
	-  specifies a pattern of 8 binary digits to use in the dashlist
	   in the GC; the characters are given in big-endian order such that
	   they may be read in binary to form a number between 0 and 255.

    dashoffset  NUMBER
	-  specifies the dashoffset to use in the GC.

    cliporigin  NUMBER  NUMBER
	-  specifies the X and Y values of the cliporigin in the GC.

    clipmask  { on, off, set NUMBER NUMBER NUMBER NUMBER, clear }
	-  selects a clipping mode.  If "on", then use the most recently
	   defined set of clipping rectangles; if "off", then do not do
	   any clipping but keep the clipping rectangles for future
	   reference; if "set", then add the rectangle specified by
	   the remaining numeric arguments as X1 Y1 X2 Y2 relative to the
	   cliporigin.

    planemask  NUMBER
	-  specifies the set of planes on to which graphics may be drawn
	   in the GC.

    run
	-  run the currently configured test.

    quit
	-  exit the program
