UIL 文件格式

用途

包含有关基于窗口小部件的应用程序的用户界面的信息。

描述

用户界面语言 (UIL) 用于描述基于窗口小部件的应用程序的用户界面的初始状态。 UIL 描述了界面中使用的窗口小部件,这些窗口小部件的资源以及这些窗口小部件的回调。 使用 uil 命令或 Uil 可调用编译器函数将 UIL 文件编译为用户界面定义 (UID) 文件。 然后,可以通过应用程序中的各种 Motif Resource Manager (MRM) 函数来访问已编译 UID 文件的内容。

UIL 的语法如下所示:

MODULE ModuleName [ NAMES = CASE_INSENSITIVE | CASE_SENSITIVE ] [ CHARACTER_SET = CharacterSet ] [ OBJECTS = { WidgetName = GADGET | WIDGET; [...] } ] { [[ ValueSection ] | [ ProcedureSection ] | [ ListSection ] | [ ObjectSection ] | [ IdentifierSection ] | [...]] } END MODULE;

文件格式

UIL 是一种自由格式语言。 这意味着高级构造 (例如对象和值声明) 不需要在任何特定列中开始,并且可以跨越任意数目的行。 低级构造 (例如,关键字和标点字符) 也可以在任何列中开始; 但是,除了字符串字面值和注释之外,它们不能跨行。

UIL 编译器接受长度最多为 132 个字符的输入行。

描述
模块 ModuleName UID 文件中 UIL 模块的已知名称。 此名称存储在 UID 文件中,以供稍后在 MRM 检索资源时使用。 此模块名称始终为大写。
名称 = case_insensitive | case_sensitive 指示应将名称视为区分大小写还是不区分大小写。 缺省值区分大小写。 区分大小写的子句应该是模块头中的第一个子句,并且必须在包含名称的任何语句之前。 如果名称在 UIL 模块中区分大小写,那么该模块中的 UIL 关键字必须为小写。 每个名称都存储在 UIL 文件中,其大小写与 UIL 模块中显示的相同。 如果名称不区分大小写,那么关键字可以是大写,小写或混合大小写,并且每个名称的大写等效项存储在 UID 文件中。
字符集 = CharacterSet 指定模块中未显式设置其字符集的字符串字面值的缺省字符集。 若未指定此选项,默认字符集为LANG 环境变量的编码集组件; 若LANGXmFALLBACK_CHARSET 设置或其编码集组件为空,则默认使用系统默认编码集。 的值 XmFALLBACK_CHARSET 由UIL供应商定义,但通常为 ISO8859-1 (等同于 ISO_LATIN1 )。 使用此子句将关闭由 -s 编译器标志或 Uil_command_type 数据结构元素 use_setlocale_flag开启的所有本地化字符串文字处理。
OBJECTS = { WidgetName = 小工具 | 控件;} 指示缺省情况下是否使用由 WidgetName 变量指定的控件的窗口小部件或小配件格式。 缺省情况下使用窗口小部件表单。 指定的控件应同时具备小部件和小工具版本,例如: XmCascadeButtonXmLabelXmPushButtonXmSeparator 以及 XmToggleButton。 可以通过对多个控件进行定界来指定这些控件的格式。;(分号)。 可以使用特定对象声明中的 GADGETWIDGET 关键字来指定控件实例的小配件或窗口小部件形式。
ValueSection 提供对值表达式或字面值进行命名的方法。 然后,可以通过可以使用值的任何上下文中 UIL 模块中其他位置出现的声明来引用值名称。 可以向前引用值。 请参阅 "值部分" 以获取更多详细信息。
ProcedureSection 定义窗口小部件使用的回调函数以及用户定义的窗口小部件的创建函数。 这些定义用于错误检查。 请参阅 "过程部分" 以获取更多详细信息。
ListSection 提供一种方法将一组自变量,控件 (子代) ,回调或过程分组在一起,以供以后在 UIL 模块中使用。 列表可以包含其他列表,因此您可以设置层次结构以明确显示哪些参数,控件,回调和过程对于哪些窗口小部件是公共的。 请参阅 "列表部分" 以获取更多详细信息。
ObjectSection 定义构成应用程序用户界面的对象。 您可以在可以使用对象名的任何上下文 (例如,在控件列表中,作为对窗口小部件标识的符号引用,或作为回调过程的 TagValue 自变量) 中 UIL 模块中其他位置出现的声明中引用对象名。 可以转发引用对象。 请参阅 "对象部分" 以获取更多详细信息。
IdentifierSection 定义数据与 UIL 模块中显示的名称的运行时绑定。 请参阅 "标识部分" 以获取更多详细信息。

UIL 文件还可以包含注释和 include 伪指令。 以下部分描述了这些内容以及 UIL 文件格式的主要元素。

注释

注释可以采用两种格式之一,这两种格式都不能嵌套:

  • 引入注释的是/* 序列,后跟注释的文本,并以 */ 序列终止。 此形式的注释可以跨多个源行。
  • 评论介绍有! (感叹号) 后跟注释的文本,并在源行的末尾终止。

值部分

值部分由 VALUE 关键字后跟一系列值声明组成。 它具有以下语法:

VALUE ValueName : [ EXPORT | PRIVATE ] ValueExpression | 已导入 ValueType ;

ValueExpression 被赋值给ValueName ,或一个 ValueType 被赋值给导入的值名。 值声明提供了一种命名值表达式或字面值的方法。 在可以使用值的任何上下文中,可以通过稍后在 UIL 模块中出现的声明来引用值名称。 可以向前引用值。

描述
已导出 您定义为导出的值作为指定资源存储在 UID 文件中,并且可以通过其他 UID 文件中的名称进行引用。 将值定义为已导出时, MRM 会在模块外部查找,在该模块中声明导出的值以在运行时获取其值。
PRIVATE 专用值是未导入或导出的值。 您定义为 private 的值不会存储为 UID 文件中的不同资源。 只能在包含值声明的 UIL 模块中引用专用值。 值或对象将直接合并到引用声明的 UIL 模块中的任何内容中。
已导入 定义为已导入的值是在 UID 文件中定义为指定资源的值。 MRM 在应用程序运行时使用相应的导出声明来解析此声明。

缺省情况下,值和对象是私有的。 以下是 UIL 中受支持的值类型的列表:

  • ANY
  • argument
  • BOOLEAN
  • 颜色
  • 颜色表
  • 复合字符串
  • float
  • FONT
  • 字体表
  • 字体集
  • 图标
  • INTEGER
  • 整数表
  • 键符号 (keysym)
  • 推理
  • 单精度浮点数
  • 字符串
  • 字符串表
  • 翻译表
  • 宽字符
  • 窗口小部件 (widget)

过程部分

