# 手動によるデータ型の作成

データ型定義は次の２つの方法で作成されます。

- アクション作成ツールを使用する。アクション作成ツールの使用方法については、 SAG.dtCrA.mkr.1 を参照してください。

- 手動でデータ型定義を作成する。

手動でデータ型を作成するには、データベース・ファイルを編集しなければなりません。

この章では、手動によるデータ型定義の作成方法について説明します。

SAG.CrDT.div.3
SAG.CrDT.div.4
SAG.CrDT.div.5
SAG.CrDT.div.8
SAG.CrDT.div.14

## 関連項目

- データ型の概要については、 SAG.IntAc.mkr.1 を参照してください。

- データ型定義のリファレンス情報については、 `dtdtsfile(4)` のマニュアル・ページを参照してください。

## 手動でデータ型を作成しなければならない理由

データ型を手動で作成すると、データ型定義の構文に構築されたすべての機能を使用することができます。

次のデータ型の機能を使用する場合は、データ型を手動で作成する必要があります。

- 位置（パス）ベースのデータ型作成

- [開く]および[印刷]以外のデータ型に関連するアクションを指定する機能

- 同じデータ型に対する複数の名前、パターン、内容の基準 — たとえば、`*.abc` または `*.def` という名前のファイルに基づくデータ型など

- リンクベースのデータ型

## データ型定義のコンポーネント: 基準と属性

データ型定義は、次の２つの異なるデータベース定義で構成されます。

- `DATA_ATTRIBUTES` 定義

  `DATA_ATTRIBUTES` 定義は、データ型の名前およびこの型のファイルの外観と動作を説明します。

- `
  DATA_CRITERIA` 定義

  `DATA_CRITERIA` 定義は型を作成するための基準を説明します。各基準定義は、基準を適用する `DATA_ATTRIBUTES` をもつことができます。

各 `DATA_ATTRIBUTES` 定義に対して、少くともひとつの `
DATA_CRITERIA` 定義がなければなりません。`DATA_ATTRIBUTES` 定義は、関連する複数の `DATA_CRITERIA` をもつことができます。

たとえば、ファイル・マネージャでの PostScript ファイルの外観と動作を説明する PostScript ファイルの属性定義を作成できます。次に、PostScript データ型の２つの異なる基準を作成できます。ひとつの基準はファイル名に基づき、もうひとつはファイル内容に基づきます。

詳細については、 SAG.CrDT.div.14 を参照してください。

## 手動によるデータ型の作成: 一般的な手順

この節では、データ型構成ファイルの作成方法を説明します。

### データ型の構成ファイル

データ型定義を含む構成ファイルの要件は次のとおりです。

- ファイルが name`.dt` という命名規則を使用していること。

- ファイルがデータベース検索パス上にあること。デフォルトの検索パスは次のとおりです。

  個人用データ型 | HomeDirectory`/.dt/types`
  システム共通データ型 | `/etc/dt/appconfig/types/`language
  組み込みデータ型 | `/usr/dt/appconfig/types/`language このディレクトリは使用しないでください。

データベース検索パスの変更については、 SAG.Datab.mkr.6 を参照してください。

### データ型定義を作成するには

1. 既存のデータベース・ファイルを開くか、新しいファイルを作成します。

   詳細については、前節の SAG.CrDT.mkr.5 を参照してください。

2. 次の構文を使用して、データ型のデータ属性を定義します。

       DATA_ATTRIBUTES data_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 | 文字列。内容はデータ型のアイテムヘルプです。

   SAG.CrDT.div.8 を参照してください。

3. 次の構文を使用して、データ型のデータ基準を定義します。

       DATA_CRITERIA criteria_name
       {
        DATA_ATTRIBUTES_NAME  data_type_name
                              criteria_field
                              criteria_field
            …
       }

   それぞれの意味は次のとおりです。

   criteria_name | この基準定義の固有の名前。
   data_type_name | `DATA_ATTRIBUTES` 定義で使用する名前
   criteria_field | ファイルをこのデータ型に割り当てるための基準を定義するために使用するフィールド。

   SAG.CrDT.div.14 を参照してください。

4. データベース・ファイルを保存します。

5. データ型のアイコンを作成します。

   詳細については、 SAG.CrDT.div.10 を参照してください。

6. 必要に応じて、属性定義の `ACTIONS` フィールドにリストされたアクションを作成します。

7. [デスクトップツール]アプリケーション・グループの[アクションの再読込み]をダブルクリックし、データベースの再読み込みを行います。

### 個人用アクションとデータ型の作成例

GIF 画像を表示する `xgif` というアプリケーションがシステムに含まれているとします。通常は、次のように入力してプログラムを実行します。

    xgif filename

