Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ XmResolvePa(Xm) — OpenDesktop Software Development System 1.0.0d

Media Vault

Software Library

Restoration Projects

Artifacts Sought


     XmResolvePartOffsets(Xm)                       UNIX System V



     NAME
          XmResolvePartOffsets - a function  that  allows  writing  of
          upward-compatible applications and widgets.



     SYNOPSIS
          #include <Xm/XmP.h>

          void XmResolvePartOffsets (widget_class, offset)
               WidgetClasswidget_class;
               XmOffsetPtr* offset;




     DESCRIPTION
          The use of offset records requires one extra global variable
          per  widget class.  The variable consists of a pointer to an
          array of offsets into the widget record for each part of the
          widget   structure.    The   XmResolvePartOffsets   function
          allocates the offset records needed  by  an  application  to
          guarantee upward-compatible applications and widgets.  These
          offset records are used by the widget to access all  of  the
          widget's  variables.   A  widget needs to take the following
          steps:

          ⊕  Instead of creating a resource list, the  widget  creates
             an  offset  resource  list.  To help you accomplish this,
             use the XmPartResource  structure  and  the  XmPartOffset
             macro.  The XmPartResource data structure looks just like
             a resource list, but instead of having  one  integer  for
             its  offset,  it  has two shorts.  This gets put into the
             class record as  if  it  were  a  normal  resource  list.
             Instead  of  using  XtOffset  for  the  offset,  it  uses
             XmPartOffset.

          ⊕  Instead of putting the widget size in the  class  record,
             the widget puts the widget part in the same field.

          ⊕  Instead of putting XtVersion in  the  class  record,  the
             widget puts XtVersionDontCheck in the class record.

          ⊕  The widget defines a variable  to  point  to  the  offset
             record.  This can be part of the widget's class record or
             a separate global variable.

          ⊕  In    class    initialization,    the    widget     calls
             XmResolvePartOffsets,  passing  it the offset address and
             the class record.  This does several things:

             Adds the superclass (which, by  definition,  has  already
             been initialized) size field to the part size field.

             Allocates an array based upon the number of superclasses.

             Fills in the offsets of all the  widget  parts  with  the
             appropriate  values,  determined  by  examining  the size
             fields of all superclass records.

             Uses the part offset array to modify the  offset  entries
             in the resource list to be real offsets, in place.

          ⊕  Instead of accessing fields  directly,  the  widget  must
             always  go  through  the offset table.  You will probably
             define macros for each field to make this easier.  Assume
             an integer field ``xyz'':

             #define   BarXyz(w)   (*(int   *)(((char    *)    w)    +
             offset[BarIndex] + \ XtOffset(BarPart,xyz)))


             The XmField macro helps you access these fields.  Because
             the  XmPartOffset  and  XmField macros concatenate things
             together, you must ensure there is  no  space  before  or
             after  the  part argument.  For example, the following do
             not work because of the space before or  after  the  part
             (Label) argument:


             XmField(w, offset, Label, text, char *)

             XmPartOffset( Label, text).

             Therefore, you must not have any spaces before  or  after
             the part (Label) argument, as illustrated here:


             XmField(w, offset,Label, text, char *)


          The parameters for XmResolvePartOffsets are defined below:

          widget_class
                    Specifies the widget class pointer for the created
                    widget.

          offset    Specifies the offset record.



     (printed 2/14/90)                   XmResolvePartOffsets(Xm)

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026