有两种创建数据类型定义的方法:
使用“创建操作”工具。使用“创建操作”包括在第 11 章,用创建操作命令来创建操作和数据类型。
通过手动创建数据类型定义
手动创建数据类型需要对数据库文件进行编辑。
本章描述如何手动创建数据类型定义。
有关数据类型的介绍,请参见第 10 章,操作与数据类型的介绍 。
有关数据类型定义的参考信息,请参见 dtddsfile(4) 手册页。
用手动创建数据类型可以使你利用所有内置在数据类型定义语法中的功能
基于位置 (路径) 的数据分类
指定与数据类型关联的, 而不是与“打开”和“打印”的操作的能力
相同数据类型的多重名称、模式或内容标准 —例如,基于名为 *.abc 或 *.def 的文件的数据类型
基于链接的数据分类
数据类型定义包括两个分离的数据库定义:
必须至少有一个 DATA_CRITERIA 定义作为每个 DATA_ATTRIBUTES 定义;而 DATA_ATTRIBUTES 定义可以有多个 DATA_CRITERIA 与其相关联。
例如,可以为 PostScript 文件创建属性定义,此定义描述了 PostScript 文件在“文件管理器”中的外观和性能。然后,可以为 PostScript 数据类型创建两个分离的标准 —一个基于文件名,而另一个基于文件内容。
有关详细信息,请参见数据库 (操作/数据类型) 查找路径。
本节描述如何创建数据类型的配置文件。
对包含数据类型定义的配置文件的要求是:
文件必须使用命名惯例 name.dt
文件必须位于数据库查找路径中。缺省的查找路径为:
个人数据类型—HomeDirectory/.dt/types
系统范围数据类型—/etc/dt/appconfig/types/language
内置数据类型 —/usr/dt/appconfig/types/language。不应当使用此目录。
有关修改数据库查找路径的信息,请参见设置查找路径的值。
打开现有的数据库文件或创建一个新的。
有关详细信息,请参见前一节数据类型的配置文件。
为数据类型定义数据属性,使用下面的语法:
DATA_ATTRIBUTESdata_type_name
{
ICON image_name
DESCRIPTION string
attribute_field
attribute_field
…
}
其中:
data_type_name—给定此数据类型的唯一名称。
image_name—图标文件的文件名或路径。对于文件请使用基本名称。例如,对于图标文件 myimage.m.pm和 myimage.t.pm,请使用 myimage。
attribute_field—定义数据类型的外观和性能的字段。
string—字符串。其内容将是数据类型的针对项帮助。
请参见创建个人操作和数据类型的实例。
定义数据类型的数据标准,使用下面的语法:
DATA_CRITERIA criteria_name
{
DATA_ATTRIBUTES_NAME data_type_name
criteria_field
criteria_field
…
}
其中:
criteria_name—此标准定义的唯一名称
data_type_name—在 DATA_ATTRIBUTES 定义中所使用的名称
criteria_field—用于定义标准的字段,该标准用于将文件指定给该数据类型
请参见定义数据类型的数据标准。
保存数据库文件。
为数据类型创建图标。
有关详细信息,请参见指定用于数据类型的图标图像。
如果有必要,创建在属性定义的 ACTIONS 字段列出的操作。
双击 Desktop_Controls 应用程序组中的“重新装入操作”,以便重新装入数据库。
假设系统中包含名为 xgif 的应用程序,它是用来显示 GIF 图片的。通常通过执行下面的命令来运行该程序:
xgif filename
需要以几种方式来显示 GIF 图片:
通过双击 GIF 数据文件
通过选择数据文件,并在“选中”菜单中选择应用程序
打开一个新文件 HomeDirectory/.dt/types/GifViewer.dt,以便编辑。
键入数据类型定义:
DATA_ATTRIBUTES Gif
{
DESCRIPTION Gif image file.
ICON GifIcon
ACTIONS View
}
DATA_CRITERIA Gif_Criteria
{
DATA_ATTRIBUTES_NAME Gif
NAME_PATTERN *.gif
}
键入 GifViewer 操作的操作定义:
ACTION GifViewer
{
EXEC_STRING xgif %(File)Arg_1"Gif file to view:"
WINDOW_TYPE NO_STDIO
DESCRIPTION Double-click or drop a file to \
start the Gif viewer.
}
因为定义不包括 ICON 字段,所以该操作使用系统缺省图标。
键入下面的映射操作,将 GifViewer 操作连接到在数据类型定义中列出的“查看”操作。使用 ARG_TYPE 字段将此查看操作限定到 Gif 类型文件。
ACTION View
{
ARG_TYPE Gif
TYPE MAP
MAP_ACTION GifViewer
}
保存文件。
双击在 Desktop_Controls 应用程序组中的“重新装入操作”,以重读数据库。
DATA_ATTRIBUTES 定义定义了数据类型的外观和性能。它指定了数据类型的名称,并提供了指定下面的各项的能力:
“文件管理器”图标 (ICON 字段)
“选中”菜单的双击性能和内容 (ACTIONS 字段)
使用 ICON 字段指定用于“文件管理器”的图标。如果未指定图标图像,“文件管理器”只显示一个标号。
基本文件名是包含图标图像文件的名称,减去文件名用以表示大小 (m 和 t) 和图像类型 (bm 和 pm) 的后缀。例如,如果文件名为 GameIcon.m.pm 和 GameIcon.t.pm,则使用 GameIcon。
如果使用基本文件名,图标文件必须放置在图标查找路径的目录中:
个人图标:HomeDirectory /.dt/icons
系统范围图标:/etc/dt/appconfig/icons/language
图标文件的绝对路径,包含全文件名。
只有当图标文件并不位于图标查找路径下,才应使用绝对路径。例如,如果图标文件 GameIcon.m.pm 放在目录 /doc/projects (不在图标查找路径) 下,ICON 字段的值则为 /doc/projects/GameIcon.m.pm。
表 13–1 列出将要创建的图标的大小以及相应文件名。
|
像素大小 |
位图名称 |
像素图名称 |
|---|---|---|
|
32 乘 32 |
名称 .m.bm |
名称 .m.pm |
|
16 乘 16 |
名称 .t.bm |
名称 .t.pm |
数据类型与操作有两种关联方法:
使用操作定义的 ARG_TYPE 字段,可将操作限定为指定数据类型。
例如,下面的数据类型定义为特殊的“自述”文件创建了一种数据类型,而这些文件由系统管理员创建,使用的命名惯例是 *.rm。
DATA_ATTRIBUTES SysReadmeFile
{
ICON SysReadMe
ACTIONS Open,Respond
}
DATA_CRITERIA SysReadmeFileCriteria
{
NAME_PATTERN *.rm
DATA_ATTRIBUTES_NAME SysReadmeFile
}
在下面为文件定义了特殊的“响应”操作。它在“文本编辑器”中打开文件的一个可写副本。当保存文件并退出“文本编辑器”后,文件被寄给系统管理员 (邮寄地址为 sysadmin@utd)。
ACTION Respond
{
ARG_TYPE SysReadmeFile
EXEC_STRING /bin/sh -c 'cp %Arg_1% $HOME/readme.temp;\
chmod +w $HOME/readme.temp; \
dtpad $HOME/readme.temp; \
cat $HOME/readme.temp | \
/usr/bin/mailx sysadmin@utd; \
rm $HOME/readme.temp'
WINDOW_TYPE NO_STDIO
}
如果文件是不可见数据类型,就决不会出现在“文件管理器”中。
使用位于 DATA_ATTRIBUTES 定义中的 PROPERTIES 字段来指定此类要隐含的对象:
PROPERTIES 不可见
表 13–2 显示主要由应用程序程序程序员使用的 DATA_ATTRIBUTES 字段。它们指定了在用户执行各种桌面操作时,文件所表现出的特性。
有关详细信息,请参见《公共桌面环境程序员指南》,这是开发者环境文档的一部分。
表 13–2 DATA_ATTRIBUTES 字段和描述|
字段 |
描述 |
|---|---|
|
用于类似目录这样的容器。指定当文件被移到该数据类型的容器中时,所要执行的操作。 |
|
|
用于类似目录这样的容器。指定当文件被复制该数据类型的容器中时,所要执行的操作。 |
|
|
指定当文件被链接到该数据类型的文件时,所要执行的操作。 |
|
|
指定该数据类型的文件含有可在文本框 中显示的文本。 |
|
|
指定相应的 ToolTalk 媒体类型。 |
|
|
指定相应的 MIME 类型。 |
|
|
指定相应的 X400 类型。 |
DATA_CRITERIA 定义定义了将对象类型指定给文件或目录所采用的标准。
可使用在对象分类表 13–3 中显示的标准。
表 13–3 DATA_CRITERIA 标准和描述|
标准 |
描述 |
|---|---|
|
文件名 | |
|
文件位置 | |
|
文件内容 | |
|
文件模式 | |
|
分类是以对象所链接的文件为基础的。 |
对于一种数据类型,可以使用多个标准。然而,不能在同一个数据类型中使用 NAME_PATTERN 和 PATH_PATTERN 标准。
使用 NAME_PATTERN 字段指定命名要求。字段值可以包含下面的通配符:
?—匹配任何单个字符
[cc …]—匹配括在括号中的任何字符 (c)
[c–c ]—匹配字符的范围为 c 到 c 的任何字符
下面的数据类型定义创建了基于文件名的数据类型。文件名必须以 QS 开头,并以 .doc 结尾。
DATA_ATTRIBUTES QS_Doc
{
DESCRIPTION This file contains a document for the QS \
project.
ICON Word_Doc
ACTIONS Open
}
DATA_CRITERIA QS_Doc_Criteria
{
NAME_PATTERN QS*.doc
DATA_ATTRIBUTES_NAME QS_Doc
}
下面的定义为名为 Demo_n 其中, n 为 0 到 9。
DATA_ATTRIBUTES Demo_directory
{
DESCRIPTION This is a directory. Double-click to open it.
ICON Demo
ACTIONS OpenInPlace,OpenNewView
}
DATA_CRITERIA Demo_directory_criteria
{
NAME_PATTERN Demo_[0-9]
MODE d
DATA_ATTRIBUTES_NAME Demo_directory
}
使用 PATH_PATTERN 字段指定路径。可以使用与 NAME_PATTERN 相同的通配符。
例如,下面的数据类型使用了基于路径的标准。
DATA_ATTRIBUTES Project_Graphics
{
DESCRIPTION Graphics file for the QS project. Double-click the \
icon to see the graphic.
ICON QSgraphics
}
DATA_CRITERIA Project_Graphics_Criteria
{
DATA_ATTRIBUTES_NAME Project_Graphics
PATH_PATTERN */projects/QS/graphics/*
}
要创建基于文件名和位置的数据类型,请在 PATH_PATTERN 值中包括此名称。在同一个标准定义中,不能同时使用 NAME_PATTERN 和 PATH_PATTERN。
下面定义的 QS_Source_Files 数据类型适用于所有名为 appn .c 的文件,其中n = 1 到 9, 这些文件位于 */projects/QS 的子目录中。
DATA_ATTRIBUTES QS_Source_Files
{
…
}
DATA_CRITERIA QS_Source_Files_Criteria
{
PATH_PATTERN */projects/QS/*/app[1-9].c
DATA_ATTRIBUTES_NAME QS_Source_Files
}
下面的数据类型适用于所有在目录 /doc/project1 中的,名为 chnn.xxx 的文件,其中, n 为 0 到 9,xxx 为任何三个字符的文件名后缀。
DATA_ATTRIBUTES ChapterFiles
{
DESCRIPTION Chapter file for the project document.
ICON chapter
ACTIONS Edit,Print
}
DATA_CRITERIA Chapter_Criteria
{
PATH_PATTERN /doc/project1/ch[0-9][0-9].???
DATA_ATTRIBUTES_NAME ChapterFiles
}
模式标准通常与基于名称、基于位置或基于内容的数据分类组合使用。从而可以将数据类型限定在文件或目录上,或指定所需的读、写和执行许可。
MODE 字段可包含逻辑运算符 (表 13–4) 和字符 (表 13–5)。
表 13–4 MODE 字段逻辑运算符和描述|
运算符 |
描述 |
|---|---|
|
! | |
|
& | |
|
| |
表 13–5 MODE 字段字符和描述
|
字符 |
描述 |
|---|---|
|
该数据类型只适用于文件 |
|
|
该数据类型只适用于目录 |
|
|
r |
该文件对于任何用户都是可读的 |
|
该文件对于任何用户都是可写的 |
|
|
该文件对于任何用户都是可执行的 |
|
|
该文件是链接 |
某一具体模式的缺省状态与模式无关。
下面的模式字段对数据类型有如下限定:
f&!w—只读文件
!w—只读文件和目录
f&x—可执行文件
f&r&x—既可写又可执行的文件
x|!w—可执行或只读文件
下面的数据类型定义为只读、不可执行文件创建了数据类型,这些文件的文件名符合命名惯例 *.doc。这假定已为数据类型定义了“查看”操作。
DATA_ATTRIBUTES ReadOnlyDocument
{
ICON read_only
DESCRIPTION This document is not writable. Double- \
clicking runs your editor with a \
read-only copy of the file.
ACTIONS View
}
DATA_CRITERIA ReadOnlyDocument_Criteria
{
NAME_PATTERN *.doc
MODE !d&!x&!w
DATA_ATTRIBUTES_NAME ReadOnlyDocument
}
使用 CONTENT 字段来指定基于文件内容的数据分类。基于内容的数据分类可与基于名称或基于位置的数据分类组合使用。
分类可基于文件的字符串或数字内容。文件的第一字节的编号为 0 。
对于文件的数字内容,请使用语法:
CONTENT starting_byte bytenumber CONTENTstarting_byte shortnumber CONTENTstarting_byte longnumber
对于目录的内容,请使用语法:
CONTENT 0 filename "file_name"
使用标准 C 的八进制 (前导 o) 和十六进制 (前导 oX) 数字的记数法。
使用基于内容的数据分类将导致系统性能减慢。只要有可能,就换用基于名称和位置的分类。
例如,下面的数据类型,Writable_Wingz,适用于所有具有写许可的文件,这些文件在文件的开始处含有字符串 WNGZ。
DATA_ATTRIBUTES Writable_Wingz
{
…
}
DATA_CRITERIA Writable_Wingz_Criteria
{
CONTENT 0 string WNGZ
MODE w&!d
DATA_ATTRIBUTES_NAME Writable_Wingz
}
可用几个独立的标准来创建数据类型—就是说,如果文件符合标准中的任一个 (或两者),就为其指定数据类型。
为数据类型创建 DATA_ATTRIBUTES 定义。
使用 DATA_ATTRIBUTES_NAME 字段将每个标准连接到同一个 DATA_ATTRIBUTES 定义。
例如,下面的定义创建了 Mif 数据类型。分类是基于名称或内容的。
DATA_ATTRIBUTES Mif
{
ICON Frame
ACTION_LIST Open,Print
}
DATA_CRITERIA Mif_Name_Criteria
{
DATA_ATTRIBUTES_NAME Mif
NAME_PATTERN *.mif
}
DATA_CRITERIA Mif_Content_Criteria
{
DATA_ATTRIBUTES_NAME Mif
CONTENT 1 string MIFFile
}
数据类型的查找路径包含与语言相关的位置。桌面使用 LANG 的值来确定查找数据类型定义的位置。
本地化的数据类型定义必须放置沿操作查找路径的与适当的语言相关的正确目录中。
缺省的查找路径为:
个人操作:HomeDirectory/.dt/types
系统范围操作:/etc/dt/appconfig/types/language
内置操作:/usr/dt/appconfig/types/language