UIL man page on IRIX

Man page or keyword search:  
man Server   31559 pages
apropos Keyword Search (all sections)
Output format
IRIX logo
[printable version]

UIL(5X)								       UIL(5X)

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 call‐
       backs 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
       compiled UID file can then by accessed by the  various  Motif  Resource
       Management (MRM) functions from within an application 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  par‐
       ticular	column and can span any number of lines.  Low-level constructs
       such as keywords and punctuation characters can also begin in any  col‐
       umn; however, except for string literals and comments, they cannot span
       lines.

       The UIL compiler accepts input lines up to 132 characters in length.

       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.
       Indicates  whether  names  should  be treated as case sensitive or case
       insensitive.  The default  is  case  sensitive.	 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 low‐
       ercase.	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.	 Specifies the
       default character set for string literals in the	 module	 that  do  not
       explicitly  set their character 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 ele‐
       ment use_setlocale_flag.	 Indicates whether the widget or  gadget  form
       of the control 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 version:	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 key‐
       words in a particular object declaration.  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.
       Defines	the  callback  routines used by a widget and the creation rou‐
       tines for user-defined widgets.	These definitions are used  for	 error
       checking.  Procedure sections are described in more detail later in the
       reference page.	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	 hier‐
       archy  to clearly show which arguments, controls, callbacks, and proce‐
       dures are common to which widgets.  List sections are described in more
       detail  later  in the reference page.  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 example,  in  a  controls
       list, as a symbolic reference to a widget ID, or as the tag_value argu‐
       ment for a callback procedure).	Objects	 can  be  forward  referenced.
       Object  sections	 are  described	 in more detail later in the reference
       page.  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  directives,	 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: The comment  is	intro‐
       duced with the sequence /* followed by the text of the comment and ter‐
       minated with the sequence */.  This form of comment can	span  multiple
       source lines.  The comment is introduced with an ! (exclamation point),
       followed by the text of the comment and terminated 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 syntax:

       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.  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.   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
       containing the value declaration.  The  value  or  object  is  directly
       incorporated into anything in the UIL module that references the decla‐
       ration.	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.  ANY ARGUMENT BOOLEAN COLOR COLOR_TA‐
       BLE COMPOUND_STRING FLOAT FONT FONT_TABLE FONTSET  ICON	INTEGER	 INTE‐
       GER_TABLE  KEYSYM  REASON  SINGLE_FLOAT	STRING	STRING_TABLE  TRANSLA‐
       TION_TABLE WIDE_CHARACTER WIDGET

   Procedure sections
       A procedure section consists of the keyword  PROCEDURE  followed	 by  a
       sequence of procedure declarations.  It has the following syntax:

       PROCEDURE
	    procedure_name [ ( [ value_type ] ) ] ;

       Use a procedure declaration to declare: A routine that can be used as a
       callback routine for a widget 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 procedure can  be	used.	Proce‐
       dures  can  be  forward	referenced.  You cannot use a name you used in
       another context as a procedure name.

       In a procedure declaration, you have the option of  specifying  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
       compiler checks that the argument you specify in references to the pro‐
       cedure 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 hier‐
       archy  as  the callback, 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 argu‐
       ment 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.  Checks that the argument count is 1.  Does not  check  the
       argument	 type.	Use the ANY type to prevent type checking on procedure
       tags.  Checks for one argument of the specified type.  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	 func‐
       tion  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 creation functions.  (See the Motif Toolkit docu‐
       mentation 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 hier‐
       archy to clearly show which arguments, controls, callbacks, and	proce‐
       dures  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 specified in the
       arguments-list parameter when the creation  routine  for	 a  particular
       object  is  called  at  run time.  An arguments 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 previ‐
       ous entries with that name, and the compiler issues a message.

       Some arguments, such as XmNitems and XmNitemCount, are coupled  by  the
       UIL compiler.  When you specify one of the arguments, the compiler also
       sets the other.	The coupled argument 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 normally 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 particular wid‐
       get,  constraint	 arguments  are	 used exclusively to define additional
       attributes of the children of a particular  widget.   These  attributes
       affect  the  behavior  of  the children 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 argument.

       Callbacks List Structure

       Use  a  callbacks  list to define which callback reasons are to be pro‐
       cessed 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 definition, 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 call‐
       back 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 mod‐
       ule (.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  pro‐
       cedure  addresses  of each callback.  The name you register with MRM in
       the application program must match the name you specified for the  pro‐
       cedure in the UIL module.

       Each  callback procedure receives three arguments.  The first two argu‐
       ments 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 specified 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 controls list has the follow‐
       ing 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 automatically  cre‐
       ated 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 cre‐
       ated 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  con‐
       trolled 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 def‐
       inition.	 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 expression 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 example, in a controls list, as a symbolic refer‐
       ence to a widget ID, or as the tag_value argument for a callback proce‐
       dure).	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 over‐
       ride 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 GAD‐
       GET 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 IDEN‐
       TIFIER, 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  MrmRegister‐
       NamesInHierarchy	 to bind the identifier name with the data (or, in the
       case of callbacks, with the address of the data)	 associated  with  the
       identifier.

       Each  UIL  module  has a single name space; therefore, you cannot 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 identi‐
       fiers in a UIL module.  Unlike a UIL value, an identifier does not have
       a  UIL  type  associated with it.  Regardless 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 specified file
       into a UIL module.  This mechanism allows several UIL modules to	 share
       common  definitions.   The  syntax for the include directive is as fol‐
       lows:

       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 identifies the
       file to be included.  The rules for finding the specified file are sim‐
       ilar  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 specifying a search directory for include files.  If you do
       not supply a directory, the UIL compiler searches for the include  file
       in  the	directory  of  the main source file.  If the compiler does not
       find the include file there, the compiler looks in the  same  directory
       as  the	source	file.	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 key‐
       word 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 supports.  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 following literal types: String  literal  Integer  literal  Boolean
       literal 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  charac‐
       ters  or	 a  combination	 delimited  by ' (single quotation 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 con‐
       tinue a single-quoted string literal, terminate 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 character set and storage
       format for string literals: 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.  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  pro‐
       vided  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 com‐
       pound string, it is stored as a locale encoded  text  segment.	Other‐
       wise, "string" is equivalent to #cur_charset"string", where cur_charset
       is interpreted as described for single quoted strings.  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  com‐
       piler for string literals.  Note that several UIL names map to the same
       character set.  In some cases, the UIL name influences how string  lit‐
       erals 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 differ‐
       ent   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: Charac‐
       ter 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 characters.  These sets are parsed from	left  to  right.   The
       escape  sequences  for  null-terminated	strings	 are also supported by
       these character sets.  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 char‐
       acter sets, and the characters that compose the escape sequences are in
       left-to-right order.  For example, you type \n, not n\.	These sets are
       parsed	 from	 left	 to    right;	 for   example,	  the	string
       #ISO_HEBREW_LR"012345" generates a primitive string "012345" with char‐
       acter  set  ISO_HEBREW.	A DDIS descriptor for such a string marks this
       segment as being left_to_right.	The escape sequences  for  null-termi‐
       nated  strings are also supported by these character sets.  This set is
       parsed from left to right.  The escape  sequences  for  null-terminated
       strings	are  also  supported  by  this character set.  Note that the \
       (backslash) may be displayed as a yen symbol.

       In addition to designating parsing rules	 for  strings,	character  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 character sets  to
       correctly  parse	 string	 literals.  The compiler also issues errors if
       you use a compound string in a context that supports  only  null-termi‐
       nated strings.

       Since the character set names are keywords, you must put them in lower‐
       case if case-sensitive names are in force.  If names are case  insensi‐
       tive, 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  function  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.	 Backspace  Form-feed  Newline
       Carriage	 return Horizontal tab Vertical tab Single quotation mark Dou‐
       ble quotation mark Backslash 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  compound
       strings.	  The  effect  of  a  newline  character  in a compound 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 direc‐
       tion.  Use  the	concatenation  operator	 &  (ampersand)	 to  create  a
       sequence of compound strings.

       Each  string in the sequence is stored, including the character 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 differ‐
       ent character sets or writing directions, 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 compound string if you use the string to
       specify the value of an argument that requires a compound string.  How‐
       ever, 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 lit‐
       erals.	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 con‐
       serve storage space, avoid  making  string  literal  declarations  that
       result in an allocation per use.

       Declaration   Data Type	       Used As		 Storage Requirements
							 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 dec‐
       imal  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 lit‐
       eral 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	liter‐
       als.

       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 keyword TRUE or
       On) or False (reserved keyword FALSE or Off).  These keywords are  sub‐
       ject 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) num‐
       ber.  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: Specifying the type of a callback procedure  tag  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 compiler does
       not check the type of the value specified for that argument; therefore,
       you  need  to take care when specifying 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 argument.

   Expressions
       UIL  includes  compile-time  value  expressions.	 These expressions can
       contain references to other UIL values, but cannot  be  forward	refer‐
       enced.

       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 com‐
       pound strings.  If the two concatenated strings have different  proper‐
       ties  (such  as	writing direction or character set), the result of the
       concatenation is a multisegment compound string.

       The string resulting from the concatenation is a null-terminated string
       unless one or more of the following conditions exists: One of the oper‐
       ands is a compound string The operands  have  different	character  set
       properties 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 concatenation 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 operators of the same  precedence,  the	opera‐
       tions  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	 redefine  the
       value  of  that	name in a subsequent value declaration.	 You can use a
       value containing operators and functions anywhere you can use  a	 value
       in a UIL module.	 You cannot use imported values as operands in expres‐
       sions.

       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 automatically converts one of the  operands  to
       the type of the other according to the following conversions rules.  If
       the operands are an integer and a boolean, the boolean is converted  to
       an  integer.   If the operands are an integer and a floating-point, the
       integer is converted to an  floating-point.   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: Char‐
       acter sets Keysyms Colors Pixmaps Single-precision, floating-point num‐
       bers  Double-precision,	floating-point	numbers	 Fonts	Fontsets  Font
       tables Compound strings Compound string tables ASCIZ  (null-terminated)
       string  tables Wide character strings Widget class names Integer tables
       Arguments Reasons Translation tables

       Remember that all examples in the following sections assume case-insen‐
       sitive  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.  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_expres‐
       sion  must be a null-terminated string.	You can optionally include one
       or both of the following clauses to specify properties for the  result‐
       ing 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 charac‐
       ter set to be interpreted as 16-bit characters if boolean_expression is
       True,  and  8-bit characters otherwise.	The KEYSYM function is used to
       specify a keysym for a mnemonic resource.  The string_literal must con‐
       tain exactly one character.  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	recog‐
       nized 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-spe‐
       cific pixel value.  If you are running on a monochrome server, all col‐
       ors translate to black or white.	 If you are on	a  color  server,  the
       color  names  translate	to their proper colors if the following condi‐
       tions are met: The color is defined.  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	 .Xde‐
       faults 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 map‐
       ping  in	 the definition of the color.  The following example shows how
       to use the COLOR function to map the color red to the background	 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 cate‐
       gories: The color is mapped to the background color on  the  monochrome
       device.	 The color is mapped to the foreground color on the monochrome
       device.	Monochrome mapping is undefined for this color.

       If the color is mapped to the foreground or background color, MRM  sub‐
       stitutes	 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.  The three integers define the values for the  red,  green,  and
       blue  components of the color, in that order.  The values of these com‐
       ponents 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).   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 character 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 character  you  use
       to  represent  that  color  when creating an icon.  Each letter used to
       represent a color must be unique within the color table.	 The color ta‐
       ble  name must refer to a previously defined color table and the row is
       a character expression giving 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 associated with each color, you can specify
       the color of each pixel in the icon.  The icon must be  constructed  of
       characters 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 follows: COLOR_TABLE( BACKGROUND COLOR = ' ',  FOREGROUND
       COLOR = '*' )

       You  can	 define other characters to represent the background color and
       foreground color by replacing the space and asterisk 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.
       The XBITMAPFILE function is similar to the ICON function 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 bitmap files can be generated  by
       many  different	X  applications.   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.  The SINGLE_FLOAT function
       lets you store floating-point literals in UIL  files  as	 single-preci‐
       sion,  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 lit‐
       eral or a floating-point literal.  A value defined using this  function
       cannot  be  used	 in an arithmetic expression.  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 inte‐
       ger literal or a floating-point literal.	 You  define  fonts  with  the
       FONT function.  Using the FONT function, you designate a value to spec‐
       ify 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  function  cannot  be  a  compound
       string.	 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 environ‐
       ment 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.	A font table is a sequence of pairs  of	 fonts	and  character
       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 func‐
       tion to let you supply such an argument.	 The font expression  is  cre‐
       ated with the FONT and FONTSET functions.

       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.   Use  the COMPOUND_STRING function to set properties of a
       null-terminated string and to convert it into a compound	 string.   The
       properties  you	can  set are the character 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	other‐
       wise.   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 COM‐
       POUND_STRING function.  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.  An ASCIZ
       string table is an array of ASCIZ (null-terminated) string values sepa‐
       rated  by  commas. This function allows you to pass more than one ASCIZ
       string as a callback tag value.	The ASCIZ_STRING_TABLE function gener‐
       ates  a	value  of type asciz_table.  The name ASCIZ_TABLE is a synonym
       for ASCIZ_STRING_TABLE.	Use the WIDE_CHARACTER function to generate  a
       wide  character	string	from  null-terminated  string  in  the current
       locale.	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	 argu‐
       ment  is	 the  name of the creation routine for the widget.  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.   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 arguments 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 keywords to specify the argument  type:  ANY  ASCIZ_TABLE
       BOOLEAN COLOR COLOR_TABLE COMPOUND_STRING FLOAT FONT FONT_TABLE FONTSET
       ICON INTEGER  INTEGER_TABLE  REASON  SINGLE_FLOAT  STRING  STRING_TABLE
       TRANSLATION_TABLE WIDE_CHARACTER WIDGET

       You  can	 use the ARGUMENT function to allow the UIL compiler to recog‐
       nize 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 ver‐
       sion  of	 the  compiler is released.  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 call‐
       back  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 callback reasons
       for that widget using the REASON function.  The string expression spec‐
       ifies  the  argument  name stored in the UID file for the reason.  This
       reason name is supplied to the widget creation  routine	at  run	 time.
       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 transla‐
       tion 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 directives with the
       TRANSLATION_TABLE function:  #override,	#augment,  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 PushButton,  the  translation
       defined	by  new_translations overrides the current definition.	If the
       #augment directive is specified, the current  definition	 takes	prece‐
       dence.	The  #replace directive replaces all current translations with
       those specified in the XmNtranslations resource.

RELATED INFORMATION
       uil(1X), Uil(3X)

								       UIL(5X)
[top]

List of man pages available for IRIX

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net