过程部分由 PROCEDURE 关键字组成,后跟一系列过程声明。 它具有以下语法:

过程 ProcedureName [ ( [ ValueType ] ) ] ;

使用过程声明来声明以下内容:

  • 可用作窗口小部件的回调函数的函数
  • 用户定义的窗口小部件的创建函数。

您可以在可使用过程的任何上下文中引用稍后在 UIL 模块中出现的声明中的过程名称。 过程可以向前引用。 不能 使用在另一上下文中使用的名称作为过程名称。

在过程声明中,您可以选择指定在运行时将参数传递到相应的回调函数。 此参数称为 回调标记。 您可以通过将数据类型放在过程名称后面的括号中来指定回调标记的数据类型。 编译模块时, UIL 编译器会检查您在过程的引用中指定的自变量是否属于此类型。 请注意,回调标记的数据类型必须是有效的 UIL 数据类型之一。 您可以将窗口小部件用作回调标记,只要该窗口小部件与回调在同一窗口小部件层次结构中定义; 即,它们必须具有位于同一 UIL 层次结构中的公共祖代。

以下列表总结了 UIL 编译器如何根据过程声明检查自变量类型和自变量计数:

描述
无参数 未进行自变量类型或自变量计数检查。 可以在过程引用中提供 0 或 1 自变量。
( ) 检查自变量计数是否为 0。
(任意) 检查自变量计数是否为 1。 不检查参数类型。 使用 ANY 数据类型来阻止对过程标记进行类型检查。
(类型) 检查指定类型的一个自变量。
(ClassName) 检查指定窗口小部件类的一个窗口小部件参数。

虽然可以使用任何 UIL 数据类型来指定过程声明中标记的类型,但您必须能够以您正在使用的编程语言来表示该数据类型。 某些数据类型 (例如整数,布尔值和字符串) 是大多数编程语言所识别的公共数据类型。 其他 UIL 数据类型 (例如字符串表) 更复杂,可能需要您在应用程序中设置相应的相应数据结构,以便将该类型的标记传递给回调函数。

您还可以使用过程声明来指定用户定义的窗口小部件的创建函数。 在这种情况下,不指定形参。 将使用传递到所有窗口小部件创建函数的标准三个参数来调用该过程。

列表部分

列表部分由 LIST 关键字后跟一系列列表声明组成。 它具有以下语法:

LIST ListName : { ListItem; [...] } [...]

您还可以使用列表部分将一组自变量,控件 (子代) ,回调或过程分组在一起,以供以后在 UIL 模块中使用。 列表可以包含其他列表,因此您可以设置层次结构以明确显示哪些参数,控件,回调和过程对于哪些窗口小部件是公共的。 不能混用不同类型的列表; 特定类型的列表不能包含不同列表类型的条目或引用不同列表类型的名称。 列表名称始终是您在其中声明列表的 UIL 模块的专用名称,并且不能作为指定资源存储在 UID 文件中。

以下部分描述了其他列表类型。

自变量列表结构

参数列表定义在运行时调用特定对象的创建函数时在 arguments-list 参数中指定的参数。 参数列表还指定这些参数的值。 自变量列表具有以下语法:

LIST ListName : 自变量 { ArgumentName = ValueExpression; [...] } [...]

参数名称 (ArgumentName) 必须是内置参数名称或使用 ARGUMENTS 函数指定的用户定义的参数名称。

如果使用内置参数名称作为对象定义中的参数列表条目,那么 UIL 编译器将检查参数名称以确保它受您正在定义的对象类型支持。 如果在给定的自变量列表中多次显示相同的自变量名称,那么使用该自变量名称的最后一个条目将取代具有该名称的所有先前条目,并且编译器将发出一条消息。

某些参数(如 XmNitemsXmNitemCount )由 UIL 编译器进行绑定。 当您指定其中一个耦合自变量时,编译器还会设置另一个自变量。 耦合参数对您不可用。

AIXwindows 和 X Toolkit (Intrinsics) 支持 约束自变量。 约束自变量是传递给对象的子代的自变量,超出了通常可用的那些自变量。 例如, " 表单 " 窗口小部件将一组约束参数授予其子代。 这些自变量控制子项在 " 表单 " 窗口小部件中的位置。

与用于定义特定窗口小部件的属性的自变量不同,约束自变量专门用于定义特定窗口小部件的子代的其他属性。 这些属性会影响子代在其父代中的行为。 要向子代提供约束自变量,请将这些自变量包括在子代的自变量列表中。

回调列表结构

使用回调列表来定义特定窗口小部件在运行时要处理的回调原因。 回调列表具有以下语法:

LIST ListName : CALLBACKS { reasonName = PROCEDURE ProcedureName [ ( [ ValueExpression ] ) ]; | ReasonName = ProcedureList ; [...] } [...]

对于 AIXwindows 窗口小部件,原因名称必须是内置原因名称。 对于用户定义的窗口小部件,可以使用先前使用 REASON 函数指定的原因名称。 如果在对象定义中使用内置原因,那么 UIL 编译器将确保所定义对象的类型支持该原因。

如果同一原因在回调列表中多次显示,那么引用该名称的最后一个条目将使用同一原因取代所有先前条目。 然后, UIL 编译器将发出诊断消息。

如果为过程自变量 (回调标记) 指定指定值,那么该值的数据类型必须与在相应过程声明中为回调标记指定的类型匹配。 将窗口小部件名称指定为过程值表达式时,还必须在窗口小部件名称之前指定窗口小部件类型和空间。

因为 UIL 编译器生成 UID 文件,而不是生成对象模块 (.o) ,所以 UIL 名称与入口点地址的绑定,然后与过程的绑定不是由装入程序完成的。 相反,该绑定是在运行时通过 MRM MrmRegisterNames 函数建立的。 在访存任何对象之前调用此函数,同时为其提供每个回调的 UIL 名称和过程地址。 您在应用程序中向 MRM 注册的名称必须与您在 UIL 模块中为过程指定的名称相匹配。

每个回调过程都接收到三个参数。 前两个自变量对于每个回调具有相同的格式。 第三个自变量的形式因对象而异。

第一个自变量是 AIXwindows 为此对象实例维护的数据结构的地址。 此地址称为此对象的窗口小部件标识。

第二个自变量是您在此过程的回调列表中指定的值的地址。 如果未指定参数,那么地址为空。

第三个自变量是您在回调列表中指定的原因名称。

控件列表结构

控件列表定义哪些对象是特定对象的子代或由特定对象控制。 控件列表中的每个条目都具有以下语法:

LIST ListName : CONTROLS { [ 子名称 ] [ MANAGED | UNMANAGED ] 对象定义; [...] } [...]

如果在运行时指定 MANAGED 关键字,那么将创建并管理该对象; 如果在运行时指定 UNMANAGED 关键字,那么仅创建该对象。 缺省情况下,会管理对象。

您可以使用 ChildName 参数为特定控件的自动创建的子代指定资源。 自动创建的子代的名称是通过将 Xm_ 附加到子窗口小部件的名称来构成的。 此名称在父窗口小部件的文档中指定。

与自变量列表和回调列表不同,与先前条目相同的控件列表条目 不会 取代先前条目。 在运行时,每个控件列表条目都会导致在创建父代时创建子代。 如果将同一对象定义用于多个子代,那么将在运行时创建该子代的多个实例。

过程列表结构

您可以通过定义过程列表为 UIL 中的回调原因指定多个过程。 与其他列表类型一样,可以直接或在列表部分中定义过程列表,并按名称进行引用。

如果多次定义原因 (例如,在引用的过程列表和对象的回调列表中都定义了原因) ,那么先前的定义将被最新定义覆盖。 过程列表的语法如下所示:

LIST ListName : 过程 { ProcedureName [ ( [ ValueExpression ] ) ]; [...] } [...]

将窗口小部件名称指定为过程值表达式时,还必须在窗口小部件名称之前指定窗口小部件类型和空间。

对象部分

对象部分由后跟一系列对象声明的 OBJECT 关键字组成。 它具有以下语法:

OBJECT ObjectName : [ EXPORT | PRIVATE | 已导入 ] ObjectType [ PROCEDURE CreationFunction ] [ ObjectName [ WIDGET | GADGET ] | { ListDefinitions } ]

使用对象声明来定义 UID 文件中存储的对象。 可以在可以使用对象名的任何上下文 (例如,在控件列表中,作为对窗口小部件标识的符号引用,或作为回调过程的 TagValue 参数) 中 UIL 模块中其他位置出现的声明中引用对象名。 对象可以是 正向引用的对象,这意味着您可以在引用对象之后声明对象名。 对对象名的所有引用都必须与对象声明中指定的对象类型一致。 可以将对象指定为已导出,已导入或专用对象。

对象定义可以包含一系列用于定义窗口小部件的自变量,层次结构和回调的列表。 只能为对象指定每个类型的一个列表。 声明用户定义的窗口小部件时,必须包含对用户定义的窗口小部件的窗口小部件创建函数的引用。

使用 GADGETWIDGET 关键字来指定对象类型或覆盖此对象类型的缺省变体。 你可以将具有部件变体的对象类型的AIXwindows名称(例如 XmLabelGadget )用作对象声明的属性。 ObjectType 可以是任何对象类型,包括小配件。 您只需要在对象的声明中指定 GADGETWIDGET 关键字,而不是在引用对象时指定。 不能 为用户定义的对象指定 GADGETWIDGET 关键字; 用户定义的对象始终是窗口小部件。

标识部分

标识部分允许您定义 标识,这是一种实现数据与 UIL 模块中显示的名称的运行时绑定的机制。 标识部分由保留的 IDENTIFIER 关键字组成,后跟名称列表。 每个名称后跟一个分号 (;)。 语法如下:

标识符 标识符名称; [...; ]

稍后可以在 UIL 模块中使用这些名称作为窗口小部件的自变量值或回调过程的标记值。 在运行时,使用 MrmRegisterNamesMrmRegisterNamesInHierarchy MRM 函数将标识符名称与该标识符关联的数据(或在回调情况下,与数据的地址)进行绑定。

每个 UIL 模块都有一个名称空间; 因此,不能将用于值,对象或过程的名称用作同一模块中的标识名称。

UIL 编译器不会对 UIL 模块中标识的使用执行任何类型的检查。 与 UIL 值不同,标识没有与其关联的 UIL 类型。 无论将窗口小部件自变量或回调过程标记定义为何种特定类型,都可以在该上下文中使用标识,而不使用相应类型的值。

要在 UIL 模块中引用这些标识名称,请在要使用其值的任何位置使用该标识的名称。

包含伪指令

include 伪指令将指定文件的内容合并到 UIL 模块中。 此机制允许多个 UIL 模块共享公共定义。 include 伪指令的语法如下所示:

包含文件 FileName ;

UIL 编译器将 include 伪指令替换为 include 文件的内容,并将其处理为如同这些内容显示在当前 UIL 源文件中一样。

可以嵌套 include 文件,这意味着 include 文件可以包含 include 伪指令。 UIL 编译器最多可以处理 100 个引用 (包括包含 UIL 模块的文件)。 因此,您最多可以在单个 UIL 模块中包含 99 个文件,包括嵌套文件。 每次打开文件都算作引用; 因此,包含同一文件两次算作两个引用。

字符表达式是用于标识要包含的文件的文件规范。 用于查找指定文件的规则类似于使用 include 伪指令 #include(使用 C 语言的带引号字符串) 查找头或 .h文件的规则。 uil 命令使用 -I 选项来指定包含文件的搜索目录。 搜索规则如下所示:

  • 如果提供目录,那么 UIL 编译器仅在该目录中搜索包含文件。
  • 如果未提供目录,那么 UIL 编译器将在主源文件的目录中搜索包含文件。
  • 如果在主源文件目录中找不到包含文件,那么编译器将在与源文件相同的目录中进行查找。

语言语法

本部分包含有关以下内容的信息:

名称和字符串

名称可以由 A 到 Z , a 到 z , 0 到 9 , $(美元符号) 和 _ (下划线) 中的任何字符组成。 名称不能以数字 (0 到 9) 开头。 名称的最大长度为 31 个字符。

UIL 通过 MODULE 头中的子句为您提供区分大小写或不区分大小写的名称选项。 例如,如果名称区分大小写,那么名称 "sample" 和 "Sample" 彼此不同。 如果名称不区分大小写,那么这些名称将被视为相同名称,并且可以互换使用。 缺省情况下, UIL 假定名称区分大小写。

在不区分大小写的方式下,编译器以大写形式输出 UID 文件中的所有名称。 在区分大小写的方式下,名称显示在 UIL 文件中与显示在源文件中的名称完全相同。

以下列出了 不能 用于程序员定义的名称的保留关键字:

表 1. 保留关键字
描述 描述
自变量 回调 控制符
END 已导出 FALSE
小配件 (gadget) 标识 INCLUDE
list MODULE OFF
ON 对象 PRIVATE
PROCEDURE 过程 TRUE
VALUE 窗口小部件 (widget)  

以下列出了 UIL 非保留关键字。 这些关键字可以用作程序员定义的名称; 但是,如果使用这些关键字中的任何一个作为名称,那么不能使用 UIL 提供的格式的该关键字。

内置参数名称(例如 XmNxXmNheight 内置原因名称(例如 XmNactivateCallbackXmNhelpCallback 字符集名称(例如 ISO_LATIN1 ISO_HEBREW_LR )常量值名称(例如 XmMENU_OPTIONXmBROWSE_SELECT 对象类型(例如 XmPushButtonXmBulletinBoard

表 2。 未保留的关键字
描述 描述
ANY 文件 已导入
argument float 推理
ASCIZ_字符串表 FONT RGB
ASCIZ_TABLE 字体集 单精度浮点数
后台 字体表 字符串
BOOLEAN 前台 字符串表
不区分大小写 图标 翻译表
区分大小写 INTEGER 非受管
字符集 整数表 用户自定义
颜色 键符号 (keysym) version
颜色表 managed 宽字符
复合字符串 名称 窗口小部件 (widget)
复合字符串表 对象 XBITMAPFILE
  从右到左  

字符串字面值可以由大写字母和小写字母,数字和标点字符组成。 空格,制表符和注释是语言中的特殊元素。 它们是对其他元素 (例如两个名称) 进行定界的方法。 这些元素中的一个或多个可以显示在语言中的任何其他元素之前或之后。 但是,字符串字面值中显示的空格,制表符和注释将被视为字符序列而不是定界符。

数据类型

UIL 为其支持的几种值类型提供文字。 某些值类型不支持作为文字 (例如,像素图和字符串表)。 您可以使用 "函数" 部分中描述的函数来指定这些类型的值。 UIL 直接支持以下文字类型:

  • 字符串文字
  • 整数文字
  • 布尔文字
  • 浮点文字

UIL 还包含 ANY 数据类型,用于关闭数据类型的编译时检查。

字符串字面值

字符串文字是由 0 或更多 8 位字符或 16 位字符组成的序列,或者是由 " (单引号) 或 " (双引号)。 字符串字面值还可以包含用双引号定界的多字节字符。 字符串字面值长度不能超过 2,000 个字符。

单引号字符串文字可以跨多个源行。 要继续单引号字符串文字,请以 \ (反斜杠) 结束连续行。 文字在下一行上继续第一个字符。

双引号字符串字面值不能跨多个源行。 (因为双引号字符串可以包含转义序列和其他特殊字符,所以不能使用反斜杠字符来指定字符串的延续。) 要构建必须跨多个源行的字符串值,请使用本节中稍后描述的并置操作。

字符串文字的语法可以是下列其中一项:

'[CharacterString]'
[#CharSet]"[CharacterString]"

这两种字符串形式都使字符集与字符串值相关联。 UIL 使用以下规则来确定字符串文字的字符集和存储格式:

  • 声明 ' String '的字符串等同于 #CurCharSet " String " ,其中 CurCharSet 表示LANG 环境变量值中的字符集部分。 如果 LANG 环境变量未设置或未设置代码组件, CurCharSet 则其值为 XmFALLBACK_CHARSET。 默认情况下, XmFALLBACK_CHARSETISO8859-1 (等同于 ISO_LATIN1 ),但供应商可以定义不同的默认值。
  • 若将模块的默认字符集指定 CharSet#CharSet " String " ,则声明为 "String" 的字符串等同于 #CharSet "String "。 如果没有为模块指定缺省字符集,并且为 uil 命令提供了 -s 选项,或者为 Uil 函数可调用编译器设置了 use_setlocale_flag 值, 将该字符串解释为当前语言环境中的字符串。 这意味着通过调用 setlocale 函数,字符串将根据用户的区域设置进行解析,其字符集被设置 XmFONTLIST_DEFAULT_TAG 为. 的值。 如果将字符串转换为复合字符串,那么会将其存储为语言环境编码的文本段。 否则 ,“ String 等同于 #CurCharSet " String " ,其中 CurCharSet 的解释方式与单引号字符串相同。
  • 形式为 " String " #CharSet " String " 的字符串以空字符终止的字符串形式存储。

以下列出了 UIL 编译器支持的字符串字面值的字符集。 请注意,多个 UIL 名称映射到同一个字符集。 在某些情况下, UIL 名称会影响字符串文字的读取方式。 例如,由以 _LR 结尾的 UIL 字符集名称标识的字符串将从左到右读取。 以不同数字结尾的名称反映不同的字体 (例如, ISO_LATIN1ISO_LATIN6)。 此列表中的所有字符集都由 8 位表示。

UIL 名称 描述
ISO_LATIN1 GL: ASCII , GR: Latin-1 补充协议
ISO_LATIN2 GL: ASCII , GR: Latin-2 补充协议
ISO_ARABIC GL: ASCII , GR: 拉丁语-阿拉伯语补充协议
ISO_LATIN6 GL: ASCII , GR: 拉丁语-阿拉伯语补充协议
ISO_GREEK GL: ASCII , GR: 拉丁语-希腊语补充协议
ISO_LATIN7 GL: ASCII , GR: 拉丁语-希腊语补充协议
ISO_HEBREW GL: ASCII , GR: 拉丁语-希伯来语补充协议
ISO_LATIN8 GL: ASCII , GR: 拉丁语-希伯来语补充协议
ISO_HEBREW_LR GL: ASCII , GR: 拉丁语-希伯来语补充协议
ISO_LATIN8_LR GL: ASCII , GR: 拉丁语-希伯来语补充协议
JIS_片假名 GL: JIS Roman , GR: JIS Katakana

以下是每个字符集的解析规则:

字符集 解析规则
所有字符集 00 到 1F, 7F和 80 到 9F 范围内的字符代码是控制字符,包括 16 位字符的两个字节。 编译器将这些字符标记为非法字符。
ISO_LATIN1ISO_LATIN2ISO_ARABICISO_LATIN6ISO_GREEKISO_LATIN7 这些集合从左到右进行解析。 这些字符集也支持以 null 结束的字符串的转义序列。
ISO_HEBREWISO_LATIN8 这些集合从右到左进行解析。 例如,字符串#ISO_HEBREW"012345"生成基本字符串"543210"具有字符集 ISO_HEBREW。 此类字符串的 DDIS 描述符将此段标记为从右到左。 这些字符集还支持以 null 结束的字符串的转义序列,组成转义序列的字符按从左到右顺序排列。 例如,输入\n,不n\.
ISO_HEBREW_LRISO_LATIN8_LR 这些集合从左到右进行解析。 例如,字符串#ISO_HEBREW"012345"生成基本字符串"012345"具有字符集 ISO_HEBREW。 此类字符串的 DDIS 描述符将此段标记为从左到右。 这些字符集也支持以 null 结束的字符串的转义序列。
JIS_片假名 此集从左到右进行解析。 这些字符集也支持以 null 结束的字符串的转义序列。 请注意, \ (反斜杠) 可以显示为日元符号。

除了指定字符串的解析规则外,字符集信息仍然是复合字符串的属性。 如果该字符串包含在由多个并置段组成的字符串中,那么该字符串段包含字符集信息。 这将为 AIXwindows 提供解密复合字符串所需的信息,并选择显示该字符串的字体。

对于仅以英语显示的应用程序界面, UIL 允许您忽略字符串的两种用途之间的区别。 当必须将字符串作为以 null 结束的字符串或作为复合字符串传递时,编译器按上下文进行识别。

UIL 编译器可识别有关各种字符集的足够信息,以正确解析字符串文字。 如果在仅支持以 null 结束的字符串的上下文中使用复合字符串,那么编译器还会发出错误。

由于字符集名称是关键字,因此如果使用区分大小写的名称,那么必须将其设置为小写。 如果名称不区分大小写,那么字符集名称可以是大写,小写或混合大小写。

除了 UIL 识别的内置字符集外,您还可以使用 CHARACTER_SET 函数定义自己的字符集。 可以在可以指定字符集的任何位置使用 CHARACTER_SET 函数。

字符串字面值可以包含具有第八个 (高阶) 位集的字符。 不能直接在单引号字符串文字中输入控制字符 (00 到 1F, 7F和 80 到 9F)。 但是,您可以使用转义序列来表示这些字符。 以下列表显示特殊字符的转义序列:

描述
\b 退格
\f 换页符
\n 换行
\r 回车
\t 水平跳格
\v 垂直制表键
\' 单引号
\" 双引号
\\ 反斜杠
\整数\ 其内部表示由 Integer (范围在 0 到 255 位小数之间) 给出的字符。
注: 按字面意思处理在当前语言环境 (本地化字符串) 中解析的字符串中的转义序列。

UIL 编译器不会处理复合字符串中的换行符。 复合字符串中换行符的作用仅取决于字符串的字符集。 结果不保证是多行字符串。

复合字符串字面值

复合字符串由包含 8 位, 16 位或多字节字符的字符串,指定的字符集和写入方向组成。 其 UIL 数据类型为 compound_string

复合字符串的写入方向由为该字符串指定的字符集隐含。 您可以使用 COMPOUND_STRING 函数显式设置复合字符串的写入方向。

复合字符串可以由一系列并置的复合字符串,以 null 结束的字符串或两者的组合组成,每个组合可以具有不同的字符集属性和写入方向。 使用&(与号)连接运算符来创建复合字符串序列。

存储序列中的每个字符串,包括字符集和写入方向信息。

通常,当字符串文字由具有不同字符集或写入方向的并置字符串组成时,或者当您使用该字符串为需要复合字符串值的自变量指定值时,会将该字符串文字作为复合字符串存储在 UID 文件中。 如果要保证字符串文字存储为复合字符串,那么 必须 使用 COMPOUND_STRING 函数。

字符串字面值的数据存储使用量

在 UID 文件中存储字符串文字的方式取决于您如何声明和使用字符串。 如果使用以 null 结束的字符串来指定需要复合字符串的自变量的值,那么 UIL 编译器会自动将该字符串转换为复合字符串。 但是,这种转换在存储消耗方面成本很高。

声明字面值时, PRIVATEEXPORT已导入 字符串字面值需要单个分配的存储器; 此后,每个对字面值的引用都需要存储器。 声明为内联的字面值需要同时用于分配和引用的存储器。

以下列表汇总了字符串字面值的数据存储使用量。 分配的存储需求由固定部分和可变部分组成。 分配的固定部分与引用的存储需求 (几个字节) 大致相同。 变量部分使用的存储器取决于字面值的大小 (字符串的长度)。 要节省存储空间,请避免进行字符串字面值声明,这将导致每次使用时进行分配。

声明 (和数据类型) 用作 每次使用的存储需求
直接插入 (以 null 结束) 以 null 结束的 (null-terminated) 分配和引用 (在模块中)
专用 (以 Null-terminated) 以 null 结束的 (null-terminated) 引用 (在模块中)
已导出 (以 null 结束) 以 null 结束的 (null-terminated) 引用 (在 UID 层次结构中)
已导入 (以 null 结束) 以 null 结束的 (null-terminated) 引用 (在 UID 层次结构中)
直接插入 (以 null 结束) 化合物 分配和引用 (在模块中)
专用 (以 Null-terminated) 化合物 分配和引用 (在模块中)
已导出 (以 null 结束) 化合物 引用 (在 UID 层次结构中)
已导入 (以 null 结束) 化合物 引用 (在 UID 层次结构中)
直接插入 (复合) 化合物 分配和引用 (在模块中)
专用 (复合) 化合物 引用 (在模块中)
已导出 (复合) 化合物 引用 (在 UID 层次结构中)
已导入 (复合) 化合物 引用 (在 UID 层次结构中)

整数字面值

整数文字表示整数的值。 整数字面值的格式为可选符号,后跟一个或多个十进制数字。 整数文字不得包含嵌入的空格或逗号。

整数文字作为长整数存储在 UID 文件中。 在声明字面值时,导出和导入的整数字面值需要单个分配; 此后,每个对字面值的引用都需要几个字节的存储空间。 专用整数字面值和已声明的直接插入字面值需要分配和每次使用的引用存储器。 要节省存储空间,请避免进行整数字面值声明,这将导致每次使用时进行分配。

以下列表显示整数字面值的数据存储使用量:

声明 每次使用的存储需求
直接插入 分配和引用 (在模块中)。
专用 分配和引用 (在模块中)。
已导出 引用 (在 UID 层次结构中)。
已导入 引用 (在 UID 层次结构中)。

布尔文字

布尔文字表示 True 值 (保留关键字 TRUEOn) 或 False 值 (保留关键字 FALSEOff)。 这些关键字遵循区分大小写的规则。

在 UID 文件中, TRUE 由整数值 1 表示, FALSE 由整数值 0 表示。

布尔字面值的数据存储消耗与整数字面值的数据存储消耗相同。

浮点文字

浮点文字表示实数 (或浮点数) 的值。 浮点文字具有以下格式:

[+|-][Integer].Integer[E|e[+|-]Exponent]

为了实现最大可移植性,浮点文字可以表示 1.0E-37 到 1.0E+37 范围内的值,其中至少有六个有效数字。 在许多机器上,此范围更广,具有更多有效数字。 浮点文字不得包含嵌入的空格或逗号。

浮点文字作为双精度浮点数存储在 UID 文件中。 以下是 UIL 编译器的有效和无效浮点表示法的示例:

有效浮点文字 无效浮点文字
1.0 1e1 (无小数点)
.1 E-1 (无小数点或数字)
3.1415E-2 (等于 .031415) 2.87 e6 (嵌入空白)
-6.29e7 (等于 -62900000) 2.0e100 (超出范围)

浮点字面值的数据存储消耗与整数字面值的数据存储消耗相同。

任何数据类型

ANY 数据类型的用途是关闭 UIL 编译器的数据类型检查功能。 可以将 ANY 数据类型用于以下任一项:

  • 指定回调过程标记的类型。
  • 指定用户定义的自变量的类型。

当需要使用不受 UIL 编译器支持的类型或者希望放宽编译器施加的数据类型限制时,可以使用 ANY 数据类型。 例如,您可能想要定义一个具有自变量的窗口小部件,该自变量可以接受不同类型的值,具体取决于运行时环境。

如果指定自变量采用 ANY 值,那么编译器不会检查为该自变量指定的值的类型。 因此,在为 ANY 数据类型的自变量指定值时需要注意。 如果传递的值具有窗口小部件不支持该参数的数据类型,那么在运行时可能会获得意外结果。

表达式

UIL 包含编译时值表达式。 这些表达式可以包含对其他 UIL 值的引用,但不能向前引用。

以下列出了 UIL 中允许您基于使用 UIL 模块定义的其他值创建整数,实数和布尔值的运算符集。 在该列表中, 1 的优先顺序是最高的。

算子 (及其含义) 操作数类型 优先顺序
~ (非) 布尔 1
(1 个补充) 整数  
- (负数) float 1
(负数) 整数  
+ (NOP) float 1
(NOP) 整数  
* (乘) 浮点,浮点 2
(乘) 整数,整数  
/ (除法) 浮点,浮点 2
(除法) 整数,整数  
+ (添加) 浮点,浮点 3
(添加) 整数,整数  
- (减) 浮点,浮点 3
(减) 整数,整数  
>> (右移) 整数,整数 4
<< (左移) 整数,整数 4
& (非) 布尔值,布尔值 5
(按位 AND) 整数,整数  
(并置) 字符串,字符串  
| (或) 布尔值,布尔值 6
(按位或) 整数,整数  
^ (异或) 布尔值,布尔值 6
(按位 XOR) 整数,整数  

字符串可以是单个复合字符串,也可以是一系列复合字符串。 如果两个并置的字符串具有不同的属性 (例如写入方向或字符集) ,那么并置的结果是多段复合字符串。

除非存在以下一个或多个条件,否则由并置生成的字符串是以 null 结束的字符串:

  • 其中一个操作数是复合字符串。
  • 操作数具有不同的字符集属性。
  • 操作数具有不同的写入方向。

如果满足一个或多个先前条件,那么生成的字符串是复合字符串。 不能将导入或导出的值用作并置运算符的操作数。

每个运算符的结果与其操作数的类型相同。 如果不使用转换函数,那么不能在表达式中混用类型。

可以使用括号来覆盖运算符的正常优先顺序。 在一元运算符序列中,操作按从右到左顺序执行。 例如,- + -A相当于-(+(-A)). 在具有相同优先顺序的二进制运算符的序列中,按从左到右顺序执行操作。 例如,A*B/C*D相当于((A*B)/c)*D.

值声明为值提供名称。 不能在后续值声明中重新定义该名称的值。 您可以在 UIL 模块中的任何位置使用包含运算符和函数的值。 不能将导入的值用作表达式中的操作数。

为多种数据类型定义了多个二进制运算符。 例如,对浮点运算和整数运算都定义了乘法 (*) 的运算符。

要使 UIL 编译器执行这些二进制操作,两个操作数的类型必须相同。 如果提供不同数据类型的操作数,那么 UIL 编译器会根据以下转换规则自动将其中一个操作数转换为另一个操作数的类型:

  • 如果操作数是整数和布尔值,那么布尔值将转换为整数。
  • 如果操作数是整数和浮点数,那么整数将转换为浮点数。
  • 如果操作数是浮点和布尔值,那么布尔值将转换为浮点。

您还可以使用 INTEGERFLOATSINGLE_FLOAT 转换函数之一来显式转换值的数据类型。

函数

UIL 提供了用于生成以下类型值的函数:

  • 字符集
  • 键符
  • 颜色
  • 像素图
  • 单精度浮点数
  • 双精度浮点数
  • 字体
  • 字体集
  • 字体表
  • 复合字符串
  • 复合字符串表
  • ASCIZ (以 null 结束) 字符串表
  • 宽字符字符串
  • 窗口小部件类名
  • 整数表
  • Arguments
  • 原因
  • 转换表。

以下部分中的所有示例都采用不区分大小写的方式。 关键字以大写字母显示,以将它们与用户指定的名称区分开来,这些名称以混合大小写的斜体显示。 在不区分大小写的方式下,不需要使用大写字母。 在区分大小写的方式下,关键字必须采用小写字母。

字符集( 字符串表达式 [, 属性 [,...]])
您可以使用 CHARACTER_SET 函数定义自己的字符集。 可以在可以指定字符集的任何位置使用 CHARACTER_SET 函数。

CHARACTER_SET 函数的结果是具有名称 StringExpression 和您指定的属性的字符集。 StringExpression 必须是以 null 结束的字符串。 您可以选择包含以下一个或两个子句,以指定结果字符集的属性:

RIGHT_TO_LEFT = BooleanExpression 十六位 = BooleanExpression

如果 BooleanExpression 为 True ,那么 RIGHT_TO_LEFT 子句将字符串的缺省写入方向设置为从右到左,否则设置为从左到左。

如果 BooleanExpression 为 True ,那么 十六位 子句允许将与此字符集相关联的字符串解释为 16 位字符,否则将解释为 8 位字符。

KEYSYM (StringLiteral)
KEYSYM 函数用于指定助记符资源的 keysym。 StringLiteral 必须正好包含一个字符。 如果使用 -s 编译器标志,那么使用双引号的 StringLiteral 必须指定字符集。
COLOR( 字符串表达式 [,前景色|背景色])
COLOR 函数支持颜色的定义。 通过使用 COLOR 函数,您可以指定一个值来指定颜色,并将该值用于需要颜色值的自变量。 字符串表达式将命名您要定义的颜色。 可选的 前台BACKGROUND 关键字标识在颜色表定义中使用颜色时如何在单色设备上显示颜色。

UIL 编译器没有内置颜色名称。 颜色是对象的与服务器相关的属性。 颜色在每个服务器上定义,并且在每个服务器上可能具有不同的红绿蓝 (RGB) 值。 您指定为颜色参数的字符串必须由运行应用程序的服务器识别。

在 UID 文件中, UIL 将颜色表示为字符串。 MRM 调用将颜色字符串转换为特定于设备的像素值的 X 转换函数。 如果您正在单色服务器上运行,那么所有颜色都将转换为黑色或白色。 如果您在颜色服务器上,那么满足以下条件时,颜色名称将转换为其正确的颜色:

  • 已定义颜色。
  • 颜色映射尚未满。

如果颜色映射已满,那么即使有效颜色也会转换为黑色或白色 (前景或背景)。

通常,界面不会指定窗口小部件的颜色。 这使用户能够通过 来控制颜色的选择。Xdefaults 文件。

要编写在单色和彩色设备上运行的应用程序,需要指定颜色表 (使用 COLOR_TABLE 函数定义) 中的哪些颜色映射到背景以及哪些颜色映射到前景。 UIL 允许您使用 COLOR 函数将颜色红色映射到单色设备上的背景色,如下所示:

VALUE c: COLOR ( 'red',BACKGROUND );

仅当为 MRM 提供了颜色并且要在单色设备上显示应用程序时,才需要映射。 在这种情况下,每种颜色都被认为是以下三类之一:

  • 颜色映射到单色设备上的背景颜色。
  • 颜色映射到单色设备上的前景色。
  • 未对此颜色定义单色映射。

如果颜色映射到前景色或背景色,那么 MRM 将分别替换前景色或背景色。 如果未指定颜色的单色映射,那么 MRM 会将颜色字符串传递到 AIXwindows 以映射到前景色或背景色。

RGB( 红整数, 绿整数, BlueInteger )
这三个整数定义了颜色的红色,绿色和蓝色组件的值 (按该顺序)。 这些组件的值范围从 0 到 65,535 (含)。

在 UID 文件中, UIL 将 RGB 值表示为三个整数。 MRM 调用将整数转换为特定于设备的像素值的 X 转换函数。 如果您正在单色服务器上运行,那么所有颜色都将转换为黑色或白色。 如果您在颜色服务器上,那么 RGB 值将转换为其正确的颜色 (如果颜色映射尚未满)。 如果颜色映射已满,那么值将转换为黑色或白色 (前景或背景)。

COLOR_TABLE( Color Ex pression='字符'[,...])
颜色表达式是先前定义的颜色,使用 颜色 函数内联定义的颜色,或者短语 背景色前景色。 该字符可以是任何有效的 UIL 字符。

COLOR_TABLE 函数提供了一种独立于设备的方法来指定一组颜色。 COLOR_TABLE 函数接受先前定义的 UIL 颜色名称或内联颜色定义 (使用 COLOR 函数)。 颜色表必须是私有的,因为 UIL 编译器必须知道其内容以构造图标。 但是,颜色表中的颜色可以导入,导出或专用。

与每种颜色关联的单个字母是创建图标时用于表示该颜色的字符。 用于表示颜色的每个字母在颜色表中必须唯一。

ICON([ COL OR_TABLE=颜色表名称,] [,...])
颜色表名称必须引用先前定义的颜色表。 行是一个字符表达式,它给出了图标的一行。

ICON 函数描述了宽 x 像素和高 y 像素的矩形图标。 用单引号括起的字符串描述图标。 每个字符串表示图标中的一行; 字符串中的每个字符表示一个像素。

图标定义中的第一行确定图标的宽度。 所有行都必须具有与第一行相同的字符数。 图标的高度由行数决定。

ICON 函数的第一个自变量 (颜色表规范) 是可选的,用于标识此图标中可用的颜色。 通过使用与每种颜色关联的单个字母,可以指定图标中每个像素的颜色。 该图标必须由指定颜色表中定义的字符构成。

如果省略指定颜色表的自变量,那么将使用缺省颜色表。 要使用缺省颜色表,图标的行必须仅包含空格和星号。 缺省颜色表定义如下:

COLOR_TABLE( BACKGROUND COLOR = ' ', FOREGROUND COLOR = '*' )

通过替换示例语句中显示的 背景色前景色 子句中的空格和星号,可以定义其他字符来表示背景色和前景色。 您可以将图标指定为专用,已导入或已导出。 使用 MRM MrmFetchIconLiteral 功能在运行时检索已导出的图标。

XBITMAPFILE (StringExpression)
XBITMAPFILE 函数与 ICON 函数相似,因为两者都描述了宽为 x 像素,高为 y 像素的矩形图标。 但是, XBITMAPFILE 函数允许您指定包含 X 位图定义的外部文件,而所有 ICON 函数定义都必须直接在 UIL 中编码。 X 位图文件可以由许多不同的 X 应用程序生成。 UIL 通过 XBITMAPFILE 函数读取这些文件,但不支持创建这些文件。 MRM 在应用程序运行时读取指定为 XBITMAPFILE 函数的自变量的 X 位图文件。

XBITMAPFILE 函数返回类型为像素图的值,并且可以在期望像素图数据类型的任何位置使用该值。

SINGLE_FLOAT( RealNumberLiteral )
SINGLE_FLOAT 函数允许您将 UIL 文件中的浮点文字存储为单精度浮点数。 单精度浮点数通常可以使用比双精度浮点数更少的内存进行存储。 该字段 RealNumberLiteral 可以是整数字面量或浮点数字面量。 不能在算术表达式中使用使用此函数定义的值。
浮点数( RealNumberLiteral )
FLOAT 函数允许您将 UIL 文件中的浮点文字存储为双精度浮点数。 该字段 RealNumberLiteral 可以是整数字面量或浮点数字面量。
FONT( 字符串表达式 [, 字符集=字符集])
使用 FONT 函数定义字体。 通过使用 FONT 函数,您可以指定一个值来指定字体,并将该值用于需要字体值的自变量。 UIL 编译器没有内置字体。

每个字体仅在字符集的上下文中有意义。 FONT 函数有一个附加参数让您指定字体的字符集。 此参数是可选的; 如果省略此参数,那么缺省字符集取决于 LANG 环境变量的值。 如果设置 LANG,则默认字符集设置为 XmFALLBACK_CHARSET.

字符串表达式指定了字体的名称,而子句 CHAR AC TER_SET=CharSet 则指定了该字体的字符集。 FONT 函数中使用的字符串表达式不能是复合字符串。

FONTSET( 字符串表达式 [,...][, 字符集=字符集])
使用 FONTSET 函数定义字体集。 通过使用 FONTSET 函数,可以指定一组值来指定字体,并将这些值用于需要字体集值的自变量。 UIL 编译器没有内置字体。

每个字体仅在字符集的上下文中有意义。 FONTSET 函数有一个附加参数让您指定字体的字符集。 此参数是可选的; 如果省略此参数,那么缺省字符集取决于 LANG 环境变量的值。 如果设置 LANG,则默认字符集设置为 XmFALLBACK_CHARSET.

字符串表达式指定了字体的名称,而子句 CHAR ACTER_SET=CharSet 则指定了该字体的字符集。 FONTSET 函数中使用的字符串表达式不能是复合字符串。

字体表( 字体表达式 [,...])
字体表是字体和字符集对的序列。 在对象需要显示字符串的运行时,该对象会扫描字体表以查找与要显示的字符串的字符集相匹配的字符集。 UIL 提供 FONT_TABLE 函数以允许您提供此类参数。 使用 FONTFONTSET 函数创建字体表达式。

如果指定单个字体值以指定需要字体表的自变量,那么 UIL 编译器会自动将字体值转换为字体表。

COMPOUND_STRING( 字符串表达式 [, 属性 [,...]])
使用 COMPOUND_STRING 函数来设置以 null 结束的字符串的属性并将其转换为复合字符串。 可以设置的属性包括字符集,写入方向和分隔符。

COMPOUND_STRING 函数的结果是将字符串表达式作为其值的复合字符串。 您可以选择包含以下一个或多个子句,以指定生成的复合字符串的属性:

字符集= 字符集从右到左=布尔表达式隔=布尔表达式

CHARACTER_SET 子句指定字符串的字符集。 如果省略 CHARACTER_SET 子句,那么生成的字符串与 StringExpression具有相同的字符集。

如果 BooleanExpression 为 True ,那么 RIGHT_TO_LEFT 子句将字符串的写入方向设置为从右到左。 否则,写入方向为从左到右。 指定此参数不会导致更改字符串表达式的值。 如果省略 RIGHT_TO_LEFT 自变量,那么生成的字符串的写入方向与 StringExpression相同。

如果 BooleanExpression 为 True ,那么 分隔符 子句会将分隔符附加到复合字符串的末尾。 如果省略 分隔符 子句,那么生成的字符串没有分隔符。

不能将导入或导出的值用作 COMPOUND_STRING 函数的操作数。

COMPOUND_STRING_TABLE( 字符串表达式 [,...])
复合字符串表是复合字符串的数组。 需要字符串值列表的对象(例如列表控件的 和 XmNselectedItems XmNitems 参数)使用字符串表值。 COMPOUND_STRING_TABLE 函数为 " 列表 " 窗口小部件的这两个自变量构建值。 COMPOUND_STRING_TABLE 函数生成类型为 string_table 的值。 名称 STRING_TABLECOMPOUND_STRING_TABLE的同义词。

字符串表中的字符串可以是简单字符串, UIL 编译器会自动将其转换为复合字符串。

ASCIZ_STRING_TABLE( 字符串表达式 [,...])
ASCIZ 字符串表是由逗号分隔的 ASCIZ (以 null 结束) 字符串值的数组。 此函数允许您传递多个 ASCIZ 字符串作为回调标记值。 ASCIZ_STRING_TABLE 函数生成类型为 asciz_table的值。 名称 ASCIZ_TABLEASCIZ_STRING_TABLE的同义词。
宽字符 (StringExpression)
使用 WIDE _character 函数从当前语言环境中以 null 结束的字符串生成宽字符字符串。
CLASS_REC_NAME (StringExpression)
使用 CLASS_REC_NAME 函数来生成窗口小部件类名。 对于工具箱定义的窗口小部件类,字符串参数是类的名称。 对于用户定义的窗口小部件,字符串参数是窗口小部件的创建函数的名称。
INTEGER_TABLE( 整数表达式 [,...])
整数表是用逗号分隔的整数值的数组。 此函数允许您为每个回调标记值传递多个整数。 INTEGER_TABLE 函数生成类型为 integer_table的值。
参数( 字符串表达式 [, 参数类型 ])
ARGUMENTS 函数定义用户定义的窗口小部件的自变量。 UIL 可以描述的每个对象都允许一组参数。 例如, XmNheight 是大多数对象的自变量,并且具有整数数据类型。 要指定用户定义的窗口小部件的高度,可以使用内置自变量名称 XmNheight ,并在声明用户定义的窗口小部件时指定整数值。 请勿使用 ARGUMENTS 函数来指定内置到 UIL 编译器中的自变量。

StringExpression 名称是 UIL 编译器用于 UID 文件中的自变量的名称。 ArgumentType 是可与自变量关联的值的类型。 如果省略第二个自变量,那么缺省类型为 ANY ,并且不会进行值类型检查。 使用以下任何关键字来指定自变量类型:

  • ANY
  • Asciz_Table
  • 布尔
  • 颜色
  • 颜色表
  • 复合字符串
  • float
  • 字体
  • 字体表
  • 字体集
  • 图标
  • 整数
  • 集成表
  • 原因
  • 单个浮点 (Single_Float)
  • String
  • 字符串表
  • 转换表
  • 宽字符
  • 窗口小部件 (widget)

您可以使用 ARGUMENTS 函数来允许 UIL 编译器识别 AIXwindows的扩展。 例如,现有窗口小部件可以接受新参数。 通过使用 ARGUMENTS 函数,可以在发布编译器的更新版本之前使此新自变量可供 UIL 编译器使用。

REASON (StringExpression)
REASON 函数对于定义用户定义的窗口小部件的新原因很有用。

AIXwindows 中的每个对象都定义了一组条件,在这些条件下,它将调用用户定义的函数。 这些条件称为 回调原因。 用户定义的函数称为 回调过程。 在 UIL 模块中,使用回调列表来指定要调用哪些用户定义的函数的原因。

当您声明用户定义的窗口小部件时,可以使用 REASON 函数为该窗口小部件定义回调原因。 字符串表达式指定存储在 UID 文件中的自变量名称 (原因)。 此原因名称在运行时提供给窗口小部件创建功能。

TRANSLATION_TABLE( 字符串表达式 [,...])
每个 AIXwindows 窗口小部件都有一个转换表,用于将 X 事件 (例如,按鼠标按键 1) 映射到一系列操作。 通过窗口小部件参数 (例如,公共转换参数) ,您可以为特定窗口小部件指定一组备用事件或操作。 TRANSLATION_TABLE 函数创建可用作数据类型 translation_table 的自变量值的转换表。

可以将下列其中一个转换表伪指令与 TRANSLATION_TABLE 函数配合使用: #override#augment#replace。 缺省值为 #replace。 如果指定其中一个伪指令,那么它必须是转换表中的第一个条目。

#override 伪指令会导致忽略任何重复的翻译。 例如,如果当前翻译中已为< Btn1Down >定义了翻译,则由定义的 NewTranslations 翻译 PushButton, 将覆盖当前定义。 如果指定了 #augment 伪指令,那么当前定义优先。 #replace 伪指令将所有当前翻译替换为 XmNtranslations 资源中指定的翻译。

文件

  • /usr/include/uil/Uil.h
  • /usr/include/uil/UilDBDef.h
  • /usr/include/uil/UilDef.h
  • /usr/include/uil/UilSymDef.h
  • /usr/include/uil/UilSymGl.h