GIF 画像は、次の２つの方法で表示するものとします。

- GIF データ・ファイルをダブルクリックする

- データ・ファイルを選択し、[選択]メニューからアプリケーションを選択する

  1. 編集のため、新規ファイル HomeDirectory`/.dt/types/GifViewer.dt` を開きます。

  2. データ型定義を入力します。

         DATA_ATTRIBUTES Gif
         {
          DESCRIPTION  Gif image file.
          ICON         GifIcon
          ACTIONS      View
         }
         DATA_CRITERIA Gif_Criteria
         {
          DATA_ATTRIBUTES_NAME  Gif
          NAME_PATTERN          *.gif
         }

  3. 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` フィールドは含まれないので、アクションはシステムのデフォルト・アイコンを使用します。

  4. 次のマップ・アクションを入力し、GifViewer アクションを、データ型定義にリストされた View アクションに接続します。この表示アクションを Gif 型ファイルに制限するには `ARG_TYPE` フィールドを使用します。

         ACTION View
         {
          ARG_TYPE    Gif
          TYPE        MAP
          MAP_ACTION  GifViewer
         }

  5. ファイルを保存します。

  6. [デスクトップツール]アプリケーション・グループの[アクションの再読込み]をダブルクリックし、データベースの再読み込みを行います。

## データ型のデータ属性の定義

`DATA_ATTRIBUTES` 定義は、データ型の外観と動作を定義します。データ型の名前を指定し、次の内容を指定する機能を提供します。

- ファイル・マネージャ・アイコン (`ICON` フィールド)

- [選択]メニューのダブルクリック動作と内容 (`ACTIONS` フィールド)

- データ型のアイテムヘルプ (`DESCRIPTION
  ` フィールド)

### データ型に使用するアイコン・イメージの指定

`
ICON` フィールドを使用して、ファイル・マネージャで使用するアイコンを指定します。アイコン・イメージを指定しないと、ファイル・マネージャはラベルだけを表示します。

`
ICON` フィールドの値は次のいずれかです。

- ベース・ファイル名

  ベース・ファイル名は、ファイル名からサイズに関する接尾辞拡張子 (`l`、`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` となります。

[ SAG.CrDT.tbl.1 は、作成するアイコンのサイズと、対応するファイル名のリストです。

### データ型アイコンのアイコン名とサイズ

`サイズ（ピクセル単位）` | `ビットマップ名` | `ピックスマップ名`
48 × 48 | name`.l.bm` | name`.l.pm`
32 × 32 | name`.m.bm` | name`.m.pm`
16 × 16 | name`.t.bm` | name`.t.pm`

### データ型とアクションの関連付け

データ型をアクションに関連付けるには、次の２つの方法があります。

- `DATA_ATTRIBUTES` 定義の `
  ACTIONS` フィールドは、ファイル・マネージャの[選択]メニューに表示されるアクションをリストします。リストの最初のアクションは、デフォルト（ダブルクリック）アクションです。

- アクション定義の `
  ARG_TYPE` フィールドを使用して、指定したデータ型にアクションを制限できます。

たとえば、次のデータ型定義は、`*.rm` という命名規則を使用してシステム管理者が作成した特殊な “readme” ファイルのデータ型を作成します。

    DATA_ATTRIBUTES SysReadmeFile
    {
     ICON     SysReadMe
     ACTIONS  Open,Respond
    }
    DATA_CRITERIA SysReadmeFileCriteria
    {
     NAME_PATTERN           *.rm
     DATA_ATTRIBUTES_NAME   SysReadmeFile
    }

特別な Respond アクションは、ファイルに対して下記のように定義されます。このアクションは、テキスト・エディタで書き込み可能なファイルのコピーを開きます。ファイルを保存してテキスト・エディタを終了すると、ファイルはシステム管理者にメール送信されます（メール・アドレスは `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  invisible

### ファイルを処理するときの動作の指定

次の `DATA_ATTRIBUTES` フィールドは、おもにアプリケーション・プログラマが使用します。ユーザがさまざまなデスクトップ・アクティビティを実行したときのファイルの動作を指定します。

詳細については、開発者環境のマニュアルである 共通デスクトップ環境 プログラマーズ・ガイド を参照してください。

フィールド | 説明
`MOVE_TO_ACTION` | ディレクトリなどのコンテナに対して使用します。ファイルをこのデータ型のコンテナに移動したときに実行するアクションを指定します。
`COPY_TO_ACTION` | ディレクトリなどのコンテナに対して使用します。ファイルをこのデータ型のコンテナにコピーしたときに実行するアクションを指定します。
`LINK_TO_ACTION` | ファイルをこのデータ型のファイルにリンクしたときに実行するアクションを指定します。
`IS_TEXT` | このデータ型のファイルが、テキスト・ボックスに表示できるテキストを含むよう指定します。
`MEDIA` | 対応する ToolTalk メディア型を指定します。
`MIME_TYPE` | 対応する MIME 型を指定します。
`X400_TYPE` | 対応する X400 型を指定します。

## データ型のデータ基準の定義

`
DATA_CRITERIA` 定義は、オブジェクト型をファイルまたはディレクトリに割り当てるのに使用する基準を定義します。

使用できるオブジェクト型の基準は次のとおりです。

基準 | 説明
ファイル名 | ファイル名は指定したパターンに一致しなければなりません。`NAME_PATTERN` フィールドを使用します。
ファイル位置 | パスは指定したパターンと一致しなければなりません。`PATH_PATTERN` フィールドを使用します。
ファイル内容 | ファイル内容の指定した部分が指定したデータに一致しなければなりません。`CONTENT` フィールドを使用します。
ファイル・モード | ファイルは指定したアクセス権（読み取り、書き込み、実行、ディレクトリ）を所有しなければなりません。`MODE` フィールドを使用します。
シンボリック・リンク | リンク名はオブジェクトがリンクするファイルに基づきます。

ひとつのデータ型に２つ以上の基準を使用することができます。ただし、`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 データ型は、`*/projects/QS` というサブディレクトリにある `app` n`.c` (n は 1 から 9) という名前のすべてのファイルに適用されます。

      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` ディレクトリの `ch` nn`.`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` フィールドを使用して、必須アクセス権を指定します。

通常、モード基準は名前、位置、内容に基づいたデータ型作成の組み合わせで使用します。これらの基準によって、データ型をファイルまたはディレクトリに制限したり、必須の読み取り、書き込み、実行権を指定することができます。

`MODE` フィールドには、次の論理演算子および文字を指定できます。

演算子 | 説明
`!` | 論理演算子 NOT
`&` | 論理演算子 AND
| | 論理演算子 OR

文字 | 説明
`f` | ファイルだけに適用されるデータ型
`d` | ディレクトリだけに適用されるデータ型
`r` | 任意のユーザが読み取れるファイル
`w` | 任意のユーザが書き込めるファイル
`x` | 任意のユーザが実行できるファイル
`l` | リンクであるファイル
`u` | set-uid であるファイル
`g` | set-gid であるファイル

特定モードのデフォルトは、モードには関係ありません。

#### 例

- 次のモード・フィールドは、データ型を制限します。

  `f&!w` | 読み専用ファイル
  `!w` | 読み専用ファイルおよび読み専用ディレクトリ
  `f&x` | 実行可能ファイル
  `f&w&x` | 書き込み可能および実行可能ファイル
  x|!w | 実行可能ファイルまたは読み専用ファイル

- 次のデータ型定義は、読み専用で実行可能でないファイルのデータ型を作成します。ファイル名は、`*.doc` という命名規則にしたがっています。View アクションはデータ型に対して定義されているものとします。

      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 string string

- ファイルの数字内容については、次の構文を使用します。

      CONTENT starting_byte byte number
      CONTENT starting_byte short number
      CONTENT starting_byte long number

- ディレクトリの内容については、次の構文を使用します。

      CONTENT 0 filename “file_name”

  8進数（先頭が `0`）および16進数（先頭が `0X`）については、標準Ｃ表記を使用します。

内容に基づいたデータ型を作成すると、システム性能の速さが遅くなります。できるだけ、名前または位置に基づいたデータ型を使用してください。

たとえば、次のデータ型 Writable_Wingz は、ファイルの最初に `WNGZ` 文字列が入っていて書き込み権をもつすべてのファイルに適用されます。

    DATA_ATTRIBUTES Writable_Wingz
    {
     …
    }

    DATA_CRITERIA Writable_Wingz_Criteria
    {
     CONTENT               0 string WNGZ
     MODE                  w&!d
     DATA_ATTRIBUTES_NAME  Writable_Wingz
    }

### 独自の基準をもつデータ型を作成するには

いくつかの独自の基準をもつデータ型を作成できます。つまり、基準のいずれか（または両方）に一致した場合に、ファイルはデータ型に割り当てられます。

1. データ型の `DATA_ATTRIBUTES` 定義を作成します。

2. 各基準ごとに `
   DATA_CRITERIA` 定義を作成します。

   `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

### データ型をローカライズするには

1. 適切な言語依存ディレクトリ（`/etc/dt/appconfig/types/japanese`) にファイルを作成します。

2. データ型定義を言語に依存した構成ファイルにコピーします。

3. データ型定義のひとつ以上のフィールドをローカライズします。