The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

UIL (5)
  • >> UIL (5) ( Solaris man: Форматы файлов )
  • 
    NAME
         UIL - The user interface language file format
    
    SYNOPSIS
         MODULE module_name
              [ NAMES = CASE_INSENSITIVE | CASE_SENSITIVE ]
              [ CHARACTER_SET = character_set ]
              [ OBJECTS = { widget_name = GADGET | WIDGET; [...] } ]
              { [
              [ value_section ] |
              [ procedure_section ] |
              [ list_section ] |
              [ object_section ] |
              [ identifier_section ]
              [ ... ]
              ] }
         END MODULE;
    
    DESCRIPTION
         The UIL language is used for describing the initial state of
         a  user  interface  for  a  widget  based  application.  UIL
         describes the widgets used in the interface,  the  resources
         of  those  widgets, and the callbacks of those widgets.  The
         UIL file is compiled into a UID file using the  command  uil
         or by the callable compiler Uil().  The contents of the com-
         piled UID file can then by accessed  by  the  various  Motif
         Resource  Management (MRM) functions from within an applica-
         tion program.
    
    FILE FORMAT
         UIL is a free-form language.   This  means  that  high-level
         constructs such as object and value declarations do not need
         to begin in any particular column and can span any number of
         lines.   Low-level  constructs such as keywords and punctua-
         tion characters can  also  begin  in  any  column;  however,
         except  for  string  literals and comments, they cannot span
         lines.
    
         The UIL compiler accepts input lines up to 132 characters in
         length.
    
         MODULE module_name
              The name by which the UIL module is known  in  the  UID
              file.   This  name  is stored in the UID file for later
              use in the retrieval of resources  by  the  MRM.   This
              name is always stored in uppercase in the UID file.
    
         NAMES = CASE_INSENSITIVE | CASE_SENSITIVE
              Indicates whether names should be treated as case  sen-
              sitive or case insensitive.  The default is case sensi-
              tive. The case-sensitivity clause should be  the  first
              clause  in  the  module  header,  and  in any case must
              precede any statement that contains a name.   If  names
              are  case  sensitive  in  a UIL module, UIL keywords in
              that module must be in lowercase.  Each name is  stored
              in  the  UIL file in the same case as it appears in the
              UIL module. If names are case  insensitive,  then  key-
              words  can  be  in uppercase, lowercase, or mixed case,
              and the uppercase equivalent of each name is stored  in
              the UID file.
    
         CHARACTER_SET = character_set
              Specifies the default character set for string literals
              in  the module that do not explicitly set their charac-
              ter set.  The default character set, in the absence  of
              this  clause  is  the  codeset  component  of  the LANG
              environment    variable,    or     the     value     of
              XmFALLBACK_CHARSET if LANG is not set or has no codeset
              component.  The value of XmFALLBACK_CHARSET is  defined
              by  UIL  supplier, but is usually ISO8859-1 (equivalent
              to ISO_LATIN1).  Use  of  this  clause  turns  off  all
              localized  string  literal  processing turned on by the
              compiler flag -s or the Uil_command_type data structure
              element use_setlocale_flag.
    
         OBJECTS = { widget_name = GADGET | WIDGET; }
              Indicates whether the widget or gadget form of the con-
              trol  specified  by widget_name is used by default.  By
              default the widget form is used, so the gadget  keyword
              is  usually  the  only one used.  The specified control
              should be one that has both a widget  and  gadget  ver-
              sion:     XmCascadeButton,    XmLabel,    XmPushButton,
              XmSeparator, and XmToggleButton.  The form of more than
              one  control  can  be specified by delimiting them with
              semicolons.  The gadget or widget form of  an  instance
              of  a  control  can  be  specified  with the GADGET and
              WIDGET keywords in a particular object declaration.
    
         value_section
              Provides a way to name a value expression  or  literal.
              The  value name can then be referred to by declarations
              that occur elsewhere in the UIL module in  any  context
              where  a  value  can  be  used.   Values can be forward
              referenced.   Value  sections  are  described  in  more
              detail later in the reference page.
    
         procedure_section
              Defines the callback routines used by a widget and  the
              creation  routines  for  user-defined  widgets.   These
              definitions are used  for  error  checking.   Procedure
              sections  are  described  in  more  detail later in the
              reference page.
    
         list_section
              Provides a way to group together a  set  of  arguments,
              controls (children), callbacks, or procedures for later
              use in the UIL module.  Lists can contain other  lists,
              so  that  you  can  set  up a hierarchy to clearly show
              which arguments, controls,  callbacks,  and  procedures
              are   common  to  which  widgets.   List  sections  are
              described in more detail later in the reference page.
    
         object_section
              Defines the objects that make up the user interface  of
              the application.  You can reference the object names in
              declarations that occur elsewhere in the UIL module  in
              any context where an object name can be used (for exam-
              ple, in a controls list, as a symbolic reference  to  a
              widget  ID, or as the tag_value argument for a callback
              procedure). Objects can be forward referenced.   Object
              sections  are  described  in  more  detail later in the
              reference page.
    
         identifier_section
              Defines a run-time binding of data to names that appear
              in  the  UIL module.  Identifier sections are described
              in more detail later in the reference page.
    
         The UIL file can also contain comments  and  include  direc-
         tives,  which  are described along with the main elements of
         the UIL file format in the following sections.
    
      Comments
         Comments can take one of two forms, as follows:
    
         o    The comment is introduced with the sequence /* followed
              by  the  text  of  the  comment and terminated with the
              sequence */.  This form of comment  can  span  multiple
              source lines.
    
         o    The  comment  is  introduced  with  an  !  (exclamation
              point),  followed  by  the text of the comment and ter-
              minated by the end of the source line.
    
         Neither form of comment can be nested.
    
      Value sections
         A value section consists of the keyword VALUE followed by  a
         sequence  of  value declarations.  It has the following syn-
         tax:
    
         VALUE value_name :
              [ EXPORTED | PRIVATE ] value_expression |
              IMPORTED value_type ;
    
    
         Where  value_expression  is  assigned  to  value_name  or  a
         value_type  is  assigned to an imported value name.  A value
         declaration provides a way to name  a  value  expression  or
         literal.   The value name can be referred to by declarations
         that occur later in the UIL module in any  context  where  a
         value can be used.  Values can be forward referenced.
    
         EXPORTED
              A value that you define as exported is  stored  in  the
              UID  file  as  a  named  resource, and therefore can be
              referenced by name in other UID files.  When you define
              a  value  as  exported, MRM looks outside the module in
              which the exported value is declared to get  its  value
              at run time.
    
         PRIVATE
              A private value is a value  that  is  not  imported  or
              exported.   A  value  that you define as private is not
              stored as a distinct resource in the UID file.  You can
              reference  a  private value only in the UIL module con-
              taining the value declaration. The value or  object  is
              directly  incorporated  into anything in the UIL module
              that references the declaration.
    
         IMPORTED
              A value that you define as  imported  is  one  that  is
              defined  as  a  named  resource  in  a  UID  file.  MRM
              resolves  this  declaration  with   the   corresponding
              exported declaration at application run time.
    
         By default, values and objects are private.   The  following
         is a list of the supported value types in UIL.
    
         o    ANY
    
         o    ARGUMENT
    
         o    BOOLEAN
    
         o    COLOR
    
         o    COLOR_TABLE
    
         o    COMPOUND_STRING
    
         o    FLOAT
    
         o    FONT
    
         o    FONT_TABLE
    
         o    FONTSET
         o    ICON
    
         o    INTEGER
    
         o    INTEGER_TABLE
    
         o    KEYSYM
    
         o    REASON
    
         o    SINGLE_FLOAT
    
         o    STRING
    
         o    STRING_TABLE
    
         o    TRANSLATION_TABLE
    
         o    WIDE_CHARACTER
    
         o    WIDGET
    
      Procedure sections
         A procedure section consists of the keyword  PROCEDURE  fol-
         lowed  by  a sequence of procedure declarations.  It has the
         following syntax:
    
         PROCEDURE
              procedure_name [ ( [ value_type ] ) ] ;
    
         Use a procedure declaration to declare:
    
         o    A routine that can be used as a callback routine for  a
              widget
    
         o    The creation function for a user-defined widget
    
         You can reference a  procedure  name  in  declarations  that
         occur  later  in  the UIL module in any context where a pro-
         cedure can be used.  Procedures can be  forward  referenced.
         You  cannot use a name you used in another context as a pro-
         cedure name.
    
         In a procedure declaration, you have the option of  specify-
         ing  that  a  parameter  will be passed to the corresponding
         callback routine at run time.  This parameter is called  the
         callback tag.  You can specify the data type of the callback
         tag by putting the data type in  parentheses  following  the
         procedure  name.   When you compile the module, the UIL com-
         piler checks that the argument you specify in references  to
         the  procedure  is of this type.  Note that the data type of
         the callback tag must be one of the valid  UIL  data  types.
         You  can  use  a  widget  as  a callback tag, as long as the
         widget is defined in the same widget hierarchy as the  call-
         back,  that  is  they  have a common ancestor that is in the
         same UIL hierarchy.
    
         The following list summarizes how the  UIL  compiler  checks
         argument type and argument count, depending on the procedure
         declaration.
    
         No parameters
              No argument type or argument count checking occurs. You
              can  supply  either  0  or  1  aguments in the prcedure
              reference.
    
         ( )  Checks that the argument count is 0.
    
         (ANY)
              Checks that the argument count is 1.   Does  not  check
              the  argument  type.   Use the ANY type to prevent type
              checking on procedure tags.
    
         (type)
              Checks for one argument of the specified type.
    
         (class_name)
              Checks for one widget argument of the specified  widget
              class.
    
         While it is possible to use any UIL data type to specify the
         type  of  a tag in a procedure declaration, you must be able
         to represent that data type in the programming language  you
         are  using.   Some data types (such as integer, Boolean, and
         string) are common data types recognized by most programming
         languages.  Other UIL data types (such as string tables) are
         more complicated and may require you to set up an  appropri-
         ate corresponding data structure in the application in order
         to pass a tag of that type to a callback routine.
    
         You can also use a  procedure  declaration  to  specify  the
         creation  function for a user-defined widget.  In this case,
         you specify no formal parameters.  The procedure is  invoked
         with the standard three arguments passed to all widget crea-
         tion functions.  (See the Motif  Toolkit  documentation  for
         more information about widget creation functions.)
    
      List sections
         A list section consists of the keyword LIST  followed  by  a
         sequence of list declarations.  It has the following syntax:
    
         LIST
              list_name : { list_item; [...] }
              [...]
    
         You can also use list sections to group together  a  set  of
         arguments, controls (children), callbacks, or procedures for
         later use in the UIL module.  Lists can contain other lists,
         so  that  you  can  set up a hierarchy to clearly show which
         arguments, controls, callbacks, and procedures are common to
         which widgets.  You cannot mix the different types of lists;
         a list of a particular type cannot contain entries of a dif-
         ferent  list  type or reference the name of a different list
         type.  A list name is always private to the  UIL  module  in
         which  you  declare the list and cannot be stored as a named
         resource in a UID file.
    
         The additional list types are  described  in  the  following
         sections.
    
         Arguments List Structure
    
         An arguments list defines which arguments are to  be  speci-
         fied  in the arguments-list parameter when the creation rou-
         tine for a particular object is called at run time. An argu-
         ments  list  also  specifies the values for those arguments.
         Argument lists have the following syntax:
    
         LIST
              list_name : ARGUMENTS {
                   argument_name = value_expression;
                   [...] }
              [...]
    
         The argument name must be either a built-in argument name or
         a  user-defined  argument  name  that  is specified with the
         ARGUMENT function.
    
         If you use a built-in argument name  as  an  arguments  list
         entry  in  an object definition, the UIL compiler checks the
         argument name to be sure that it is supported by the type of
         object  that  you  are  defining.  If the same argument name
         appears more than once in a given arguments list,  the  last
         entry  that  uses that argument name supersedes all previous
         entries with that name, and the compiler issues a message.
    
         Some arguments, such as XmNitems and XmNitemCount, are  cou-
         pled  by the UIL compiler. When you specify one of the argu-
         ments, the compiler also sets the other.  The coupled  argu-
         ment is not available to you.
    
         The Motif Toolkit and the  X  Toolkit  (intrinsics)  support
         constraint  arguments.  A constraint argument is one that is
         passed to children of an object, beyond those arguments nor-
         mally  available.  For example, the Form widget grants a set
         of constraint arguments to its  children.   These  arguments
         control the position of the children within the Form.
         Unlike the arguments used to define the attributes of a par-
         ticular widget, constraint arguments are used exclusively to
         define additional attributes of the children of a particular
         widget.   These  attributes affect the behavior of the chil-
         dren within their parent.  To supply constraint arguments to
         the  children,  you  include  the arguments in the arguments
         list for the child.
    
         See Appendix B for information  about  which  arguments  are
         supported  by which widgets.  See Appendix C for information
         about what the valid value type is for each  built-in  argu-
         ment.
    
         Callbacks List Structure
    
         Use a callbacks list to define which callback reasons are to
         be  processed  by a particular widget at run time.  Callback
         lists have the following syntax:
    
         LIST
              list_name : CALLBACKS {
                   reason_name = PROCEDURE procedure_name [ ( [ value_expression ] ) ]; |
                   reason_name = procedure_list ;
                   [...] }
              [...]
    
         For Motif Toolkit widgets, the reason name must be a  built-
         in  reason  name.   For a user-defined widget, you can use a
         reason name that you previously specified using  the  REASON
         function.  If you use a built-in reason in an object defini-
         tion, the UIL compiler ensures that reason is  supported  by
         the type of object you are defining.  Appendix B shows which
         reasons each object supports.
    
         If the same reason appears more than  once  in  a  callbacks
         list,  the  last entry referring to that name supersedes all
         previous entries using the same reason, and the UIL compiler
         issues a diagnostic message.
    
         If you specify a named  value  for  the  procedure  argument
         (callback  tag),  the  data type of the value must match the
         type specified for the callback  tag  in  the  corresponding
         procedure  declaration.   When specifying a widget name as a
         procedure value expression you must also specify the type of
         the widget and a space before the name of the widget.
    
         Because the UIL compiler produces a UID file rather than  an
         object  module  (.o),  the  binding  of  the UIL name to the
         address of the entry point to the procedure is not  done  by
         the  loader,  but  is  established  at run time with the MRM
         function MrmRegisterNames.  You call  this  function  before
         fetching  any  objects, giving it both the UIL names and the
         procedure addresses of each callback.  The name you register
         with  MRM in the application program must match the name you
         specified for the procedure in the UIL module.
    
         Each callback procedure receives three arguments.  The first
         two  arguments  have  the  same form for each callback.  The
         form of the third argument varies from object to object.
    
         The first argument is the  address  of  the  data  structure
         maintained  by  the  Motif Toolkit for this object instance.
         This address is called the widget ID for this object.
    
         The second argument is the address of the value  you  speci-
         fied in the callbacks list for this procedure. If you do not
         specify an argument, the address is NULL.
    
         The third argument is the reason name you specified  in  the
         callbacks list.
    
         Controls List Structure
    
         A controls list defines which objects are  children  of,  or
         controlled  by,  a  particular object.  Each entry in a con-
         trols list has the following syntax:
    
         LIST
              list_name : CONTROLS {
                   [child_name] [MANAGED | UNMANAGED] object_definition;
                   [...] }
              [...]
    
         If you specify the keyword MANAGED at run time,  the  object
         is  created  and  managed;  if  you specify UNMANAGED at run
         time, the object is only created.  Objects  are  managed  by
         default.
    
         You can use child_name to specify resources for the automat-
         ically  created children of a particular control.  Names for
         automatically created children are formed by  appending  Xm_
         to  the name of the child widget.  This name is specified in
         the documentation for the parent widget.
    
         Unlike the arguments list and the callbacks list, a controls
         list  entry  that  is identical to a previous entry does not
         supersede the previous entry.  At run  time,  each  controls
         list  entry  causes a child to be created when the parent is
         created.  If the same object definition is used for multiple
         children, multiple instances of the child are created at run
         time. See Appendix B for a list of which widget types can be
         controlled by which other widget types.
    
    
         Procedures List Structure
    
         You can specify multiple procedures for a callback reason in
         UIL  by defining a procedures list.  Just as with other list
         types, procedures lists can be defined in-line or in a  list
         section and referenced by name.
    
         If you define a reason more than once (for example, when the
         reason  is  defined both in a referenced procedures list and
         in the callbacks list for the object), previous  definitions
         are  overridden  by the latest definition.  The syntax for a
         procedures list is as follows:
    
         LIST
              list_name : PROCEDURES {
                   procedure_name [ ( [ value_expression ] ) ];
                   [...] }
              [...]
    
         When specifying a widget name as a procedure  value  expres-
         sion  you  must  also  specify  the type of the widget and a
         space before the name of the widget.
    
      Object Sections
         An object section consists of the keyword OBJECT followed by
         a  sequence  of  object  declarations.  It has the following
         syntax:
    
         OBJECT object_name :
              [ EXPORTED | PRIVATE | IMPORTED ] object_type
                   [ PROCEDURE creation_function ]
                   [ object_name [ WIDGET | GADGET ] | { list_definitions } ]
    
         Use an object declaration to define the objects that are  to
         be  stored  in  the  UID file.  You can reference the object
         name in declarations that occur elsewhere in the UIL  module
         in  any  context where an object name can be used (for exam-
         ple, in a controls list, as a symbolic reference to a widget
         ID,  or as the tag_value argument for a callback procedure).
         Objects can be forward referenced; that is, you can  declare
         an object name after you reference it.  All references to an
         object name must be consistent with the type of the  object,
         as  specified  in the object declaration. You can specify an
         object as exported, imported, or private.
    
         The object definition can contain a sequence of  lists  that
         define  the  arguments,  hierarchy,  and  callbacks  for the
         widget. You can specify only one list of each  type  for  an
         object.   When  you  declare a user-defined widget, you must
         include a reference to the widget creation function for  the
         user-defined widget.
    
         Use the GADGET or WIDGET keyword to specify the object  type
         or  to  override  the  default variant for this object type.
         You can use the Motif Toolkit name of an  object  type  that
         has  a  gadget  variant  (for  example, XmLabelGadget) as an
         attribute of an object declaration.  The object_type can  be
         any object type, including gadgets.  You need to specify the
         GADGET or WIDGET keyword  only  in  the  declaration  of  an
         object,  not  when  you  reference  the  object.  You cannot
         specify the GADGET or  WIDGET  keyword  for  a  user-defined
         object; user-defined objects are always widgets.
    
      Identifier sections
         The identifier section allows you to define an identifier, a
         mechanism  that  achieves  run-time binding of data to names
         that appear in a UIL module. The identifier section consists
         of  the  reserved  keyword IDENTIFIER, followed by a list of
         names, each name followed by a semicolon.
    
         IDENTIFIER identifier_name; [...;]
    
         You can later use these names in the UIL  module  as  either
         the  value  of an argument to a widget or the tag value to a
         callback procedure. At run time, you use the  MRM  functions
         MrmRegisterNames and MrmRegisterNamesInHierarchy to bind the
         identifier name with the data (or, in the case of callbacks,
         with  the  address of the data) associated with the identif-
         ier.
    
         Each UIL module has a single name space; therefore, you can-
         not use a name you used for a value, object, or procedure as
         an identifier name in the same module.
    
         The UIL compiler does not do any type checking on the use of
         identifiers  in  a UIL module.  Unlike a UIL value, an iden-
         tifier does not have a UIL type associated with it.  Regard-
         less  of  what particular type a widget argument or callback
         procedure tag is defined to be, you can use an identifier in
         that context instead of a value of the corresponding type.
    
         To reference these identifier names in a UIL module, you use
         the name of the identifier wherever you want its value to be
         used.
    
      Include directives
         The include directive incorporates the contents of a  speci-
         fied  file into a UIL module.  This mechanism allows several
         UIL modules to share common definitions.  The syntax for the
         include directive is as follows:
    
         INCLUDE FILE file_name ;
    
    
         The UIL compiler replaces the  include  directive  with  the
         contents  of  the  include file and processes it as if these
         contents had appeared in the current UIL source file.
    
         You can nest include files; that is,  an  include  file  can
         contain include directives.  The UIL compiler can process up
         to 100 references (including the  file  containing  the  UIL
         module).   Therefore,  you  can  include up to 99 files in a
         single UIL module, including nested files.  Each time a file
         is  opened counts as a reference, so including the same file
         twice counts as two references.
    
         The character expression is a file specification that  iden-
         tifies  the  file to be included.  The rules for finding the
         specified file are similar to the rules for finding  header,
         or  .h  files  using the include directive, #include, with a
         quoted string in C.  The uil uses the -I option for specify-
         ing a search directory for include files.
    
         o    If you do not supply  a  directory,  the  UIL  compiler
              searches  for  the include file in the directory of the
              main source file.
    
         o    If the compiler does not find the include  file  there,
              the  compiler looks in the same directory as the source
              file.
    
         o    If you supply a directory, the  UIL  compiler  searches
              only that directory for the file.
    
    LANGUAGE SYNTAX
      Names and Strings
         Names can consist of any of the characters A to Z, a to z, 0
         to  9,  $  (dollar  sign), and _ (underscore).  Names cannot
         begin with a digit (0 to 9).  The maximum length of  a  name
         is 31 characters.
    
         UIL gives you a choice of  either  case-sensitive  or  case-
         insensitive  names  through  a  clause in the MODULE header.
         For example, if names are case sensitive, the names "sample"
         and  "Sample"  are  distinct  from each other.  If names are
         case insensitive, these names are treated as the  same  name
         and  can  be  used interchangeably.  By default, UIL assumes
         names are case sensitive.
    
         In CASE-INSENSITIVE mode, the compiler outputs all names  in
         the  UID  file  in  uppercase form.  In CASE-SENSITIVE mode,
         names appear in the UIL file exactly as they appear  in  the
         source.
    
         The following table list the reserved  keywords,  which  are
         not available for defining programmer defined names.
             ARGUMENTS    CALLBACKS   CONTROLS   END
             EXPORTED     FALSE       GADGET     IDENTIFIER
             INCLUDE      LIST        MODULE     OFF
             ON           OBJECT      PRIVATE    PROCEDURE
             PROCEDURES   TRUE        VALUE      WIDGET
    
    
         The following table list the UIL unreserved keywords.  These
         keywords  can  be used as programmer defined names, however,
         if you use any keyword as a name, you cannot  use  the  UIL-
         supplied usage of that keyword.
    
    Built-in argument names (for example: XmNx, XmNheight)
    Built-in reason names (for example: XmNactivateCallback, XmNhelpCallback)
    Character set names (for example: ISO_LATIN1, ISO_HEBREW_LR)
    Constant value names (for example: XmMENU_OPTION, XmBROWSE_SELECT)
    Object types (for example: XmPushButton, XmBulletinBoard)
    ANY                            ARGUMENT                ASCIZ_STRING_TABLE
    ASCIZ_TABLE                    BACKGROUND              BOOLEAN
    CASE_INSENSITIVE               CASE_SENSITIVE          CHARACTER_SET
    COLOR                          COLOR_TABLE             COMPOUND_STRING
    COMPOUND_STRING_TABLE          FILE                    FLOAT
    FONT                           FONT_TABLE              FONTSET
    FOREGROUND                     ICON                    IMPORTED
    INTEGER                        INTEGER_TABLE           KEYSYM
    MANAGED                        NAMES                   OBJECTS
    REASON                         RGB                     RIGHT_TO_LEFT
    SINGLE_FLOAT                   STRING                  STRING_TABLE
    TRANSLATION_TABLE              UNMANAGED               USER_DEFINED
    VERSION                        WIDE_CHARACTER          WIDGET
    XBITMAPFILE
    
    
         String literals can be composed of the upper- and lower-case
         letters,  digits, and punctuation characters.  Spaces, tabs,
         and comments are special elements in the language.  They are
         a  means  of  delimiting  other elements, such as two names.
         One or more of these elements can appear before or after any
         other  element  in the language.  However, spaces, tabs, and
         comments that appear in string literals are treated as char-
         acter sequences rather than delimiters.
    
      Data Types
         UIL provides literals for several of the value types it sup-
         ports.   Some  of  the  value  types  are  not  supported as
         literals (for example, pixmaps and string tables).  You  can
         specify  values for these types by using functions described
         in the Functions section.  UIL directly supports the follow-
         ing literal types:
    
         o    String literal
    
         o    Integer literal
    
         o    Boolean literal
    
         o    Floating-point literal
    
         UIL also includes the data type ANY, which is used  to  turn
         off compile time checking of data types.
    
      String Literals
         A string literal is a sequence of zero or more 8-bit or  16-
         bit  characters or a combination delimited by ' (single quo-
         tation  marks)  or  "  (double  quotation  marks).    String
         literals  can  also  contain  multibyte characters delimited
         with double quotation marks.  String literals can be no more
         than 2000 characters long.
    
         A single-quoted string  literal  can  span  multiple  source
         lines.   To  continue  a  single-quoted string literal, ter-
         minate the continued line with a \ (backslash).  The literal
         continues with the first character on the next line.
    
         Double-quoted string literals cannot  span  multiple  source
         lines.   (Because  double-quoted  strings can contain escape
         sequences and other special characters, you cannot  use  the
         backslash   character   to  designate  continuation  of  the
         string.)  To build a string value that  must  span  multiple
         source lines, use the concatenation operator described later
         in this section.
    
         The syntax of a string literal is one of the following:
    
         '[character_string]'
         [#char_set]"[character_string]"
    
         Both string forms associate a character set  with  a  string
         value.   UIL uses the following rules to determine the char-
         acter set and storage format for string literals:
    
         o    A  string  declared  as  'string'  is   equivalent   to
              #cur_charset"string",  where  cur_charset  will  be the
              codeset portion of the value of  the  LANG  environment
              variable    if    it   is   set   or   the   value   of
              XmFALLBACK_CHARSET if LANG is not set or has no codeset
              component.   By default XmFALLBACK_CHARSET is ISO8859-1
              (equivalent to ISO_LATIN1), but vendors  may  define  a
              different default.
    
         o    A  string  declared  as  "string"  is   equivalent   to
              #char_set"string"  if  you  specified  char_set  as the
              default character set for the module.   If  no  default
              character  set  has been specified for the module, then
              if the -s option is provided to the uil command or  the
              use_setlocale_flag  is  set  for the callable compiler,
              Uil(), the string will be interpreted to be a string in
              the  current  locale.   This  means  that the string is
              parsed in the locale of the user by  calling  setlocale
              and  its charset is XmFONTLIST_DEFAULT_TAG, and that if
              the string is converted to a  compound  string,  it  is
              stored  as  a  locale encoded text segment.  Otherwise,
              "string" is equivalent to  #cur_charset"string",  where
              cur_charset  is  interpreted  as  described  for single
              quoted strings.
    
         o    A string of the form "string" or  #char_set"string"  is
              stored as a null-terminated string.
    
         The following table lists the character  sets  supported  by
         the UIL compiler for string literals.  Note that several UIL
         names map to the same character set.  In some cases, the UIL
         name  influences how string literals are read.  For example,
         strings identified by a UIL character set name ending in _LR
         are  read  left-to-right.   Names  that  end  in a different
         number reflect different fonts (for example,  ISO_LATIN1  or
         ISO_LATIN6).    All   character   sets  in  this  table  are
         represented by 8 bits.
    
    UIL Name        Description
    ISO_LATIN1      GL: ASCII, GR: Latin-1 Supplement
    ISO_LATIN2      GL: ASCII, GR: Latin-2 Supplement
    ISO_ARABIC      GL: ASCII, GR: Latin-Arabic Supplement
    ISO_LATIN6      GL: ASCII, GR: Latin-Arabic Supplement
    ISO_GREEK       GL: ASCII, GR: Latin-Greek Supplement
    ISO_LATIN7      GL: ASCII, GR: Latin-Greek Supplement
    ISO_HEBREW      GL: ASCII, GR: Latin-Hebrew Supplement
    ISO_LATIN8      GL: ASCII, GR: Latin-Hebrew Supplement
    ISO_HEBREW_LR   GL: ASCII, GR: Latin-Hebrew Supplement
    ISO_LATIN8_LR   GL: ASCII, GR: Latin-Hebrew Supplement
    JIS_KATAKANA    GL: JIS Roman, GR: JIS Katakana
    
    
         Following are the parsing rules for each  of  the  character
         sets:
    
         All character sets
              Character codes in the range 00...1F, 7F,  and  80...9F
              are  control  characters including both bytes of 16-bit
              characters. The compiler flags these as illegal charac-
              ters.
    
         ISO_LATIN1  ISO_LATIN2   ISO_ARABIC   ISO_LATIN3   ISO_GREEK
              ISO_LATIN4
              These sets are parsed from left to  right.  The  escape
              sequences   for   null-terminated   strings   are  also
              supported by these character sets.
    
         ISO_HEBREW ISO_LATIN8
              These sets are parsed from right to left; for  example,
              the  string  #ISO_HEBREW"012345"  generates a primitive
              string "543210" with character set ISO_HEBREW.  A  DDIS
              descriptor for such a string has this segment marked as
              being right_to_left.  The escape  sequences  for  null-
              terminated  strings are also supported by these charac-
              ter sets, and the characters that  compose  the  escape
              sequences are in left-to-right order.  For example, you
              type \n, not n\.
    
         ISO_HEBREW_LR ISO_LATIN8_LR
              These sets are parsed from left to right; for  example,
              the string #ISO_HEBREW_LR"012345" generates a primitive
              string "012345" with character set ISO_HEBREW.  A  DDIS
              descriptor  for  such  a  string  marks this segment as
              being left_to_right.  The escape  sequences  for  null-
              terminated  strings are also supported by these charac-
              ter sets.
    
         JIS_KATAKANA
              This set is parsed from  left  to  right.   The  escape
              sequences  for  null-terminated  strings  are also sup-
              ported  by  this  character  set.   Note  that  the   \
              (backslash) may be displayed as a yen symbol.
    
         In addition to designating parsing rules for strings,  char-
         acter  set  information  remains  an attribute of a compound
         string. If the string is included in a string consisting  of
         several concatenated segments, the character set information
         is included with that string segment.  This gives the  Motif
         Toolkit  the  information  it needs to decipher the compound
         string and choose a font to display the string.
    
         For an application interface displayed only in English,  UIL
         lets  you  ignore  the  distinctions between the two uses of
         strings. The compiler recognizes by context  when  a  string
         must  be passed as a null-terminated string or as a compound
         string.
    
         The UIL compiler recognizes enough about the various charac-
         ter  sets  to  correctly parse string literals. The compiler
         also issues errors if you use a compound string in a context
         that supports only null-terminated strings.
    
         Since the character set names are  keywords,  you  must  put
         them  in lowercase if case-sensitive names are in force.  If
         names are case  insensitive,  character  set  names  can  be
         uppercase, lowercase, or mixed case.
    
         In addition to the built-in  character  sets  recognized  by
         UIL,  you  can  define  your  own  character  sets  with the
         CHARACTER_SET function.  You can use the CHARACTER_SET func-
         tion anywhere a character set can be specified.
    
         String literals  can  contain  characters  with  the  eighth
         (high-order)  bit  set.   You cannot type control characters
         (00..1F, 7F, and 80..9F) directly in a single-quoted  string
         literal.   However,  you can represent these characters with
         escape sequences.   The  following  list  shows  the  escape
         sequences for special characters.
    
         \b   Backspace
    
         \f   Form-feed
    
         \n   Newline
    
         \r   Carriage return
    
         \t   Horizontal tab
    
         \v   Vertical tab
    
         \'   Single quotation mark
    
         \""  Double quotation mark
    
         \\   Backslash
    
         \integer\
              Character whose internal  representation  is  given  by
              integer (in the range 0 to 255 decimal)
    
         Note  that  escape  sequences  are  processed  literally  in
         strings  that  are  parsed  in the current locale (localized
         strings).
    
         The UIL compiler does not process newline characters in com-
         pound  strings.  The effect of a newline character in a com-
         pound string depends  only  on  the  character  set  of  the
         string,  and  the result is not guaranteed to be a multiline
         string.
    
         Compound String Literals
    
         A compound string consists of a string of 8-bit, 16-bit,  or
         multibyte  characters,  a named character set, and a writing
         direction.  Its UIL data type is compound_string.
    
         The writing direction of a compound string is implied by the
         character  set specified for the string.  You can explicitly
         set the writing direction for a compound string by using the
         COMPOUND_STRING function.
    
         A compound string can consist of a sequence of  concatenated
         compound  strings, null-terminated strings, or a combination
         of both, each of which can have a  different  character  set
         property  and  writing  direction.   Use  the  concatenation
         operator & (ampersand) to  create  a  sequence  of  compound
         strings.
    
         Each string in the sequence is stored, including the charac-
         ter set and writing direction information.
    
         Generally, a string literal is stored in the UID file  as  a
         compound  string  when  the literal consists of concatenated
         strings having different character sets  or  writing  direc-
         tions,  or when you use the string to specify a value for an
         argument that requires a compound string value.  If you want
         to  guarantee  that a string literal is stored as a compound
         string, you must use the COMPOUND_STRING function.
    
         Data Storage Consumption for String Literals
    
         The way a string literal is stored in the UID  file  depends
         on  how  you  declare  and use the string.  The UIL compiler
         automatically converts a null-terminated string  to  a  com-
         pound  string  if you use the string to specify the value of
         an argument that requires a compound string.  However,  this
         conversion is costly in terms of storage consumption.
    
         PRIVATE, EXPORTED,  and  IMPORTED  string  literals  require
         storage   for  a  single  allocation  when  the  literal  is
         declared; thereafter, storage is required for each reference
         to  the  literal.  Literals declared in-line require storage
         for both an allocation and a reference.
    
         The following table summarizes data storage consumption  for
         string  literals.  The storage requirement for an allocation
         consists of a fixed portion and  a  variable  portion.   The
         fixed  portion  of  an allocation is roughly the same as the
         storage requirement for a  reference  (a  few  bytes).   The
         storage consumed by the variable portion depends on the size
         of the literal value (that is, the length  of  the  string).
         To  conserve  storage  space,  avoid  making  string literal
         declarations that result in an allocation per use.
    
                                                      Storage Requirements
    Declaration   Data Type         Used As           Per Use
    In-line       Null-terminated   Null-terminated   An allocation and  a
                                                      reference    (within
                                                      the module)
    
    Private       Null-terminated   Null-terminated   A reference  (within
                                                      the module)
    Exported      Null-terminated   Null-terminated   A reference  (within
                                                      the UID hierarchy)
    Imported      Null-terminated   Null-terminated   A reference  (within
                                                      the UID hierarchy)
    In-line       Null-terminated   Compound          An allocation and  a
                                                      reference    (within
                                                      the module)
    Private       Null-terminated   Compound          An allocation and  a
                                                      reference    (within
                                                      the module)
    Exported      Null-terminated   Compound          A reference  (within
                                                      the UID hierarchy)
    Imported      Null-terminated   Compound          A reference  (within
                                                      the UID hierarchy)
    In-line       Compound          Compound          An allocation and  a
                                                      reference    (within
                                                      the module)
    Private       Compound          Compound          A reference  (within
                                                      the module)
    Exported      Compound          Compound          A reference  (within
                                                      the UID hierarchy)
    Imported      Compound          Compound          A reference  (within
                                                      the UID hierarchy)
    
    
      Integer Literals
         An integer literal represents the value of a  whole  number.
         Integer  literals have the form of an optional sign followed
         by one or more decimal digits.  An integer literal must  not
         contain embedded spaces or commas.
    
         Integer  literals  are  stored  in  the  UID  file  as  long
         integers.   Exported and imported integer literals require a
         single allocation when the literal is declared;  thereafter,
         a  few  bytes  of storage are required for each reference to
         the literal.  Private integer literals  and  those  declared
         in-line  require  allocation  and reference storage per use.
         To conserve storage  space,  avoid  making  integer  literal
         declarations that result in an allocation per use.
    
         The following  table  shows  data  storage  consumption  for
         integer literals.
    
    Declaration   Storage Requirements Per Use
    In-line       An allocation and a reference (within the module)
    Private       An allocation and a reference (within the module)
    Exported      A reference (within the UID hierarchy)
    Imported      A reference (within the UID hierarchy)
    
    
      Boolean Literal
         A Boolean literal represents the value True  (reserved  key-
         word  TRUE  or On) or False (reserved keyword FALSE or Off).
         These keywords are subject to case-sensitivity rules.
    
         In a UID file, TRUE is represented by the  integer  value  1
         and FALSE is represented by the integer value 0.
    
         Data storage consumption for Boolean literals is the same as
         that for integer literals.
    
      Floating-Point Literal
         A floating-point literal represents the value of a real  (or
         float)  number.   Floating-point literals have the following
         form:
    
         [+|-][integer].integer[E|e[+|-]exponent]
    
         For  maximum  portability  a  floating-point   literal   can
         represent  values  in  the  range 1.0E-37 to 1.0E+37 with at
         least 6 significant digits.  On  many  machines  this  range
         will  be  wider,  with more significant digits.  A floating-
         point literal must not contain embedded spaces or commas.
    
         Floating-point literals  are  stored  in  the  UID  file  as
         double-precision,  floating-point  numbers.   The  following
         table gives examples of  valid  and  invalid  floating-point
         notation for the UIL compiler.
    
    Valid Floating-Point Literals   Invalid Floating-Point Literals
    1.0                             1e1 (no decimal point)
    .1                              E-1 (no decimal point or digits)
    3.1415E-2 (equals .031415)      2.87 e6 (embedded blanks)
    -6.29e7 (equals -62900000)      2.0e100 (out of range)
    
    
         Data storage consumption for floating-point literals is  the
         same as that for integer literals.
    
      The ANY Data Type
         The purpose of the ANY data type is to shut  off  the  data-
         type  checking feature of the UIL compiler.  You can use the
         ANY data type for the following:
    
         o    Specifying the type of a callback procedure tag
    
         o    Specifying the type of a user-defined argument
    
         You can use the ANY data type when you need to  use  a  type
         not  supported  by  the  UIL  compiler  or when you want the
         data-type  restrictions  imposed  by  the  compiler  to   be
         relaxed.   For  example,  you  might want to define a widget
         having an  argument  that  can  accept  different  types  of
         values, depending on run-time circumstances.
    
         If you specify that an argument takes an ANY value, the com-
         piler  does  not  check  the type of the value specified for
         that argument; therefore, you need to take care when  speci-
         fying  a  value  for an argument of type ANY.  You could get
         unexpected results at run time if you pass a value having  a
         data  type  that  the widget does not support for that argu-
         ment.
    
      Expressions
         UIL includes compile-time value expressions.  These  expres-
         sions can contain references to other UIL values, but cannot
         be forward referenced.
    
         The following table lists the set of operators in  UIL  that
         allow  you to create integer, real, and Boolean values based
         on other values defined with the UIL module.  In the  table,
         a precedence of 1 is the highest.
    
       Operator   Operand Types     Meaning            Precedence
       ~          Boolean           NOT                1
                  integer           One's complement
       -          float             Negate             1
                  integer           Negate
       +          float             NOP                1
                  integer           NOP
       *          float,float       Multiply           2
                  integer,integer   Multiply
       /          float,float       Divide             2
                  integer,integer   Divide
       +          float,float       Add                3
                  integer,integer   Add
       -          float,float       Subtract           3
                  integer,integer   Subtract
       >>         integer,integer   Shift right        4
       <<         integer,integer   Shift left         4
       &          Boolean,Boolean   AND                5
                  integer,integer   Bitwise AND
                  string,string     Concatenate
       |          Boolean,Boolean   OR                 6
                  integer,integer   Bitwise OR
       ^          Boolean,Boolean   XOR                6
                  integer,integer   Bitwise XOR
    
    
         A string can  be  either  a  single  compound  string  or  a
         sequence  of  compound  strings.   If  the  two concatenated
         strings have different properties (such as writing direction
         or character set), the result of the concatenation is a mul-
         tisegment compound string.
         The string resulting  from  the  concatenation  is  a  null-
         terminated string unless one or more of the following condi-
         tions exists:
    
         o    One of the operands is a compound string
    
         o    The operands have different character set properties
    
         o    The operands have different writing directions
    
         Then the resulting string is a compound string.  You  cannot
         use  imported or exported values as operands of the concate-
         nation operator.
    
         The result of  each  operator  has  the  same  type  as  its
         operands.   You  cannot  mix  types in an expression without
         using conversion routines.
    
         You can use parentheses to override the normal precedence of
         operators.  In a sequence of unary operators, the operations
         are performed in right-to-left order.  For example, -  +  -A
         is  equivalent  to -(+(-A)).  In a sequence of binary opera-
         tors of the same precedence, the operations are performed in
         left-to-right  order.  For example, A*B/C*D is equivalent to
         ((A*B)/C)*D.
    
         A value declaration gives a value a name.  You cannot  rede-
         fine  the  value of that name in a subsequent value declara-
         tion.  You can use a value containing  operators  and  func-
         tions  anywhere  you  can  use a value in a UIL module.  You
         cannot use imported values as operands in expressions.
    
         Several of the binary operators  are  defined  for  multiple
         data  types.   For  example, the operator for multiplication
         (*) is defined for both floating-point and integer operands.
    
         For the UIL compiler to  perform  these  binary  operations,
         both  operands  must  be  of  the  same type.  If you supply
         operands of different data types, the UIL compiler automati-
         cally  converts one of the operands to the type of the other
         according to the following conversions rules.
    
         o    If the operands are  an  integer  and  a  boolean,  the
              boolean is converted to an integer.
    
         o    If the operands are an integer  and  a  floating-point,
              the integer is converted to an floating-point.
    
         o    If the operands are a floating-point and a boolean, the
              boolean is converted to a floating-point.
    
    
         You can also explicitly convert the data type of a value  by
         using  one  of  the  conversion  functions INTEGER, FLOAT or
         SINGLE_FLOAT.
    
      Functions
         UIL provides functions to generate the  following  types  of
         values:
    
         o    Character sets
    
         o    Keysyms
    
         o    Colors
    
         o    Pixmaps
    
         o    Single-precision, floating-point numbers
    
         o    Double-precision, floating-point numbers
    
         o    Fonts
    
         o    Fontsets
    
         o    Font tables
    
         o    Compound strings
    
         o    Compound string tables
    
         o    ASCIZ (null-terminated) string tables
    
         o    Wide character strings
    
         o    Widget class names
    
         o    Integer tables
    
         o    Arguments
    
         o    Reasons
    
         o    Translation tables
    
         Remember that all examples in the following sections  assume
         case-insensitive  mode.   Keywords  are  shown  in uppercase
         letters to distinguish them from user-specified names, which
         are  shown  in  lowercase  letters.   This  use of uppercase
         letters is not required in case-insensitive mode.  In  case-
         sensitive mode, keywords must be in lowercase letters.
    
         CHARACTER_SET(string_expression[, property[, ...]])
              You  can  define  your  own  character  sets  with  the
              CHARACTER_SET  function.  You can use the CHARACTER_SET
              function anywhere a character set can be specified.
    
         The result of the CHARACTER_SET function is a character  set
         with  the  name  string_expression  and  the  properties you
         specify. String_expression must be a null-terminated string.
         You  can  optionally  include  one  or both of the following
         clauses to specify properties for  the  resulting  character
         set:
    
         RIGHT_TO_LEFT = boolean_expression
         SIXTEEN_BIT = boolean_expression
    
         The RIGHT_TO_LEFT clause sets the default writing  direction
         of  the  string  from right to left if boolean_expression is
         True, and right to left otherwise.
    
         The SIXTEEN_BIT clause allows the  strings  associated  with
         this character set to be interpreted as 16-bit characters if
         boolean_expression is True, and 8-bit characters otherwise.
    
         KEYSYM(string_literal)
              The KEYSYM function is used to specify a keysym  for  a
              mnemonic  resource.   The  string_literal  must contain
              exactly one character.
    
         COLOR(string_expression[,FOREGROUND|BACKGROUND])
              The COLOR function supports the definition  of  colors.
              Using  the COLOR function, you can designate a value to
              specify a color and then use that value  for  arguments
              requiring  a  color value.  The string expression names
              the color you want to  define;  the  optional  keywords
              FOREGROUND  and BACKGROUND identify how the color is to
              be displayed on a monochrome device when the  color  is
              used in the definition of a color table.
    
         The UIL compiler does not have built-in color names.  Colors
         are  a  server-dependent attribute of an object.  Colors are
         defined on each server and may have different red-green-blue
         (RGB)  values on each server.  The string you specify as the
         color argument must be recognized by  the  server  on  which
         your application runs.
    
         In a UID file, UIL represents a color as a character string.
         MRM calls X translation routines that convert a color string
         to the device-specific pixel value.  If you are running on a
         monochrome  server,  all colors translate to black or white.
         If you are on a color server, the color names  translate  to
         their proper colors if the following conditions are met:
    
         o    The color is defined.
         o    The color map is not yet full.
    
         If the color map is full, even  valid  colors  translate  to
         black or white (foreground or background).
    
         Interfaces do not, in general, specify colors  for  widgets,
         so  that  the  selection  of colors can be controlled by the
         user through the .Xdefaults file.
    
         To write an application that runs  on  both  monochrome  and
         color  devices,  you need to specify which colors in a color
         table (defined with the COLOR_TABLE  function)  map  to  the
         background  and which colors map to the foreground. UIL lets
         you use the COLOR function to designate this mapping in  the
         definition of the color.  The following example shows how to
         use the COLOR function to map the color  red  to  the  back-
         ground color on a monochrome device:
    
         VALUE c: COLOR ( 'red',BACKGROUND );
    
         The mapping comes into play only when the  MRM  is  given  a
         color and the application is to be displayed on a monochrome
         device.  In this case, each color is considered to be in one
         of the following three categories:
    
         o    The color is mapped to  the  background  color  on  the
              monochrome device.
    
         o    The color is mapped to  the  foreground  color  on  the
              monochrome device.
    
         o    Monochrome mapping is undefined for this color.
    
         If the color is  mapped  to  the  foreground  or  background
         color,  MRM  substitutes the foreground or background color,
         respectively.  If you do not specify the monochrome  mapping
         for  a  color,  MRM  passes  the  color  string to the Motif
         Toolkit for mapping to the foreground or background color.
    
         RGB(red_integer, green_integer, blue_integer)
              The three integers  define  the  values  for  the  red,
              green, and blue components of the color, in that order.
              The values of these components  can  range  from  0  to
              65,535, inclusive.
    
         In a  UID  file,  UIL  represents  an  RGB  value  as  three
         integers.  MRM calls X translation routines that convert the
         integers to the device-specific pixel  value.   If  you  are
         running  on  a  monochrome  server,  all colors translate to
         black or white.  If you are on a color  server,  RGB  values
         translate  to their proper colors if the colormap is not yet
         full.  If the colormap is full, values translate to black or
         white (foreground or background).
    
         COLOR_TABLE(color_expression='character'[,...])
              The color expression is a previously defined  color,  a
              color  defined  in line with the COLOR function, or the
              phrase BACKGROUND COLOR or FOREGROUND COLOR.  The char-
              acter can be any valid UIL character.
    
         The COLOR_TABLE function provides a  device-independent  way
         to specify a set of colors. The COLOR_TABLE function accepts
         either previously defined UIL color names or in  line  color
         definitions  (using the COLOR function).  A color table must
         be private because its contents must be  known  by  the  UIL
         compiler  to  construct  an icon.  The colors within a color
         table, however, can be imported, exported, or private.
    
         The single letter associated with each color is the  charac-
         ter  you  use to represent that color when creating an icon.
         Each letter used to represent a color must be unique  within
         the color table.
    
         ICON([COLOR_TABLE=color_table_name,] row[,...)
              The color table name must refer to a previously defined
              color  table and the row is a character expression giv-
              ing one row of the icon.
    
         The ICON function describes a rectangular  icon  that  is  x
         pixels  wide  and  y  pixels high. The strings surrounded by
         single  quotation  marks  describe  the  icon.  Each  string
         represents  a  row in the icon; each character in the string
         represents a pixel.
    
         The first row in an icon definition determines the width  of
         the  icon.  All rows must have the same number of characters
         as the first row. The height of the icon is dictated by  the
         number of rows.
    
         The first argument of the ICON  function  (the  color  table
         specification)  is  optional  and identifies the colors that
         are available in this icon. By using the single letter asso-
         ciated  with  each  color, you can specify the color of each
         pixel in the icon. The icon must be constructed  of  charac-
         ters defined in the specified color table.
    
         A default color table is  used  if  you  omit  the  argument
         specifying  the  color  table.   To  make use of the default
         color table, the rows of your icon must contain only  spaces
         and  asterisks.   The default color table is defined as fol-
         lows:  COLOR_TABLE( BACKGROUND COLOR = ' ', FOREGROUND COLOR
         = '*' )
    
    
         You can define other characters to represent the  background
         color and foreground color by replacing the space and aster-
         isk in the BACKGROUND COLOR  and  FOREGROUND  COLOR  clauses
         shown  in  the previous statement.  You can specify icons as
         private,  imported,  or  exported.   Use  the  MRM  function
         MrmFetchIconLiteral  to  retrieve  an  exported  icon at run
         time.
    
         XBITMAPFILE(string_expression)
              The XBITMAPFILE function is similar to the  ICON  func-
              tion in that both describe a rectangular icon that is x
              pixels wide and y pixels  high.   However,  XBITMAPFILE
              allows  you  to specify an external file containing the
              definition of an X bitmap, whereas  all  ICON  function
              definitions  must be coded directly within UIL.  X bit-
              map files can be generated by many different X applica-
              tions.   UIL  reads these files through the XBITMAPFILE
              function, but does not support creation of these files.
              The  X  bitmap  file  specified  as the argument to the
              XBITMAPFILE function is read at application run time by
              MRM.
    
         The XBITMAPFILE function returns a value of type pixmap  and
         can be used anywhere a pixmap data type is expected.
    
         SINGLE_FLOAT(real_number_literal)
              The SINGLE_FLOAT function lets you store floating-point
              literals  in  UIL  files as single-precision, floating-
              point numbers.  Single-precision floating-point numbers
              can  often  be  stored  using  less memory than double-
              precision,      floating-point      numbers.        The
              real_number_literal can be either an integer literal or
              a floating-point literal.  A value defined  using  this
              function cannot be used in an arithmetic expression.
    
         FLOAT(real_number_literal)
              The  FLOAT  function  lets  you  store   floating-point
              literals  in  UIL  files as double-precision, floating-
              point numbers.  The real_number_literal can  be  either
              an integer literal or a floating-point literal.
    
         FONT(string_expression[, CHARACTER_SET=char_set])
              You define fonts with the  FONT  function.   Using  the
              FONT  function, you designate a value to specify a font
              and then use that value for arguments  that  require  a
              font value.  The UIL compiler has no built-in fonts.
    
         Each font makes sense only in the  context  of  a  character
         set.  The  FONT  function has an additional parameter to let
         you specify the character set for the font.  This  parameter
         is  optional;  if  you  omit  it,  the default character set
         depends on the value of the LANG environment variable if  it
         is  set  of  the  value of XmFALLBACK_CHARSET if LANG is not
         set.
    
         The string expression specifies the name of the font and the
         clause  CHARACTER_SET = char_set specifies the character set
         for the font. The string expression used in the  FONT  func-
         tion cannot be a compound string.
    
         FONTSET(string_expression[,...][, CHARACTER_SET=charset])
              You define fontsets with the FONTSET  function.   Using
              the  FONTSET function, you designate a set of values to
              specify fonts and then use those values  for  arguments
              that  require  a  fontset.   The  UIL  compiler  has no
              built-in fonts.
    
         Each font makes sense only in the  context  of  a  character
         set. The FONTSET function has an additional parameter to let
         you specify the character set for the font.  This  parameter
         is  optional;  if  you  omit  it,  the default character set
         depends on the value of the LANG environment variable if  it
         is  set  of  the  value of XmFALLBACK_CHARSET if LANG is not
         set.
    
         The string expression specifies the name of the font and the
         clause  CHARACTER_SET = char_set specifies the character set
         for the font. The string  expression  used  in  the  FONTSET
         function cannot be a compound string.
    
         FONT_TABLE(font_expression[,...])
              A font table is a sequence of pairs of fonts and  char-
              acter  sets.   At  run  time  when  an  object needs to
              display a string, the object scans the font  table  for
              the character set that matches the character set of the
              string to be displayed.  UIL  provides  the  FONT_TABLE
              function  to let you supply such an argument.  The font
              expression is created with the FONT and  FONTSET  func-
              tions.
    
         If you specify a single font value to  specify  an  argument
         that  requires  a font table, the UIL compiler automatically
         converts a font value to a font table.
    
         COMPOUND_STRING(string_expression[,property[,...]])
              Use the COMPOUND_STRING function to set properties of a
              null-terminated  string  and  to convert it into a com-
              pound string. The properties you can set are the  char-
              acter set, writing direction, and separator.
    
         The result of the COMPOUND_STRING  function  is  a  compound
         string  with  the  string  expression as its value.  You can
         optionally include one or more of the following  clauses  to
         specify properties for the resulting compound string:
         CHARACTER_SET = character_set
         RIGHT_TO_LEFT = boolean_expression
         SEPARATE = boolean_expression
    
         The CHARACTER_SET clause specifies the character set for the
         string.  If you omit the CHARACTER_SET clause, the resulting
         string has the same character set as string_expression.
    
         The RIGHT_TO_LEFT clause sets the writing direction  of  the
         string from right to left if boolean_expression is True, and
         left to right otherwise. Specifying this argument  does  not
         cause  the value of the string expression to change.  If you
         omit the RIGHT_TO_LEFT argument, the  resulting  string  has
         the same writing direction as string_expression.
    
         The SEPARATE clause appends a separator to the  end  of  the
         compound  string if boolean_expression is True.  If you omit
         the SEPARATE clause, the resulting string does  not  have  a
         separator.
    
         You cannot use imported or exported values as  the  operands
         of the COMPOUND_STRING function.
    
         COMPOUND_STRING_TABLE(string_expression[,...])
              A  compound  string  table  is  an  array  of  compound
              strings.   Objects  requiring  a list of string values,
              such as the XmNitems and XmNselectedItems arguments for
              the   list   widget,  use  string  table  values.   The
              COMPOUND_STRING_TABLE function builds  the  values  for
              these   two   arguments   of   the  list  widget.   The
              COMPOUND_STRING_TABLE function  generates  a  value  of
              type  string_table.  The name STRING_TABLE is a synonym
              for COMPOUND_STRING_TABLE.
    
         The strings inside the string table can be  simple  strings,
         which  the  UIL  compiler automatically converts to compound
         strings.
    
         ASCIZ_STRING_TABLE(string_expression[,...])
              An ASCIZ string table  is  an  array  of  ASCIZ  (null-
              terminated)  string  values  separated  by commas. This
              function allows you to pass more than one ASCIZ  string
              as  a callback tag value.  The ASCIZ_STRING_TABLE func-
              tion generates a value of type asciz_table.   The  name
              ASCIZ_TABLE is a synonym for ASCIZ_STRING_TABLE.
    
         WIDE_CHARACTER(string_expression)
              Use the WIDE_CHARACTER  function  to  generate  a  wide
              character  string  from  null-terminated  string in the
              current locale.
    
         CLASS_REC_NAME(string_expression)
              Use the CLASS_REC_NAME function to  generate  a  widget
              class name.  For a widget class defined by the toolkit,
              the string argument is the name of the  class.   For  a
              user-defined widget, the string argument is the name of
              the creation routine for the widget.
    
         INTEGER_TABLE(integer_expression[,...])
              An  integer  table  is  an  array  of  integer   values
              separated  by commas.  This function allows you to pass
              more than one integer  per  callback  tag  value.   The
              INTEGER_TABLE   function  generates  a  value  of  type
              integer_table.
    
         ARGUMENT(string_expression[, argument_type])
              The ARGUMENT function defines the arguments to a  user-
              defined  widget.   Each  of  the  objects  that  can be
              described by UIL permits a set of arguments, listed  in
              Appendix  B.   For example, XmNheight is an argument to
              most objects and has integer  data  type.   To  specify
              height  for  a  user-defined  widget,  you  can use the
              built-in  argument  name  XmNheight,  and  specify   an
              integer value when you declare the user-defined widget.
              You do not use the ARGUMENT function to  specify  argu-
              ments that are built into the UIL compiler.
    
         The string_expression name is the name the UIL compiler uses
         for  the argument in the UID file.  the argument_type is the
         type of value that can be associated with the argument.   If
         you omit the second argument, the default type is ANY and no
         value type checking occurs.  Use one of the  following  key-
         words to specify the argument type:
    
         o    ANY
    
         o    ASCIZ_TABLE
    
         o    BOOLEAN
    
         o    COLOR
    
         o    COLOR_TABLE
    
         o    COMPOUND_STRING
    
         o    FLOAT
    
         o    FONT
    
         o    FONT_TABLE
    
         o    FONTSET
    
         o    ICON
    
         o    INTEGER
    
         o    INTEGER_TABLE
    
         o    REASON
    
         o    SINGLE_FLOAT
    
         o    STRING
    
         o    STRING_TABLE
    
         o    TRANSLATION_TABLE
    
         o    WIDE_CHARACTER
    
         o    WIDGET
    
         You can use the ARGUMENT function to allow the UIL  compiler
         to  recognize extensions to the Motif Toolkit.  For example,
         an existing widget may accept a  new  argument.   Using  the
         ARGUMENT  function, you can make this new argument available
         to the UIL compiler before the updated version of  the  com-
         piler is released.
    
         REASON(string_expression)
              The REASON function is useful for defining new  reasons
              for user-defined widgets.
    
         Each of the objects in the Motif Toolkit defines  a  set  of
         conditions  under  which  it  calls a user-defined function.
         These conditions are known as callback reasons.   The  user-
         defined  functions are termed callback procedures.  In a UIL
         module, you use a callbacks  list  to  specify  which  user-
         defined functions are to be called for which reasons.
    
         Appendix B lists the callback reasons supported by the Motif
         Toolkit objects.
    
         When you declare a user-defined widget, you can define call-
         back reasons for that widget using the REASON function.  The
         string expression specifies the argument name stored in  the
         UID  file  for  the reason.  This reason name is supplied to
         the widget creation routine at run time.
    
         TRANSLATION_TABLE(string_expression[,...])
              Each of the Motif Toolkit  widgets  has  a  translation
              table  that  maps X events (for example, mouse button 1
              being pressed) to a sequence of actions. Through widget
              arguments,  such  as  the common translations argument,
              you can specify an alternate set of events  or  actions
              for a particular widget. The TRANSLATION_TABLE function
              creates a translation table that can  be  used  as  the
              value   of   a  argument  that  is  of  the  data  type
              translation_table.
    
         You can use one of the following  translation  table  direc-
         tives  with the TRANSLATION_TABLE function: #override, #aug-
         ment, or #replace.  The default is #replace.  If you specify
         one  of  these directives, it must be the first entry in the
         translation table.
    
         The #override directive causes any duplicate translations to
         be ignored.  For example, if a translation for <Btn1Down> is
         already defined in the current translations for  a  PushBut-
         ton,  the  translation defined by new_translations overrides
         the current definition.  If the #augment directive is speci-
         fied, the current definition takes precedence.  The #replace
         directive  replaces  all  current  translations  with  those
         specified in the XmNtranslations resource.
    
    RELATED INFORMATION
         uil(1X), Uil(3X)
    
    
    
    


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру